- docs/stories/databasev2/, numbered from 1. Six PENDING database iterations
moved from the language track and renumbered, keeping the old id in
`was_language_iteration:` so a search for "iteration 32" still finds it:
32 -> 3 WAL checkpoint, 23 -> 4 io_uring commit, 33 -> 7 single-file store,
27 -> 8 query grammar, 20 -> 9 cross-program, 21 -> 10 keypair auth.
Done work (9, 9b, 22) stays as v1 history; language 18 left whole
- the problem, read off the engine not guessed: rows are malloc'd slabs with
addresses stable forever, NO eviction/spill/paging anywhere in database/src,
the WAL never checkpoints so boot replays all history, and durability is one
process-global WO_DATA so no table can say it matters more than another.
An allocation failure IS a clean catchable WO_T_OOM — but swap thrash
arrives first and carries no error signal at all, which is the real hazard
- four new iterations:
1 measure the ceiling FIRST (curve not cliff; the three exits; kill -9 at
exhaustion) — every later default should follow from a number
2 `@table(mode: ram | durable | cold)` — the grammar ask. Small surface
(Ast.table_cfg gains a key, the parser already rejects unknown args), big
semantics: `durable` defaults so nothing changes silently, and the
compiler refuses a durable row holding a `ref` into a ram table
5 bounded tables + refuse/evict/back-pressure, shedding BEFORE the OS acts
6 cold tiering — mostly forks, incl. whether the language surfaces the
fault cost and whether @unique on cold is refused outright. A paged
B-tree stays rejected: if tiering needs one, reject tiering
- 39 links repointed, link TEXT renumbered to track-local ids; arc gains one
pointer row replacing the six moved; board + board-views cover three tracks
- linkcheck 0 broken / 0 anchors; no code blocks in any story
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.5 KiB
Live board views (Obsidian Dataview)
Every story iteration file carries YAML frontmatter — the frontmatter is the source of truth:
---
track: porch # OMITTED on language-runtime-database stories
iteration: "8" # immutable id, LOCAL TO ITS TRACK (string: "7b", "9b" exist)
status: in-progress # done | in-progress | refine | hold — the ONLY place status lives
chain: 1 # concurrency-chain position, chain stories only (1–6)
---
Editing status: IS the status change. Story files sit flat in
docs/stories/language-runtime-database/; no directory encodes state, so
there is nothing to move and nothing that can disagree. This replaced the
2026-08-20/21 folder scheme on 2026-08-26 — under that scheme a status
change moved the file, which broke every relative link in and to it, and
the repo's two link audits were largely the cleanup.
The closed set status: may take is done, in-progress, refine (needs
a brainstorm before it can be planned) and hold. A value outside it will
simply not appear in the lanes below, which is the cheapest possible
validation. The prose board (00-status.md) stays the
standup narrative; these queries are the live views over the same facts.
Adjust the FROM path to your vault root (queries below assume the
vault opens at the repo root).
Three tracks now carry iterations, each numbered from 1:
language-runtime-database/ (the language and runtime), porch/ (the web
framework) and databasev2/ (the database beyond RAM) — the latter two added
2026-08-26. Iteration ids therefore repeat across tracks, so every query below is
scoped by FROM path; non-language stories carry track:, and iterations moved
between tracks keep was_language_iteration: so the old number stays
searchable.
Everything not done, chain order first
TABLE iteration, status, chain
FROM "docs/stories/language-runtime-database"
WHERE status != "done"
SORT chain ASC, iteration ASC
Grouped by status (the kanban lanes, as data)
TABLE rows.file.link AS story, rows.iteration AS iteration
FROM "docs/stories/language-runtime-database"
WHERE status != "done"
GROUP BY status
The concurrency chain, in execution order
TABLE iteration, status
FROM "docs/stories/language-runtime-database"
WHERE chain
SORT chain ASC
Active right now
LIST
FROM "docs/stories/language-runtime-database"
WHERE status = "in-progress"
Kanban caveat
The Kanban plugin stores board state in its own markdown file — a
second copy of status. To keep frontmatter the single source of truth:
use Dataview for querying; treat any Kanban board as a VIEW, never
the place status is edited. A status change is one edit to one
status: key; a Kanban card drag that only rewrites the Kanban file is a
lie the next query won't see.
The databasev2 track
TABLE iteration, status, was_language_iteration AS "was"
FROM "docs/stories/databasev2"
WHERE status != "done"
SORT iteration ASC
The porch track
TABLE iteration, status
FROM "docs/stories/porch"
WHERE status != "done"
SORT iteration ASC
Both tracks at once, grouped
Relies on track: being present on porch stories and absent on language ones,
so the language track shows up under an empty group.
TABLE rows.file.link AS story, rows.iteration AS iteration, rows.status AS status
FROM "docs/stories"
WHERE iteration AND status != "done"
GROUP BY track