docs(readme): the isolation contract as it ships — and measured, not claimed #47
No reviewers
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:cli
scope:drill
scope:host
scope:installer
scope:templates
scope:tiers
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/box#47
Loading…
Reference in a new issue
No description provided.
Delete branch "docs/readme-measured-isolation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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-#45setup-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) anddrill.sh(full end-to-end, with the warning that it mutates the host), the standing 47/47, anddrill/RUNS.mdas 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_DNSoverride included) among what it creates.🤖 Generated with Claude Code