|
Trust remains asymmetric across the system:
This page recaps only the local boundary. Use Cross-cutting Concepts when you need the full canonical model. |
Use this page when cutting a release, validating the public publish surface, or auditing shipped release artifacts.
Release Checklist
Use this short checklist when cutting a release.
-
Two-phase release protocol:
-
Prepare the release candidate on
develop. -
Finalize the release with a
vX.Y.Ztag from the exact green candidate commit.
-
-
Bumping
package.jsonondevelopstarts the release candidate. Usechore(release): start vX.Y.Zfor that commit and treat later commits on the candidate path as release-fix follow-ups only. -
Keep fixing forward on
developuntil the required CI lanes are green. Do not tag early and do not publish from an ordinarydevelopsuccess alone. -
Create and push the release tag from the exact certified
developcommit. The release workflow is the finalization step; the version bump is not. -
The release workflow must verify that the tag matches
package.json, that the tagged commit already passed the required CI gates, and that the published artifacts come from that same certified commit. -
Promote
mainonly after successful publishing, and do it with a fast-forward update to the released commit. Do not rebasemainonto the release tag. -
The release workflow should own that final
mainfast-forward so the shipped commit and the branch tip stay identical without a manual replay step. -
Run
make certifybefore tagging. This runs lint, typecheck, build, full test coverage, the contract lane, the official Repomix reference-oracle smoke lane, the Repomix adapter parity guard, bundle transition matrix smoke, release integrity smoke, and a clean double-build reproducibility check. All steps must be green. Usemake verifyduring development;make certifyis the pre-tag CI-equivalent gate. -
The CI workflow validates Bun against the declared minimum runtime (
1.3.12) andlatestbefore release automation is allowed to proceed. -
The Pages publish now assembles one site tree with
/schemas/and/coverage/; successfuldevelopormainCI publishes the latest coverage page automatically, while tagged releases still mirror schema files into release assets. -
Run
bun run pages:smokeagainst the stageddist/site/tree whenever you need to validate the public publish surface locally. -
If schema files change, update the published Pages site and verify the
schemas/index still lists the current versions. -
The publish workflow runs the same smoke check in non-blocking mode before pushing
gh-pages, and the separatePages Smokeworkflow keeps that validation visible on pull requests,develop, andmain. -
If the Pages branch does not exist yet, let the publish workflow create
gh-pageson the next run. -
GitHub Pages must be configured in repository settings to serve from the
gh-pagesbranch. -
If a new schema version is added, refresh the public
$idvalues in the JSON Schema files and keep the docs pointing at the GitHub Pages host. -
Mirror the same schema files into the GitHub Release assets for the tagged release.
-
Tagged releases also publish the npm tarball,
release-integrity.json, and the generatedcx-cli.rbformula into GitHub release assets so the public release payload matches the documented integrity story. -
Use
make release VERSION=vX.Y.Zas the local release wizard. The first call with a new version starts the candidate ondevelop; the second call with that same tagged version finalizes the release from the certified commit. -
Ensure
package.jsonversion matches the git tag before publishing release artifacts. -
The release workflow runs on
vX.Y.Ztag pushes, plus a manual re-finalization path for an existing tag when needed. -
The release workflow only finalizes when the tagged commit already has a successful
developCI run; tag presence without certified CI is not enough. -
v0.4is now a closed release line. Further work should tighten contracts, docs, or scanner scope on top of that line rather than reopening the architecture transition itself. -
The release workflow in
.github/workflows/release.ymlrequiresNPM_TOKENin thenodeenvironment sonpm publishcan authenticate to the npm registry, andHOMEBREW_TAP_PUSH_TOKENin thehomebrewenvironment so it can authenticate the cross-repo push towstein/homebrew-tap. -
Confirm both environment secrets are set before the release workflow starts; the workflow now fails fast if either one is missing.
-
Create
HOMEBREW_TAP_PUSH_TOKENas a fine-grained personal access token in GitHub Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token. -
Scope that token to the
wstein/homebrew-taprepository only, and grantContents: Read and writeso the release workflow can commit and pushFormula/cx-cli.rb. -
Store the token in the
homebrewenvironment of the source repo under the nameHOMEBREW_TAP_PUSH_TOKEN. -
Release order:
-
Build the package once.
-
Publish the packed tarball to npm.
-
Generate
Formula/cx-cli.rbfrom the same tarball. -
Commit the formula into
wstein/homebrew-tap.
-
-
Final release promotion order:
-
developprepares the candidate. -
The
vX.Y.Ztag finalizes the certified candidate. -
The release workflow verifies integrity and publishes from that tagged commit.
-
mainfast-forwards to mirror the shipped commit.
-
-
Verify the external tap repo
wstein/homebrew-tapaccepts direct formula updates from the single release workflow, and remember that the tap repo owns formula validation on push.
Release Integrity
cx-cli releases include cryptographic integrity verification to detect unintended changes and ensure builds are reproducible.
What’s Verified
Each release publishes a Software Bill of Materials (SBOM) with:
-
Release version - semantic version from
package.json -
Timestamp - UTC ISO-8601 timestamp of build
-
Node version - Node.js version used to build
-
Bun version - Bun runtime version used to build
-
Tarball name - published npm tarball filename
-
Tarball hash - SHA-256 digest of the tarball
The SBOM is generated at build time, staged as tarball-artifacts/release-integrity.json, and published into the GitHub release assets as release-integrity.json.
Verification Steps
Design
Reproducibility
The integrity system depends on reproducible builds: the same source, dependencies, and compiler versions produce byte-identical output.
The CI/CD pipeline includes a reproducibility job that:
-
builds
dist/twice in sequence -
captures SHA-256 of all
dist/*.jsfiles -
fails if any file differs between runs
This catches timestamp injection, non-deterministic compilation, or other drift.
Trust Model
The SBOM is released alongside the npm tarball and generated Homebrew formula as GitHub release assets. Operators can:
-
verify the tarball’s SHA-256 matches the SBOM
-
confirm build environment (Node, Bun versions)
-
audit the release timestamp
The SBOM itself is not signed. For full cryptographic verification, operators should validate the GitHub release against the repository’s public keys or use GitHub’s own release verification.
Interpreting Failures
Hash mismatch → tarball has been modified or corrupted. Do not use; re-download from the official GitHub release.
Tarball not found → missing or renamed tarball. Verify you have the correct artifact.
SBOM missing or corrupt → release metadata is missing. Contact the maintainers.
v0.4 Release Closure
Use this section when upgrading to cx 0.4.0 or reviewing what the closed v0.4 line established.
Release contract
cx now explicitly operates as three primary cooperating surfaces:
-
immutable snapshots with
cx bundle -
live agent protocol with
cx mcp -
durable knowledge with
cx notes
Track B generates hypotheses. Track A generates proofs. Notes are the durable cognition layer between them.
The shipped proof path is kernel-owned. The remaining adapter/oracle seam is for diagnostics, parity visibility, and reference comparison only.
What changed in 0.4.0
1. Coverage and release assurance
-
Added a dedicated Vitest coverage lane with HTML and Markdown reporting.
-
Coverage now participates in release assurance and the public Pages surface.
2. MCP debugging cockpit
-
Added focused Vitest MCP lanes and UI-oriented debugging guidance.
-
Added
cx mcp catalog --jsonas the narrow machine-readable MCP contract view.
3. Cognition and trust model
-
Notes governance, contradiction checks, cognition scoring, and trust propagation are now part of the operating model.
4. Canonical operating model
-
The docs now explicitly define Track B as hypothesis generation and Track A as proof generation.
5. Adapter JSON contract naming
-
The dedicated
cx adaptercommand owns adapter metadata for machine-readable automation. -
Top-level JSON payload names are treated as versioned contract surfaces and must not drift silently.
-
cx adapter capabilities --jsonnow exposes explicitoracleAdapterandreferenceAdapterfields instead of the olderrepomixnaming. -
CI now includes a single official-
repomixreference-oracle smoke lane. -
The official reference oracle is guarded by an adapter-parity baseline that compares rendered bytes, per-file token counts, total tokens, and security findings against
repomix1.13.1. -
The older
@wsmy/repomix-cx-forkpackage is no longer a shipped runtime dependency. -
The native kernel is now the production proof path for
bundle,validate,verify, andextract. -
Other JSON command surfaces such as
cx bundle --json,cx inspect --json,cx list --json,cx validate --json, andcx verify --jsonno longer embed adapter metadata. -
The config namespace remains
[repomix]incx.tomlfor this release.
If you use MCP
MCP remains an evolving integration surface. Re-check local integration settings, capability expectations, and policy boundaries. For machine-readable inspection, prefer cx mcp catalog --json; for broader MCP diagnostics, use cx doctor mcp --json.
Operator surface summary
Use 0.4.0 with these explicit surfaces in mind:
-
native proof path:
bundle,validate,verify,extract -
live workspace path:
mcp -
durable cognition path:
notes -
adapter/oracle path: diagnostics and parity only
If you rely on coverage
Use the Vitest coverage lane and HTML artifact as the primary reporting surface:
bun run ci:test:coverage
Vitest coverage is now the authoritative coverage-reporting lane for release assurance. Bun remains part of the execution and compatibility matrix.
If you maintain notes
Run the governance path as part of normal review:
cx notes check
bun run ci:notes:governance
Notes are still conditional knowledge, not proof-grade artifacts. Governance now surfaces cognition, staleness, contradiction, and trust signals more explicitly.
If you consume schemas
Verify current schema references and Pages-hosted $id values:
If you depend on manifest schemas, treat this line as a breaking schema surface. Pages and the npm package publish only the latest schema for each family; old manifest and shared-handover schema files are intentionally removed instead of retained as compatibility endpoints.
For the current native-render contract state, the manifest schema is now v12. The shared handover filename is recorded in handoverFile, and derived Antora review exports are recorded explicitly in derivedReviewExports when cx bundle --include-doc-exports is used. Schema v12 also records oracleAdapter package identity so reproducibility is bound to the selected oracle adapter package and version. Shared-handover JSON schema v2 is the explicit contract version for recentRepositoryHistory[].message, which preserves full multiline commit messages instead of a subject-only field shape.