# 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.