Files
booth/persistent-memory.d/2026-09-22-v1-staged-as-a-beta-and-a-second-copy-of-the-version.md
T
vh 82ac7c44e4 docs: design-dev accepted the SVOS retrofit — the /vor-ui brief is declined, and why
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.
2026-09-22 21:51:35 -07:00

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.toml carries 1.0.0b1 — PEP 440, which is what the packaging tool normalizes 1.0.0-beta.1 to 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.