writeonce/docs/stories/board-views.md
shoney.arickathil 01df75245f docs(porch): give the framework its own story track, iterations 1-8
- 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>
2026-08-26 20:17:33 +02:00

101 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```