diff --git a/design/30-slices.md b/design/30-slices.md index 0d6b866..c34f1da 100644 --- a/design/30-slices.md +++ b/design/30-slices.md @@ -4467,7 +4467,7 @@ operations, fixture ownership, package visibility, and the proof that replaces t Presentation's scene layer, republishing external packages, moving fixture content back from Content, or adopting a companion's design-state corpus wholesale. -### [ ] W104 — Release 0.11 Compatibility Sweep {#w104} +### [x] W104 — Release 0.11 Compatibility Sweep {#w104} **Delivers:** Existing campaign, save, replay, host, and package consumers can move from 0.10 to the additive candidate without silently changing behaviour. @@ -4479,27 +4479,45 @@ the additive candidate without silently changing behaviour. runner, host/service adapters, package archive assertions, and consumer smoke projects. - **Depends on:** [W93](#w93)–[W103](#w103) complete. This is the first unit allowed to call their combined result a release candidate baseline. -- **Status:** Not started. +- **Status:** Landed — all seven criteria confirmed met; closed by issue #392. - **Done when:** - - W104.1 A committed manifest names every 0.10 built-in campaign/version, representative + - [x] W104.1 A committed manifest names every 0.10 built-in campaign/version, representative active and ended save for each kind, every replay fixture, both hosts, and the packed public consumer surface; the sweep fails if an entry disappears without an explicit - replacement/evidence note. - - W104.2 Every 0.10 campaign source builds with all 0.11 additive fields omitted and produces + replacement/evidence note. Closed by PR #448: `scripts/w104-manifest.test.ts` names every + 0.10 built-in campaign/version and the save/compat-baseline fixture sets, on top of the + hosts/packed-consumer-surface entries PR #447 added to `regressionManifest.test.ts`. + - [x] W104.2 Every 0.10 campaign source builds with all 0.11 additive fields omitted and produces the same canonical runtime content, initial projection, available actions, and Tier-1/2 findings as its recorded 0.10 baseline unless a separately approved correction is named. - - W104.3 Every 0.10 save loads or migrates according to its recorded version boundary, with + Closed by PR #448: `fixtures/compat/v0.10.0/*.json` freezes the canonical initial `Scene` + and Tier-1/2 findings per built-in campaign, captured at the `v0.10.0` tag; a HEAD rerun + is byte-identical across all five entries. + - [x] W104.3 Every 0.10 save loads or migrates according to its recorded version boundary, with unchanged projection/outcome for defaulted additions and no partial write on failure. - - W104.4 Every pre-existing replay receives the same verdict and byte-identical outcome; any + Closed by PR #448: `fixtures/saves/*.json` (one active/ended pair per kind) load through + a real `SessionStore.loadGame` and match an independent re-run; a tampered-checksum case + proves no partial write. + - [x] W104.4 Every pre-existing replay receives the same verdict and byte-identical outcome; any intentionally migrated fixture is separately identified and proves - `replayCompatible: false` rather than silently replacing its golden file. - - W104.5 The text client, MCP server, static host and Adventures/service-contract integration + `replayCompatible: false` rather than silently replacing its golden file. Closed by + PR #447: 29 fixtures replayed against `v0.10.0`'s own committed corpus, byte-identical. + - [x] W104.5 The text client, MCP server, static host and Adventures/service-contract integration pass against the same engine archive and use only the declared SessionStore surface. - - W104.6 A clean pack contains the asserted files and no private source/plans, installs into + Closed by PR #452, after PR #449 covered the in-repository text client and MCP server via + the client-boundary ESLint rule and their own API-coverage suites: the engine packed at + `e52e7a1` was re-vendored into `SubZeroDev.Platform`, `SubZeroDev.Adventures`, and + `SubZeroDev.ServiceContract`, each passing its full suite with no reach past + `SessionStore`/`Portable*`/`fromPortable`. Recorded as a point-in-time proof, not a + standing cross-repo CI gate, since none of the three repos live inside this one. + - [x] W104.6 A clean pack contains the asserted files and no private source/plans, installs into the lockfile-backed consumer smoke, and compiles/runs all public and `/authoring` - examples without workspace resolution. - - W104.7 The compatibility sweep runs from one documented command/CI job and exits non-zero + examples without workspace resolution. Closed by PR #447: clean tarball, no workspace + resolution, `/authoring` exports exercised in the consumer smoke. + - [x] W104.7 The compatibility sweep runs from one documented command/CI job and exits non-zero with the exact artifact that drifted; its green result and baseline commit are recorded. + Closed by PR #447: `build/Test-CompatibilitySweep.ps1` composes typecheck/lint/test, the + replay oracle, and the packed-tarball consumer smoke into one documented command. - **Out of scope:** preserving undocumented implementation details, treating an approved bug fix as a compatibility failure without its evidence, publishing a package, or accepting new feature work after the baseline is cut. diff --git a/design/TODO.md b/design/TODO.md index 697670e..b9b6252 100644 --- a/design/TODO.md +++ b/design/TODO.md @@ -274,7 +274,7 @@ ### [x] W103 — Companion Contracts and Ownership Reconciliation {#w103} -### [ ] W104 — Release 0.11 Compatibility Sweep {#w104} +### [x] W104 — Release 0.11 Compatibility Sweep {#w104} ### [ ] W105 — Documentation and Landing Publication Review {#w105} diff --git a/design/state-index.md b/design/state-index.md index 1c7590a..2fd55df 100644 --- a/design/state-index.md +++ b/design/state-index.md @@ -115,7 +115,6 @@ rendered here. | milestone/6 | #292 | Content packs compose at campaign granularity, but dynamic content injection needs node granularity | — | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | | milestone/6 | #293 | A session belongs to exactly one campaign, and nothing decides what happens if content spans two | — | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | | milestone/1 | #300 | Campaign sources here are fixtures now, but nothing in the tree says so | — | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | -| milestone/6 | #392 | W104 — Release 0.11 Compatibility Sweep | W104.1, W104.2, W104.3, W104.4, W104.5, W104.6, W104.7 | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | | milestone/6 | #393 | W105 — Documentation and Landing Publication Review | W105.1, W105.2, W105.3, W105.4, W105.5, W105.6, W105.7 | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | | milestone/6 | #394 | W106 — Tracker Evidence Closure | W106.1, W106.2, W106.3, W106.4, W106.5, W106.6, W106.7 | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | | milestone/6 | #395 | W107 — 0.11 Release Candidate Verification | W107.1, W107.2, W107.3, W107.4, W107.5, W107.6, W107.7 | `f0735fc59fcfd879911771fefdeb1f41cc90f252` | diff --git a/design/state/work/392.md b/design/state/work/392.md index 49388b3..3586e9a 100644 --- a/design/state/work/392.md +++ b/design/state/work/392.md @@ -1,7 +1,7 @@ # work/392 Issue: 392 Title: W104 — Release 0.11 Compatibility Sweep -State: OPEN +State: CLOSED Rank: milestone/6 -MirroredAt: f0735fc59fcfd879911771fefdeb1f41cc90f252 +MirroredAt: e52e7a104311c3afa431d412f3ef8f778d402ba1 Criteria: W104.1, W104.2, W104.3, W104.4, W104.5, W104.6, W104.7 diff --git a/docs/docs/engine/TODO.md b/docs/docs/engine/TODO.md index 6957a6b..add285a 100644 --- a/docs/docs/engine/TODO.md +++ b/docs/docs/engine/TODO.md @@ -4462,7 +4462,7 @@ operations, fixture ownership, package visibility, and the proof that replaces t Presentation's scene layer, republishing external packages, moving fixture content back from Content, or adopting a companion's design-state corpus wholesale. -### [ ] W104 — Release 0.11 Compatibility Sweep {#w104} +### [x] W104 — Release 0.11 Compatibility Sweep {#w104} **Delivers:** Existing campaign, save, replay, host, and package consumers can move from 0.10 to the additive candidate without silently changing behaviour. @@ -4474,27 +4474,45 @@ the additive candidate without silently changing behaviour. runner, host/service adapters, package archive assertions, and consumer smoke projects. - **Depends on:** [W93](#w93)–[W103](#w103) complete. This is the first unit allowed to call their combined result a release candidate baseline. -- **Status:** Not started. +- **Status:** Landed — all seven criteria confirmed met; closed by issue #392. - **Done when:** - - W104.1 A committed manifest names every 0.10 built-in campaign/version, representative + - [x] W104.1 A committed manifest names every 0.10 built-in campaign/version, representative active and ended save for each kind, every replay fixture, both hosts, and the packed public consumer surface; the sweep fails if an entry disappears without an explicit - replacement/evidence note. - - W104.2 Every 0.10 campaign source builds with all 0.11 additive fields omitted and produces + replacement/evidence note. Closed by PR #448: `scripts/w104-manifest.test.ts` names every + 0.10 built-in campaign/version and the save/compat-baseline fixture sets, on top of the + hosts/packed-consumer-surface entries PR #447 added to `regressionManifest.test.ts`. + - [x] W104.2 Every 0.10 campaign source builds with all 0.11 additive fields omitted and produces the same canonical runtime content, initial projection, available actions, and Tier-1/2 findings as its recorded 0.10 baseline unless a separately approved correction is named. - - W104.3 Every 0.10 save loads or migrates according to its recorded version boundary, with + Closed by PR #448: `fixtures/compat/v0.10.0/*.json` freezes the canonical initial `Scene` + and Tier-1/2 findings per built-in campaign, captured at the `v0.10.0` tag; a HEAD rerun + is byte-identical across all five entries. + - [x] W104.3 Every 0.10 save loads or migrates according to its recorded version boundary, with unchanged projection/outcome for defaulted additions and no partial write on failure. - - W104.4 Every pre-existing replay receives the same verdict and byte-identical outcome; any + Closed by PR #448: `fixtures/saves/*.json` (one active/ended pair per kind) load through + a real `SessionStore.loadGame` and match an independent re-run; a tampered-checksum case + proves no partial write. + - [x] W104.4 Every pre-existing replay receives the same verdict and byte-identical outcome; any intentionally migrated fixture is separately identified and proves - `replayCompatible: false` rather than silently replacing its golden file. - - W104.5 The text client, MCP server, static host and Adventures/service-contract integration + `replayCompatible: false` rather than silently replacing its golden file. Closed by + PR #447: 29 fixtures replayed against `v0.10.0`'s own committed corpus, byte-identical. + - [x] W104.5 The text client, MCP server, static host and Adventures/service-contract integration pass against the same engine archive and use only the declared SessionStore surface. - - W104.6 A clean pack contains the asserted files and no private source/plans, installs into + Closed by PR #452, after PR #449 covered the in-repository text client and MCP server via + the client-boundary ESLint rule and their own API-coverage suites: the engine packed at + `e52e7a1` was re-vendored into `SubZeroDev.Platform`, `SubZeroDev.Adventures`, and + `SubZeroDev.ServiceContract`, each passing its full suite with no reach past + `SessionStore`/`Portable*`/`fromPortable`. Recorded as a point-in-time proof, not a + standing cross-repo CI gate, since none of the three repos live inside this one. + - [x] W104.6 A clean pack contains the asserted files and no private source/plans, installs into the lockfile-backed consumer smoke, and compiles/runs all public and `/authoring` - examples without workspace resolution. - - W104.7 The compatibility sweep runs from one documented command/CI job and exits non-zero + examples without workspace resolution. Closed by PR #447: clean tarball, no workspace + resolution, `/authoring` exports exercised in the consumer smoke. + - [x] W104.7 The compatibility sweep runs from one documented command/CI job and exits non-zero with the exact artifact that drifted; its green result and baseline commit are recorded. + Closed by PR #447: `build/Test-CompatibilitySweep.ps1` composes typecheck/lint/test, the + replay oracle, and the packed-tarball consumer smoke into one documented command. - **Out of scope:** preserving undocumented implementation details, treating an approved bug fix as a compatibility failure without its evidence, publishing a package, or accepting new feature work after the baseline is cut.