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
|
# 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
|
> **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
|
> `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
|
## 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
|
- 🛑 **THE ONE THING BLOCKING: design-dev's blur merge is HELD, awaiting his
|
||||||
tags are on `origin` as of 2026-09-22 — the tree is no longer single-copy.
|
ping.** `design-dev/svos-retheme` @ `5ded5ff` (Reveal all + the booth-blur
|
||||||
⚠ **That "PUSHED" was already stale when written**: `2f85692` (the
|
control) is fetched, merge-tree against `091f4b5` is CLEAN, and his commit
|
||||||
no-announcements ruling) landed after it and sat unpushed until 2026-09-22
|
records the contract panel 4/4 folded, 14/14 mutations, 765 passing —
|
||||||
night. **Do not trust a "pushed" row — run `git rev-list --count
|
**but the heid code-review and bug-hunt panels were dispatched 17:53 and are
|
||||||
origin/main..HEAD`.** A push is a point in time; this file is not.
|
NOT folded.** He said explicitly: *"Hold… I will ping 'merge it' when both
|
||||||
→ `persistent-memory.d/2026-09-22-u6-benches-released.md`
|
are folded; whoever picks it up after a clear should look for that ping before
|
||||||
- **THE OPERATOR RULED ON EVERYTHING OUTSTANDING (2026-09-22, "accept all
|
merging."* **DO NOT MERGE IT WITHOUT THAT PING.** The operator's "merge
|
||||||
recs").** Four of five settled and executed; one blocked by the permission
|
everything" predates this and was not about overriding his gate.
|
||||||
layer. Nothing is waiting on him. →
|
- 🔶 **After that ping: merge, restart, verify 30 booths.** Then his SECOND
|
||||||
`persistent-memory.d/2026-09-22-operator-ruled-on-the-open-five.md`
|
merge (Desk row revisions + the dark/light/system theme toggle) follows the
|
||||||
- ✅ **U7 IS LANDED — ALL SEVEN v1 UNITS ARE IN.** The fourth component
|
same way.
|
||||||
(filename-prefix groups) is built; `test_no_group_rail_is_shipped_yet` was
|
- ⚠ **THE BROWSER SUITE IS FLAKY UNDER LOAD AND IT IS NOT FIXED.** Three
|
||||||
deleted in the same commit, as required.
|
different tests, one failure each, all passing in isolation. Two real defects
|
||||||
→ `persistent-memory.d/2026-09-22-u7-landed-and-a-table-that-did-not-reproduce.md`
|
were fixed chasing it and NEITHER is proven to be the cause. **Do not read a
|
||||||
- ✅ **RELEASED `v1.0.0b1` — the first 1.x release, staged as a BETA** (operator,
|
green suite as proof.** Operator ruled design-dev diagnoses it properly.
|
||||||
2026-09-22: "cut 1.0 beta 1"). Feature-complete, no new features, remaining
|
→ `persistent-memory.d/2026-09-23-the-browser-suite-is-flaky-under-load.md`
|
||||||
work is bugs. `1.0.0` final is cut when the beta survives.
|
- ✅ **THE REDESIGN IS LIVE.** R2 (the Desk, the lightbox, the reel) merged and
|
||||||
**PUSHED — `main` and the annotated tag are on `origin`; ahead 0, behind 0.**
|
deployed; release/wipe moved onto the facts line. 30 booths at 200.
|
||||||
→ `persistent-memory.d/2026-09-22-v1-staged-as-a-beta-and-a-second-copy-of-the-version.md`
|
- ✅ **BOOTH BLUR: STORAGE, ROUTE AND CLI ARE LANDED — ONLY THE UI IS PENDING**
|
||||||
- ⚠ **`booth/__init__.py` IS A FOURTH STDLIB-ONLY MODULE** and nothing said so
|
(it is what `5ded5ff` holds). Marker `<booth>/.blurbooth`, `POST
|
||||||
until now — `scripts/booth` executes it before every one of the documented
|
/b/<name>/blurbooth`, and **`booth blur <name>` with NO files fogs the whole
|
||||||
three. Now covered by `test_stdlib_only`. Same detail file carries why
|
booth**. COMPOSES with `.blurred`, never overrides. All 17 handles can
|
||||||
`importlib.metadata` is the WRONG version source in this repo.
|
self-blur at post time.
|
||||||
- 🛑 **ROUND 1 RULED NOT-AS-SHOWN, AND THE SCOPE FENCE WAS OURS** (operator,
|
- ✅ **THUMBNAILS ARE LIVE.** 77.5 MB → 0.78 MB on the biggest gallery; the Desk
|
||||||
2026-09-23): *"He didn't go far enough, still looks like the booth. I want him
|
~100 MB → 1.12 MB. Four surfaces (tile, Desk strip, flag tray, filmstrip); the
|
||||||
to consider the flow and the requirements — design touches, layout, usability
|
review stage keeps the original.
|
||||||
all belong to him."* **The handoff's "what we are not asking for: layout
|
→ `persistent-memory.d/2026-09-23-the-cache-that-aged-the-thing-it-cached.md`
|
||||||
changes driven by information architecture" paragraph is VOID** — design-dev's
|
- ✅ **CREATION + UPDATE DATES ARE ON THE RECORD** for all 30 booths
|
||||||
"class additions only, no reordering" was that constraint honoured, so the
|
(`created_at` via `statx`, `landed_at` already existed). design-dev renders
|
||||||
ruling corrects OUR brief, not his round. Flow, layout, usability and the
|
them when his sequencing reaches it; **None must render as nothing.**
|
||||||
requirements are his; the IA is no longer fenced off. Two tiers survive:
|
→ `persistent-memory.d/2026-09-23-dates-and-the-guess-wearing-a-facts-clothes.md`
|
||||||
correctness (deterministic order, autoescape, blur-admits-cosmetic, restart
|
- ⚠ **THE DESK EXPOSES 84 IMAGES ACROSS 22 BOOTHS on the page he opens first.**
|
||||||
discipline) and engineering defaults he may now ARGUE with (no-JS gallery,
|
The pre-redesign index showed ONE cover per booth; four-up multiplied exposure
|
||||||
virtualization parked, compare mode deferred) — tier-2 disputes go to the
|
by four and nothing posted before the redesign opted into it.
|
||||||
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 operator declined to blur the `sindra-nude-*` booths for now** — he
|
⚠ **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
|
will do it himself once the control lands. **Do not blur them on his behalf.**
|
||||||
behalf.**
|
- 🛑 **NO `1.0.0` YET** (operator, 2026-09-23). The tag stays `1.0.0b1`; no
|
||||||
- ✅ **RULINGS 2026-09-23:** `×` (wipe) **hides** with the other Desk controls
|
further pre-release until the arc lands, and the arc now includes the flow
|
||||||
on hover; the theme toggle **reaches** `.bk-ask` chrome inside verbatim pages;
|
redesign, compare mode and the Desk revisions still in flight. ⚠ Do not cut a
|
||||||
global unblur is **reading A** (per-booth, tab-scoped, nothing persisted);
|
release because the suite is green and ROADMAP looks complete — **it has
|
||||||
**no `1.0.0` yet.**
|
looked complete twice already.**
|
||||||
⚠ The hover ruling looked like it reversed design-dev's "nothing hides behind
|
- 🔶 **COMPARE MODE (r3) is ruled INTO this arc** and unparked; design-dev
|
||||||
hover" argument; he resolved it WITHOUT an overrule via
|
starts it after the two merges land. The item-record work it needs is ours,
|
||||||
`@media (hover: hover)` — hidden-until-hover only where hover exists, own line
|
not deferred — he tells us what a compare view wants from `booth_items`.
|
||||||
on touch. Do not re-raise it as a conflict.
|
- 🛑 **STANDING: NO ANNOUNCEMENTS out of this repo until the whole arc is done,
|
||||||
- ✅ **ALL FOUR FLOW RULINGS ARE IN — A+B, compare THIS ARC, plain voice, no
|
and the operator sends that one himself.** Do not offer, draft-and-await, or
|
||||||
emblem** (operator via Miranda D-0016, 2026-09-23 08:07). Every one took
|
raise it.
|
||||||
design-dev's recommendation; no notes attached. **booth-dev is the SOLE RELAY
|
- ⚠ **`booth/__init__.py` IS A FOURTH STDLIB-ONLY MODULE** — `scripts/booth`
|
||||||
— the operator will not brief design-dev directly.** Verbatim copy at
|
executes it before every documented one. Covered by `test_stdlib_only`.
|
||||||
`docs/rulings/2026-09-23-flow-direction.json`.
|
- ⚠ **Read the staged ref, never a SHA written here** — design-dev rebases and
|
||||||
→ `persistent-memory.d/2026-09-23-the-flow-rulings-and-what-they-cost-the-beta.md`
|
rewrites it in place. `git show-ref | grep svos`, then `git merge-tree`.
|
||||||
- ⚠ **ANSWERING A PICK REMOVES THE HOLD THAT PROTECTED THE RECORD.** A booth is
|
- **770 green on a clean run; 49+ falsifiers proved across three mutation
|
||||||
held while a question is OPEN; the moment it is answered it becomes the record
|
tables (`scripts/mutation_check.py`). Tree clean, pushed, 0 ahead.**
|
||||||
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.
|
|
||||||
|
|
||||||
⚠ **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
|
## 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 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 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`
|
- `[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