The week the project went quiet
Git tells the story bluntly: zero commits across all three Aros repos from June 3rd through June 9th. Sprints 0 through 4 had each closed in days; Sprint 5 sat open past its eleventh day with a maintenance backlog growing faster than it closed. The operator’s own framing — the project felt like a chore, not an exciting endeavour. On a one-human project that is not a mood, it is an outage. The response was not to push harder but to commission a failure analysis of the process itself, and the findings were specific enough to act on.
A velocity cliff with a precise edge
Every figure below is verifiable in git history or the doc corpus — the analysis refused vibes and demanded receipts.
June 3 → June 9, across all three repos
drafted 05-30, ratified 06-10 — the 48-hour rule says 2
0024–0030, designing three sprints ahead
the two days recapped in the companion piece
Stall, diagnosis, fix, proof
The analysis ran in the operator’s claude.ai sessions across all 30 ADRs, CLAUDE.md, the ai-context corpus, the build plan, PRD, and TAD. What follows is its trail.
- Jun 3–9
The stall
No commits in any repo. Sprint 5 open past day 11. The 5B maintenance ledger kept accumulating entries — several of them 300-to-500-word options analyses for fixes that took under an hour to make. The write-ups cost more than the fixes. Nothing in the process flagged any of this; the sprint had no timebox alarm, the backlog had no growth alarm, and the AI never said the quiet part: this refactor sprint is eleven days old. - Jun 8–10
The failure analysis
Commissioned across the full doc corpus. Findings with receipts: the velocity cliff (sprints 0–4 closed in roughly a week total; Sprint 5 alone exceeded that); disproportionate forensics on trivial items; the ADR burst (0024–0030 inside ~72 hours in late May, marked Accepted without a ratification trail, designing three sprints ahead of information); ADR-0031 — the one decision explicitly gated on the operator — sitting Proposed for 11 days while code shipped under it; and effort inversion, where AI thoroughness tracked available detail rather than stakes: 650 ADR lines for the inventory data model, 56 for the remediation engine that is the project’s stated end goal. - Jun 10
The fix, ratified
Sprint ceremony killed: no premature recaps, no forensic backlogs, no Proposed-status limbo, no multi-sprint pre-planning. The RUN replaces the sprint: one prompt, authored at the last responsible moment, carrying operator ratifications up front, strictly ordered priorities each with a DEMO and a ship-gate (merged, deployed to dev, verified before the next starts), overflow capped at 3-line ledger entries, SESSION.md one-liners as the record. Goal-backwards planning — single VM by tomorrow, templated cluster by Friday — not phase lists. ADR-0031 was ratified-as-amended inside the Run 1 prompt itself, closing its 11-day limbo. Working agreements 8 through 12 entered force the same day. - Jun 10–12
The proof
Run 1 (make the platform speak) and Run 2 (Aros deploys) executed as overnight autonomous sessions under the new format — Claude Fable 5 in Claude Code, a permissions allowlist replacing per-action approvals (about ten approvals total across both nights). The same project that produced zero commits in a week produced 141 contributions in two days, every priority ship-gated and live-verified. The full account is the companion recap, The Platform Speaks, Then Deploys. - Jun 12
The residual gap becomes agreement 13
The two-day recap, mined faithfully from repo receipts, was structurally blind to everything above — the stall, the audit, the format change — because none of it lived in the repo. Same gap, operationally: field lessons from a live R740XD session existed only in chat while an overnight hardware run was about to fire. The fix became the two-surface rule: decisions made in operator chat sessions are committed to the repo as artifacts BEFORE the next run fires. If it is not in the repo, the run cannot see it. The hardware vision doc, its field addenda, agreements 8–12 themselves, and this very page landed in the same pass.
Named, owned, and split honestly between human and machine
The analysis named failure modes on both sides of the keyboard. Cards below per house style — the troubleshooting is the load-bearing part.
Ceremony amplification: ADRs became free to write and expensive to read
Seven ADRs (0024–0030) produced inside roughly 72 hours in late May, designing three sprints ahead, all marked Accepted. Meanwhile trivial backlog items received forensic 500-word options analyses.
AI assistance inverted the cost asymmetry that makes ceremony self-limiting for humans: producing an ADR became nearly free, so production scaled with available detail rather than decision stakes — 650 lines for the inventory data model, 56 for the remediation engine the whole project aims at. Nobody noticed the inversion because the artifacts looked like diligence. And the statuses marked themselves: Accepted appeared without any ratification trail.
Working agreement 8: analysis depth scales with reversal cost — sub-30-minute fixes are done, not analysed; ADRs only for decisions costing more than a day to reverse. Agreement 9: backlog entries are 3 lines, max. Agreement 10: no ADR is Accepted without explicit in-session operator ratification, and Proposed ADRs do not authorise code.
ADR-0031: eleven days Proposed while code shipped under it
The one ADR explicitly gated on operator sign-off — Sprint 5 scope — sat Proposed from May 30th to June 10th while implementation proceeded as if it were settled. The build plan’s own decision rule allows 48 hours.
The gate had no alarm. Eleven days of violation were visible to anyone who looked at the status line, but looking was nobody’s job — the AI treated flagging process drift as out of scope, and the operator was the person the gate was waiting on.
Ratified-as-amended inside the Run 1 prompt (two scope cuts: session-pages-only, four contract tests), so ratification and dispatch became one artifact. Agreement 11 makes drift-flagging the AI’s job, unprompted, at session start: sprint past its timebox, backlog growing faster than closing, ratification pending past 48 hours.
The risk register had no line for the only existential risk
The build plan carried risk management for slipping sprints, failing hardware, and data loss — and nothing for the operator not wanting to open the project. Which is the only failure mode that actually kills a one-human project.
Operator-owned, by his own audit: he ran an unratified sprint, let pre-planning reach three sprints ahead of information, and never treated his own enthusiasm as a depletable, trackable resource. An eleven-day refactor sprint with no visible wins is exactly the shape that drains it.
Agreement 12: operator enthusiasm is a tracked resource — every session ends with something visible; two consecutive invisible sessions is a planning failure, not a scheduling accident. The run format enforces it structurally: every priority carries a DEMO, and the ship-gate means nothing sits 90% done and invisible.
Two surfaces, one light cone
The two-day recap was accurate and complete against every repo artifact — and silent on the most important Sprint 5 story, because the stall, the audit, and the ratifications happened in claude.ai sessions the repo never saw. The same week, ratified field constraints for the upcoming hardware run existed only in chat hours before that run was due to fire autonomously.
The project now runs on two collaboration surfaces: chat for thinking, scoping, and ratification; Claude Code for building. Only one of them is inside the repo’s light cone, and autonomous overnight runs read nothing else. Anything decided chat-side that does not become an artifact is invisible precisely when it matters most.
Agreement 13, the two-surface rule: chat-side decisions land in the repo as artifacts — ratification blocks, vision docs, prompt addenda — BEFORE the next run fires. Applied the same day it was ratified: the hardware platform vision doc, its live-session field addenda, working agreements 8–12 themselves (previously chat-side only), and this companion page all landed in one commit pass ahead of the overnight hardware run.
What a run actually is
Not a renamed sprint — a different unit of work with different physics. The two-day stretch recapped separately is the reference implementation.
Before and after, same project, nine days apart
The format change is the only variable. Model upgrade (Fable 5, released June 9) and permissions tuning are confounders worth naming — but neither writes a run prompt.
commits that day, like the 6 days before it
commits on 2026-06-11 across the three repos
agreements 8–13 in CLAUDE.md
premature recaps · forensic backlogs · status limbo · multi-sprint pre-planning