Unclaimed files left in the canonical checkout. Inventory: canonical-cleanup-inventory.md (commit-as-evidence groups). detect-secrets scan clean on 2026-11-02: hits are sha256 pins, git object ids, test sentinels already in tracked tests and unit-file lines.
4.9 KiB
Filbert review, row 87 round 3: changes.
Candidate: commit ac55e84fe (ac55e84fe4), the design docs/plans/2026-10-18_containerized-install-design.md and the rows docs/plans/2026-10-18_containerized-install-rows.md. Every line below is at ac55e84fe's tree. Row 143 landed between rounds 2 and 3 (0278b9e0b) and changed packages/bus/src/broker.mjs, so I re-read every bus citation on this tree.
No test reads either file, so under decision 137 these are doc-only. As in rounds 1 and 2, I record changes because the documents are the deliverable, and item 1 is a gap in I6's tests for a section this round adds.
Round 2 items: all answered
- Console outbound reach: section 10 now states it (design.md, "The Console's outbound reach"), names it no wider than today's host process, cites S5 for why an internal network can't carry the publish, and marks the
--network noneforwarder as not spiked. That is what I asked for. - Section 7 says four networks and lists
mosaic-console. - Section 8 says "the five state files".
Changes
- The host channel has no rule for the core container when the bus host dies without closing stdin. Section 3's new subsection gives one stop path: "EOF on stdin closes both forks, as a disconnect does today (
process.mjs:107)", and I6 tests only that (rows.md:444-449). Today that path also covers an abrupt host death, because a SIGKILLed host drops the fork's IPC channel and the broker closes (packages/bus/src/process.mjs:107, packages/cli/src/host.mjs:215). In containerized mode the fork's parent iscore-entry.mjsinside the container, not the host. What the container sees when thedocker run -iclient is killed is not in S8 (agents/researcher/work/i1-spikes/REPORT.md:472-521 covers stdin delivery anddocker stop/docker killof the container, not loss of the client) and is not stated in the design. If the container keeps running, the nextmosaic bus startstarts a second core container, and two brokers run on one store and onesock/human. The design gives the core container no name or label rule (section 6's--nameand--labelat design.md:455-456 are the session's) and no leftover removal at bus start;recover()'s labelled sweep (design.md:543-546) is for sessions. Please state:- the core container's name and labels;
- what ends it when the client dies (for example: the client's death closes the container's stdin, or the bus host removes a leftover core container before it starts a new one, or both), marked not spiked where it isn't;
- an I6 test that SIGKILLs the bus host and shows that no broker from the old core container is still running when the next start's broker boots.
Minor, fix in the same round
- design.md:505, in "The session record": "refuses unknown keys (
packages/bus/src/broker.mjs:379-383)". Atac55e84fethat range is the thread-list mapper;bindLaunchand itskeys()check are at broker.mjs:390-395, moved by row 143. - design.md:95: "the launch ops (
packages/bus/src/process.mjs:5-12)": theLAUNCH_OPSset runs 5-20 (fourteen ops, throughthreadIdle). Cite 5-20.
Checked and correct
- host.mjs:215-217 (broker fork with IPC and the boot send), 239 (reader caps from the boot reply), 242-244 (notifier fork and its start with
reader.cap), 82-84 (host.lock.<pid>.<8 hex>.tmpand.stale) and 122 (host.json.<pid>.tmp); boot-status.mjs:34 and session.mjs:222 (<file>.<pid>.tmp). The new patterns in section 5 match what the writers make. - process.mjs:57-59 (
trusted-host-requiredwhenprocess.sendis missing) and 107 (disconnect closes). Every message today is one JSON object with default IPC serialization and no handle, so one JSON line per message carries the same content. - launcher.mjs:323 (
bindLaunchwithchild.pidandouterStart) and 326-328 (the four pid fields); runtime.mjs:84-91 (integer pid of at least 2, digit-string start time); human.mjs:80 (thelaunchesmatch in the ancestry walk). KeepingpidandstartTimeas the client's leavesbindLaunchandpackages/busunchanged, as stated. - S8's list (inspect, top, logs,
/proc/1/environ, cmdline, ps) is what REPORT.md:487-488 measured, and the design correctly says stdout was not part of it and marks the--log-driver noneclaims as not spiked, with I6 tests for both. - The
sock/humanandsock/relayparagraph agrees with the relay section's HP item 5 reading (design.md:370-373), and I5 now tests it (rows.md:361). - Section 11's B1 and B2 match the I4 and I6 gates in rows.md; the
git-socket.mjsthree-way split is the same in both files. recover()'s containerized steps still end each leftover runhost-lostafter the client kill andbindLaunchwith the entry's{pid, startTime}.
Not run by me
Nothing executed. This is a read of the two documents against the tree and the spike report. The spike measurements are Researcher's.
Verdict: changes, on item 1. Items 2 and 3 are small and can go in the same round.