Files
booth/ROADMAP.md
T
vh 726822b2b9 docs: the information architecture, and a v1 target to gate it against
The Booth was built as a file-shuttle on a whim and turned into the fleet's
operator-review surface without anyone deciding that. This is the decision,
written down, with the measurement that forced it.

The defect behind every bolt-on: one lifetime and one shape serving five jobs.
Five separate mechanisms exist to put one question next to one artifact.

Numbers that drove the model, taken against the live service:
  - 211 link rows, 145 (69%) pointing at booths that no longer exist
  - 22 rows that are the same bench re-posted (talk 5x, peedlar 4x)
  - 13 of 24 booths (54%) on the .forever escape hatch
  - 270 images rendered as one flat wall, subfolders discarded at render
  - 5 commits in one day to ship the asks primitive

Four nouns replace the accretion: booth (derived lifetime), item (one record),
mark (pick/note/flag -- asks, comments and votes were always one thing), and
bench (a registry, not an append log).

v1 is seven capabilities, each closing a measured defect. Compare mode is the
best idea in the set and is parked anyway, because it is the only one that is a
new capability rather than a fix.
2026-09-21 21:57:21 -07:00

3.6 KiB
Raw Blame History

The Booth — roadmap

Design: docs/design/information-architecture.md. Current version: 0.1.15 (the accreted service, extracted from eshpfi 2026-09-21).

v1 target

What must be true to cut 1.0. Seven capabilities, each closing a measured defect — not a wish. The measurements are in the IA doc.

# capability closes unit
1 One item record — resolved once, carried to gallery, zoom, doc, zip captions never reach the zoom view (never sent, not lost) U1
2 Marks — pick / note / flag, one primitive, one read path 5 mechanisms for 1 job; operator→session loop runs through chat U2
3 Declared embed seam — /_booth/embed.js, chrome mounts via DOM 6 regexes injected into arbitrary author HTML, load-bearing for asks U3
4 Derived lifetime — open marks pin; viewing is activity 54% of booths on the .forever escape hatch U4
5 Self-announcing booths — .booth.json, provenance on the index job 5 had no home, so it lived on the link board as 145 dead rows U5
6 Benches — registry, identity, enforced rule, migration 69% link-board rot; the same bench posted 5× U6
7 Navigation at 270 items — sections, rail, filters, grid keyboard one flat wall; subfolder structure discarded at render U7

Ordering is dependency-driven, not priority-driven: U1 → U2 → {U3, U4, U5} → U7, with U6 independent of all of them (different storage, different surface) and therefore the safest thing to land first or in parallel.

Explicitly NOT in v1

  • Backward compatibility with the ask CLI verbs. Pre-1.0, and ask / asks / answer become thin aliases over marks rather than a second code path. The 17 consuming handles get one althing note naming the change — the one case where telling peers is real coordination and not a broadcast.
  • A migration that deletes anything. links.md is archived verbatim and committed before the registry is seeded from it.

Parking lot

Deferred with a home, per the anti-creep gate. Default is park; these were weighed against the v1 path and lost on purpose.

item why parked
Compare mode — pair-by-name A/B across subfolders The best idea in the set, and the only one that is a new capability rather than a fix for a measured defect. The four-booth pancake-v3/v4 dance still works. First thing in v1.1.
Virtualized / progressive grid loading Speculative. 270 <img loading="lazy"> may be fine. Measure the real booth before optimising it — if it renders inside a second, this is invented work.
Bench uptime history + graphs The v1 need is "is it dead", which one flag answers. A time series is a different product.
Cross-booth search No evidence of the need in the usage data.
Per-viewer state (who has seen what) The Booth has one viewer. Revisit if that stops being true.
Auth Standing non-goal. LAN/mesh-internal. Blur stays cosmetic and says so.

Post-v1, already committed

  • SVOS theme retrofit by design-dev. Runs as a parallel track, not a v1 gate: we own the information architecture (it is driven by the measurement above), design-dev owns the visual and interaction system. The handoff is a /vor-ui brief written against the landed v1 structure — the same shape hamr-dev and pewpew-dev used.

Gate

A proposed feature is on the v1 path or it is parked. Default: parked. When both are defensible, park it — same asymmetry as the patch-default in SemVer. Applies regardless of who proposed it.