Skip to content

W104 — Compatibility sweep: manifest, v0.10.0 baseline diff, real save loads - #448

Merged
The-Running-Dev merged 1 commit into
mainfrom
slice/W104
Sep 6, 2026
Merged

W104 — Compatibility sweep: manifest, v0.10.0 baseline diff, real save loads#448
The-Running-Dev merged 1 commit into
mainfrom
slice/W104

Conversation

@The-Running-Dev

Copy link
Copy Markdown
Owner

Summary

Continues #447's partial W104 (the release-0.11 compatibility sweep), closing W104.1, W104.2, and W104.3.

  • W104.1 — the sweep's manifest now also names every 0.10 built-in campaign and its recorded version (scripts/w104-manifest.test.ts), plus the new representative-save and v0.10.0-compat-baseline fixtures below, on top of the hosts/packed-consumer-surface coverage W104 (partial) — Release 0.11 Compatibility Sweep #447 already landed in regressionManifest.test.ts.
  • W104.2fixtures/compat/v0.10.0/*.json freezes, per built-in campaign registry, the canonical initial Scene (projection + available actions + status) and Tier-1/2 validation findings, captured by running scripts/capture-compat-baseline.ts against the v0.10.0 tag in a throwaway worktree. capture-compat-baseline.test.ts reruns the identical capture at HEAD and diffs against the committed baseline — byte-identical across all five entries, since none of these built-in campaigns ever populated a field W93–W103 added (they predate the additive programme, so "0.11 additive fields omitted" holds by construction here rather than by a separate toggle).
  • W104.3fixtures/saves/*.json are six real SaveEnvelopes (story-graph/simulation/world-graph × active/ended), produced by running committed replay fixtures through the real engine (capture-save-fixtures.ts). capture-save-fixtures.test.ts loads each through an actual SessionStore.loadGame (seeded via a test SaveRecordStore) and confirms the resulting scene matches an independent re-run of the same fixture's own action log — plus one negative case proving a tampered checksum is rejected with no partial write (no session ever created from the failed load).

W104.5 stays unmet. SubZeroDev.Adventures and the service-contract generator it names aren't present in this repository, so "client/host/Adventures/service-contract parity against one archive" can't be exercised from here — the same disposition #447 recorded for the criteria it deferred.

A judgment call worth flagging: no shipped campaign or kind has ever moved version between v0.10.0 and HEAD (20-contract.md already states this plainly). That means every W104.3 load takes the no-migration branch — genuine, but narrower than the criterion's name suggests. Migration logic itself is still only proven against the synthetic case in envelope.test.ts; there is nothing real to migrate from yet.

Test plan

  • npm run typecheck — passes
  • npm run lint — passes
  • npm test — 1594 tests / 97 files, all passing (includes the new W104.1/.2/.3 suites)
  • Manually verified both new comparison gates have teeth: tampered a compat-baseline field and a save's checksum, confirmed each test fails for the right reason, then reverted.

…e loads

Closes W104.1, W104.2, W104.3, continuing #447's partial W104:

- W104.1: the manifest now also names every 0.10 built-in campaign and its
  recorded version (scripts/w104-manifest.test.ts), plus the new representative
  save and v0.10.0 compat-baseline fixtures below.
- W104.2: fixtures/compat/v0.10.0/*.json freezes, per built-in campaign registry,
  the canonical initial Scene (projection + actions + status) and Tier-1/2
  findings captured by running capture-compat-baseline.ts against the v0.10.0
  tag. capture-compat-baseline.test.ts reruns the same capture at HEAD and
  diffs — byte-identical across all five entries, since none of these
  campaigns ever populated a W93-W103 additive field.
  scripts/capture-compat-baseline.ts is the one producer, run at both revisions.
- W104.3: fixtures/saves/*.json are real SaveEnvelopes (story-graph, simulation,
  world-graph x active/ended), captured by running committed replay fixtures
  through the real engine. capture-save-fixtures.test.ts loads each through an
  actual SessionStore.loadGame and confirms the resulting scene matches an
  independent re-run of the same fixture, plus one negative case proving a
  tampered blob is rejected with no partial write. Every load takes the
  no-migration branch — 20-contract.md already states no shipped campaign has
  moved version yet, so migration itself stays proven only against the
  synthetic case in envelope.test.ts.

W104.5 (client/host/Adventures/service-contract parity against one archive)
stays unmet: SubZeroDev.Adventures and the service-contract generator are not
present in this repository, so it cannot be exercised from here — same
disposition #447 recorded for the other deferred criteria.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@The-Running-Dev
The-Running-Dev merged commit 9ece598 into main Sep 6, 2026
8 checks passed
@The-Running-Dev
The-Running-Dev deleted the slice/W104 branch September 6, 2026 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant