Document scanner product roadmap and Gitea workflow
This commit is contained in:
@@ -62,11 +62,14 @@ flowchart LR
|
|||||||
| `src/features/scan/hooks/scanViewScanActions.ts` | Manual scan and visible-grid scan orchestration |
|
| `src/features/scan/hooks/scanViewScanActions.ts` | Manual scan and visible-grid scan orchestration |
|
||||||
| `src/features/scan/hooks/scanViewEntryActions.ts` | Guided auto-entry choreography for visible inventory, direct inventory, and IK-style fallback paths |
|
| `src/features/scan/hooks/scanViewEntryActions.ts` | Guided auto-entry choreography for visible inventory, direct inventory, and IK-style fallback paths |
|
||||||
| `src/features/scan/hooks/useScanGoodInterop.ts` | Scan-page GOOD import/export actions against renderer repository ports |
|
| `src/features/scan/hooks/useScanGoodInterop.ts` | Scan-page GOOD import/export actions against renderer repository ports |
|
||||||
|
| `src/features/inventory/*` | Planned scanned-artifact inventory, compact result list/grid, filters, and artifact detail views |
|
||||||
| `src/lib/artifactOcrParser.ts` | Converts OCR output into a parsed artifact candidate with confidence and notes |
|
| `src/lib/artifactOcrParser.ts` | Converts OCR output into a parsed artifact candidate with confidence and notes |
|
||||||
| `src/lib/fuzzyMatch.ts` | Generic fuzzy string matching for OCR text against known game data |
|
| `src/lib/fuzzyMatch.ts` | Generic fuzzy string matching for OCR text against known game data |
|
||||||
| `src/lib/genshinLookup.ts` | Pure lookup and validation API for generated Genshin data |
|
| `src/lib/genshinLookup.ts` | Pure lookup and validation API for generated Genshin data |
|
||||||
| `src/lib/autoScanEntry.ts` | Pure entry-mode planning and auto-scan preflight validation |
|
| `src/lib/autoScanEntry.ts` | Pure entry-mode planning and auto-scan preflight validation |
|
||||||
| `src/lib/cardReadyGate.ts` | Detail/page fingerprint readiness gate for scan timing |
|
| `src/lib/cardReadyGate.ts` | Detail/page fingerprint readiness gate for scan timing |
|
||||||
|
| `src/lib/artifactEvaluation.ts` | Planned deterministic artifact value evaluation with score reasons and review-safe output |
|
||||||
|
| `src/lib/upgradeProjection.ts` | Planned best/middle/worst upgrade projection for under-leveled artifacts |
|
||||||
| `src/lib/scoring.ts` | Recommendation and build scoring logic |
|
| `src/lib/scoring.ts` | Recommendation and build scoring logic |
|
||||||
| `src/lib/demoData.ts` | Temporary local demo snapshot |
|
| `src/lib/demoData.ts` | Temporary local demo snapshot |
|
||||||
| `src/data/genshinGameData.json` | Generated local dictionary of characters, artifact sets, slots, and stats |
|
| `src/data/genshinGameData.json` | Generated local dictionary of characters, artifact sets, slots, and stats |
|
||||||
@@ -116,6 +119,9 @@ sequenceDiagram
|
|||||||
| OCR crops | Electron main | Electron main | Details modal, parser |
|
| OCR crops | Electron main | Electron main | Details modal, parser |
|
||||||
| Game dictionary | `genshin-db` generated JSON | `src/data/genshinGameData.json` | OCR parser |
|
| Game dictionary | `genshin-db` generated JSON | `src/data/genshinGameData.json` | OCR parser |
|
||||||
| Parsed artifact candidate | OCR parser | Renderer domain logic | Result panel, future local DB |
|
| Parsed artifact candidate | OCR parser | Renderer domain logic | Result panel, future local DB |
|
||||||
|
| Scan result entry | Scan loop and parser/evaluator | Renderer domain logic | Live scan rail, artifact inventory, summary |
|
||||||
|
| Artifact evaluation | Deterministic evaluator | `src/lib` | Result pills, inventory sort/filter, detail reasons |
|
||||||
|
| Upgrade projection | Projection helper | `src/lib` | Artifact detail view only |
|
||||||
| Review samples | User action in Scan UI | Electron userData `review-samples.jsonl` | Future regression tests and OCR training |
|
| Review samples | User action in Scan UI | Electron userData `review-samples.jsonl` | Future regression tests and OCR training |
|
||||||
| Stored artifacts | Manual/automatic scans | Electron userData `artifact-store.json` (dedupe by content signature) | Future triage, recommendations, SQLite migration |
|
| Stored artifacts | Manual/automatic scans | Electron userData `artifact-store.json` (dedupe by content signature) | Future triage, recommendations, SQLite migration |
|
||||||
| Recommendations | Scoring module | Renderer domain logic | Triage and builds views |
|
| Recommendations | Scoring module | Renderer domain logic | Triage and builds views |
|
||||||
@@ -173,6 +179,58 @@ Auto-scan artifact captures also bypass Electron source-list enumeration and use
|
|||||||
the GDI capture helper directly once the selected source/Genshin state has been
|
the GDI capture helper directly once the selected source/Genshin state has been
|
||||||
preflighted. Manual captures and source refresh still use `desktopCapturer`.
|
preflighted. Manual captures and source refresh still use `desktopCapturer`.
|
||||||
|
|
||||||
|
## Scan Results And Inventory UX
|
||||||
|
|
||||||
|
The next product surface is documented in
|
||||||
|
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md).
|
||||||
|
Architecture rules:
|
||||||
|
|
||||||
|
- The active scan view is an operator surface, not the full evaluator. It should
|
||||||
|
show the screenshot/preview, the right-side live result rail, Stop/status
|
||||||
|
controls, and review access.
|
||||||
|
- The live result rail receives completed artifact results only. Intermediate
|
||||||
|
OCR/debug stats stay in diagnostics or detail.
|
||||||
|
- A scan result row preserves extraction status and artifact value status as
|
||||||
|
separate data even when the UI shows one compact pill.
|
||||||
|
- The artifact inventory view owns browsing, filtering, sorting, and opening
|
||||||
|
detail.
|
||||||
|
- The artifact detail view owns screenshot/crop inspection, OCR confidence,
|
||||||
|
parser notes, value score reasons, and upgrade projection.
|
||||||
|
- Upgrade projection is a local deterministic/probabilistic helper, never a
|
||||||
|
claim that an artifact will roll a specific way.
|
||||||
|
|
||||||
|
Planned result flow:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
ScanLoop["Scan loop"]
|
||||||
|
Parsed["Parsed artifact"]
|
||||||
|
ReviewGate["Extraction confidence / review gate"]
|
||||||
|
Value["Artifact value evaluator"]
|
||||||
|
Store["Artifact store"]
|
||||||
|
Rail["Live result rail"]
|
||||||
|
Inventory["Artifact inventory"]
|
||||||
|
Detail["Artifact detail"]
|
||||||
|
|
||||||
|
ScanLoop --> Parsed
|
||||||
|
Parsed --> ReviewGate
|
||||||
|
ReviewGate --> Value
|
||||||
|
Value --> Store
|
||||||
|
Value --> Rail
|
||||||
|
Store --> Inventory
|
||||||
|
Rail --> Detail
|
||||||
|
Inventory --> Detail
|
||||||
|
```
|
||||||
|
|
||||||
|
Future queue refactor:
|
||||||
|
|
||||||
|
- One capture/game-control worker may click, scroll, focus, and poll failsafes.
|
||||||
|
- OCR/parse/evaluation may process bounded queued screenshot/crop jobs.
|
||||||
|
- Queueing must preserve stop behavior, duplicate handling, review decisions,
|
||||||
|
and the existing read-only safety boundary.
|
||||||
|
- The queue refactor is secondary to content extraction and result/inventory
|
||||||
|
contracts while current scan speed remains acceptable.
|
||||||
|
|
||||||
## Security And Safety
|
## Security And Safety
|
||||||
|
|
||||||
| Area | Policy |
|
| Area | Policy |
|
||||||
@@ -198,3 +256,5 @@ The app keeps a Tesseract.js worker pool, can use the Inventory-Kamera
|
|||||||
`genshin_fast_09_04_21.traineddata` path for comparison, and reports capture,
|
`genshin_fast_09_04_21.traineddata` path for comparison, and reports capture,
|
||||||
OCR, card-ready, scroll-ready, active-scan, and projected-100 timings. A default
|
OCR, card-ready, scroll-ready, active-scan, and projected-100 timings. A default
|
||||||
engine change requires a same-capture benchmark and a qualified live soak result.
|
engine change requires a same-capture benchmark and a qualified live soak result.
|
||||||
|
For the next product phase, performance work should not displace extraction
|
||||||
|
quality, result clarity, or review safety unless evidence shows a regression.
|
||||||
|
|||||||
@@ -42,6 +42,21 @@
|
|||||||
- [ ] Desktop viewport is checked manually.
|
- [ ] Desktop viewport is checked manually.
|
||||||
- [ ] `npm run build` passes.
|
- [ ] `npm run build` passes.
|
||||||
|
|
||||||
|
## Scan Results And Inventory UX
|
||||||
|
|
||||||
|
- [ ] The scan page keeps preview, Stop/status, and the live result rail visible without page-level scrolling.
|
||||||
|
- [ ] The live rail shows finished artifact rows only, not intermediate OCR/debug state.
|
||||||
|
- [ ] Each live row has scan number, artifact name or compact fallback, value score, and a short status pill.
|
||||||
|
- [ ] Extraction confidence and artifact value remain separate in the data model.
|
||||||
|
- [ ] Low-confidence or conflicting reads show `Review` instead of a normal weak/strong value decision.
|
||||||
|
- [ ] Duplicate state is represented separately from artifact quality.
|
||||||
|
- [ ] The artifact inventory view can browse stored scan results without opening diagnostics.
|
||||||
|
- [ ] Inventory filters/sorting cover review, score, set, slot, equipped, locked, and newest scan where data exists.
|
||||||
|
- [ ] Artifact detail shows screenshot/crop, parsed fields, OCR confidence, parser notes, value reasons, and review state.
|
||||||
|
- [ ] Upgrade projection, if shown, is labeled as a projection and includes worst/middle/best cases.
|
||||||
|
- [ ] Unit tests cover score/status derivation and projection edge cases when those modules change.
|
||||||
|
- [ ] Scanner safety rules and existing quality gates are unchanged.
|
||||||
|
|
||||||
## Parser Or Scoring Change
|
## Parser Or Scoring Change
|
||||||
|
|
||||||
- [ ] Known-good OCR samples still parse correctly.
|
- [ ] Known-good OCR samples still parse correctly.
|
||||||
@@ -56,3 +71,21 @@
|
|||||||
- [ ] App starts outside browser preview.
|
- [ ] App starts outside browser preview.
|
||||||
- [ ] Smart Capture bridge is available.
|
- [ ] Smart Capture bridge is available.
|
||||||
- [ ] No generated debug artifacts are included accidentally.
|
- [ ] No generated debug artifacts are included accidentally.
|
||||||
|
|
||||||
|
## Git Merge And Gitea Push
|
||||||
|
|
||||||
|
- [ ] `git status --short --branch` is checked before switching branches,
|
||||||
|
committing, merging, or pushing.
|
||||||
|
- [ ] Work is committed on the intended feature branch before merging into
|
||||||
|
`main`.
|
||||||
|
- [ ] Merge into `main` uses fast-forward when possible, or a deliberate merge
|
||||||
|
commit when the history requires it.
|
||||||
|
- [ ] `main` is clean before push except for explicitly ignored or deliberately
|
||||||
|
untracked local files.
|
||||||
|
- [ ] `git remote -v` points to the intended Gitea remote before pushing.
|
||||||
|
- [ ] Gitea HTTPS credentials are stored through Git Credential Manager, not in
|
||||||
|
repository files or remote URLs.
|
||||||
|
- [ ] If authentication fails, refresh the credential using
|
||||||
|
[GITEA_AUTH.md](GITEA_AUTH.md), then rerun the same `git push`.
|
||||||
|
- [ ] After push, `git status --short --branch` shows `main...origin/main`
|
||||||
|
without ahead/behind drift.
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ This document defines project engineering standards.
|
|||||||
## UI Rules
|
## UI Rules
|
||||||
|
|
||||||
- The scan page should prioritize the capture workspace over secondary status content.
|
- The scan page should prioritize the capture workspace over secondary status content.
|
||||||
|
- The active scan view should read as preview plus compact result rail, not as a dashboard of live diagnostics.
|
||||||
- Details and debug information belong in modals or secondary panels.
|
- Details and debug information belong in modals or secondary panels.
|
||||||
- Avoid long, overfilled cards on scanner pages.
|
- Avoid long, overfilled cards on scanner pages.
|
||||||
|
- Do not collapse OCR/extraction confidence and artifact value into one ambiguous UI state; uncertain reads should be visibly `Review`.
|
||||||
|
- Artifact value pills should be short, stable labels backed by deterministic data, with detailed reasons behind click-through detail.
|
||||||
- The design direction is dark purple fintech glassmorphism with premium, focused controls.
|
- The design direction is dark purple fintech glassmorphism with premium, focused controls.
|
||||||
- Disable buttons when their required data does not exist.
|
- Disable buttons when their required data does not exist.
|
||||||
|
|
||||||
@@ -52,3 +55,8 @@ This document defines project engineering standards.
|
|||||||
- Update `docs/PROJECT.md` when product scope changes.
|
- Update `docs/PROJECT.md` when product scope changes.
|
||||||
- Update `docs/ARCHITECTURE.md` when module boundaries or flows change.
|
- Update `docs/ARCHITECTURE.md` when module boundaries or flows change.
|
||||||
- Add an ADR to `docs/DECISIONS.md` for durable technical trade-offs.
|
- Add an ADR to `docs/DECISIONS.md` for durable technical trade-offs.
|
||||||
|
- Keep workflow/runbook docs linked from `docs/PROJECT.md` so future sessions
|
||||||
|
do not depend on chat history.
|
||||||
|
- Do not store tokens, passwords, cookies, or generated credentials in project
|
||||||
|
files. Use Git Credential Manager for Gitea HTTPS credentials; document only
|
||||||
|
the setup path in `docs/GITEA_AUTH.md`.
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ This document contains Architecture Decision Records.
|
|||||||
| ADR-009 | Resolution-anchored layout profiles and OCR preprocessing over color detection | Accepted | 2026-07-05 |
|
| ADR-009 | Resolution-anchored layout profiles and OCR preprocessing over color detection | Accepted | 2026-07-05 |
|
||||||
| ADR-010 | Elevated dev runner and bounded live automation probes | Accepted | 2026-07-07 |
|
| ADR-010 | Elevated dev runner and bounded live automation probes | Accepted | 2026-07-07 |
|
||||||
| ADR-011 | Quality-gated Inventory Kamera comparison before OCR default changes | Accepted | 2026-07-07 |
|
| ADR-011 | Quality-gated Inventory Kamera comparison before OCR default changes | Accepted | 2026-07-07 |
|
||||||
|
| ADR-012 | Separate live scan results, artifact inventory, and value evaluation | Accepted | 2026-07-09 |
|
||||||
|
|
||||||
## ADR-001: Build A Local Electron App First
|
## ADR-001: Build A Local Electron App First
|
||||||
|
|
||||||
@@ -339,3 +340,60 @@ winner and a complete `current` vs. `ik-traineddata` comparison.
|
|||||||
- The validated `:wait` scan scripts are acceptable for manual post-UAC startup;
|
- The validated `:wait` scan scripts are acceptable for manual post-UAC startup;
|
||||||
non-waiting scripts remain useful when automation should fail fast.
|
non-waiting scripts remain useful when automation should fail fast.
|
||||||
- The goal remains open until the 100-artifact qualified comparison is captured.
|
- The goal remains open until the 100-artifact qualified comparison is captured.
|
||||||
|
|
||||||
|
## ADR-012: Separate Live Scan Results, Artifact Inventory, And Value Evaluation
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
The visible-inventory scanner baseline is fast enough for the current product
|
||||||
|
phase. The next user value comes from better artifact content extraction and a
|
||||||
|
clearer surface for scanned artifacts, not from another broad speed pass.
|
||||||
|
|
||||||
|
The scan page currently has more diagnostic/result detail than the operator
|
||||||
|
needs during a live scan. Showing every stat, confidence value, and evaluation
|
||||||
|
while the scanner is running makes the main workspace noisy and increases the
|
||||||
|
risk that a user treats uncertain OCR as a final artifact judgment.
|
||||||
|
|
||||||
|
The desired product flow is:
|
||||||
|
|
||||||
|
- left side: screenshot/preview,
|
||||||
|
- right side: compact live list of finished artifact results,
|
||||||
|
- later menu item: browsable scanned artifact inventory,
|
||||||
|
- click-through detail: screenshot, parsed stats, OCR confidence, evaluation
|
||||||
|
reasons, and upgrade projection.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Adopt a split scan/result/inventory model:
|
||||||
|
|
||||||
|
- The active scan page shows the latest screenshot/preview and a compact live
|
||||||
|
result rail.
|
||||||
|
- The live rail shows only scan number, artifact name or compact fallback,
|
||||||
|
artifact value score `0-100`, and a result pill after evaluation has finished.
|
||||||
|
- Extraction confidence and artifact value are separate data concepts. A low
|
||||||
|
confidence read becomes `Review`; it must not be silently displayed as a
|
||||||
|
normal weak artifact.
|
||||||
|
- Debug stats, raw OCR, confidence breakdowns, and detailed evaluation belong in
|
||||||
|
diagnostics, scan summary, or artifact detail.
|
||||||
|
- Add a scanned artifact inventory view for browsing, filtering, sorting, and
|
||||||
|
opening details.
|
||||||
|
- Add artifact detail evaluation before promoting broad recommendations.
|
||||||
|
- Add upgrade projection only as a detail-level feature, with worst/middle/best
|
||||||
|
projected value scores and clear uncertainty labeling.
|
||||||
|
- Keep the producer/consumer screenshot queue as a later implementation phase:
|
||||||
|
one game-control worker may click/scroll/capture, while OCR/parse/evaluation
|
||||||
|
workers can process bounded queued jobs once the UI/data contracts are stable.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- The scan page becomes calmer and more task-focused.
|
||||||
|
- The app can surface useful artifact outcomes without hiding OCR uncertainty.
|
||||||
|
- Inventory and detail views become the natural place for richer analysis.
|
||||||
|
- Recommendation work has a cleaner dependency chain: trusted scans, compact
|
||||||
|
results, artifact inventory, detail evaluation, then build recommendations.
|
||||||
|
- Speed work remains possible, but it is secondary unless measured timings show
|
||||||
|
a real regression.
|
||||||
|
|||||||
+24
-2
@@ -1,4 +1,4 @@
|
|||||||
# Gitea authentication
|
# Gitea Authentication
|
||||||
|
|
||||||
Remote:
|
Remote:
|
||||||
|
|
||||||
@@ -13,7 +13,8 @@ https://git.noveria.net/user/settings/applications
|
|||||||
```
|
```
|
||||||
|
|
||||||
Use the token as the HTTPS password when Git asks for credentials. Do not save
|
Use the token as the HTTPS password when Git asks for credentials. Do not save
|
||||||
tokens, passwords, or generated credentials in this repository.
|
tokens, passwords, or generated credentials in this repository, in `.env`
|
||||||
|
files, or in the remote URL.
|
||||||
|
|
||||||
On Windows, this repository uses Git Credential Manager from the system Git
|
On Windows, this repository uses Git Credential Manager from the system Git
|
||||||
config:
|
config:
|
||||||
@@ -28,3 +29,24 @@ Credential Manager or let Git Credential Manager prompt again during:
|
|||||||
```powershell
|
```powershell
|
||||||
git push origin main
|
git push origin main
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Recommended push check:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
git status --short --branch
|
||||||
|
git remote -v
|
||||||
|
git push origin main
|
||||||
|
git status --short --branch
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected clean result after a successful push:
|
||||||
|
|
||||||
|
```text
|
||||||
|
## main...origin/main
|
||||||
|
```
|
||||||
|
|
||||||
|
If Git reports `Failed to authenticate user`, do not change the remote to embed
|
||||||
|
a token. Open the token page above, create or refresh a token with repository
|
||||||
|
write access, clear the stale Windows credential for `git.noveria.net` if
|
||||||
|
needed, and rerun the same push command so Git Credential Manager can store the
|
||||||
|
new credential safely.
|
||||||
|
|||||||
+74
-15
@@ -5,14 +5,17 @@ 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 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 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).
|
||||||
|
|
||||||
## Project Identity
|
## Project Identity
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Project name | Genshin Artifact Assistant |
|
| Project name | Genshin Artifact Assistant |
|
||||||
| Status | Scanner baseline merged to `main`; repeatability, corpus growth, and recommendation work are next |
|
| Status | Scanner baseline merged to `main`; scan result rail, artifact inventory, extraction quality, and corpus growth 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 |
|
||||||
@@ -29,6 +32,9 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
|
|||||||
- Build one local canonical Genshin data package for artifact sets, pieces, slots, stats, and characters.
|
- Build one local canonical Genshin data package for artifact sets, pieces, slots, stats, and characters.
|
||||||
- Parse artifact name, slot, main stat, substats, set, equipped state, and confidence deterministically against that package.
|
- 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.
|
- 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.
|
||||||
|
- 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.
|
||||||
- Keep the app offline-first and usable without Genshin Optimizer, Inventory Kamera, Enka, or HoYoLAB.
|
- Keep the app offline-first and usable without Genshin Optimizer, Inventory Kamera, Enka, or HoYoLAB.
|
||||||
- Re-introduce recommendations only after the scanner base is trustworthy.
|
- Re-introduce recommendations only after the scanner base is trustworthy.
|
||||||
|
|
||||||
@@ -54,6 +60,9 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
|
|||||||
| 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 |
|
||||||
|
| 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 | Planned |
|
||||||
|
| FR-013 | Provide a scanned artifact inventory view with compact score pills, filters, sorting, and click-through detail. | Should | Planned |
|
||||||
|
| FR-014 | Provide artifact detail evaluation with screenshot/crops, parsed fields, OCR confidence, value reasons, and optional upgrade projection. | Should | Planned |
|
||||||
|
|
||||||
## Non-Functional Requirements
|
## Non-Functional Requirements
|
||||||
|
|
||||||
@@ -64,6 +73,7 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
|
|||||||
| IK target | First 100 artifacts should scan with accuracy at least as good as Inventory Kamera and equal or better speed. | `npm run scan:goal:compare:validated` or `npm run scan:goal:compare:validated:wait` quality-gated report |
|
| IK target | First 100 artifacts should scan with accuracy at least as good as Inventory Kamera and equal or better speed. | `npm run scan:goal:compare:validated` or `npm run scan:goal:compare:validated:wait` quality-gated report |
|
||||||
| Privacy | Captures and parsed data stay local by default. | No remote upload in scanner path |
|
| Privacy | Captures and parsed data stay local by default. | No remote upload in scanner path |
|
||||||
| Reliability | Uncertain OCR must be visible to the user. | Confidence and details view |
|
| Reliability | Uncertain OCR must be visible to the user. | Confidence and details view |
|
||||||
|
| 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` |
|
| 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 |
|
| Maintainability | Scanner heuristics must be isolated and documented. | Parser tests, scan-loop tests, data generator, review sample pipeline |
|
||||||
|
|
||||||
@@ -128,8 +138,11 @@ The app is not intended to replace deep min-max tools. It prioritizes time savin
|
|||||||
2026-07-08.
|
2026-07-08.
|
||||||
- OCR quality is still inconsistent enough that some fields are recovered by fallback and derivation more often than they should be.
|
- OCR quality is still inconsistent enough that some fields are recovered by fallback and derivation more often than they should be.
|
||||||
- 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.
|
- 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 is cleaner than before, but it still exposes too much operator/debug state in the main flow.
|
- The scan page is cleaner than before, but it still needs the next minimalist
|
||||||
- Recommendations and build logic exist, but the scanner is not yet reliable enough to make them the core focus.
|
result-rail pass so the main flow shows preview plus completed artifact
|
||||||
|
outcomes instead of live diagnostic/stat content.
|
||||||
|
- Recommendations and build logic exist, but artifact inventory, detail review,
|
||||||
|
and value scoring should land first so recommendations have trustworthy inputs.
|
||||||
- The latest source has completed the final current-vs-IK-traineddata live
|
- The latest source has completed the final current-vs-IK-traineddata live
|
||||||
comparison for this environment. Repeatability and 3 artifacts/second are
|
comparison for this environment. Repeatability and 3 artifacts/second are
|
||||||
still open.
|
still open.
|
||||||
@@ -140,9 +153,10 @@ 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
|
`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
|
operator opens Artifact inventory with a visible detail card, the app verifies
|
||||||
the state, scans read-only, persists parsed artifacts, and keeps uncertain data
|
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
|
reviewable. The next product phase is not another broad speed rewrite; current
|
||||||
repeatability, corpus growth, UI polish, and then recommendations on top of the
|
speed is acceptable for now. The priority is better content extraction, a
|
||||||
trusted artifact store.
|
minimal scan-result rail, a browsable artifact inventory, detail evaluation, and
|
||||||
|
corpus growth before recommendations become the core product surface.
|
||||||
|
|
||||||
## Product Direction
|
## Product Direction
|
||||||
|
|
||||||
@@ -151,6 +165,11 @@ trusted artifact store.
|
|||||||
- Team building stays out of the critical path until artifact ingestion is stable.
|
- Team building stays out of the critical path until artifact ingestion is stable.
|
||||||
- Inventory Kamera remains a reference for scan choreography and page movement, not a runtime dependency.
|
- Inventory Kamera remains a reference for scan choreography and page movement, not a runtime dependency.
|
||||||
- Self-learning stays deterministic and local first: review samples, aliases, crop offsets, and UI profile tuning before any ML retraining discussion.
|
- 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.
|
||||||
|
- Artifact value scoring must not hide OCR uncertainty. `Review` is a distinct
|
||||||
|
outcome, not just a weak artifact score.
|
||||||
|
|
||||||
## Execution Plan
|
## Execution Plan
|
||||||
|
|
||||||
@@ -270,31 +289,69 @@ Status:
|
|||||||
crop adjustment proposals, and UI-profile adjustment proposals. Crop/profile
|
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.
|
||||||
|
|
||||||
### Phase 6 - Recommendations come back on top of a trusted scanner
|
### Phase 6 - Minimal scan result rail and artifact inventory
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
- The scan page shows a large screenshot/preview and a compact right-side rail
|
||||||
|
of finished artifact evaluations.
|
||||||
|
- Each row shows scan number, artifact name or compact fallback, value score,
|
||||||
|
and a colored status pill.
|
||||||
|
- Debug stats, confidence breakdowns, and OCR internals move out of the main
|
||||||
|
scan surface.
|
||||||
|
- A new artifact inventory menu provides compact browsing, filters, sorting,
|
||||||
|
and click-through details.
|
||||||
|
|
||||||
|
Status:
|
||||||
|
- Planned. See
|
||||||
|
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md)
|
||||||
|
for the implementation phases and acceptance criteria.
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
- Low-confidence OCR disables or qualifies value conclusions instead of showing
|
||||||
|
false certainty.
|
||||||
|
|
||||||
|
Status:
|
||||||
|
- Planned after the scan result rail and inventory data contracts.
|
||||||
|
|
||||||
|
### Phase 8 - Recommendations come back on top of a trusted scanner
|
||||||
|
|
||||||
Outcome:
|
Outcome:
|
||||||
- Account snapshot and build suggestions are only promoted once scan quality is high enough to trust owned artifacts.
|
- Account snapshot and build suggestions are only promoted once scan quality is high enough to trust owned artifacts.
|
||||||
- Recommendations explain uncertainty and surface conflicts instead of pretending perfect certainty.
|
- Recommendations explain uncertainty and surface conflicts instead of pretending perfect certainty.
|
||||||
|
|
||||||
Status:
|
Status:
|
||||||
- Next major product area after repeatability and corpus work. Do not promote
|
- Next major product area after inventory, detail evaluation, repeatability, and
|
||||||
recommendation UX until stored artifact quality is backed by more confirmed
|
corpus work. Do not promote recommendation UX until stored artifact quality is
|
||||||
review samples and repeat live scan runs.
|
backed by more confirmed review samples and repeat live scan runs.
|
||||||
|
|
||||||
## Immediate Next Implementation Order
|
## Immediate Next Implementation Order
|
||||||
|
|
||||||
1. Keep the visible-inventory scanner path as the production baseline and avoid
|
1. Keep the visible-inventory scanner path as the production baseline and avoid
|
||||||
promoting `auto-entry`, `direct-inventory`, or `paimon-menu` until they pass
|
promoting `auto-entry`, `direct-inventory`, or `paimon-menu` until they pass
|
||||||
their own low-limit live validations.
|
their own low-limit live validations.
|
||||||
2. Grow the confirmed OCR corpus from review samples exported by
|
2. Implement the scan result and inventory data contracts from
|
||||||
|
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md),
|
||||||
|
preserving separate extraction confidence and artifact value.
|
||||||
|
3. Rework the scan page into preview plus minimal result rail; keep diagnostic
|
||||||
|
stats out of the primary scan surface.
|
||||||
|
4. Add the artifact inventory menu and detail view before expanding broad build
|
||||||
|
recommendations.
|
||||||
|
5. Grow the confirmed OCR corpus from review samples exported by
|
||||||
`npm run eval:review-candidates` and prepared through
|
`npm run eval:review-candidates` and prepared through
|
||||||
`npm run eval:prepare-confirmed`.
|
`npm run eval:prepare-confirmed`.
|
||||||
3. Repeat live scanner runs in later sessions to prove repeatability across
|
6. Repeat live scanner runs in later sessions to prove repeatability across
|
||||||
pages, locked/unlocked artifacts, equipped footers, and duplicate handling.
|
pages, locked/unlocked artifacts, equipped footers, and duplicate handling.
|
||||||
4. Continue the optional `3 artifacts/second` work only if the next change can
|
7. Continue the optional `3 artifacts/second` work only if the next change can
|
||||||
reduce OCR/capture transport time without weakening quality gates.
|
reduce OCR/capture transport time without weakening quality gates.
|
||||||
5. Start recommendation/product UX work only after repeat scan quality and
|
8. Start recommendation/product UX work only after inventory/detail evaluation,
|
||||||
confirmed corpus coverage are strong enough to trust stored artifacts.
|
repeat scan quality, and confirmed corpus coverage are strong enough to trust
|
||||||
|
stored artifacts.
|
||||||
|
|
||||||
## Open Questions
|
## Open Questions
|
||||||
|
|
||||||
@@ -303,4 +360,6 @@ 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 |
|
| 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 |
|
| 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 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 |
|
||||||
| Which Genshin UI languages should be supported after English once the scanner contract is stable? | Open |
|
| Which Genshin UI languages should be supported after English once the scanner contract is stable? | Open |
|
||||||
|
|||||||
@@ -366,7 +366,11 @@ Expected bottleneck sequence:
|
|||||||
4. Repeat equipped/locked live samples in later sessions if confidence or UI
|
4. Repeat equipped/locked live samples in later sessions if confidence or UI
|
||||||
behavior changes, but the first positive locked proof has passed.
|
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 and the result rail, artifact inventory, and detail
|
||||||
|
evaluation flow are implemented.
|
||||||
|
6. Treat current speed as acceptable for the next product phase; prioritize
|
||||||
|
artifact content extraction and review-safe value scoring before another
|
||||||
|
broad speed pass.
|
||||||
|
|
||||||
## Definition of Done for the IK Target
|
## Definition of Done for the IK Target
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,270 @@
|
|||||||
|
# Scanner Results And Artifact Inventory Roadmap
|
||||||
|
|
||||||
|
This document defines the next product phase after the validated visible-inventory
|
||||||
|
scanner baseline. The scanner is already fast enough for the current milestone;
|
||||||
|
the next work should improve artifact content extraction, review safety, and a
|
||||||
|
minimal inventory experience that makes scanned artifacts useful.
|
||||||
|
|
||||||
|
## Product Stance
|
||||||
|
|
||||||
|
- Keep the scan workspace focused on operation, not analysis.
|
||||||
|
- Keep the live preview as the dominant surface.
|
||||||
|
- Move debug metrics, OCR internals, and detailed evaluation behind details,
|
||||||
|
diagnostics, or the inventory view.
|
||||||
|
- Do not merge scan confidence and artifact value into one ambiguous score.
|
||||||
|
- Treat uncertain OCR as review, not as a low-quality artifact.
|
||||||
|
- Prioritize extracting correct artifact content over another speed pass unless
|
||||||
|
live timings regress materially.
|
||||||
|
|
||||||
|
## Target User Flow
|
||||||
|
|
||||||
|
1. The user opens Artifact inventory in Genshin with a visible detail card.
|
||||||
|
2. The scanner runs the existing read-only visible-inventory flow.
|
||||||
|
3. The scan view shows the latest screenshot/preview on the left.
|
||||||
|
4. A compact live result rail on the right receives one row per finished
|
||||||
|
artifact evaluation.
|
||||||
|
5. Each row shows only:
|
||||||
|
- scan number,
|
||||||
|
- artifact name or compact slot/set fallback,
|
||||||
|
- artifact value score from `0` to `100`,
|
||||||
|
- a colored result pill.
|
||||||
|
6. After the scan, the user opens the inventory menu to browse all scanned
|
||||||
|
artifacts.
|
||||||
|
7. Clicking an artifact opens a detail view with screenshot, parsed fields,
|
||||||
|
OCR confidence, scoring reasons, and optional upgrade projection.
|
||||||
|
|
||||||
|
## Score Contract
|
||||||
|
|
||||||
|
The UI must keep two concepts separate:
|
||||||
|
|
||||||
|
| Concept | Meaning | UI behavior |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Extraction confidence | How reliable the scan/OCR/parser result is. | Drives `Review`, warnings, and detail confidence rows. |
|
||||||
|
| Artifact value score | How useful the artifact appears for builds. | Drives the `0-100` value and good/mid/weak pill. |
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- If extraction confidence is too low, show `Review` instead of a normal value
|
||||||
|
decision, even when a tentative value score exists.
|
||||||
|
- If the artifact is a duplicate, show duplicate state separately from value.
|
||||||
|
- The live rail may show one compact pill, but the data model should preserve
|
||||||
|
separate `extractionStatus` and `valueStatus` fields.
|
||||||
|
- Score labels should be stable and simple:
|
||||||
|
|
||||||
|
| Value score | Label |
|
||||||
|
| --- | --- |
|
||||||
|
| `90-100` | Strong |
|
||||||
|
| `70-89` | Good |
|
||||||
|
| `45-69` | Mid |
|
||||||
|
| `0-44` | Weak |
|
||||||
|
| unknown or unsafe | Review |
|
||||||
|
|
||||||
|
The exact formula can start simple and deterministic. It should explain its
|
||||||
|
reasons in the detail view before it becomes a recommendation source.
|
||||||
|
|
||||||
|
## Planned Pipeline Shape
|
||||||
|
|
||||||
|
The current scan loop can keep shipping while the UI and data contracts are
|
||||||
|
built. A fuller producer/consumer pipeline is a later implementation step:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
Capture["Single capture and game-control worker"]
|
||||||
|
Queue["Bounded screenshot/crop queue"]
|
||||||
|
OCR["OCR and parse workers"]
|
||||||
|
Eval["Artifact evaluation"]
|
||||||
|
Aggregate["Aggregator and store"]
|
||||||
|
UI["Live rail and inventory"]
|
||||||
|
|
||||||
|
Capture --> Queue
|
||||||
|
Queue --> OCR
|
||||||
|
OCR --> Eval
|
||||||
|
Eval --> Aggregate
|
||||||
|
Aggregate --> UI
|
||||||
|
```
|
||||||
|
|
||||||
|
Constraints:
|
||||||
|
|
||||||
|
- Only one worker may control Genshin input, focus, click, scroll, or failsafe
|
||||||
|
polling.
|
||||||
|
- OCR/parse/evaluation workers may run concurrently on already captured
|
||||||
|
screenshot/crop jobs.
|
||||||
|
- The queue must be bounded, initially around `4-8` jobs, so the scanner does
|
||||||
|
not outrun retries, review decisions, or stop requests.
|
||||||
|
- The pipeline must preserve current safety rules: no memory reads, hooks,
|
||||||
|
injection, game-file changes, deleting, feeding, enhancing, locking/unlocking,
|
||||||
|
or spending resources.
|
||||||
|
- Do not implement the queue refactor before the result/inventory contracts are
|
||||||
|
stable, unless timing evidence shows the current loop has become the blocker.
|
||||||
|
|
||||||
|
## Implementation Phases
|
||||||
|
|
||||||
|
### Phase 0 - Documentation and contracts
|
||||||
|
|
||||||
|
Status: prepared by this document.
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Product direction is documented.
|
||||||
|
- Main docs point to this roadmap.
|
||||||
|
- Acceptance criteria and checklists exist before code changes.
|
||||||
|
|
||||||
|
### Phase 1 - Result data model
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Add a durable scan result entry model with sequence number, capture metadata,
|
||||||
|
parsed artifact identity, extraction status, artifact value score, value
|
||||||
|
status, duplicate/review flags, and timestamps.
|
||||||
|
- Keep existing stored artifact records compatible.
|
||||||
|
- Add tests for status derivation so low-confidence OCR cannot become a normal
|
||||||
|
`Good` or `Strong` result.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/types/domain.ts`
|
||||||
|
- `src/types/storage.ts`
|
||||||
|
- `src/lib/scannerSession.ts`
|
||||||
|
- `src/lib/storedArtifactAdapter.ts`
|
||||||
|
- `src/lib/scanReviewUtils.ts`
|
||||||
|
|
||||||
|
### Phase 2 - Minimal live result rail
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Rework the scan main section into preview plus right-side result rail.
|
||||||
|
- Remove live evaluation cards and noisy stats from the primary scan area.
|
||||||
|
- Append rows only after an artifact has finished parse/evaluation.
|
||||||
|
- Keep Stop, scan status, and review access available.
|
||||||
|
- Keep debug stats in diagnostics or summary modals.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/features/scan/components/ScanMainSection.tsx`
|
||||||
|
- `src/features/scan/components/ScanResultCards.tsx`
|
||||||
|
- `src/features/scan/components/hooks/useScanMainSectionModel.ts`
|
||||||
|
- `src/features/scan/components/hooks/useScanResultCardsModel.ts`
|
||||||
|
- `src/styles/base.css`
|
||||||
|
|
||||||
|
### Phase 3 - Artifact inventory view
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Add a menu item for scanned artifact inventory.
|
||||||
|
- Show a compact, minimal list or dense grid of stored artifacts.
|
||||||
|
- Each entry shows the same score/pill language as the live rail.
|
||||||
|
- Provide filters and sorting for review, score, set, slot, equipped, locked,
|
||||||
|
and newest scan.
|
||||||
|
- Avoid a marketing/landing layout; the first screen is the actual inventory.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/features/inventory/*`
|
||||||
|
- `src/features/layout/navigation.ts`
|
||||||
|
- `src/pages/app/*`
|
||||||
|
- `src/lib/artifactStore.ts`
|
||||||
|
- repository bridge/storage files as needed
|
||||||
|
|
||||||
|
### Phase 4 - Artifact detail view
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Clicking a live row or inventory item opens detail.
|
||||||
|
- Detail shows screenshot or detail crop when available.
|
||||||
|
- Detail lists parsed fields, OCR confidence, parser notes, extraction status,
|
||||||
|
value score, and scoring reasons.
|
||||||
|
- Review-required items make the uncertainty explicit and do not present their
|
||||||
|
score as final.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/features/inventory/components/*`
|
||||||
|
- `src/features/scan/components/modals/*`
|
||||||
|
- `src/lib/artifactOcrParser.ts`
|
||||||
|
- `src/lib/scoring.ts`
|
||||||
|
|
||||||
|
### Phase 5 - Artifact value evaluation
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Add a deterministic artifact value evaluator before promoting build
|
||||||
|
recommendations.
|
||||||
|
- Explain the score through factors such as set, slot, main stat, substat
|
||||||
|
quality, level, locked/equipped state, and available character/build context.
|
||||||
|
- The evaluator must accept incomplete data and return review/unknown instead
|
||||||
|
of confident nonsense.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/lib/artifactEvaluation.ts`
|
||||||
|
- `src/lib/scoring.ts`
|
||||||
|
- `src/lib/substatRolls.ts`
|
||||||
|
- `src/lib/genshinLookup.ts`
|
||||||
|
- targeted unit tests under `src/lib/*.test.ts`
|
||||||
|
|
||||||
|
### Phase 6 - Upgrade projection
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- For artifacts below max level, show optional projection only in detail.
|
||||||
|
- Provide `worst`, `middle`, and `best` projected value scores.
|
||||||
|
- Label projection as probabilistic and not a guaranteed result.
|
||||||
|
- Use known Genshin upgrade constraints and current substats; unknown or
|
||||||
|
partially read data must disable or soften the projection.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/lib/upgradeProjection.ts`
|
||||||
|
- `src/lib/substatRolls.ts`
|
||||||
|
- `src/features/inventory/components/*`
|
||||||
|
- parser/scoring tests
|
||||||
|
|
||||||
|
### Phase 7 - Queue-based analysis pipeline
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Introduce a bounded screenshot/crop job queue only after the UI/data contract
|
||||||
|
is stable.
|
||||||
|
- Keep one game-control worker.
|
||||||
|
- Allow OCR/parse/evaluation workers to process queued jobs.
|
||||||
|
- Preserve stop/failsafe behavior and review decisions.
|
||||||
|
- Compare throughput against the current baseline without weakening accuracy.
|
||||||
|
|
||||||
|
Likely files:
|
||||||
|
|
||||||
|
- `src/lib/autoScanLoop.ts`
|
||||||
|
- `src/lib/scannerSession.ts`
|
||||||
|
- Electron capture/OCR boundary in `electron/main.ts` or extracted services
|
||||||
|
- scan-loop tests and live soak scripts
|
||||||
|
|
||||||
|
### Phase 8 - Recommendation promotion
|
||||||
|
|
||||||
|
Outcome:
|
||||||
|
|
||||||
|
- Promote account-level recommendations only after scan result quality,
|
||||||
|
inventory browsing, detail review, and value scoring are trustworthy.
|
||||||
|
- Recommendations must reference stored artifact quality and uncertainty.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- The scan page still fits the primary workflow without page-level scrolling.
|
||||||
|
- The preview remains visible during active scan.
|
||||||
|
- The right rail shows finished artifact evaluations, not noisy intermediate
|
||||||
|
parser/debug state.
|
||||||
|
- Review items are visibly different from weak artifacts.
|
||||||
|
- Artifact value score and extraction confidence remain separate in data.
|
||||||
|
- Inventory view can browse stored scan results without opening diagnostics.
|
||||||
|
- Detail view explains why an artifact received its score.
|
||||||
|
- Upgrade projection never implies a guaranteed future roll.
|
||||||
|
- Existing safety constraints and scan quality gates remain intact.
|
||||||
|
|
||||||
|
## Validation Plan
|
||||||
|
|
||||||
|
- `npm run lint`
|
||||||
|
- `npm test`
|
||||||
|
- `npm run build`
|
||||||
|
- Add unit tests for score/status derivation and upgrade projection.
|
||||||
|
- For scanner-facing changes, run a low-limit visible-inventory live scan before
|
||||||
|
wider validation.
|
||||||
|
- Keep `npm run scan:repeatability:wait` for later regression checks, not for
|
||||||
|
every UI-only pass.
|
||||||
@@ -4,6 +4,8 @@ Progress on the approved scanner/OCR rework. See ADR-007/008/009/010 in
|
|||||||
[DECISIONS.md](DECISIONS.md) for the decisions behind these. For the current
|
[DECISIONS.md](DECISIONS.md) for the decisions behind these. For the current
|
||||||
live automation runbook, see
|
live automation runbook, see
|
||||||
[AUTOMATION_LIVE_SCAN.md](AUTOMATION_LIVE_SCAN.md).
|
[AUTOMATION_LIVE_SCAN.md](AUTOMATION_LIVE_SCAN.md).
|
||||||
|
For the next result/inventory product phase, see
|
||||||
|
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md).
|
||||||
|
|
||||||
## Current Scanner Status
|
## Current Scanner Status
|
||||||
|
|
||||||
@@ -35,6 +37,10 @@ Current status after the 2026-07-09 merge to `main`:
|
|||||||
equipped characters (`Citlali`, `Linnea`), unlocked artifacts reported
|
equipped characters (`Citlali`, `Linnea`), unlocked artifacts reported
|
||||||
`locked: false`, a visibly locked artifact reported `locked: true`, and a
|
`locked: false`, a visibly locked artifact reported `locked: true`, and a
|
||||||
bounded auto-scan persisted the locked/equipped state.
|
bounded auto-scan persisted the locked/equipped state.
|
||||||
|
- Current speed is acceptable for the next product phase. The next work should
|
||||||
|
prioritize correct artifact content extraction, a minimal live result rail,
|
||||||
|
scanned artifact inventory, detail evaluation, and review-safe value scoring
|
||||||
|
before another broad speed pass.
|
||||||
|
|
||||||
## Done (implemented, unit-tested, build green)
|
## Done (implemented, unit-tested, build green)
|
||||||
|
|
||||||
@@ -223,7 +229,26 @@ Current status after the 2026-07-09 merge to `main`:
|
|||||||
pixels because Electron's native bitmap channel order was ambiguous in live
|
pixels because Electron's native bitmap channel order was ambiguous in live
|
||||||
captures.
|
captures.
|
||||||
|
|
||||||
## Remaining — needs the live environment or a UI pass
|
## Next product phase - result rail and inventory
|
||||||
|
|
||||||
|
The next implementation pass is planned in
|
||||||
|
[scanner-results-inventory-roadmap.md](scanner-results-inventory-roadmap.md).
|
||||||
|
Summary:
|
||||||
|
|
||||||
|
1. Add result data contracts that preserve extraction confidence separately from
|
||||||
|
artifact value score.
|
||||||
|
2. Rework the scan view into screenshot/preview plus a compact right-side live
|
||||||
|
result rail.
|
||||||
|
3. Add a scanned artifact inventory menu with minimal list/grid rows and
|
||||||
|
score/review pills.
|
||||||
|
4. Add click-through artifact detail with screenshot/crops, parsed fields, OCR
|
||||||
|
confidence, value reasons, and review state.
|
||||||
|
5. Add upgrade projection later as a detail-only feature with worst/middle/best
|
||||||
|
cases and explicit uncertainty.
|
||||||
|
6. Defer the full screenshot queue/worker pipeline until the result/inventory
|
||||||
|
contracts are stable or timing evidence shows the current loop is the blocker.
|
||||||
|
|
||||||
|
## Remaining - needs the live environment or a UI pass
|
||||||
|
|
||||||
These cannot be finished/validated without Genshin running at the user's
|
These cannot be finished/validated without Genshin running at the user's
|
||||||
resolution or without UI work best tested live:
|
resolution or without UI work best tested live:
|
||||||
|
|||||||
Reference in New Issue
Block a user