Skip to content

docs(release): establish the current preparation procedure - #389

Merged
EffortlessSteven merged 18 commits into
mainfrom
agent/release-preparation-runbook
Aug 4, 2026
Merged

docs(release): establish the current preparation procedure#389
EffortlessSteven merged 18 commits into
mainfrom
agent/release-preparation-runbook

Conversation

@EffortlessSteven

@EffortlessSteven EffortlessSteven commented Aug 4, 2026

Copy link
Copy Markdown
Member

Final exact-head proof

Current rebased head: d03564d9508c39a1fe35cfa087b73117a276f1cb

This head is based on merged #391 (ac9308542fc6ec4daa1337bf81303bcf443542e1) and observed locally:

  • cargo xtask check-doc-artifacts — pass
  • cargo xtask check-policy-ledgers — pass
  • cargo xtask check-goals — pass
  • cargo xtask check-support-tiers — pass
  • cargo xtask check-workflows --mode blocking-allowlist — pass
  • cargo xtask check-file-policy --mode blocking-allowlist — pass
  • cargo xtask check-automation-authority --repository-role swarm — pass
  • cargo xtask promotion-state --check — pass
  • git diff --check — pass

The procedure now requires an approved full readiness SHA, clean tracked checkout, detached exact-SHA verification, existing-tag rejection, annotated-tag peel verification, and explicit stop conditions for source advancement or failed candidates. It states that #391 proves the swarm candidate contract while the source writer and exact-tag live proof remain required. No tag, source promotion, release, or publication was performed.

What changed Establishes one living release-preparation procedure and aligns the promotion and agent guidance with the control plane that now exists. - adds docs/release/README.md as the index separating current instructions from historical release receipts; - adds docs/release/release-preparation.md, covering shared candidate definition/freeze on swarm, exact promotion, narrow source execution, immutable tagging, staged artifact proof, publication, closeout, rollback, and copyable checklists; - adds release decision, readiness-ledger, and execution-handoff templates; - rewrites the promotion runbook around cargo xtask promote, deterministic repeated dry-runs, idempotent source PR reuse, regular-merge verification, and bounded promotion closeout; - updates AGENTS.md and the source-of-truth taxonomy so future agents use the living procedures rather than old command transcripts. ## Why The historical 0.x readiness and handoff files are useful evidence but still contain release-specific tools and commands such as RTK-prefixed invocations. Meanwhile, the standing promotion runbook still taught a manual raw swarm/main push even though the repository has earned an exact-target, per-path, idempotent promotion planner/executor. That left two competing operating models: 1. the implemented fail-closed cargo xtask promote transaction; and 2. copied historical/manual release and promotion commands. The authority boundary also needed to be explicit: version, lockfile, changelog freeze, README/guides, release decision, readiness ledger, and handoff skeleton are shared candidate state and therefore finish on swarm before promotion. Source owns only narrow release execution, tagging, publication, source-writer configuration, and public credentials. ## Procedure boundary The documented sequence is now: 1. define the user-facing release scope on swarm; 2. finish shared docs and behavior, then make the late version/lockfile/changelog freeze and prepare the versioned evidence skeletons on swarm; 3. prove the exact candidate with contributor, policy, package, and routed CI gates; 4. run two byte-identical current-head promotion dry-runs and inspect every exact path decision; 5. use the real idempotent command to create or reuse one source promotion PR; 6. regular-merge and verify the exact source checkpoint; 7. validate current source and merge only narrowly required source-owned release-writer changes; 8. tag one exact proven source commit; 9. keep one staged four-platform candidate set non-current while validation, first-use, negative controls, and the terminal readiness aggregate run; 10. publish crates.io and the GitHub release only after those exact-tag gates pass; and 11. record observed public evidence on swarm and promote that coherent release closeout back to source. A product/shared-documentation/version/package defect found on source returns to swarm. Historical mode, an older source ref, or a raw branch push is not an escape from a fail-closed current-head promotion result. ## Historical evidence Versioned release decisions/readiness ledgers and root RELEASE_HANDOFF_* files are deliberately not bulk-rewritten. Existing files remain receipts for the commands and evidence actually used by those releases, not standing instructions for the next one. ## Review map - docs/release/release-preparation.md — living end-to-end release procedure and checklists. - docs/release/README.md — current-vs-historical documentation roles and authority boundary. - docs/release/templates/ — bounded version-specific evidence templates. - plans/shiplog-swarm/promotion-runbook.md — canonical exact promotion transaction. - AGENTS.md, docs/README.md — routing and source-of-truth links. ## Expected proof bash cargo xtask check-doc-artifacts cargo xtask check-file-policy --mode blocking-allowlist cargo xtask check-goals cargo xtask check-support-tiers cargo xtask promotion-state --check git diff --check This connector-authored branch was inspected by exact base/head comparison. Hosted CI is the execution authority for the checks above. ## Claim boundary Documentation and operating-procedure change only. This PR does not prepare or merge a source promotion, change the current promotion manifest, bump a version, tag, publish to crates.io, create or publish a GitHub Release, sign artifacts, update package channels, or move release authority. ## Rollback Revert the squash merge. Historical release evidence and all source/swarm refs, policies, workflows, tags, packages, and release state remain untouched. Relates to #246.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@EffortlessSteven, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 4 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 18871b83-f039-4644-bf00-bd8659fad668

📥 Commits

Reviewing files that changed from the base of the PR and between ac93085 and d03564d.

📒 Files selected for processing (8)
  • AGENTS.md
  • docs/README.md
  • docs/release/README.md
  • docs/release/release-preparation.md
  • docs/release/templates/release-decision.md
  • docs/release/templates/release-handoff.md
  • docs/release/templates/release-readiness.md
  • plans/shiplog-swarm/promotion-runbook.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Member Author

CI budget acknowledgement

The PR planner classified this as docs-only but estimated the single coherent change at ~106 LEM, so ci-budget-override is applied deliberately.

Splitting the release procedure, templates, promotion runbook, and agent routing would leave an intermediate branch with competing instructions and would run the default PR lanes more than once. Keeping them together produces one reviewable operating contract and one hosted proof cycle. No mutation/coverage claim is inferred from lanes that remain skipped.

Copy link
Copy Markdown
Member Author

Measured release-implementation follow-up

While verifying the procedure against the canonical source workflow, I found that #245 was closed without its remaining staging/finalization criteria being proven. It is now reopened with a concrete repair packet.

The current source release-binary-acceptance job does not depend on upload-assets, so it may start before draft assets and SHA256SUMS.txt exist; the smoke scripts then fetch release URLs themselves rather than consuming one workflow-bound staged candidate set. PR #273 completed structural receipt validation only and explicitly left this staging/gating work out of scope.

This documentation PR therefore states the correct release gate but does not claim the current workflow has earned it. A release remains blocked until #245 produces exact staged bytes, four-platform acceptance, diagnostics, and a terminal release-ready aggregate.

@EffortlessSteven EffortlessSteven left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Bind tag creation to the approved release candidate SHA

Failure mode:
The Phase 4 commands pull whatever is currently at origin/main and then tag it, without consuming or asserting the release_source_commit recorded in the readiness ledger. A later source commit can therefore enter the tag after release-prep was reviewed; git status --short is also only displayed, not enforced as a clean-worktree guard.

Why here:
The same procedure requires an immutable exact-tag proof, but the command sequence does not establish that the tagged commit is the reviewed candidate.

Fix direction:
Record the full approved source SHA, fetch it explicitly, require a clean checkout, assert HEAD equals that SHA, verify the tag does not already exist, and create/verify the annotated tag against that exact object. Add a negative fixture for a source head that advances after readiness.

Validation:
A dirty checkout or advanced source main must fail before tag creation; the approved SHA must produce a tag whose peeled commit matches the readiness identity.

Confidence:
High.

[P1] Make the documented staged-candidate gate an actual blocking boundary

Failure mode:
The current source release workflow still lets release-binary-acceptance depend only on release-preflight and create-release, not upload-assets. The acceptance scripts download from the public releases/download URL, while the release is supposed to remain draft. There is also no terminal Release Candidate Ready aggregate that binds upload, validation, all four acceptance lanes, and release-mode tests into one fail-closed publication prerequisite.

Why here:
The procedure presents these jobs as the exact-tag gate, but issue #245 records that this implementation/proof is still unmet. An operator following the living procedure cannot obtain the claimed exact staged-candidate evidence from the current workflow.

Fix direction:
Either mark #245 as an explicit blocking prerequisite in this documentation PR, or implement the source-owned workflow in a separately authorized lane: stage one immutable candidate manifest, make every acceptance lane consume those exact staged bytes after upload, and add a terminal aggregate that gates publication. Preserve the negative broken-asset/checksum proof.

Validation:
A deliberately broken staged asset or checksum must make the terminal aggregate fail and leave the GitHub release non-current; a green run must identify one exact tag and candidate manifest.

Confidence:
High.

[P2] Remove trailing whitespace so the declared diff proof passes

Failure mode:
git diff --check swarm/main...HEAD fails on the new hard-break spaces in release-preparation.md and all three templates.

Why here:
The PR procedure explicitly requires git diff --check, so the current branch does not satisfy its own documented proof contract.

Fix direction:
Remove the trailing Markdown spaces or replace them with formatting that does not violate the repository whitespace gate, then rerun the exact diff check.

Validation:
git diff --check swarm/main...HEAD exits successfully on the exact PR head.

Confidence:
High.

Review boundary:
This is a read-only review of PR #389 at adffaef. The local declared xtask checks passed for docs, policy ledgers, goals, support tiers, workflows, file policy, automation authority, and promotion-state; the diff check did not.

Copy link
Copy Markdown
Member Author

Exact-head proof

Final head c96d6f6362e20b6f904f85903ca5c7cc40035458 completed the routed Shiplog Rust Small Result, Contributor Acceptance, and PR Plan successfully. Broad CI/mutation/security lanes were skipped by the docs-only route and are not claimed as executed proof.

The PR remains draft for maintainer review. No promotion, version bump, tag, publication, or release-state mutation was performed.

@EffortlessSteven EffortlessSteven left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Bind the documented tag to the approved readiness SHA

Failure mode:
The current exact head still documents git switch main, git pull --ff-only origin main, git status --short, and then git tag -a without consuming or asserting the readiness ledger's approved release_source_commit. A later source commit can therefore be tagged after the release candidate was reviewed, and a dirty checkout is only displayed rather than rejected.

Why here:
This procedure promises immutable exact-tag proof, but the documented operator path does not establish that the tag points at the reviewed source candidate.

Fix direction:
Require the full approved SHA as an input, fetch/resolve that object explicitly, require a clean tracked checkout, assert HEAD equals the approved SHA before tag creation, reject an existing tag, and verify the annotated tag peels to the approved commit. Add a negative example or fixture showing an advanced source head fails before tag creation.

Validation:
A dirty checkout and an advanced origin/main must fail before any tag operation; the approved SHA must produce a tag whose peeled commit matches the readiness identity.

Confidence:
High; inspected current PR head 23fdf206c8d567eace683db9c104fa2a465d3a2c, docs/release/release-preparation.md:297-301.

[P2] Make the declared whitespace proof pass

Failure mode:
git diff --check swarm/main...HEAD still reports trailing whitespace in the new hard-break lines in docs/release/release-preparation.md and all three release templates.

Why here:
The PR's expected proof explicitly includes git diff --check, so the current documentation branch does not satisfy its own acceptance command.

Fix direction:
Remove the trailing Markdown spaces or replace them with equivalent formatting that does not violate the repository whitespace gate.

Validation:
Run git diff --check swarm/main...HEAD on the exact PR head and require exit code 0.

Confidence:
High; reproduced against current 23fdf206 exact head.

Copy link
Copy Markdown
Member Author

Proof update — prior head superseded

The earlier exact-head comment for c96d6f6 is no longer the final proof. The procedure was corrected so version, lockfile, changelog freeze, README/guides, release decision, readiness ledger, and handoff skeleton finish on swarm before promotion; source is limited to narrow release execution and source-owned writer configuration.

Current head: 5185ce973b1f502c71ba49e89a2c2bd0f810232b.

Routed Shiplog Rust Small Result is green at this head. Contributor Acceptance is still running; no final exact-head claim is made until that result is inspected.

Copy link
Copy Markdown
Member Author

@codex review

Please review the current final head, especially the authority boundary that keeps version/changelog/shared candidate prep on swarm and limits source to release execution.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5185ce973b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +306 to +308
procedure. Release decision, version bump, changelog freeze, tag, crates.io,
GitHub Release publication, signing, and package-channel work remain source
release-authority operations.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep shared candidate preparation on swarm

Failure mode: Following this handoff literally moves the release decision, version bump, and changelog freeze into shiplog after promotion, creating a second preparation lane and changing source away from the exact candidate proved on swarm before tagging. Why here: the canonical release procedure requires all three artifacts to be finalized on swarm and promoted together. Fix direction: classify only tagging, publication, signing, and package-channel execution as source-owned here, and state that candidate preparation precedes promotion. Validation: re-read both living procedures as one ordered sequence and confirm no step assigns shared candidate state to source. Confidence: high.

AGENTS.md reference: AGENTS.md:L43-L48

Useful? React with 👍 / 👎.

@EffortlessSteven
EffortlessSteven force-pushed the agent/release-preparation-runbook branch from 5185ce9 to d03564d Compare August 4, 2026 12:46
@EffortlessSteven
EffortlessSteven marked this pull request as ready for review August 4, 2026 12:46
@factory-droid

factory-droid Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job

Failed to checkout PR #389 branch for review

Droid is reviewing code and running a security check…

@EffortlessSteven
EffortlessSteven merged commit 08f9331 into main Aug 4, 2026
24 checks passed
@EffortlessSteven
EffortlessSteven deleted the agent/release-preparation-runbook branch August 4, 2026 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant