From 17ffdd55856268e5eb909cbd717ffab9c95656af Mon Sep 17 00:00:00 2001 From: Joao Paulo Furtado Date: Sun, 4 Oct 2026 22:30:16 -0700 Subject: [PATCH] docs(prds): close PRD-483 at 100% and archive it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The cleanup PR's qualification is green and #435 merged as abaa1f0e9: PR run 37256579927 (65 succeeded, 1 expected policy skip, ci-required success) and merge-group run 37259374897 (66 jobs, 13 template nonvisual legs, 3 golden-path jobs, 16 Integration jobs, ci-required success) both pass, so the last open Phase 2 box is ticked with no bypass. PRD-483 had no Acceptance criteria section, so prd-progress could never report it ready. Its four outcome criteria are written from the landed evidence and the six CI-contract specs (282 tests) that guard them. The file moves to docs/PRDs/done/ per docs/PRDs/AGENTS.md; the AGENTS.md link follows and CLAUDE.md is regenerated. `pnpm prd:progress` reads prd:100% — ready. --- AGENTS.md | 2 +- CLAUDE.md | 2 +- ...ct-driven-ci-without-repeated-template-setup.md | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) rename docs/PRDs/{CI => done}/PRD-483-impact-driven-ci-without-repeated-template-setup.md (90%) diff --git a/AGENTS.md b/AGENTS.md index 641ad97797..db909e19df 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -77,7 +77,7 @@ pnpm native:build # opt-in; downloads deps, compiles th pnpm native:verify:desktop # 300 native frames + a non-blank screenshot ``` -**CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. +**CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/done/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. Registry commands read auth from `~/.npmrc`; pass a checkout-local untracked `.npmrc` with `npm --userconfig .npmrc `. Never print either file. TypeScript 5.9 `strict`, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. diff --git a/CLAUDE.md b/CLAUDE.md index e9f4a3cb22..a5bf91a9e1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -79,7 +79,7 @@ pnpm native:build # opt-in; downloads deps, compiles th pnpm native:verify:desktop # 300 native frames + a non-blank screenshot ``` -**CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. +**CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/done/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. Registry commands read auth from `~/.npmrc`; pass a checkout-local untracked `.npmrc` with `npm --userconfig .npmrc `. Never print either file. TypeScript 5.9 `strict`, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. diff --git a/docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md b/docs/PRDs/done/PRD-483-impact-driven-ci-without-repeated-template-setup.md similarity index 90% rename from docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md rename to docs/PRDs/done/PRD-483-impact-driven-ci-without-repeated-template-setup.md index 94daa9d45b..0140784706 100644 --- a/docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md +++ b/docs/PRDs/done/PRD-483-impact-driven-ci-without-repeated-template-setup.md @@ -4,8 +4,7 @@ prd_contract: v1 # PRD-483 — Impact-driven CI without repeated template setup -**Status:** PARTIAL — local verification green; live CI pending. -**Priority:** P2 — Single open box: normal CI passes on the cleanup PR without bypass. +**Status:** DONE — 2026-10-05. Normal PR and merge-group qualification green; merged as `abaa1f0e9` (#435). **Owner:** CI tooling **Scope:** One cleanup PR; builds on PRDs 373, 380, 480 and 481 and the conservative #417 reuse repair. @@ -32,7 +31,16 @@ prd_contract: v1 ### Phase 2 — Qualify the smaller pipeline - [x] Final typecheck, lint, docs and relevant unit checks pass. proof: `pnpm build`, `pnpm typecheck`, `pnpm lint`, `pnpm check:docs` exit 0; 303 focused tests passed, 2026-10-03. -- [ ] Normal CI passes on this cleanup PR before merge; the authorized ready transition starts qualification. proof: PR check run; no bypass authorized. +- [x] Normal CI passes on this cleanup PR before merge; the authorized ready transition starts qualification. proof: PR run 37256579927 at head `e072c3a6` (65 succeeded, 1 expected policy skip, `ci-required` success) and merge-group run 37259374897 at candidate `c3211d3c` (66 jobs, `ci-required` success 04:31:04); merged as `abaa1f0e9` at 04:38:29, no bypass. + +## Acceptance criteria + +- [x] **AC-1 [shared; actor: CI]:** An ordinary PR plans only what its diff reaches — a one-kit change runs only that kit's template legs, a Markdown-only change no fixture consumes runs no product job, and a shared or unknown executable input keeps the exhaustive matrix. proof: `pnpm exec vitest run scripts/__tests__/ci-template-selection.spec.ts scripts/__tests__/ci-structure.spec.ts`, 2026-10-05. +- [x] **AC-2 [shared; actor: merge queue]:** A merge group qualifies the exhaustive plan at the exact candidate — all 13 template nonvisual legs, both golden journeys, the full native tier and every Integration lane — and the required `ci-required` verdict passes only on that completed plan. proof: merge-group run 37259374897 (66 jobs: 13 nonvisual legs, 3 golden-path jobs, 16 Integration jobs, `ci-required` success) and PR run 37256579927 (65 succeeded, 1 expected policy skip), 2026-10-05. +- [x] **AC-3 [shared; actor: implementation agent]:** Template setup does not repeat: the sequential pristine-template compiler loop is skipped only when the exact full plan owns every dynamically discovered typecheck template, and a local, partial, unsupported or unknown input keeps it. proof: `pnpm exec vitest run scripts/__tests__/ci-template-typecheck.spec.ts`, 2026-10-05. +- [x] **AC-4 [shared; actor: CI]:** Reusable-verdict reuse stays disabled: a missing, partial, failed, skipped, stale or wrong-source receipt never authorizes a skip, and an attempt receipt is retried only for the observed transport outage against the identical attempt endpoint. proof: `pnpm exec vitest run scripts/__tests__/ci-qualification.spec.ts scripts/__tests__/ci-attempt-receipts.spec.ts`, 2026-10-05. + +All six CI-contract specs above ran together at `abaa1f0e9`: 6 files, 282 tests passed. ## Coverage and cost