fix: run-2 cascade (per-name cleanup), and claude on exec's PATH #20
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#20
Loading…
Reference in a new issue
No description provided.
Delete branch "drill/run2-fixes"
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 2 of the drill (#15) scored 42/49 and answered most of the audit. This PR fixes what it exposed — one drill defect and one real claudebox bug — so run 3 can answer the last open probe (A3, sibling isolation).
The cascade (drill defect, 5 of the 7 FAILs)
incus delete -f drill clone archive peer …aborts at the first missing name. Run 1 was interrupted afterdrillwas renamed toarchive, so run 2's cleanup died on the missingdrilland inherited run 1's boxes:listwasn't empty,rename drill → archivecollided with the stalearchive,peerhit a UNIQUE constraint (which is also why A3 went unprobed again), and the never-renameddrillsurvived teardown. Cleanup is now oneincus deleteper name, and teardown sweeps every name the drill can have left.The real bug:
claudebox exec box -- claude …cannot work on a fresh boxRun 2 proved the binary exists (
~/.local/binholdsclaude) yet the help's own example invocation fails: cloud-init exports PATH only in.bashrc/.zshrc, which the non-interactive shell behindexecnever reads — and since the box's login shell is zsh, evensudo -u claude -ireads neither. Fixed in cloud-init with a symlink into/usr/local/bin, which every shell sees. (Existing boxes/snapshots keep the old behavior until re-minted;claudebox shellwas never affected — interactive zsh reads.zshrc.)Also: the failure diagnostics were reading the escape hatch's
claudebox: incus exec …announce line instead of the command output (head -1); they now filter it and additionally probe the binary by full path, and the D-phase docker note reportssystemctl is-active docker.Banked by run 2 (no re-verification needed)
The whole boundary section of #15 minus A3: egress ✓, box→host blocked ✓, RFC1918 dropped ✓, host→box dropped ✓ (A7, new this run), IPv6 off ✓, DNS enumeration leaks as predicted ✓ — and phase D's two decisive answers:
dns.mode=noneis design-vetoed (it killed all DNS resolution in the box, not just sibling records) and@internalis unsupported on bridge ACLs (Unsupported nftables subject) ⇒ #16 derives the subnet insetup-host.sh. L2 filtering passed (box networking intact).Re-run after merge, same server (the drill resets run 2's dns.mode/filtering leftovers itself):
🤖 Generated with Claude Code