Close mechanical-checks 6.3, and document how a chain moves and the git stage is driven - #182
Merged
VeryComplexAndLongName merged 2 commits intoSep 2, 2026
Conversation
… tree The parser change was the one thing in that change whose blast radius is every tasks.md in the repository, and the five tests for the new syntax all ran over fixtures. This reads openspec/changes/*/tasks.md from disk, compares readTaskChecklist's item count against an independent count of checkbox lines for each, and asserts none of them already carries the new declaration - which a raw-text search could not do, since this change's own tasks.md describes the syntax in prose. Written by the session that implemented the change; committed here so the working tree can return to main. Three files it also touched are left out: gh-pr-gateway.test.ts, git.push.test.ts and harness-chain-runner.ts differed only in indentation, an editor reformatting on save, and `git diff -w` shows them as empty. Committing 358 lines of whitespace would bury the next real change to those files. There is no .editorconfig here, which is why the editor had nothing to follow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three additions to agentic-harness-documentation, from questions asked of the proposal. Where a chain starts, and what a user can steer. A chain does not always begin at propose: determineStartStage reads the change's own artifacts and task counts and enters at the first stage with work left, so running a chain twice resumes rather than repeats. When progress cannot be determined it enters at apply, deliberately - a redundant apply costs one run, a wrong archive costs an unimplemented change. Going back is a different mechanism, and the document has to say so rather than imply it. A chain runs forward only; there is no control that steps a running one back. Re-running an earlier stage means running that stage on its own, through the panel's per-stage commands, which go through RunController and are independent of any chain. A checkpoint offers confirm or cancel, not redo. Switching to another change while one is running is the question with the least obvious answer, so it gets its own task. The scheduler holds a single mutationLocked flag for the whole workspace, so a second mutating run enqueues rather than starting, and ADR 0010's lease extends that to a second editor or host on the same workspace. Non-mutating runs are not blocked, which is the difference between a stuck UI and a working queue. The git stage gets a section of its own: what it does, that it runs only under a per-change reviewGate.mode of agent-sufficient and that the default ends the chain cleanly after archive, the per-change allowlist, the prerequisite that gh is on PATH and already authenticated, and that every action is audited including blocked ones. The check gate is stated as what it is - the merge waits, refuses a pull request whose checks have not passed, treats an absent or all-skipped result as refusal, and cannot be configured off. That section describes a stage nothing here has run end to end. agentic-harness-git-stage task 4.4 is still open, and three of the four defects found in review sat precisely behind it. So the section says so to the reader, and a verification task requires every sentence in it to be traceable to runGitStage, gh-pr-gateway.ts or ADR 0014 rather than to how such a stage would reasonably behave. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
VeryComplexAndLongName
deleted the
fix/mechanical-checks-real-tree-test
branch
September 2, 2026 16:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two commits: the last open task of
harness-mechanical-checks, and three additions to theagentic-harness-documentationproposal.harness-mechanical-checks6.3 — 31/31The parser change was the one thing in that change whose blast radius is every
tasks.mdin the repository, and the five tests for the new syntax all ran over fixtures. This one readsopenspec/changes/*/tasks.mdfrom disk, comparesreadTaskChecklist's item count against an independent count of checkbox lines for each, and asserts none of them already carries the new declaration — which a raw-text search could not do, since that change's owntasks.mddescribes the syntax in prose.Written by the session that implemented the change; committed here so the working tree could return to
main.Three files it also touched are left out.
gh-pr-gateway.test.ts,git.push.test.tsandharness-chain-runner.tsdiffered only in indentation — an editor reformatting on save — andgit diff -wshows all three as empty. Committing 358 lines of whitespace would bury the next real change to those files. There is no.editorconfigin the repository, which is why the editor had nothing to follow; worth adding separately.Documentation proposal — three additions
Where a chain starts, and what a user can steer
A chain does not always begin at
propose.determineStartStagereads the change's own artifacts and task counts and enters at the first stage with work left, so running a chain twice resumes. When progress cannot be determined it enters atapply, deliberately — a redundantapplycosts one run, a wrongarchivecosts an unimplemented change.Going back is a different mechanism, and the document has to say so rather than imply it:
Re-running an earlier stage means running that stage on its own — the panel's per-stage commands go through
RunController, not through the chain. A checkpoint offers confirm or cancel, not redo.Switching to another change while one runs
The question with the least obvious answer, so it gets its own task.
WorkbenchProcessSchedulerholds a singlemutationLockedflag for the whole workspace, so a second mutating run enqueues rather than starting, and ADR 0010's lease extends that to a second editor or host on the same workspace. Non-mutating runs (status, list, show, validate) are not blocked — which is the difference between a stuck UI and a working queue.The
gitstageIts own section: what it does, that it runs only under a per-change
reviewGate.mode: "agent-sufficient"and that the default ends the chain cleanly afterarchive, the per-change allowlist, the prerequisite thatghis onPATHand already authenticated, and that every action is audited including blocked ones.The check gate stated as what it is: the merge waits, refuses a pull request whose checks have not passed, treats an absent or all-skipped result as refusal, and cannot be configured off.
That section describes a stage nothing here has run end to end.
agentic-harness-git-stagetask 4.4 is still open, and three of the four defects found in review sat precisely behind it. So the section says so to the reader (2B.7), and a verification task (6.8) requires every sentence in it to be traceable torunGitStage,gh-pr-gateway.tsor ADR 0014 — not to how such a stage would reasonably behave.Test plan
task-checklist.test.ts— 17/17, including the new real-tree blockopenspec change validate --strict agentic-harness-documentation— validnpm run lint:english— passedgit diff -w🤖 Generated with Claude Code