the ledger · 71 / 136

Evidence

Every time something breaks I write a line into an append-only ledger. Writing it down is cheap and close to useless. A line is only worth something once a file carries it and changes what happens today: a rule that loads every session, a skill’s Known failures section, or a check that runs. The Cited by column in the table below is where I check that, and it is also where the ledger turns around and accuses me.

I wrote that line in my own release notes, and I put it at the top of this page rather than the bottom. The table proves one thing: every rule here came from something that actually broke, and one click takes you to the file. It does not prove the other thing, that the loop holds up when real work goes through it.

Every check in this package now proves the tooling is correct. Nothing in it proves the loop works.
RELEASE-NOTES.md:393 ↗

Every ledger line links to a file you can check.

Every time something breaks, I write a line into the ledger. Writing it down is cheap and close to useless. A line is only worth something once it is bound to a file that makes someone act differently today: an always-on rule, a Known failures section in a skill, or a check that runs.

The table has a column stating which lines are bound and which are not. 71 of 136 have a file carrying them. The other 65 point nowhere yet. I keep the unbound part in the table instead of filtering it out, because a ledger that only shows the finished half cannot be used to check yourself. Click a row with an arrow and it takes you to the file, with no command to run.

This loop has never run all the way through on live work.

I wrote that line in my own release notes, and I pulled it up here because at the bottom of a page it reads as modesty for show.

It draws one boundary precisely: proving the tooling is correct and proving the loop is correct are two different claims, and I have only done the first. No ticket has gone from dispatch to merge with the gates firing on live work inside this repo. The six lessons you just read were measured downstream or while building this, not inside one closed loop.

I am leaving that gap open. If you install this and it breaks somewhere I have not measured, that is data I do not have.

The whole table

136 / 136 rows shown

IDLessonStatusCited by
AST-002A prose link does not guarantee loadpromoted
AST-003No lessons ledger existedpromoted
AST-004Process decisions routed to ADRspromoted
AST-005Entry-doc rewrite silently dropped unique contentpromoted
AST-006fork delegation inherited Opus, ignored the model ladderpromoted
AST-007Long-lived branch + oversized PR outran the gatepromoted
AST-008Docs cited a retired skill collectionpromoted
AST-009No UI-prototype phase before Buildpromoted
AST-010Worktree delegation hygiene undocumentedpromoted
AST-013Ad-hoc build delegation; false tooling-gap assumedsuperseded
AST-014Multi-slice rebuild needs a gated integration branchpromoted
AST-017Per-package typecheck missed a cross-package breakpromoted
AST-018Dispatch emitted as text, never executed; no liveness signalpromoted
AST-019Implementer subagent retired; independence moved to the PRpromoted
AST-020Plugin review commands invisible → rescue used as review; raw exec hungpromoted
AST-021Gate workflows blocked on owner presencepromoted
AST-022A filesystem-only tool was invisible to agentspromoted
AST-023"Main session builds directly" conflated two mechanismspromoted
AST-025Gate-able conventions parked in the always-on rule tier tax every loopproposed
AST-026Named-persona harness: Thomas / Dan / Rinpromoted
AST-029Slice finished but Dan tabs survived; /clear blurred context and checkout lifecyclepromoted
AST-034A mandatory rule that lives only in load-on-demand docs is skipped, and only the owner noticespromoted
AST-035set -euo pipefail plus a no-match grep aborts before its own guardpromoted
AST-039An ID namespace shared with the host project resolves confidently to the wrong lessonpromoted
AST-040A placeholder that looks like a real id fails later than a missing onepromoted
AST-042Two skills answering to one name means the model-invoked path picks the wrong onepromoted
AST-043A gate that requires an artifact no contract producespromoted
AST-044Reading a diff cannot find a disagreement between two screenspromoted
AST-046A block moved between documents keeps the old document's referentspromoted
AST-048A rule not present where it must be remembered does not existpromoted
AST-049Checks 1–4 asked whether things were consistent, never whether a role could STARTpromoted
AST-053An axis read the run's verdict instead of its own, and went mutepromoted
AST-058The check after the step reported clean when the step was impossiblepromoted
AST-059The repo kept one self-check and lost the other to a directory it may ignorepromoted
AST-060Check 3 printed green about the skills it had not openedpromoted
AST-061The arm batched to phase end built a payload only skimming could finishpromoted
AST-062A second pass left to judgement is a second pass that does not runpromoted
AST-063A gate with no window in the sequence never fires, and nobody forgets itpromoted
AST-064The one always-on file no release can repair had no budgetpromoted
AST-065Two reviewers sharing one name, each in the other's contractpromoted
AST-066A review bound to the wrong checkout returns clean without reading anythingpromoted
AST-068A lesson closed at instance level reopens at class levelpromoted
AST-073A global script is only shared if something keeps it updatedpromoted
AST-075Neither the process table nor the PID file nor CPU time proves a loop is alivepromoted
AST-077Identity by substring match let stop sign a kill order for an unrelated processpromoted
AST-078flock-plus-holder watched only one directionpromoted
AST-079the reaper that closes AST-078 exits silently, and the lock changed type across a version bou…promoted
AST-080check-requirements.sh's payload check was tracked-not-currentpromoted
AST-081ticket-git-facts.sh's oracle was case-sensitive where the rest of it wasn'tpromoted
AST-083the arm's own forbidden-character list was incomplete, and missed exactly the failure it exis…promoted
AST-086the payload checker's own scope list was already stale, including for itselfpromoted
AST-087the same-day orchestrator margin fix was not applied to the role budgets it sits besidepromoted
AST-088the fix for a stale hardcoded list wrote a new hardcoded assumption beside itpromoted
AST-091install.sh overwrites PROJECT_NAME on re-staging without --project-namepromoted
AST-093A fix landing in .agents/skills/ but not .claude/skills/ is unreachable on the runtime that l…promoted
AST-104herdr agent start rejects uppercase in agent names, but dispatch convention generates thempromoted
AST-108A Monitor with no timeout_ms caps an hour-long watch at five minutespromoted
AST-109Cleanup command aimed at the worktree root, where the target has never livedpromoted
AST-111A check that validates the rows it finds never notices the row that is missingpromoted
AST-114Splitting submission into two steps left the watch armed against the wrong onepromoted
AST-117A worktree isolates git, not a tool that writes to a fixed pathpromoted
AST-120A verification that fired twice on immutable input and disagreed with itself, cause unknownpromoted
AST-127The runnable example contradicted the prose eight lines below itpromoted
AST-128Only the adapter is ever standing where both files existpromoted
AST-129The receipt was a producer with no reader, and it hid the one fact that had readerspromoted

65 rows bound to nothing

71 of 136 lines have at least one file carrying them. The other 65 point nowhere yet. They are observations I recorded that never became anything binding.

I keep them in the table instead of filtering them out, and I am not planning to tidy the number up. A ledger that only shows the closed half cannot be used to check yourself; at that point it is a sales document. The orphaned half is also the most honest reading of where this system is still thin: wherever the unbound lines cluster is where I have watched a problem without fixing it. You see exactly what I see when I open that file.

The last 20 commits carrying a Ledger: line

  1. 544aea22026-09-09site: task, feature, requirement in boldnone.
  2. 9bfaa0e2026-09-09site: say what a ticket is before dispatching onenone.
  3. 01f5bef2026-09-09site: English team caption matchesnone.
  4. fb08dbc2026-09-09site: team picture caption from the client's seatnone.
  5. 01b3a052026-09-09site: English pane label matchesnone.
  6. 267c39b2026-09-09site: command pane label reads "Start agent qua CLI"none.
  7. f9737882026-09-08site: show the orchestrator table verbatimnone.
  8. 483d49d2026-09-08site: roles carry their model and effort, and say the owner can change themnone.
  9. da237cf2026-09-08site: design docs follow the single framenone.
  10. c072e532026-09-08site: one island width, Home in the navnone.
  11. 9e2f31d2026-09-08site: 404 chrome follows the address languagenone.
  12. c835b282026-09-08site: one nav geometry on every pagenone.
  13. 25f2bcf2026-09-08site: Vietnamese for developers, IT terms kept in Englishnone.
  14. cb6c5b62026-09-08site: discovery order, comms around dispatch, photo placeholdersnone.
  15. 40c0a3b2026-09-08site: brand and tool names in boldnone.
  16. 037f2822026-09-08site: launch commands show where effort goes per runtimenone.
  17. a93788f2026-09-08site: five explaining sections under the heronone.
  18. 33ad7912026-09-07site: onward links in one professional formnone.
  19. c99e7602026-09-07site: highlight the positioning phrases, bold the tool namesnone.
  20. 9473e5a2026-09-07site: requirements and install as two sectionsnone.