Repository navigation
Description
Baselines and scope
The five reliability PRs #71, #74, #77, #75 and #72 are merged. Fork baseline: 891b774bd06d3dbf3176544bcb9fa3195f837c8f (the fully verified candidate tree had 446 passing tests in Debug and Release, zero skips, and 2 hosted UI passes).
Upstream reference: RatScanner/RatScanner@cfc243ee2adb070b6db3ac27c7a48aea3cca5b7a, prerelease v4.0.0-beta, published 2026-11-01. Latest stable is still v3.10.3. Port selected features as separate PRs; preserve this fork rather than merging upstream wholesale.
Tag collision: the fork's v4.0.0-beta names f11771eb0dfe08b4f607ff7e827c9b02cc7771b6; upstream's annotated tag peels to cfc243e. Use immutable SHAs and never overwrite fork tags.
Port sequence
| Slice | Dependencies and scope | Acceptance evidence |
|---|---|---|
| 1. Local progress foundation | Per-mode task/objective/profile store, explicit progress-source abstraction, atomic persistence and versioned backup adapter. Reference upstream 5acd1c5/LocalProgressStore. | Mode isolation; null/empty/corrupt/unsupported input; interrupted writes; task/objective semantics; import/export against the official tracker contract. |
| 2. Read-only task browser | Slice 1; reuse fork projections and quest classifier. Adapt upstream 5828c56/182f4fa. | Locked/available/started/completed/failed/unknown cases; search/filter selection lifecycle; real WebView navigation, keyboard and scrolling. |
| 3. Manual local progress edits | Slices 1–2; objective counts, task states, profile fields and per-mode reset. | Count bounds, reversible edits, task/objective consistency, reload persistence; local edits make no remote writes. |
| 4. Rich lazy map models | Existing TarkovDevAPI projections/cache; upstream map spawns/transits/locks/hazards. Audit #70 correction requirements. | Absent/malformed geometry; older offline caches; coalescing/fallback; maps remain off the cold-start critical path. |
| 5. Map/task navigation | Slices 2 and 4; adapt upstream a235baf/f8c230e/ee7b64b/da47910. | Known coordinate/rotation fixtures, objective-to-map selection, duplicate/dark maps, zoom/pan/Escape/focus and rendered screenshots. |
| 6. Screenshot-derived position | Slice 5; adapt EftPlayerPosition and b8f951a/fa24f81. This is intermittent filename-derived position, not continuous telemetry. | Filename/culture/quaternion fixtures; stale/malformed files; directory creation/watcher errors/disposal; visible freshness and manual EFT screenshot smoke. |
| 7. EFT log infrastructure | Owned lifecycle service, discovery/history, incremental parser and raid lifecycle detection. Reference 65ebb6b/e0512a7/037de8b/dc2ca5e/f8ff5e9. | Partial/multiline JSON, rotation/truncation, duplicates, historical/live boundaries, cancellation and unknown game mode. |
| 8. Log-driven local progress/replay | Slices 1–3 and 7; adapt 458b065/bdcff26/c647c99/bc0cff0. | Idempotent replay, completion/failure ordering, mode ambiguity blocks mutation, notifications suppressed during replay, restart persistence, no remote calls. |
| 9. Explicit tracker writes | Slice 3 plus agreed write policy; adapt e873905 into the fork's async tracker service. | Capture mode/token per operation; permission/expiry/rate-limit/partial failure; cancellation/refresh races; duplicate requests; mocked HTTP contract, then authorized test-account smoke. |
Compatibility trap to fix in slice 1
Upstream's claimed TarkovTracker backup v2 export is rejected by the current official importer. It omits root gameEdition, explicit tarkovUid and seasonNumber; it can emit null pmcFaction, which the importer rejects. Seasonal data also requires the active season identity.
Evidence: upstream LocalProgressStore.cs:443–458 versus official importer at c64868b (also :82–90 and :214–215). Static validation establishes these incompatibilities; a cross-project import execution and exhaustive objective semantics test are still required. Do not advertise compatibility before those pass.
Fork invariants
- Retain standalone RatEye source/submodule boundary and merged warm-up API; no sibling/NuGet fallback.
- Retain fork dependencies, branding, independent updater/version line, async tracker cancellation, secure token storage and mode isolation. Adapt old upstream Razor APIs instead of downgrading packages.
- Preserve fork config schema 4 with explicit migrations. Never import upstream schema 2's incompatible-config deletion behavior.
- Reuse existing catalog/cache/classifier paths and all locale catalogs. Keep maps/log work lazy, cancellable and bounded; compare startup/idle costs with the merged diagnostics.
Recommended product defaults for implementation review
Explicit progress source per mode, with no implicit merging; logs update local progress initially; replay previews its scope and preserves newer explicit edits; integrate tasks/maps in the main window first. Remote writes remain a separate opt-in feature.
Completion and release gates
Each slice needs regression sensitivity, caller/bypass and semantic review, relevant Debug/Release checks, rendered UI validation where applicable, and local review. Keep each root cause reviewable. No feature implementation or release is authorized by this planning issue alone.
Track existing follow-ups separately: #84 result ordering, #85 dev-tool advisories, and #86 fixed-dark theme behavior. Resolve the theme problem before a user-facing release; no release was published in the five-fix pass.
Activity