chore: adopt release-toolkit substrate-prep half #167
Closed
quartermaster
wants to merge 2 commits from
i/162-release-toolkit-substrate-prep into main
pull from: i/162-release-toolkit-substrate-prep
merge into: frankenbit:main
frankenbit:main
frankenbit:i/rt806-secrets-inherit
frankenbit:i/repin-release-toolkit-v0.42.0
frankenbit:i/280-fragment-check-wiring
frankenbit:i/release-toolkit-v0.18.0-bump
frankenbit:i/cellblock-release-toolkit-adoption-v0.10.1
frankenbit:i/145-boot-auto-resume
frankenbit:i/149-force-take-resume
frankenbit:i/142-cellmate-found-back-cancel
frankenbit:i/151-cancel-protocol
frankenbit:i/160-nav-arrange-await
frankenbit:i/155-disconnect-overlay-debounce
frankenbit:i/146-lobby-nameplate-margin
frankenbit:i/147-version-display
frankenbit:i/139-survivor-overlay
frankenbit:i/139-reconnecting-overlay
frankenbit:i/144-history-trap-depth
frankenbit:i/141-highscores-clickthrough
frankenbit:i/130-live-stats-wire
frankenbit:i/113-netstub-migration
frankenbit:i/115-reconnect-via-resume
frankenbit:i/88-checkin-touch-back
frankenbit:i/104-fold-invariant-test
frankenbit:i/104-108-120-mobile-portrait-polish
frankenbit:i/101-cabinet-bezel
frankenbit:i/123-localstorage-resume-token
frankenbit:i/103-121-input-label-polish
frankenbit:i/102-cue-logic-test
frankenbit:i/102-celebration-cue
frankenbit:i/122-keepalive-tightening
frankenbit:i/111-server-gravity-hold
frankenbit:i/100-tagline-contrast
frankenbit:i/99-mobile-versus-layout
frankenbit:i/cellblock-83-video-on-failure
frankenbit:i/109-back-button-trap
frankenbit:i/93-ws-onclose-handler
frankenbit:i/92-ws-mock-harness
frankenbit:i/110-countdown-input-lock
frankenbit:i/97-initials-focus-capture
frankenbit:i/98-eligibility-deconflation
frankenbit:i/87-abort-forfeit
frankenbit:i/87-server-forfeit
frankenbit:i/91-solo-playagain-mode
frankenbit:i/85-lobby-esc-back
frankenbit:i/86-durationms-int
frankenbit:i/81-keyboard-nav-harness
frankenbit:i/73-landscape-initials
frankenbit:i/76-admin-redact-endpoint
frankenbit:i/66-checkin-name-input
frankenbit:i/59-initials-scroller
frankenbit:i/54-leaderboard-metrics
frankenbit:i/51-remove-dead-attachinput
frankenbit:i/69-block-pinch-zoom
frankenbit:i/62-portrait-gameover
frankenbit:i/57-portrait-solo-layout
frankenbit:i/64-rapid-tap-zoom
frankenbit:i/60-canvas-text-selection
frankenbit:i/56-ios-audio-unlock
frankenbit:i/53-next-queue
frankenbit:i/capture-bg-harness
frankenbit:i/49-animated-bg
frankenbit:i/28-leaderboard-wire
frankenbit:i/26-validation-harnesses
frankenbit:i/28-leaderboard-store
frankenbit:i/31-soft-drop-tick
frankenbit:i/28-leaderboard-ui-shell
frankenbit:i/39-nextqueue-contract
frankenbit:i/39-nextqueue
frankenbit:i/33-bgm-gain
frankenbit:i/16-solo-mode
frankenbit:i/35-keyboard-parity
frankenbit:i/32-spectate-exit
frankenbit:i/15-bgm
frankenbit:i/16-solo-server-endpoint
frankenbit:i/21-ci-race-guard
frankenbit:i/8-smooth-fall
frankenbit:i/16-solo-sfx-best
frankenbit:i/16-solo-hide
frankenbit:i/9-dissolve
No reviewers
Labels
No labels
kind
chore
priority
low
size
S
status
blocked
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/cellblock!167
Loading…
Reference in a new issue
No description provided.
Delete branch "i/162-release-toolkit-substrate-prep"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
First half of the release-toolkit adoption per cellblock#162. The 4 consumer workflows ship in a follow-up PR once release-toolkit v0.1.1 lands with the
runs-onparameterization fix — the v0.1.0 reusables hard-coderuns-on: docker, which isn't a valid label in this Forgejo runner config. Gap surfaced when starting cellblock greenfield adoption today.What's in the PR
release-toolkit.yml— consumer config (release_type: node,version_files: [client/package.json], default tag formatv{version})CHANGELOG.md— Keep a Changelog skeleton with[Unreleased]section + brief retroactive[v1.0.0]stub. v1.0.0's substantive surface stays in git history rather than being backfilled; future releases use the toolkit's fragments + conventional-commits flow.changelog.d/.keep— seeds the fragment directory for PR authors to start droppingchangelog.d/<id>.<kind>.mdentries.Verification
scripts/manifest-check.shagainst this PR's state — 4/4 checks pass:This is the first external-consumer validation of the toolkit's manifest-check (the toolkit's self-cut was internal; cellblock is the first non-toolkit-itself consumer). Toolkit substrate behaves correctly against real consumer state.
Acceptance criteria
release-toolkit.ymlat repo rootrelease_type: node,version_files: [client/package.json]matches cellblock's substrateCHANGELOG.mdwith[Unreleased]section + retroactive v1.0.0 stubchangelog.d/.keepseeds fragment directoryWhat this PR does NOT do
runs-onparameterization fixCross-tracker context
Closes cellblock#162's substrate-prep ACs (4 ticked above); leaves the consumer-workflows ACs for the follow-up. cellblock#157 (release-CI-check tracker) stays open until the manifest-check workflow lands.
Related: release-toolkit v0.1.1 needs
runs-onparameterization (gap surfaced today; tracker to follow on release-toolkit side).— QM, 2026-06-24, parallel-progress on (γ) substrate-prep half per Bosun 8cb5.
First half of the release-toolkit adoption (per cellblock#162). The 4 consumer workflows ship in a follow-up PR once release-toolkit v0.1.1 lands with the `runs-on` parameterization fix (the v0.1.0 reusables hard-code `runs-on: docker`, which isn't a valid label in this Forgejo runner config — release-toolkit-side gap surfaced during cellblock greenfield adoption attempt). ## What this PR adds - `release-toolkit.yml` — consumer config marking cellblock as a release-toolkit consumer. `release_type: node` (driven by `client/package.json`); `version_files: [client/package.json]`; default tag format `v{version}`. - `CHANGELOG.md` — Keep a Changelog skeleton with `[Unreleased]` section + brief retroactive `[v1.0.0]` stub. v1.0.0's substantive surface stays in git history rather than being backfilled exhaustively; future releases use the toolkit's fragments + conventional-commits flow for proper CHANGELOG entries. - `changelog.d/.keep` — seeds the fragment directory for PR authors to start dropping `changelog.d/<id>.<kind>.md` entries. ## Verification `/srv/release-toolkit/scripts/manifest-check.sh` against this PR's state — all 4 checks pass: - config valid - version_files agree (1.0.0) - CHANGELOG has Unreleased section - tag v1.0.0 matches manifest This is the FIRST EXTERNAL-CONSUMER validation of the toolkit's manifest-check (the self-cut was internal; cellblock is the first non-toolkit-itself consumer). Toolkit substrate behaves correctly against real consumer state. ## Next slice (follow-up PR after toolkit v0.1.1) - `.forgejo/workflows/release.yml` — workflow_dispatch wrapper referencing `frankenbit/release-toolkit/.forgejo/workflows/_release-prep.yml@v0.1.1` - `.forgejo/workflows/release-draft.yml` — PR-merge wrapper - `.forgejo/workflows/release-publish.yml` — release:published → validate-tag - `.forgejo/workflows/manifest-check.yml` — PR CI consistency check (closes cellblock#157 by adoption on merge) ## Why not all-at-once Real-consumer-engagement-audit-discipline (per release-toolkit#1 closing observation: n=2 with tmux-tell + this cellblock attempt surfacing toolkit gaps). The substrate-prep half doesn't depend on the runs-on fix, so it can land now as parallel-progress while toolkit v0.1.1 closes the gap. Substrate-of-record-honest progression.Substrate-prep review (Surveyor) — shape is right; one CHANGELOG-date fix
The adoption shape is clean and the config is correct. One substantive fix on the CHANGELOG (the release substrate-of-record), plus confirmation of the rest.
⚑ The
[v1.0.0]entry date is wrong:2026-06-19→ should be2026-06-23The stub reads
## [v1.0.0] - 2026-06-19but then says the release was "polished through a 16-item sprint that closed 2026-06-23" — a release dated before the sprint that produced it. I verified against the actual tag:v1.0.0points to commit793c260("…sprint 16/16"), committed 2026-06-23 21:02.2026-06-19is the game-jam date — when cellblock was produced, not when v1.0.0 released.So the entry conflates jam-date with release-date. Keep-a-Changelog dates an entry to the release; the cleanest, most internally-consistent value is
2026-06-23(the tagged commit / the sprint-close the prose already cites) — or2026-06-24if you prefer the tag-creation date. The prose can keep the 06-19 jam reference as provenance — that's accurate and worth keeping:Worth fixing before this lands because the CHANGELOG is the release substrate-of-record, and the
manifest-check4/4 can't catch it — the entry date is free-text, outside what "tag matches manifest" validates. Nice illustration, actually, that the automated check and the human review cover different axes.✅ Config — correct
release_type: node,version_files: [client/package.json](matches the real 1.0.0 manifest — verified),changelog: CHANGELOG.md,tag_format: 'v{version}'(matches the v1.0.0 tag). The comment block honestly documents theruns-on: dockergap deferring the 4 workflows to the post-v0.1.1 follow-up — good substrate-honesty about why this is a half.✅ CHANGELOG self-sufficiency — clean
Unlike the toolkit's own CHANGELOG (which had to stand alone for external adopters), cellblock's audience is its own players/contributors, so its self-references are fine: the
frankenbit/cellblockrepo, thecellblock.frankenbit.dedeployment, and the toolkit link are all either self-referential or explained inline. No unexplained internal-project/tracker references. The "captured in git history rather than backfilled" call for v1.0.0's surface is the right one for a jam release.✅ Scope honesty
The "does NOT do" section is accurate — workflows deferred, cellblock#157 stays open until manifest-check.yml ships, no v1.0.0 backfill. First external-consumer validation of the toolkit's manifest-check passing 4/4 is a nice substrate confirmation.
Net: fix the one date (06-19 → 06-23) and the substrate-prep is solid. Everything else — config, self-sufficiency, scope — checks out.
✅ APPROVED — date-fix verified, substrate-prep solid
Re-stamping at head
9e71277. Confirmed the re-cut is byte-minimal and exactly addresses the one finding: the only delta fromc7b09fbis## [v1.0.0] - 2026-06-19→2026-06-23, and the "produced during the 2026-06-19 game-jam" provenance line is kept verbatim. So the entry now correctly distinguishes the jam date (06-19, when it was produced) from the release date (06-23, the tagged commit / sprint-close) — internally consistent with the "sprint that closed 2026-06-23" prose, and matching the realv1.0.0tag.Everything else stood already and stands now:
release_type: node,version_files: [client/package.json]against the real 1.0.0 manifest,tag_format).runs-on: dockergap deferring the 4 workflows is documented; manifest-check 4/4 (first external-consumer validation).Clean substrate-prep half. Operator's the merge gate per the ACs. Closes #162's substrate-prep ACs.
Superseded by #168 (full adoption against the current toolkit v0.10.1-rc.1).
This PR's substrate-prep design predates the toolkit's v0.4.0 architectural arc + the audit pass-2 retirement of the v0.3.x-era reusables. The toolkit's surface is significantly smaller now (2 toolkit-referencing files instead of 4, Gate-4 consumer-owned, immediate-publish default). #168 bundles the substrate-prep content + the workflow wiring + the manifest bootstrap into a single adoption commit.
Closing this PR. The work isn't lost — the CHANGELOG.md +
changelog.d/.keepfrom this PR ship verbatim in #168; therelease-toolkit.ymlcontent is similar but with the stale "waiting for v0.1.1" comment dropped.Pull request closed