memory: snapshot — v1.0.0b1 cut, the version that was two copies, and the design-dev handoff

This commit is contained in:
vh
2026-09-22 21:41:56 -07:00
parent 3126deca00
commit 8a18dd13ab
2 changed files with 76 additions and 4 deletions
@@ -0,0 +1,63 @@
# 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. ⚠ **`design-dev` is PULL-ONLY and last read
2026-09-21T18:44Z**, so the message is queued, not picked up. Do not read
silence as a decision.
+13 -4
View File
@@ -30,10 +30,18 @@ _As of 2026-09-22:_
(filename-prefix groups) is built; `test_no_group_rail_is_shipped_yet` was (filename-prefix groups) is built; `test_no_group_rail_is_shipped_yet` was
deleted in the same commit, as required. deleted in the same commit, as required.
→ `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md` → `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md`
- 🔶 **THE 1.0 CUT IS NOW A DECISION, NOT A DEPENDENCY, AND IT IS HIS.** The v1 - ✅ **RELEASED `v1.0.0b1` — the first 1.x release, staged as a BETA** (operator,
target is met. A major bump needs explicit operator approval; nothing in the 2026-09-22: "cut 1.0 beta 1"). Feature-complete, no new features, remaining
code is waiting on it. The open fork: cut `1.0`, or stage a `0.7.0` first. work is bugs. `1.0.0` final is cut when the beta survives. **NOT PUSHED.**
**Not bumped — the work is committed as commits, which are not releases.** → `persistent-memory.d/2026-09-22-v1-staged-as-a-beta-and-a-second-copy-of-the-version.md`
- ⚠ **`booth/__init__.py` IS A FOURTH STDLIB-ONLY MODULE** and nothing said so
until now — `scripts/booth` executes it before every one of the documented
three. Now covered by `test_stdlib_only`. Same detail file carries why
`importlib.metadata` is the WRONG version source in this repo.
- 🔶 **SVOS design-system retrofit HANDED OFF to `design-dev`** (althing thread
`01M369321KNBPZ7FYDQGZG7AXP`). We own the IA; he owns the visual and
interaction system. ⚠ He is **PULL-ONLY, last read 2026-09-21T18:44Z** — the
message is QUEUED, not picked up. Silence is not a decision.
- ⚠ **U7'S CONTRACT CARRIED A MEASUREMENT THAT DID NOT REPRODUCE**, and it was - ⚠ **U7'S CONTRACT CARRIED A MEASUREMENT THAT DID NOT REPRODUCE**, and it was
the number the scope departure rested on. The stated rule gives 24 and 27 the number the scope departure rested on. The stated rule gives 24 and 27
groups where the table claimed 5 and 1; the table was assembled from two groups where the table claimed 5 and 1; the table was assembled from two
@@ -84,6 +92,7 @@ _As of 2026-09-22:_
## Recent decisions ## Recent decisions
- `[2026-09-22]` ✅ **v1.0.0b1 — the v1 target staged as a beta, and a version that was two copies** — READ BEFORE DERIVING A VERSION FROM `importlib.metadata` HERE; it reports a different artifact, and `booth/__init__.py` turns out to be stdlib-only → `persistent-memory.d/2026-09-22-v1-staged-as-a-beta-and-a-second-copy-of-the-version.md`
- `[2026-09-22]` ✅ **U7 landed — and the number that justified it did not reproduce** — all seven v1 units are in; READ BEFORE TRUSTING A MEASUREMENT INSIDE A CONTRACT, and before assuming a degeneracy guard covers the degeneracy you actually have → `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md` - `[2026-09-22]` ✅ **U7 landed — and the number that justified it did not reproduce** — all seven v1 units are in; READ BEFORE TRUSTING A MEASUREMENT INSIDE A CONTRACT, and before assuming a degeneracy guard covers the degeneracy you actually have → `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md`
- `[2026-09-22]` ⚠ **A mutation harness certified a broken test, twice, for two reasons** — no green baseline, and the pyc cache silently reverting same-size mutations; READ BEFORE WRITING ONE → `persistent-memory.d/2026-09-22-a-mutation-harness-that-certified-a-broken-test.md` - `[2026-09-22]` ⚠ **A mutation harness certified a broken test, twice, for two reasons** — no green baseline, and the pyc cache silently reverting same-size mutations; READ BEFORE WRITING ONE → `persistent-memory.d/2026-09-22-a-mutation-harness-that-certified-a-broken-test.md`
- `[2026-09-22]` 🛑 **STANDING: no announcements out of this repo until the arc is done, and he sends that one himself** — verbatim *"no announcements until the entire arc is done, and even then i'll do it myself."* Stricter than the house broadcast gate: the send is not the agent's to make, so **asking is also out of scope**. The drafted 17-handle note is REASSIGNED to him, not blocked — see the in-flight row above; do not raise it again. - `[2026-09-22]` 🛑 **STANDING: no announcements out of this repo until the arc is done, and he sends that one himself** — verbatim *"no announcements until the entire arc is done, and even then i'll do it myself."* Stricter than the house broadcast gate: the send is not the agent's to make, so **asking is also out of scope**. The drafted 17-handle note is REASSIGNED to him, not blocked — see the in-flight row above; do not raise it again.