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
+221 -72
View File
@@ -8,13 +8,22 @@ For the next scan-result and artifact-inventory product phase, see
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md).
For the 2026-07-09 scanner merge evidence, see [MERGE_READINESS.md](MERGE_READINESS.md).
For Gitea push/authentication setup, see [GITEA_AUTH.md](GITEA_AUTH.md).
For the completed evaluation/offline phases and executed live acceptance, see
[ARTIFACT_EVALUATION_OFFLINE_VALIDATION_2026-07-10.md](ARTIFACT_EVALUATION_OFFLINE_VALIDATION_2026-07-10.md)
and [NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md](NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md),
plus the current-build [NATIVE_SCANNER_LIVE_SMOKE_2026-07-11.md](NATIVE_SCANNER_LIVE_SMOKE_2026-07-11.md).
For the score-free Build-Fit V1 data and safety contract, see
[BUILD_FIT_CONTRACT_V1.md](BUILD_FIT_CONTRACT_V1.md).
For the current English-default UI, local-result removal, timing, and reviewed
OCR-corpus checkpoint, see
[LOCALIZATION_LOCAL_DELETION_TIMING_CHECKPOINT_2026-07-11.md](LOCALIZATION_LOCAL_DELETION_TIMING_CHECKPOINT_2026-07-11.md).
## Project Identity
| Field | Value |
| --- | --- |
| Project name | Genshin Artifact Assistant |
| Status | Artifact-first scanner baseline with native IK-style 20/50/100 scale evidence, explicit selected promotion, review/edit/approve, scan result rail, and Artifact-only Inventory pipeline; value scoring and later-session repeatability are next |
| Status | Artifact-first native scanner with historical live-accepted dev 5/20/50/100, packaged bounded/UI paths, and a complete packaged 2,211-Artifact inventory soak; scanner-first Galaxy UI, explicit review/promotion gates, deterministic roll-efficiency, an English-default/Deutsch-selectable app UI, local-only artifact removal, durable timing evidence, and an offline-tested source-bound Build-Fit evidence-ranking layer. The current-build elevated-dev 50-artifact smoke now passes its functional/safety gate; the 3/s performance target remains separate and unproven. |
| Platform | Windows desktop |
| Target users | Genshin Impact players who want artifact decisions without complex optimizer setup |
| Runtime | Electron app with React UI and TypeScript |
@@ -32,8 +41,14 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
- Parse artifact name, slot, main stat, substats, set, equipped state, and confidence deterministically against that package.
- Save weak or failed reads automatically as review samples and turn corrections into reusable local fixes.
- Present finished scan results as a compact artifact list instead of a debug-heavy live stats surface.
- Make scan readiness, the primary scan action, progress, and safe next steps understandable without opening technical views.
- Make the primary scan cover the recognized owned Artifact inventory by
default, while allowing an explicit limit by Artifact count or grid rows.
- Keep extraction confidence separate from artifact value so uncertain OCR becomes review, not a misleading low score.
- Provide a browsable local artifact inventory with detail views before promoting broader recommendations.
- Die sichtbare Sternreihe einer nativen Artefaktkarte direkt erfassen: Nur
explizit bestätigte 5★-Artefakte erhalten eine Roll-Efficiency-Bewertung;
bestätigte 14★-Artefakte bleiben als manuell prüfbare Ergebnisse erhalten.
- Keep the app offline-first and usable without optimizer imports, Enka, HoYoLAB,
or any external scanner as a core dependency.
- Re-introduce recommendations only after the scanner base is trustworthy.
@@ -41,7 +56,9 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
## Non-Goals
- No memory reads, process hooks, game modification, packet inspection, or anti-cheat bypassing.
- No automatic deleting, feeding, enhancing, or spending resources.
- Keine automatische Bergung, Quick-Select-Auswahl, Löschung, Fütterung,
Verbesserung, Sperr-/Entsperraktionen oder Ressourcenverbrauch — auch nicht
für erkannte 14★-Artefakte.
- No advanced formula editor or full power-user optimizer in the MVP.
- No cloud sync by default.
@@ -56,19 +73,24 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
| 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 | Implemented baseline |
| 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 | Implemented baseline |
| FR-008 | Keep the scan UI operator-friendly: readiness and primary action first, preview plus result rail during scanning, debug in collapsed or secondary surfaces. | Must | Implemented scanner-first baseline |
| 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-011 | Farming overlay for reward scans. | Later | Prototype shell |
| FR-012 | Show active scan results as a minimal right-side rail with artifact number, name or compact fallback, value score, and status pill. | Should | Partial foundation |
| FR-013 | Provide a scanned artifact inventory view with compact score pills, filters, sorting, and click-through detail. | Should | Partial foundation |
| FR-014 | Provide artifact detail evaluation with screenshot/crops, parsed fields, OCR confidence, value reasons, and optional upgrade projection. | Should | Planned |
| FR-012 | Show active scan results as a minimal right-side rail with artifact number, name or compact fallback, value score, and status pill. | Should | Implemented baseline |
| FR-013 | Provide a scanned artifact inventory view with compact score pills, filters, sorting, and click-through detail. | Should | Implemented baseline |
| FR-014 | Provide artifact detail evaluation with screenshot/crops, parsed fields, OCR confidence, value reasons, and optional upgrade projection. | Should | Implemented; packaged visual acceptance passed, under-level projection remains corpus-backed |
| FR-015 | Provide clear loading, success, review, blocked, and error feedback through progress, spinners, skeletons, and mutation toasts without hiding durable state. | Should | Implemented UI baseline |
| FR-016 | Die sichtbare Sternreihe je nativer Artefaktkarte erfassen; nur explizit bestätigte 5★-Artefakte bewerten, bestätigte 14★-Artefakte ohne Wertung mit Bild und Details in einer separaten schreibgeschützten `Nicht 5★`-Ansicht zeigen. | Must | Implementiert; aktueller 50er-Smoke bestanden |
| FR-017 | Provide an English-default application interface and let the user switch the renderer to German in Settings without changing the scanner contract. | Should | Implemented; built-renderer acceptance passed, elevated packaged-executable runtime remains separate |
| FR-018 | Let the user remove an incorrectly scanned artifact from local app data only, including its local crop when safe, without any Genshin mutation. | Should | Implemented, unit tested, and confirmation paths exercised; no data-removing test was run |
## Non-Functional Requirements
| Category | Requirement | Measurement |
| --- | --- | --- |
| Safety | Never perform irreversible in-game actions. | Code review and manual test |
| Evaluation safety | Explizit visuelle 14★-Evidenz wird ausgeschlossen; fehlende, widersprüchliche oder unsichere Stern-Evidenz geht in `Review`. | Result-/Replay-Tests und Detailprüfung |
| Performance | Single artifact read should feel interactive and batch scan should not stall on false progress. | Capture latency monitored manually; auto-scan stops on blocked verification |
| Performance | A 100-artifact visible-inventory run should finish cleanly with low review/miss rates and report timing evidence. | `npm run scan:goal:validated` or `npm run scan:goal:validated:wait` quality-gated report |
| Privacy | Captures and parsed data stay local by default. | No remote upload in scanner path |
@@ -76,18 +98,20 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
| Score integrity | Extraction confidence and artifact value are separate concepts. | Review state can block or qualify a value score |
| Learning loop | Scanner mistakes should become reusable local review samples. | `review-samples.jsonl` |
| Maintainability | Scanner heuristics must be isolated and documented. | Parser tests, scan-loop tests, data generator, review sample pipeline |
| Usability | The default path should expose one primary next action and keep advanced controls secondary. | Scanner-first navigation and desktop visual acceptance |
| Accessibility | Focus, status, loading, and motion must remain understandable without relying on animation or color alone. | Keyboard review, ARIA status semantics, and `prefers-reduced-motion` |
## Tech Stack
| Area | Choice | Notes |
| --- | --- | --- |
| Desktop shell | Electron | Windows local app and overlay windows |
| Desktop shell | Electron 43 | Windows local app and overlay windows |
| Frontend | React + TypeScript + Vite | UI and client state |
| Styling | CSS with dark purple glassmorphism system | Premium fintech-inspired visual direction |
| Styling | CSS design tokens with dark Galaxy glass surfaces | Cinematic depth with restrained violet, cyan, gold, and semantic state accents |
| OCR | Tesseract.js prototype plus deterministic normalization/derivation | OCR alone is not trusted as the decision source |
| Capture | Electron desktopCapturer plus Windows GDI Smart Capture | GDI path is used for Genshin Smart Capture reliability |
| Input automation | C# sidecar with elevated dev runner when needed | Live-validated for read-only inventory selection clicks; see `docs/AUTOMATION_LIVE_SCAN.md` |
| Tests | Vitest + TypeScript checks | Current validation baseline; regression samples must expand |
| Tests | Vitest 4 + TypeScript checks | OCR eval, helper/cleanup safety, Build-Fit contract/combination/profile/ranking/context gates, localization/deletion/timing tests, packaged acceptance runners, and saved-run replay |
| Packaging | electron-builder | Configured in `package.json` |
## Runtime
@@ -97,6 +121,10 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
| Local dev | `npm run dev` | Starts Vite and Electron |
| Local dev with automation | `npm run dev:admin` | Required when `GenshinImpact.exe` is elevated; Windows blocks lower-integrity cursor/click input |
| Production build | `npm run build` | Builds React and Electron main process |
| Complete non-live gate | `npm run acceptance:offline` | Runs tests, OCR/assessment gates, saved-run validation, fresh package build/verification, audits, and diff checks |
| Unpacked package | `npm run package:offline-check` | Builds helper/app and verifies ASAR/resources without launching Genshin |
| Saved-run replay | `npm run scan:native:replay` | Re-evaluates the newest existing native scan without capture or input |
| Saved-run evidence set | `npm run scan:native:validate:saved` | Validates requested accepted targets (bounded 20/50/100 or full 2,211), files, review provenance, replay, and projection boundaries without capture or input |
| Preview | `npm run preview` | Browser preview only; capture bridge is unavailable |
## Current State Review
@@ -108,8 +136,8 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
- A local canonical data package already exists in `src/data/genshinGameData.json`, generated from `genshin-db`.
- The parser already uses known sets, pieces, slots, stat aliases, set aliases, character aliases, and derived slot/set mapping.
- Review samples, learned replacements, parser notes, and stored artifacts already persist locally.
- The scan surface has an initial recent-results rail backed by the newest
stored artifacts.
- The scan surface has a current-session result rail that starts empty; older
persisted Artifacts remain available in the dedicated inventory view.
- The auto-scan loop is no longer a naive click spammer: it has preflight, verification, miss handling, page fingerprinting, and stop conditions.
- The scanner now has a validated visible-inventory path: 32 safe artifact
targets per page, lookup-derived fields, fast OCR crop profile, and a
@@ -133,16 +161,56 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
- Native IK-style Artifact capture is wired through the C# helper. It writes
card crops and run artifacts for downstream OCR/parse processing instead of
making React do per-artifact work in the hot capture loop.
- The native post-capture processor can write `scan-results.json` and
`processing-report.json`, preserve parser field confidence, match Artifact
results against IK artifact set/piece/slot data, and keep store persistence
opt-in.
- The native result processor tails flushed capture jobs while the helper is
still scanning, evaluates them with four bounded workers, publishes ordered
live deltas, and writes incremental `scan-results.json` plus
`processing-report.json`. Parser confidence and IK set/piece/slot conflicts
remain reviewable, and store persistence stays opt-in.
- The Inventory view now has an Artifact-only pipeline surface for scope,
native capture, OCR queue, review gate, promotion, and evidence. Native rows
expose crop previews, IK/GOOD metadata, dry-run promotion state, and a
`Naechster Schritt` card.
- The active UI intentionally hides weapon, material, and character-detail IK
catalog coverage until those values are actually scanned.
- Clean Artifact results now receive deterministic `roll-efficiency-v1`
evaluations. Inventory/detail show score reasons and legal roll breakdown;
build fit remains explicitly deferred.
- Under-leveled, unambiguously identified 5-star Artifacts with four known
substats receive a detail-only Worst/Middle/Best projection. 4-star,
rarity-ambiguous, incomplete, or review data receives none.
- Existing 20/50/100 native results passed five-repeat offline determinism
replay; the approved 100-result run evaluated 100/100 with zero unknown.
- An Electron 43 unpacked app passed 27/27 static package checks and live launch
from `%TEMP%`. ASAR renderer, preload, IPC, packaged C# helper, IK resources,
elevation telemetry, Inventory UI, and a packaged 5-result dry run passed.
- The renderer now uses a scanner-first information architecture: Scanner,
Artifacts, Review, and the clearly labeled Builds preview form the workspace;
Overlay and Diagnostics remain secondary tools.
- The Scanner surface leads with Genshin/app readiness, one primary start/stop
action, a three-step empty state, explicit scan phases, and one modal for
scan scope, capture source, and manual tools. Inventory loading uses
skeletons/spinners, and confirmed
promotion, review, import, and export mutations report through accessible
toasts.
- Shared Galaxy tokens, focus-visible treatment, micro-motion, and a
`prefers-reduced-motion` fallback now define the visual/feedback baseline.
- The renderer now defaults to English on a fresh, missing, or invalid locale
setting. Users can choose German from Settings; the preference is local to the
app and updates the document language. This changes application copy only:
Smart Capture remains validated for the English Genshin UI.
- Artifact detail now exposes a small, confirmed local-delete action. Native
scan results are tombstoned rather than rewritten, their crop is removed only
when it is contained in the selected run directory, and an exact linked Store
record is removable only through an explicit local confirmation. No delete
path calls the input helper or changes Genshin.
- Native runs now retain an atomic `run-timing.json` record from request start
through durable result reconciliation. It measures capture and processing
separately and derives end-to-end duration from one wall-clock interval
instead of adding overlapping phases.
- The 136 historical full-inventory Review samples were audited against their
crops. The confirmed corpus now distinguishes 128 explicit non-five-star
entries, six exact duplicated-decimal repairs, one slot-safe artifact-name
correction, and one incomplete entry that intentionally remains `Review`.
### What is still structurally weak
@@ -154,20 +222,28 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
- Learned fixes currently focus on text replacements; they do not yet update crop offsets, UI profile variants, or scanner targeting rules in a structured way.
- The scan page now has a minimalist recent-results rail, and the Inventory view
can inspect native Artifact results, crop previews, IK match state, promotion
dry-runs, and pipeline risk/status. Value scoring remains incomplete;
single-result review/edit/approve is implemented and batch review is
intentionally unavailable.
- The new native IK-style path has same-session 20/50/100 live scale evidence
with complete capture/result counts and safe Review gating. Later-session
repeatability and packaged behavior remain open.
dry-runs, pipeline risk/status, roll-efficiency reasons, and upgrade
projection. Single-result review/edit/approve is implemented and batch
review is intentionally unavailable.
- The native IK-style path has fresh later-session 5/20/50/100 scale evidence,
deterministic replay, focus-loss and stop evidence, plus a packaged 5-result
runtime smoke. Non-16:9 and other UI-language profiles remain open.
- Store promotion from native `scan-results.json` now supports one selected,
confirmed result at a time with main-process revalidation and a durable log.
Batch promotion intentionally remains unavailable.
- Native Review results can be corrected and approved or rejected one at a
time. Approval revalidates IK identity, canonical main values, and legal
substat rolls, then feeds the existing review-to-eval candidate pipeline.
- Recommendations and build logic exist, but artifact inventory, detail review,
and value scoring should land first so recommendations have trustworthy inputs.
- Recommendations and build logic exist, but build-aware fit must be designed
separately from the now-implemented context-free roll-efficiency score.
- The Builds navigation item now reads only the newest complete native run and
can surface up to three source-bound, read-only profile suggestions. It must
not imply character ownership, team, weapon, rotation, DPS, or optimizer
certainty; the built-renderer acceptance now passes, while an elevated
packaged-executable runtime remains a separate packaging check.
- The historical 136-item Review queue is not a source of labels by itself.
Its audit added only visually confirmed parser/corpus cases; the one
incomplete crop remains fail-closed in `Review`.
- Repeatability and 3 artifacts/second are still open; speed work should not
outrank result clarity, inventory UX, or corpus growth while the current path
is stable.
@@ -183,10 +259,30 @@ the helper captures Artifact card crops quickly, while OCR, parsing, review,
promotion, and value evaluation run downstream.
The next product phase is not broad category expansion. Weapons, materials, and
character details stay out of active scope. The priority is later-session
native repeatability, value
evaluation, and detail explanations before recommendations become the core
product surface.
character details stay out of active scope. Packaged/live acceptance passed on
2026-07-10 for the bounded 5/20/50/100 scanner and packaged 5er. A later real
Settings-UI run also accepted the revised Artifact-limit path at 5/5 through
preflight, capture, processing, parsing, and the session result rail with no
review, processing error, or persistence. The packaged Settings UI then
accepted a one-row limit as an eight-Artifact target at 8/8 with the same safe
outcome. The complete Settings-UI full-owned-inventory soak then accepted the
OCR-owned target 2,211 with exact 2,211 captures/results across 70 pages. After
one evidence-driven parser correction, the current packaged reprocess completed
2,211/2,211 with 136 Review (6.15%), zero errors/writes, and zero saved-run
validation issues. The current Build-Fit checkpoint now has four sourced
profiles, profile-expiry gates, a deterministic non-Roll-Efficiency evidence
ranker, explicit session-only Furina context, and a read-only Builds surface.
The renderer now defaults to English with a German Settings option, and local
artifact removal is deliberately confined to app-local result/store records and
contained crops. The current scanner also writes durable shared-clock timing
evidence and has a visually reviewed corpus correction for the audited
136-entry Review set. These current-build changes are offline/unit validated,
and the built-renderer Builds/UI acceptance passed, including the local-delete
confirmation probes. That is not an elevated packaged-executable claim. The
current elevated development 50-artifact native smoke now passes with complete
timing evidence and zero writes; its `28,022 ms` end-to-end result does not
prove the separate 3/s target. The remaining Review corpus continues to grow
only from visually confirmed labels.
## Product Direction
@@ -196,11 +292,23 @@ product surface.
- External scanners are not runtime dependencies. The app owns its scan
choreography, OCR, and quality gates.
- Self-learning stays deterministic and local first: review samples, aliases, crop offsets, and UI profile tuning before any ML retraining discussion.
- The scan workspace should be an operator surface: preview, live result rail,
Stop, status, and review access. Detailed stats and debug evidence belong in
diagnostics, summaries, or artifact detail.
- The scan workspace should be an operator surface: the left area shows preview
when idle and owns capture-versus-target progress during a run; the right
rail contains current-session results plus independent evaluation progress.
Stop, status, and review access remain visible. Detailed debug evidence
belongs in diagnostics, summaries, or artifact detail.
- Primary navigation should follow the user journey: scan, inspect artifacts,
review uncertainty, then enter future build guidance. Overlay and diagnostics
remain tools instead of competing with that journey.
- Feedback should match the action: progress for long-running scans, skeletons
for content loading, inline state for durable blockers, and toasts for the
outcome of explicit mutations.
- Artifact value scoring must not hide OCR uncertainty. `Review` is a distinct
outcome, not just a weak artifact score.
- Explizit bestätigte visuelle 14★-Artefakte sind keine
Bergungs-/Lösch-Empfehlung: Sie erscheinen nur in der schreibgeschützten
`Nicht 5★`-Ansicht mit Bild und Details zur manuellen Prüfung. Eine
fehlende oder widersprüchliche Sternreihe bleibt `Review`.
## Execution Plan
@@ -212,9 +320,15 @@ Outcome:
- Scan completion popup summarizes scanned, stored, duplicates, review samples, blocked reason, and elapsed time.
Status:
- 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.
- Implemented as the scanner-first Galaxy baseline. Readiness and the primary
scan action lead the page, the left surface owns capture progress, and the
larger right surface owns ordered live results plus compact independent
evaluation progress. The current-session result rail starts empty, advanced
controls open in a modal without shifting the workspace, and Diagnose remains
a separate scrollable tool. The
Artifact-limit path and consolidated progress/result layout passed a real
five-result Settings-UI run, the one-row path at 8/8, and the full-owned path
at 2,211/2,211 with current-package Review below the 15% gate.
### Phase 1 - Canonical game data package
@@ -318,7 +432,11 @@ Outcome:
Status:
- Prepared in code for text replacements, field aliases, constrained fixes,
crop adjustment proposals, and UI-profile adjustment proposals. Crop/profile
changes still require live review before being auto-applied.
changes still require live review before being auto-applied. The current
review-corpus checkpoint adds only visually confirmed cases: exact duplicate
decimal punctuation is repaired, and a partial artifact name is canonicalized
only when independent, high-confidence slot evidence leaves one safe match.
Ambiguous or incomplete crops remain `Review`.
### Phase 6 - Minimal scan result rail and artifact inventory
@@ -334,31 +452,46 @@ Outcome:
Status:
- Started with a scan result rail in the scan surface and an `Inventory` view.
The rail can show native `scan-results.json` entries after post-processing
and falls back to recent stored artifacts. The inventory browser can filter,
The rail shows native `scan-results.json` entries from the current app scan
session after post-processing and does not preload older stored/native rows
at startup. The inventory browser can filter,
sort, inspect native/store/snapshot rows, and preview native card crops from
the selected run directory. It also exposes the current IK inventorylist
version, active Artifact-only scope, and pipeline status for capture,
post-processing, review, promotion, and evidence. Native Artifact rows carry
IK/GOOD match status from the post-capture processor and a dry-run promotion
decision that shows whether a native result is speicherbar, already stored,
review-only, or blocked without writing to the store. Detail review exists;
deterministic value score and value reasons are still pending. See
review-only, or blocked without writing to the store. Detail review,
deterministic roll-efficiency reasons, evaluated/open filters, score sorting,
and under-level projection are implemented. The browser prioritizes the
collection, filters, selected detail, and explicit next actions; technical
pipeline evidence remains available in collapsible detail. See
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md)
for the implementation phases and acceptance criteria.
for the implementation phases and acceptance criteria. The separate,
read-only `Nicht 5★` filter retains explicitly recognized 14★ native
results with their crop and details, excludes them from roll evaluation, and
exposes no in-game action. A confirmed local-delete action can remove a
wrong native result from the visible local inventory through an append-only
tombstone and safely contained crop cleanup; it can remove a Store-only row
or exact linked Store record only locally and never changes Genshin.
### Phase 7 - Artifact detail evaluation and upgrade projection
Outcome:
- Artifact detail explains parsed fields, OCR confidence, scoring reasons, and
review needs.
- Upgrade projection is available only when enough data is known and is labeled
as probabilistic, with worst/middle/best projected value scores.
- Upgrade projection is available only for unambiguously identified 5-star data
with four known legal substats and is labeled as probabilistic, with
worst/middle/best projected value scores.
- Low-confidence OCR disables or qualifies value conclusions instead of showing
false certainty.
Status:
- Planned after the scan result rail and inventory data contracts.
- Implemented as `roll-efficiency-v1` plus detail-only
`roll-efficiency-projection-v1`. Static/build/replay, fresh dev 5/20/50/100,
packaged runtime, and final Inventory visual acceptance pass. The new live
100 contained only +20 Artifacts, so under-level projections remain covered
by the confirmed saved-run corpus rather than a new live sample.
### Phase 8 - Recommendations come back on top of a trusted scanner
@@ -367,35 +500,51 @@ Outcome:
- Recommendations explain uncertainty and surface conflicts instead of pretending perfect certainty.
Status:
- Next major product area after inventory, detail evaluation, 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.
- `build-fit-contract-v1` continues to keep per-Artifact and five-piece
assessments score-free. On top of it, the offline-tested
`build-fit-evidence-ranking-v1` selects at most three non-overlapping safe
combinations from the newest complete native run. The sourced corpus now
covers Furina Solo-Hydro C0-C1, Neuvillette Charged Attack, Raiden off-field
Hyperbloom, and Nahida off-field Deepwood. Profiles expire explicitly;
Roll-Efficiency and OCR confidence are not ranking inputs. Furina's required
whole-build ER target accepts only explicit, session-only user context and
otherwise stays deferred. The Builds surface explains Set/Main-Stat/Substat
coverage, sources, warnings, and uncertainty without writing data or sending
game input. A built-renderer acceptance now covers fresh English locale,
German switching/restoration, Builds loading/context/focus, reduced motion,
overflow, and native plus Store local-delete confirmation probes. It is not evidence of an
elevated packaged-executable launch; that runtime boundary remains separate.
See
[BUILD_FIT_CONTRACT_V1.md](BUILD_FIT_CONTRACT_V1.md).
## Immediate Next Implementation Order
## Immediate Next Validation Order
1. Add deterministic Artifact value evaluation with explainable reasons.
2. Keep the visible-inventory scanner path as the production baseline and avoid
promoting `auto-entry`, `direct-inventory`, or `paimon-menu` until they pass
their own low-limit live validations.
3. Keep the active native scope artifact-only until weapons, materials, and
character details are actually scanned.
4. Finish the scan result and inventory detail contracts from
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md),
preserving separate extraction confidence and artifact value.
5. Finish value reasons in the existing Artifact inventory detail view before
expanding broad build recommendations.
6. Keep the existing scan preview/result rail and Inventory workflow compact;
move new diagnostics behind the dedicated diagnostics surface.
7. Continue growing the confirmed OCR corpus from review samples exported by
`npm run eval:review-candidates` and prepared through
`npm run eval:prepare-confirmed`.
8. Repeat live scanner runs in later sessions to prove repeatability across
pages, locked/unlocked artifacts, equipped footers, and duplicate handling.
9. Continue the optional `3 artifacts/second` work only if the next change can
reduce OCR/capture transport time without weakening quality gates.
10. Start recommendation/product UX work only after inventory/detail evaluation,
repeat scan quality, and confirmed corpus coverage are strong enough to trust
stored artifacts.
1. The final current-build offline gate passed after the 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.
2. Preserve the passing built-renderer acceptance as renderer evidence, but
separately verify an elevated packaged-executable launch/UAC bridge before a
binary release claim. It is not a substitute for scanner smoke evidence.
3. The current elevated development 50-artifact smoke passed with full
reconciliation, zero Review/errors/writes, and
`requestToResultsReconciledMs=28,022`. This is a functional/safety gate;
it does not claim 3 Artifacts/s.
4. Clean generated workspace output, commit the coherent checkpoint, and push
the intended branch. A package-runtime/UAC test is required only for that
separate claim.
5. Continue review-corpus growth only from visually confirmed crops. Keep
explicit 14★ evidence excluded, ambiguous evidence in `Review`, and reject
aliases that cannot be justified by independent field evidence.
6. Refresh source-bound profiles before expiry and add Golden plus
Review/low-confidence adversarial fixtures for each additional profile.
7. Keep the bounded wheel reset as the production baseline. Benchmark a `B`
plus Artifact-tab reopen only as a separate guarded experiment before any
reset strategy change.
8. Keep Build-Fit profile suggestions read-only and Artifact-only until an
explicit product decision adds owned-character, weapon, team, and rotation
inputs with their own sources.
## Open Questions
@@ -403,7 +552,7 @@ Status:
| --- | --- |
| Is the current C# helper sufficient for production packaging, or does a later Rust/C++ sidecar still materially reduce latency or packaging risk? | Open |
| When should UI-profile learning be allowed to change crop geometry automatically versus requiring review approval? | Open |
| What scan-quality threshold is high enough before recommendations should be considered user-facing again? | Open |
| What exact first-pass value formula should drive the `0-100` artifact score before build-aware recommendations exist? | Open |
| Which upgrade projection model is honest enough for early UX: deterministic roll buckets, probability-weighted outcomes, or a deliberately simple best/middle/worst estimate? | Open |
| What scan-quality threshold is high enough before profile suggestions can be called live-accepted? | Scanner gate passed for accepted 16:9 English Artifact scope; Build-Fit unit/repository gate and built-renderer acceptance passed, while elevated packaged-executable runtime and current scanner smoke remain separate |
| What exact first-pass value formula should drive the `0-100` artifact score before build-aware recommendations exist? | Resolved for V1: legal roll-tier efficiency only; build fit remains separate |
| Which upgrade projection model is honest enough for early UX: deterministic roll buckets, probability-weighted outcomes, or a deliberately simple best/middle/worst estimate? | Resolved for V1: legal Worst/Middle/Best roll-efficiency bounds with explicit uncertainty |
| Which Genshin UI languages should be supported after English once the scanner contract is stable? | Open |