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
@@ -0,0 +1,117 @@
# Localization, Local Deletion, Timing, and OCR Corpus Checkpoint
Date: 2026-07-11
Status: implementation, offline-validation, and current-build live-smoke
checkpoint. The non-persisting 50-artifact development smoke passed on
2026-07-11; its durable evidence is in
[NATIVE_SCANNER_LIVE_SMOKE_2026-07-11.md](NATIVE_SCANNER_LIVE_SMOKE_2026-07-11.md).
An elevated packaged executable remains a separate package-runtime boundary and
is not claimed here.
## Delivered Scope
### English-default renderer with German Settings option
- `en` is the default for a fresh, missing, or invalid persisted locale.
- Settings exposes English and German; the selected app locale is persisted
locally and keeps the document language in sync.
- Visible app-shell, navigation, Scanner, Artifacts, Review, Builds, Overlay,
Diagnostics, Settings, and local-delete chrome use the renderer translation
catalog. Source/domain evidence remains deliberately distinct from translated
UI chrome.
- The setting changes application copy only. Smart Capture remains validated
for the English Genshin UI; it does not claim German Genshin OCR/crop support.
- The package UI runner uses stable `data-*` hooks instead of translated text
for core interaction checks.
### Local artifact removal
The delete control corrects app-local data only. It is not a Genshin action.
| Selected row | Local effect | Preserved / prohibited behavior |
| --- | --- | --- |
| Native scan result | Appends a `deleted-results.jsonl` tombstone, hides the row, and removes its crop only if the resolved PNG stays inside the selected run directory. | Raw `scan-results.json` remains replay evidence. Active capture/processing blocks removal. No input helper or game action is called. |
| Exact Store record linked to native row | Removed only when the user explicitly includes that exact local record in the confirmed removal. | No broad Store deletion and no inferred record matching. |
| Store-only row | Removes that one explicit local Store record through main-process IPC. | No native scan evidence or Genshin state is touched. |
The workflow is idempotent for an already tombstoned native row. It retains the
native run's raw result array for audit/replay and limits file deletion to
contained PNG paths.
### Shared-clock native run timing
Each native run can now write atomic `run-timing.json` evidence with version
`native-scanner-run-timing-v1`.
- Markers are first-observed and immutable after a valid value is written.
- The record covers request start, native scanner start, capture start/end,
processing start/end, durable results, and final reconciliation.
- `requestToResultsDurableMs` and `requestToResultsReconciledMs` are derived
directly from their endpoints and validated against timestamp ordering.
- Capture and processing remain separate metrics. They may overlap and are
never added to create an end-to-end duration.
### Confirmed OCR corpus changes
The historical 136-result Review population was inspected against saved crops,
not treated as self-labeled training data:
| Audit result | Count | Current behavior |
| --- | ---: | --- |
| Explicit visual 14★ | 128 | Remain excluded/manual-inspection entries, not value-scored parser labels. |
| Confirmed `HP+4..1%` OCR punctuation defect | 6 | Exact duplicated decimal punctuation is repaired to `HP+4.1%`; the regression cases are in the confirmed corpus. |
| Confirmed 5★ partial-name case with direct slot evidence | 1 | The unsafe global alias was removed. Canonicalization is now allowed only when independent high-confidence slot evidence makes one piece valid. |
| Incomplete/malformed 5★ crop | 1 | Remains `Review`; no heuristic converts it into a clean artifact. |
This preserves the fail-closed rule: ambiguous OCR becomes unknown or Review,
not a guessed canonical artifact.
## Offline Evidence Recorded For This Checkpoint
- Focused localization tests cover English fallback, persisted locale behavior,
and English/German catalog-key parity.
- Native deletion tests cover tombstone filtering, raw-evidence preservation,
active-run blocking, contained crop cleanup, idempotency, and exact Store
scope.
- Native timing tests cover first-observation behavior, ordering validation, and
derived durations.
- Parser/corpus evaluation covers the duplicate-decimal repair and slot-safe
name behavior. The latest saved 50-artifact evidence validation completed at
`50/50` with zero validation issues.
- The final current-build offline gate passed after all localization, deletion,
timing, corpus, and acceptance-runner changes: `npm run acceptance:offline`
completed TypeScript, 72 test files / 444 tests, OCR evaluation, saved-run
validation, package verification (27/27), both dependency audits, and the
diff check.
- The built-renderer Builds/UI acceptance passed fresh English, German
selection, English restoration, Builds context/focus, reduced motion,
overflow, and native plus Store local-delete confirmation probes. It did not
launch an elevated packaged executable, so it is not
UAC/preload/helper/native-runtime evidence.
## Remaining Release Gates
1. If a package-runtime/UAC claim is needed, separately launch the elevated
packaged executable and verify its bridge/helper/runtime behavior. Do not
substitute the passed built-renderer UI acceptance for that evidence.
2. The required elevated development 50-artifact smoke now passes: 50/50
capture, click, queue, parse, durable-result reconciliation, zero Review,
zero processing errors, zero Store writes, and a complete valid
`run-timing.json`. It measured `28,022 ms` request-to-reconciliation, so it
does not claim the separate 3/s performance target.
3. Remove generated workspace outputs, commit the coherent checkpoint, and
push the intended branch.
## Follow-on Quality Phase
- Extend the corpus only from visually confirmed crops and preserve ambiguity as
`Review`.
- Refresh Build-Fit source profiles before their explicit expiry and add Golden
plus adversarial fixtures for each profile expansion.
- Keep the bounded wheel reset as the production baseline; test any alternate
inventory-entry/reset choreography as a separate guarded experiment.
- Keep Builds read-only and Artifact-only until a separately sourced product
decision introduces character, weapon, team, or rotation inputs.