feat(scanner): complete localized artifact quality checkpoint

This commit is contained in:
AzuTear
2026-07-11 15:59:19 +02:00
parent 639b0b7f59
commit 8b9f948c6b
215 changed files with 35440 additions and 7273 deletions
+174 -152
View File
@@ -1,173 +1,195 @@
# Scanner Rework Status
Updated: 2026-07-09
Updated: 2026-07-11 after the 2,211-Artifact full-inventory acceptance,
review-gate correction, strict game-process targeting, and the offline-tested
Build-Fit evidence-ranking checkpoint
Short current-state entry point: [CURRENT_STATUS.md](CURRENT_STATUS.md).
Detailed evidence:
[NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md](NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md).
## Was Es Kann
- Native IK-Erfassung ist als neuer schneller Pfad verdrahtet: Electron/React
starten und zeigen Status, der C# Helper prueft IK-Listen, fokussiert Genshin,
klickt das 16:9 8x4 Grid, scrollt und schreibt Detailkarten-Crops.
- IK `inventorylists` aus Inventory Kamera 1.4.4 sind 1:1 unter
`data/ik-inventorylists` uebernommen und werden in Builds als Resource
mitgeliefert. Der Helper meldet Version `6.7.0` mit `61` Artifact-Sets,
`289` Artifact-Pieces, `247` Waffen, `119` Charakteren und `715` Materialien.
- Jeder native Run legt `manifest.json`, `capture-jobs.jsonl` und `status.json`
im Run-Ordner an. Damit kann OCR/Parsing als nachgelagerte Queue laufen,
ohne den Capture-Loop wieder in React/Electron zu ziehen.
- Nach einem nativen Run kann die App `capture-jobs.jsonl` nachgelagert
verarbeiten und `scan-results.json` plus `processing-report.json` schreiben.
`scan-results.json` enthaelt dauerhafte Ergebnis-Eintraege mit
Extraction-Status, Review-Zustand und bewusst deferierter Value-Auswertung.
Diese Stufe OCRt/parst nach der Erfassung, matched native Artifact-Ergebnisse
gegen IK `inventorylists`, zwingt IK-Konflikte in Review, verarbeitet Crops
ueber eine bounded Queue, schreibt Parser-Feldconfidence in die Resultate und
persistiert standardmaessig noch nicht in die DB.
- Smart Capture reads the current artifact detail view through focused 16:9
crops, OCR preprocessing, deterministic parser matching, and local lookup data.
- Visible-inventory auto-scan is the production baseline: preflight, grid
detection, focus, click, detail verification, OCR, parse, store/review, scroll,
and summary.
- The current live path has completed a 100-artifact run with `100/100` verified
and parsed, `98` stored, `2` duplicates, `0` review samples, `0` misses, and
`393 ms/artifact`.
- Native IK live smoke passed on 2026-07-09 with runtime signature
`2026-07-09-native-ik-visual-probe`: visual preflight ready, guarded probe
changed the detail panel, `2/2` native artifact card crops captured,
post-capture processing parsed `2/2`, `0` review, `0` errors, and
`queueConcurrency: 2` without persisting to the artifact store.
- Native 20/50/100 dry validation also passed in the same live session. The
100-item run captured and parsed `100/100` across 4 pages with `0` errors,
`3` correctly gated Review results, and `0` store writes. See
`docs/NATIVE_SCANNER_VALIDATION_2026-07-09.md`.
- Stored artifacts, review samples, local text replacements, GOOD-compatible
import/export, scanner diagnostics, and OCR eval are implemented.
- The scan page now has a compact `Letzte Ergebnisse` rail. It uses the latest
native `scan-results.json` entries after post-processing and falls back to
newest stored artifacts when no native run result is loaded. Rail rows open
the Inventory surface for detail inspection.
- The app now has an `Inventory` navigation view for browsing native scan
result entries, stored artifacts, and snapshot fallback rows with filters,
sorting, a detail panel, and native crop previews loaded from the scan run
directory. The same view is now scoped to Artifact scanning: it shows IK
Artifact set/piece coverage, a Native Artifact pipeline strip for capture,
post-processing, review, promotion, and evidence, plus a per-result
`Naechster Schritt` panel. Weapons, materials, and character details remain
loaded data only and are intentionally hidden from the active feature UI while
they are not scanned.
- The live-soak runner writes JSON/CSV evidence bundles and validates quality via
`scan-performance-assessment.json`.
- Der native Artifact-Scanner setzt das 2.400-Slot-Inventar begrenzt an den
Anfang, erfasst ein validiertes 4x8-Grid ueber mehrere Seiten und streamt
jeden Crop direkt in vier begrenzte OCR-/Parse-/Evaluierungsworker.
- Genshin-HWND, Stop-Signale und Input-Erfolg werden vor jedem relevanten
Wheel-, Klick- und Capture-Schritt geprueft. Fokusverlust refokussiert nicht.
- Die frische Live-Kette `5/20/50/100` bestand mit 0 Review, 0 Fehlern und
0 Store-Writes. Der 100er `20260710-102547` erreichte 4,37 Captures/s und
3,15 verarbeitete Results/s.
- Gespeicherte Runs werden auf exakte Jobs/PNGs/Results, Sequenzen, Pfade,
Click-Events, Seitenwiederholung, PNG-Hashes und Replay-Determinismus geprueft.
- Inventory zeigt Native- und Store-Zeilen mit getrennten Signalen fuer
Extraktion, Review, IK, Roll-Efficiency, Promotion und spaeteren Build-Fit.
- Die unpacked App ist aus `%TEMP%` live gestartet. Renderer, Preload, IPC,
paketierter C#-Helper und IK 6.7.0 funktionierten; der paketierte 5er
`20260710-103736` bestand ohne Persistenz.
## Was Zuletzt Gemacht Wurde
- Der aktive UI-Scope wurde auf Artifact scanning begrenzt.
- Waffen, Materialien und Charakterdetails bleiben als vendored IK-Daten
vorhanden, werden aber nicht mehr als aktive Scanner-Features in der
Inventory UI dargestellt.
- Die Inventory UI zeigt jetzt eine Native Artifact Pipeline:
Scope, Native Capture, OCR Queue, Review Gate, Promotion und Evidenz.
- Native Ergebnislabels wurden geschaerft:
`Geparst` bedeutet extrahiert, `Stored` bedeutet persistiert, `Review`
bedeutet unsicher und `Wert offen` bedeutet bewusst noch nicht bewertet.
- Native Artifact Details zeigen jetzt einen `Naechster Schritt`:
Promotion bereit, Review zuerst, bereits im Store, blockiert oder Wert spaeter.
- Inventory Filter wurden um native Ergebnisse und speicherbare Ergebnisse
erweitert.
- Ein ausgewaehltes, sauberes natives Ergebnis kann jetzt nach einer zweiten
UI-Bestaetigung promotet werden. Der Main-Prozess validiert die autoritative
Run-Datei erneut, prueft Store-Duplikate, schreibt den Store, aktualisiert
`scan-results.json` und protokolliert in `promotion-log.jsonl`.
- Native Review-Ergebnisse koennen direkt im Inventory anhand des Crops editiert,
gegen IK, kanonische Main-Werte und legale Substat-Rolls validiert sowie
freigegeben oder abgelehnt werden. Freigaben aktualisieren `scan-results.json`,
schreiben `review-log.jsonl` und erzeugen einen normalen Eval-Review-Sample.
- Projekt-, Roadmap-, Architektur-, Runbook- und Checklist-Doku wurden auf
Artifact-only Scope nachgezogen.
- Capture-Quellenklassifizierung schliesst die eigene App trotz `Genshin` im
Titel aus.
- Dev-Cleanup beendet nur echte Repo-Vite/Electron/Helper-Prozesse und nicht
mehr den Codex-CUA-Node.
- Native Runs starten immer mit einem begrenzten Top-Reset und pruefen den
Foreground vor jedem Input/Capture. Reset-Pacing senkte die Live-Zeit von
50,7 s auf rund 1,7 s.
- Der Smoke-Gate prueft exakte Counts, Dateivertraege, Reviewrate,
Non-Persistence und bestaetigten Stop-Cleanup.
- Run-Aufloesung waehlt nur den neuesten vollstaendigen Run; gestoppte oder
unprozessierte Runs ersetzen die Inventory-Evidenz nicht.
- Packaged Pfade verwenden `resourcesPath`, Vite relative Assets und eine
verifizierte Runtime-Signatur.
- Elevation wird sowohl im Runtime- als auch im Helper-Guard korrekt angezeigt.
- Inventory-Layout und Promotion-Duplikatstatus wurden im finalen Paket visuell
korrigiert und abgenommen.
- Der aktuelle Renderer-Stand setzt den Scanumfang standardmaessig auf die
erkannte Besitzanzahl und bietet optional ein Artifact- oder Reihenlimit. Die
linke Hauptflaeche uebernimmt den Lauf-Fortschritt; die separate
Fortschrittskarte entfaellt und die Ergebnisleiste startet sitzungsleer.
- Der bestehende gebundene Wheel-Top-Reset bleibt Produktionsstandard. Ein
`B`-Reopen mit Artifact-Tab ist nur eine spaeter live zu benchmarkende
Alternative, nicht Teil des aktuellen Produktionspfads.
- Ein realer Settings-UI-Lauf mit Artifact-Limit 5 bestand Genshin-, Detail-
und Grid-Preflight. Ziel/Capture/Processing/Parsing endeten bei 5/5,
Review/Fehler bei 0, `persist=false`; die sitzungsgebundene Ergebnisleiste
zeigte alle 5 Resultate.
- Der paketierte Settings-UI-Reihenlauf `20260710-180851` loeste eine Reihe
ueber das erkannte 8-Spalten-Raster zu Ziel 8 auf. Capture, Processing und
Parsing endeten bei 8/8, Review/Fehler bei 0 und der Top-Reset bei 1.715 ms.
Zwei Fokusverlust-Versuche blockierten vorher korrekt mit 0 Klicks.
- Der paketierte Streaming-Lauf `20260710-201614` startete Processing beim
ersten verfuegbaren Run-Verzeichnis. Noch waehrend Capture `running` war,
zeigte die Session-Rail bereits 11 ausgewertete Ergebnisse. Final waren
Capture/Processing/Parsing/Evaluation 20/20, Review/Fehler/Store-Writes 0;
alle Sequenzen 1-20 waren eindeutig und chronologisch sichtbar.
- Die Scanner-Hierarchie nutzt jetzt mehr Breite fuer die sitzungsgebundenen
Ergebnisse als fuer Guide/Capture. Scanbereitschaft und Live-Auswertung sind
kompakte Statusleisten statt verschachtelter Karten.
- Scanumfang, Aufnahmequelle und manuelle Werkzeuge liegen in einem
fokusgefangenen `Scanoptionen`-Modal und verschieben den Arbeitsbereich nicht
mehr. Collection-Pipeline-Details im Inventory liegen ebenfalls in einem
Modal; Diagnose-Import/-Export ist standardmaessig eingeklappt.
- Der frisch paketierte UI-Lauf `20260710-214406` bestaetigte die neue
Hierarchie erneut live: 20/20 Capture, Processing, Parsing und Evaluation,
0 Review/Fehler/Store-Writes, bis zu 9 sichtbare Ergebniszeilen und 12 bereits
ausgewertete Resultate waehrend Capture noch lief. Der erste Startversuch
blockierte korrekt an der doppelten Detailkarten-Pruefung; nach stabiler
Detailkarte lief derselbe begrenzte Pfad durch.
- `build-fit-contract-v1` trennt gesourcte Character-/Zielregeln,
Set-Pfade, Main-Stat-Prioritaeten, Substat-Gewichte, Gesamtziele, Konflikte
und Profil-Ablaufdaten von OCR und Roll-Efficiency. Unsichere oder nicht
kanonische Scanergebnisse blockieren; V1 gibt absichtlich noch keinen
Fit-Score aus.
- Reale lokale Account-Snapshots rufen den alten Demo-Scorer nicht mehr auf.
Der getrennte `build-fit-evidence-ranking-v1` liest stattdessen nur den
neuesten vollstaendigen nativen Run und kann bis zu drei read-only
Profilvorschlaege ausgeben.
- Der score-freie Fuenfer-Verifier prueft genau einen Eintrag pro Slot,
vollstaendige Set-Formen, verschachtelte OCR-/Review-Gates, Konflikte und
optional gesourcte Gesamtwerte. Fehlender Nicht-Artifact-Kontext bleibt
`pending` und wird nicht geraten.
- Der Profil-Corpus umfasst Furina Off-field/Solo Hydro C0-C1, Neuvillette
Charged Attack, Raiden Off-field Hyperbloom und Nahida Off-field Deepwood.
Jede Regel ist quellen-/versions-/ablaufgebunden, gegen reale IK-6.7.0-Keys
geprueft und durch Golden plus adversarial Fixture abgesichert.
- Die sichtbare Regelabdeckung kombiniert nur Set-Form, Main-Stat-Prioritaet
und dokumentierte Substat-Praesenz. Roll-Efficiency, Rollhoehe und OCR-
Confidence sind keine Rankinggewichte; Charakterbesitz, Team, Waffe und
Rotation werden nicht geraten. Furinas ER-Kontext ist nur explizit und
sitzungsgebunden bestaetigbar.
- Der reale Vollinventar-Lauf `20260710-223233` nahm den OCR-Besitzwert 2.211,
erfasste exakt 2.211 Karten auf 70 Seiten mit 4,24/s und schrieb nichts in
den Store. Die aktuelle paketierte Reprozessierung erreichte 2.211/2.211,
136 Review (6,15%), 0 Fehler und 0 Writes; der Saved-Run-Validator meldet
`issues=0`.
- Der erste Parse desselben Laufs wurde bei 490 Review (22,16%) korrekt nicht
akzeptiert. 360 widerspruechliche `+0`-Main-Values werden jetzt nur dann aus
der kanonischen 5-Sterne-Tabelle repariert, wenn vier Anfangs-Substats die
Seltenheit strukturell beweisen; Drei-Substat-Faelle bleiben Review.
- Native Helper und PowerShell-Fallback akzeptieren nur noch die exakten
Prozessnamen `GenshinImpact` oder `YuanShen`. Bei geschlossenem Spiel bestand
der Package-Smoke mit `genshinFound=false`, HWND 0 und leerem Zielprozess.
## Was Noch Nicht
- Native IK-Erfassung captured aktuell Karten-Crops; OCR/Parser laufen erst
nachgelagert ueber den Processor. GOOD-Speichern und Evaluierung laufen noch
nicht automatisch im nativen Pipeline-Nachgang.
- Native IK-Erfassung ist aktuell auf das sichtbare 16:9 Artifact-Inventar
begrenzt.
- The result rail is still a foundation: it can show native `scan-results.json`
entries after post-processing, but does not yet calculate or show real value
scores.
- The inventory browser is still a foundation: value scoring and richer
review/edit flows are not complete.
- Upgrade projection and build recommendations should wait until inventory and
detail evaluation have trustworthy stored artifacts.
- Repeatability across later sessions, more accounts, more locked/equipped
combinations, and more confirmed OCR corpus cases still needs growth.
- The strict `333 ms/artifact` budget for 3 artifacts/second is not proven.
- Weapons, materials, and character details are intentionally out of active
scope until their values are actually scanned.
- Roll-Efficiency ist weiterhin kein Build-Fit. Die offline getestete Builds-
Oberflaeche ist keine Optimizer- oder DPS-Aussage und wurde noch nicht als
frischer paketierter Renderer-Fall live abgenommen.
- Weapons, Materials und Character Details bleiben ausserhalb des aktiven
Scanner-Scope.
- Andere Aufloesungen, Seitenverhaeltnisse und UI-Sprachen haben noch kein
live validiertes Profil.
- Batch-Review/-Promotion und automatische Store-Persistenz bleiben aus.
- Der absichtlich schreibende Review-/Promotion-Pfad wurde nicht live
ausgefuehrt; er bleibt zustimmungspflichtige separate QA.
## Wo Es Noch Probleme Macht
- Die native Pipeline hat jetzt 20/50/100-Skalenevidenz aus einer Live-Session.
Spaetere Session-Repeatability und Packaged-App-Evidenz stehen noch aus.
- Capture roundtrip and OCR remain the main timing costs in the 100-artifact
path.
- Auto-scan still requires a visible artifact inventory detail card for the
production path; broader auto-entry modes remain dev experiments.
- OCR/parser quality is good on the confirmed corpus, but review samples must be
manually labeled before they can become permanent eval ground truth.
- Non-16:9 or unusual game layouts are intentionally higher risk and should
block or fall into review instead of silently scanning.
- The UI now labels these risks in the Artifact Inventory pipeline. Same-session
scale is proven, but external-tool parity and later-session repeatability are
intentionally not claimed.
- Die fruehere `1,77/s`-Zahl ist nur der historische serielle 100er-Smoke:
Capture/Reset und danach Batch-Processing wurden addiert. Sie darf nicht als
aktuelle Streaming-End-to-End-Rate gelesen werden. Der dry Streaming-20er
`20260711-090019` lief 20/20 mit 0 Review/Fehlern/Writes, lieferte das erste
Ergebnis vor Capture-Ende, mass `4,43 Capture/s` und beobachtet `2,39/s`
vom Startrequest bis zur Result-Reconciliation. Der gemeinsame Clock-Contract
ist jetzt persistiert: der aktuelle 50er `20260711-154827` bestand mit
50/50 Capture/Parse/Results, 0 Review/Fehler/Writes und `28.022 ms`
Request-to-Reconciliation (`~1,78/s`). Der 3/s-Gesamtclaim bleibt offen.
- Neue OCR-Zustaende koennen weiterhin Review ausloesen; das ist ein sicherer
Fallback, kein Grund die Plausibilitaetsgates zu lockern.
- Der Renderer hat weiter einen nicht-blockierenden ~630-kB-Chunk.
- Die neuen Live-Artifacts waren alle +20, deshalb entstand kein neuer echter
Under-Level-Projektionsfall.
- Ohne plausiblen OCR-Wert fuer die aktuelle Besitzanzahl blockiert der
Full-Inventory-Lauf absichtlich; Kapazitaet darf das Ziel nicht ersetzen und
der native Helper erkennt das Listenende noch nicht verlaesslich selbst.
## Was Noch Verbesserungsfaehig Ist
- Repeat the bounded 20/50/100 native runs in a later session and in a packaged
app to verify that the current post-capture queue remains repeatable.
- Keep native persistence explicit: clean selected results can be promoted
after confirmation, while uncertain results must pass single-item review.
- Finish value scoring and value-reason contracts in the existing detail view from
`docs/scanner-results-inventory-roadmap.md`.
- Keep diagnostics available but out of the primary scan surface.
- Continue expanding confirmed OCR eval cases from real review samples. The
first three native Review cases are corrected, approved, and permanent
regression cases.
- Add artifact value/detail evaluation without collapsing extraction confidence
and artifact value into one ambiguous status.
- Continue performance work only when it reduces capture/OCR overhead without
weakening review, miss, duplicate, or safety gates.
1. Die Builds-Oberflaeche hat nun eine gebaute Renderer-Abnahme fuer frisches
Englisch, Deutsch-Umschaltung, Kontext, Fokus und Overflow bestanden. Ein
elevated Paket-Start bleibt nur fuer einen gesonderten Runtime/UAC-Claim
offen; der frische native 50er-Smoke bestand als Scanner-Release-Gate.
2. Profilquellen vor Ablauf erneuern und jedes weitere Profil wieder mit
Golden-/adversarial Fixtures absichern.
3. Die verbleibenden 136 Review-Faelle nur nach visueller Crop-Bestaetigung in
Parser-Corpus oder Lernregeln uebernehmen.
4. Result-Klarheit und explizite Mutation-QA weiter staerken.
5. Erst nach eigenen Quellen fuer Charakterbesitz, Team, Waffe und Rotation
eine breitere Optimizer- oder Empfehlungsphase erwägen.
## Was Als Naechstes Ansteht
## Aktueller Nachweis
1. Artifact Value Evaluation ergaenzen, aber erst nach sauberer Extraktion und
weiterhin getrennt von OCR/Parser-Confidence.
2. Detail-Ansicht um Value-Gruende und optionale Upgrade-Projektion erweitern.
3. Packaged-App-Verhalten fuer Helper, IK-Listen, Preload-Bridge,
Crop-Preview und Smoke-Kommandos pruefen.
4. Empfehlungen und Build-UX erst danach wieder nach vorne ziehen.
## Current Validation Commands
```powershell
npm run scan:live:preflight
npm run scan:iterate:validated
npm run scan:goal:validated
npm run scan:repeatability:wait
npm run scan:assessment:validate -- --latest --summary
npm run eval
npm test
npm run build
```
Latest static validation after the Artifact-only Inventory UI update:
```powershell
npm run lint # passed
npm test # passed, 252 tests
npm run build # passed
git diff --check
```
`git diff --check` passed with existing CRLF warnings for
`electron/services/inputHelperPowerShellFallback.ts` and `src/styles/base.css`.
- `npm run acceptance:offline`: PASS
- `npm test`: 444/444 in 72 Dateien
- `npm run acceptance:offline`: final PASS nach Lokalisierung, lokaler
Loeschung, Timing, Korpus und UI-Acceptance-Runner; Package-Verifier 27/27
- Build-Fit-Ranker/Kontext/Profile: offline PASS; gebaute Renderer-UI PASS,
aber kein elevated Paket- oder neuer nativer Live-Claim
- `npm run package:verify`: 27/27
- `npm audit` und `npm audit --omit=dev`: 0 Findings
- Dev live: 5/20/50/100 PASS
- Settings UI live: Artifact-Limit 5, 5/5 Capture/Processing/Parsing,
0 Review/Fehler, `persist=false`, Ergebnisleiste 5 PASS
- Packaged Settings UI live: Reihenlimit 1 -> Ziel 8, 8/8
Capture/Processing/Parsing, 0 Review/Fehler, `persist=false` PASS
- Packaged Settings UI streaming: Artifact-Limit 20, maximal 11 Live-Resultate
waehrend Capture, final 20/20, 0 Review/Fehler/Writes PASS
- Packaged UI-Dichteabnahme `20260710-214406`: maximal 9 sichtbare Resultate
und 12 Evaluierungen waehrend Capture, final 20/20, 0 Review/Fehler/Writes;
Ergebnisflaeche 634 px bei 1304x821 ohne Dokument-Overflow PASS
- Packaged Full Inventory `20260710-223233`: OCR-Ziel/Capture/Results
2.211/2.211, 70 Seiten, 4,24 Capture/s, aktueller Package-Reprocess
2.211/2.211 mit 136 Review (6,15%), 0 Fehler/Writes; Saved-Run-Validator
2.075 evaluated, 0 unknown, `issues=0` PASS
- Packaged No-Genshin Safety: `genshinFound=false`, HWND 0, leerer
Zielprozess, keine Capture-Quelle und 0 Renderer-Fehler PASS
- Packaged live: Start/Bridge/Resources/Inventory und nativer 5er PASS
- Finale visuelle Evidenz:
`outputs/ui-qa/final-scan.png`, `outputs/ui-qa/final-scan-settings.png`,
`outputs/ui-qa/final-inventory.png` und die weiteren `final-*.png`-Ansichten
unter `outputs/ui-qa/`.
sowie `outputs/packaged-live/streaming-ui-20-results-view.png`
(temporäre lokale Dateien zum Abnahmezeitpunkt; bei der angeforderten
Workspace-Bereinigung am 2026-07-11 entfernt).