- 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>
111 lines
3.5 KiB
Markdown
111 lines
3.5 KiB
Markdown
# Live board views (Obsidian Dataview)
|
||
|
||
Every story iteration file carries YAML frontmatter — **the frontmatter
|
||
is the source of truth**:
|
||
|
||
```yaml
|
||
---
|
||
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`](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
|
||
|
||
```dataview
|
||
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)
|
||
|
||
```dataview
|
||
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
|
||
|
||
```dataview
|
||
TABLE iteration, status
|
||
FROM "docs/stories/language-runtime-database"
|
||
WHERE chain
|
||
SORT chain ASC
|
||
```
|
||
|
||
## Active right now
|
||
|
||
```dataview
|
||
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
|
||
|
||
```dataview
|
||
TABLE iteration, status, was_language_iteration AS "was"
|
||
FROM "docs/stories/databasev2"
|
||
WHERE status != "done"
|
||
SORT iteration ASC
|
||
```
|
||
|
||
## The porch track
|
||
|
||
```dataview
|
||
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.
|
||
|
||
```dataview
|
||
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
|
||
```
|