From 922a1a0771a95563770aaf1792cf719035a420d4 Mon Sep 17 00:00:00 2001 From: Alexander Ivanov Date: Fri, 11 Sep 2026 19:53:18 +0300 Subject: [PATCH] Archive a-declared-blocker-blocks The delegated item closed with two real terminal runs: the blocked change was refused at exit 2 with .openspec-ui/ not existing at all afterwards, and the same command reached verify and exited 0 once the blocker had been archived, with nothing else changed. Three requirements merge into openspec/specs/agentic-harness, and openspec validate --all passes over 16 items. This empties the change queue; the core suite is green in that state at 1068 tests. Co-Authored-By: Claude Opus 5 (1M context) --- .../.openspec.yaml | 0 .../design.md | 0 .../proposal.md | 0 .../specs/agentic-harness/spec.md | 0 .../tasks.md | 0 openspec/specs/agentic-harness/spec.md | 66 +++++++++++++++++++ 6 files changed, 66 insertions(+) rename openspec/changes/{a-declared-blocker-blocks => archive/2026-09-11-a-declared-blocker-blocks}/.openspec.yaml (100%) rename openspec/changes/{a-declared-blocker-blocks => archive/2026-09-11-a-declared-blocker-blocks}/design.md (100%) rename openspec/changes/{a-declared-blocker-blocks => archive/2026-09-11-a-declared-blocker-blocks}/proposal.md (100%) rename openspec/changes/{a-declared-blocker-blocks => archive/2026-09-11-a-declared-blocker-blocks}/specs/agentic-harness/spec.md (100%) rename openspec/changes/{a-declared-blocker-blocks => archive/2026-09-11-a-declared-blocker-blocks}/tasks.md (100%) diff --git a/openspec/changes/a-declared-blocker-blocks/.openspec.yaml b/openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/.openspec.yaml similarity index 100% rename from openspec/changes/a-declared-blocker-blocks/.openspec.yaml rename to openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/.openspec.yaml diff --git a/openspec/changes/a-declared-blocker-blocks/design.md b/openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/design.md similarity index 100% rename from openspec/changes/a-declared-blocker-blocks/design.md rename to openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/design.md diff --git a/openspec/changes/a-declared-blocker-blocks/proposal.md b/openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/proposal.md similarity index 100% rename from openspec/changes/a-declared-blocker-blocks/proposal.md rename to openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/proposal.md diff --git a/openspec/changes/a-declared-blocker-blocks/specs/agentic-harness/spec.md b/openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/specs/agentic-harness/spec.md similarity index 100% rename from openspec/changes/a-declared-blocker-blocks/specs/agentic-harness/spec.md rename to openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/specs/agentic-harness/spec.md diff --git a/openspec/changes/a-declared-blocker-blocks/tasks.md b/openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/tasks.md similarity index 100% rename from openspec/changes/a-declared-blocker-blocks/tasks.md rename to openspec/changes/archive/2026-09-11-a-declared-blocker-blocks/tasks.md diff --git a/openspec/specs/agentic-harness/spec.md b/openspec/specs/agentic-harness/spec.md index cc3b0f14..050fbbf0 100644 --- a/openspec/specs/agentic-harness/spec.md +++ b/openspec/specs/agentic-harness/spec.md @@ -2741,3 +2741,69 @@ check. It may legitimately not exist yet — that is what the wait is for. - **WHEN** a step names a change that does not exist in the workspace - **THEN** the run is not refused for that reason +### Requirement: A chain does not start for a change its own declaration holds + +Where a change declares that it is blocked by another change, and that +other change is still active, a chain for it SHALL be refused before its +first stage. + +The refusal SHALL name the blocker. The remedy is not a setting: it is +to land that change or to remove the declaration, and the message SHALL +say which change is being waited for so either can be done. + +A blocker that has been archived SHALL NOT hold anything. That is what +the declaration has always meant. + +A declaration naming a change that does not exist SHALL NOT hold +anything either. That is a fault in the declaration, reported as one by +the check that validates relations, and holding the run on it would hide +the fault behind a refusal that reads as a schedule. + +#### Scenario: A blocker that has not landed + +- **WHEN** a chain is requested for a change declaring a blocker that is + still an active change +- **THEN** the run is refused before the first stage, naming the blocker, + and no agent was invoked + +#### Scenario: A blocker that has landed + +- **WHEN** the declared blocker has been archived +- **THEN** the run starts + +#### Scenario: A declaration naming nothing that exists + +- **WHEN** a change declares a blocker that is not a change of this + repository +- **THEN** the run is not refused for that reason + +### Requirement: A declared blocker is not a validation failure + +A change that declares an unmet blocker SHALL remain valid. + +The declaration states a plan, and a plan not yet carried out is not a +defect. Whether the repository validates and whether a run may start now +are different questions, and only the second one is answered by the +declaration. + +#### Scenario: Validating a repository holding a blocked change + +- **WHEN** the relations of a repository containing a change with an + unmet blocker are checked +- **THEN** that change is not reported as invalid + +### Requirement: A blocked change cannot be started by asking differently + +There SHALL be no option that starts a chain for a change whose declared +blocker has not landed. + +The declaration is a sentence its author wrote in a file under version +control. An option to override it would move that decision out of the +repository and into an invocation nobody reviews. + +#### Scenario: Asking again + +- **WHEN** a chain for a blocked change is requested in any way this + system offers +- **THEN** it is refused +