The two dated log sections had never been split, so every one of their 29 entries sat inline and the startup index had grown to 372 lines — which is the cost the two-tier scheme exists to remove, paid on every session that reads the file. 27 entries were over threshold. All 29 now have a detail file under persistent-memory.d/ and a one-line index entry that routes rather than restates. Index: 372 -> 93 lines. No archival. The soft cap fired, but every entry in this repo is dated 2026-09-21 or later, so the under-14-days guard held all of them back — and the split alone took the index well under the target without moving anything out of the active file. The in-flight section is rewritten for the post-release state: nothing is in flight, no gate is outstanding, and the next unit is explicitly recorded as the operator's undecided call rather than as a plan. The session's recommendation (U4, on three grounds) is written down so it does not have to be re-derived, alongside the two alternatives and why they are alternatives. Two dated predictions are carried forward with their dates and their instruments: the U5 adoption re-measure on 2026-09-29, which already reads 3 of 24 announced and 2 with a why from peers told nothing, and the .forever re-count a fortnight AFTER U4 lands, which is U4's own success criterion and is destroyed by running it early.
20 lines
1.1 KiB
Markdown
20 lines
1.1 KiB
Markdown
# The U2 bug-hunt panel was not ceremony
|
|
|
|
_2026-09-22 · booth_
|
|
|
|
**The U2 bug-hunt panel landed and it was not ceremony —
|
|
`v0.2.2`.** Nine adopted findings across four arms; eight were real against
|
|
live code and one was already fixed. The headline was **4/4 convergent from
|
|
four different angles**: `_Locked.__exit__` unlinked `.marks.lock` on the no-op
|
|
path, and `flock` binds to an INODE — so a writer blocked on the old inode
|
|
proceeds while the next writer creates a fresh lock file and takes it at once.
|
|
Two processes then run the read-modify-write concurrently and the later
|
|
`os.replace` drops a mark, with both of them obeying the protocol. **The
|
|
cleanup existed to protect the booth's TTL and it was failing at that too**:
|
|
creating and removing a directory entry bumps the DIRECTORY's mtime, which is
|
|
what `_newest_mtime` actually seeds from, so a no-op reset the clock it was
|
|
written to leave alone. Same code region, two defects, one fix — never unlink
|
|
the lock, exempt `.<name>.lock` dotfiles from `_newest_mtime`, and put the
|
|
directory's mtime back after creating one. Full triage in
|
|
`persistent-memory.d/2026-09-22-bug-hunt-panel.md`.
|