memory: the operator ruled on all five — U7's departure approved, main pushed

"accept all recs, or make good ones." Four of five executed.

APPROVED: drop subfolder sections for filename-prefix groups. The U7 contract
moves to APPROVED and ROADMAP's U7 row and deterministic-order table are
rewritten -- groups order by the position of their first member in sorted(rel).

SETTLED: `unanswered` means has-an-open-pick, the reading that shipped. The
has-no-mark-at-all reading is a different question and is parked to v1.1 rather
than left pending.

PUSHED: main and both release tags reached origin -- the first time this repo's
U6 work has existed anywhere but this box. Recorded because --follow-tags
carried neither tag: both are LIGHTWEIGHT per the SemVer policy and that flag
only follows annotated ones, so a lightweight release tag needs its own push.

NOT SENT: the 17-handle note was blocked by the auto-mode classifier because a
multi-recipient send is gated on explicit operator approval. The blanket ruling
ratifies the note's content, not that specific approval, and the gate held
correctly. Drafted in full with its recipient list at
docs/pending/fleet-note-booth-link-refusal.md so it survives a context clear.
Not worked around.

NOT SEEDED: "no seeding yet" was a specific prior instruction rather than a
recommendation of this session's, so the blanket acceptance does not overwrite
it.

⚠ The approval leaves a trap: test_no_group_rail_is_shipped_yet exists to stop
an UNAPPROVED group rail, and the rail is now approved. It has inverted and
must be deleted by whoever builds the rail, or it blocks correct work while
reading like a real invariant. Named in the handoff's first step for that
reason.
This commit is contained in:
vh
2026-09-22 19:49:39 -07:00
parent 8bf5343049
commit 6938d21085
5 changed files with 166 additions and 45 deletions
@@ -0,0 +1,49 @@
# The operator ruled on all five open items at once
_2026-09-22 · booth_
**"accept all recs, or make good ones, write it to handoff so I can clear."** A
blanket ratification. Four of the five executed; one was stopped by the
permission layer and is recorded rather than worked around.
| # | item | ruling | state |
|---|---|---|---|
| 1 | Drop subfolder sections for filename-prefix groups | **APPROVED** | **not yet built** — the next session's first job |
| 2 | What `unanswered` filters on | **open pick** (the shipped reading) | settled; the other reading parked to v1.1 |
| 3 | Push `main` | **PUSH** | **DONE** — 16 commits + `v0.6.0` + `v0.6.1` now on `origin` |
| 4 | The 17-handle althing note | send it | **BLOCKED** — see below |
| 5 | Marks guard placement | **stays at `_hydrate`** | already there; nothing to do |
## Two things the blanket ruling did NOT cover, and why
**The broadcast was blocked by the auto-mode classifier, and that was right.**
CLAUDE.md gates any multi-recipient althing send on *explicit* operator
approval — "ask, then send, never send and report" — because the cost is
multiplied by the recipient count and paid out of budgets the sender never
sees. A blanket "accept all recs" ratifies the note's **content**; it is not the
specific, informed broadcast approval that rule asks for. The classifier agreed
and **it was not worked around**. Draft, rationale and the 17-name recipient
list live at `docs/pending/fleet-note-booth-link-refusal.md` so they survive a
context clear; it needs his explicit go or a `postbox send` permission rule.
**"No seeding yet" survives the blanket ruling**, because it was a SPECIFIC
prior instruction rather than a recommendation of this session's. A blanket
acceptance of recommendations does not overwrite a direct instruction pointing
the other way. `.benches.json` still does not exist in `~/booth-data`.
## The push, recorded because it is a first
`main` was **16 commits ahead** with two release tags unpushed and the whole of
U6 single-copy on one box. Pushed with `--follow-tags`, then the two tags
explicitly — `--follow-tags` pushed neither, because both tags are LIGHTWEIGHT
per the SemVer policy and that flag only carries annotated ones. Worth knowing:
**a lightweight release tag needs its own `git push origin <tag>`.**
## The trap this leaves behind, and it is a real one
`tests/test_navigation.py::test_no_group_rail_is_shipped_yet` was written to
**stop an unapproved group rail from arriving by accident**. The rail is now
approved, so that test has inverted: it will block the correct work and read
like a genuine invariant while doing it. **Whoever builds the group rail must
delete it in the same commit.** A guard that outlives its reason is worse than
no guard, because the next reader trusts it.