Files
platform/todo/README.md
T
pastilhasandClaude Fable 5 6071ded175 todo: one file per item, grouped by theme, with a generated index
TODO.md had reached 1050 lines and 72 open items across 28 sections, read mostly
on a phone. It is now a directory: todo/<theme>/<item>.md, one card per file, with
frontmatter carrying id, status, created date and order, and the prose body copied
across verbatim. TODO.md becomes a generated index (bun run todo:index).

Dates: where an item's prose stated one it is used; otherwise its old section's;
otherwise 2026-08-20, floored at the day before the split rather than invented.
date_source records which.

Shaped for a two-way Kanban board, filed as todo/tooling — a card is a file, id is
the identity, frontmatter is the machine's half and the body is the owner's.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 05:42:39 +00:00

67 lines
3.1 KiB
Markdown

# `todo/` — the format
One item per file. A file is a card. That is the whole idea, and everything below follows from it.
It replaced a single 1,050-line `TODO.md` on 2026-08-21, which had reached 72 open items across 28
sections and was read mostly on a phone. The split was mechanical — no prose was rewritten.
## Layout
```
todo/
├── README.md # this file
├── <theme>/
│ ├── _index.md # the theme itself: display name, and any prose that belongs to the whole group
│ └── <item>.md # one item
```
The theme is the directory. `_index.md` carries the theme's display heading, so a theme is
self-describing and nothing has to hold a slug→name map. `TODO.md` at the repository root is the
generated index over all of it — `bun run todo:index`.
## An item
```markdown
---
id: fleet/an-orchestrator-that-acts-on-every-server-at
title: 'An orchestrator that acts on every server at once'
theme: fleet
status: open
created: 2026-08-21
date_source: stated
order: 1
---
**An orchestrator that acts on every server at once** — pull and update every platform, restart a
process everywhere, report which host is behind…
```
- **`id`** — `<theme>/<slug>`, and it is the filename. Stable: rename the title freely, leave the id
alone. Anything pointing at an item points at this.
- **`status`** — `open` or `done` today. The board will want more (`doing`, `blocked`); adding one is a
new value here, not a new file or a new directory.
- **`created`** — the date the item was raised. **`date_source`** says how much to trust it:
`stated` (the prose named a date — true), `section` (inherited from its old section heading — close),
`assumed` (unknown, floored at 2026-08-20, the day before the split — a bounded "before today"
rather than an invented day).
- **`order`** — position within the theme, preserved from the original list. What a board reorders.
- **The body is prose, and it is the point.** These entries carry the reasoning, what was verified
versus assumed, and what was already tried. An item stripped to a title loses the thing that made
this list worth keeping.
## Two-way sync — the contract for the Kanban board
A board that reads this tree and writes back to it is a wanted feature
(`todo/prompt-library/`… see `todo/tooling/`). What it may rely on:
- **A card is a file.** Creating a card creates a file; moving a card between columns rewrites one
frontmatter field; deleting a card deletes a file. Every board action is a small, reviewable git diff.
- **`id` is the identity, not the title and not the line number.** Renaming or rewording never orphans a
card.
- **Frontmatter is the machine's half, the body is the human's half.** A board may rewrite frontmatter
freely. It must not reformat a body it did not change — the prose is hand-written and a normalising
pass would produce a diff nobody can read.
- **`TODO.md` is generated output.** A board must never write to it; it regenerates from the tree.
- **Git is the sync log.** No lock file and no sidecar state: the file on disk is the truth, and two
writers are resolved the way every other conflict in this repository is.