- docs/stories/porch/ — a TRACK folder, not a status folder: status still
lives only in frontmatter. Adds `track: porch` so a query over
docs/stories/ can tell a porch 3 from a language 3
- 00-story.md carries the sequence, the dependency graph, and a table of
what the track explicitly does NOT own (binding -> 29, cache -> 18,
proxy -> 38, metrics -> 30, TLS/templates -> doctrine)
- eight iterations, each with phases, per-phase tasks, Given/When/Then
criteria, out-of-scope and the forks a spec must settle:
1 store-backed middleware (limiter + idempotency — needs nothing new,
first on purpose so the store pattern is proven cheaply)
2 randomness + cookies (phase A is language-track: a CSPRNG builtin;
`Resp.headers` being a map cannot emit two Set-Cookie lines)
3 sessions 4 CSRF 5 routing/response ergonomics (independent)
6 streaming core (the seam 7 and 8 wait on; chunked-request refusal
must survive) 7 SSE + compression 8 static + lifecycle hooks
- language iteration 39 -> status: hold, retitled superseded, with a row
mapping each of its goals to the porch iteration that took it. Kept, not
deleted: the Fiber study cites it and its randomness argument is what
this track is built on
- board gains a porch section; board-views gains porch and both-track
Dataview queries; porch README and the Fiber study §7 point at the track
- no code blocks in any story (plans carry concept and actions in words);
linkcheck 0 broken / 0 anchors
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
101 lines
3.2 KiB
Markdown
101 lines
3.2 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).
|
||
|
||
Two tracks now carry iterations, each numbered from 1:
|
||
`language-runtime-database/` (the language, runtime and database) and `porch/`
|
||
(the web framework, added 2026-08-26). Iteration ids therefore repeat across
|
||
tracks — a porch 3 is not a language 3 — so every query below is scoped by
|
||
`FROM` path, and porch stories carry `track: porch` so a combined query can
|
||
still tell them apart.
|
||
|
||
## 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 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
|
||
```
|