docs: update scanner roadmap after merge

This commit is contained in:
AzuTear
2026-07-09 08:53:57 +02:00
parent c025daa4f1
commit 13fd46c104
5 changed files with 94 additions and 46 deletions
+10 -3
View File
@@ -223,9 +223,8 @@ Latest live timing evidence on 2026-07-08:
`elapsedMs: 63616` because 50 single-record writes produced `elapsedMs: 63616` because 50 single-record writes produced
`writeFlushMs: 8163`. `writeFlushMs: 8163`.
- Current source replaces that experiment with batch persist and quiet - Current source replaces that experiment with batch persist and quiet
auto-scan UI captures. This is code-validated, but the batch version still auto-scan UI captures. Later direct-GDI live runs validated the batch/quiet
needs a fresh elevated live run; the follow-up restart was blocked because the path at limits 20, 45, and 100 with 0 misses in the current environment.
admin runtime did not become reachable after shutdown/UAC.
- Direct GDI hot-path validation: - Direct GDI hot-path validation:
after skipping `desktopCapturer.getSources()` in auto-scan artifact captures, after skipping `desktopCapturer.getSources()` in auto-scan artifact captures,
the 20-artifact iteration baseline improved to `20/20` parsed, `19` stored, the 20-artifact iteration baseline improved to `20/20` parsed, `19` stored,
@@ -248,6 +247,14 @@ Latest live timing evidence on 2026-07-08:
- OCR/parser eval after this speed pass: `npm run eval` passed with `23/23` - OCR/parser eval after this speed pass: `npm run eval` passed with `23/23`
exact-match cases, `100%` field accuracy, and `100%` critical fields. This is exact-match cases, `100%` field accuracy, and `100%` critical fields. This is
a regression gate, not a substitute for manually checking live artifact values. a regression gate, not a substitute for manually checking live artifact values.
- Ownership and lock proof on 2026-07-09:
`/scanner/start?entry=visible-inventory&limit=20&engine=current` completed
`20/20` verified and parsed, `19` stored, `1` duplicate, `0` review, and
`0` misses in `8047 ms`. Smart Capture parsed equipped footers for `Citlali`
and `Linnea`, reported an unlocked artifact as `locked: false`, then reported
a visibly locked artifact as `locked: true` with `lockSignal.ratio:
0.14797913950456323` over threshold `0.06`. A follow-up bounded scan
persisted that locked artifact with `equipped: "Citlali"` and `locked: true`.
- 3 artifacts/second preparation: - 3 artifacts/second preparation:
auto-scan artifact captures now also omit the detail-preview payload and auto-scan artifact captures now also omit the detail-preview payload and
expose `averageCaptureRoundTripMs` plus expose `averageCaptureRoundTripMs` plus
+12 -8
View File
@@ -1,9 +1,12 @@
# Merge Readiness # Scanner Merge Evidence
Current branch: `codex/ik-scanner-progress` Merged branch: `codex/ik-scanner-progress`
Target branch: `main`
Merge commit: `c025daa`
Merged on: 2026-07-09
This checklist records the evidence needed before merging this scanner branch This document records the evidence used to merge the scanner branch into
into `main`. It separates merge-relevant proof from optional follow-up work. `main`. It separates the merge-relevant proof from optional follow-up work.
## Merge-Relevant Evidence ## Merge-Relevant Evidence
@@ -51,8 +54,9 @@ lock-state fix.
winner; the assessment self-test is a synthetic validator fixture, not a live winner; the assessment self-test is a synthetic validator fixture, not a live
winner claim. winner claim.
## Merge Recommendation ## Merge Result
Ready for final human diff review and then merge into `main`. The previously Merged into `main` and pushed to `origin/main` on 2026-07-09. The previously
open `locked: true` proof now passes for both Smart Capture and auto-scan open `locked: true` proof passed for both Smart Capture and auto-scan
persistence. persistence before merge. The feature branch was deleted locally and remotely
after the merge.
+51 -27
View File
@@ -5,14 +5,14 @@ This document is the source of truth for project intent, scope, runtime facts, a
For implementation structure, see [ARCHITECTURE.md](ARCHITECTURE.md). For engineering standards, see [CONVENTIONS.md](CONVENTIONS.md). For implementation structure, see [ARCHITECTURE.md](ARCHITECTURE.md). For engineering standards, see [CONVENTIONS.md](CONVENTIONS.md).
For the latest Inventory-Kamera comparison work, see For the latest Inventory-Kamera comparison work, see
[scanner-ik-progress-report.md](scanner-ik-progress-report.md). [scanner-ik-progress-report.md](scanner-ik-progress-report.md).
For the current branch merge checklist, see [MERGE_READINESS.md](MERGE_READINESS.md). For the 2026-07-09 scanner merge evidence, see [MERGE_READINESS.md](MERGE_READINESS.md).
## Project Identity ## Project Identity
| Field | Value | | Field | Value |
| --- | --- | | --- | --- |
| Project name | Genshin Artifact Assistant | | Project name | Genshin Artifact Assistant |
| Status | Scanner rebuild in progress | | Status | Scanner baseline merged to `main`; repeatability, corpus growth, and recommendation work are next |
| Platform | Windows desktop | | Platform | Windows desktop |
| Target users | Genshin Impact players who want artifact decisions without complex optimizer setup | | Target users | Genshin Impact players who want artifact decisions without complex optimizer setup |
| Runtime | Electron app with React UI and TypeScript | | Runtime | Electron app with React UI and TypeScript |
@@ -43,14 +43,14 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
| ID | Requirement | Priority | Status | | ID | Requirement | Priority | Status |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| FR-001 | List capture sources and automatically prefer the detected Genshin window when available. | Must | Prototype | | FR-001 | List capture sources and automatically prefer the detected Genshin window when available. | Must | Implemented |
| FR-002 | Read one currently opened artifact reliably from the local screen and show its parsed result. | Must | Prototype | | FR-002 | Read one currently opened artifact reliably from the local screen and show its parsed result. | Must | Implemented |
| FR-003 | Generate and maintain a local canonical Genshin data package for sets, pieces, slots, stats, characters, aliases, and UI profiles. | Must | In progress | | FR-003 | Generate and maintain a local canonical Genshin data package for sets, pieces, slots, stats, characters, aliases, and UI profiles. | Must | Implemented baseline |
| FR-004 | Parse artifact fields only through deterministic matching, validation, and derivation against the canonical package. | Must | In progress | | FR-004 | Parse artifact fields only through deterministic matching, validation, and derivation against the canonical package. | Must | Implemented baseline |
| FR-005 | Run a stable automatic inventory scan: detect grid, click tile, verify detail change, parse, store, continue, scroll, resume. | Must | Prototype | | FR-005 | Run a stable automatic inventory scan: detect grid, click tile, verify detail change, parse, store, continue, scroll, resume. | Must | Implemented for visible-inventory baseline |
| FR-006 | Save low-confidence, failed, conflicting, or stale scans automatically as review samples with reason codes. | Must | Prototype | | FR-006 | Save low-confidence, failed, conflicting, or stale scans automatically as review samples with reason codes. | Must | Implemented baseline |
| FR-007 | Apply local learned fixes from review corrections before every new parse. | Must | Prototype | | FR-007 | Apply local learned fixes from review corrections before every new parse. | Must | Implemented baseline |
| FR-008 | Keep the scan UI operator-friendly: main preview first, debug in modals or drawers, completion summary after scan. | Must | In progress | | FR-008 | Keep the scan UI operator-friendly: main preview first, debug in modals or drawers, completion summary after scan. | Must | Implemented baseline |
| FR-009 | Provide account-level artifact triage after scanner trust is acceptable. | Should | Pending | | FR-009 | Provide account-level artifact triage after scanner trust is acceptable. | Should | Pending |
| FR-010 | Provide 1-3 simple build suggestions per character from owned artifacts after scanner trust is acceptable. | Should | Pending | | FR-010 | Provide 1-3 simple build suggestions per character from owned artifacts after scanner trust is acceptable. | Should | Pending |
| FR-011 | Farming overlay for reward scans. | Later | Prototype shell | | FR-011 | Farming overlay for reward scans. | Later | Prototype shell |
@@ -136,7 +136,13 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
### Current product conclusion ### Current product conclusion
The app should stop behaving like an OCR demo with extra features around it. The next phase is a scanner product rebuild: canonical data first, scan engine second, learning loop third, recommendations later. The app has crossed from OCR-demo/prototype into a validated scanner baseline on
`main`. The current merge-ready path is the visible-inventory scan flow: the
operator opens Artifact inventory with a visible detail card, the app verifies
the state, scans read-only, persists parsed artifacts, and keeps uncertain data
reviewable. The next product phase is not another broad scanner rewrite; it is
repeatability, corpus growth, UI polish, and then recommendations on top of the
trusted artifact store.
## Product Direction ## Product Direction
@@ -156,7 +162,9 @@ Outcome:
- Scan completion popup summarizes scanned, stored, duplicates, review samples, blocked reason, and elapsed time. - Scan completion popup summarizes scanned, stored, duplicates, review samples, blocked reason, and elapsed time.
Status: Status:
- In progress - Mostly done for the scanner baseline. The Diagnose/dev surface is separated
and scrollable, scan summaries are compact, and the normal Auto-Scan path is
guarded. Further UI polish remains useful but no longer blocks scanner merge.
### Phase 1 - Canonical game data package ### Phase 1 - Canonical game data package
@@ -174,7 +182,9 @@ Outcome:
- Parser stops "free guessing" outside the canonical package. - Parser stops "free guessing" outside the canonical package.
Status: Status:
- In progress - Implemented as a generated lookup package in `src/data/genshinGameData.json`
with validation and parser integration. Continue regenerating and expanding
aliases deliberately when Genshin data or OCR samples require it.
### Phase 2 - Deterministic parser hardening ### Phase 2 - Deterministic parser hardening
@@ -192,7 +202,10 @@ Outcome:
`Not detected` instead of being stored as invented character names. `Not detected` instead of being stored as invented character names.
Status: Status:
- In progress - Implemented for the merge baseline. Parser tests cover canonical set/slot/stat
matching, equipped-character footer noise, known aliases, and unsafe one-letter
fragments. Continue growing the confirmed review corpus before tightening
thresholds further.
### Phase 3 - Scanner core rebuild ### Phase 3 - Scanner core rebuild
@@ -214,7 +227,11 @@ Outcome:
marker is visible; preflight and polling captures still skip expensive OCR. marker is visible; preflight and polling captures still skip expensive OCR.
Status: Status:
- In progress - Implemented and merged for the visible-inventory path. Live validation on
2026-07-09 covered `20/20` verified/parsed with `0` review and `0` misses,
equipped-character persistence, unlocked lock state, positive locked state,
and locked persistence. Explicit entry-mode experiments remain separate from
the normal merge-ready path.
### Phase 4 - Input automation replacement ### Phase 4 - Input automation replacement
@@ -230,7 +247,10 @@ Outcome:
- Auto-scan never starts on a session that cannot prove one successful detail-card change. - Auto-scan never starts on a session that cannot prove one successful detail-card change.
Status: Status:
- First live path validated; broader soak testing still needed - Read-only C# helper path and elevated dev startup are validated for the
visible-inventory scanner baseline. Direct inventory, Paimon-menu, and
auto-entry modes remain Dev-Control experiments and should be tested with low
limits before being promoted.
### Phase 5 - Learning loop that actually compounds ### Phase 5 - Learning loop that actually compounds
@@ -257,20 +277,24 @@ Outcome:
- Recommendations explain uncertainty and surface conflicts instead of pretending perfect certainty. - Recommendations explain uncertainty and surface conflicts instead of pretending perfect certainty.
Status: Status:
- Deferred until scanner trust is acceptable - Next major product area after repeatability and corpus work. Do not promote
recommendation UX until stored artifact quality is backed by more confirmed
review samples and repeat live scan runs.
## Immediate Next Implementation Order ## Immediate Next Implementation Order
1. Finish scan-page cleanup so the main operator view is no longer noisy. 1. Keep the visible-inventory scanner path as the production baseline and avoid
2. Tighten the game data generator and parser contract, then backfill regression tests from real bad samples. promoting `auto-entry`, `direct-inventory`, or `paimon-menu` until they pass
3. Continue moving auto-scan behavior out of `App.tsx` and into isolated scanner modules. their own low-limit live validations.
4. Repeat the qualified current-vs-IK-traineddata comparison in a later live 2. Grow the confirmed OCR corpus from review samples exported by
session before making stronger speed/default-engine claims. `npm run eval:review-candidates` and prepared through
5. Validate equipped-character footer reads and a positive `locked=true` sample `npm run eval:prepare-confirmed`.
from known artifacts; export candidates with `npm run eval:review-candidates`. 3. Repeat live scanner runs in later sessions to prove repeatability across
6. Grow the confirmed OCR corpus from review samples before tightening parser pages, locked/unlocked artifacts, equipped footers, and duplicate handling.
thresholds further. 4. Continue the optional `3 artifacts/second` work only if the next change can
7. Resume recommendation work only when scan accuracy is consistently trustworthy. reduce OCR/capture transport time without weakening quality gates.
5. Start recommendation/product UX work only after repeat scan quality and
confirmed corpus coverage are strong enough to trust stored artifacts.
## Open Questions ## Open Questions
+6 -1
View File
@@ -258,6 +258,10 @@ Current live limitation:
in the current live environment. 3 artifacts/second is not proven; remaining in the current live environment. 3 artifacts/second is not proven; remaining
speed work needs a larger OCR or capture-pipeline change, not more click speed work needs a larger OCR or capture-pipeline change, not more click
tuning. tuning.
- The visible-inventory ownership/lock extension is also live-proven in this
environment: equipped footer reads for `Citlali` and `Linnea`, unlocked
`locked: false`, positive locked `locked: true`, and locked/equipped
persistence all passed on 2026-07-09.
## Inventory Kamera Comparison ## Inventory Kamera Comparison
@@ -359,7 +363,8 @@ Expected bottleneck sequence:
than click timing. than click timing.
3. Grow the eval corpus with confirmed real review samples before tightening 3. Grow the eval corpus with confirmed real review samples before tightening
parser thresholds further. parser thresholds further.
4. Validate a positive locked-artifact sample. 4. Repeat equipped/locked live samples in later sessions if confidence or UI
behavior changes, but the first positive locked proof has passed.
5. Keep recommendations secondary until scanner quality remains stable across 5. Keep recommendations secondary until scanner quality remains stable across
repeated live sessions. repeated live sessions.
+15 -7
View File
@@ -5,12 +5,12 @@ Progress on the approved scanner/OCR rework. See ADR-007/008/009/010 in
live automation runbook, see live automation runbook, see
[AUTOMATION_LIVE_SCAN.md](AUTOMATION_LIVE_SCAN.md). [AUTOMATION_LIVE_SCAN.md](AUTOMATION_LIVE_SCAN.md).
## Current IK-Speed Target Status ## Current Scanner Status
See [scanner-ik-progress-report.md](scanner-ik-progress-report.md) for the full See [scanner-ik-progress-report.md](scanner-ik-progress-report.md) for the full
report. report.
Current status: Current status after the 2026-07-09 merge to `main`:
- The scanner architecture now follows the relevant Inventory Kamera model: - The scanner architecture now follows the relevant Inventory Kamera model:
32 artifact targets per page, lookup-derived fields, fast artifact OCR profile, 32 artifact targets per page, lookup-derived fields, fast artifact OCR profile,
@@ -27,6 +27,14 @@ Current status:
it parsed `97/100`, had `5` review and `3` misses. The next optional speed it parsed `97/100`, had `5` review and `3` misses. The next optional speed
target remains `3 artifacts/second`, which means `333 ms/artifact` or faster target remains `3 artifacts/second`, which means `333 ms/artifact` or faster
on clean 20-artifact iterations. on clean 20-artifact iterations.
- The merge-ready default is the visible-inventory path. The app blocks normal
guided Auto-Scan unless Artifact inventory and a visible detail card are
detected. `auto-entry`, `direct-inventory`, and `paimon-menu` remain explicit
Dev-Control experiments.
- Ownership and lock-state proof is no longer theoretical: live captures parsed
equipped characters (`Citlali`, `Linnea`), unlocked artifacts reported
`locked: false`, a visibly locked artifact reported `locked: true`, and a
bounded auto-scan persisted the locked/equipped state.
## Done (implemented, unit-tested, build green) ## Done (implemented, unit-tested, build green)
@@ -219,11 +227,11 @@ resolution or without UI work best tested live:
in a later live session before making major OCR-engine defaults or speed in a later live session before making major OCR-engine defaults or speed
claims beyond this environment. claims beyond this environment.
Visible-page limits up to 20, scroll/page-transition limit 45, and the final Visible-page limits up to 20, scroll/page-transition limit 45, the final
100-artifact current-vs-IK-traineddata comparison have passed for the current 100-artifact current-vs-IK-traineddata comparison, equipped footer live smokes,
environment. Remaining soak work is repeatability, OCR corpus growth, equipped and one positive locked-artifact persistence proof have passed for the current
footer confirmation repeats, locked artifact repeats, and optional 3 artifacts/second environment. Remaining soak work is repeatability, OCR corpus growth, additional
speed work. equipped/locked repeats, and optional 3 artifacts/second speed work.
## Grow the eval corpus ## Grow the eval corpus