feat(scanner): complete localized artifact quality checkpoint
This commit is contained in:
@@ -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 1–4★ | 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.
|
||||
Reference in New Issue
Block a user