# Native Scanner Live Acceptance - 2026-07-10 ## Ergebnis Die Artifact-first Scanner-Kette ist fuer den validierten Zustand `1920x1080`, 16:9, englische Artifact-Inventaransicht mit sichtbarer Detailkarte live abgenommen. Dev- und Packaged-Runtime nutzten denselben Runtime-Vertrag `2026-07-10-packaged-runtime-acceptance`. Alle Scans blieben read-only und liefen mit `persist=false`. Die Abnahme umfasst inzwischen auch das komplette OCR-bestaetigte Inventar: Run `20260710-223233` erfasste exakt 2.211 Artifacts ueber 70 Seiten. Der erste Parserstand verfehlte den Review-Grenzwert ehrlich; nach einer strukturell belegten +0-Korrektur reprozessierte das aktuelle Paket denselben vollstaendigen Corpus mit 136 Review (6,15%), 0 Fehlern und 0 Store-Writes. Der gespeicherte Run-Validator meldet 0 Issues. Der Scanner-Core darf damit in die naechste Produktphase uebergehen. Der strikte End-to-End-Zielwert von drei Artifacts pro Sekunde ist dagegen nicht erreicht und wird nicht behauptet. ## Live-Matrix | Runtime | Run | Ziel | Seiten | Reset | Capture | Capture/s | Processing | Processing/s | Review | Fehler | Store | | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | Dev | `20260710-102344` | 5 | 1 | 1.701 ms | 1.123 ms | 4,45 | 1.806 ms | 2,77 | 0 | 0 | 0 | | Dev | `20260710-102421` | 20 | 1 | 1.704 ms | 4.443 ms | 4,50 | 6.430 ms | 3,11 | 0 | 0 | 0 | | Dev | `20260710-102450` | 50 | 2 | 1.744 ms | 11.328 ms | 4,41 | 15.579 ms | 3,21 | 0 | 0 | 0 | | Dev | `20260710-102547` | 100 | 4 | 1.718 ms | 22.877 ms | 4,37 | 31.731 ms | 3,15 | 0 | 0 | 0 | | Packaged | `20260710-103736` | 5 | 1 | 1.702 ms | 1.162 ms | 4,30 | 1.801 ms | 2,78 | 0 | 0 | 0 | | Packaged streaming UI | `20260710-201614` | 20 | 1 | 1.701 ms | 4.486 ms | 4,46 | 8.032 ms | 2,49 | 0 | 0 | 0 | | Packaged full inventory | `20260710-223233` | 2.211 | 70 | 1.739 ms | 522.005 ms | 4,24 | 722.164 ms | 3,06 | 490* | 0 | 0 | `*` Der Vollinventar-Runner lehnte diesen ersten Endstand wegen 22,16% Review korrekt ab. Die anschliessende Reprozessierung mit dem reparierten aktuellen Parser verarbeitete 2.211/2.211 in 689.049 ms (3,21/s) und endete bei 136 Review (6,15%), 0 Fehlern, 0 Writes und 2.211 Results. Capture/Streaming und aktuelle Parserqualitaet sind damit als zwei explizite, gespeicherte Evidenzschritte akzeptiert; ein nachtraeglich behaupteter Ein-Pass-Lauf wird nicht erfunden. Die fruehere `1,77/s`-Aussage beschreibt ausschliesslich den historischen, seriellen Dev-100-Smoke: `100 / (24.623 ms Reset/Capture + 31.731 ms Batch-Processing)`. `native-live-smoke.ps1` wartete dort bewusst auf das Capture-Ende und startete erst danach den Processor. Die Zahl ist rechnerisch korrekt, aber keine aktuelle End-to-End-Messung der Streaming-Pipeline. Der erneute erhoehte Streaming-Livetest am 2026-07-11 (`20260711-090019`) lief dry mit 20/20 Capture, Parse und Resultaten, 0 Review, 0 Fehlern und 0 Writes. Das erste Resultat war sichtbar, bevor Capture endete. Die gemessenen Teilwerte waren `4,43 Capture/s` (`4.517 ms` active) und `7.668 ms` Processor-Laufzeit; die beobachtete Zeit vom Startrequest bis zur finalen Result-Reconciliation betrug `8.370 ms` (`2,39/s`). Diese kleine, clientseitige Beobachtung ist kein allgemeiner Durchsatzclaim, weil der gemeinsame Clock-Contract noch nicht als dauerhafter Run-Wert gespeichert wird. Bei ueberlappenden Phasen duerfen Capture- und Processing-Dauer nie addiert werden. Kuenftige End-to-End-Claims muessen Start, Capture-Start/-Ende, Processing-Start/-Ende und finale Result-Reconciliation auf einer gemeinsamen Wall-Clock belegen; Capture- und Processing-Raten bleiben getrennte Werte. Das 3/s-Gesamtziel ist weiterhin nicht bewiesen. ## Qualitaets- und Dateivertraege - Alle neuen 5/20/50/100-Runs hatten exakt so viele Jobs, PNGs, Klicks, verarbeitete Zeilen und geladene Results wie angefordert. - Jeder Job war an genau eine nichtleere `artifact-NNNN.png`, eine eindeutige Sequenz, den erwarteten absoluten Pfad und genau zwei Click-Events gebunden. - Der 100er verteilte sich auf `32/32/32/4` Captures ueber vier Seiten. - Der Validator fand im 100er keine PNG-Hash-Duplikatgruppen, keine komplett wiederholten Seiten und keine identischen Seiten-Grenzpaare. - Der Vollinventar-Run enthielt exakt 2.211 Jobs, PNGs und Results. Der letzte Job war Sequenz 2.211 auf Seite 70, Zeile 0, Spalte 2, passend zur partiellen Schlussseite nach 69 vollen 32er-Seiten. - Der gespeicherte Vollinventar-Validator fand zwar vier Gruppen identischer Einzel-Crops, aber keine wiederholten Seitenpaare und keine identischen Seiten-Grenzpaare; sein gesamter Run-Vertrag bestand mit 0 Issues. Identische Einzelkarten werden daher nicht mit einem haengenden Scroll verwechselt. - Der aktuelle Vollinventar-Replay ist ueber fuenf Wiederholungen deterministisch: 2.075 Results sind `evaluated`, 136 bleiben `review`, 0 sind `unknown`. 1.952 unterlevelte Results haben eine Projektion, 123 sind bereits komplett. - Fuenf Offline-Replays des neuen 100ers waren hashidentisch. Alle 100 Results waren `parsed` und `evaluated`; Scorebereich `76.1-92.5`, 0 Review, 0 unknown. - Die neuen 100 Artifacts waren alle +20, daher korrekt 0 offene Projektionen. Die Projektionslogik bleibt durch die vorhandene Offline-Evidenz fuer unterlevelte Artifacts abgedeckt. - Artifact-Store und `review-samples.jsonl` waren innerhalb jedes Dry-Runs vor und nach dem Scan bytegleich. Die Review-Datei blieb bei `83A222F49E7246054B16363C0CA7083168F7CE0AB595916313B44CB279BF9B8C`. ## Safety-Nachweise - Probe-Klick: Genshin-Fenster, erkanntes 4x8-Grid, sichtbare Detailkarte und geaenderter Detail-Fingerprint wurden vor dem breiten Lauf bewiesen. - Fokusverlust-Run `20260710-101820`: `blocked`, 0 Klicks, 0 Captures; der Helper refokussierte nicht automatisch. - Stop-Run `20260710-102735`: Stop waehrend des Initial-Resets nach `87 ms`, Status `stopped`, 0 Klicks, 0 Captures. - Foreground-HWND wird vor jedem Reset-/Scroll-Event, Klick und Crop-Capture geprueft. ESC, Enter, F9 und expliziter Stop bleiben auch im Reset aktiv. - Der vollstaendige Top-Reset bleibt auf 3.200 Events begrenzt, pausiert aber nur noch nach jeweils 39 Events. Live sank er dadurch von `50.698 ms` auf stabil rund `1.7 s`, ohne Guard oder Reichweite zu lockern. - Native Helper und PowerShell-Fallback erkennen nur die exakten Prozessnamen `GenshinImpact` oder `YuanShen` und validieren gecachte HWNDs erneut. Nachdem das Spiel waehrend der Reprozessierung extern geschlossen war, konnte die App sich dadurch nicht mehr selbst als Genshin-Ziel erfassen. Der finale No-Genshin-Smoke meldete `genshinFound=false`, HWND 0, leeren Zielprozess, keine Capture-Quelle und 0 Renderer-/Konsolenfehler. ## Packaged-Runtime - Start aus `%TEMP%`, `isDev=false`, Runtime und Helper-Guard beide `isElevated=true`. - Renderer wurde aus `resources/app.asar` geladen; relative Vite-Assets waren vorhanden. - Helper lief aus `resources/input-helper/InputHelper.exe`. - IK 6.7.0 wurde aus `resources/ik-inventorylists` geladen: 61 Sets, 289 Pieces. - Die Preload-Bridge stellte 36 erwartete Methoden bereit. - Vor dem neuen Scan wurde automatisch der neueste vollstaendige 100er geladen; neuere gestoppte oder unprozessierte Runs wurden korrekt ignoriert. - Der paketierte 5er lief ueber Renderer -> Preload -> IPC -> C# Helper und bestand Capture, Processing, Result-Load und Non-Persistence. - Finale Inventory-Ansicht: 5/5 geparst, 0 Review, 5 bewertet, `0 speicherbar - 5 im Store - 0 Review - 0 blockiert`. - Der aktuelle paketierte Renderer bestand zusaetzlich den echten Settings-UI-Pfad `Eigenes Limit -> Reihen -> 1`: das erkannte 8-Spalten-Raster ergab Ziel 8; Run `20260710-180851` endete mit 8/8 Captures, 8/8 Processing, 8/8 Parsing, 0 Review, 0 Fehlern und `persist=false`. Der Top-Reset brauchte 1.715 ms. Zwei vorherige Vordergrundverluste blockierten sicher mit 0 Klicks. - Der echte Settings-UI-Streamingpfad mit Artifact-Limit 20 bewies die Phasenueberlappung: waehrend der Helper noch `running` meldete, waren bereits 11 Ergebnisse komplett geparst, bewertet und in der Rail sichtbar. Neue Karten verwendeten die konfigurierte Slide-in-Mountanimation. Final standen 20 eindeutige Sequenzen 1-20, 20 evaluierte Results, 0 Review, 0 Fehler und 0 Persistenzwrites. Der Dokument-Viewport blieb 1304x821 ohne Overflow; die Ergebnis-Rail scrollte intern. - Der Vollinventar-Settings-Pfad las als Ziel ausschliesslich den aktuellen OCR-Besitzwert 2.211, nie die Kapazitaet. Capture erreichte 2.211/2.211 auf 70 Seiten, waehrend der laufenden Erfassung waren bereits bis zu 1.656 Result- Rows und 1.659 Auswertungen sichtbar, alle 2.211 Zeilen standen am Ende in der Rail, die Slide-in-Mountanimation wurde beobachtet und der 1304x821-Dokument- Viewport blieb ohne Overflow. - Das paketierte `reprocess-run`-Gate reprozessierte denselben Corpus mit dem aktuellen Parser vollstaendig und non-persistent: 2.211 processed/parsed, 136 Review, 0 Fehler, 0 gespeichert, 2.211 Result-Eintraege. Lokale Evidenz zum Abnahmezeitpunkt: Die folgenden Pfade bezeichneten temporaere lokale Testartefakte. Sie wurden bei der angeforderten Workspace-Bereinigung am 2026-07-11 entfernt; die oben dokumentierten Run-IDs, Messwerte und Vertragspruefungen bleiben der dauerhafte Nachweis. - `outputs/offline-acceptance/offline-acceptance-report.json` - `outputs/packaging/offline-package-report.json` - `outputs/native-live-smoke/20260710-102341/` - `outputs/native-live-smoke/20260710-102418/` - `outputs/native-live-smoke/20260710-102447/` - `outputs/native-live-smoke/20260710-102544/` - `outputs/native-replay/saved-native-validation-report.json` - `outputs/packaged-live/packaged-final-scan5.json` - `outputs/packaged-live/packaged-final-inventory-fixed.json` - `outputs/packaged-live/packaged-final-inventory-fixed.png` - `outputs/packaged-live/final-artifact-probe.json` - `outputs/packaged-live/final-ui-row1-pass.json` - `outputs/packaged-live/final-ui-row1-pass.png` - `outputs/packaged-live/streaming-ui-20.json` - `outputs/packaged-live/streaming-ui-20.png` - `outputs/packaged-live/streaming-ui-20-results-view.json` - `outputs/packaged-live/streaming-ui-20-results-view.png` - `outputs/full-inventory-phase/packaged-preflight-restored.json` - `outputs/full-inventory-phase/packaged-ui-full-inventory.json` - `outputs/full-inventory-phase/packaged-ui-full-inventory.png` - `outputs/native-review-analysis/20260710-223233/native-review-analysis.json` - `outputs/full-inventory-phase/packaged-reprocess-2211.json` - `outputs/full-inventory-phase/packaged-reprocess-2211.png` - `outputs/full-inventory-phase/packaged-no-genshin-safety.json` - `outputs/full-inventory-phase/packaged-no-genshin-safety.png` ## Waehrend der Abnahme behobene Fehler 1. Eigene App-Titel mit `Genshin` konnten als Capture-Quelle erscheinen. 2. Dev-Cleanup konnte den Codex-CUA-Node allein wegen seines Working Directory als alte App-Instanz klassifizieren. 3. Native Runs starteten nicht garantiert am Inventaranfang und prueften den Foreground nicht waehrend jedes Input-Schritts. 4. Der sichere Initial-Reset dauerte wegen Windows-Timer-Rundung etwa 50 s. 5. Smoke-Gates akzeptierten zu schwache Summen-/Cleanup-Vertraege. 6. Run-Aufloesung konnte ohne explizites `runDir` unvollstaendige Runs waehlen. 7. Packaged Runtime-Pfade und absolute Vite-Assets konnten durch das Repo-CWD kaschiert werden. 8. Helper-Guard verlor das echte Elevation-Signal. 9. Inventory-Metriken lagen wegen einer impliziten dritten Grid-Zeile ueber der View; ein Store-Duplikat mit unsicherem optionalem Feld erschien irrefuehrend als Promotion-Review. 10. Capture und Auswertung liefen seriell; die Result-Rail blieb bis zum Ende leer. Der Processor tailt jetzt JSONL, ist pro Run single-flight, liefert Sequenz-Deltas und reconciled vor dem Abschluss den Vollbestand. 11. Vier-Substat-+0-Fuenfsterne wurden wegen OCR-unsicherem Main Value uebermaessig in Review geschickt. Nur die strukturell eindeutige Kombination `level === 0` plus vier Substats erhaelt jetzt den kanonischen Fuenfsterne- Startwert; Drei-Substat-Faelle bleiben absichtlich unsicher. 12. Eine breite Prozessnamensuche konnte die eigene App als Genshin erkennen. Exakte Allowlist und gecachte-HWND-Revalidierung schliessen dieses Ziel aus. 13. Die Scan-Zusammenfassung addierte Capture- und Processing-Zeit trotz echter Ueberlappung. Sie verwendet jetzt die groessere Wall-Clock-Zeit. ## Offene Grenzen und naechste Phase - Aktiv bleibt nur Artifact-Scanning. Weapons, Materials und Character Details sind weiterhin Katalogdaten, keine Scannerfeatures. - Nicht-16:9, andere Sprachen und ungewoehnliche UI-Zustaende bleiben bewusst blockiert, bis eigene Profile live validiert sind. - Der Renderer-Chunk von rund 586 kB und das Default-Electron-Icon sind nicht-blockierende technische/cosmetische Arbeit. - Eine echte Review-Korrektur oder Promotion wurde nicht absichtlich in den Store geschrieben. Die statischen und Main-Process-Gates bestehen; der Mutation-Pfad bleibt ein separater, explizit bestaetigter QA-Fall. - Die damals verbliebenen 136 Review-Faelle des kompletten Corpus waren der naechste Scanner-Qualitaetsbestand. Sie wurden am 2026-07-11 visuell gegen die gespeicherten Crops auditiert: 128 sind explizite 1–4★-Ausschluesse, sechs belegen die exakte doppelte Dezimalpunkt-Korrektur, ein Fall erhielt eine slot-sichere Namensaufloesung und ein unvollstaendiger Crop bleibt bewusst `Review`. Details stehen in `LOCALIZATION_LOCAL_DELETION_TIMING_CHECKPOINT_2026-07-11.md`; neue Fälle werden weiterhin nicht automatisch als sauber umetikettiert. Die score-freie Grundlage von `build-fit-contract-v1` ist inzwischen implementiert: gesourcte Eingaben, OCR-/Review-Gates, Set-/Mainstat-/Substat- Regeln, Gesamtziele und Konflikte sind versioniert, waehrend echte lokale Snapshots keine Legacy-Demo-Empfehlungen mehr erzeugen. Der deterministische Fuenfer-Verifier prueft inzwischen Slot-/Set-Form, verschachtelte Gates, gesourcte Gesamtwerte und Konflikte, bleibt aber score-frei. Ein erster enger Furina-`Luna II`-Candidate ist samt IK-Key- und Kontext-Fixtures versioniert. Vor sichtbaren charakterbezogenen Empfehlungen fehlen weiterhin breitere Profile, eine validierte Rangfolge und weitere Golden Fixtures fuer sichere sowie adversarielle Eingaben. Das ist jetzt die aktive Produktphase.