2025-09-10T17:42:32Z - 2026-09-10T17:42:32Z
Overview
4 releases published by 1 user
Published
0.9.0
0.9.0
Published
0.8.0
0.8.0
Published
0.7.0
0.7.0
Published
0.6.0
0.6.0
89 pull requests merged by 1 user
Merged
#148 release: 0.9.0
Merged
#151 refactor: one drill record per version, in drills/
Merged
#149 feat: CI refuses a release PR with no drill record
Merged
#147 docs(changelog): one line per entry, and a pass over the whole file
Merged
#146 fix: the release suite accepts the ceremony's own tree
Merged
#132 feat: mark 'bootstrapped' after a rig hook box watched succeed
Merged
#133 feat: box import records the trip, without rewriting who the box was
Merged
#128 feat: snapshot 'pristine' at mint, before the rig bootstrap hook
Merged
#127 fix: the racing-reader sweep guards the class, and revoke-user captures the trust store
Merged
#129 feat: a minted box records how it was minted, and box info reads it back
Merged
#120 fix: drill/wipe.sh reads ufw into a capture, not into an early-exit reader
Merged
#119 fix: teardown-host refuses a terminal-less run instead of aborting mute
Merged
#144 fix(changelog-monotonic): check uniqueness before anything base-side
Merged
#142 fix(labels): sweep on labeled so the handoff is immediate
Merged
#139 docs(contributing): document the blocker axis and merge-next ownership
Merged
#138 refactor(labels): split PR labels into state (whose ball) and blocker (what is in the way)
Merged
#137 fix(labels): state:needs-human means a human could merge it right now
Merged
#121 fix: run setup-host over a migrated flat tree, and name what the migration left
Merged
#126 fix: refuse a PR that deletes a shipped changelog heading
Merged
#118 fix: lint the release path — globstar does not descend into dot-directories
Merged
#125 refactor(templates): the tenant seeds carry rig's -box family suffix
Merged
#114 release: 0.8.0
Merged
#112 fix: Ctrl-D at a confirm prompt aborts out loud, not in silence (#111)
Merged
#110 fix: the release ceremony re-arms CHANGELOG.md, and CI keeps main armed (#108)
Merged
#109 fix: box restore asks before it destroys, in its own words (#105)
Merged
#106 fix: the fresh-UFW test block no longer flakes on a missing log
Merged
#101 fix: box grant provisions incus-admin members instead of refusing them
Merged
#97 feat: merging a release-labeled PR is the release
Merged
#98 chore: bump main to 0.7.1-dev
Merged
#95 release: 0.7.0
Merged
#94 fix: narrate and time-box the incus launch — a wedge fails loudly, not forever (#93)
Merged
#90 feat: release flow — install-from-tag, release.yml, and -dev versions (#83)
Merged
#91 feat(setup-host): auto-pick a free subnet — nested box-in-box with zero flags (#80)
Merged
#89 box-firewall: converge the UFW carve-out off the live bridge; fail closed at boot (#86 follow-up)
Merged
#88 feat: thin templates — box mints, rig converges (#81)
Merged
#86 setup-host: refuse a claimed subnet (#80); BOX_SUBNET end-to-end; doctor learns the gateway-squat signature
Merged
#87 fix: base the human auto-request on this handoff, not review history
Merged
#85 feat: label automation — state reconciler, path-scoped labeler, and CONTRIBUTING
Merged
#82 feat: BOX_REQUIRE_VM / BOX_AUTOSTART template keys + dynamic template test suite
Merged
#78 feat: box export / import — state that survives the box and the host (#70)
Merged
#79 feat: versioned installs, and a real uninstall
Merged
#84 docs: LABELS.md — the label taxonomy (states, stale/blocked, scopes)
Merged
#75 Restricted incus tier: per-user projects converged onto hardened boxnet (#74)
Merged
#66 Make host setup complete in one run, and let the installer run it
Merged
#73 feat: global install (#71), tmux (#65), CI + tests; folds #66
Merged
#62 fix(doctor): a fresh host is not a dirty one
Merged
#61 fix(install): the rename broke every install — stop guessing the tarball's top dir
Merged
#60 docs(readme): how to run the drill against the latest version
Merged
#58 docs: make the box narrative agent-agnostic, not Claude-specific
Merged
#59 feat(new): inline resource overrides — --cpu, --memory, --disk
Merged
#56 release: box 0.5.0 — codex+grok templates, migrate-host, box expose
Merged
#52 feat!: claudebox becomes box — the Claude box is one template among several
Merged
#51 fix: create the storage pool deliberately — btrfs, because cloning is the whole point
Merged
#50 feat: 'claudebox doctor' — the host-health checks as a first-class verb
Merged
#49 feat: 'claudebox tmux <box> [session]' — a shell that survives you
Merged
#48 docs(drill): record runs 11–13 — the contract measured at zero, from a bare host
Merged
#47 docs(readme): the isolation contract as it ships — and measured, not claimed
Merged
#45 fix: pin claudenet's resolver — a box's DNS is not a function of the host's VPN
Merged
#44 fix(drill): stop demanding an empty host — assert OUR boxes, not NO boxes
Merged
#43 fix(doctor): the gateway does not answer ping — by design, so stop asking
Merged
#42 fix(doctor): pin the probes' stdin — an interactive exec cannot be timed out
Merged
#41 fix(drill): read curl's message — the exit code cannot tell you what happened
Merged
#40 fix(doctor): four checks that lied, and none of them about a real fault
Merged
#36 docs(drill): the audit is complete — boxes are not isolated from each other
Merged
#39 fix(doctor): read the isolation off the bridge, not off the config
Merged
#38 fix: isolate boxes with the bridge's port-isolation flag
Merged
#37 fix: boxes could reach each other — isolate them at the bridge
Merged
#35 fix(doctor): check that something is actually serving the network
Merged
#34 fix: a failed cold mint must say why; doctor gains DNS diagnosis and --pin-dns
Merged
#32 fix(drill): stop poisoning the host, and add a doctor to prove it
Merged
#31 fix(drill): refuse to judge #16 on a broken baseline
Merged
#30 fix: the clone identity reset could never reboot, so it never took effect
Merged
#28 fix(drill): the NIC inside a VM is enp5s0, not eth0 — read the address by subnet
Merged
#27 fix: a clone must not inherit its source's identity (two boxes, one IP)
Merged
#25 fix(drill): clean the host before setup-host, and bound it
Merged
#24 fix(drill): stop going silent through host setup, and keep the run log in the repo
Merged
#23 fix(drill): delete every listener — refused-vs-dropped already answers it
Merged
#22 fix(drill): no in-box probe can hang the run again
Merged
#21 fix(drill): read eth0 from inside the box; settle the flaky dns.mode verdict
Merged
#20 fix: run-2 cascade (per-name cleanup), and claude on exec's PATH
Merged
#19 fix: first-run drill defects — pipefail false FAILs, exec-pty hang, DHCP race
Merged
#18 test: add an end-to-end drill against a real Incus
Merged
#13 feat: make the command surface a table, add rename and an escape hatch
Merged
#10 fix: standard help, honest flags, and an rm that asks first
Merged
#9 feat: add claudebox list, with snapshot labels
Merged
#5 fix: preinstall the GitHub CLI in boxes
Merged
#4 feat: drop the claude- instance-name prefix
Merged
#2 fix: install from the public canonical repo
Merged
#1 Import claudebox: creds-free, trust-less Claude Code VMs
57 issues closed from 1 user
Closed
#135 changelog: seed ## Unreleased with all three section headings, and let the -dev bump write them
Closed
#145 labels: state:needs-human is sticky again — the reconciler cannot tell its own human-request from a maintainer's
Closed
#156 Box import command not working
Closed
#130 box: mark bootstrapped after a successful rig hook
Closed
#131 box import records nothing about the import event — and origin=import is the wrong fix
Closed
#104 Snapshot 'pristine' at mint, before the rig bootstrap hook
Closed
#124 The racing-reader sweep pins '| grep' only, and the same shape exists outside ufw (revoke-user.sh:206)
Closed
#103 A minted box records nothing about how it was minted
Closed
#107 drill/wipe.sh carries the #102 SIGPIPE shape — safe only because it lacks pipefail
Closed
#113 teardown-host.sh has no [ -t 0 ] gate: a non-interactive run without --yes dies mute
Closed
#143 changelog-monotonic: the uniqueness half is gated behind base-side conditions it does not need
Closed
#141 labels: sweep on labeled so the handoff is immediate, and let the author set state:needs-human
Closed
#136 labels: state:needs-human is sticky and blind to mergeability, and nothing says which PR to merge next
Closed
#115 An upgrade over a pre-0.7.0 flat /opt/box skips setup-host: box --version says 0.8.0 while box-firewall stays pre-#102
Closed
#117 The pre-0.7.0 migration manufactures a version entry nobody installed, and never mentions it
Closed
#122 changelog-armed.sh does not notice a deleted release heading — a PR can erase a shipped section and CI stays green
Closed
#116 CI's shellcheck sweep never lints .github/scripts/*.sh — globstar does not descend into dot-directories
Closed
#123 templates: suffix the seeds -box, and follow rig's tenant role rename
Closed
#111 confirm() swallows Ctrl-D: an interactive abort exits 1 in silence, never reaching 'aborted.'
Closed
#108 The ceremony disarms CHANGELOG.md: a PR predating a release lands its Unreleased entry inside the shipped section, silently
Closed
#105 box restore destroys without asking
Closed
#102 box-firewall takes the no-UFW branch on a UFW host (SIGPIPE under pipefail); surfaced as a test flake
Closed
#99 box grant refuses incus-admin members, leaving them with no project
Closed
#100 Box manifest
Closed
#96 Merging a release-labeled PR should BE the release — auto-tag + publish on merge, version transition as the interlock
Closed
#92 0.6.0 setup-host leaves a stale ACL gateway carve-out when boxnet's subnet moved — fixed on main, evidence for cutting 0.6.1
Closed
#93 Intermittent: 'box new' hangs before the instance exists — incus launch client wedges with no server-side operation
Closed
#83 release flow: install-from-tag, release automation, and a -dev version convention
Closed
#81 thin templates — tenant content moves to rig bootstrap roles; templates shrink to creds-free seeds
Closed
#80 Running box setup-host inside a box creates a nested boxnet on the same hardcoded 10.88.0.0/24 as the guest's own uplink, causing intermittent egress blackouts
Closed
#68 Server-class boxes: staging template for control-plane-managed staging VMs
Closed
#70 box export: a box's state that survives the box (and the host)
Closed
#67 Version-aware install: migrate boxes across an upgrade instead of refusing
Closed
#77 Oh my zsh is nnot being properly configured in the claude template
Closed
#65 Fix: Box should come with tmux installed to support the box tmux command
Closed
#71 Global install: root branch in install.sh for multi-user hosts
Closed
#76 Surface the box version
Closed
#72 Multi-user hosts: make box work in per-user Incus projects (restricted incus tier)
Closed
#74 Restricted incus tier: redesign around incus-user's per-user bridge (Task-0 findings)
Closed
#64 Andres: The install.sh file should run the box setup-host itself (avoid user interaction)
Closed
#63 Andres: Fix the doblue box setup-host command
Closed
#57 box new: inline resource overrides (--cpu / --memory / --disk)
Closed
#55 'box expose <box> <port>' — a deliberate, loopback-only door to a box's dev server
Closed
#53 host/migrate-host.sh — re-home legacy boxes onto the new stack, then retire the old one
Closed
#54 Two new templates: codex (OpenAI Codex CLI) and grok (xAI's CLI)
Closed
#17 Reframe claudebox as box: the Claude box is one template among several
Closed
#29 setup-host takes 'dir' storage — every clone is a full disk copy, and cloning is the whole point
Closed
#46 claudebox needs a 'doctor' verb — every fault the drill's doctor catches is a user's fault too
Closed
#6 Add 'claudebox tmux <box> [session]' — attach-or-create a named tmux session in the box
Closed
#33 On a Tailscale host, boxes inherit the tailnet's DNS — flaky resolution, and tailnet names resolve from inside a box
Closed
#26 Incus daemon wedged on the drill host — forensics before reprovisioning
Closed
#16 🔴 Boxes are NOT isolated from each other — sibling isolation does not hold (confirmed live)
Closed
#15 Audit the isolation stack: verify the box boundary behaves as designed
Closed
#12 Reframe claudebox as box: the Claude box is one template, and sibling isolation should be deliberate
Closed
#11 Stop proxying incus one verb at a time: a rule for what claudebox owns, a table to add it, and a door out
Closed
#8 claudebox help is a sed of its own header, and the flags it advertises are not real
Closed
#7 Add claudebox list — no way to see your boxes, and none at all to see their snapshots
9 issues created by 2 users
Opened
#134 the racing-reader class sweep does not cover bin/box, where an exposure teardown fails open
Opened
#140 A box has no stable identity — the name is the key, and rename silently breaks it
Opened
#150 RIG_REF defaults to main — a released box never converges a released rig
Opened
#152 The drill emits no record — every field the gate asks for is retyped by hand, and the shared run ID has no mechanism at all
Opened
#153 A skipped phase reports a clean sweep — the drill counts what it ran, never how much it should have run
Opened
#154 drill/README.md documents four phases; the script prints six, in a different order, and --help repeats the stale text
Opened
#155 The next release must carry a real drill record, not a waiver
Opened
#157 Shared boxes
Opened
#158 cmd_import: sanitize the artifact's volatile config before incus import — a restricted project refuses it, and the tier cannot re-import its own exports