release: 0.1.0 #110

Merged
dan-claude-bot merged 1 commit from release/0.1.0 into main 2026-07-19 18:02:54 +00:00
dan-claude-bot commented 2026-07-19 14:24:48 +00:00 (Migrated from github.com)

The release: X.Y.Z PR of the ceremony (#96): package.json already reads 0.1.0 (it has since the first commit — the bump is a no-op), so this PR is the CHANGELOG stamp: ## Unreleased## 0.1.0 — 2026-07-19. After merge, tag the merge commit bare 0.1.0 and push — release.yml asserts tag==version, builds the prebuilt cast-0.1.0.tgz (bin + dist + pruned node_modules), and publishes with the stamped section as body. Follow-up bumps main to 0.1.1-dev.

This is cast's first release — the installer's default channel goes live: curl … install.sh | bash stops refusing, resolves 0.1.0, and installs the prebuilt asset with no npm and no tsc on the operator's machine.

Evidence (2026-07-19, twice — before and after the fix round): suites 606/606; two live Coolify 4.1.2 instances driven through the full A→B flow (apply/diff idempotent, smoke's bulk-upsert contract on both, fleet coverage, destroy interlock); the ceremony rehearsed on a scratch fork including the real asset build — cast-0.1.0.tgz verified to contain dist/cli.js + node_modules and to run from a live default-channel install. This PR's CI is the first to prove #108's fix on a genuinely stamped tree.

🤖 Generated with Claude Code

The `release: X.Y.Z` PR of the ceremony (#96): `package.json` already reads **0.1.0** (it has since the first commit — the bump is a no-op), so this PR is the CHANGELOG stamp: `## Unreleased` → `## 0.1.0 — 2026-07-19`. After merge, tag the merge commit bare `0.1.0` and push — `release.yml` asserts tag==version, builds the prebuilt **`cast-0.1.0.tgz`** (bin + dist + pruned node_modules), and publishes with the stamped section as body. Follow-up bumps main to `0.1.1-dev`. **This is cast's first release** — the installer's default channel goes live: `curl … install.sh | bash` stops refusing, resolves 0.1.0, and installs the prebuilt asset with **no npm and no tsc on the operator's machine**. **Evidence (2026-07-19, twice — before and after the fix round):** suites 606/606; two live Coolify 4.1.2 instances driven through the full A→B flow (apply/diff idempotent, smoke's bulk-upsert contract on both, fleet coverage, destroy interlock); the ceremony rehearsed on a scratch fork including the real asset build — `cast-0.1.0.tgz` verified to contain `dist/cli.js` + node_modules and to run from a live default-channel install. This PR's CI is the first to prove #108's fix on a genuinely stamped tree. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
danmt (Migrated from github.com) reviewed 2026-07-19 14:24:48 +00:00
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 14:26:16 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

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

First-release ceremony stamp only: CHANGELOG.md ## Unreleased## 0.1.0 — 2026-07-19. package.json is already "version": "0.1.0" at tip c6bcc97, so the version bump is correctly a no-op and this PR is purely the stamp that unlocks tag 0.1.0 + release.yml prebuilt asset.

Diff is one line; scope matches the stated ceremony. CI build/install/scope green. No blockers.

**Verdict: Approve** — I agree with this as-is. First-release ceremony stamp only: `CHANGELOG.md` `## Unreleased` → `## 0.1.0 — 2026-07-19`. `package.json` is already `"version": "0.1.0"` at tip `c6bcc97`, so the version bump is correctly a no-op and this PR is purely the stamp that unlocks tag `0.1.0` + `release.yml` prebuilt asset. Diff is one line; scope matches the stated ceremony. CI build/install/scope green. No blockers.
claude-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 14:37:29 +00:00
claude-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: Approve.

Verified at head c6bcc97 (one commit atop current main c0e4fab, so #109's release-suite fix is in the tree) in a clean worktree.

Scope — the diff is exactly the ceremony stamp and nothing else: CHANGELOG.md:8 ## Unreleased## 0.1.0 — 2026-07-19. No code changes smuggled in.

Version consistency0.1.0 everywhere the version lives: package.json:3, package-lock.json:3 (and its root package entry), and ./bin/cast --version on the built tree prints cast 0.1.0 (...) (version is read from package.json, per src/cli.ts:1341). git tag -l on origin is empty, so this is genuinely the first release and the no-op bump the PR body describes is accurate.

Ceremony vs CONTRIBUTING.md:47-71 — step 1 (release PR: bump + stamp, release label) is satisfied: the bump is a legitimate no-op (both files already read 0.1.0), the stamp is this diff. Steps 2 (bare 0.1.0 tag on the merge commit) and 3 (follow-up 0.1.1-dev bump) are post-merge and correctly stated in the PR body.

Release-notes extraction on the stamped tree — this is the first PR to exercise #108's fix for real, and it works: bash .github/scripts/release-notes.sh 0.1.0 extracts the stamped section non-empty (88 lines) and exits 0, so release.yml's notes step (.github/workflows/release.yml:44-49) will pass on the tagged commit, and the tag==version assert at .github/workflows/release.yml:34-41 matches.

CHANGELOG completeness — the file was created in #96's commit (ced5c49), and every PR merged since is accounted for in the 0.1.0 section: #96 (PR #101) under Added; #102 (PR #105), #103 (PR #107), #104 (PR #106), #108 (PR #109) under Fixed. The preamble honestly scopes pre-changelog history to git.

Suites on the stamped treenpm ci, npm run build (tsc clean), npm test 606/606 passed (35 files, including test/release.test.ts against the real stamped CHANGELOG), npm run check (biome, --error-on-warnings) clean.

Non-blocking follow-upREADME.md:38-41's "Transitional, until 0.1.0 is cut" callout (and the pre-release wording around README.md:30) becomes stale the moment the tag exists; a natural home for its removal is the 0.1.1-dev follow-up PR.

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

**Verdict: Approve.** Verified at head `c6bcc97` (one commit atop current main `c0e4fab`, so #109's release-suite fix is in the tree) in a clean worktree. **Scope** — the diff is exactly the ceremony stamp and nothing else: `CHANGELOG.md:8` `## Unreleased` → `## 0.1.0 — 2026-07-19`. No code changes smuggled in. **Version consistency** — `0.1.0` everywhere the version lives: `package.json:3`, `package-lock.json:3` (and its root package entry), and `./bin/cast --version` on the built tree prints `cast 0.1.0 (...)` (version is read from `package.json`, per `src/cli.ts:1341`). `git tag -l` on origin is empty, so this is genuinely the first release and the no-op bump the PR body describes is accurate. **Ceremony vs CONTRIBUTING.md:47-71** — step 1 (release PR: bump + stamp, `release` label) is satisfied: the bump is a legitimate no-op (both files already read 0.1.0), the stamp is this diff. Steps 2 (bare `0.1.0` tag on the merge commit) and 3 (follow-up `0.1.1-dev` bump) are post-merge and correctly stated in the PR body. **Release-notes extraction on the stamped tree** — this is the first PR to exercise #108's fix for real, and it works: `bash .github/scripts/release-notes.sh 0.1.0` extracts the stamped section non-empty (88 lines) and exits 0, so `release.yml`'s notes step (`.github/workflows/release.yml:44-49`) will pass on the tagged commit, and the tag==version assert at `.github/workflows/release.yml:34-41` matches. **CHANGELOG completeness** — the file was created in #96's commit (`ced5c49`), and every PR merged since is accounted for in the 0.1.0 section: #96 (PR #101) under Added; #102 (PR #105), #103 (PR #107), #104 (PR #106), #108 (PR #109) under Fixed. The preamble honestly scopes pre-changelog history to git. **Suites on the stamped tree** — `npm ci`, `npm run build` (tsc clean), `npm test` **606/606 passed** (35 files, including `test/release.test.ts` against the real stamped CHANGELOG), `npm run check` (biome, `--error-on-warnings`) clean. **Non-blocking follow-up** — `README.md:38-41`'s "Transitional, until 0.1.0 is cut" callout (and the pre-release wording around `README.md:30`) becomes stale the moment the tag exists; a natural home for its removal is the `0.1.1-dev` follow-up PR. — _automated review by `claude-bot-andresmgsl` · heavy-duty-review-bot_
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-19 16:01:52 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: I agree with everything and have no additional feedback. The diff is limited to stamping the first 0.1.0 changelog section, the package version is already 0.1.0 as documented, and all current checks pass.

Verdict: I agree with everything and have no additional feedback. The diff is limited to stamping the first 0.1.0 changelog section, the package version is already 0.1.0 as documented, and all current checks pass.
dan-claude-bot commented 2026-07-19 16:03:44 +00:00 (Migrated from github.com)

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

What it is: the release: 0.1.0 ceremony PR (#96): package.json already reads 0.1.0 (since the first commit — the bump is a no-op), so this is the CHANGELOG stamp: ## Unreleased## 0.1.0 — 2026-07-19. cast's first release ships by manual tag (the documented first-release edge — the version doesn't transition, so the merge door correctly won't fire): after merging, tag the merge commit bare 0.1.0 and push; release.yml builds cast-0.1.0.tgz and publishes. The automation (cast#112, in review) owns everything from 0.1.1 on.

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

Evidence: suites 606/0 on the stamped tree (the #108 fix's first real proof); the asset path rehearsed end to end on a scratch fork including a live default-channel install; two full drills of the two-instance flow behind it.

Ready for your review.

🤖 Generated with Claude Code

@danmt — handing this one to you. Final state: **What it is:** the `release: 0.1.0` ceremony PR (#96): `package.json` already reads 0.1.0 (since the first commit — the bump is a no-op), so this is the CHANGELOG stamp: `## Unreleased` → `## 0.1.0 — 2026-07-19`. **cast's first release ships by manual tag** (the documented first-release edge — the version doesn't transition, so the merge door correctly won't fire): after merging, tag the merge commit bare `0.1.0` and push; `release.yml` builds `cast-0.1.0.tgz` and publishes. The automation (cast#112, in review) owns everything from 0.1.1 on. **Review history:** one round — all three bots approved, no changes requested. **Evidence:** suites 606/0 on the stamped tree (the #108 fix's first real proof); the asset path rehearsed end to end on a scratch fork including a live default-channel install; two full drills of the two-instance flow behind it. Ready for your review. 🤖 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/cast#110
No description provided.