Repository navigation
spec(changes): generate the per-major spec-changes section and the protocol upgrade guide at publish; the pull request still generates both in memory and renders the diff (#22449 B′, condition 1) #22482
Description
Activity
objectstack-fleet commented
on Oct 9, 2026 ContributorAuthorMore actionsTriage: first grade,
priority:p2·domain:spec·area:devpath,pm:blockedon objectstack-ai/cloud#2750. ⛔ Its PR leaves draft only after PR #22215 mergesTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-09T12:59Z. ⛔ Not a claim, ⛔ not a dispatch.- Admission: ③, maintainer-directed ([Decision] generated protocol-change records (
spec-changes.jsonper-major section,docs/protocol-upgrade-guide.md): keep committing them, or generate them at publish like thereleasesection #22449 B′, card ①). Same grade as the parent. - Why blocked: once this lands, the committed
spec-changes.jsonis no longer compared and goes stale. cloud's changed-spec-surface guard still reads it from its pinned checkout, and under-reports silently. objectstack-ai/cloud#2750 moves that guard onto a generated projection and lands first.Blocked-by: objectstack-ai/cloud#2750is now in this body. That amends my order on [Decision] generated protocol-change records (spec-changes.jsonper-major section,docs/protocol-upgrade-guide.md): keep committing them, or generate them at publish like thereleasesection #22449 (posted there this round). - Landing order: the ruling says PR feat(spec)!: PROTOCOL_VERSION 17 → 18 in an ordinary PR — regenerated spec-changes.json and upgrade guide, ^18 handshakes, pre-mode lockstep exception (#22085 Q1 → B) #22215 lands first. Build this freely, but its PR stays draft until feat(spec)!: PROTOCOL_VERSION 17 → 18 in an ordinary PR — regenerated spec-changes.json and upgrade guide, ^18 handshakes, pre-mode lockstep exception (#22085 Q1 → B) #22215 merges.
- Direction: the body's own. Measure the two confidence gaps first, in the PR:
- the pre-
npm packhook; - every reader of the committed copy.
- the pre-
- One more pin: a registry that fails to generate turns the pull-request check red, and the rendered diff shows on a pull request that only adds an entry.
- Admission: ③, maintainer-directed ([Decision] generated protocol-change records (
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratepriority:p2Medium: important, M3Medium: important, M3
on Oct 9, 2026 objectstack-fleet commented
on Oct 9, 2026 ContributorAuthorMore actionsPointer from
repo:cloud#1(sessionsession_01WVbr5J6u8BHh8EyFtcWciH) · 2026-10-09T14:46Z · ⛔ Not a claim, no label change.This card's
Blocked-by: objectstack-ai/cloud#2750has landed. cloud PR #2752 merged at 2026-10-09T14:44:22Z asdce10383, and cloud#2750 is closedcompleted.Cloud's changed-spec-surface guard now generates the catalog with
pnpm run gen:spec-changesin the pinned framework checkout and reads only that output, never the committedspec-changes.json. A failed generation is exit 2. Both places run it identically:build-and-testand pin-smoke.Cloud's pin is still
56bf27affb. The generator exists there, so nothing waits on a pin move. The committed copy can stop being compared here (#22482) and be deleted later (#22485) without cloud under-reporting.
Generated by Claude Code
objectstack-fleet commented
on Oct 9, 2026 ContributorAuthorMore actionsUnlock:
pm:blocked→pm:queue. objectstack-ai/cloud#2750 landedTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-09T14:54Z. Unlock scan. ⛔ Not a claim, ⛔ not a dispatch.Thread-read: 6081379232
- objectstack-ai/cloud#2750 closed
completed. PR objectstack-ai/cloud#2752 merged asdce10383. - I read cloud
mainat that commit.scripts/audit-spec-changes.mjs:251runs the framework's owngen:spec-changes, andtest.yml/pin-smoke.ymlread only the generated catalog. Cloud no longer reads the committed copy, so this card's change can no longer leave cloud reading a stale one. - What still holds from
6081379232: ⛔ this card's PR stays draft until PR feat(spec)!: PROTOCOL_VERSION 17 → 18 in an ordinary PR — regenerated spec-changes.json and upgrade guide, ^18 handshakes, pre-mode lockstep exception (#22085 Q1 → B) #22215 merges, because the ruling says feat(spec)!: PROTOCOL_VERSION 17 → 18 in an ordinary PR — regenerated spec-changes.json and upgrade guide, ^18 handshakes, pre-mode lockstep exception (#22085 Q1 → B) #22215 lands first. feat(spec)!: PROTOCOL_VERSION 17 → 18 in an ordinary PR — regenerated spec-changes.json and upgrade guide, ^18 handshakes, pre-mode lockstep exception (#22085 Q1 → B) #22215 is still open at this read. - The direction and the confidence gaps to measure first are unchanged.
- objectstack-ai/cloud#2750 closed
Blocked-by: objectstack-ai/cloud#2750
Filing gate: ③ a maintainer-directed task. Ruling
6078203801on #22449 (B′, the maintainer's 「同意」 2026-10-09T09:27Z). Filed bydomain:specseat 1 (#6017) ·os-tesla· sessionsession_01VZqqwTj2wsihZEbfT6yyYN, as that ruling's 裁后执行 card ① and triage6078734415item 1. Parent: #22449. ⛔ Not a claim.What the ruling sets
"The per-major section of
spec-changes.jsonand the protocol upgrade guide are generated from the registries at publish, verified there, and shipped in the package and on the Release by the lane thereleasesection already uses."Condition (1): "the pull-request stage still generates both in memory, fails loudly when generation fails, and renders the generated diff on the pull request (a check artifact or a comment), so the review value #6957 named is kept; a B without this check is not taken."
This card
scripts/release-spec-changes.shalready runs for the per-releasereleasesection (--preparebeforechangeset publish,--verifyfrom the tarballs,--attachafter the Release exists). The same lane generates the per-major section ofpackages/spec/spec-changes.jsonand the upgrade guide from the ADR-0087 registries, verifies them from the tarballs, and attaches the same bytes to the Release.check:spec-changesandcheck:upgrade-guidestop comparing a committed copy. They generate both in memory and fail loudly when generation fails. The generated diff against the base renders on the pull request, as a check artifact or a comment.merge=os-regenroutes (card ③, which waits for this one), and the guide's public address (card ②).Confidence gaps the ruling names (measure first)
npm packof@objectstack/specis unmeasured;--preparealready rewrites the same file at the same point.packages/spec/scripts/check-generated.tsand the two checks. In cloud,scripts/audit-spec-changes.mjs:92–:93, which is the cloud seat's card.Acceptance
--preparethen--verify) produces the per-major section and the guide from the registries alone.releasesection behaviour is unchanged.