diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/accepted-state.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/accepted-state.json new file mode 100644 index 000000000..63902bab3 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/accepted-state.json @@ -0,0 +1,41 @@ +{ + "schema_version": 1, + "workflow_version": 2, + "workflow_origin_version": 2, + "id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "slug": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "title": "Correct remaining SpecSync 6.0 docs after the stable ship", + "description": "Correct remaining SpecSync 6.0 docs after the stable ship", + "kind": "documentation", + "state": "accepted", + "canonical_applied": true, + "base_commit": "6f11e34ef65710dd8839bfaaa6e6bc9004d6a530", + "created_at": 1789010246, + "updated_at": 1789012177, + "affected_specs": [ + "github" + ], + "affected_paths": [ + "site/", + "docs/", + "specs/github/" + ], + "no_spec_change": false, + "no_spec_change_rationale": null, + "acceptance_criteria": [ + "docs/RELEASING.md records that promote executed for v6.0.0 on 2026-09-09 and uses a next-release example instead of a second 6.0.0 promotion", + "docs/ci-confidence.md records that promote executed and does not claim the final tag is missing", + "site polyglot example does not teach specsync check --explain for language detection or invented language_overrides", + "site CI-gate example dual-pins CorvidLabs/spec-sync@v6.0.0 with version 6.0.0 and uses real Action inputs", + "github spec companions do not require Windows for 6.0 RC qualification" + ], + "selected_artifacts": [ + "context", + "docs" + ], + "dependencies": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/approvals.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/approvals.json new file mode 100644 index 000000000..35bd3e449 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/approvals.json @@ -0,0 +1,52 @@ +{ + "approvals": [ + { + "gate": "definition", + "actor": "Leif", + "timestamp": 1789010704, + "digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "note": null, + "approved_scope": { + "schema_version": 1, + "change_id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "title": "Correct remaining SpecSync 6.0 docs after the stable ship", + "description": "Correct remaining SpecSync 6.0 docs after the stable ship", + "kind": "documentation", + "affected_specs": [ + "github" + ], + "affected_paths": [ + "docs/", + "site/", + "specs/github/" + ], + "no_spec_change": false, + "no_spec_change_rationale": null, + "acceptance_criteria": [ + "docs/RELEASING.md records that promote executed for v6.0.0 on 2026-09-09 and uses a next-release example instead of a second 6.0.0 promotion", + "docs/ci-confidence.md records that promote executed and does not claim the final tag is missing", + "github spec companions do not require Windows for 6.0 RC qualification", + "site CI-gate example dual-pins CorvidLabs/spec-sync@v6.0.0 with version 6.0.0 and uses real Action inputs", + "site polyglot example does not teach specsync check --explain for language detection or invented language_overrides" + ], + "dependencies": [], + "supersedes": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } + }, + "approved_delta_digests": { + "github": "be08860051bc05a37eca26b3d80dd05d7a010242fda73b596b3273a814467ea0" + } + }, + { + "gate": "finalization", + "actor": "specsync:finalization", + "timestamp": 1789012177, + "digest": "1a4ffca846653b33fb0fcd02a0595950a7df167a0ffa01326ebee0f27300e573", + "note": "Same-PR finalization closing digest" + } + ], + "reopenings": [] +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/change.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/change.md new file mode 100644 index 000000000..59bef4857 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/change.md @@ -0,0 +1,28 @@ +--- +id: correct-remaining-specsync-6-0-docs-after-the-stable-ship +state: archived +type: documentation +base_commit: 6f11e34ef65710dd8839bfaaa6e6bc9004d6a530 +--- + +# Correct remaining SpecSync 6.0 docs after the stable ship + +## Intent + +Correct remaining SpecSync 6.0 docs after the stable ship + +## Affected Canonical Specs + +- `github` + +## Acceptance Criteria + +- docs/RELEASING.md records that promote executed for v6.0.0 on 2026-09-09 and uses a next-release example instead of a second 6.0.0 promotion +- docs/ci-confidence.md records that promote executed and does not claim the final tag is missing +- site polyglot example does not teach specsync check --explain for language detection or invented language_overrides +- site CI-gate example dual-pins CorvidLabs/spec-sync@v6.0.0 with version 6.0.0 and uses real Action inputs +- github spec companions do not require Windows for 6.0 RC qualification + +## No-spec Rationale + +Not applicable diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/context.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/context.md new file mode 100644 index 000000000..d2517a098 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/context.md @@ -0,0 +1,12 @@ +--- +change: correct-remaining-specsync-6-0-docs-after-the-stable-ship +artifact: context +--- + +# Context + +`promote` executed for `v6.0.0` on 2026-09-09 (run 34418860417) at `b9ff3231`, qualified as `v6.0.0-rc.18`. crates.io serves 6.0.0; GitHub Latest is `v6.0.0`; Homebrew still serves 5.2.0. The immutable `@v6.0.0` Action tag still embeds default `6.0.0-rc.14`. + +Operator and first-user copy still described the pre-ship state: cut `rc.17` and promote, `promote` never executed, and the final tag missing. Site examples still invented `specsync check --explain` for language detection, `[[language_overrides]]`, and Action inputs `score_threshold` / `annotations`. GitHub spec companions still required Windows for RC qualification even though `REQUIRED_PLATFORMS` is Ubuntu and macOS. + +Constraints: no tags, no retag of `v6.0.0`, no floating `v6`, ASCII hyphens in site copy, dual-pin `uses: CorvidLabs/spec-sync@v6.0.0` with `version: '6.0.0'`, do not claim Homebrew is 6.0.0. diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/deltas/github.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/deltas/github.md new file mode 100644 index 000000000..c8bef4ac0 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/deltas/github.md @@ -0,0 +1,32 @@ +## MODIFIED + +### REQUIREMENT REQ-github-007 + +Release qualification SHALL bind Ubuntu and macOS results and final publication to one +immutable release-candidate commit, while ordinary product pull requests SHALL use Ubuntu as the +authoritative integration platform. Windows is not a 6.0 qualification or publication target. + +Acceptance Criteria + +- Ordinary development/product PRs do not schedule macOS or Windows integration jobs. +- An RC branch is frozen by an immutable annotated `vX.Y.Z-rc.N` marker resolving to one full SHA. +- Two active tag rulesets let humans create new RC markers and final tags but forbid every actor, + with no bypass, from updating or deleting either. Qualification validates exactly those two — + `SpecSync immutable RC tags` over `refs/tags/v*.*.*-rc.*` and `SpecSync immutable final tags` + over `refs/tags/v*.*.*` excluding the RC pattern — and fails closed on any broadening. +- Final-tag creation is not restricted to a release GitHub App, the final tag is created by the + release workflow's own `GITHUB_TOKEN` rather than a separate release identity, and promotion is + not behind a deployment-environment gate. Qualification states all three omissions on every run, + including successful ones, and fails if that statement is ever empty; it never reports a + protection it does not check. +- Permission to write a ref is granted to the promotion and publication jobs alone. The release + workflow's default permissions stay read-only, so no other job in the lane can create, move, or + delete a tag. +- Every required platform runs the same named Fledge RC lane at that exact SHA. +- Changing candidate content requires a new RC marker and fresh platform evidence. +- Promotion fails closed unless Ubuntu and macOS are green for the unchanged candidate SHA. +- Windows is neither built nor qualified as of 6.0; the Action refuses a Windows runner. +- The final `vX.Y.Z` tag is created only after promotion succeeds and points to that same SHA. +- Release uploads independently reject mismatched marker, tag, checkout, evidence, or artifact SHA. +- Release-chain Actions and executables have independent immutable pins, and publication freshly + revalidates tags, actual checkout, original platform evidence, and package hashes. diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/docs.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/docs.md new file mode 100644 index 000000000..345478b40 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/docs.md @@ -0,0 +1,8 @@ +--- +change: correct-remaining-specsync-6-0-docs-after-the-stable-ship +artifact: docs +--- + +# Docs + +`docs/RELEASING.md` records that `promote` executed for `v6.0.0` on 2026-09-09 and uses a 6.0.1 example for the next cut. `docs/ci-confidence.md` marks `promote` executed and stops saying the final tag is missing. Site polyglot and CI-gate examples match the 6.0 binary and `action.yml` inputs. Site github-action.md says `comment: true` runs `specsync comment`, not `diff --format markdown`. Happy-path `change approve` examples pass `--actor`. `specs/github` companions require Ubuntu and macOS only for RC qualification and still document that `@v6.0.0` embeds `6.0.0-rc.14`. diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/finalization.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/finalization.json new file mode 100644 index 000000000..c8affcb43 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/finalization.json @@ -0,0 +1,12 @@ +{ + "schema_version": 2, + "change_id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "implementation_commit": "3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da", + "implementation_tree": "39179b349e3ea8e3f117e4813fccc608943fd34f", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "closing_digest": "1a4ffca846653b33fb0fcd02a0595950a7df167a0ffa01326ebee0f27300e573", + "review_digest": "5d7d3781b089fd7161e451bb6e898894d10da2b5c4ac7ddddd070807fdf303b3", + "finalization_digest": "2a9aef7de0f8d213fc72433f1a8053ade72a86972cd736bb4f6798579266573f", + "timestamp": 1789012177 +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/lesson-bundle.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/lesson-bundle.md new file mode 100644 index 000000000..2cc2c406b --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/lesson-bundle.md @@ -0,0 +1,50 @@ +# Lesson bundle — correct-remaining-specsync-6-0-docs-after-the-stable-ship + +Material for folding this change's lessons into the affected specs' `context.md`. +Synthesise from what actually happened below; do not restate the change description. + +## What this change was + +- **Title**: Correct remaining SpecSync 6.0 docs after the stable ship +- **Kind**: Documentation +- **Specs**: github +- **Paths**: site/, docs/, specs/github/ +- **Acceptance**: docs/RELEASING.md records that promote executed for v6.0.0 on 2026-09-09 and uses a next-release example instead of a second 6.0.0 promotion +- **Acceptance**: docs/ci-confidence.md records that promote executed and does not claim the final tag is missing +- **Acceptance**: site polyglot example does not teach specsync check --explain for language detection or invented language_overrides +- **Acceptance**: site CI-gate example dual-pins CorvidLabs/spec-sync@v6.0.0 with version 6.0.0 and uses real Action inputs +- **Acceptance**: github spec companions do not require Windows for 6.0 RC qualification + +## Evidence + +- Verification commit: `3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da` +- Base commit: `6f11e34ef65710dd8839bfaaa6e6bc9004d6a530` +- Verified by: `specsync check --spec cmd_change --spec github` + +## From the change's context.md + +# Context + +`promote` executed for `v6.0.0` on 2026-09-09 (run 34418860417) at `b9ff3231`, qualified as `v6.0.0-rc.18`. crates.io serves 6.0.0; GitHub Latest is `v6.0.0`; Homebrew still serves 5.2.0. The immutable `@v6.0.0` Action tag still embeds default `6.0.0-rc.14`. + +Operator and first-user copy still described the pre-ship state: cut `rc.17` and promote, `promote` never executed, and the final tag missing. Site examples still invented `specsync check --explain` for language detection, `[[language_overrides]]`, and Action inputs `score_threshold` / `annotations`. GitHub spec companions still required Windows for RC qualification even though `REQUIRED_PLATFORMS` is Ubuntu and macOS. + +Constraints: no tags, no retag of `v6.0.0`, no floating `v6`, ASCII hyphens in site copy, dual-pin `uses: CorvidLabs/spec-sync@v6.0.0` with `version: '6.0.0'`, do not claim Homebrew is 6.0.0. + +## From the change's testing.md + +# Testing + +- `specsync check --strict github --force` passes. +- `.github/scripts/validate-release-candidate.py` `REQUIRED_PLATFORMS = ("ubuntu", "macos")`. +- `.github/workflows/release.yml` qualify matrix is `ubuntu-latest` and `macos-14` only. + +## Requirement evidence + +| ID | Evidence | +|----|----------| +| REQ-github-007 | Canonical requirement, github.spec.md promote scenario, testing.md RC rows, and context.md now bind Ubuntu and macOS only. `REQUIRED_PLATFORMS` is `("ubuntu", "macos")`. Windows is refused by the Action and is not a qualify target. | + +## Where these lessons go + +- `specs/github/context.md` diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review-attempts.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review-attempts.json new file mode 100644 index 000000000..ac7b722b0 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review-attempts.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "reviews": [ + { + "schema_version": 2, + "change_id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "reviewer": "Leif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "timestamp": 1789011656 + } + ] +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review.json new file mode 100644 index 000000000..8c2bacdc8 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/review.json @@ -0,0 +1,16 @@ +{ + "schema_version": 2, + "change_id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "reviewer": "Leif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "timestamp": 1789011656 +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/state.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/state.json new file mode 100644 index 000000000..4a0e52db3 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/state.json @@ -0,0 +1,41 @@ +{ + "schema_version": 1, + "workflow_version": 2, + "workflow_origin_version": 2, + "id": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "slug": "correct-remaining-specsync-6-0-docs-after-the-stable-ship", + "title": "Correct remaining SpecSync 6.0 docs after the stable ship", + "description": "Correct remaining SpecSync 6.0 docs after the stable ship", + "kind": "documentation", + "state": "archived", + "canonical_applied": true, + "base_commit": "6f11e34ef65710dd8839bfaaa6e6bc9004d6a530", + "created_at": 1789010246, + "updated_at": 1789012564, + "affected_specs": [ + "github" + ], + "affected_paths": [ + "site/", + "docs/", + "specs/github/" + ], + "no_spec_change": false, + "no_spec_change_rationale": null, + "acceptance_criteria": [ + "docs/RELEASING.md records that promote executed for v6.0.0 on 2026-09-09 and uses a next-release example instead of a second 6.0.0 promotion", + "docs/ci-confidence.md records that promote executed and does not claim the final tag is missing", + "site polyglot example does not teach specsync check --explain for language detection or invented language_overrides", + "site CI-gate example dual-pins CorvidLabs/spec-sync@v6.0.0 with version 6.0.0 and uses real Action inputs", + "github spec companions do not require Windows for 6.0 RC qualification" + ], + "selected_artifacts": [ + "context", + "docs" + ], + "dependencies": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/testing.md b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/testing.md new file mode 100644 index 000000000..a01a55dbe --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/testing.md @@ -0,0 +1,16 @@ +--- +change: correct-remaining-specsync-6-0-docs-after-the-stable-ship +artifact: testing +--- + +# Testing + +- `specsync check --strict github --force` passes. +- `.github/scripts/validate-release-candidate.py` `REQUIRED_PLATFORMS = ("ubuntu", "macos")`. +- `.github/workflows/release.yml` qualify matrix is `ubuntu-latest` and `macos-14` only. + +## Requirement evidence + +| ID | Evidence | +|----|----------| +| REQ-github-007 | Canonical requirement, github.spec.md promote scenario, testing.md RC rows, and context.md now bind Ubuntu and macOS only. `REQUIRED_PLATFORMS` is `("ubuntu", "macos")`. Windows is refused by the Action and is not a qualify target. | diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification-attempts.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification-attempts.json new file mode 100644 index 000000000..e79e06a15 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification-attempts.json @@ -0,0 +1,1221 @@ +{ + "schema_version": 1, + "attempts": [ + { + "timestamp": 1789010729, + "commit": "59cf61a1ac92775784c511cb582f10bfe4652417", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "999dc37764befe9e47b7b91abefefe25067ec5553bf050e3b3c902fcbd80e3cd", + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] + }, + { + "timestamp": 1789010735, + "commit": "1a6afc79d1b33a0deaf89eb13a0ef458b2395dd7", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "999dc37764befe9e47b7b91abefefe25067ec5553bf050e3b3c902fcbd80e3cd", + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] + }, + { + "timestamp": 1789011472, + "commit": "55e6386139d2043ebe35f7b9628a3de7aa8fb4ba", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] + }, + { + "timestamp": 1789011479, + "commit": "c3cfc082d8bedab2434bc6a5f77a05e04222cf72", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] + }, + { + "timestamp": 1789011479, + "commit": "3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "acceptance_input_digest": "4786f26a8e7e161f320a080ddc160f90a750a3c089b0dff2ddb9d937ebbdf09c", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": "docs/.gitignore", + "kind": "file", + "mode": 33188, + "payload_digest": "866be0f40b5fee8c67218f9181ea7bb0a70529659a789801806cc5811524abdf", + "entry_digest": "2b8dd15cbb8e5a5df80ebb7ed56e1a566fca82da0651d0c6fcf044fb79480f89", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-confidence-checklist.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ff1181616a53b19b3944673558a7ed2d433441253a9fac6cac8f42dd08cdc881", + "entry_digest": "439255ae26245cd1890243273fdbd67ec8d4c51ffe8845d3908a6466302b1406", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-confidence-report.md", + "kind": "file", + "mode": 33188, + "payload_digest": "cca42ae6b565a29f50b2fd580a05293f85fa4ac3fd8e989e371edeb26fca298e", + "entry_digest": "19eeaf1ca1d3a3765f1a4009b076c5e44ee0d08e8cd19daaec20708c4eb67731", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-findings.md", + "kind": "file", + "mode": 33188, + "payload_digest": "cf063cebbee977c39a249285745e9d9a5b9d7b5bcfa07f05b55d865eb210731f", + "entry_digest": "0abea5aedb3cb951582632ae3378c4789aa4f3ad2531cb96a7ad74ed0c2de793", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-brief.md", + "kind": "file", + "mode": 33188, + "payload_digest": "62af541f80b3041278394019965ec2ca621eaae47b2b5e00796687d23d6c4bc9", + "entry_digest": "68087d804b6f81835e74b8dd8228eb9535907fc4202863d7a05abb5e03c69dbd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-journal.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2f79f7af849e72a87134b89bff036e26abdb239035835c7316c29a6661bdc125", + "entry_digest": "344cef0c6a4e0073c4708493e7a64bf37f0a3b47ff9ee2c7ce50a3ff7a3279bd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-prompt.md", + "kind": "file", + "mode": 33188, + "payload_digest": "58b3e266607efc32091c4f09ee5114ec903c8dd5d1a873457b3a3bdf9eb53748", + "entry_digest": "de547b1276025190d9b1dc8a961fcc34115b530236e1a654b782991d4340f7b7", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-release-review.md", + "kind": "file", + "mode": 33188, + "payload_digest": "92d8a769010345dfba71ecb2489203fc0f03d02403b9b9d51ac06e5a7b0b2005", + "entry_digest": "23db6efcd4d658a36392768f93e525b7e199f3be2c36cd102fae56f36b41e6c8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-tolerance-decisions.md", + "kind": "file", + "mode": 33188, + "payload_digest": "c05f0459b00a8d664c9e5f46ffe4e37bebf6656280f660c3e805d8bd035deeab", + "entry_digest": "06bcb1f79f70e54a172b55c7987afde975dc8a41bc71faab14d3a90d7a6465f5", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-verification-444f7b91.md", + "kind": "file", + "mode": 33188, + "payload_digest": "0c134faf6c688f42da5c976537268e244a52084bab371d6b0767696af7b3aef6", + "entry_digest": "3cb4b01829bc8eda3e579b827c207da626eb220b4d929897214e8e7cb6a076cd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/ADOPTING.md", + "kind": "file", + "mode": 33188, + "payload_digest": "1020325117130d6963cd2ed364d08d1b65d9b088c5674668f96e530fb00b3d23", + "entry_digest": "fcc1a73686fa8fa3cfe2ab9cc10535b7d72bd27786e9c99bd05496d720458a03", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/GOAL-6-fixes.md", + "kind": "file", + "mode": 33188, + "payload_digest": "5304ea71f5672a66ee3954d001ba4945d655b57ad63060919256706c28d2f590", + "entry_digest": "e452e779750ba35510a4352d0c60102b2496899e4077a17a1c4e3bd40b251cee", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/GOAL-6-taggable.md", + "kind": "file", + "mode": 33188, + "payload_digest": "7741f2e867c7e0ce9015f36c5a9ee67cb24d3bb17d000318bc337ad5a4049d36", + "entry_digest": "b675f0feb719bcce4dfec00ca00005e70c36770aa57b78795b8f8cd286f92069", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/RELEASING.md", + "kind": "file", + "mode": 33188, + "payload_digest": "b07ff8d9ccbd46a7efe7fbf3abdde0a4ec047f90ccf4be9e0fa0324c2600c544", + "entry_digest": "ec55a9ce5a7231d03861e68e856b249bb55cf5e9a66d6f65dcfb571fa7d26c5b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/SESSION-SUMMARY-6-0.md", + "kind": "file", + "mode": 33188, + "payload_digest": "43b352c0bd8fa5a50d165198bad4218cf6d945f9b1434ac12ece826106b1e04d", + "entry_digest": "9784784d84ca7335ce760c10763dea6b8a5de507e558a694ccbcdfc502946b1f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/ci-confidence.md", + "kind": "file", + "mode": 33188, + "payload_digest": "4f1aa8ad30d1816127834ca474ea63112c45d1130a7aa70cab5c84e317cf1f6d", + "entry_digest": "10a5c35e58e4fc4586ad0fc63e6016582ae318f54dc393390be9e440a9eba5ea", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/plans/2026-05-17-fledge-base-plan.md", + "kind": "file", + "mode": 33188, + "payload_digest": "a862d7f785cda87887265ba0dcde24cf7deb7a800775a31b148d8f802159a589", + "entry_digest": "05e42c65bb2448dc1960f1f6f7a0dcf498e24f0b6c1fcaf7970e6eb173d76622", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/plans/2026-05-17-spec-sync-marketing-site.md", + "kind": "file", + "mode": 33188, + "payload_digest": "d340eadc259d67a42983ade2840e0c55d5766bbd75a71dfb19cd65561d281d95", + "entry_digest": "5c25d0c1932fa4b2d89f3020545389ad36b098fe4d2f8cd7a9f24092e9310f70", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/specs/2026-05-17-spec-sync-marketing-site-design.md", + "kind": "file", + "mode": 33188, + "payload_digest": "6b1066ae5067aac7b04fdfe154c16ada1ce222fd163759290b79b9a3f4d44720", + "entry_digest": "9d23fa77cef5ba6b75e7b801e49b1dac0cc3c27d0eaf352dd454772c60a3ad80", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/.gitignore", + "kind": "file", + "mode": 33188, + "payload_digest": "c8b0133c45aac37aef1e94934bc5c31791cdbd29f1222ae5edb2f31f7fee37c8", + "entry_digest": "f8745d7594799f0728adbcc762b276743cc28100a6c63903902197979e3984b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/README.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ca5b71b9f51bdac00f64a1b213492e0678caba4b115db0ad23c3829f8453c1ad", + "entry_digest": "42432b093dc9e0eba2e25943549dc79b5e4854eb3c611a84d6669ba119d8a6b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/astro.config.mjs", + "kind": "file", + "mode": 33188, + "payload_digest": "3f032bf55a4684d9b310d18a63b1b5b3bd2185e35a8bc367ab6855b992c35559", + "entry_digest": "640fb1bb3839a127caab378996fc05a137e4683f1788f92a5a26f317c30e09b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/bun.lock", + "kind": "file", + "mode": 33188, + "payload_digest": "dcf0fb302dc79d557b7850b6b6ba325c7821919495e19af3b67dc61179fb548d", + "entry_digest": "d9e9c747ce4b1686b3f54af6ae359ce7468a3c0e98a3917205a70f506abab473", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/package.json", + "kind": "file", + "mode": 33188, + "payload_digest": "4abdf9692b5ed05d6ebbfbc1a47aff3dc19170256d9d0ed1d4e16d637946cefc", + "entry_digest": "ad4b7ef49f4340689bf54b8351795d5b893b0cd3217a82450de30088c28a996c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/prettier.config.mjs", + "kind": "file", + "mode": 33188, + "payload_digest": "f4c3bb0deeaf6e1700148a1784a000437484b7fb0f0390029be38ea21a81fefe", + "entry_digest": "91e09ffdfa4ac7ea4f4c6f598864e2f445ec9468dfa6f3d33c3e1182149cfb11", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/favicon.svg", + "kind": "file", + "mode": 33188, + "payload_digest": "cf895c1f7607a81d6fd08e297ae0da15bb26a7471c139844981e6ea938166c35", + "entry_digest": "f3548af7f3637690ec90391de3497f0aa2e0f80ccc3ca641a63062dffa01218a", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/og-default.png", + "kind": "file", + "mode": 33188, + "payload_digest": "2b1da20a14b97d8f01f0a809d9f7d53eeefc59df6312eaa5a0c8b5c1228d1d7f", + "entry_digest": "61f5e7e103bca12aa8499648c8f76a2c1ddbefef0a2d4f8596703d60322041d9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/robots.txt", + "kind": "file", + "mode": 33188, + "payload_digest": "ad1a5a3b7799cc1bd42b4146a93fa314141a8f06dc71fca8a1f0e8f2ada0f5b1", + "entry_digest": "28ed403bb3142bfb91d7c7b7b624d258b0b13134ca74ec026d7ef51fde70013e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/generate-doc-redirects.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "ad25da18fec921ab1beb16fb74a451068708322c1ba23e94a81992905aa29de5", + "entry_digest": "c79d67f46ecb7804d5041e0e49af957a28bab956a9768bc1f8b831db4bacc3cd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/generate-doc-redirects.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "319b7a54feb1785d70ee6112fe8208431225ee56af2cbcabfc1297f24c29a634", + "entry_digest": "c4bb99b806e1b8ceb24c1fd9d06da49523fcf99af9bcb138b891b8f80c641f44", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/validate-languages.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "a5d033a6fea9dab11ff8d7738e261833fe5ba66aac061df5e56d13e25a8d2364", + "entry_digest": "8947fd329f8dcacd89ee0fb43cc1064e42d63dd8664715f03b1e937d31813c6d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/validate-languages.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "c73b779a57eb8cb59257387d63d7082a5462d610afee4fe45e762d2644d5d479", + "entry_digest": "ec65bae7d2e0b10ad48a9f2bfc2fcbe2ab139428b9c42ad2499fd11340b1ee8d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Badge.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "7a0ddd1a56a30aecad5fb236513cc5073e903d4f56e406e9f56c78b69923dfdb", + "entry_digest": "3488e6e59980f34b1093c413890b4bba80ab59680cfac42351abe07bbe353439", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/BigPillar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "a8b2bde8fb15295bbeb977396d9be03a5d874989a911508ed683bcebb5cc6370", + "entry_digest": "9b9c31c06f3af0fa043961c78c5b8b17966f631f4b2674abe75596144e3f3d25", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Button.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "7527fa564fb7f6fd7fe1f7af2e54ab6abeeef1b25a9f16dad354bd4a4df0f1cd", + "entry_digest": "21860d9629f015bbc9a364d1956f86f3e0761a3375961d1eca85329dca6cfc09", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Callout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "2a42c751bd2bc571f22a48cf4b0864f317a1ddeaf5803348e8ea7b2736871bd0", + "entry_digest": "da9061cfa25f4ba28ea437757feabe91908747bc66fa3d7334941816c9603d7d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/CategoryTag.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "27c147568f0cddaf3e4ef3aa172fd091a8e8c748e19dad17a6df7b2999075c88", + "entry_digest": "8bf97d04d0e89f656610d5021b22679a39b81bedd7c653489257b1a4ff788a98", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Footer.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "b6c3f37e25234a93b7401b089d1d5f8bd676d3a5ff412980bc200868f8ef0578", + "entry_digest": "1260dc85185790d3726cf22e0bf66d32d97ea9fecdb0a5d76239b2dec44d5f6b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Header.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "351759e28dd62ed68251c9590ef212445ed9384745d599a30205d31fbcb05780", + "entry_digest": "bbadf87fb6dfc0cb0dd89cf8378e7f15c2fd28da82eb5d5941bd14df2e3be94f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/LanguageCard.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "d869782760c0f9707142d66d45f7b779d293cbe913d831e30d99e12bca4e9194", + "entry_digest": "739c22cdb7a35575db501c343e34e10c5d6815da93cbb7a01ef8d72d3cbfa52b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Pillar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "06c6cc4c99f709b0839ef3fd77a31818aa60810bff35f695307d6c7e0ac842b0", + "entry_digest": "149a72113d562d0e6a0da268067083dbc3de01a521e6a0d5b82db10e5aa8d6f0", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/PostCard.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "dd03c7ea5076ccb93f9fd840f4613ba341d012b371a23f79d48999b1d55c1d39", + "entry_digest": "7317e01846d582bb9a83c4b3e4ff5c1bb74dc6f3ca4bec1c0c2fb55fe8641f92", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/RedirectPage.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "2cb992fca5dc55083cc54f4a85d414e5ea3b3c11b6e46b990e89df33d1c68642", + "entry_digest": "90f3dc0aa9d76b2f1dbcb184b8f16eb439e0813bfbeaa8869d9a1f575fff5745", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Sidebar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "147aa969daa9507ebdd42941cb383ff06ddd129f70fc69bbf657579b1236b063", + "entry_digest": "79a3c8e9686aabea898cf55289c5642f63ec65d8869c701861cf21e3c0b143fd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/SpecCodeDiff.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "be49514e3c95950bc2ec93ea0102412a3286f7884769863f3e5de1f8eca23c5a", + "entry_digest": "db9cc58f4c2b2389ce97c2aa75d032d13e74c2cb75eaf208d27d1b562956dfd8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Terminal.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "fe967ea20a29de7bbe893731203c4ef0b06c262fa14e9afa81da6c1aa6075d24", + "entry_digest": "69970e1cfdf651dd056b10fe4652351b1e6b792dde6e7aa73e039123733480ad", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/blog/v4-3-2-release.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "2d49b04b5406b7b3f9448100fd0e724e80a098c7f80db36fe574775939954a3f", + "entry_digest": "093060a8c482529a2ad1c1b52b93425bb5464cad3ed5737ccf04dc834677b046", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/blog/welcome.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "4117ed5dfb4dcef9ba3efac7166659b07810705c7fe1dd6ce8296828eabc9a90", + "entry_digest": "56724c607bd6da2163adc412372264b32fb1b64568be62e6e35771761b528aff", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/config.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "314f829be1f4d8562225d956f61a9f348488717f84b11bcd708ebeb9f15b57e8", + "entry_digest": "d30eb543453bc4078898f44e55f04f3e0d697d14dc4f91ed58935895f6ab0231", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/architecture.md", + "kind": "file", + "mode": 33188, + "payload_digest": "85d1b18a203137b5c71c7a1fd0c40970974a5c73179d0568730569d5e29f10ef", + "entry_digest": "b1cfc2a35dbd0bfd08e413f204febbf568e8f99ca1b08e1497483dcb26d9727d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/cli.md", + "kind": "file", + "mode": 33188, + "payload_digest": "9a21e1d3c319d89a05f27c796e779307cef9f8a550f29df2ebd7e150b688b9a1", + "entry_digest": "8d0577111e84acefd8e5f2470800d534e8ec64b66ead5ef8abb2c0ff38df0442", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/companion-files.md", + "kind": "file", + "mode": 33188, + "payload_digest": "41d6f031f76bce9e24c21cc90c1f95023b123986b159e4c86c60774b1d832f54", + "entry_digest": "f3f8aac9d2142b58c4aee78c874c77a375abae485c685bee097910820714365f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/adversarial-proof.md", + "kind": "file", + "mode": 33188, + "payload_digest": "a1f895e0f66e1ee553132a260c00fd901202c4ae0011bc87aad812ead80b808a", + "entry_digest": "bc1e62f3e998a4e72406963ba82a30489fe9835973f95160b5f565ded62bae68", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/bmad.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2610899ac26a07cd5ecf08e72caf4ac4b57979f4dc7f0e09ef8ff5e4bcbdfc30", + "entry_digest": "e64badcbc9dfb8a3520773aff451dc000c21bc5082350e926ea2ba12da47e198", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/openspec.md", + "kind": "file", + "mode": 33188, + "payload_digest": "6efe3eae37e10670f634d317b5157079c832d6fd5bb57791c28768c305b715d6", + "entry_digest": "89740c23a88fa96c87c53157d1b6aaad43cb2d73afdae7acfeb7fa87baf66379", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/spec-kit.md", + "kind": "file", + "mode": 33188, + "payload_digest": "e3b89a5e8f417453699723e08e358ddd1390326a0b98d59219b8c97384b24294", + "entry_digest": "add65b61f6d93262e9755750d4461a55e43c18846cf055909620017aa13cb5b2", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/using-together.md", + "kind": "file", + "mode": 33188, + "payload_digest": "f0f6d00c95d83e8f6e8dc28ccc9d713cb17418ed81263b250ec3f914a2e682c6", + "entry_digest": "97a82d073d7c228b36474c8767bce71b290ee698d3e7220d7586c812fc7f3ac4", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/configuration.md", + "kind": "file", + "mode": 33188, + "payload_digest": "c1fd5be96bb3b9e77df56e28b47965c99b38bb82ca22371e4f8173bcd6f2fd8e", + "entry_digest": "aa1bd8162f9acc1217dcd283be512457050f9fe122a5dc3fea673e835bda74aa", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/cross-project-refs.md", + "kind": "file", + "mode": 33188, + "payload_digest": "4b31f455d9181531cd3693b03cd72c4b453a90da54b2196b59c25a15a4ee63d1", + "entry_digest": "c9d79f9e7e0294d64999fefd00c40ff5cc42a4978dfbc5e667436ad11cb75d91", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/deltas.md", + "kind": "file", + "mode": 33188, + "payload_digest": "f9cab134a717db537bb2235837dbf8c5965092da627f545f93f44a3870a69ae7", + "entry_digest": "fb63588ccc4f89b45455a29af626e351292cf87529aca026b3032b78482535aa", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/github-import-security.md", + "kind": "file", + "mode": 33188, + "payload_digest": "30536f514b098b2b969567cfa74064718def2f98a3f58e8c21d5366a91a31375", + "entry_digest": "ee979717c9b6fb52181cac74d225526f7090f6c329b863d5de63255baeeda614", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/index.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dd35c101b41a94eb63f0ec4c86a81e6cee0c8cbcc1d7e4c9739fdf1accec61c5", + "entry_digest": "5e70b1d65b00d0535ff4fb3e7c8ab7892e2b71827943a79866cdb7460021530d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/ai-agents.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ec2336c0a62e9823accf7f730f9b1cec85b20589a17d702380c044e1c946a6b4", + "entry_digest": "58f21e9f68a1a18f03543f79f32c8d557183b7e5fc93ea52c7132f18845da9cb", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/github-action.md", + "kind": "file", + "mode": 33188, + "payload_digest": "b7e0c473b1cd1302cf64adc3362b74a52ab668009434a0f095da1779da9d086e", + "entry_digest": "263f8fdcd268ac06f319b0256769d71d7c325d9ce009ec8d6ef20ec29ab74fd9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/vscode-extension.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ff74bb328a7472f5358fff27b3c9941576eb9f7c5797d1b30c31a83d734ff1b7", + "entry_digest": "22260ed7f39fe8df94a2312846c4e0d889b5b74e650e7430d956d4d57b75541c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/mcp-security.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ca1e08d4cca70e72d8827a4363d4b8e75d43e90c02e5bdd32fd264176ebbedda", + "entry_digest": "0402c3b95324d8546c7f5e7fa7d187d3c1a7f5376df8ebe6af9abad74f0e8c08", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/quickstart.md", + "kind": "file", + "mode": 33188, + "payload_digest": "82a286db985e1b74d01ad49e3e482a5fa3aa722645509b47f2c558ec21fc7679", + "entry_digest": "c538d172590aa4d708cbf86469ff2d4a96e63515d07bcdee9110ad1c3b18c257", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/spec-format.md", + "kind": "file", + "mode": 33188, + "payload_digest": "12becbbf24636d751fea636e8e4c792b129f12fa5004f6be1ab61a4fe5067c45", + "entry_digest": "02d1d86dfb3844d7d3203e3e43f8a113e0e57b210ac16e078328393b1e49e5c3", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/why-specsync.md", + "kind": "file", + "mode": 33188, + "payload_digest": "3137cd40be62d30c678b216ca686718c86142551ed53411f16e0de7c5779a765", + "entry_digest": "94a8cbe3a44fba8a7253868255e99d329babba7b8e658cde3bc5336c467fcdc8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/workflow.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dd8e3910357e05b7303246a4d4417da72797b41b252bc43422d31d431262d060", + "entry_digest": "9bde40ebb1a9d87d718cdb21e9c7170a14519a1c011258af07d6c6795cbd963d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/ci-gate.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "055e58547f60c3ae049952af444aef70ef986726013dacc83f50ef2f438c6ffc", + "entry_digest": "e6b05d5f2a27919736b7ea2ed6151e69c2bfc9dfd4a8723c948b2180c283036a", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/polyglot.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "0db65e8b759b55be152f50d5b3f9a3c741349479cc037c74b67a6ae8359d0954", + "entry_digest": "b1800cd7b5f215dd9b2a7b97c6fbd5ac6f7ab6b188f5294fecb1f046a04dbb91", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/rust-workspace.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "a46ef2dd62560b210a5b8f8ba5c03aeb645927d04c576ff4bb84596381ae1558", + "entry_digest": "b733c23080f4ca04e5e5a01623d31b5d568c7827d8f52210aa94f7b40798f23e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9a57e01694feaa7ca635c2283c3c4d9749cbd04b9f456114e242dd57aa8c3c5e", + "entry_digest": "75d9a20756ea0126ec6a255fc8827b7e92f92571afc21900ac6e0144fbd8addf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/csharp.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9d472e645eff9cb5a8f7763e66019a071cfad9c672d4a7d7b8f807697338fa9d", + "entry_digest": "e6c77643707468b2091a7b0c920f3be4687e13227301613de758d4be7976ce18", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/dart.json", + "kind": "file", + "mode": 33188, + "payload_digest": "792acdfbbe97ddadaca967b9b10569753a6a3f4674bda4411750aa204e0bda7f", + "entry_digest": "bb11cc11de274edbd28208f4241398cd0ea2efc1dfc5571365e2e22e6f01c66b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/go.json", + "kind": "file", + "mode": 33188, + "payload_digest": "2639dcfe13a69e39a734aef7daf31868ee687c1f3eadb67d33b6763ac268eff0", + "entry_digest": "61ed44bb651a203a1875febe819d8f89ef5e3ef46433c5a8c44feaa1f2c675ed", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/java.json", + "kind": "file", + "mode": 33188, + "payload_digest": "0f0df81492ae503b75126e12b59077089454f31e398aa1a3c0c7fb3065047a1c", + "entry_digest": "e01a2a88dae66781f2497320232bcb0eb18497fd66ad23bb916e0b7bf34f7b3f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/kotlin.json", + "kind": "file", + "mode": 33188, + "payload_digest": "f67c6a2da277de2dff4a75c8d4c014b03ddbd0893996c21eb0ab722dddf527c2", + "entry_digest": "49a8cbd99b358fcff00512b16059b1d50873e6f80a5c92e24122b259614e0132", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/php.json", + "kind": "file", + "mode": 33188, + "payload_digest": "e493e5f820ef2d8c47131e59232e2051f6b8e629c336ba0e45df789e6210b487", + "entry_digest": "913ef0e93fc580f0735cda78fbd3ec184ea8091fbfb4f2877741e27f7962efb6", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/python.json", + "kind": "file", + "mode": 33188, + "payload_digest": "62e2d9d858f5dc3cb076eaae59356719bf2469faf5d6ac6b39b33cca05166417", + "entry_digest": "ae250884756535d908276bce274c431f11d1f3490daac70caa8419f8f36a9c95", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/ruby.json", + "kind": "file", + "mode": 33188, + "payload_digest": "baed26533aa023d493ba433c0341f2bcc5028fb964c31ffc59e6395a138e958b", + "entry_digest": "9be307fd8478f0a14897a69590e222b3ace77db398c0ff5726f052907762111c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/rust.json", + "kind": "file", + "mode": 33188, + "payload_digest": "935b5e42d23ffbec5825804ab675c9ed0b446f3a48c54092c016ade506f9dab7", + "entry_digest": "597285f7ac5a8d5b83590c0a0c30c0f9b247c0e44c7d37dd73a150f3d4a66449", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/swift.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9548706cb8c9988eb19cb4a5f7e9157df384570f306558c96d71c2ce0502d3e9", + "entry_digest": "ac3bb82346b8f4e958c83752cb2db4813dae20f1e186ede80c91a23591854d8b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/typescript.json", + "kind": "file", + "mode": 33188, + "payload_digest": "cf3c62c453542a33b83d55a24d73aaa3bc7e7e55ca93da11f1237884a9a23fa7", + "entry_digest": "812b4f8a934330a050fe5697885febf5e644850b7a37a0e2a6cd8e5ccd6f7b7c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/yaml.json", + "kind": "file", + "mode": 33188, + "payload_digest": "6e78ef2704bedede5a3500b57e0e646c6af0580d71795ff4c5cd053bdddefaf0", + "entry_digest": "5838af93c352ce1a938b9f2c2a2b41d8e1c84f048d80eaefd52c254901d842bf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/env.d.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "5a498a2ff3c0abb338aff60209dfe32fb591fc5ad359182c5a14910f4c2fff8f", + "entry_digest": "266c2e7e5167a8effb0dc5ff7c1bc4c6e8790bf424f6c7428e76a36dd4203a44", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/ArticleLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "fc1b99e062e9c75983495628178caf7f3ce033259d5429e32d9ab66276f877a2", + "entry_digest": "a900e084cc48dd0a2c6dbceb86536427496c392bed7bda6eb90d26071f520e3c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/BaseLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "80e5c49e1ac13dec548eaec710a4ce17a4a3ef3026dfc0d5e68526633453af63", + "entry_digest": "a78a03693064f81e9a888526b9fdd093be81f92dcb8d3bb2124ed8928f6206c2", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/DocsLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "3bc1d1adf454e26bf0f9d864984a5e105b8064c397ee482f9fe512e3abc17328", + "entry_digest": "5c953ece4a2edc25f0c4133e3b15ea6f9f92bc3e7ad998daa90f281280142dc0", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/content.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "f88df7d72bc8530f8d71ab1cf4657dc5acf38a27f843c6d2599484c3710e5af3", + "entry_digest": "152a039fdfe63587c1970df35c1d3812fad0d0da6aa8668b85950c7426f5d0a4", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/content.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "285eb44391ec9cc5305c16c9b143e1f23df126b40c8fd64828c23208e481d7af", + "entry_digest": "569ebfe0f52e69bf678ed068d4c9b14785653f8f9f84c1e7f7cc5a032a4f4a86", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/hub.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "a096db9bebcb0200468aaa861d925f04044c4ce26d20130ed78d47cabcae4f97", + "entry_digest": "bff51549a0bbcdd6ac00f18b5c2a47e5085c48770e95fc6f0e3fa934956bb24e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/path.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "eb47308032473d553b01f441ba4c0d321f9107c817d145e625b2de4962222e48", + "entry_digest": "fa8028e6c933226066a9c6d2b4a419ae154b255f6ce87bf979e984791bbf1f82", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/404.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "de383021b2da1a65b6f51799b50bd7d15e30a41eb9576206daada60cc91db06e", + "entry_digest": "865144bb5a3edac0461528cffaa625d53fcab9f65483df622cf7c05dc023f3cf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/blog/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "454703767345b48747d4dddac91e6a6eb25dc454d917ca945400302d197ccbff", + "entry_digest": "d484abc04549b631f38decfd65e11bdce7fc1d4b74aae0f6bafdb01a653d7869", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/blog/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "05f35a364960899798b1016f39d7aba89182520c92b5f44c2981aeaba95fe425", + "entry_digest": "018699ad12b3755910012132a7ae0c40cb693a6466451c63d1074aad0930579b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/docs/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "f4a30be67d1d4669c0dfedf86850b48323f9a255a6495c52d4eaaf439e98fef8", + "entry_digest": "4ee1ab77a01225696561a4ad969fc6d0078b9a293eb4e11af45226dedfa90d40", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/docs/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "0c1ce3895996ec6d49bc80308f917bd5e6ae59aaa7a39a8c6bd9fd4012780aa9", + "entry_digest": "d60d122a711b0c2051828566b52565a558b256108cfa362750cd5f042401e2af", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/examples/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "ab8a0a45e060b5a41d8c9fbce9dc98e1391863e469520446e5820b10b706308c", + "entry_digest": "680751dc8af0c4d29500b31e97af4f5ba6134df0eb03dda8e804742b8fb54026", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/examples/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "0c1ce3895996ec6d49bc80308f917bd5e6ae59aaa7a39a8c6bd9fd4012780aa9", + "entry_digest": "ef8496402b4b759c3aa135a782b6682578f2a0eeebcae12ed37c1aac8b262679", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "de383021b2da1a65b6f51799b50bd7d15e30a41eb9576206daada60cc91db06e", + "entry_digest": "d8c0d2aa83e5dbefa1a8f78592405961c0f4a9aa3542187b4312fbea1a5b76cf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/languages/[slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "68b90275f3e008cdc7fe84a3fed9d5c9d2dd96c01208d0898ea64eb2d58647db", + "entry_digest": "9d2afc03055740c8df8d9d3228a7c293ffb9861622cb7e456312348622ca47fb", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/languages/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "05f35a364960899798b1016f39d7aba89182520c92b5f44c2981aeaba95fe425", + "entry_digest": "1e2e2b5c421490cb002baa9f59170277d51c79c2a0386afb7026b6e2d747c69b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/rss.xml.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "0b4e23bab4bf042fe288f949b25dfb3df384a476e935926c8d30d900e82bfe03", + "entry_digest": "617812761c148bc24c96dc5ec9aae3cbf3c7f19885b009c36316ae3fc4d66964", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/styles/globals.css", + "kind": "file", + "mode": 33188, + "payload_digest": "b2f780b4068237647213b25a7628e3b77299c3e30e982c195914104aa121b6e0", + "entry_digest": "98b97a3be0989790cad490fabd80629d549a1e427ca9e9008557e601331621b9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/tsconfig.json", + "kind": "file", + "mode": 33188, + "payload_digest": "b789e99d641a373f5618f7c9ca3eafab53a14c3781fb7f59c1715773cd2982be", + "entry_digest": "67a0b325881dc632facfde2b94753aa726bf754c866d8cb2e4ea05d819f15857", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "specs/github/context.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2b670773b1adc50a6220ca0a19bfbb64e25e7fd899d03d6f4cbb68ab6350f5e6", + "entry_digest": "8f99d2dabbe039e79fcbbfca40c81a51b15e65e8aece9749ebc901d1c24672ae", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/github.spec.md", + "kind": "file", + "mode": 33188, + "payload_digest": "5ef65dac0816f228ef8531190bb12de504f1b32eb2afde01116eb1ea086dd8d1", + "entry_digest": "73bd72fd7ac116ccc9d03408a8c3cfd3b38738ec2a8319d41b09b11cdd2fba2e", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/requirements.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dcf656d7e23cc63e369f4fbcd4719bb4e1a09a8fa0f58d4123350049030c9d10", + "entry_digest": "4df3a8ae052823155dcf435de502b92e46ecc551d8bf0eebeefd156f89b95779", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/tasks.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dce2c7c9140c3d28f49ad16366ba083b6f65e37702a810f1a17fee7067f2bafa", + "entry_digest": "b9459bc5d2156c001e982c0fc1d85a564715ab7aca89f95e0e2b1f1040137ad5", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/testing.md", + "kind": "file", + "mode": 33188, + "payload_digest": "e4c99b849bc501f3050a56e6fc03aa5eb6dfe612d22ac8abc2639ba3521567db", + "entry_digest": "8976b1f929cbcdab1786a69e5cbbc4630aa7094360a38b448bf2fa9f5fe7aa41", + "owners": [ + "github" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] + } + ] +} diff --git a/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification.json b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification.json new file mode 100644 index 000000000..cb86df378 --- /dev/null +++ b/.specsync/archive/changes/2026-09-10-correct-remaining-specsync-6-0-docs-after-the-stable-ship/verification.json @@ -0,0 +1,1144 @@ +{ + "timestamp": 1789011479, + "commit": "3d3a9cc1e9de700efd3f9f3d908b8e540e5c54da", + "contract_digest": "3385783476e7c4c3e8a279a573eaacbe6869f7d0e369df2bf22d2713afe571d1", + "execution_digest": "24ef188b97a2c1ed91368991003fa50e99cc23b819819b5b546fa9040900f325", + "workspace_digest": "1fcc06fdb1f67153bc927ea39014d44d9914b00473c8736280c7cd3f0963773f", + "acceptance_input_digest": "4786f26a8e7e161f320a080ddc160f90a750a3c089b0dff2ddb9d937ebbdf09c", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": "docs/.gitignore", + "kind": "file", + "mode": 33188, + "payload_digest": "866be0f40b5fee8c67218f9181ea7bb0a70529659a789801806cc5811524abdf", + "entry_digest": "2b8dd15cbb8e5a5df80ebb7ed56e1a566fca82da0651d0c6fcf044fb79480f89", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-confidence-checklist.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ff1181616a53b19b3944673558a7ed2d433441253a9fac6cac8f42dd08cdc881", + "entry_digest": "439255ae26245cd1890243273fdbd67ec8d4c51ffe8845d3908a6466302b1406", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-confidence-report.md", + "kind": "file", + "mode": 33188, + "payload_digest": "cca42ae6b565a29f50b2fd580a05293f85fa4ac3fd8e989e371edeb26fca298e", + "entry_digest": "19eeaf1ca1d3a3765f1a4009b076c5e44ee0d08e8cd19daaec20708c4eb67731", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-findings.md", + "kind": "file", + "mode": 33188, + "payload_digest": "cf063cebbee977c39a249285745e9d9a5b9d7b5bcfa07f05b55d865eb210731f", + "entry_digest": "0abea5aedb3cb951582632ae3378c4789aa4f3ad2531cb96a7ad74ed0c2de793", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-brief.md", + "kind": "file", + "mode": 33188, + "payload_digest": "62af541f80b3041278394019965ec2ca621eaae47b2b5e00796687d23d6c4bc9", + "entry_digest": "68087d804b6f81835e74b8dd8228eb9535907fc4202863d7a05abb5e03c69dbd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-journal.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2f79f7af849e72a87134b89bff036e26abdb239035835c7316c29a6661bdc125", + "entry_digest": "344cef0c6a4e0073c4708493e7a64bf37f0a3b47ff9ee2c7ce50a3ff7a3279bd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-overnight-prompt.md", + "kind": "file", + "mode": 33188, + "payload_digest": "58b3e266607efc32091c4f09ee5114ec903c8dd5d1a873457b3a3bdf9eb53748", + "entry_digest": "de547b1276025190d9b1dc8a961fcc34115b530236e1a654b782991d4340f7b7", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-release-review.md", + "kind": "file", + "mode": 33188, + "payload_digest": "92d8a769010345dfba71ecb2489203fc0f03d02403b9b9d51ac06e5a7b0b2005", + "entry_digest": "23db6efcd4d658a36392768f93e525b7e199f3be2c36cd102fae56f36b41e6c8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-tolerance-decisions.md", + "kind": "file", + "mode": 33188, + "payload_digest": "c05f0459b00a8d664c9e5f46ffe4e37bebf6656280f660c3e805d8bd035deeab", + "entry_digest": "06bcb1f79f70e54a172b55c7987afde975dc8a41bc71faab14d3a90d7a6465f5", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/6-0-verification-444f7b91.md", + "kind": "file", + "mode": 33188, + "payload_digest": "0c134faf6c688f42da5c976537268e244a52084bab371d6b0767696af7b3aef6", + "entry_digest": "3cb4b01829bc8eda3e579b827c207da626eb220b4d929897214e8e7cb6a076cd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/ADOPTING.md", + "kind": "file", + "mode": 33188, + "payload_digest": "1020325117130d6963cd2ed364d08d1b65d9b088c5674668f96e530fb00b3d23", + "entry_digest": "fcc1a73686fa8fa3cfe2ab9cc10535b7d72bd27786e9c99bd05496d720458a03", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/GOAL-6-fixes.md", + "kind": "file", + "mode": 33188, + "payload_digest": "5304ea71f5672a66ee3954d001ba4945d655b57ad63060919256706c28d2f590", + "entry_digest": "e452e779750ba35510a4352d0c60102b2496899e4077a17a1c4e3bd40b251cee", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/GOAL-6-taggable.md", + "kind": "file", + "mode": 33188, + "payload_digest": "7741f2e867c7e0ce9015f36c5a9ee67cb24d3bb17d000318bc337ad5a4049d36", + "entry_digest": "b675f0feb719bcce4dfec00ca00005e70c36770aa57b78795b8f8cd286f92069", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/RELEASING.md", + "kind": "file", + "mode": 33188, + "payload_digest": "b07ff8d9ccbd46a7efe7fbf3abdde0a4ec047f90ccf4be9e0fa0324c2600c544", + "entry_digest": "ec55a9ce5a7231d03861e68e856b249bb55cf5e9a66d6f65dcfb571fa7d26c5b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/SESSION-SUMMARY-6-0.md", + "kind": "file", + "mode": 33188, + "payload_digest": "43b352c0bd8fa5a50d165198bad4218cf6d945f9b1434ac12ece826106b1e04d", + "entry_digest": "9784784d84ca7335ce760c10763dea6b8a5de507e558a694ccbcdfc502946b1f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/ci-confidence.md", + "kind": "file", + "mode": 33188, + "payload_digest": "4f1aa8ad30d1816127834ca474ea63112c45d1130a7aa70cab5c84e317cf1f6d", + "entry_digest": "10a5c35e58e4fc4586ad0fc63e6016582ae318f54dc393390be9e440a9eba5ea", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/plans/2026-05-17-fledge-base-plan.md", + "kind": "file", + "mode": 33188, + "payload_digest": "a862d7f785cda87887265ba0dcde24cf7deb7a800775a31b148d8f802159a589", + "entry_digest": "05e42c65bb2448dc1960f1f6f7a0dcf498e24f0b6c1fcaf7970e6eb173d76622", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/plans/2026-05-17-spec-sync-marketing-site.md", + "kind": "file", + "mode": 33188, + "payload_digest": "d340eadc259d67a42983ade2840e0c55d5766bbd75a71dfb19cd65561d281d95", + "entry_digest": "5c25d0c1932fa4b2d89f3020545389ad36b098fe4d2f8cd7a9f24092e9310f70", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "docs/superpowers/specs/2026-05-17-spec-sync-marketing-site-design.md", + "kind": "file", + "mode": 33188, + "payload_digest": "6b1066ae5067aac7b04fdfe154c16ada1ce222fd163759290b79b9a3f4d44720", + "entry_digest": "9d23fa77cef5ba6b75e7b801e49b1dac0cc3c27d0eaf352dd454772c60a3ad80", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/.gitignore", + "kind": "file", + "mode": 33188, + "payload_digest": "c8b0133c45aac37aef1e94934bc5c31791cdbd29f1222ae5edb2f31f7fee37c8", + "entry_digest": "f8745d7594799f0728adbcc762b276743cc28100a6c63903902197979e3984b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/README.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ca5b71b9f51bdac00f64a1b213492e0678caba4b115db0ad23c3829f8453c1ad", + "entry_digest": "42432b093dc9e0eba2e25943549dc79b5e4854eb3c611a84d6669ba119d8a6b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/astro.config.mjs", + "kind": "file", + "mode": 33188, + "payload_digest": "3f032bf55a4684d9b310d18a63b1b5b3bd2185e35a8bc367ab6855b992c35559", + "entry_digest": "640fb1bb3839a127caab378996fc05a137e4683f1788f92a5a26f317c30e09b1", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/bun.lock", + "kind": "file", + "mode": 33188, + "payload_digest": "dcf0fb302dc79d557b7850b6b6ba325c7821919495e19af3b67dc61179fb548d", + "entry_digest": "d9e9c747ce4b1686b3f54af6ae359ce7468a3c0e98a3917205a70f506abab473", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/package.json", + "kind": "file", + "mode": 33188, + "payload_digest": "4abdf9692b5ed05d6ebbfbc1a47aff3dc19170256d9d0ed1d4e16d637946cefc", + "entry_digest": "ad4b7ef49f4340689bf54b8351795d5b893b0cd3217a82450de30088c28a996c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/prettier.config.mjs", + "kind": "file", + "mode": 33188, + "payload_digest": "f4c3bb0deeaf6e1700148a1784a000437484b7fb0f0390029be38ea21a81fefe", + "entry_digest": "91e09ffdfa4ac7ea4f4c6f598864e2f445ec9468dfa6f3d33c3e1182149cfb11", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/favicon.svg", + "kind": "file", + "mode": 33188, + "payload_digest": "cf895c1f7607a81d6fd08e297ae0da15bb26a7471c139844981e6ea938166c35", + "entry_digest": "f3548af7f3637690ec90391de3497f0aa2e0f80ccc3ca641a63062dffa01218a", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/og-default.png", + "kind": "file", + "mode": 33188, + "payload_digest": "2b1da20a14b97d8f01f0a809d9f7d53eeefc59df6312eaa5a0c8b5c1228d1d7f", + "entry_digest": "61f5e7e103bca12aa8499648c8f76a2c1ddbefef0a2d4f8596703d60322041d9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/public/robots.txt", + "kind": "file", + "mode": 33188, + "payload_digest": "ad1a5a3b7799cc1bd42b4146a93fa314141a8f06dc71fca8a1f0e8f2ada0f5b1", + "entry_digest": "28ed403bb3142bfb91d7c7b7b624d258b0b13134ca74ec026d7ef51fde70013e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/generate-doc-redirects.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "ad25da18fec921ab1beb16fb74a451068708322c1ba23e94a81992905aa29de5", + "entry_digest": "c79d67f46ecb7804d5041e0e49af957a28bab956a9768bc1f8b831db4bacc3cd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/generate-doc-redirects.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "319b7a54feb1785d70ee6112fe8208431225ee56af2cbcabfc1297f24c29a634", + "entry_digest": "c4bb99b806e1b8ceb24c1fd9d06da49523fcf99af9bcb138b891b8f80c641f44", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/validate-languages.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "a5d033a6fea9dab11ff8d7738e261833fe5ba66aac061df5e56d13e25a8d2364", + "entry_digest": "8947fd329f8dcacd89ee0fb43cc1064e42d63dd8664715f03b1e937d31813c6d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/scripts/validate-languages.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "c73b779a57eb8cb59257387d63d7082a5462d610afee4fe45e762d2644d5d479", + "entry_digest": "ec65bae7d2e0b10ad48a9f2bfc2fcbe2ab139428b9c42ad2499fd11340b1ee8d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Badge.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "7a0ddd1a56a30aecad5fb236513cc5073e903d4f56e406e9f56c78b69923dfdb", + "entry_digest": "3488e6e59980f34b1093c413890b4bba80ab59680cfac42351abe07bbe353439", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/BigPillar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "a8b2bde8fb15295bbeb977396d9be03a5d874989a911508ed683bcebb5cc6370", + "entry_digest": "9b9c31c06f3af0fa043961c78c5b8b17966f631f4b2674abe75596144e3f3d25", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Button.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "7527fa564fb7f6fd7fe1f7af2e54ab6abeeef1b25a9f16dad354bd4a4df0f1cd", + "entry_digest": "21860d9629f015bbc9a364d1956f86f3e0761a3375961d1eca85329dca6cfc09", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Callout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "2a42c751bd2bc571f22a48cf4b0864f317a1ddeaf5803348e8ea7b2736871bd0", + "entry_digest": "da9061cfa25f4ba28ea437757feabe91908747bc66fa3d7334941816c9603d7d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/CategoryTag.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "27c147568f0cddaf3e4ef3aa172fd091a8e8c748e19dad17a6df7b2999075c88", + "entry_digest": "8bf97d04d0e89f656610d5021b22679a39b81bedd7c653489257b1a4ff788a98", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Footer.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "b6c3f37e25234a93b7401b089d1d5f8bd676d3a5ff412980bc200868f8ef0578", + "entry_digest": "1260dc85185790d3726cf22e0bf66d32d97ea9fecdb0a5d76239b2dec44d5f6b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Header.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "351759e28dd62ed68251c9590ef212445ed9384745d599a30205d31fbcb05780", + "entry_digest": "bbadf87fb6dfc0cb0dd89cf8378e7f15c2fd28da82eb5d5941bd14df2e3be94f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/LanguageCard.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "d869782760c0f9707142d66d45f7b779d293cbe913d831e30d99e12bca4e9194", + "entry_digest": "739c22cdb7a35575db501c343e34e10c5d6815da93cbb7a01ef8d72d3cbfa52b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Pillar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "06c6cc4c99f709b0839ef3fd77a31818aa60810bff35f695307d6c7e0ac842b0", + "entry_digest": "149a72113d562d0e6a0da268067083dbc3de01a521e6a0d5b82db10e5aa8d6f0", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/PostCard.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "dd03c7ea5076ccb93f9fd840f4613ba341d012b371a23f79d48999b1d55c1d39", + "entry_digest": "7317e01846d582bb9a83c4b3e4ff5c1bb74dc6f3ca4bec1c0c2fb55fe8641f92", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/RedirectPage.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "2cb992fca5dc55083cc54f4a85d414e5ea3b3c11b6e46b990e89df33d1c68642", + "entry_digest": "90f3dc0aa9d76b2f1dbcb184b8f16eb439e0813bfbeaa8869d9a1f575fff5745", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Sidebar.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "147aa969daa9507ebdd42941cb383ff06ddd129f70fc69bbf657579b1236b063", + "entry_digest": "79a3c8e9686aabea898cf55289c5642f63ec65d8869c701861cf21e3c0b143fd", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/SpecCodeDiff.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "be49514e3c95950bc2ec93ea0102412a3286f7884769863f3e5de1f8eca23c5a", + "entry_digest": "db9cc58f4c2b2389ce97c2aa75d032d13e74c2cb75eaf208d27d1b562956dfd8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/components/Terminal.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "fe967ea20a29de7bbe893731203c4ef0b06c262fa14e9afa81da6c1aa6075d24", + "entry_digest": "69970e1cfdf651dd056b10fe4652351b1e6b792dde6e7aa73e039123733480ad", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/blog/v4-3-2-release.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "2d49b04b5406b7b3f9448100fd0e724e80a098c7f80db36fe574775939954a3f", + "entry_digest": "093060a8c482529a2ad1c1b52b93425bb5464cad3ed5737ccf04dc834677b046", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/blog/welcome.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "4117ed5dfb4dcef9ba3efac7166659b07810705c7fe1dd6ce8296828eabc9a90", + "entry_digest": "56724c607bd6da2163adc412372264b32fb1b64568be62e6e35771761b528aff", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/config.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "314f829be1f4d8562225d956f61a9f348488717f84b11bcd708ebeb9f15b57e8", + "entry_digest": "d30eb543453bc4078898f44e55f04f3e0d697d14dc4f91ed58935895f6ab0231", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/architecture.md", + "kind": "file", + "mode": 33188, + "payload_digest": "85d1b18a203137b5c71c7a1fd0c40970974a5c73179d0568730569d5e29f10ef", + "entry_digest": "b1cfc2a35dbd0bfd08e413f204febbf568e8f99ca1b08e1497483dcb26d9727d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/cli.md", + "kind": "file", + "mode": 33188, + "payload_digest": "9a21e1d3c319d89a05f27c796e779307cef9f8a550f29df2ebd7e150b688b9a1", + "entry_digest": "8d0577111e84acefd8e5f2470800d534e8ec64b66ead5ef8abb2c0ff38df0442", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/companion-files.md", + "kind": "file", + "mode": 33188, + "payload_digest": "41d6f031f76bce9e24c21cc90c1f95023b123986b159e4c86c60774b1d832f54", + "entry_digest": "f3f8aac9d2142b58c4aee78c874c77a375abae485c685bee097910820714365f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/adversarial-proof.md", + "kind": "file", + "mode": 33188, + "payload_digest": "a1f895e0f66e1ee553132a260c00fd901202c4ae0011bc87aad812ead80b808a", + "entry_digest": "bc1e62f3e998a4e72406963ba82a30489fe9835973f95160b5f565ded62bae68", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/bmad.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2610899ac26a07cd5ecf08e72caf4ac4b57979f4dc7f0e09ef8ff5e4bcbdfc30", + "entry_digest": "e64badcbc9dfb8a3520773aff451dc000c21bc5082350e926ea2ba12da47e198", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/openspec.md", + "kind": "file", + "mode": 33188, + "payload_digest": "6efe3eae37e10670f634d317b5157079c832d6fd5bb57791c28768c305b715d6", + "entry_digest": "89740c23a88fa96c87c53157d1b6aaad43cb2d73afdae7acfeb7fa87baf66379", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/spec-kit.md", + "kind": "file", + "mode": 33188, + "payload_digest": "e3b89a5e8f417453699723e08e358ddd1390326a0b98d59219b8c97384b24294", + "entry_digest": "add65b61f6d93262e9755750d4461a55e43c18846cf055909620017aa13cb5b2", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/comparisons/using-together.md", + "kind": "file", + "mode": 33188, + "payload_digest": "f0f6d00c95d83e8f6e8dc28ccc9d713cb17418ed81263b250ec3f914a2e682c6", + "entry_digest": "97a82d073d7c228b36474c8767bce71b290ee698d3e7220d7586c812fc7f3ac4", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/configuration.md", + "kind": "file", + "mode": 33188, + "payload_digest": "c1fd5be96bb3b9e77df56e28b47965c99b38bb82ca22371e4f8173bcd6f2fd8e", + "entry_digest": "aa1bd8162f9acc1217dcd283be512457050f9fe122a5dc3fea673e835bda74aa", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/cross-project-refs.md", + "kind": "file", + "mode": 33188, + "payload_digest": "4b31f455d9181531cd3693b03cd72c4b453a90da54b2196b59c25a15a4ee63d1", + "entry_digest": "c9d79f9e7e0294d64999fefd00c40ff5cc42a4978dfbc5e667436ad11cb75d91", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/deltas.md", + "kind": "file", + "mode": 33188, + "payload_digest": "f9cab134a717db537bb2235837dbf8c5965092da627f545f93f44a3870a69ae7", + "entry_digest": "fb63588ccc4f89b45455a29af626e351292cf87529aca026b3032b78482535aa", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/github-import-security.md", + "kind": "file", + "mode": 33188, + "payload_digest": "30536f514b098b2b969567cfa74064718def2f98a3f58e8c21d5366a91a31375", + "entry_digest": "ee979717c9b6fb52181cac74d225526f7090f6c329b863d5de63255baeeda614", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/index.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dd35c101b41a94eb63f0ec4c86a81e6cee0c8cbcc1d7e4c9739fdf1accec61c5", + "entry_digest": "5e70b1d65b00d0535ff4fb3e7c8ab7892e2b71827943a79866cdb7460021530d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/ai-agents.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ec2336c0a62e9823accf7f730f9b1cec85b20589a17d702380c044e1c946a6b4", + "entry_digest": "58f21e9f68a1a18f03543f79f32c8d557183b7e5fc93ea52c7132f18845da9cb", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/github-action.md", + "kind": "file", + "mode": 33188, + "payload_digest": "b7e0c473b1cd1302cf64adc3362b74a52ab668009434a0f095da1779da9d086e", + "entry_digest": "263f8fdcd268ac06f319b0256769d71d7c325d9ce009ec8d6ef20ec29ab74fd9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/integrations/vscode-extension.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ff74bb328a7472f5358fff27b3c9941576eb9f7c5797d1b30c31a83d734ff1b7", + "entry_digest": "22260ed7f39fe8df94a2312846c4e0d889b5b74e650e7430d956d4d57b75541c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/mcp-security.md", + "kind": "file", + "mode": 33188, + "payload_digest": "ca1e08d4cca70e72d8827a4363d4b8e75d43e90c02e5bdd32fd264176ebbedda", + "entry_digest": "0402c3b95324d8546c7f5e7fa7d187d3c1a7f5376df8ebe6af9abad74f0e8c08", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/quickstart.md", + "kind": "file", + "mode": 33188, + "payload_digest": "82a286db985e1b74d01ad49e3e482a5fa3aa722645509b47f2c558ec21fc7679", + "entry_digest": "c538d172590aa4d708cbf86469ff2d4a96e63515d07bcdee9110ad1c3b18c257", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/spec-format.md", + "kind": "file", + "mode": 33188, + "payload_digest": "12becbbf24636d751fea636e8e4c792b129f12fa5004f6be1ab61a4fe5067c45", + "entry_digest": "02d1d86dfb3844d7d3203e3e43f8a113e0e57b210ac16e078328393b1e49e5c3", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/why-specsync.md", + "kind": "file", + "mode": 33188, + "payload_digest": "3137cd40be62d30c678b216ca686718c86142551ed53411f16e0de7c5779a765", + "entry_digest": "94a8cbe3a44fba8a7253868255e99d329babba7b8e658cde3bc5336c467fcdc8", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/docs/workflow.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dd8e3910357e05b7303246a4d4417da72797b41b252bc43422d31d431262d060", + "entry_digest": "9bde40ebb1a9d87d718cdb21e9c7170a14519a1c011258af07d6c6795cbd963d", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/ci-gate.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "055e58547f60c3ae049952af444aef70ef986726013dacc83f50ef2f438c6ffc", + "entry_digest": "e6b05d5f2a27919736b7ea2ed6151e69c2bfc9dfd4a8723c948b2180c283036a", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/polyglot.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "0db65e8b759b55be152f50d5b3f9a3c741349479cc037c74b67a6ae8359d0954", + "entry_digest": "b1800cd7b5f215dd9b2a7b97c6fbd5ac6f7ab6b188f5294fecb1f046a04dbb91", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/content/examples/rust-workspace.mdx", + "kind": "file", + "mode": 33188, + "payload_digest": "a46ef2dd62560b210a5b8f8ba5c03aeb645927d04c576ff4bb84596381ae1558", + "entry_digest": "b733c23080f4ca04e5e5a01623d31b5d568c7827d8f52210aa94f7b40798f23e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9a57e01694feaa7ca635c2283c3c4d9749cbd04b9f456114e242dd57aa8c3c5e", + "entry_digest": "75d9a20756ea0126ec6a255fc8827b7e92f92571afc21900ac6e0144fbd8addf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/csharp.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9d472e645eff9cb5a8f7763e66019a071cfad9c672d4a7d7b8f807697338fa9d", + "entry_digest": "e6c77643707468b2091a7b0c920f3be4687e13227301613de758d4be7976ce18", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/dart.json", + "kind": "file", + "mode": 33188, + "payload_digest": "792acdfbbe97ddadaca967b9b10569753a6a3f4674bda4411750aa204e0bda7f", + "entry_digest": "bb11cc11de274edbd28208f4241398cd0ea2efc1dfc5571365e2e22e6f01c66b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/go.json", + "kind": "file", + "mode": 33188, + "payload_digest": "2639dcfe13a69e39a734aef7daf31868ee687c1f3eadb67d33b6763ac268eff0", + "entry_digest": "61ed44bb651a203a1875febe819d8f89ef5e3ef46433c5a8c44feaa1f2c675ed", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/java.json", + "kind": "file", + "mode": 33188, + "payload_digest": "0f0df81492ae503b75126e12b59077089454f31e398aa1a3c0c7fb3065047a1c", + "entry_digest": "e01a2a88dae66781f2497320232bcb0eb18497fd66ad23bb916e0b7bf34f7b3f", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/kotlin.json", + "kind": "file", + "mode": 33188, + "payload_digest": "f67c6a2da277de2dff4a75c8d4c014b03ddbd0893996c21eb0ab722dddf527c2", + "entry_digest": "49a8cbd99b358fcff00512b16059b1d50873e6f80a5c92e24122b259614e0132", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/php.json", + "kind": "file", + "mode": 33188, + "payload_digest": "e493e5f820ef2d8c47131e59232e2051f6b8e629c336ba0e45df789e6210b487", + "entry_digest": "913ef0e93fc580f0735cda78fbd3ec184ea8091fbfb4f2877741e27f7962efb6", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/python.json", + "kind": "file", + "mode": 33188, + "payload_digest": "62e2d9d858f5dc3cb076eaae59356719bf2469faf5d6ac6b39b33cca05166417", + "entry_digest": "ae250884756535d908276bce274c431f11d1f3490daac70caa8419f8f36a9c95", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/ruby.json", + "kind": "file", + "mode": 33188, + "payload_digest": "baed26533aa023d493ba433c0341f2bcc5028fb964c31ffc59e6395a138e958b", + "entry_digest": "9be307fd8478f0a14897a69590e222b3ace77db398c0ff5726f052907762111c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/rust.json", + "kind": "file", + "mode": 33188, + "payload_digest": "935b5e42d23ffbec5825804ab675c9ed0b446f3a48c54092c016ade506f9dab7", + "entry_digest": "597285f7ac5a8d5b83590c0a0c30c0f9b247c0e44c7d37dd73a150f3d4a66449", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/swift.json", + "kind": "file", + "mode": 33188, + "payload_digest": "9548706cb8c9988eb19cb4a5f7e9157df384570f306558c96d71c2ce0502d3e9", + "entry_digest": "ac3bb82346b8f4e958c83752cb2db4813dae20f1e186ede80c91a23591854d8b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/typescript.json", + "kind": "file", + "mode": 33188, + "payload_digest": "cf3c62c453542a33b83d55a24d73aaa3bc7e7e55ca93da11f1237884a9a23fa7", + "entry_digest": "812b4f8a934330a050fe5697885febf5e644850b7a37a0e2a6cd8e5ccd6f7b7c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/data/languages/yaml.json", + "kind": "file", + "mode": 33188, + "payload_digest": "6e78ef2704bedede5a3500b57e0e646c6af0580d71795ff4c5cd053bdddefaf0", + "entry_digest": "5838af93c352ce1a938b9f2c2a2b41d8e1c84f048d80eaefd52c254901d842bf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/env.d.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "5a498a2ff3c0abb338aff60209dfe32fb591fc5ad359182c5a14910f4c2fff8f", + "entry_digest": "266c2e7e5167a8effb0dc5ff7c1bc4c6e8790bf424f6c7428e76a36dd4203a44", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/ArticleLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "fc1b99e062e9c75983495628178caf7f3ce033259d5429e32d9ab66276f877a2", + "entry_digest": "a900e084cc48dd0a2c6dbceb86536427496c392bed7bda6eb90d26071f520e3c", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/BaseLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "80e5c49e1ac13dec548eaec710a4ce17a4a3ef3026dfc0d5e68526633453af63", + "entry_digest": "a78a03693064f81e9a888526b9fdd093be81f92dcb8d3bb2124ed8928f6206c2", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/layouts/DocsLayout.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "3bc1d1adf454e26bf0f9d864984a5e105b8064c397ee482f9fe512e3abc17328", + "entry_digest": "5c953ece4a2edc25f0c4133e3b15ea6f9f92bc3e7ad998daa90f281280142dc0", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/content.test.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "f88df7d72bc8530f8d71ab1cf4657dc5acf38a27f843c6d2599484c3710e5af3", + "entry_digest": "152a039fdfe63587c1970df35c1d3812fad0d0da6aa8668b85950c7426f5d0a4", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/content.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "285eb44391ec9cc5305c16c9b143e1f23df126b40c8fd64828c23208e481d7af", + "entry_digest": "569ebfe0f52e69bf678ed068d4c9b14785653f8f9f84c1e7f7cc5a032a4f4a86", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/hub.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "a096db9bebcb0200468aaa861d925f04044c4ce26d20130ed78d47cabcae4f97", + "entry_digest": "bff51549a0bbcdd6ac00f18b5c2a47e5085c48770e95fc6f0e3fa934956bb24e", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/lib/path.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "eb47308032473d553b01f441ba4c0d321f9107c817d145e625b2de4962222e48", + "entry_digest": "fa8028e6c933226066a9c6d2b4a419ae154b255f6ce87bf979e984791bbf1f82", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/404.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "de383021b2da1a65b6f51799b50bd7d15e30a41eb9576206daada60cc91db06e", + "entry_digest": "865144bb5a3edac0461528cffaa625d53fcab9f65483df622cf7c05dc023f3cf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/blog/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "454703767345b48747d4dddac91e6a6eb25dc454d917ca945400302d197ccbff", + "entry_digest": "d484abc04549b631f38decfd65e11bdce7fc1d4b74aae0f6bafdb01a653d7869", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/blog/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "05f35a364960899798b1016f39d7aba89182520c92b5f44c2981aeaba95fe425", + "entry_digest": "018699ad12b3755910012132a7ae0c40cb693a6466451c63d1074aad0930579b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/docs/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "f4a30be67d1d4669c0dfedf86850b48323f9a255a6495c52d4eaaf439e98fef8", + "entry_digest": "4ee1ab77a01225696561a4ad969fc6d0078b9a293eb4e11af45226dedfa90d40", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/docs/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "0c1ce3895996ec6d49bc80308f917bd5e6ae59aaa7a39a8c6bd9fd4012780aa9", + "entry_digest": "d60d122a711b0c2051828566b52565a558b256108cfa362750cd5f042401e2af", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/examples/[...slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "ab8a0a45e060b5a41d8c9fbce9dc98e1391863e469520446e5820b10b706308c", + "entry_digest": "680751dc8af0c4d29500b31e97af4f5ba6134df0eb03dda8e804742b8fb54026", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/examples/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "0c1ce3895996ec6d49bc80308f917bd5e6ae59aaa7a39a8c6bd9fd4012780aa9", + "entry_digest": "ef8496402b4b759c3aa135a782b6682578f2a0eeebcae12ed37c1aac8b262679", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "de383021b2da1a65b6f51799b50bd7d15e30a41eb9576206daada60cc91db06e", + "entry_digest": "d8c0d2aa83e5dbefa1a8f78592405961c0f4a9aa3542187b4312fbea1a5b76cf", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/languages/[slug].astro", + "kind": "file", + "mode": 33188, + "payload_digest": "68b90275f3e008cdc7fe84a3fed9d5c9d2dd96c01208d0898ea64eb2d58647db", + "entry_digest": "9d2afc03055740c8df8d9d3228a7c293ffb9861622cb7e456312348622ca47fb", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/languages/index.astro", + "kind": "file", + "mode": 33188, + "payload_digest": "05f35a364960899798b1016f39d7aba89182520c92b5f44c2981aeaba95fe425", + "entry_digest": "1e2e2b5c421490cb002baa9f59170277d51c79c2a0386afb7026b6e2d747c69b", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/pages/rss.xml.ts", + "kind": "file", + "mode": 33188, + "payload_digest": "0b4e23bab4bf042fe288f949b25dfb3df384a476e935926c8d30d900e82bfe03", + "entry_digest": "617812761c148bc24c96dc5ec9aae3cbf3c7f19885b009c36316ae3fc4d66964", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/src/styles/globals.css", + "kind": "file", + "mode": 33188, + "payload_digest": "b2f780b4068237647213b25a7628e3b77299c3e30e982c195914104aa121b6e0", + "entry_digest": "98b97a3be0989790cad490fabd80629d549a1e427ca9e9008557e601331621b9", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "site/tsconfig.json", + "kind": "file", + "mode": 33188, + "payload_digest": "b789e99d641a373f5618f7c9ca3eafab53a14c3781fb7f59c1715773cd2982be", + "entry_digest": "67a0b325881dc632facfde2b94753aa726bf754c866d8cb2e4ea05d819f15857", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "specs/github/context.md", + "kind": "file", + "mode": 33188, + "payload_digest": "2b670773b1adc50a6220ca0a19bfbb64e25e7fd899d03d6f4cbb68ab6350f5e6", + "entry_digest": "8f99d2dabbe039e79fcbbfca40c81a51b15e65e8aece9749ebc901d1c24672ae", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/github.spec.md", + "kind": "file", + "mode": 33188, + "payload_digest": "5ef65dac0816f228ef8531190bb12de504f1b32eb2afde01116eb1ea086dd8d1", + "entry_digest": "73bd72fd7ac116ccc9d03408a8c3cfd3b38738ec2a8319d41b09b11cdd2fba2e", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/requirements.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dcf656d7e23cc63e369f4fbcd4719bb4e1a09a8fa0f58d4123350049030c9d10", + "entry_digest": "4df3a8ae052823155dcf435de502b92e46ecc551d8bf0eebeefd156f89b95779", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/tasks.md", + "kind": "file", + "mode": 33188, + "payload_digest": "dce2c7c9140c3d28f49ad16366ba083b6f65e37702a810f1a17fee7067f2bafa", + "entry_digest": "b9459bc5d2156c001e982c0fc1d85a564715ab7aca89f95e0e2b1f1040137ad5", + "owners": [ + "github" + ] + }, + { + "path": "specs/github/testing.md", + "kind": "file", + "mode": 33188, + "payload_digest": "e4c99b849bc501f3050a56e6fc03aa5eb6dfe612d22ac8abc2639ba3521567db", + "entry_digest": "8976b1f929cbcdab1786a69e5cbbc4630aa7094360a38b448bf2fa9f5fe7aa41", + "owners": [ + "github" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check --spec cmd_change --spec github", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [ + "REQ-github-007" + ] +} diff --git a/docs/6-0-confidence-report.md b/docs/6-0-confidence-report.md index 1189bdab8..da2b3b2ab 100644 --- a/docs/6-0-confidence-report.md +++ b/docs/6-0-confidence-report.md @@ -1,5 +1,10 @@ # SpecSync 6.0.0 confidence report +**Status 2026-09-10:** `promote` executed for `v6.0.0` on 2026-09-09 +([run 34418860417](https://github.com/CorvidLabs/spec-sync/actions/runs/34418860417)). +The remaining-steps list below is the pre-ship record from this report's writing; do not treat it +as the current operator runbook. See `docs/RELEASING.md`. + Written 2026-09-09 against `origin/main` at `7df304a` (includes [#770](https://github.com/CorvidLabs/spec-sync/pull/770), [#771](https://github.com/CorvidLabs/spec-sync/pull/771), [#772](https://github.com/CorvidLabs/spec-sync/pull/772), [#773](https://github.com/CorvidLabs/spec-sync/pull/773)) plus the remaining-P1 PR that owns this update. **Do not merge that PR unattended. Do not touch #772 / #773 / #628.** Checklist: `docs/6-0-confidence-checklist.md` on #769 (C01–C42, P1=3, P2=1). A claim passes when overnight proving (verifier 1, journal on #769) and this session (verifier 2) agree, or when overnight failed on a P1 this tree fixed and this session re-ran it. Overnight cells that failed and were **not** re-drilled stay fail. Independent verifier scored C14/C23 pass once MIGRATION.md names the v1 close-out; this package makes that copy-pasteable. @@ -182,7 +187,7 @@ gh run watch gh workflow run release.yml --ref main -f rc_tag=v6.0.0-rc.18 -f dry_run=true ``` -3. **Promote** (human only — `promote` has never executed in this repository): +3. **Promote** (human only at the time of writing; `promote` later executed for `v6.0.0` on 2026-09-09): ```bash gh workflow run release.yml --ref main -f rc_tag=v6.0.0-rc.18 diff --git a/docs/RELEASING.md b/docs/RELEASING.md index 07c4beda5..be4069df2 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -10,6 +10,21 @@ macOS (`REQUIRED_PLATFORMS` in `validate-release-candidate.py`). A later `workfl **promotes** that exact candidate: mints `vX.Y.Z`, builds five binaries, creates the GitHub release. crates.io and Homebrew are manual and come after. +## 6.0.0 ship record (2026-09-09) + +`promote` **did execute** for `v6.0.0` on 2026-09-09. +[Release run 34418860417](https://github.com/CorvidLabs/spec-sync/actions/runs/34418860417) +created annotated `v6.0.0` at `b9ff32310181b796cc617406ff9298c533ebeb15` (qualified as +`v6.0.0-rc.18`) and published the GitHub Release. crates.io serves 6.0.0. GitHub Latest is +`v6.0.0`. Homebrew still serves **5.2.0**. There is no floating `v6` tag. The immutable +`@v6.0.0` Action tag still defaults omitted `version` to `6.0.0-rc.14`; consumers must pass +`version: '6.0.0'` until they consume a later Action tag. + +Do not cut another 6.0.0 candidate and do not re-dispatch `promote` for 6.0.0. Sections 1-4 and +6 are how to cut the **next** release. Examples use `6.0.1` / `v6.0.1-rc.1`; substitute the +version in `Cargo.toml`. Section 5's Homebrew bump to **6.0.0** is an immediate catch-up for the +already-published stable, not a 6.0.1 step. + ## 1. Preconditions - `main` is green and the commit you intend to ship is on `origin/main`. `validate` refuses any @@ -18,8 +33,8 @@ release. crates.io and Homebrew are manual and come after. directory and finalization leaves it in place, so check its contents, not its existence: `specsync change list` prints `No active SDD changes.`). - `Cargo.toml` `[package] version` and `Cargo.lock` carry the exact version the tag will name - (`6.0.0`). `validate` parses the RC tag `vX.Y.Z-rc.N` and requires its `X.Y.Z` component to equal - the Cargo version; a mismatch fails the run. + (for a patch, bump to `6.0.1` first). `validate` parses the RC tag `vX.Y.Z-rc.N` and requires + its `X.Y.Z` component to equal the Cargo version; a mismatch fails the run. - The three validators pass at the candidate commit: ```bash @@ -42,8 +57,8 @@ URL), the `trust.yml` pin and mirror, exact-head checkouts in `spec-check`/`trus explicit `version:` input the wrapper uses that revision's embedded default, which is `latest` for the `@v4` / `@v4.5.0` wrappers and `6.0.0` for `@v6.0.0` and `@main`. Publishing a non-prerelease repoints `releases/latest`, so every consumer on an old wrapper without an - explicit `version:` moves with it. Before promoting, confirm each known consumer passes an - explicit `version:`: + explicit `version:` moves with it. Before promoting a new version, confirm each known consumer + passes an explicit `version:`: ```bash for r in corvid-account podo-web podo-android raven; do @@ -67,8 +82,8 @@ carry a different head SHA (that name is then refused permanently: pick the next ```bash git fetch origin main -git tag -a v6.0.0-rc.17 -m "SpecSync 6.0.0 release candidate 17" -git push origin refs/tags/v6.0.0-rc.17 +git tag -a v6.0.1-rc.1 -m "SpecSync 6.0.1 release candidate 1" +git push origin refs/tags/v6.0.1-rc.1 ``` The push matches `on.push.tags: v*.*.*-rc.*` and runs `release.yml` in `qualify` mode: @@ -103,8 +118,8 @@ it, a mistyped or missing tag makes `gh release create` mint that tag from the d and the ruleset then makes the unqualified tag permanent. ```bash -gh release create v6.0.0-rc.17 --verify-tag --prerelease --title "SpecSync 6.0.0-rc.17" --notes "Release candidate" -gh workflow run rc-assets.yml --ref main -f tag=v6.0.0-rc.17 +gh release create v6.0.1-rc.1 --verify-tag --prerelease --title "SpecSync 6.0.1-rc.1" --notes "Release candidate" +gh workflow run rc-assets.yml --ref main -f tag=v6.0.1-rc.1 ``` ## 3. Dry run @@ -114,17 +129,18 @@ skips. No tag is created, nothing is published. Dispatch must come from `main`; any other `workflow_ref` and any `dry_run` value that is not exactly `true`/`false`. ```bash -gh workflow run release.yml --ref main -f rc_tag=v6.0.0-rc.17 -f dry_run=true +gh workflow run release.yml --ref main -f rc_tag=v6.0.1-rc.1 -f dry_run=true ``` ## 4. Promote -**`promote` has never executed in this repository.** Its git mechanics were rehearsed against a -local bare repo; `GITHUB_TOKEN` pushing against the live ruleset first happens on the real -release. There is no throwaway target: `final_tag` comes from the candidate's `Cargo.toml`. +**`promote` executed for `v6.0.0` on 2026-09-09** (see the ship record above). Git mechanics were +rehearsed against a local bare repo before that run; `GITHUB_TOKEN` pushing against the live +ruleset is now proven. There is still no throwaway target: `final_tag` comes from the candidate's +`Cargo.toml`, so a promote dispatch for a real next candidate mints that version permanently. ```bash -gh workflow run release.yml --ref main -f rc_tag=v6.0.0-rc.17 +gh workflow run release.yml --ref main -f rc_tag=v6.0.1-rc.1 ``` What runs, in order: @@ -134,7 +150,7 @@ What runs, in order: `rc_tag`/SHA must be `success`; a successful `push` run of `release.yml` for that tag must exist; it downloads exactly two `rc-evidence-*` records from that run and runs the validator in `promote` mode (or `release` mode if `vX.Y.Z` already exists). -3. `promote`: with `contents: write` on this job only, creates annotated `v6.0.0` at the +3. `promote`: with `contents: write` on this job only, creates annotated `v6.0.1` at the candidate SHA and pushes it with `GITHUB_TOKEN`. No release App, no protected environment, no second approver: anyone who can dispatch `release.yml` from `main` can mint the tag. 4. `build`: five targets, cold build, no cache: `specsync-linux-x86_64`, @@ -142,7 +158,7 @@ What runs, in order: `specsync-macos-aarch64`, each as `.tar.gz` + `.tar.gz.sha256` (+ a `.provenance.json` kept only as a workflow artifact). 5. `release`: revalidates artifact checksums and identity, re-runs the validator in `release` - mode against the final tag, refuses if a GitHub release for `v6.0.0` already exists, then + mode against the final tag, refuses if a GitHub release for `v6.0.1` already exists, then creates the release (`softprops/action-gh-release`, generated notes, `.tar.gz` and `.sha256` files only). It is **not** marked pre-release, so `releases/latest` moves to it. @@ -163,8 +179,8 @@ Idempotent and refusal cases: Verify the release and its ten assets, and check one archive against its sidecar: ```bash -gh release view v6.0.0 --json isPrerelease,assets --jq '.isPrerelease, (.assets[].name)' -gh release download v6.0.0 -p 'specsync-macos-aarch64.tar.gz*' -D /tmp/specsync-6 +gh release view v6.0.1 --json isPrerelease,assets --jq '.isPrerelease, (.assets[].name)' +gh release download v6.0.1 -p 'specsync-macos-aarch64.tar.gz*' -D /tmp/specsync-6 (cd /tmp/specsync-6 && shasum -a 256 -c specsync-macos-aarch64.tar.gz.sha256) ``` @@ -173,28 +189,28 @@ limits the package to `src/`, `Cargo.toml`, `Cargo.lock`, `README.md`, `CHANGELO Publishing is permanent; a version can only be yanked. ```bash -git checkout v6.0.0 +git checkout v6.0.1 cargo publish --dry-run --locked cargo publish --locked ``` Homebrew tap (`github.com/CorvidLabs/homebrew-tap`, `Formula/spec-sync.rb`) still serves -**5.2.0**. Bump it: the formula downloads `specsync--.tar.gz` from -`releases/download/v#{version}/`, so the fields that change are `version "5.2.0"` -> `"6.0.0"` -and the four `sha256` values (macOS arm/intel, Linux arm/intel), taken from the `.sha256` -sidecars of `specsync-macos-aarch64`, `specsync-macos-x86_64`, `specsync-linux-aarch64`, -`specsync-linux-x86_64`. The musl archive is not used by the formula. Open a PR on the tap, then: - -```bash -brew update && brew install CorvidLabs/tap/spec-sync && specsync --version -``` +**5.2.0**. That is an immediate 6.0.0 catch-up, independent of cutting 6.0.1. Bump the formula +to the GitHub Release that already exists: `version "5.2.0"` -> `"6.0.0"` and the four `sha256` +values (macOS arm/intel, Linux arm/intel), taken from the `.sha256` sidecars of +`specsync-macos-aarch64`, `specsync-macos-x86_64`, `specsync-linux-aarch64`, +`specsync-linux-x86_64`. The formula downloads `specsync--.tar.gz` from +`releases/download/v#{version}/`. The musl archive is not used. Open a PR on the tap, then +`brew update && brew install CorvidLabs/tap/spec-sync && specsync --version`. After a later +patch ships, bump the formula to that Cargo version, not back to 6.0.0. Changelog `## [6.0.0] - 2026-09-09` is dated. For the next patch, add `## [6.0.1]` (or similar) on `main` before tagging. Floating major tag. `release.yml` creates only `vX.Y.Z`. There is **no** `v6` tag yet. Create or -move it by hand only after the 6.0.0 release has passed its platform smoke tests (as `v1` and -`v4` exist today). Consumers who pin `@v6.0.0` are unaffected. +move it by hand only after the stable 6.0.0 release has passed its platform smoke tests (as `v1` +and `v4` exist today). Consumers who pin `@v6.0.0` are unaffected. Do not invent a floating `v6` +as part of cutting 6.0.1. ```bash git fetch origin --tags @@ -202,7 +218,8 @@ git tag -f v6 v6.0.0 git push --force origin refs/tags/v6 ``` -Announce: link the release, say `releases/latest` now serves 6.0.0, point at `MIGRATION.md`. +Announce: link the new release, say `releases/latest` now serves that version, point at +`MIGRATION.md`. ## 6. Rollback, and what cannot be undone diff --git a/docs/ci-confidence.md b/docs/ci-confidence.md index 404b042e2..5aba9f0a9 100644 --- a/docs/ci-confidence.md +++ b/docs/ci-confidence.md @@ -138,13 +138,13 @@ release lane is the one workflow whose most important job runs exactly once. |-----|--------| | `resolve` | **Executed.** `workflow_dispatch` with `dry_run=true` against `v6.0.0-rc.7` — the first dispatch in this repository's history. | | `validate` | **Executed**, same run. Both rulesets read and accepted. | -| `qualify` | **Executed successfully on RC16**, Ubuntu and macOS at `ffba9a32b664a7b3308350c162f0ac808f24efe3` in [run 34172484287](https://github.com/CorvidLabs/spec-sync/actions/runs/34172484287). That evidence applies only to RC16; a changed release tree requires a fresh candidate. Windows remains unqualified and unpublished. | -| `promote` | **Never executed.** | +| `qualify` | **Executed successfully on RC16**, Ubuntu and macOS at `ffba9a32b664a7b3308350c162f0ac808f24efe3` in [run 34172484287](https://github.com/CorvidLabs/spec-sync/actions/runs/34172484287). **Executed again on RC18** at `b9ff32310181b796cc617406ff9298c533ebeb15` in [run 34416717318](https://github.com/CorvidLabs/spec-sync/actions/runs/34416717318), the SHA later tagged `v6.0.0`. A changed release tree requires a fresh candidate. Windows remains unqualified and unpublished. | +| `promote` | **Executed for `v6.0.0` on 2026-09-09.** [Run 34418860417](https://github.com/CorvidLabs/spec-sync/actions/runs/34418860417) created annotated `v6.0.0` at `b9ff3231` and published the GitHub Release. | -`promote` cannot be rehearsed here. `final_tag` is derived from the candidate's own `Cargo.toml` -version, so any promote run against a real candidate mints the real `vX.Y.Z` — there is no throwaway -value to aim it at, and the immutability rulesets make whatever it creates permanent. The proof and -the release are the same event. +`promote` cannot be rehearsed against a throwaway tag. `final_tag` is derived from the candidate's +own `Cargo.toml` version, so any promote run against a real candidate mints the real `vX.Y.Z` — +there is no throwaway value to aim it at, and the immutability rulesets make whatever it creates +permanent. The proof and the release are the same event. That event has now happened for `v6.0.0`. What *was* proven, ahead of time and separately: @@ -157,10 +157,11 @@ What *was* proven, ahead of time and separately: unrestricted, so the immutability that protects a released tag cannot prevent it being minted. This was the failure that would have appeared for the first time at the moment of release. -What remains unproven, stated rather than glossed: the credential helper supplies a credential only -when the remote asks for one, and a local path remote never asks — so the rehearsal proves the -helper's `git -c` syntax does not break the invocation, not that it authenticates. That, and -`GITHUB_TOKEN`'s push against the live ruleset, first execute on the real release. +The pre-ship residue that is now proven: `GITHUB_TOKEN`'s push against the live immutability +rulesets succeeded for `v6.0.0`. The credential helper still supplies a credential only when the +remote asks for one, and a local path remote never asks — so the earlier rehearsal still only +proves the helper's `git -c` syntax does not break the invocation. Live authentication is the +2026-09-09 promote run. **A promote failure is recoverable, which is why this residue is acceptable.** The step creates nothing on the failing paths, and the tag is pushed as the last action of the job; a failed run @@ -174,18 +175,18 @@ A `dry_run=true` dispatch selects validation-only mode. It does not execute the publication jobs, authenticate a real tag push, or publish packages. Exercise the actual evidence guards and read-only candidate validators separately, and retain their refusal controls. -Before stable publication, qualify the final merged tree under a new immutable RC: RC16's evidence -covers `ffba9a32` only, so the final merged `main` tree must be frozen as a new immutable RC (the -next `-rc.N`) and qualified before `promote` runs — neither that run nor the final tag exists as -of this writing. Inspect every required check and review thread, and verify signed provenance with the -required policy. A soft Trust result alone is not a satisfied provenance policy. The count guards -and exact platform validator must both agree on Ubuntu/macOS; missing, extra, duplicate, failed, -or mixed-identity receipts remain invalid. - -GitHub Releases, crates.io, and the Homebrew tap are separate publication channels. Confirm the -6.0 package/version and binary identity on each advertised channel after deliberate publication; -do not infer package availability from a source tag. The standalone site emits redirects to the -CorvidLabs hub, so verify the hub actually serves the corrected pages after its deployment. +`v6.0.0` exists. RC16's evidence covers `ffba9a32` only; the promoted tag is `b9ff3231`, qualified +as `v6.0.0-rc.18`. A later patch must freeze its own merged `main` tree as a new immutable RC and +qualify Ubuntu/macOS before `promote`. Inspect every required check and review thread, and verify +signed provenance with the required policy. A soft Trust result alone is not a satisfied provenance +policy. The count guards and exact platform validator must both agree on Ubuntu/macOS; missing, +extra, duplicate, failed, or mixed-identity receipts remain invalid. Windows remains unqualified +and unpublished. + +GitHub Releases and crates.io serve 6.0.0. The Homebrew tap still serves 5.2.0; do not infer +package availability on every advertised channel from a source tag. The standalone site emits +redirects to the CorvidLabs hub, so verify the hub actually serves the corrected pages after its +deployment. ## Trust lifecycle policy diff --git a/site/src/content/docs/integrations/github-action.md b/site/src/content/docs/integrations/github-action.md index 130e5bdd0..ef0f0d260 100644 --- a/site/src/content/docs/integrations/github-action.md +++ b/site/src/content/docs/integrations/github-action.md @@ -77,7 +77,7 @@ compatible 6.x channel. Do not invent that tag. ## PR Comments -Post spec drift results directly on pull requests. SpecSync runs `diff --format markdown` and posts (or updates) a comment showing added/removed exports. +Post spec drift results directly on pull requests. SpecSync runs `specsync comment` and posts (or updates) a check-summary comment. ```yaml name: Spec Check @@ -103,7 +103,7 @@ jobs: **How it works:** - Runs `specsync check --force` (always validates all specs — the hash cache is not committed to git) -- If `comment: 'true'`, also runs `specsync diff --format markdown` +- If `comment: 'true'`, also runs `specsync comment` - Posts the markdown output as a PR comment (or updates an existing SpecSync comment) - Requires `pull-requests: write` permission and the `pull_request` event trigger diff --git a/site/src/content/docs/quickstart.md b/site/src/content/docs/quickstart.md index fbeae0039..2b9720faa 100644 --- a/site/src/content/docs/quickstart.md +++ b/site/src/content/docs/quickstart.md @@ -106,7 +106,7 @@ Answer the returned questions, complete its adaptively selected artifacts, and a Continue through the single workflow after the definition is complete: ```bash -specsync change approve # one explicit human scope approval +specsync change approve --actor "Ada" # one explicit human scope approval # implement the approved contract and keep module specs synchronized specsync change check --commit # scoped verify: apply deltas + spec↔code sync for this change specsync change audit # active workspaces + living specs (archives are history) diff --git a/site/src/content/docs/workflow.md b/site/src/content/docs/workflow.md index 30e52904e..81bd00f0e 100644 --- a/site/src/content/docs/workflow.md +++ b/site/src/content/docs/workflow.md @@ -50,7 +50,7 @@ numeric identities only. It no longer allocates new change numbers and must not Complete selected artifacts and semantic deltas, then obtain explicit human approval: ```bash -specsync change approve add-passkeys +specsync change approve add-passkeys --actor "Ada" ``` Requirements use stable IDs, normative SHALL statements, and acceptance criteria. Only a change to the approved stable intent, contract, acceptance criteria, or affected scope requires renewed human approval. Implementation details, tests, evidence, canonical delta materialization, and lifecycle metadata preserve that approval while automated verification and the scoped human review are refreshed. @@ -456,7 +456,7 @@ See [Cross-Project References](cross-project-refs.md) for the full setup. run: specsync check --strict --require-coverage 80 ``` -See [GitHub Action](integrations/github-action.md) for the official action with caching and PR comments. +See [GitHub Action](integrations/github-action.md) for the official action with checksummed download and optional PR comments. ### Pre-commit hook diff --git a/site/src/content/examples/ci-gate.mdx b/site/src/content/examples/ci-gate.mdx index 7aaff0147..9bcb41971 100644 --- a/site/src/content/examples/ci-gate.mdx +++ b/site/src/content/examples/ci-gate.mdx @@ -8,7 +8,7 @@ description: "Block merges when specs drift from code." order: 3 --- -Add the `specsync` GitHub Action to your workflow and any pull request that introduces spec drift will fail the check — before it merges. +Add the `spec-sync` GitHub Action to your workflow and any pull request that introduces spec drift will fail the check before it merges. ## 1. Add the action @@ -23,13 +23,16 @@ jobs: steps: - uses: actions/checkout@v4 - uses: CorvidLabs/spec-sync@v6.0.0 + with: + version: '6.0.0' + strict: true ``` -The action installs `specsync`, runs `specsync check --strict`, and annotates any drift directly in the PR diff view. +Pin both the Action ref (`uses: CorvidLabs/spec-sync@v6.0.0`) and the binary (`version: '6.0.0'`). The immutable `@v6.0.0` Action tag still defaults omitted `version` to `6.0.0-rc.14`. With `strict: true` the action installs `specsync` and runs `specsync check --force --strict`. ## 2. Pin the spec-sync version -Pin the immutable release while validating 6.0.0 so an unintended upstream change cannot break a Friday-afternoon merge: +Keep the dual pin while validating 6.0.0 so an unintended upstream change cannot break a Friday-afternoon merge: ```yaml - uses: CorvidLabs/spec-sync@v6.0.0 @@ -37,34 +40,51 @@ Pin the immutable release while validating 6.0.0 so an unintended upstream chang version: '6.0.0' ``` -The Action follows the spec-sync release cadence — match the version you `cargo install` locally. +The Action follows the spec-sync release cadence. Match the version you `cargo install` locally. ## 3. Tune the failure threshold -By default, `--strict` fails on any warning. For teams onboarding spec-sync incrementally, you can start with errors-only: +The Action `strict` input defaults to `false` (errors fail; warnings do not). For teams onboarding spec-sync incrementally, start there: ```yaml - uses: CorvidLabs/spec-sync@v6.0.0 with: version: '6.0.0' - strict: false # warnings allowed; errors still fail - score_threshold: 60 # also fail if any spec scores below 60 + strict: false ``` -Drop `strict: false` once your team is happy with the warning count, and tighten `score_threshold` as your spec quality improves. - -## 4. Surface drift as PR review comments - -Add `annotations: true` so drift errors render as inline GitHub PR review comments on the source line, not just in the Action log: +There is no `score_threshold` Action input. Real inputs are `version`, `download-base-url`, `strict`, `require-coverage`, `root`, `args`, `lifecycle-enforce`, `comment`, and `token`. To fail when any spec scores below a floor, run `specsync score` after the Action has put `specsync` on PATH: ```yaml - uses: CorvidLabs/spec-sync@v6.0.0 with: version: '6.0.0' - annotations: true + strict: false +- run: specsync score --min-score 60 +``` + +Drop `strict: false` once your team is happy with the warning count, and raise `--min-score` as spec quality improves. Extra `specsync check` flags can go in `args` (whitespace-separated; no shell quoting). + +## 4. Surface drift as PR comments + +There is no `annotations` Action input. Set `comment: true` so the Action posts or updates a SpecSync pull-request comment: + +```yaml +jobs: + check: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - uses: actions/checkout@v4 + - uses: CorvidLabs/spec-sync@v6.0.0 + with: + version: '6.0.0' + comment: true ``` -A PR that adds an undocumented export now shows the comment "undocumented export `delete_user` — add to `specs/api/users.spec.md` or run `specsync check --fix`" pointing at the relevant line. No need to dig through Action logs. +A job-level `permissions` block zeros unspecified scopes, so `contents: read` has to sit next to `pull-requests: write` or `actions/checkout` fails on a private repo. The event must be `pull_request`. The comment body comes from `specsync comment`. A PR that adds an undocumented export then shows that finding on the PR instead of only in the Action log. ## 5. Bypass for emergency hotfixes @@ -77,4 +97,4 @@ When you genuinely need to ship a fix without updating the spec (and you're not if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-specsync') }} ``` -The label adds friction (you have to consciously apply it) without being a hard block. Track the labels — if `skip-specsync` shows up more than twice a month, the team probably wants a real workflow change, not an escape hatch. +The label adds friction (you have to consciously apply it) without being a hard block. Track the labels: if `skip-specsync` shows up more than twice a month, the team probably wants a real workflow change, not an escape hatch. diff --git a/site/src/content/examples/polyglot.mdx b/site/src/content/examples/polyglot.mdx index dd4c114d5..e79128255 100644 --- a/site/src/content/examples/polyglot.mdx +++ b/site/src/content/examples/polyglot.mdx @@ -8,7 +8,7 @@ description: "One spec format, three languages, one CI gate." order: 2 --- -A monorepo with a TypeScript frontend, a Python ML service, and a Rust binary can share a single spec format. `spec-sync` detects each language automatically and applies the right validation rules per crate or package. +A monorepo with a TypeScript frontend, a Python ML service, and a Rust binary can share a single spec format. `specsync` detects each language automatically and applies the right validation rules per crate or package. ## 1. Check the whole repo at once @@ -16,38 +16,28 @@ A monorepo with a TypeScript frontend, a Python ML service, and a Rust binary ca specsync check ``` -`spec-sync` walks the repo, detects TypeScript (via `tsconfig.json`), Python (via `pyproject.toml`), and Rust (via `Cargo.toml`) automatically. All three are validated in a single pass. +`specsync` walks the repo, discovers source trees from language manifests, and validates every mapped spec in a single pass. -## 2. Inspect the per-language detection +## 2. How language detection works -Add `--explain` to see which language each spec was checked against: +`--explain` is not a language-detection flag. `specsync score --explain` prints a quality-score breakdown. `specsync check --explain` (when used) prints the same score breakdown; it does not report which language a spec was checked against. -```bash -specsync check --explain -``` +There is no `[[language_overrides]]` table in `.specsync/config.toml`. Manifest discovery and file extensions select the language: -``` -specs/web/api.spec.md → typescript (apps/web/src/api.ts) -specs/ml/predict.spec.md → python (services/ml/predict.py) -specs/server/handlers.spec.md → rust (crates/server/src/handlers.rs) -``` +- Rust: `Cargo.toml`, then `.rs` files +- Python: `pyproject.toml`, then `.py` files +- TypeScript/JavaScript: `package.json`, then `.ts` / `.tsx` / `.js` / `.jsx` files -If detection picks the wrong language for a directory you can pin it in `.specsync/config.toml`: - -```toml -[[language_overrides]] -path = "experiments/notebook-export/**/*.ts" -language = "typescript" -``` +If a tree is not discovered, set `source_dirs` in `.specsync/config.toml` or list the files in the spec `files:` frontmatter. ## 3. Add a polyglot ignore for shared types -A shared `types/` directory that's imported by all three services doesn't need a spec — exclude it: +A shared `types/` directory that's imported by all three services doesn't need a spec. Exclude it with the real config keys: ```toml # .specsync/config.toml -[ignore] -paths = ["types/**", "**/*.test.*"] +exclude_dirs = ["types"] +exclude_patterns = ["**/*.test.ts", "**/*.test.py", "**/*.test.rs"] ``` ## 4. Define cross-language references @@ -92,11 +82,11 @@ jobs: strict: true ``` -The Action runs `specsync check --strict` against every PR. Drift in any of the three languages blocks the merge. +Pin both the Action ref and the binary version. The `@v6.0.0` Action tag still defaults omitted `version` to `6.0.0-rc.14`. The Action runs `specsync check --force --strict` against every PR. Drift in any of the three languages blocks the merge. ## 7. Add the VS Code extension -Install [spec-sync for VS Code](https://github.com/CorvidLabs/spec-sync/tree/main/vscode-extension) on every developer machine. Spec drift surfaces inline in the editor — no `cargo install`, no terminal, no excuse. +Install [spec-sync for VS Code](https://github.com/CorvidLabs/spec-sync/tree/main/vscode-extension) on every developer machine. Spec drift surfaces inline in the editor: no `cargo install`, no terminal, no excuse. ``` # in any of the spec files, undocumented exports appear with a yellow squiggle diff --git a/specs/github/context.md b/specs/github/context.md index 208784c4e..4ae7059c0 100644 --- a/specs/github/context.md +++ b/specs/github/context.md @@ -86,8 +86,9 @@ spec: github.spec.md residual lifecycle prerequisite - `docs/ci-confidence.md` - CI/Trust ownership, confidence tiers, and protected Tier B follow-up - `.github/workflows/release.yml` and `.github/scripts/validate-release-candidate.py` - Resolve an - annotated RC marker, qualify its exact SHA through one Fledge lane on three platforms, and refuse - final tagging/publication when evidence identities diverge + annotated RC marker, qualify its exact SHA through one Fledge lane on Ubuntu and macOS, and refuse + final tagging/publication when evidence identities diverge. Windows is not a 6.0 qualification + target. - `specsync change audit --strict` in CI - SpecSync is the single authority on lifecycle coherence. CI does not reimplement lifecycle rules against commit topology @@ -105,10 +106,10 @@ import can consume the payload. Live network paths remain integration-only. The 5.1.1 release candidate adds deterministic Action/runtime distribution checks, while external exact/floating ref smoke tests remain publication-time gates. -The 5.2.0 release promotion follows REQ-github-004: Action default and consumer pins move to the exact version through the accepted release change, and the floating major ref advances only after exact-version artifacts pass Linux/macOS verification. As of 6.0 no Windows binary is published, so a Windows consumer is refused by the Action rather than smoke-tested; the release-candidate qualification lane still runs on Windows. +The 5.2.0 release promotion follows REQ-github-004: Action default and consumer pins move to the exact version through the accepted release change, and the floating major ref advances only after exact-version artifacts pass Linux/macOS verification. As of 6.0 no Windows binary is published, so a Windows consumer is refused by the Action rather than smoke-tested; the release-candidate qualification lane does not run on Windows. -CHG-0075 moves routine integration authority to Ubuntu and reserves macOS/Windows spend for one -immutable release candidate. The RC tag—not the movable staging branch—is the release identity. +CHG-0075 moves routine integration authority to Ubuntu and reserves macOS spend for one +immutable release candidate. The RC tag - not the movable staging branch - is the release identity. Qualification records tag, SHA, platform, lane, and outcome; promotion re-resolves the marker and accepts only an official successful release-workflow check for the same unchanged SHA. Release archive provenance must match the actual post-merge `pull_request` workflow event. Matching release diff --git a/specs/github/github.spec.md b/specs/github/github.spec.md index 7a2431f85..d022055b6 100644 --- a/specs/github/github.spec.md +++ b/specs/github/github.spec.md @@ -1,6 +1,6 @@ --- module: github -version: 30 +version: 32 status: stable files: - src/github.rs @@ -121,9 +121,9 @@ first use — so the workflow names no environment rather than publish a gate th ### Scenario: Promote an immutable release candidate - **Given** annotated tag `v6.0.0-rc.1` resolves to one merged commit with valid archive binding -- **When** the same `release-candidate` Fledge lane succeeds on Ubuntu, macOS, and Windows for that SHA +- **When** the same `release-candidate` Fledge lane succeeds on Ubuntu and macOS for that SHA - **Then** promotion may create `v6.0.0` at that SHA and publish artifacts; any missing, failed, stale, - mixed-SHA, or replaced-marker evidence fails closed + mixed-SHA, or replaced-marker evidence fails closed. Windows is not a required 6.0 platform. ### Scenario: Finalize after review metadata @@ -221,3 +221,5 @@ first use — so the workflow names no environment rather than publish a gate th | 2026-08-27 | drop-the-windows-binary-from-the-6-0-release-matrix-and-stop-claiming-windows-support-while-keeping-every-windows: Drop the Windows binary from the 6.0 release matrix and stop claiming Windows support, while keeping every Windows-content correctness guarantee | | 2026-09-09 | pin-the-github-action-version-default-to-published-release-6-0-0-rc-14-so-consumers-without-an-explicit-version-do-not: Pin the GitHub Action version default to published release 6.0.0-rc.14 so consumers without an explicit version do not 404 on missing v6.0.0 (#628) | | 2026-09-10 | document-shipped-specsync-6-0-0-and-set-the-action-default-to-the-stable-release: Set the Action omitted-input default on main to shipped 6.0.0 and document that @v6.0.0 still embeds 6.0.0-rc.14 | +| 2026-09-10 | rc-qualification-requires-ubuntu-and-macos-only-windows-is-not-a-6-0-target: RC qualification requires Ubuntu and macOS only; Windows is not a 6.0 target | +| 2026-09-10 | correct-remaining-specsync-6-0-docs-after-the-stable-ship: Correct remaining SpecSync 6.0 docs after the stable ship | diff --git a/specs/github/requirements.md b/specs/github/requirements.md index 34a853ac2..90dc0a0d8 100644 --- a/specs/github/requirements.md +++ b/specs/github/requirements.md @@ -197,9 +197,9 @@ Acceptance Criteria ### REQ-github-007 -Release qualification SHALL bind Ubuntu, macOS, and Windows results and final publication to one +Release qualification SHALL bind Ubuntu and macOS results and final publication to one immutable release-candidate commit, while ordinary product pull requests SHALL use Ubuntu as the -authoritative integration platform. +authoritative integration platform. Windows is not a 6.0 qualification or publication target. Acceptance Criteria @@ -219,7 +219,8 @@ Acceptance Criteria delete a tag. - Every required platform runs the same named Fledge RC lane at that exact SHA. - Changing candidate content requires a new RC marker and fresh platform evidence. -- Promotion fails closed unless Ubuntu, macOS, and Windows are green for the unchanged candidate SHA. +- Promotion fails closed unless Ubuntu and macOS are green for the unchanged candidate SHA. +- Windows is neither built nor qualified as of 6.0; the Action refuses a Windows runner. - The final `vX.Y.Z` tag is created only after promotion succeeds and points to that same SHA. - Release uploads independently reject mismatched marker, tag, checkout, evidence, or artifact SHA. - Release-chain Actions and executables have independent immutable pins, and publication freshly diff --git a/specs/github/tasks.md b/specs/github/tasks.md index 1db15295e..3ea56fb60 100644 --- a/specs/github/tasks.md +++ b/specs/github/tasks.md @@ -51,10 +51,11 @@ Per-module role sign-offs were not collected. Release approval is governed by di - [x] Bind v2 finalization to execution/review verdict evidence and preserve v1/fork-safe CI routes - [x] Authenticate review check provenance and append-only attempts, share CI limits, and preserve exact archive-tree binding across squash/rebase integration -- [x] Finish binding Ubuntu/macOS/Windows release qualification and publication to one immutable - annotated RC tag while making Ubuntu the ordinary-PR integration authority (CHG-0075). The two - immutability rulesets are provisioned and live-proven: `SpecSync immutable RC tags` (21432132) - and `SpecSync immutable final tags` (21432148), both active with no bypass actor. +- [x] Finish binding Ubuntu/macOS release qualification and publication to one immutable + annotated RC tag while making Ubuntu the ordinary-PR integration authority (CHG-0075). Windows + is not a 6.0 qualification target (#735). The two immutability rulesets are provisioned and + live-proven: `SpecSync immutable RC tags` (21432132) and `SpecSync immutable final tags` + (21432148), both active with no bypass actor. - [x] Decide the fate of App-only final-tag creation: **no GitHub App.** The `SpecSync final tag creation` ruleset, the release App, and the protected `release` environment are not being provisioned, so the App plumbing was retired instead of left failing closed. `promote` now diff --git a/specs/github/testing.md b/specs/github/testing.md index 73915b504..caf048e25 100644 --- a/specs/github/testing.md +++ b/specs/github/testing.md @@ -9,7 +9,7 @@ spec: github.spec.md | `src/github.rs` | cargo test github:: | Focused source coverage includes URL parsing, injected prepare/fetch orchestration, per-spec attribution, cap-before-provider, full deadlines, post-404 access revalidation, strict single/list response parsing, raw-page bounds, validation of every issue/PR item before filtering, open-only state, exact URL identity, raw duplicate rejection, requested-repository/query-bound Link pagination, malformed/transport errors, and no-provider-subprocess guards. | | Release version surfaces | `ruby --version` then `PYENV_VERSION=3.10.20 python3 -S .github/scripts/validate-release-version.py` | Pinned hosted Ruby and the declared lifecycle preflight provide Psych; maintained YAML syntax, Cargo, lockfile, Action default, every current root/site YAML Action step (including case-insensitive, indented, metadata-bearing, backtick, or tilde fences), structurally parsed block/flow workflow steps, named/nested/quoted keys, mixed-case repositories, non-version moving refs, and block/flow `with` inputs, packaged consumer, Trust candidate, checkout contract, and changelog agree without Python site packages or Python 3.11-only modules | | Hosted Bun runtime | `python3 -S .github/scripts/validate-workflow-runtime-pins.py` | Pages, site CI, and VS Code extension CI each contain exactly one expected `setup-bun` Action ref with the supported exact Bun version under that step's `with` mapping; structural parsing covers block/flow mappings, quoted keys, arbitrary valid list-marker spacing, and `uses` after other keys, while mixed-case repositories, moving refs, duplicates, unexpected jobs, and missing inputs fail without Python site packages | -| Immutable RC evidence | `python3 .github/scripts/test-validate-release-candidate.py` | Exactly one successful Ubuntu, macOS, and Windows record must share the expected annotated RC identity, candidate SHA, schema, and Fledge lane; missing, duplicate, malformed, failed, cancelled, or mixed identity evidence fails closed | +| Immutable RC evidence | `python3 .github/scripts/test-validate-release-candidate.py` | Exactly one successful Ubuntu and macOS record must share the expected annotated RC identity, candidate SHA, schema, and Fledge lane; Windows is not required as of 6.0. Missing, duplicate, malformed, failed, cancelled, or mixed identity evidence fails closed | | Lifecycle coherence | `cargo run -- change audit --strict` | SpecSync itself validates active change workspaces and living SDD policy/spec coherence; CI no longer reimplements these rules against commit topology | ## Coverage Gaps @@ -71,7 +71,7 @@ spec: github.spec.md | YAML fence uses tildes | The rendered workflow example remains in release validation scope | Convert a public YAML example to a tilde fence, substitute a moving spec-sync ref, and require the release validator to fail | | Exact Action release fails a platform smoke test | Floating `v5` remains unchanged | Compare refs before and after the failed promotion attempt | | Ordinary product PR | Ubuntu owns the integration test job; macOS and Windows are not scheduled | Parse `.github/workflows/ci.yml` and require one Ubuntu test authority without an OS matrix | -| Immutable RC qualification | Ubuntu, macOS, and Windows run `fledge lanes run release-candidate` for the same resolved SHA | Parse the release matrix and validate fixture evidence for all three platforms | +| Immutable RC qualification | Ubuntu and macOS run `fledge lanes run release-candidate` for the same resolved SHA | Parse the release matrix and validate fixture evidence for the two required platforms | | Candidate content or marker changes | Prior platform evidence cannot authorize promotion or upload | Change the expected SHA/tag in validator fixtures and require failure; conflicting workflow history also fails | | Final publication | Final tag and artifacts use the already-qualified candidate SHA | Require authorization before promotion and independent final-tag/checkout identity checks before upload | | Lifecycle metadata rides with the product commit | No separate archive tip is required before merge | Require `cargo run -- change audit --strict` to pass on the pull request as a whole |