release: 0.7.0 #95

Merged
dan-claude-bot merged 1 commit from release/0.7.0 into main 2026-07-19 14:24:18 +00:00
dan-claude-bot commented 2026-07-19 13:44:36 +00:00 (Migrated from github.com)

The release: X.Y.Z PR of the ceremony (CONTRIBUTING "Releasing", #83): VERSION 0.6.1-dev → 0.7.0, ## Unreleased stamped ## 0.7.0 — 2026-07-19. After merge, the merge commit gets the bare 0.7.0 tag and release.yml publishes with the stamped section as body. A follow-up PR then bumps main to 0.7.1-dev.

Why 0.7.0 (not 0.6.1): since 0.6.0 main gained the versioned install layout (#79), the three-channel installer + self-publishing releases (#83), label automation (#84), and this week's fix round — a feature release, not a patch.

Drill evidence (both runs on 2026-07-19, before and after the fix round): drill/drill.sh 85/0 on real incus VMs twice; test/cli.sh 411/0, test/release.sh 47/0; all three install channels exercised against real GitHub (default resolves the latest release; the drill's default-channel install of 0.6.0 also surfaced #92, fixed on this tree); the full ceremony rehearsed on a scratch fork — mismatched tag and missing-changelog-section both fail loudly creating nothing, the real path publishes with the curated body, and a live default-channel install from that rehearsal release resolved and ran. Extraction of this PR's own section pre-verified locally (release-notes.sh 0.7.0).

🤖 Generated with Claude Code

The `release: X.Y.Z` PR of the ceremony (CONTRIBUTING "Releasing", #83): `VERSION` 0.6.1-dev → **0.7.0**, `## Unreleased` stamped `## 0.7.0 — 2026-07-19`. After merge, the merge commit gets the bare `0.7.0` tag and `release.yml` publishes with the stamped section as body. A follow-up PR then bumps main to `0.7.1-dev`. **Why 0.7.0** (not 0.6.1): since 0.6.0 main gained the versioned install layout (#79), the three-channel installer + self-publishing releases (#83), label automation (#84), and this week's fix round — a feature release, not a patch. **Drill evidence (both runs on 2026-07-19, before and after the fix round):** `drill/drill.sh` **85/0** on real incus VMs twice; `test/cli.sh` 411/0, `test/release.sh` 47/0; all three install channels exercised against real GitHub (default resolves the latest release; the drill's default-channel install of 0.6.0 also surfaced #92, fixed on this tree); the full ceremony rehearsed on a scratch fork — mismatched tag and missing-changelog-section both fail loudly creating nothing, the real path publishes with the curated body, and a live default-channel install from that rehearsal release resolved and ran. Extraction of this PR's own section pre-verified locally (`release-notes.sh 0.7.0`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
danmt (Migrated from github.com) reviewed 2026-07-19 13:44:36 +00:00
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 14:04:05 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: I agree with everything and have no additional feedback.

Verdict: I agree with everything and have no additional feedback.
claude-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 14:08:26 +00:00
claude-bot-andresmgsl (Migrated from github.com) left a comment

Approve — the release mechanics are correct, verified at head 07c0edd.

Verified:

  • Version bump: VERSION 0.6.1-dev0.7.0, exactly the CONTRIBUTING.md:48-49 ceremony. bin/box:15 reads VERSION at runtime, so there is no second version string to bump; every other 0.6.0/0.7.0 hit in the tree (install.sh:19-158, README.md:97, release.yml, release-notes.sh) is prose about the migration/ritual, correctly untouched.
  • CHANGELOG stamp: ## Unreleased## 0.7.0 — 2026-07-19 (CHANGELOG.md:6), same header format as the 0.6.0 — 2026-07-18 section, and .github/scripts/release-notes.sh 0.7.0 extracts the section cleanly (exit 0) — release.yml will publish it as-is.
  • CHANGELOG completeness: cross-checked against git log 0.6.0..HEAD (60 commits, 12 merged PRs). Every tool-facing PR is covered: #90 (#83 release flow), #91/#86 (#80 subnet), #88/#82 (#81 templates), #89 (UFW converge), #79 (#66 versioned installs), #78 (#70 export/import), #94 (#93 launch timeout). The omissions (#84 LABELS.md, #85/#87 labels workflow) are repo-process automation, not the tool — a reasonable line.
  • No smuggled changes: the diff is exactly two files, two hunks.
  • Base freshness: current origin/main (24797c9) is an ancestor of the head — the stamped section describes the tree that will be tagged.
  • Tests at head: test/cli.sh 411/0, test/release.sh 47/0. PR is labeled release per CONTRIBUTING.md:79.

Non-blocking nits (fine to take as follow-ups or fold in before tagging):

  1. README release callout not added — README.md:29 still leads with > **0.6.0**: multi-user support. Both prior releases added the new highlight line (0.5.0 via PR #56, 0.6.0 via commit 77599ab, which touched README alongside VERSION+CHANGELOG). After the tag, the README's latest-release blurb will lag the release it ships in.
  2. drill/RUNS.md has no 2026-07-19 entry — CONTRIBUTING.md:51-54 says the release ritual's full drill is "recorded in drill/RUNS.md", but the two 85/0 runs (and the #92/#93 finds they surfaced) live only in this PR's body; RUNS.md's run history (drill/RUNS.md:194) ends at MU-5. Since RUNS.md's stated purpose is diagnosing the next stall without starting from zero, the PR body is a lossy place for that evidence.

automated review by claude-bot-andresmgsl · heavy-duty-review-bot

**Approve** — the release mechanics are correct, verified at head `07c0edd`. **Verified:** - **Version bump**: `VERSION` `0.6.1-dev` → `0.7.0`, exactly the CONTRIBUTING.md:48-49 ceremony. `bin/box:15` reads `VERSION` at runtime, so there is no second version string to bump; every other `0.6.0`/`0.7.0` hit in the tree (install.sh:19-158, README.md:97, release.yml, release-notes.sh) is prose about the migration/ritual, correctly untouched. - **CHANGELOG stamp**: `## Unreleased` → `## 0.7.0 — 2026-07-19` (CHANGELOG.md:6), same header format as the `0.6.0 — 2026-07-18` section, and `.github/scripts/release-notes.sh 0.7.0` extracts the section cleanly (exit 0) — release.yml will publish it as-is. - **CHANGELOG completeness**: cross-checked against `git log 0.6.0..HEAD` (60 commits, 12 merged PRs). Every tool-facing PR is covered: #90 (#83 release flow), #91/#86 (#80 subnet), #88/#82 (#81 templates), #89 (UFW converge), #79 (#66 versioned installs), #78 (#70 export/import), #94 (#93 launch timeout). The omissions (#84 LABELS.md, #85/#87 labels workflow) are repo-process automation, not the tool — a reasonable line. - **No smuggled changes**: the diff is exactly two files, two hunks. - **Base freshness**: current `origin/main` (24797c9) is an ancestor of the head — the stamped section describes the tree that will be tagged. - **Tests at head**: `test/cli.sh` 411/0, `test/release.sh` 47/0. PR is labeled `release` per CONTRIBUTING.md:79. **Non-blocking nits** (fine to take as follow-ups or fold in before tagging): 1. **README release callout not added** — README.md:29 still leads with `> **0.6.0**: multi-user support.` Both prior releases added the new highlight line (0.5.0 via PR #56, 0.6.0 via commit 77599ab, which touched README alongside VERSION+CHANGELOG). After the tag, the README's latest-release blurb will lag the release it ships in. 2. **drill/RUNS.md has no 2026-07-19 entry** — CONTRIBUTING.md:51-54 says the release ritual's full drill is "recorded in drill/RUNS.md", but the two 85/0 runs (and the #92/#93 finds they surfaced) live only in this PR's body; RUNS.md's run history (drill/RUNS.md:194) ends at MU-5. Since RUNS.md's stated purpose is diagnosing the next stall without starting from zero, the PR body is a lossy place for that evidence. — _automated review by `claude-bot-andresmgsl` · heavy-duty-review-bot_
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 14:09:59 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: Approve — I agree with this as-is.

Why

  • Pure ceremony tree: VERSION 0.6.1-dev0.7.0, ## Unreleased## 0.7.0 — 2026-07-19. Exactly two files, no smuggled code.
  • Minor→feature bump rationale (versioned install, installer/releases, fix round) is coherent with the stamped section content.
  • CI green including rehearsal; release-notes extraction of 0.7.0 is what release.yml will publish.

No blockers.

**Verdict: Approve** — I agree with this as-is. ### Why - Pure ceremony tree: `VERSION` `0.6.1-dev` → `0.7.0`, `## Unreleased` → `## 0.7.0 — 2026-07-19`. Exactly two files, no smuggled code. - Minor→feature bump rationale (versioned install, installer/releases, fix round) is coherent with the stamped section content. - CI green including rehearsal; release-notes extraction of `0.7.0` is what `release.yml` will publish. No blockers.
dan-claude-bot commented 2026-07-19 14:14:11 +00:00 (Migrated from github.com)

@danmt — handing this one to you. Final state:

What it is: the release: 0.7.0 PR of the ceremony (#83): VERSION 0.6.1-dev → 0.7.0, ## Unreleased stamped ## 0.7.0 — 2026-07-19. After you merge, tag the merge commit bare 0.7.0 and push — release.yml asserts tag==VERSION and publishes with the stamped section as body. I'll follow up with the 0.7.1-dev bump PR right after.

Why 0.7.0: since 0.6.0, main gained the versioned install layout (#79), the three-channel installer + self-publishing releases (#83), label automation (#84), and this week's #92/#93/#94 fixes — a feature release.

Evidence: drilled twice on 2026-07-19 (before and after the fix round): drill/drill.sh 85/0 on real incus VMs both times; suites 411/0 + 47/0; all three install channels live against real GitHub; the full ceremony rehearsed on a scratch fork including both failure guards and a live default-channel install from the rehearsal release. This PR's own section extraction pre-verified with release-notes.sh 0.7.0.

Review history: one round — all three bots approved, no changes requested.

Ready for your review — this one's merge starts the first real release.

🤖 Generated with Claude Code

@danmt — handing this one to you. Final state: **What it is:** the `release: 0.7.0` PR of the ceremony (#83): `VERSION` 0.6.1-dev → 0.7.0, `## Unreleased` stamped `## 0.7.0 — 2026-07-19`. After you merge, tag the merge commit bare `0.7.0` and push — `release.yml` asserts tag==VERSION and publishes with the stamped section as body. I'll follow up with the `0.7.1-dev` bump PR right after. **Why 0.7.0:** since 0.6.0, main gained the versioned install layout (#79), the three-channel installer + self-publishing releases (#83), label automation (#84), and this week's #92/#93/#94 fixes — a feature release. **Evidence:** drilled twice on 2026-07-19 (before and after the fix round): `drill/drill.sh` 85/0 on real incus VMs both times; suites 411/0 + 47/0; all three install channels live against real GitHub; the full ceremony rehearsed on a scratch fork including both failure guards and a live default-channel install from the rehearsal release. This PR's own section extraction pre-verified with `release-notes.sh 0.7.0`. **Review history:** one round — all three bots approved, no changes requested. Ready for your review — this one's merge starts the first real release. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
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#95
No description provided.