From 28aa55cc3e3610f4454f8d0fb9e874632eec8f71 Mon Sep 17 00:00:00 2001 From: "Harol A. Reina H." Date: Mon, 21 Sep 2026 07:56:14 -0500 Subject: [PATCH] ci(openspec): gate archived changes on having no unticked tasks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Completes the ADR-0023 §7 rollout. The other four repos wired this step after clearing real debt — 18 archived changes across them carried tasks that were never ticked, invisible to every gate because `validate --all --strict` does not read `changes/archive/`. This repo has no archived change yet, so the step passes vacuously today. That is the reason to add it now rather than later: it guards the FIRST archived change instead of the eighteenth. Verified the empty case is safe before wiring it — `validate --archived` exits 0 with "No items found to validate", so this cannot break CI on the next push. And verified the step is a gate rather than decoration, on a scratch copy of a repo that does have archived changes: exit 0 clean, exit 1 with a single box unticked. Verified on this branch: openspec validate --all --strict, npm run check, lint, test:i18n (parity OK across 3 locales) and validate:digests all rc=0. --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c7b467..e1dd4db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -249,3 +249,9 @@ jobs: - uses: actions/checkout@v7 - name: Validate specs and changes (strict) run: npx -y @fission-ai/openspec@1.13.1 validate --all --strict --no-interactive + + # Archived changes must carry no unticked task. The other four repos wired this + # after clearing real debt (ADR-0023 §7); this repo has no archived change yet, so + # the step passes vacuously today and guards the FIRST one instead of the 18th. + - name: Validate archived changes (no unticked tasks) + run: npx -y @fission-ai/openspec@1.13.1 validate --archived --no-interactive