Why this codebase is the way it is.
Every decision, the alternatives that lost, and the reasoning — kept as the work happened, not written up afterwards.
35 settled
8 active
0 staged
2 open questions
Execution status is a join with kazi and is derived at read time, never stored. No kazi join is available here, so these are the ledger's own states.
int-an intent — a direction the work serves
dec-a decision, with the alternatives it ruled out
qst-an open question, which can block work
cst-a standing constraint
note-a thought not yet any of the other four
int-0001
The why of a decision survives the session that made it
3 settled1 in motion
cst-0001The session brief never exceeds 1,500 tokensactive
dec-0006Tiers are fractal — one entry model, one join rule, one drift flag, at every levelaccepted · to be planned
dec-0009ADRs are mirrored exhaust; the ledger entry is the recordaccepted · to be planned
dec-0017Long decisions use a summary/detail split; every refusal stays visible with its groundsaccepted · to be planned
int-0002
Zero-ceremony operation — one binary, no server, no daemon
9 settled1 in motion
cst-0004dira never requires a network service, an account, or a hosted tier to functionactive
dec-0001Go, not Elixir/OTP, despite kazi's stackaccepted · to be planned
dec-0002One file per entry, not an append-only JSONL ledgeraccepted · to be planned
dec-0003No model client in the binary — semantic extraction is delegated to the live sessionaccepted · to be planned
dec-0005A storage interface (local FS | GitHub API) is committed to before the first surface shipsaccepted · to be planned
dec-0012Surfaces are server-rendered Go templates and static output — no SPA, no dira-operated hostaccepted · to be planned
dec-0014Lexical matching in the binary drives conflict detection; no model, no agent, ever gates the exit codeaccepted · to be planned
dec-0016Self-host TeX Gyre Pagella; the system-font stack was silently broken on Linuxaccepted · to be planned
dec-0026The cold-start budget is a median, not a maximum; the single-run ceiling is droppedaccepted · to be planned
dec-0029The cold-start budget is measured on a spawned binary, asserted on the median, gated by the minimumaccepted · to be planned
int-0003
Replace the tool pile — kazi + dira + a subset of skills is the whole stack
3 settled1 in motion
cst-0002The entry set is closed at five kindsactive
dec-0004Execution status is derived from kazi at read time, never stored in the ledgeraccepted · to be planned
dec-0010A public read-only ledger renderer is the growth engine, and ships before the paid appsaccepted · to be planned
dec-0013The /sitrep skill is dira's validated query-surface spec, and its first replacement targetaccepted · to be planned
—
Not arising from an intent in this ledger
24 entries
cst-0003Inheritance is one-way and read-time only — private context never lands in a public ledgeractive
dec-0007OSS core free forever; individuals buy the apps once; teams subscribe; hosted never requiredaccepted · to be planned
dec-0008dira integrates with kazi only through kazi's existing --json contract and hooksblocked by a question
dec-0011Cross-boundary parent refs publish opaquely, and resolution reports three statesaccepted · to be planned
dec-0015The derived cache stays honest by content hash, not by modification timeaccepted · to be planned
dec-0018Withheld is a declared first-class state, marked in the instrument hueaccepted · to be planned
dec-0019The upheld option is the ruling, not an alternative — the renderer derives, never inventsaccepted · to be planned
dec-0020A "token" in brief.max_tokens is dira's own conservative estimate, not a model's tokenizeraccepted · to be planned
dec-0021The regex tier stages decisions only, and `alternatives` is required except when stagedaccepted · to be planned
dec-0022Confirming a regex-staged decision promotes it to the semantic tier; it does not accept itaccepted · to be planned
dec-0023The tier-2 handoff cannot ride PreCompact stdout, which reaches only the compaction summariseraccepted · to be planned
dec-0024`n` disposes of the capture, not the option; a decision against something is still a `y`accepted · to be planned
dec-0025Confirm writes `confirmed_by: human` and nothing else; the entry stays `staged` until extraction fills itaccepted · to be planned
dec-0027dira reads session metadata to derive attention drift, locally and never transmittedaccepted · to be planned
dec-0028Import measures a corpus before importing it, and offers indexing when the yield is nothingaccepted · to be planned
dec-0030Pin kazi's emitted portfolio/status contract now, instead of waiting on qst-0005accepted · to be planned
dec-0031Mirror kazi's Astro + GitHub Pages site architecture for dira.sire.runaccepted · to be planned
note-0001Two fidelity gaps found by running `dira why` against the real ledgeractive
qst-0001How does a public repo ledger resolve a parent ref that lives in a private ledger?answered
qst-0002Is attention drift derived from ledger writes only, or from session metadata?answered
qst-0003Does bulk-importing an existing ADR corpus produce a useful ledger, or a second pile?answered
qst-0004Is the name "dira" clear of collisions on the channels that matter?answered
qst-0005Will kazi accept the two upstream additions dira's seams still depend on?open
qst-0006The edge set has no way to say "narrows without replacing", so authors reach for supersedesopen
⚠ Drift
3 active intents have no parent. Work with no stated purpose is visible here by construction — int-0001, int-0002, int-0003 serve nothing recorded. Either link them upward, or ask why they exist.
This page wrote itself. Every entry was captured by a coding agent as the work happened — nobody typed it up afterwards, and nobody re-reads it: it comes back to you at the start of the next session, and argues if you contradict it.
Keep your own →