# U2 (marks) landed — one primitive for three mechanisms _2026-09-21 · booth_ **U2 (marks) landed.** One primitive replacing three mechanisms. `pick` / `note` / `flag` in one `.marks.json` per booth, one read path (`marks_for`), one openness predicate (`open_marks`), rendered beside the artifact on the tile, at full size in the zoom, and in the panel. `flag` and `note` had no write path at all before this — the selection loop (`golden-candidates`, `sindra-finalists`, the `pancake-*` ladders) was running through chat. 242 tests. Details worth carrying: `asks.py` kept `normalize_ask` and gained `build_answer` (the 2026-09-09 partial-answer semantics preserved by moving, not rewriting) and LOST its five sidecar-storage functions; `GET /b//marks.json` was added because remote sessions polled `.answer.json` over HTTP and the sidecar's removal would have taken that capability with it; `/b//asks` 308s to `/marks`.