# Artifact Evaluation And Offline Validation - 2026-07-10 Historical pre-live snapshot. The deferred live work described here was completed later on 2026-07-10; see [NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md](NATIVE_SCANNER_LIVE_ACCEPTANCE_2026-07-10.md). This report records the implementation of the five post-ingestion phases. No live Genshin smoke test was run during this work. Existing native scan results were used as the only real Artifact input. ## Implemented Phases ### 1. Deterministic Artifact evaluation - `src/lib/artifactEvaluation.ts` implements `roll-efficiency-v1`. - The score measures legal substat roll-tier efficiency from `0-100`; it does not pretend to be universal character or build value. - Main stat validity, extraction confidence, roll legality, and build fit stay separate. - Clean results become `evaluated`; uncertain extraction remains `review`; inconsistent or incomplete clean data becomes `unknown` instead of receiving a fabricated score. - Locked and equipped state do not change Artifact quality. ### 2. Inventory and detail integration - Native `scan-results.json` entries now carry a versioned value evaluation, score, reason codes, legal roll counts, and per-substat efficiency. - Legacy saved results are evaluated on load without requiring a rescan. - The scan result rail shows compact roll-efficiency values. - Inventory adds evaluated/open filters and roll-value sorting. - Artifact detail shows score reasons, roll breakdown, and the explicit `Build-Fit offen` boundary. - Review results never receive a normal quality score. ### 3. Offline packaged-app verification - Electron was upgraded from 33 to `43.1.0` because the old runtime was listed by the production dependency audit. - Deprecated `NativeImage.getBitmap()` calls were migrated to `toBitmap()`. - `electron-builder`, `@electron/asar`, and repeatable package scripts were added. - `npm run package:offline-check` builds the C# helper, renderer, Electron main process, and an unpacked Windows app without launching it. - `scripts/verify-packaged-app.mjs` verifies the executable, ASAR entries, relative renderer assets, current runtime signature, preload, helper, IK lists, and matching IK version. - Packaged helper and IK lookup now use only `process.resourcesPath` by default; repository paths remain development-only and cannot mask missing packaged resources. - The unpacked app passed `27/27` project/package checks. Runtime launch and Genshin interaction remain deliberately deferred to the next live session. ### 4. Offline repeatability replay - `npm run scan:native:replay -- --run-dir= --repeats=5` evaluates a saved `scan-results.json` repeatedly and compares deterministic SHA-256 payload hashes. - It writes `outputs/native-replay//native-replay-report.json` and fails if a clean parsed Artifact cannot be evaluated. - The replay never focuses, captures, clicks, scrolls, or starts Genshin. | Saved run | Repeats | Results | Evaluated | Review | Unknown | Projection | Deterministic | | --- | ---: | ---: | ---: | ---: | ---: | --- | --- | | `20260709-223006` | 5 | 20 | 20 | 0 | 0 | 20 complete | yes | | `20260709-223041` | 5 | 50 | 49 | 1 historical review | 0 | 49 complete | yes | | `20260709-223441` | 5 | 100 | 100 | 0 | 0 | 9 available, 91 complete | yes | The 100-result run produced a score range of `76.1-92.5` with average `84.3`. This is roll-tier efficiency, not build fit. ### 5. Upgrade projection - Under-leveled, unambiguously identified 5-star Artifacts with four known legal substats receive deterministic worst/middle/best roll-efficiency bounds up to +20. - The calculation uses remaining +4 steps and legal rarity-specific roll tiers. - Three-substat, 4-star, ambiguous-rarity, review, incomplete, or illegal data disables projection. - +20 Artifacts are marked complete and do not show invented future rolls. - Every visible projection states that target substat and roll tier are random and that the result is not guaranteed. ## Static Evidence - `npm run lint`: passed - `npm test`: passed, `262/262` tests in `40/40` files - `npm run build`: passed - `npm run eval`: `26/26` exact cases, `77/77` fields - `npm run scan:assessment:test`: passed - `npm run package:verify`: `27/27` checks passed - `npm audit`: `0` vulnerabilities - `npm audit --omit=dev`: `0` vulnerabilities - `git diff --check`: passed; only the known line-ending warnings may be shown ## Additional Non-Live Runtime Evidence The current source build was started once through the normal non-elevated dev runtime without calling capture, preflight, probe, click, scroll, or scan endpoints. It proved the following boundaries without sending Genshin input: - `/health` reported the current runtime signature, one main window, and all four registered hotkeys. - `/scanner/status` found `GenshinImpact`, reported `isElevated: false`, and reached the C# helper while the native scanner remained `idle`. - IK data `6.7.0` loaded as valid with 61 Artifact sets and 289 pieces; weapons, characters, and materials remained `catalog_only`. - Four OCR workers warmed successfully in `212 ms`. - The saved 100-result run loaded through the runtime and legacy `deferred` values were enriched to `evaluated` without rewriting the source run. - A valid native PNG crop loaded successfully. An outside path, a JSON file, and a traversal path were all blocked with HTTP `409`. - The runtime was then shut down through `/dev/shutdown`; no stale Electron process or port listener remained. `npm run scan:native:validate:saved` now validates the newest complete 20/50/100 evidence set in one read-only command. It checks run contracts, PNG containment, non-persistence, review-log provenance, five-repeat determinism, scores, and projection boundaries. The current evidence set passed with zero issues. `npm run acceptance:offline` is the durable umbrella gate for work that does not require Genshin input. It runs lint, all unit tests, OCR eval, assessment self-test, saved native evidence validation, a fresh helper/app package build, 27 package checks, full and production dependency audits, and `git diff --check`. The current run passed every step and writes its machine- readable report under `outputs/offline-acceptance/`. ## Deliberately Not Claimed Yet - No packaged executable was launched. - No live Smart Capture or native scan was started. - No later-session 20/50/100 live repeatability claim was added. - No Inventory Kamera parity or 3-artifacts/second end-to-end claim was added. - Build-fit scoring and account recommendations remain separate later work. The required live and visual checks are listed in [TOMORROW_LIVE_TEST_PLAN_2026-07-10.md](TOMORROW_LIVE_TEST_PLAN_2026-07-10.md).