Skip to content

Plan the upstream v4 feature port onto the completed reliability baseline #87

Open

Description

@DysektAI

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions