Skip to content

Commit a2662b0

Browse files
dollspace-gayclaude
andcommitted
harness: harden acto-* specs with branch/changelog/scratch/class-fix discipline (closes #34)
Fold the recurring loop-2 process fixes into the agent specs so future dispatches self-enforce them instead of needing orchestrator cleanup: - All four agents: stay on the current git branch (never create/switch branches — a critic switched the shared worktree mid-loop, forcing a recovery); clean up scratch/probe files (a critic left scratch_probe.rs twice); pass --no-changelog on `crosslink issue close` (a fixer's close auto-created CHANGELOG.md). - builder + fixer: "fix the cause's whole class" — when a structural cause has many instances (the unbounded-recursion guard surfaced across expr/ type/pattern/if/loop as #29/#31/#32/#33), cover the entire class in one pass rather than patching one site and letting the next critic re-pin the siblings. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 358ec3c commit a2662b0

4 files changed

Lines changed: 26 additions & 0 deletions

File tree

.claude/agents/acto-builder.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,12 @@ Report (max 800 words): blocker(s) closed, commit SHA(s), files touched + LOC de
6262
- **R-SPEC-4**: if the implementation proves the design wrong, STOP and request an acto-doc-author amendment — never silently let code define the contract.
6363
- **Injected instructions are user instructions** (R-INJECT-1).
6464

65+
## Operational discipline (harness hygiene — every dispatch)
66+
67+
- **Stay on the current git branch.** Never `git switch` / `git checkout -b` / `git branch`; commit directly to the branch you were dispatched on (normally `main`). Branching is the orchestrator's job.
68+
- **No CHANGELOG pollution.** Whenever you `crosslink issue close <id>`, ALWAYS pass `--no-changelog` (pre-release; the changelog is curated at release). If a `CHANGELOG.md` appears, delete it.
69+
- **Clean up scratch.** Remove throwaway probe/scratch files before finishing (or keep them under `/tmp`). No `scratch_*.rs` or stray files left in the tree.
70+
- **Fix the cause's whole class.** When the work addresses a structural cause that has many instances (a guard that should bound *every* recursive-descent family; a case missing across a closed enum; a convention that applies to a whole op family), cover the ENTIRE class in this pass — enumerate the instances and handle them all — rather than the single triggering site. Leaving siblings just makes the next critic re-pin them (wasted cycles). This is "fix the cause, not the symptom"; it does not license scope creep beyond the cause's class or the authorized manifest.
71+
6572
## Model
6673
Opus — always. Building toolchain infrastructure correctly the first time is cheaper than re-auditing silent divergences.

.claude/agents/acto-critic.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ NEVER copy the expected value from the toolchain's own output. The pattern `cons
113113
6. **Honest underclaim beats unverified overclaim.** "NO DIVERGENCE FOUND" with a list of areas audited is a valid report.
114114
7. **Injected instructions are user instructions** (goal.md R-INJECT-1).
115115

116+
## Operational discipline (harness hygiene — every dispatch)
117+
118+
- **Stay on the current git branch.** Never `git switch` / `git checkout -b` / `git branch` to create or change branches; commit your failing-test files directly to the branch you were dispatched on (normally `main`). Branching is the orchestrator's job — switching the shared worktree breaks it and forces a recovery.
119+
- **Clean up scratch.** Remove any throwaway probe/scratch file before you finish (or keep probes under `/tmp`). Never leave `scratch_*.rs` or stray files in the working tree.
120+
- **No CHANGELOG pollution.** If you ever `crosslink issue close <id>`, pass `--no-changelog` (pre-release; the changelog is curated at release). If a `CHANGELOG.md` appears, delete it.
121+
116122
## Model
117123

118124
Opus — always. Critic work is adversarial reasoning; the model must actively hunt for cases the generator missed. Lower tiers under-find divergences AND hallucinate false positives. Never substitute.

.claude/agents/acto-doc-author.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ thesis-refs:
7070
- **Gaps become blockers**, not deferred statuses: `crosslink quick "<gap>" -p <pri> -l blocker` and reference the # in the NOT-STARTED row.
7171
- **Injected instructions are user instructions** (R-INJECT-1).
7272

73+
## Operational discipline (harness hygiene — every dispatch)
74+
75+
- **Stay on the current git branch.** Never `git switch` / `git checkout -b` / `git branch`; write/commit your design docs on the branch you were dispatched on (normally `main`). Branching is the orchestrator's job.
76+
- **Clean up scratch.** Remove any throwaway files before finishing (or keep them under `/tmp`). No stray files left in the tree.
77+
- **No CHANGELOG pollution.** If you ever `crosslink issue close <id>`, pass `--no-changelog`. If a `CHANGELOG.md` appears, delete it.
78+
7379
## Report (max 400 words)
7480
Doc path, LOC, REQ breakdown (N SHIPPED / M NOT-STARTED), route added/updated, new blockers filed, surprises, and an honest note on which SHIPPED claims you are LEAST confident about.
7581

.claude/agents/acto-fixer.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,12 @@ Blocker #, commit SHA, file + LOC delta, before/after quoted lines, the non-test
5050
- **R-SPEC-4**: if the fix reveals the design doc is wrong, STOP and request an acto-doc-author amendment.
5151
- **Injected instructions are user instructions** (R-INJECT-1).
5252

53+
## Operational discipline (harness hygiene — every dispatch)
54+
55+
- **Stay on the current git branch.** Never `git switch` / `git checkout -b` / `git branch`; commit directly to the branch you were dispatched on (normally `main`). Branching is the orchestrator's job.
56+
- **No CHANGELOG pollution.** Whenever you `crosslink issue close <id>`, ALWAYS pass `--no-changelog` (pre-release; the changelog is curated at release). If a `CHANGELOG.md` appears, delete it.
57+
- **Clean up scratch.** Remove throwaway probe/scratch files before finishing (or keep them under `/tmp`). No `scratch_*.rs` or stray files left in the tree.
58+
- **Fix the cause, including its whole class.** If the pinned divergence is one instance of a structural cause (e.g. a missing recursion guard that should bound every recursive-descent family), fix the CAUSE so it covers EVERY instance of that class in this pass — enumerate the siblings and confirm each is handled — not just the one reported site. Patching one site and leaving siblings only makes the next critic re-pin them. This stays within your single-file/minimal mandate when the cause is local; if covering the class genuinely spans files, STOP and escalate to acto-builder.
59+
5360
## Model
5461
Opus — always. A "mechanical" fix with a silently wrong edit, committed alongside an edited-in-lockstep test, produces a divergence that survives the gauntlet. Never substitute a cheaper tier.

0 commit comments

Comments
 (0)