From 444a44e95124c77de4c78804929af9cd342f4ec7 Mon Sep 17 00:00:00 2001 From: Dominikus Nold Date: Tue, 17 Mar 2026 23:43:22 +0100 Subject: [PATCH] Archived all implemented changes and updated specs --- .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/radon-runner/spec.md | 13 ++-- .../specs/ruff-runner/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../CHANGE_VALIDATION.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/contract-runner/spec.md | 0 .../specs/test-tdd-gate/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../TDD_EVIDENCE.md | 0 .../proposal.md | 0 .../tasks.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/review-cli-contracts/spec.md | 0 .../specs/review-run-command/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../CHANGE_VALIDATION.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/review-cli-contracts/spec.md | 0 .../specs/review-run-command/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../CHANGE_VALIDATION.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/modules-docs-publishing/spec.md | 0 .../tasks.md | 2 +- .../.openspec.yaml | 0 .../CHANGE_VALIDATION.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/backlog-add/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/backlog-add/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../CHANGE_VALIDATION.md | 0 .../TDD_EVIDENCE.md | 0 .../design.md | 0 .../proposal.md | 0 .../specs/backlog-add/spec.md | 0 .../tasks.md | 0 .../.openspec.yaml | 0 .../TDD_EVIDENCE.md | 0 .../proposal.md | 0 .../specs/review-run-command/spec.md | 2 + .../tasks.md | 0 openspec/specs/backlog-add/spec.md | 62 +++++++++-------- openspec/specs/contract-runner/spec.md | 47 +++++++++++++ .../specs/modules-docs-publishing/spec.md | 35 ++++++++++ openspec/specs/radon-runner/spec.md | 45 ++++++++++++ openspec/specs/review-cli-contracts/spec.md | 25 +++++++ openspec/specs/review-run-command/spec.md | 69 +++++++++++++++++++ openspec/specs/ruff-runner/spec.md | 39 +++++++++++ openspec/specs/test-tdd-gate/spec.md | 59 ++++++++++++++++ 72 files changed, 364 insertions(+), 34 deletions(-) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/TDD_EVIDENCE.md (100%) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/design.md (100%) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/proposal.md (100%) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/specs/radon-runner/spec.md (85%) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/specs/ruff-runner/spec.md (100%) rename openspec/changes/{code-review-02-ruff-radon-runners => archive/2026-03-17-code-review-02-ruff-radon-runners}/tasks.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/.openspec.yaml (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/CHANGE_VALIDATION.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/TDD_EVIDENCE.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/design.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/proposal.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/specs/contract-runner/spec.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/specs/test-tdd-gate/spec.md (100%) rename openspec/changes/{code-review-04-contract-test-runners => archive/2026-03-17-code-review-04-contract-test-runners}/tasks.md (100%) rename openspec/changes/{code-review-07-house-rules-skill => archive/2026-03-17-code-review-07-house-rules-skill}/.openspec.yaml (100%) rename openspec/changes/{code-review-07-house-rules-skill => archive/2026-03-17-code-review-07-house-rules-skill}/TDD_EVIDENCE.md (100%) rename openspec/changes/{code-review-07-house-rules-skill => archive/2026-03-17-code-review-07-house-rules-skill}/proposal.md (100%) rename openspec/changes/{code-review-07-house-rules-skill => archive/2026-03-17-code-review-07-house-rules-skill}/tasks.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/TDD_EVIDENCE.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/design.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/proposal.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/specs/review-cli-contracts/spec.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/specs/review-run-command/spec.md (100%) rename openspec/changes/{code-review-08-review-run-integration => archive/2026-03-17-code-review-08-review-run-integration}/tasks.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/.openspec.yaml (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/CHANGE_VALIDATION.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/TDD_EVIDENCE.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/design.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/proposal.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/specs/review-cli-contracts/spec.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/specs/review-run-command/spec.md (100%) rename openspec/changes/{code-review-10-review-scope-modes => archive/2026-03-17-code-review-10-review-scope-modes}/tasks.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/.openspec.yaml (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/CHANGE_VALIDATION.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/TDD_EVIDENCE.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/design.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/proposal.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/specs/modules-docs-publishing/spec.md (100%) rename openspec/changes/{docs-01-modules-docs-canonical-site => archive/2026-03-17-docs-01-modules-docs-canonical-site}/tasks.md (96%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/.openspec.yaml (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/CHANGE_VALIDATION.md (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/TDD_EVIDENCE.md (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/design.md (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/proposal.md (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/specs/backlog-add/spec.md (100%) rename openspec/changes/{fix-backlog-add-ado-custom-field-payload => archive/2026-03-17-fix-backlog-add-ado-custom-field-payload}/tasks.md (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/.openspec.yaml (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/TDD_EVIDENCE.md (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/design.md (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/proposal.md (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/specs/backlog-add/spec.md (100%) rename openspec/changes/{fix-backlog-add-work-item-type-mapping => archive/2026-03-17-fix-backlog-add-work-item-type-mapping}/tasks.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/.openspec.yaml (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/CHANGE_VALIDATION.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/TDD_EVIDENCE.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/design.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/proposal.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/specs/backlog-add/spec.md (100%) rename openspec/changes/{fix-backlog-provider-required-field-mappings => archive/2026-03-17-fix-backlog-provider-required-field-mappings}/tasks.md (100%) rename openspec/changes/{review-run-dogfood-followup => archive/2026-03-17-review-run-dogfood-followup}/.openspec.yaml (100%) rename openspec/changes/{review-run-dogfood-followup => archive/2026-03-17-review-run-dogfood-followup}/TDD_EVIDENCE.md (100%) rename openspec/changes/{review-run-dogfood-followup => archive/2026-03-17-review-run-dogfood-followup}/proposal.md (100%) rename openspec/changes/{review-run-dogfood-followup => archive/2026-03-17-review-run-dogfood-followup}/specs/review-run-command/spec.md (99%) rename openspec/changes/{review-run-dogfood-followup => archive/2026-03-17-review-run-dogfood-followup}/tasks.md (100%) create mode 100644 openspec/specs/contract-runner/spec.md create mode 100644 openspec/specs/modules-docs-publishing/spec.md create mode 100644 openspec/specs/radon-runner/spec.md create mode 100644 openspec/specs/review-cli-contracts/spec.md create mode 100644 openspec/specs/review-run-command/spec.md create mode 100644 openspec/specs/ruff-runner/spec.md create mode 100644 openspec/specs/test-tdd-gate/spec.md diff --git a/openspec/changes/code-review-02-ruff-radon-runners/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/code-review-02-ruff-radon-runners/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/TDD_EVIDENCE.md diff --git a/openspec/changes/code-review-02-ruff-radon-runners/design.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/design.md similarity index 100% rename from openspec/changes/code-review-02-ruff-radon-runners/design.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/design.md diff --git a/openspec/changes/code-review-02-ruff-radon-runners/proposal.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/proposal.md similarity index 100% rename from openspec/changes/code-review-02-ruff-radon-runners/proposal.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/proposal.md diff --git a/openspec/changes/code-review-02-ruff-radon-runners/specs/radon-runner/spec.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/specs/radon-runner/spec.md similarity index 85% rename from openspec/changes/code-review-02-ruff-radon-runners/specs/radon-runner/spec.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/specs/radon-runner/spec.md index 48eb310..4a56239 100644 --- a/openspec/changes/code-review-02-ruff-radon-runners/specs/radon-runner/spec.md +++ b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/specs/radon-runner/spec.md @@ -4,10 +4,6 @@ The bundle SHALL invoke `radon cc -j` for only the provided files and convert function complexity above 12 into `ReviewFinding` records. -### Requirement: Radon is available in the standard repo environment -The bundle SHALL declare the Radon executable in the default development environment -used by local and CI quality gates. - #### Scenario: Complexity 13 produces a warning - **GIVEN** Radon reports a function with complexity 13 - **WHEN** `run_radon(files=[...])` is called @@ -34,3 +30,12 @@ used by local and CI quality gates. - **GIVEN** Radon is unavailable or returns invalid JSON - **WHEN** `run_radon(files=[...])` is called - **THEN** exactly one `ReviewFinding` with `category="tool_error"` is returned + +### Requirement: Radon is available in the standard repo environment +The bundle SHALL declare the Radon executable in the default development environment +used by local and CI quality gates. + +#### Scenario: Repo quality environment can execute Radon +- **GIVEN** the standard repository development environment is created +- **WHEN** Radon-backed review tooling or tests run in that environment +- **THEN** the `radon` executable is available on `PATH` diff --git a/openspec/changes/code-review-02-ruff-radon-runners/specs/ruff-runner/spec.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/specs/ruff-runner/spec.md similarity index 100% rename from openspec/changes/code-review-02-ruff-radon-runners/specs/ruff-runner/spec.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/specs/ruff-runner/spec.md diff --git a/openspec/changes/code-review-02-ruff-radon-runners/tasks.md b/openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/tasks.md similarity index 100% rename from openspec/changes/code-review-02-ruff-radon-runners/tasks.md rename to openspec/changes/archive/2026-03-17-code-review-02-ruff-radon-runners/tasks.md diff --git a/openspec/changes/code-review-04-contract-test-runners/.openspec.yaml b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/.openspec.yaml similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/.openspec.yaml rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/.openspec.yaml diff --git a/openspec/changes/code-review-04-contract-test-runners/CHANGE_VALIDATION.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/CHANGE_VALIDATION.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/CHANGE_VALIDATION.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/CHANGE_VALIDATION.md diff --git a/openspec/changes/code-review-04-contract-test-runners/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/TDD_EVIDENCE.md diff --git a/openspec/changes/code-review-04-contract-test-runners/design.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/design.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/design.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/design.md diff --git a/openspec/changes/code-review-04-contract-test-runners/proposal.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/proposal.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/proposal.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/proposal.md diff --git a/openspec/changes/code-review-04-contract-test-runners/specs/contract-runner/spec.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/specs/contract-runner/spec.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/specs/contract-runner/spec.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/specs/contract-runner/spec.md diff --git a/openspec/changes/code-review-04-contract-test-runners/specs/test-tdd-gate/spec.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/specs/test-tdd-gate/spec.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/specs/test-tdd-gate/spec.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/specs/test-tdd-gate/spec.md diff --git a/openspec/changes/code-review-04-contract-test-runners/tasks.md b/openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/tasks.md similarity index 100% rename from openspec/changes/code-review-04-contract-test-runners/tasks.md rename to openspec/changes/archive/2026-03-17-code-review-04-contract-test-runners/tasks.md diff --git a/openspec/changes/code-review-07-house-rules-skill/.openspec.yaml b/openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/.openspec.yaml similarity index 100% rename from openspec/changes/code-review-07-house-rules-skill/.openspec.yaml rename to openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/.openspec.yaml diff --git a/openspec/changes/code-review-07-house-rules-skill/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/code-review-07-house-rules-skill/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/TDD_EVIDENCE.md diff --git a/openspec/changes/code-review-07-house-rules-skill/proposal.md b/openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/proposal.md similarity index 100% rename from openspec/changes/code-review-07-house-rules-skill/proposal.md rename to openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/proposal.md diff --git a/openspec/changes/code-review-07-house-rules-skill/tasks.md b/openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/tasks.md similarity index 100% rename from openspec/changes/code-review-07-house-rules-skill/tasks.md rename to openspec/changes/archive/2026-03-17-code-review-07-house-rules-skill/tasks.md diff --git a/openspec/changes/code-review-08-review-run-integration/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/TDD_EVIDENCE.md diff --git a/openspec/changes/code-review-08-review-run-integration/design.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/design.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/design.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/design.md diff --git a/openspec/changes/code-review-08-review-run-integration/proposal.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/proposal.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/proposal.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/proposal.md diff --git a/openspec/changes/code-review-08-review-run-integration/specs/review-cli-contracts/spec.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/specs/review-cli-contracts/spec.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/specs/review-cli-contracts/spec.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/specs/review-cli-contracts/spec.md diff --git a/openspec/changes/code-review-08-review-run-integration/specs/review-run-command/spec.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/specs/review-run-command/spec.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/specs/review-run-command/spec.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/specs/review-run-command/spec.md diff --git a/openspec/changes/code-review-08-review-run-integration/tasks.md b/openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/tasks.md similarity index 100% rename from openspec/changes/code-review-08-review-run-integration/tasks.md rename to openspec/changes/archive/2026-03-17-code-review-08-review-run-integration/tasks.md diff --git a/openspec/changes/code-review-10-review-scope-modes/.openspec.yaml b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/.openspec.yaml similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/.openspec.yaml rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/.openspec.yaml diff --git a/openspec/changes/code-review-10-review-scope-modes/CHANGE_VALIDATION.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/CHANGE_VALIDATION.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/CHANGE_VALIDATION.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/CHANGE_VALIDATION.md diff --git a/openspec/changes/code-review-10-review-scope-modes/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/TDD_EVIDENCE.md diff --git a/openspec/changes/code-review-10-review-scope-modes/design.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/design.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/design.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/design.md diff --git a/openspec/changes/code-review-10-review-scope-modes/proposal.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/proposal.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/proposal.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/proposal.md diff --git a/openspec/changes/code-review-10-review-scope-modes/specs/review-cli-contracts/spec.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/specs/review-cli-contracts/spec.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/specs/review-cli-contracts/spec.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/specs/review-cli-contracts/spec.md diff --git a/openspec/changes/code-review-10-review-scope-modes/specs/review-run-command/spec.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/specs/review-run-command/spec.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/specs/review-run-command/spec.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/specs/review-run-command/spec.md diff --git a/openspec/changes/code-review-10-review-scope-modes/tasks.md b/openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/tasks.md similarity index 100% rename from openspec/changes/code-review-10-review-scope-modes/tasks.md rename to openspec/changes/archive/2026-03-17-code-review-10-review-scope-modes/tasks.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/.openspec.yaml b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/.openspec.yaml similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/.openspec.yaml rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/.openspec.yaml diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/CHANGE_VALIDATION.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/CHANGE_VALIDATION.md similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/CHANGE_VALIDATION.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/CHANGE_VALIDATION.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/TDD_EVIDENCE.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/design.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/design.md similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/design.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/design.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/proposal.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/proposal.md similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/proposal.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/proposal.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/specs/modules-docs-publishing/spec.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/specs/modules-docs-publishing/spec.md similarity index 100% rename from openspec/changes/docs-01-modules-docs-canonical-site/specs/modules-docs-publishing/spec.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/specs/modules-docs-publishing/spec.md diff --git a/openspec/changes/docs-01-modules-docs-canonical-site/tasks.md b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/tasks.md similarity index 96% rename from openspec/changes/docs-01-modules-docs-canonical-site/tasks.md rename to openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/tasks.md index 55ee517..2e8f340 100644 --- a/openspec/changes/docs-01-modules-docs-canonical-site/tasks.md +++ b/openspec/changes/archive/2026-03-17-docs-01-modules-docs-canonical-site/tasks.md @@ -26,4 +26,4 @@ - [x] 5.1 Re-run the targeted docs validation checks and record passing evidence in `openspec/changes/docs-01-modules-docs-canonical-site/TDD_EVIDENCE.md` - [x] 5.2 Run `openspec validate docs-01-modules-docs-canonical-site --strict` - [x] 5.3 Run the relevant repo quality gates for touched docs/test files -- [ ] 5.4 Open PR to `dev` from `feature/docs-01-modules-docs-canonical-site` +- [x] 5.4 Open PR to `dev` from `feature/docs-01-modules-docs-canonical-site` diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/.openspec.yaml b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/.openspec.yaml similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/.openspec.yaml rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/.openspec.yaml diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/CHANGE_VALIDATION.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/CHANGE_VALIDATION.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/CHANGE_VALIDATION.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/CHANGE_VALIDATION.md diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/TDD_EVIDENCE.md diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/design.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/design.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/design.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/design.md diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/proposal.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/proposal.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/proposal.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/proposal.md diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/specs/backlog-add/spec.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/specs/backlog-add/spec.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/specs/backlog-add/spec.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/specs/backlog-add/spec.md diff --git a/openspec/changes/fix-backlog-add-ado-custom-field-payload/tasks.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/tasks.md similarity index 100% rename from openspec/changes/fix-backlog-add-ado-custom-field-payload/tasks.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-ado-custom-field-payload/tasks.md diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/.openspec.yaml b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/.openspec.yaml similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/.openspec.yaml rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/.openspec.yaml diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/TDD_EVIDENCE.md diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/design.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/design.md similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/design.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/design.md diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/proposal.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/proposal.md similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/proposal.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/proposal.md diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/specs/backlog-add/spec.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/specs/backlog-add/spec.md similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/specs/backlog-add/spec.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/specs/backlog-add/spec.md diff --git a/openspec/changes/fix-backlog-add-work-item-type-mapping/tasks.md b/openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/tasks.md similarity index 100% rename from openspec/changes/fix-backlog-add-work-item-type-mapping/tasks.md rename to openspec/changes/archive/2026-03-17-fix-backlog-add-work-item-type-mapping/tasks.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/.openspec.yaml b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/.openspec.yaml similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/.openspec.yaml rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/.openspec.yaml diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/CHANGE_VALIDATION.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/CHANGE_VALIDATION.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/CHANGE_VALIDATION.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/CHANGE_VALIDATION.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/TDD_EVIDENCE.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/design.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/design.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/design.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/design.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/proposal.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/proposal.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/proposal.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/proposal.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/specs/backlog-add/spec.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/specs/backlog-add/spec.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/specs/backlog-add/spec.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/specs/backlog-add/spec.md diff --git a/openspec/changes/fix-backlog-provider-required-field-mappings/tasks.md b/openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/tasks.md similarity index 100% rename from openspec/changes/fix-backlog-provider-required-field-mappings/tasks.md rename to openspec/changes/archive/2026-03-17-fix-backlog-provider-required-field-mappings/tasks.md diff --git a/openspec/changes/review-run-dogfood-followup/.openspec.yaml b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/.openspec.yaml similarity index 100% rename from openspec/changes/review-run-dogfood-followup/.openspec.yaml rename to openspec/changes/archive/2026-03-17-review-run-dogfood-followup/.openspec.yaml diff --git a/openspec/changes/review-run-dogfood-followup/TDD_EVIDENCE.md b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/TDD_EVIDENCE.md similarity index 100% rename from openspec/changes/review-run-dogfood-followup/TDD_EVIDENCE.md rename to openspec/changes/archive/2026-03-17-review-run-dogfood-followup/TDD_EVIDENCE.md diff --git a/openspec/changes/review-run-dogfood-followup/proposal.md b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/proposal.md similarity index 100% rename from openspec/changes/review-run-dogfood-followup/proposal.md rename to openspec/changes/archive/2026-03-17-review-run-dogfood-followup/proposal.md diff --git a/openspec/changes/review-run-dogfood-followup/specs/review-run-command/spec.md b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/specs/review-run-command/spec.md similarity index 99% rename from openspec/changes/review-run-dogfood-followup/specs/review-run-command/spec.md rename to openspec/changes/archive/2026-03-17-review-run-dogfood-followup/specs/review-run-command/spec.md index 9306fdb..433462d 100644 --- a/openspec/changes/review-run-dogfood-followup/specs/review-run-command/spec.md +++ b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/specs/review-run-command/spec.md @@ -52,6 +52,8 @@ and emits a governed `ReviewReport` with correct exit codes. - **AND** progress feedback does not replace the primary stdout contract such as the final JSON output path +## ADDED Requirements + ### Requirement: Developer runtime validation helper for local modules The modules repository SHALL provide a repo-local helper that prepares a live diff --git a/openspec/changes/review-run-dogfood-followup/tasks.md b/openspec/changes/archive/2026-03-17-review-run-dogfood-followup/tasks.md similarity index 100% rename from openspec/changes/review-run-dogfood-followup/tasks.md rename to openspec/changes/archive/2026-03-17-review-run-dogfood-followup/tasks.md diff --git a/openspec/specs/backlog-add/spec.md b/openspec/specs/backlog-add/spec.md index 7d73f89..a1539a7 100644 --- a/openspec/specs/backlog-add/spec.md +++ b/openspec/specs/backlog-add/spec.md @@ -5,33 +5,37 @@ TBD - created by archiving change backlog-02-migrate-core-commands. Update Purpo ## Requirements ### Requirement: Restore backlog add command functionality -`specfact backlog add` SHALL build valid provider payloads for mapped required provider fields. - -#### Scenario: map-fields persists required mapped field type metadata -- **WHEN** `specfact backlog map-fields` discovers required ADO fields for a selected work item type -- **THEN** it persists required field type metadata for those field references in provider settings -- **AND** metadata is keyed by work item type so later create commands can resolve field types. - -#### Scenario: map-fields clears stale selected-type field metadata -- **WHEN** `specfact backlog map-fields` is rerun for a selected ADO work item type -- **AND** the latest metadata no longer includes persisted field types for that selected type -- **THEN** the stored required field type metadata for that selected work item type is removed -- **AND** metadata for other work item types remains unchanged. - -#### Scenario: add coerces mapped required boolean provider fields -- **WHEN** `specfact backlog add` resolves a mapped required field whose persisted metadata type is `boolean` -- **AND** the user passes a provider override such as `--provider-field Custom.Toggle=true` -- **THEN** the outgoing ADO provider payload contains the boolean value `true` (not a string). - -#### Scenario: add rejects invalid typed values before provider calls -- **WHEN** `specfact backlog add --non-interactive` resolves a mapped required field whose persisted metadata type is `boolean` -- **AND** the user passes an invalid boolean text value -- **THEN** the CLI exits with a validation error that names the mapped field -- **AND** no provider create call is made. - -#### Scenario: add rejects invalid picklist values before provider calls -- **WHEN** `specfact backlog add --non-interactive` resolves a mapped required field whose persisted metadata contains allowed picklist values -- **AND** the user passes a provider override value outside that allowed set -- **THEN** the CLI exits with a validation error that names the mapped field and allowed values -- **AND** no provider create call is made. +The system SHALL provide `specfact backlog add` command that creates backlog items with the same functionality as the deleted backlog-core implementation. For Azure DevOps, the command SHALL use `work_item_type_mappings` from the field mapping configuration to resolve canonical types to provider-specific work item types. + +#### Scenario: Add command creates GitHub issue +- **WHEN** the user runs `specfact backlog add --adapter github --project-id --type story --title "Test" --body "Body"` +- **THEN** a GitHub issue is created with the specified title, body, and type +- **AND** the command outputs the created issue ID, key, and URL + +#### Scenario: Add command creates ADO work item with custom type mapping +- **WHEN** the user runs `specfact backlog add --adapter ado --project-id --type story --title "Test"` +- **AND** `.specfact/templates/backlog/field_mappings/ado_custom.yaml` contains `work_item_type_mappings.story: "Product Backlog Item"` +- **THEN** an ADO work item of type "Product Backlog Item" is created +- **AND** the command outputs the created work item ID, key, and URL + +#### Scenario: Add command creates ADO work item with fallback type mapping +- **WHEN** the user runs `specfact backlog add --adapter ado --project-id --type story --title "Test"` +- **AND** no custom `work_item_type_mappings` is configured +- **THEN** an ADO work item of type "User Story" is created (backward compatible fallback) +- **AND** the command outputs the created work item ID, key, and URL + +#### Scenario: Interactive mode prompts for missing fields +- **WHEN** the user runs `specfact backlog add` without required fields +- **THEN** interactive prompts request title, body, type, and parent +- **AND** validation ensures parent exists before create + +#### Scenario: DoR validation before create +- **WHEN** the user runs `specfact backlog add --check-dor` +- **THEN** the item is validated against `.specfact/dor.yaml` rules +- **AND** creation proceeds only if DoR criteria are met + +#### Scenario: Ceremony alias works +- **WHEN** the user runs `specfact backlog ceremony add` +- **THEN** the command forwards to `specfact backlog add` +- **AND** all add options are available diff --git a/openspec/specs/contract-runner/spec.md b/openspec/specs/contract-runner/spec.md new file mode 100644 index 0000000..2b0da54 --- /dev/null +++ b/openspec/specs/contract-runner/spec.md @@ -0,0 +1,47 @@ +# contract-runner Specification + +## Purpose +TBD - created by archiving change code-review-04-contract-test-runners. Update Purpose after archive. +## Requirements +### Requirement: icontract Decorator AST Scan and CrossHair Fast Pass + +The system SHALL AST-scan changed Python files for public functions missing +`@require` / `@ensure` decorators, and run CrossHair with a 2-second per-path timeout +for counterexample discovery. + +#### Scenario: Public function without icontract decorators produces a contracts finding + +- **GIVEN** a Python file with a public function lacking icontract decorators +- **WHEN** `run_contract_check(files=[...])` is called +- **THEN** a `ReviewFinding` is returned with `category="contracts"` and + `severity="warning"` + +#### Scenario: Decorated public function produces no contracts finding + +- **GIVEN** a Python file with a public function decorated with both `@require` and + `@ensure` +- **WHEN** `run_contract_check(files=[...])` is called +- **THEN** no contract-related finding is returned for that function + +#### Scenario: Private functions are excluded from the scan + +- **GIVEN** a Python file with a function named `_private_helper` and no icontract + decorators +- **WHEN** `run_contract_check(files=[...])` is called +- **THEN** no finding is produced for `_private_helper` + +#### Scenario: CrossHair counterexample maps to a contracts warning + +- **GIVEN** CrossHair finds a counterexample for a reviewed function +- **WHEN** `run_contract_check(files=[...])` is called +- **THEN** a `ReviewFinding` is returned with `category="contracts"`, + `severity="warning"`, and `tool="crosshair"` + +#### Scenario: CrossHair timeout or unavailability degrades gracefully + +- **GIVEN** CrossHair times out or is not installed +- **WHEN** `run_contract_check(files=[...])` is called +- **THEN** the AST scan still runs +- **AND** no exception propagates to the caller +- **AND** CrossHair unavailability does not produce a blocking finding + diff --git a/openspec/specs/modules-docs-publishing/spec.md b/openspec/specs/modules-docs-publishing/spec.md new file mode 100644 index 0000000..7f2236b --- /dev/null +++ b/openspec/specs/modules-docs-publishing/spec.md @@ -0,0 +1,35 @@ +# modules-docs-publishing Specification + +## Purpose +TBD - created by archiving change docs-01-modules-docs-canonical-site. Update Purpose after archive. +## Requirements +### Requirement: Modules docs site is the canonical home for official bundle documentation + +The modules documentation site SHALL present itself as the canonical published home for official bundle and module-specific deep documentation. + +#### Scenario: Reader opens modules landing page + +- **WHEN** a reader opens the modules docs landing page +- **THEN** the page states that official bundle and module-specific deep guidance is owned by `specfact-cli-modules` +- **AND** the page does not describe the GitHub Pages project-path URL as the long-term canonical public identity. + +### Requirement: Modules docs expose shared cross-site navigation + +The modules documentation site SHALL expose shared top-level navigation labels that align with the canonical docs information architecture. + +#### Scenario: Reader uses top navigation + +- **WHEN** a reader opens the modules docs site +- **THEN** the top navigation includes `Docs Home`, `Core CLI`, and `Modules` +- **AND** the links guide the reader to the canonical docs entry point and core docs section without ambiguity. + +### Requirement: Modules docs remain independently publishable + +The modules documentation site SHALL support independent publishing and deployment without requiring a combined docs build with `specfact-cli`. + +#### Scenario: Module-only docs change is published + +- **WHEN** a change affects only `specfact-cli-modules/docs` +- **THEN** the modules docs build and publication workflow can ship the change without rebuilding the core docs site +- **AND** the site metadata and navigation remain valid for the public docs topology. + diff --git a/openspec/specs/radon-runner/spec.md b/openspec/specs/radon-runner/spec.md new file mode 100644 index 0000000..1bd9fc6 --- /dev/null +++ b/openspec/specs/radon-runner/spec.md @@ -0,0 +1,45 @@ +# radon-runner Specification + +## Purpose +TBD - created by archiving change code-review-02-ruff-radon-runners. Update Purpose after archive. +## Requirements +### Requirement: Radon complexity maps to review findings +The bundle SHALL invoke `radon cc -j` for only the provided files and convert function +complexity above 12 into `ReviewFinding` records. + +#### Scenario: Complexity 13 produces a warning +- **GIVEN** Radon reports a function with complexity 13 +- **WHEN** `run_radon(files=[...])` is called +- **THEN** a `ReviewFinding` is returned with `severity="warning"` and + `category="clean_code"` + +#### Scenario: Complexity 16 produces an error +- **GIVEN** Radon reports a function with complexity 16 +- **WHEN** `run_radon(files=[...])` is called +- **THEN** a `ReviewFinding` is returned with `severity="error"` and + `category="clean_code"` + +#### Scenario: Complexity 12 or below produces no finding +- **GIVEN** all reported blocks have complexity 12 or below +- **WHEN** `run_radon(files=[...])` is called +- **THEN** no findings are returned + +#### Scenario: Findings are filtered to the provided file list +- **GIVEN** a file list containing one Python file +- **WHEN** mocked Radon output includes a second file +- **THEN** findings for the second file are excluded + +#### Scenario: Parse errors or missing Radon produce tool_error +- **GIVEN** Radon is unavailable or returns invalid JSON +- **WHEN** `run_radon(files=[...])` is called +- **THEN** exactly one `ReviewFinding` with `category="tool_error"` is returned + +### Requirement: Radon is available in the standard repo environment +The bundle SHALL declare the Radon executable in the default development environment +used by local and CI quality gates. + +#### Scenario: Repo quality environment can execute Radon +- **GIVEN** the standard repository development environment is created +- **WHEN** Radon-backed review tooling or tests run in that environment +- **THEN** the `radon` executable is available on `PATH` + diff --git a/openspec/specs/review-cli-contracts/spec.md b/openspec/specs/review-cli-contracts/spec.md new file mode 100644 index 0000000..f28ea81 --- /dev/null +++ b/openspec/specs/review-cli-contracts/spec.md @@ -0,0 +1,25 @@ +# review-cli-contracts Specification + +## Purpose +TBD - created by archiving change code-review-08-review-run-integration. Update Purpose after archive. +## Requirements +### Requirement: cli-val scenarios exist for review command groups +The modules repository SHALL define cli-val-compatible scenario YAML files for +the `specfact code review run`, `ledger`, and `rules` command groups, including +scope-mode and path-filter coverage for the review run command. + +#### Scenario: review-run scenarios cover success, scope selection, and error paths +- **GIVEN** `tests/cli-contracts/specfact-code-review-run.scenarios.yaml` +- **WHEN** it is validated +- **THEN** it includes success coverage, changed-only and full-review scope examples, subtree-filtered examples, and an error or anti-pattern scenario + +#### Scenario: ledger scenarios cover update, status, and reset guardrails +- **GIVEN** `tests/cli-contracts/specfact-code-review-ledger.scenarios.yaml` +- **WHEN** it is validated +- **THEN** it includes `update`, `status`, and reset guardrail coverage + +#### Scenario: rules scenarios cover init, show, and update +- **GIVEN** `tests/cli-contracts/specfact-code-review-rules.scenarios.yaml` +- **WHEN** it is validated +- **THEN** it includes the supported rules subcommands + diff --git a/openspec/specs/review-run-command/spec.md b/openspec/specs/review-run-command/spec.md new file mode 100644 index 0000000..3e9a75a --- /dev/null +++ b/openspec/specs/review-run-command/spec.md @@ -0,0 +1,69 @@ +# review-run-command Specification + +## Purpose +TBD - created by archiving change code-review-08-review-run-integration. Update Purpose after archive. +## Requirements +### Requirement: End-to-End `specfact code review run` in modules repo + +The `specfact-code-review` bundle SHALL provide a fully wired +`specfact code review run` command that orchestrates the existing tool runners +and emits a governed `ReviewReport` with correct exit codes. + +#### Scenario: Representative modules-repo source can be reviewed without command failure +- **GIVEN** a real Python source file from this repository +- **WHEN** `specfact code review run --json ` is executed in the modules repo +- **THEN** the command writes a `ReviewReport` JSON file +- **AND** the command does not fail because of command wiring, path handling, or tool invocation bugs in the bundle + +#### Scenario: JSON output uses file-based routing +- **GIVEN** `specfact code review run --json` +- **WHEN** the command executes successfully +- **THEN** it writes the governed `ReviewReport` JSON payload to a file path +- **AND** `--out` overrides the default JSON output path + +#### Scenario: Interactive runs ask whether to include test files +- **GIVEN** `specfact code review run` executes in interactive mode +- **WHEN** test-file inclusion has not been specified explicitly +- **THEN** the CLI asks whether test files should be included in the review scope +- **AND** the answer controls whether changed files under `tests/` are reviewed + +#### Scenario: Auto-detected review scope includes untracked Python files +- **GIVEN** Python files exist in the workspace that are not yet tracked by Git +- **WHEN** `specfact code review run` auto-detects review scope +- **THEN** those untracked Python files are included in review scope +- **AND** test-file inclusion rules still apply to untracked files under `tests/` + +#### Scenario: Known low-signal findings are suppressible by default +- **GIVEN** a review run includes test files or other paths that can emit + known low-signal findings +- **WHEN** noise suppression is enabled +- **THEN** the report omits those known low-signal findings +- **AND** a command option allows users to include the suppressed findings for a + strict/full review + +#### Scenario: Bundled skill instructs whether to include tests +- **GIVEN** the bundled `specfact-code-review` skill is installed +- **WHEN** it guides a review workflow +- **THEN** it instructs the reviewer to decide whether tests should be included + before running the review + +#### Scenario: Long-running review runs surface progress +- **GIVEN** a review run executes multiple tool steps that can take noticeable + time +- **WHEN** the command is running +- **THEN** the CLI shows which review step is currently executing +- **AND** progress feedback does not replace the primary stdout contract such as + the final JSON output path + +### Requirement: Developer runtime validation helper for local modules + +The modules repository SHALL provide a repo-local helper that prepares a live +module source tree for workspace runtime validation through `.specfact/modules` +without mutating the source package manifest. + +#### Scenario: Helper creates shadow module with unsigned manifest copy +- **GIVEN** a local module source under `packages/` +- **WHEN** the helper prepares a workspace shadow root +- **THEN** the shadow module directory contains symlinks to the live module content +- **AND** the shadow manifest omits integrity metadata so runtime validation can opt into unsigned local loading + diff --git a/openspec/specs/ruff-runner/spec.md b/openspec/specs/ruff-runner/spec.md new file mode 100644 index 0000000..3fd4e24 --- /dev/null +++ b/openspec/specs/ruff-runner/spec.md @@ -0,0 +1,39 @@ +# ruff-runner Specification + +## Purpose +TBD - created by archiving change code-review-02-ruff-radon-runners. Update Purpose after archive. +## Requirements +### Requirement: Ruff findings map to governed review categories +The bundle SHALL invoke `ruff check --output-format json` for only the provided files +and translate supported Ruff rules into `ReviewFinding` records. + +#### Scenario: Security rules map to the security category +- **GIVEN** Ruff reports a rule beginning with `S` +- **WHEN** `run_ruff(files=[...])` is called +- **THEN** the returned finding has `category="security"` and `tool="ruff"` + +#### Scenario: Complexity rules map to clean_code +- **GIVEN** Ruff reports rule `C901` +- **WHEN** `run_ruff(files=[...])` is called +- **THEN** the returned finding has `category="clean_code"` + +#### Scenario: Style rules map to style +- **GIVEN** Ruff reports a rule beginning with `E`, `F`, `I`, or `W` +- **WHEN** `run_ruff(files=[...])` is called +- **THEN** the returned finding has `category="style"` + +#### Scenario: Unsupported rule families are skipped +- **GIVEN** Ruff reports rules outside the supported `S*`, `C9*`, `E*`, `F*`, `I*`, and `W*` families +- **WHEN** `run_ruff(files=[...])` is called +- **THEN** those unsupported rules do not produce governed review findings + +#### Scenario: Findings are filtered to the provided file list +- **GIVEN** a file list containing one Python file +- **WHEN** mocked Ruff output includes findings for another file +- **THEN** only findings for the provided file are returned + +#### Scenario: Parse errors or missing Ruff produce tool_error +- **GIVEN** Ruff is unavailable or returns invalid JSON +- **WHEN** `run_ruff(files=[...])` is called +- **THEN** exactly one `ReviewFinding` with `category="tool_error"` is returned + diff --git a/openspec/specs/test-tdd-gate/spec.md b/openspec/specs/test-tdd-gate/spec.md new file mode 100644 index 0000000..47987f3 --- /dev/null +++ b/openspec/specs/test-tdd-gate/spec.md @@ -0,0 +1,59 @@ +# test-tdd-gate Specification + +## Purpose +TBD - created by archiving change code-review-04-contract-test-runners. Update Purpose after archive. +## Requirements +### Requirement: TDD Gate Enforcing Test File Existence and Coverage Threshold + +The system SHALL block the review if any changed bundle source file has no corresponding +test file, if the targeted tests fail, or if measured coverage is below 80%. + +#### Scenario: Changed bundle source file with no test file produces BLOCK + +- **GIVEN** a changed file + `packages/specfact-code-review/src/specfact_code_review/run/scorer.py` +- **AND** no corresponding file exists at + `tests/unit/specfact_code_review/run/test_scorer.py` +- **WHEN** the TDD gate runs +- **THEN** a `ReviewFinding` with `rule="TEST_FILE_MISSING"`, `severity="error"`, and + `category="testing"` is returned +- **AND** the overall verdict is forced to BLOCK + +#### Scenario: Passing tests with coverage at or above 80% produce no testing finding + +- **GIVEN** a changed bundle source file with a corresponding test file +- **AND** the targeted tests pass with 85% coverage +- **WHEN** the TDD gate runs +- **THEN** no testing finding is returned + +#### Scenario: Test failure produces BLOCK finding + +- **GIVEN** a changed bundle source file with a corresponding test file +- **AND** the targeted test run fails +- **WHEN** the TDD gate runs +- **THEN** a `ReviewFinding` with `severity="error"` and `category="testing"` is + returned + +#### Scenario: Coverage below 80% produces warning + +- **GIVEN** a changed bundle source file with a corresponding test file +- **AND** the targeted test run passes with 65% coverage +- **WHEN** the TDD gate runs +- **THEN** a `ReviewFinding` with `severity="warning"` and `category="testing"` is + returned + +#### Scenario: `no_tests` skips the TDD gate + +- **GIVEN** `no_tests=True` is passed to the review runner +- **WHEN** the runner executes +- **THEN** no TDD gate check is performed +- **AND** no testing findings are returned + +#### Scenario: Absolute reviewed source paths still map to the expected test file + +- **GIVEN** a changed bundle source file is provided as an absolute path +- **WHEN** the TDD gate derives the expected unit test location +- **THEN** it resolves the same `tests/unit/specfact_code_review/...` path as the + corresponding repo-relative source file +- **AND** missing tests and coverage enforcement still apply +