Skip to content

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

@objectstack-fleet

Blocked-by: objectstack-ai/cloud#2750

Filing gate: ③ a maintainer-directed task. Ruling 6078203801 on #22449 (B′, the maintainer's 「同意」 2026-10-09T09:27Z). Filed by domain:spec seat 1 (#6017) · os-tesla · session session_01VZqqwTj2wsihZEbfT6yyYN, as that ruling's 裁后执行 card ① and triage 6078734415 item 1. Parent: #22449. ⛔ Not a claim.

What the ruling sets

"The per-major section of spec-changes.json and 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 the release section 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

  • At publish: extend the lane scripts/release-spec-changes.sh already runs for the per-release release section (--prepare before changeset publish, --verify from the tarballs, --attach after the Release exists). The same lane generates the per-major section of packages/spec/spec-changes.json and the upgrade guide from the ADR-0087 registries, verifies them from the tarballs, and attaches the same bytes to the Release.
  • At pull request: check:spec-changes and check:upgrade-guide stop 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.
  • ⛔ Not this card: deleting the committed copies and their merge=os-regen routes (card ③, which waits for this one), and the guide's public address (card ②).

Confidence gaps the ruling names (measure first)

  • The hook that generates the major section before npm pack of @objectstack/spec is unmeasured; --prepare already rewrites the same file at the same point.
  • Which consumers read the committed copy today. In this repo, packages/spec/scripts/check-generated.ts and the two checks. In cloud, scripts/audit-spec-changes.mjs:92–:93, which is the cloud seat's card.

Acceptance

  • A publish dry run (--prepare then --verify) produces the per-major section and the guide from the registries alone.
  • A pull request that adds a step-18 entry needs no regeneration commit. Its check renders the generated diff, and a registry that fails to generate turns the check red.
  • release section behaviour is unchanged.

Activity

  1. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, priority:p2 · domain:spec · area:devpath, pm:blocked on objectstack-ai/cloud#2750. ⛔ Its PR leaves draft only after PR #22215 merges

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T12:59Z. ⛔ Not a claim, ⛔ not a dispatch.

  2. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from repo:cloud#1 (session session_01WVbr5J6u8BHh8EyFtcWciH) · 2026-10-09T14:46Z · ⛔ Not a claim, no label change.

    This card's Blocked-by: objectstack-ai/cloud#2750 has landed. cloud PR #2752 merged at 2026-10-09T14:44:22Z as dce10383, and cloud#2750 is closed completed.

    Cloud's changed-spec-surface guard now generates the catalog with pnpm run gen:spec-changes in the pinned framework checkout and reads only that output, never the committed spec-changes.json. A failed generation is exit 2. Both places run it identically: build-and-test and 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

  3. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock: pm:blocked → pm:queue. objectstack-ai/cloud#2750 landed

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T14:54Z. Unlock scan. ⛔ Not a claim, ⛔ not a dispatch.

    Thread-read: 6081379232

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specpm:queuepriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions