- Three new gate-wiring-law instances added to
design-principles.md, all caught by a lane's own step-10 adversarial review (the meta-loop catching real deadlocks before handover): (1) a STATE phase the engine prompts don't name silently deadlocks the phase-branching gates — reuse a known phase rather than patching three prompts; (2) a stored acceptance command must survive the agent's actual shell + interpreter — use absolute/usr/bin/grep, verify the test env runs before seeding a loop, defer real tests to CI; (3) tier findings + Opus-demote the over-called "clean" set before seeding a fix-loop (a naive "fix everything" loop thrashes on gated/stale/owner-only items). No new figures; red-line #6 intact.
- Doctrine (
design-principles.md§Gate-wiring law) +1 bullet — the worktree-gate deadlock. A single-phase lane whosetick.shprintsWAIT: worktree absentfor every task deadlocks theopstask that creates the worktree. Gate the worktree-existence check onready[0].kind in ('code','repair'), not a blanket phase check. Corollary: resolve every${…}/placeholder in CAP/RULES/KNOWLEDGE to anls-confirmed path before handover. No new figures; red-line #6 intact.
- Wiring A — composition. Generated harnesses now bind each loop ring to its matching
agent-skills:*skill (the deep, version-pinned playbook) instead of re-deriving a generic prompt. Newreferences/skill-rings.mdis the ring→skill map;design-principles.md§"The six loop components" gained the bind-don't-re-derive rule;doc-templates.mdHARNESS skeleton gained askillcolumn; SKILL.md step 6 + reading list updated. Two pack skills are near-twins of house doctrine and are bound, not duplicated:agent-skills:doubt-driven-development≈ blind Verify (failure mode #2) + Fable reasoning-eye;agent-skills:context-engineering= the authored form of the Memory ladder + Token discipline. Binding is an upgrade, never a hard dependency — absent pack →house-genericfallback. - Doctrine grounding. Addy's pack is now on disk (24 lifecycle SKILL.md files).
sources.mdgained a LOCAL VERIFIED CANON row for it (authored doctrine, not chatter). - No new figures entered doctrine; red-line #6 intact. Pack resolved by glob (hash dir changes per update), so version bumps don't break the wiring.
- New doctrine: "A stored guard command must survive a HOSTILE re-run shell — quote globs, guard the scan root, pin the token." The companion-bridge lane's own step-10 adversarial review caught three dead-guard variants in seeded
regressionChecks[]— all "looks live, never fires": (a) an unquoted--include=*.swiftglob that zsh'snomatchaborts (single-quote it); (b) a! grep -rEl … <dir>PHI-check that fails OPEN when the scan dir drifts/renames (grep finds nothing →!→ exit 0 = healthy) — fix with atest -d <dir> &&existence gate so it fails CLOSED; (c) a bare-wordgrep -qi 'consent'consent tripwire that greens on any stray comment — pin the load-bearing token (consentRequired). Added todesign-principles.md(gate-wiring-law family). The unifying rule: prove a ratchet goes RED when the property is actually violated, under the shell + paths a fresh agent will use, not just GREEN today. The review also caught a HIGH-severitytick.shbug shared with the template pattern:unblocked()filteredstatus=="pending"but never excluded ids already indone[], so the documenteddone[]-retire convention infinite-re-picked the same task — fixed in the lane withand t["id"] not in done. Step-12 meta-loop working as intended. No new figures (sources.mdunchanged;89/62remains absent).
- New doctrine: "Review-feedback loop — harvest the machine-actionable reviewer, but verify it, never blind-apply." Two lessons from running CodeRabbit on the lane's pushed PRs: (1) auto-reviewers emit machine-actionable payloads (committable
```suggestionblocks, literal "🤖 Prompt for AI Agents" fix-instructions, stable fingerprint ids, an "Actionable: N" count) a harness can pipeline as akind:'review-fix'tick —gh api …/pulls/<n>/comments, one comment per item, fed to an implementer; (2) the reviewer is just another model and must pass the same blind Verify+Guard as the maker — CodeRabbit raised a 🔴 Critical (web-query-sourced) that aninspect.signature+runtime check on the installed gradio 6.18 disproved; blind-applying its committable "fix" would have reintroduced the very regression the change fixed. Added todesign-principles.md(extends failure-mode #2, independent-verification, to the external reviewer). Distilled while the user asked the skill to "take advantage of" CodeRabbit's baked-in prompts — step-12 meta-loop. No new figures (sources.mdunchanged;89/62remains absent).
- New doctrine: "A stored guard command must be self-contained." A seeded
regressionChecks[]command (grep … "$DIR/packet") depended on a shell var defined only in the.mjs; re-run standalone by the preflight/verifier agents,$DIRwas unset → it scanned a nonexistent path → false-green every tick, silently voiding the lane's only no-secret-in-packet guarantee. Hardcoded to an absolute path; a planted-leak test proved it now fires. Added todesign-principles.md(gate-wiring-law family). Caught by the lane's own step-10 adversarial review — the meta-loop (step 12) working as intended. No new figures (sources.mdunchanged;89/62remains absent).
- New doctrine: "Route on an explicit structured field, never inferred free-text." A worktree/repo router built on
/regex/.test(name+spec)over-matched — tasks that merely cite another repo in their evidence got routed there to edit files that don't exist (or silently dropped half a cross-repo fix). Fix = explicit enum in the plan schema, set fromtask.surface; regex only as an absent-field fallback. Added todesign-principles.md(gate-wiring-law family). Caught by the lane's own step-10 adversarial review — the meta-loop (step 12) working as intended.
Theme: Akshay, "Your Agent Harness Should Repair Itself" (Opik), 2026-06-08 — ideas only, no tooling.
- Removed a fabricated statistic. The
89/62accuracy figure ("independent verification beats self-critique") was attributed to Lance Martin but is not in his article (6 of 7 secondary sources confirm; only explainx.ai produced it). Removed fromdesign-principles.mdandmjs-template.mjs. Replaced with the qualitative claim + the verified self-preference-bias figure (~10–25%, FutureAGI). Seesources.md. - Re-attributed "blind verifier" → "disjoint evidence / independent context window" (Thariq's actual terms).
- Labelled "DriftGuard" a house extension (not Thariq); named the real primitives
/goal+/loop. - Re-attributed the "doing the right work" quote to Thariq's Fable 5 commentary (06-09), not the harness post (06-02).
- Restored the "honest feedback" clause to the rubric quote; flagged the "Steve" attribution as unverified.
- Relabelled "cost concentrates in synthesizers/judges" as a house observation.
- Added
references/sources.mdas the anti-fabrication backstop (no figure enters doctrine unverified). - Fixed the step-10
.mjssyntax-check recipe: it must strip the leadingexport(sed 's/^export const/const/') before the async-wrappernode --check— theexport const metaline false-failed the documented command. Surfaced while running v2.0's own verification (the meta-loop, step 12, working as intended). - The build's own step-10 adversarial review (Opus, blind) caught that
newRegressionCheckwas wired through the schema + return but never populated by the verifier prompt — the ratchet would never grow (the v2.0 thesis was a no-op). Fixed: the verifier now re-runs the standing ratchet every tick and emitsnewRegressionCheckon a repair PASS;kind:'repair'added to the PLAN_SCHEMA enum; tick.sh given runnable Python for the breaker/deps/cycle guard; livelock on a permanently-red ratchet now escalates to a human. (The dog-food review doing its job.)
- M1 Regression Ratchet · M2 Circuit Breaker · M3 Pre-flight Health Check · M4 Failure-Driven Repair Entry · M5 Cross-Task DAG · M6 Sharpened Independent Verify · M7 Fail-Closed Default. See
self-repair.md.
- SKILL.md step 12 "Distill back" — verified lessons flow into
design-principles.md+sources.mdafter each authoring run.
- Canonical engine / tick / driver blocks centralized in references for copy-verbatim authoring.
The ios-accessibility lane's own step-10 adversarial review (6-agent, blind) caught two latent holes in the shared template/doctrine (not just that lane), fixed here so future harnesses inherit the fix:
- Guard fail-branch ignored its own
violations[].mjs-template.mjsonly ANDedpass/securityIssues/reasoningSound— a Guard recording a drift/scope/ship-gate/ratchet-tampering finding in the free-textviolations[]while leavingpass=truewould slip through. Added|| (guard.violations && guard.violations.length). New "Gate-wiring law" indesign-principles.md. - M1's "non-decreasing ratchet" was prose-only. The doctrine claimed "the
.mjsasserts length ≥ prior" but the.mjscan't fs-read state mid-tick. Replaced with aratchetHighwatermark (driver-persisted) + atick.shERROR ratchet shranktripwire + aratchetCountbaseline into the Guard. Updatedself-repair.mdM1. - Also distilled (design-principles): the driver must branch on every return shape + catch-all (agent-
died= transient resume;build failed= halt), and define$WT/$REPOonce in the driver doc.
No new figures entered doctrine (sources.md unchanged); the 89/62 figure remains absent (verified by the lane's own fresh-session reviewer).