memory: snapshot for context clear — the arc mid-flight, and the one thing that blocks
In-flight rewritten to what is actually live: design-dev's blur merge is HELD
at 5ded5ff awaiting his explicit 'merge it' ping (both panels dispatched 17:53,
unfolded), the redesign and thumbnails and dates are shipped, and the browser
suite is flaky under load and NOT fixed.
Two detail files added. The dates one is the reusable lesson: three plausible
proxies for a creation date were considered and one was nearly built, and the
real answer was a syscall away — the system already recorded what looked
unavailable. One of the rejected proxies was write-on-read, a shape this repo
had finished paying for hours earlier.
The flake entry is written as OPEN with its limits stated: three tests, two
real defects fixed, neither proven causal, and n=3 cannot show an improvement.
Recent decisions and Tried and abandoned preserved intact (49->51 by addition,
7 unchanged); the index is back under the soft cap at 141 lines from 285, all
of the reduction from settled history leaving the volatile section.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Creation dates, and three guesses wearing a fact's clothes
|
||||
|
||||
_2026-09-23 · booth_
|
||||
|
||||
The operator asked for creation and update dates on booths. **Update** was
|
||||
already there — `landed_at`, the newest mtime among CONTENT excluding our own
|
||||
machinery. **Creation** had no honest source, and the interesting part is the
|
||||
three wrong answers.
|
||||
|
||||
## Only 18 of 30 booths could state a creation time
|
||||
|
||||
`.booth.json` carries a declared `created`, but it exists only for booths posted
|
||||
through the CLI since U5. Twelve live booths had nothing.
|
||||
|
||||
## ⚠ Every convenient substitute was a GUESS PRESENTED AS A FACT
|
||||
|
||||
- **Oldest content mtime** — wrong the moment an agent copies files with
|
||||
timestamps preserved (`cp -p`, `rsync -a`), which is common. It would report
|
||||
the SOURCE material's age as the booth's.
|
||||
- **Directory mtime** — that is "last thing added", i.e. `landed_at` under a
|
||||
second name. Two fields, one meaning, displayed as if they were different.
|
||||
- **Stamp a first-seen marker on read** — and this is the one worth flagging,
|
||||
because it is the same write-on-read shape that had *already* cost this
|
||||
service an hour that same day when the thumbnail cache aged the booth it
|
||||
cached ([[2026-09-23-the-cache-that-aged-the-thing-it-cached]]). A fix whose
|
||||
shape you just finished paying for is not a fix.
|
||||
|
||||
## The answer was a fact the disk already held
|
||||
|
||||
**ext4 records a real birth time.** CPython does not expose `st_birthtime` on
|
||||
Linux, but `statx(2)` does and glibc has wrapped it since 2.28, so
|
||||
`booth/birthtime.py` reads it through `ctypes`. Verified against `stat(1)` on
|
||||
live booths: **6 of 6 exact**, including every booth with no manifest.
|
||||
|
||||
One rule for all thirty, which is what invariant 6 asks of anything statable in
|
||||
a line. `None` when the filesystem cannot say (tmpfs, NFS, an old kernel), and
|
||||
**None renders as nothing** — a blank is the honest output when nobody knows,
|
||||
and better than a plausible number.
|
||||
|
||||
**The generalisable bit:** when a fact seems unavailable, check whether the
|
||||
system already records it before reaching for a proxy. Three plausible proxies
|
||||
were considered and one was nearly built; the real answer was a syscall away.
|
||||
@@ -0,0 +1,47 @@
|
||||
# The browser suite is flaky under load — UNRESOLVED, and owned by design-dev
|
||||
|
||||
_2026-09-23 · booth_
|
||||
|
||||
⚠ **OPEN. Not fixed. Do not read a green suite as proof of anything without
|
||||
re-running it.**
|
||||
|
||||
## What is observed, with its limits
|
||||
|
||||
**Three different browser tests** have each failed once under full-suite load
|
||||
while passing repeatedly in isolation:
|
||||
|
||||
| test | owner | isolation | full suite |
|
||||
|---|---|---|---|
|
||||
| `test_the_keyboard_flag_actually_submits` | booth-dev | 5/5 pass | 1 failure |
|
||||
| `test_a_failed_save_says_so_reloads_and_never_re_posts` | design-dev | 3/3 pass | 1 failure |
|
||||
| `test_the_review_keys_judge_in_place_and_stay_out_of_the_note` | design-dev | 10/10 + 5/5 pass | 1 in ~9 |
|
||||
|
||||
Three different tests points at **the environment under contention**, not at any
|
||||
one test. That is a direction, not a finding.
|
||||
|
||||
## Two real defects found chasing it — NEITHER PROVEN TO BE THE CAUSE
|
||||
|
||||
1. **A keypress race.** The flag test fired `ArrowRight` and `f` back to back,
|
||||
assuming the first had finished — but `focus()` does a `scrollIntoView`, so
|
||||
under load `f` could arrive with no cursor set. Now waits for
|
||||
`figure.item.is-cursor`.
|
||||
2. **A port TOCTOU in BOTH browser fixtures.** Each did `bind → getsockname →
|
||||
CLOSE → hand uvicorn the port NUMBER`, leaving a window for the kernel to
|
||||
give that port away — and this suite runs two browser files that each start a
|
||||
server per test, so the competitor is the other file. The bound socket is now
|
||||
passed to `server.run(sockets=[sock])`.
|
||||
|
||||
**Since those fixes: one failure in three full runs. n=3 CANNOT distinguish
|
||||
that from the prior rate, and no claim of improvement is made.**
|
||||
|
||||
## Who owns it and what the method is
|
||||
|
||||
**The operator ruled: "let him diagnose it properly."** design-dev owns it. His
|
||||
method: a trace hook keeping a Playwright trace (screenshots + DOM snapshots)
|
||||
for every browser test that fails, captured **from the run that fails**, then
|
||||
full-suite runs until red and the artefact decides. Test-only infra, on his
|
||||
branch as its own commit.
|
||||
|
||||
⚠ **The methodological trap, and why the artefact must come from the full
|
||||
suite:** the failure only reproduces there. A narrowed repro that passes proves
|
||||
nothing and will be mistaken for a fix.
|
||||
+58
-202
@@ -1,6 +1,6 @@
|
||||
# Persistent memory — booth
|
||||
|
||||
_Last updated: 2026-09-22_
|
||||
_Last updated: 2026-09-23_
|
||||
|
||||
> **Always check for `/tmp/booth-dev-handoff.md`** — if it exists and its
|
||||
> `Written:` stamp is under 8 hours old, read it (it carries the in-flight
|
||||
@@ -17,213 +17,69 @@ loop it turned out to actually be.
|
||||
|
||||
## Current state / in-flight
|
||||
|
||||
_As of 2026-09-22:_
|
||||
_As of 2026-09-23:_
|
||||
|
||||
- **U6 SHIPPED (`v0.6.0`) with a late fix (`v0.6.1`). PUSHED.** `main` and both
|
||||
tags are on `origin` as of 2026-09-22 — the tree is no longer single-copy.
|
||||
⚠ **That "PUSHED" was already stale when written**: `2f85692` (the
|
||||
no-announcements ruling) landed after it and sat unpushed until 2026-09-22
|
||||
night. **Do not trust a "pushed" row — run `git rev-list --count
|
||||
origin/main..HEAD`.** A push is a point in time; this file is not.
|
||||
→ `persistent-memory.d/2026-09-22-u6-benches-released.md`
|
||||
- **THE OPERATOR RULED ON EVERYTHING OUTSTANDING (2026-09-22, "accept all
|
||||
recs").** Four of five settled and executed; one blocked by the permission
|
||||
layer. Nothing is waiting on him. →
|
||||
`persistent-memory.d/2026-09-22-operator-ruled-on-the-open-five.md`
|
||||
- ✅ **U7 IS LANDED — ALL SEVEN v1 UNITS ARE IN.** The fourth component
|
||||
(filename-prefix groups) is built; `test_no_group_rail_is_shipped_yet` was
|
||||
deleted in the same commit, as required.
|
||||
→ `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md`
|
||||
- ✅ **RELEASED `v1.0.0b1` — the first 1.x release, staged as a BETA** (operator,
|
||||
2026-09-22: "cut 1.0 beta 1"). Feature-complete, no new features, remaining
|
||||
work is bugs. `1.0.0` final is cut when the beta survives.
|
||||
**PUSHED — `main` and the annotated tag are on `origin`; ahead 0, behind 0.**
|
||||
→ `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.
|
||||
- 🛑 **ROUND 1 RULED NOT-AS-SHOWN, AND THE SCOPE FENCE WAS OURS** (operator,
|
||||
2026-09-23): *"He didn't go far enough, still looks like the booth. I want him
|
||||
to consider the flow and the requirements — design touches, layout, usability
|
||||
all belong to him."* **The handoff's "what we are not asking for: layout
|
||||
changes driven by information architecture" paragraph is VOID** — design-dev's
|
||||
"class additions only, no reordering" was that constraint honoured, so the
|
||||
ruling corrects OUR brief, not his round. Flow, layout, usability and the
|
||||
requirements are his; the IA is no longer fenced off. Two tiers survive:
|
||||
correctness (deterministic order, autoescape, blur-admits-cosmetic, restart
|
||||
discipline) and engineering defaults he may now ARGUE with (no-JS gallery,
|
||||
virtualization parked, compare mode deferred) — tier-2 disputes go to the
|
||||
operator, not settled between agents. Relayed in full; questions 2 and 3
|
||||
(voice, emblem) remain UNANSWERED and were not answered on his behalf.
|
||||
⚠ **Calibration for the next round: his bar is "did anything change when I
|
||||
opened it".** He said the Booth "kind of looks the same" about our own U7
|
||||
navigation work, before ever seeing the design round.
|
||||
- 🔶 **THE DESIGN ARC IS MID-FLIGHT AND design-dev IS BUILDING IN TWO MERGES.**
|
||||
First: **Reveal all + the booth-blur control** (re-sequenced to first because
|
||||
the operator said per-booth blur became important). Second: the Desk row
|
||||
revisions + the theme toggle. Each gets its own bug-hunt; he pings at each
|
||||
handover and **we merge and restart**.
|
||||
- ✅ **BOOTH-LEVEL BLUR: STORAGE AND CLI ARE LANDED; ONLY THE UI IS PENDING.**
|
||||
Marker `<booth>/.blurbooth`, `POST /b/<name>/blurbooth`, and
|
||||
**`booth blur <name>` with NO files fogs the whole booth** (naming files is
|
||||
still per-item). COMPOSES with `.blurred`, never overrides. All 17 handles can
|
||||
self-blur at post time, which is the durable fix.
|
||||
- ⚠ **THE DESK EXPOSES 84 IMAGES ACROSS 22 BOOTHS on the page he opens first**
|
||||
(measured 2026-09-23). The pre-redesign index showed ONE cover per booth, so
|
||||
four-up multiplied exposure by four and **nothing posted before the redesign
|
||||
opted into it.** That is why blur got re-prioritised.
|
||||
- 🛑 **THE ONE THING BLOCKING: design-dev's blur merge is HELD, awaiting his
|
||||
ping.** `design-dev/svos-retheme` @ `5ded5ff` (Reveal all + the booth-blur
|
||||
control) is fetched, merge-tree against `091f4b5` is CLEAN, and his commit
|
||||
records the contract panel 4/4 folded, 14/14 mutations, 765 passing —
|
||||
**but the heid code-review and bug-hunt panels were dispatched 17:53 and are
|
||||
NOT folded.** He said explicitly: *"Hold… I will ping 'merge it' when both
|
||||
are folded; whoever picks it up after a clear should look for that ping before
|
||||
merging."* **DO NOT MERGE IT WITHOUT THAT PING.** The operator's "merge
|
||||
everything" predates this and was not about overriding his gate.
|
||||
- 🔶 **After that ping: merge, restart, verify 30 booths.** Then his SECOND
|
||||
merge (Desk row revisions + the dark/light/system theme toggle) follows the
|
||||
same way.
|
||||
- ⚠ **THE BROWSER SUITE IS FLAKY UNDER LOAD AND IT IS NOT FIXED.** Three
|
||||
different tests, one failure each, all passing in isolation. Two real defects
|
||||
were fixed chasing it and NEITHER is proven to be the cause. **Do not read a
|
||||
green suite as proof.** Operator ruled design-dev diagnoses it properly.
|
||||
→ `persistent-memory.d/2026-09-23-the-browser-suite-is-flaky-under-load.md`
|
||||
- ✅ **THE REDESIGN IS LIVE.** R2 (the Desk, the lightbox, the reel) merged and
|
||||
deployed; release/wipe moved onto the facts line. 30 booths at 200.
|
||||
- ✅ **BOOTH BLUR: STORAGE, ROUTE AND CLI ARE LANDED — ONLY THE UI IS PENDING**
|
||||
(it is what `5ded5ff` holds). Marker `<booth>/.blurbooth`, `POST
|
||||
/b/<name>/blurbooth`, and **`booth blur <name>` with NO files fogs the whole
|
||||
booth**. COMPOSES with `.blurred`, never overrides. All 17 handles can
|
||||
self-blur at post time.
|
||||
- ✅ **THUMBNAILS ARE LIVE.** 77.5 MB → 0.78 MB on the biggest gallery; the Desk
|
||||
~100 MB → 1.12 MB. Four surfaces (tile, Desk strip, flag tray, filmstrip); the
|
||||
review stage keeps the original.
|
||||
→ `persistent-memory.d/2026-09-23-the-cache-that-aged-the-thing-it-cached.md`
|
||||
- ✅ **CREATION + UPDATE DATES ARE ON THE RECORD** for all 30 booths
|
||||
(`created_at` via `statx`, `landed_at` already existed). design-dev renders
|
||||
them when his sequencing reaches it; **None must render as nothing.**
|
||||
→ `persistent-memory.d/2026-09-23-dates-and-the-guess-wearing-a-facts-clothes.md`
|
||||
- ⚠ **THE DESK EXPOSES 84 IMAGES ACROSS 22 BOOTHS on the page he opens first.**
|
||||
The pre-redesign index showed ONE cover per booth; four-up multiplied exposure
|
||||
by four and nothing posted before the redesign opted into it.
|
||||
⚠ **The operator declined to blur the `sindra-nude-*` booths for now** — he
|
||||
will do it himself once design-dev's control lands. **Do not blur them on his
|
||||
behalf.**
|
||||
- ✅ **RULINGS 2026-09-23:** `×` (wipe) **hides** with the other Desk controls
|
||||
on hover; the theme toggle **reaches** `.bk-ask` chrome inside verbatim pages;
|
||||
global unblur is **reading A** (per-booth, tab-scoped, nothing persisted);
|
||||
**no `1.0.0` yet.**
|
||||
⚠ The hover ruling looked like it reversed design-dev's "nothing hides behind
|
||||
hover" argument; he resolved it WITHOUT an overrule via
|
||||
`@media (hover: hover)` — hidden-until-hover only where hover exists, own line
|
||||
on touch. Do not re-raise it as a conflict.
|
||||
- ✅ **ALL FOUR FLOW RULINGS ARE IN — A+B, compare THIS ARC, plain voice, no
|
||||
emblem** (operator via Miranda D-0016, 2026-09-23 08:07). Every one took
|
||||
design-dev's recommendation; no notes attached. **booth-dev is the SOLE RELAY
|
||||
— the operator will not brief design-dev directly.** Verbatim copy at
|
||||
`docs/rulings/2026-09-23-flow-direction.json`.
|
||||
→ `persistent-memory.d/2026-09-23-the-flow-rulings-and-what-they-cost-the-beta.md`
|
||||
- ⚠ **ANSWERING A PICK REMOVES THE HOLD THAT PROTECTED THE RECORD.** A booth is
|
||||
held while a question is OPEN; the moment it is answered it becomes the record
|
||||
of a decision and stops being held. Both design booths hit this, by different
|
||||
routes (one withdrawn, one answered). **Capture a ruling into git, not into a
|
||||
booth.** Raised to design-dev as a flow question rather than patched.
|
||||
- ⚠ **`v1.0.0b1`'s "no new features" PREMISE IS SUPERSEDED.** The arc now
|
||||
contains a flow redesign and compare mode. The tag stays as written (it
|
||||
records what was believed, not a claim about now), an alpha drop-back is
|
||||
ILLEGAL (`1.0.0a2` < `1.0.0b1`), and no further pre-release is cut until the
|
||||
arc lands. **Whether `1.0.0` waits for the redesign is UNDECIDED and his.**
|
||||
- 🔶 **ROUND 2 IS UP AND FOUR RULINGS ARE WITH THE OPERATOR** — booth
|
||||
`booth-flow-concepts`, ask `flow`: direction / compare / voice / emblem.
|
||||
Three directions (Desk, Reel, Bench), six screens each in dark+light, plus a
|
||||
README stating eight requirements measured from the live booths. design-dev
|
||||
recommends **A+B** (Desk with the Reel as its review mode), **compare in this
|
||||
arc**, **plain-and-direct copy**, **no emblem**. He withdrew his own round-1
|
||||
`svos` ask as superseded — he did NOT answer anything on the operator's
|
||||
behalf.
|
||||
- ✅ **`booth-svos-retheme` IS KEPT** — design-dev ran `booth keep` after we
|
||||
flagged that withdrawing his ask had removed the last hold. Round 1's renders
|
||||
stay one click away while the operator chooses; he releases it once `flow` is
|
||||
ruled.
|
||||
- ✅ **ORDERING REVIEW DONE FOR ROUND 2's SURFACES** (he asked before building).
|
||||
His **ordinals rule improves invariant 6** — an ordinal that counts across ALL
|
||||
items makes "#07" stable under every filter, where today "the third one" is
|
||||
ambiguous the moment a filter is on.
|
||||
will do it himself once the control lands. **Do not blur them on his behalf.**
|
||||
- 🛑 **NO `1.0.0` YET** (operator, 2026-09-23). The tag stays `1.0.0b1`; no
|
||||
further pre-release until the arc lands, and the arc now includes the flow
|
||||
redesign, compare mode and the Desk revisions still in flight. ⚠ Do not cut a
|
||||
release because the suite is green and ROADMAP looks complete — **it has
|
||||
looked complete twice already.**
|
||||
- 🔶 **COMPARE MODE (r3) is ruled INTO this arc** and unparked; design-dev
|
||||
starts it after the two merges land. The item-record work it needs is ours,
|
||||
not deferred — he tells us what a compare view wants from `booth_items`.
|
||||
- 🛑 **STANDING: NO ANNOUNCEMENTS out of this repo until the whole arc is done,
|
||||
and the operator sends that one himself.** Do not offer, draft-and-await, or
|
||||
raise it.
|
||||
- ⚠ **`booth/__init__.py` IS A FOURTH STDLIB-ONLY MODULE** — `scripts/booth`
|
||||
executes it before every documented one. Covered by `test_stdlib_only`.
|
||||
- ⚠ **Read the staged ref, never a SHA written here** — design-dev rebases and
|
||||
rewrites it in place. `git show-ref | grep svos`, then `git merge-tree`.
|
||||
- **770 green on a clean run; 49+ falsifiers proved across three mutation
|
||||
tables (`scripts/mutation_check.py`). Tree clean, pushed, 0 ahead.**
|
||||
|
||||
⚠ **One correction we sent was WRONG, and the record is corrected here rather
|
||||
than left to be re-asserted.** We read his "SET order" as "the order they were
|
||||
set in" and told him it was already `(created, id)`. He meant **the SET's
|
||||
order — by tile number.** Those genuinely differ: flag #15 then #07, and
|
||||
today's panel lists #15, #07 while his tray lists #07, #15. His rule is also
|
||||
cleaner than ours — the flag set sorted by its target's position in
|
||||
`sorted(rel)` is a **total order needing no tie-break, because rels are
|
||||
unique.** Do not re-raise the tie-break point; it was our misreading.
|
||||
|
||||
The correction that held: **"last activity" must reuse `_newest_mtime`**,
|
||||
whose `.lock` exclusion is load-bearing — a naive `max(mtime)` lets a no-op
|
||||
mark POST float a dead booth to the top. Taken, with no second definition of
|
||||
activity on the Desk.
|
||||
- 🔶 **SVOS CONCEPT ROUND IS UP AND THREE RULINGS ARE WITH THE OPERATOR**
|
||||
(booth `booth-svos-retheme`, ask id `svos`: ship / voice / emblem, all three
|
||||
with design-dev's recommendation attached). **Nothing from us gates it and
|
||||
the branch must NOT be merged until he pings after the rulings.**
|
||||
Branch `refs/heads/design-dev/svos-retheme` is fetched into this repo as an
|
||||
**inert ref** — nothing checked out, `main` clean, merge-tree clean.
|
||||
⚠ **DO NOT TRUST A SHA WRITTEN HERE — READ THE REF.** He rebases onto our
|
||||
`main` and rewrites the ref in place; it has already moved `878ed86` →
|
||||
`a99b7bb` (rebase onto `1826d19`, plus the scroll-margin fix). Merging a SHA
|
||||
copied out of this file would merge a pre-rebase branch. Same class as the
|
||||
stale "PUSHED" row and the stale postbox-mode note: **this file records what
|
||||
was true when written, and a moving ref is not that.** Run
|
||||
`git show-ref | grep svos` and `git merge-tree --write-tree HEAD <ref>`.
|
||||
- 🔶 **THE FIXUP HOLD IS PARTIAL, NOT BLANKET.** `booth/templates/booth.html`
|
||||
is **RELEASED** — design-dev does not touch it, so bug-hunt findings there
|
||||
land immediately. **HELD** while his branch is out: `base.html`, `view.html`,
|
||||
`doc.html`, `embed.js`, and `app.py`'s `FAVICON_HREF`.
|
||||
- ⚠ **A REAL LATENT CSS DEFECT, FOUND BY design-dev, ASSIGNED TO HIS REWRITE.**
|
||||
`base.html` reads `--line` / `--bg` / `--fg` / `--muted` and **defines none of
|
||||
them**; 15 of those uses carry no fallback (lines 281-314). `border:1px solid
|
||||
var(--line)` with the var undefined is invalid at computed-value time, so the
|
||||
WHOLE border declaration drops — the keep/blur/reveal buttons have had no
|
||||
border and a transparent background. The U7 rail above them reads the same
|
||||
names WITH fallbacks, which is why the rail looks deliberate and the buttons
|
||||
never did. **Do not fix on `main`** — it is the one file he is rewriting.
|
||||
- ⚠ **A `postbox send` note is a point-in-time snapshot, NOT a durable fact.**
|
||||
The send said `design-dev: pull-only`; `postbox handles` says `push
|
||||
reachable`, and he replied in-session. Read the mode from `postbox handles`.
|
||||
- ⚠ **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
|
||||
groups where the table claimed 5 and 1; the table was assembled from two
|
||||
different heuristics. **A cold contract-review panel cannot catch this** — the
|
||||
artifact is internally plausible. Re-run any measurement a contract's scope
|
||||
rests on before implementing it. Same detail file.
|
||||
- ⚠ **A MUTATION HARNESS NEEDS A GREEN BASELINE AND CACHE DEFEAT**, or it
|
||||
certifies falsifiers without running them. Both defects bit in one session.
|
||||
→ `persistent-memory.d/2026-09-22-a-mutation-harness-that-certified-a-broken-test.md`
|
||||
- **648 tests green; 12/12 U7 falsifiers mutation-proved. Deployed; 21/21
|
||||
booths 200.** ⚠ The set churned again mid-session (19 → 21).
|
||||
- ✅ **THE MUTATION HARNESS IS NOW `scripts/mutation_check.py`** (operator,
|
||||
2026-09-22: "keep the harness"). Tables in `tests/mutations/*.toml`, one per
|
||||
unit — **add a unit by adding a file, never by editing the script.** It has
|
||||
its own positive and negative controls in `tests/test_mutation_check.py`,
|
||||
including a known-vacuous falsifier it must catch. **When you write a
|
||||
`*Falsifiable:*` line, add its row and run it** — a falsifier nobody has run
|
||||
is a claim, not a test.
|
||||
- ✅ **THE BUG-HUNT PANEL LANDED AND IS TRIAGED** (`397ea89`): six defects fixed,
|
||||
two accepted known risks, one held for design-dev. **660 green, 20/20
|
||||
mutation-proved, deployed, 21/21 booths 200.**
|
||||
→ `persistent-memory.d/2026-09-23-the-bug-hunt-panel-and-five-vacuous-falsifiers.md`
|
||||
- ⚠ **BROWSERS MATCH A URL FRAGMENT RAW FIRST, decoded only second.** So a raw
|
||||
rel on BOTH the anchor and the id is not "unencoded", it is AMBIGUOUS, and the
|
||||
jump can land on the WRONG artifact. Encoding one side just moves the
|
||||
collision — **both sides must use `Item.url`.** Same detail file.
|
||||
- ⚠ **FIVE VACUOUS FALSIFIERS IN U7 ALONE**, three arms finding the same one
|
||||
independently. A guard-strength pass is the highest-value part of a panel on a
|
||||
well-tested diff; the findings sit in the gaps the code comments are most
|
||||
confident about.
|
||||
- 🛑 **STANDING RULING — NO ANNOUNCEMENTS OUT OF THIS REPO, AND THE OPERATOR
|
||||
SENDS THE EVENTUAL ONE HIMSELF** (operator, 2026-09-22). Verbatim: *"no
|
||||
announcements until the entire arc is done, and even then i'll do it myself."*
|
||||
Two clauses, both binding: **(a)** no althing announcement of any kind ships
|
||||
from booth-dev until the v1 arc is COMPLETE — not per-unit, not at the 1.0
|
||||
tag, not "just the peers who consume it"; **(b)** when the arc IS done, the
|
||||
announcement is HIS to send, not a thing to ask permission for. This is
|
||||
STRICTER than `~/.claude/CLAUDE.md`'s broadcast gate, which merely requires
|
||||
approval — here the send is not the agent's to make at all, so *asking* is
|
||||
also out of scope. Do not offer, draft-and-await, or surface it as a pending
|
||||
decision; it is settled and not a standing question.
|
||||
**The 17-handle `booth link` note is consequently REASSIGNED, not blocked.**
|
||||
The full draft + recipient list stays at
|
||||
`docs/pending/fleet-note-booth-link-refusal.md` as MATERIAL FOR HIM. It is no
|
||||
longer an open loop, no longer awaiting approval, and no longer a thing to
|
||||
raise. Same for anything U4's `keep`-semantics change would have warranted
|
||||
telling peers.
|
||||
- ⚠ **NOT SEEDED, and this survives the blanket ruling.** "No seeding yet" was a
|
||||
SPECIFIC prior instruction, not a recommendation of mine, so "accept all recs"
|
||||
does not override it. `.benches.json` does not exist in `~/booth-data`.
|
||||
- **A U7 directive (D-0011) misrouted to infra-ops and is SUPERSEDED.** Miranda
|
||||
confirmed directly. Nothing to act on.
|
||||
→ `persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md`
|
||||
- ⚠ **THE 17 CONSUMING HANDLES WERE NEVER TOLD that `keep` stopped meaning
|
||||
"waiting on an answer"** — and the note above does not tell them either; it is
|
||||
about `booth link`. **This CHANGES HOW THE 2026-10-06 RE-COUNT READS**: a flat
|
||||
`.forever` rate does NOT falsify the diagnosis.
|
||||
- **Two dated predictions pending, not to be run early.** U5's adoption
|
||||
re-measure **2026-09-29**; the `.forever` re-count **on or after 2026-10-06**.
|
||||
- **FIVE `/heid*` methodology proposals sit with the operator**, untracked by
|
||||
his choice.
|
||||
- The booth set churns hard: 26 → 24 → 25 → 23 → **19**. Re-count rather than
|
||||
trusting any number here.
|
||||
|
||||
## Recent decisions
|
||||
|
||||
- `[2026-09-23]` ✅ **The four flow rulings, and what they cost the beta** — all four taking design-dev's recommendation; READ BEFORE CUTTING ANY RELEASE, because `v1.0.0b1`'s "no new features" promise no longer describes the arc and an alpha drop-back is illegal → `persistent-memory.d/2026-09-23-the-flow-rulings-and-what-they-cost-the-beta.md`
|
||||
- `[2026-09-23]` ✅ **Creation dates came from a syscall, after three guesses wearing a fact's clothes** — READ BEFORE REACHING FOR A PROXY; the system already recorded what looked unavailable, and one of the rejected proxies was a shape we had just finished paying for → `persistent-memory.d/2026-09-23-dates-and-the-guess-wearing-a-facts-clothes.md`
|
||||
- `[2026-09-23]` ⚠ **The browser suite is flaky under load — OPEN, owned by design-dev** — three tests, two real defects fixed, NEITHER proven causal; do not read a green suite as proof → `persistent-memory.d/2026-09-23-the-browser-suite-is-flaky-under-load.md`
|
||||
- `[2026-09-23]` ⚠ **The cache that aged the thing it cached** — thumbnails 77.5MB→0.78MB; READ BEFORE PARKING ANYTHING ON A MEASUREMENT (we counted images and the cost was in bytes), and BEFORE PUTTING A SERVER-WRITTEN CACHE INSIDE A BOOTH (excluding its contents does not stop it aging the booth) → `persistent-memory.d/2026-09-23-the-cache-that-aged-the-thing-it-cached.md`
|
||||
- `[2026-09-23]` ⚠ **The probe that nearly dismissed a live injection vector** — the link board rendered `javascript:` hrefs; READ BEFORE TRUSTING A NEGATIVE RESULT FROM AN OBVIOUS PROBE, and before assuming an existing scheme check is the guard you are looking for → `persistent-memory.d/2026-09-23-the-probe-that-nearly-dismissed-a-live-vector.md`
|
||||
- `[2026-09-23]` ✅ **The bug-hunt panel found six defects and five vacuous falsifiers** — READ BEFORE BUILDING ANY FRAGMENT ANCHOR (browsers match raw before decoded, so both sides must be encoded), and before trusting a well-commented diff's guards → `persistent-memory.d/2026-09-23-the-bug-hunt-panel-and-five-vacuous-falsifiers.md`
|
||||
|
||||
Reference in New Issue
Block a user