ci(bundle): compose schema 2 for ServUO and Rust beside schema 1 (rust phase 18, step 2) #27

Merged
whitlocktech merged 1 commits from ci/bundle-schema-2 into main 2026-09-26 03:54:16 +00:00
Member

Step 2 of the phase-18 build order (docs/modules/rust/PLAN.md §34.2.7), implementing D146 and D147. It lands on main because bundle.yml is only ever edited there, and the compose job has to understand a Rust release before the first one dispatches it.

What changes

  • The compose job now writes three streams on the bundles branch:
    • the root current.json (schema 1, ServUO), exactly as before;
    • v2/servuo/ (schema 2);
    • v2/rust/ (schema 2).
  • The gates and documents move into .gitea/scripts/compose-bundles.sh, so they run by hand without a runner. The workflow keeps checkout, the stale-component dispatch and the push. The stale check now covers whichever components resolved, so the Rust repositories are included once they release.
  • Failure is per game. A Rust protocol mismatch still lets a ServUO bundle publish, and the run goes red afterwards. A game whose repositories have never released composes nothing and does not fail. That is Rust's state until its cutover.
  • One matrix, one tag. A ServUO pair carries the same tag at both schemas. The first run therefore publishes v2/servuo/bundle-2026.09.15.json, not a second name for the same pair.
  • Schema 1 stops being composed on 2027-01-01 and is left frozen (§34.4).
  • bundles/README.md documents the streams and schema 2.

Tested in debian:12, the runner's base image:

  • Against the real releases. v2/servuo published as 2026.09.15, and the rebuilt schema-1 document compared equal to the published one, so the shipped shape is unchanged. Rust was skipped as unreleased. A rerun wrote nothing, and with TODAY=2027-01-02 schema 1 stays frozen.
  • Against a mock Gitea, for Rust, since neither repository has released:
    • the document composed as §34.2.2 sketches;
    • a protocol mismatch (12 against 11) was refused;
    • a manifest missing min_carbon_version was refused;
    • a rerun wrote nothing;
    • ServUO failing did not block Rust.
    • The mock caught one real bug before commit: a jq precedence error in the manifest check.

After merge: I'll dispatch bundle.yml once by hand. It should publish v2/servuo/ and skip Rust. Then Rust-Plugins (step 3).

For your review: the ServUO schema-2 payload.compat is schema 1's servuo block moved as-is (min_version, patches_verified_against). The plan said "today's servuo block", and this is my reading of it.

  • AI-assisted: Claude Code (Claude Opus 5.5)

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

Step 2 of the phase-18 build order (docs/modules/rust/PLAN.md §34.2.7), implementing D146 and D147. It lands on `main` because `bundle.yml` is only ever edited there, and the compose job has to understand a Rust release before the first one dispatches it. **What changes** - The compose job now writes three streams on the `bundles` branch: - the root `current.json` (schema 1, ServUO), exactly as before; - `v2/servuo/` (schema 2); - `v2/rust/` (schema 2). - The gates and documents move into `.gitea/scripts/compose-bundles.sh`, so they run by hand without a runner. The workflow keeps checkout, the stale-component dispatch and the push. The stale check now covers whichever components resolved, so the Rust repositories are included once they release. - **Failure is per game.** A Rust protocol mismatch still lets a ServUO bundle publish, and the run goes red afterwards. A game whose repositories have never released composes nothing and does not fail. That is Rust's state until its cutover. - **One matrix, one tag.** A ServUO pair carries the same tag at both schemas. The first run therefore publishes `v2/servuo/bundle-2026.09.15.json`, not a second name for the same pair. - Schema 1 stops being composed on **2027-01-01** and is left frozen (§34.4). - `bundles/README.md` documents the streams and schema 2. **Tested** in `debian:12`, the runner's base image: - **Against the real releases.** `v2/servuo` published as `2026.09.15`, and the rebuilt schema-1 document compared equal to the published one, so the shipped shape is unchanged. Rust was skipped as unreleased. A rerun wrote nothing, and with `TODAY=2027-01-02` schema 1 stays frozen. - **Against a mock Gitea**, for Rust, since neither repository has released: - the document composed as §34.2.2 sketches; - a protocol mismatch (12 against 11) was refused; - a manifest missing `min_carbon_version` was refused; - a rerun wrote nothing; - ServUO failing did not block Rust. - The mock caught one real bug before commit: a jq precedence error in the manifest check. **After merge:** I'll dispatch `bundle.yml` once by hand. It should publish `v2/servuo/` and skip Rust. Then Rust-Plugins (step 3). **For your review:** the ServUO schema-2 `payload.compat` is schema 1's `servuo` block moved as-is (`min_version`, `patches_verified_against`). The plan said "today's servuo block", and this is my reading of it. - [x] AI-assisted: Claude Code (Claude Opus 5.5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-09-26 03:50:12 +00:00
ci(bundle): compose schema 2 for ServUO and Rust beside schema 1
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 1m12s
4f268f7ffb
Module-rust phase 18, step 2 of docs/modules/rust/PLAN.md §34.2.7 (D146,
D147). The compose job now writes three streams on the bundles branch:

  current.json         schema 1, ServUO, exactly as before
  v2/servuo/           schema 2, game "servuo"
  v2/rust/             schema 2, game "rust" (Rust-Link + Rust-Plugins)

The gates move into .gitea/scripts/compose-bundles.sh, so they can be run by
hand against the real release API or a mock without a runner. Each game
composes independently: a Rust failure still lets a ServUO bundle publish, and
the run goes red afterwards. A game whose repos have never released composes
nothing and does not fail, which is where Rust is until its cutover.

A ServUO matrix carries the same tag at both schemas, so the first run
publishes v2/servuo/bundle-2026.09.15.json rather than a second name for the
pair. Schema 1 stops being composed on 2027-01-01 and is left frozen.

Tested in debian:12 against the real releases (v2/servuo published as
2026.09.15, schema 1 unchanged, Rust skipped; rerun is a no-op; past the
retirement date schema 1 is frozen) and against a mock Gitea for Rust
(document composed, protocol mismatch refused, missing manifest key refused,
rerun a no-op, ServUO failing independently).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech approved these changes 2026-09-26 03:52:36 +00:00
whitlocktech merged commit 8e4cbc6406 into main 2026-09-26 03:54:16 +00:00
whitlocktech deleted branch ci/bundle-schema-2 2026-09-26 03:54:17 +00:00
Sign in to join this conversation.
No description provided.