The ROADMAP row requiring a /vor-ui brief predates the IA doc. With that doc, the landed templates and the seven handoff constraints, a /vor-ui pass would have cost the operator a serial Q&A to re-derive IA already measured. design-dev made that argument and it is better than the row it overrides. Also settles: we merge and restart; he works against a copy, never :8090; the concept round goes to the operator; webfonts by CDN link with display=swap, because the CDN-free property turned out to be accreted rather than an invariant (checked CLAUDE.md, the non-goals and the IA doc). Corrects a memory defect in the same commit: a postbox send note is a point-in-time snapshot and one was promoted into persistent memory as a durable fact about a handle's delivery mode. It was wrong within the hour.
3.9 KiB
v1.0.0b1 — the v1 target staged as a beta, and a version that was two copies
2026-09-22 · booth
All seven v1 units landed, so the operator cut 1.0.0b1 — the first release
of the 1.x train, deliberately a BETA rather than a final. Tag v1.0.0b1,
annotated (milestone), commit 3126dec.
The beta is the right vehicle and not a hedge. The canonical policy defines
-beta.N as feature-complete, external testing, no new features, focus on bugs
— which is exactly this state, with a cross-frontier bug-hunt panel outstanding
on U7's diff. This repo already paid for the alternative once:
2026-09-21-v020-tagged-with-a-gate-in-flight — v0.2.0 was tagged AND
announced while a panel was in flight, the panel found three defects in the
just-released code, and v0.2.1 shipped within the hour. A beta is the designed
answer to that, not a workaround for it.
Version format, decided and worth not re-deriving
pyproject.tomlcarries1.0.0b1— PEP 440, which is what the packaging tool normalizes1.0.0-beta.1to anyway.- The git tag is
v1.0.0b1, matching the artifact string exactly rather than carrying a SemVer spelling the wheel does not. One string, no translation layer. - Ordering verified:
0.6.1 < 1.0.0b1 < 1.0.0.
⚠ The version was TWO copies, and the obvious fix was the wrong one
booth.__version__ was the literal "0.1.0" and had been wrong through six
releases. Nothing reads it, which is why nobody noticed.
The reflex fix — derive it from importlib.metadata — is WRONG HERE, and
measurably so. This repo has no build step and no install step: booth.service
runs uvicorn with WorkingDirectory set to the tree, so the running code IS
this checkout. Installed metadata describes a different artifact. The venv was
carrying a vestigial booth-0.3.0.dist-info with no package directory behind
it, so importlib.metadata.version("booth") returned 0.3.0 for a tree at
1.0.0b1 — confidently wrong, and varying by environment, which is worse than
a literal that at least fails the same way everywhere.
It now reads pyproject.toml via tomllib, with metadata as the fallback for
the wheel case this repo does not have. The test asserts the ABSENCE OF A
LITERAL, not agreement with pyproject — comparing the two would be circular
and would prove only that the read works. The defeating change is hardcoding a
number back in, and that is what is caught.
⚠ booth/__init__.py is a FOURTH stdlib-only module
scripts/booth imports booth.links / booth.marks / booth.manifest under
the SYSTEM python3 with no venv — and every one of those executes the package
root first. So a single third-party import in __init__.py breaks booth ask
on every fleet host exactly as one in the documented three would, and nothing
asserted it. test_stdlib_only now covers __init__; tomllib is stdlib and
requires-python is >=3.11, so the pyproject read is safe there. Verified by
running the real import chain under /usr/bin/python3 3.11.2 with no venv.
Handoff sent
The SVOS design-system retrofit went to design-dev (althing thread
01M369321KNBPZ7FYDQGZG7AXP) — the IA is ours and settled, the visual and
interaction system is his. ACCEPTED in-session within five minutes; he
declined a /vor-ui brief on the grounds that the IA doc, the landed templates
and the seven constraints already are one, and a /vor-ui pass would cost the
operator a serial Q&A to re-derive IA we had already measured. Agreed.
⚠ A postbox send note is a POINT-IN-TIME SNAPSHOT, not a durable fact about
a handle. The send response said design-dev: pull-only; last read 2026-09-21T18:44Z, and this file first recorded that as standing truth —
including a "silence is not a decision" warning built on it. postbox handles
says design-dev push reachable, and his reply landed in-session. Read the
mode from postbox handles when it matters; never promote a send-time note into
memory.