W104 — Compatibility sweep: manifest, v0.10.0 baseline diff, real save loads - #448
Merged
Conversation
…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>
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Continues #447's partial W104 (the release-0.11 compatibility sweep), closing W104.1, W104.2, and W104.3.
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 inregressionManifest.test.ts.fixtures/compat/v0.10.0/*.jsonfreezes, per built-in campaign registry, the canonical initialScene(projection + available actions + status) and Tier-1/2 validation findings, captured by runningscripts/capture-compat-baseline.tsagainst thev0.10.0tag in a throwaway worktree.capture-compat-baseline.test.tsreruns 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).fixtures/saves/*.jsonare six realSaveEnvelopes (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.tsloads each through an actualSessionStore.loadGame(seeded via a testSaveRecordStore) 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.Adventuresand 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.0and HEAD (20-contract.mdalready 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 inenvelope.test.ts; there is nothing real to migrate from yet.Test plan
npm run typecheck— passesnpm run lint— passesnpm test— 1594 tests / 97 files, all passing (includes the new W104.1/.2/.3 suites)