Files

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 none forwarder 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

  1. 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 is core-entry.mjs inside the container, not the host. What the container sees when the docker run -i client is killed is not in S8 (agents/researcher/work/i1-spikes/REPORT.md:472-521 covers stdin delivery and docker stop/docker kill of the container, not loss of the client) and is not stated in the design. If the container keeps running, the next mosaic bus start starts a second core container, and two brokers run on one store and one sock/human. The design gives the core container no name or label rule (section 6's --name and --label at 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

  1. design.md:505, in "The session record": "refuses unknown keys (packages/bus/src/broker.mjs:379-383)". At ac55e84fe that range is the thread-list mapper; bindLaunch and its keys() check are at broker.mjs:390-395, moved by row 143.
  2. design.md:95: "the launch ops (packages/bus/src/process.mjs:5-12)": the LAUNCH_OPS set runs 5-20 (fourteen ops, through threadIdle). 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>.tmp and .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-required when process.send is 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 (bindLaunch with child.pid and outerStart) and 326-328 (the four pid fields); runtime.mjs:84-91 (integer pid of at least 2, digit-string start time); human.mjs:80 (the launches match in the ancestry walk). Keeping pid and startTime as the client's leaves bindLaunch and packages/bus unchanged, 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 none claims as not spiked, with I6 tests for both.
  • The sock/human and sock/relay paragraph 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.mjs three-way split is the same in both files.
  • recover()'s containerized steps still end each leftover run host-lost after the client kill and bindLaunch with 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.