docs(readme): the isolation contract as it ships — and measured, not claimed #47

Merged
dan-claude-bot merged 1 commit from docs/readme-measured-isolation into main 2026-07-14 13:01:29 +00:00
dan-claude-bot commented 2026-07-14 12:47:11 +00:00 (Migrated from github.com)

Run 13 — full teardown-host.sh → rebuild → drill on the live host — came back 47 passed, 0 failed, on a run that built the entire stack from zero (including the pinned resolver via post-#45 setup-host.sh, on a Tailscale host, with the cold mint resolving through it). The README should say what that run proves.

Two sections updated:

Isolation — rewritten to state the contract layer by layer as it exists on main. The old text predated the #16 arc: it described the ACL and the host firewall, and none of what the audit actually shipped — security.port_isolation (the real sibling boundary, after the L3 reasoning failed), the nft bridge drop, dns.mode=none, the pinned resolver (#45). It now also says the quiet parts out loud: siblings are unreachable and unresolvable, IPv6-off is a contract term, and instance→host is closed except DNS/DHCP.

Measured, not claimed — new subsection. The one time this contract was reasoned about instead of measured, the reasoning was wrong (box→box "covered" by an L3 drop that switched frames never meet) — so the README now points at the instruments: doctor.sh (read-only, ground truth over config claims) and drill.sh (full end-to-end, with the warning that it mutates the host), the standing 47/47, and drill/RUNS.md as the history including every trap that fooled a run.

The host-setup paragraph gets the same truth-refresh: it now names sibling isolation and the pinned resolver (BOX_DNS override included) among what it creates.

🤖 Generated with Claude Code

Run 13 — full `teardown-host.sh` → rebuild → drill on the live host — came back **47 passed, 0 failed**, on a run that built the entire stack from zero (including the pinned resolver via post-#45 `setup-host.sh`, on a Tailscale host, with the cold mint resolving through it). The README should say what that run proves. Two sections updated: **Isolation** — rewritten to state the contract layer by layer *as it exists on main*. The old text predated the #16 arc: it described the ACL and the host firewall, and none of what the audit actually shipped — `security.port_isolation` (the real sibling boundary, after the L3 reasoning failed), the nft bridge drop, `dns.mode=none`, the pinned resolver (#45). It now also says the quiet parts out loud: siblings are unreachable *and unresolvable*, IPv6-off is a contract term, and instance→host is closed except DNS/DHCP. **Measured, not claimed** — new subsection. The one time this contract was reasoned about instead of measured, the reasoning was wrong (box→box "covered" by an L3 drop that switched frames never meet) — so the README now points at the instruments: `doctor.sh` (read-only, ground truth over config claims) and `drill.sh` (full end-to-end, with the warning that it mutates the host), the standing 47/47, and `drill/RUNS.md` as the history including every trap that fooled a run. The host-setup paragraph gets the same truth-refresh: it now names sibling isolation and the pinned resolver (`BOX_DNS` override included) among what it creates. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/box#47
No description provided.