Repository navigation
chore(release): prepare @aictrl/cli 0.4.8 - #143
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019gASjVHuvN9AxK5WT8jzsN
| { | ||
| "$schema": "https://json.schemastore.org/package.json", | ||
| "version": "0.4.7", | ||
| "version": "0.4.8", |
There was a problem hiding this comment.
🟠 Breaking change shipped as patch bump 0.4.8.
🤖 Fix with your agent
Fix this code review finding (aictrl-dev/cli PR #143, packages/cli/package.json:3):
Problem: Breaking change shipped as patch bump 0.4.8
Detail: RELEASING.md's new 0.4.8 section (line 39) explicitly labels the StructuredOutput contract change "**BREAKING for `--output-schema` callers (#142, closes #140)**" — the tool now accepts only `{ "path": "<file>" }` and result objects passed as tool arguments are rejected — yet the manifest bump is 0.4.7→0.4.8 (package.json and the bun.lock workspace entry). npm/bun caret ranges `^0.4.x` resolve to `<0.5.0`, so existing consumers auto-receive 0.4.8 on any routine update and their previously-working `--output-schema` prompts start failing with `structured_output_rejected`. The repo's own changelog precedent uses a minor bump for a feature/breaking batch (0.2.0) and patches for fixes (0.3.x). Semver's major-zero allowance technically permits this, but the release notes' own "callers must change prompts" makes the user impact concrete, so the version choice should be deliberate — either 0.5.0, or an explicit note that a patch bump was chosen because consumers pin exact versions.
Suggested fix: Bump to 0.5.0 in packages/cli/package.json and the matching bun.lock workspace entry and retitle the RELEASING.md section to "## 0.5.0 candidate"; alternatively keep 0.4.8 but state in RELEASING.md why a labeled breaking change ships as a patch (e.g. consumers are expected to pin exact versions), or accept the legacy result-object shape with a deprecation diagnostic for one release before rejecting it.
Implement the fix on the PR head branch and add a regression test that fails before the fix and passes after.
Why this matters
RELEASING.md's new 0.4.8 section (line 39) explicitly labels the StructuredOutput contract change "BREAKING for --output-schema callers (#142, closes #140)" — the tool now accepts only { "path": "<file>" } and result objects passed as tool arguments are rejected — yet the manifest bump is 0.4.7→0.4.8 (package.json and the bun.lock workspace entry). npm/bun caret ranges ^0.4.x resolve to <0.5.0, so existing consumers auto-receive 0.4.8 on any routine update and their previously-working --output-schema prompts start failing with structured_output_rejected. The repo's own changelog precedent uses a minor bump for a feature/breaking batch (0.2.0) and patches for fixes (0.3.x). Semver's major-zero allowance technically permits this, but the release notes' own "callers must change prompts" makes the user impact concrete, so the version choice should be deliberate — either 0.5.0, or an explicit note that a patch bump was chosen because consumers pin exact versions.
{
"$schema": "https://json.schemastore.org/package.json",
"version": "0.4.8",
"name": "@aictrl/cli",
"description": "Headless execution engine for AI agent skills",
"type": "module",
Code reviewVerdict: Address the major findings before merging. · 🔴 0 · 🟠 1 · 🟡 1 · ⚪ 0 · 0/2 resolved
🤖 Fix all 2 open findings with your agent📋 Out-of-diff findings (2)
Reviewed 3 files · 0 inline · view all 2 findings ↗ aictrl · AI code review for fast-moving teams · aictrl.dev |
… review) - CHANGELOG: the Unreleased entries move under the releases that shipped them (0.4.8, 0.4.4, 0.4.3, 0.4.1, from `git tag --contains`) - RELEASING step 1 retitles `## Unreleased` as part of the version bump - RELEASING and CHANGELOG say why the breaking schema-mode change ships as 0.4.8: only the aictrl executor uses schema mode and it pins exact versions; caret-range consumers must update prompts before upgrading Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019gASjVHuvN9AxK5WT8jzsN
Review response — PR #143Both findings verified TRUE. The CHANGELOG one is fixed. On the version, the founder decided to keep 0.4.8, and the reason is now documented. Issues addressed (pushed to this PR)
Review claims verified false (no change needed)None. Not addressed here
|
|
|
||
| - **NDJSON v1 terminal reasons are an open set** — `session_error.reason` now includes `interrupted` for `SIGINT` and `terminated` for `SIGTERM`, and `code` may contain the conventional signal-derived exit code (`130` or `143`). Schema v1 consumers should treat unknown event types, fields, and enum-like string values as forward-compatible additions. | ||
|
|
||
| Releases 0.3.3–0.4.7 not listed here have notes on [GitHub Releases](https://github.com/aictrl-dev/cli/releases) only. |
There was a problem hiding this comment.
⚪ Changelog pointer range spans never-published 0.4.2.
🤖 Fix with your agent
Fix this code review finding (aictrl-dev/cli PR #143, CHANGELOG.md:28):
Problem: Changelog pointer range spans never-published 0.4.2
Detail: The new pointer line is accurate for every release that actually shipped (verified via read-only GitHub API: all unlisted versions in range — 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.4.0, 0.4.5, 0.4.6, 0.4.7 — have GitHub Releases, and the retroactively added dates for 0.4.4/0.4.3/0.4.1 match their publish dates). However, the stated range 0.3.3–0.4.7 spans a gap: version 0.4.2 was never published at all — it is absent from npm (`npm view @aictrl/cli versions` jumps 0.4.1 → 0.4.3), from git tags, and from GitHub Releases (`releases/tags/v0.4.2` → 404). A reader who assumes contiguous releases may hunt for 0.4.2 notes via this pointer and find nothing. A short parenthetical noting the skip would preempt that confusion; purely optional since the sentence makes no false claim about any existing release.
Suggested fix: Optionally exclude the skipped version, e.g. "Releases 0.3.3–0.4.7 not listed here (0.4.2 was never published) have notes on [GitHub Releases](https://github.com/aictrl-dev/cli/releases) only."
Implement the fix on the PR head branch and add a regression test that fails before the fix and passes after.
Why this matters
The new pointer line is accurate for every release that actually shipped (verified via read-only GitHub API: all unlisted versions in range — 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.4.0, 0.4.5, 0.4.6, 0.4.7 — have GitHub Releases, and the retroactively added dates for 0.4.4/0.4.3/0.4.1 match their publish dates). However, the stated range 0.3.3–0.4.7 spans a gap: version 0.4.2 was never published at all — it is absent from npm (npm view @aictrl/cli versions jumps 0.4.1 → 0.4.3), from git tags, and from GitHub Releases (releases/tags/v0.4.2 → 404). A reader who assumes contiguous releases may hunt for 0.4.2 notes via this pointer and find nothing. A short parenthetical noting the skip would preempt that confusion; purely optional since the sentence makes no false claim about any existing release.
- **NDJSON v1 terminal reasons are an open set** — `session_error.reason` now includes `interrupted` for `SIGINT` and `terminated` for `SIGTERM`, and `code` may contain the conventional signal-derived exit code (`130` or `143`). Schema v1 consumers should treat unknown event types, fields, and enum-like string values as forward-compatible additions.
Releases 0.3.3–0.4.7 not listed here have notes on [GitHub Releases](https://github.com/aictrl-dev/cli/releases) only.
## 0.3.2 (2026-04-11)
Code reviewVerdict: Looks good — only minor / nit comments below. · 🔴 0 · 🟠 0 · 🟡 0 · ⚪ 1 · 0/1 resolved
🤖 Fix all 1 open findings with your agent📋 Out-of-diff findings (1)
Reviewed 4 files · 0 inline · view all 1 findings ↗ aictrl · AI code review for fast-moving teams · aictrl.dev |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019gASjVHuvN9AxK5WT8jzsN
Review response — PR #143 (second review)The single ⚪ finding was verified TRUE and fixed. Issues addressed (pushed to this PR)
Review claims verified false (no change needed)None. Not addressed hereNone. |
Version bump for 0.4.8, following RELEASING.md.
packages/cli/package.jsonand thepackages/cliworkspace entry inbun.lockgo to 0.4.8.bun install --frozen-lockfilepasses.RELEASING.md: the 0.4.8 candidate notes replace the 0.4.7 section, and step 1 now includes cutting the CHANGELOG.CHANGELOG.md:Unreleasedis cut. The breaking change goes under 0.4.8, and older entries move under the releases that shipped them (0.4.4, 0.4.3, 0.4.1).What 0.4.8 ships (#142, closes #140):
--output-schemacallers:StructuredOutputtakes only{ "path": "<file>" }.{ path }reaches the provider, so provider schema conversion can no longer drop result fields. On 0.4.7, Gemini emptied map-typed fields (StructuredOutput drops additionalProperties (map) fields on Gemini; Ajv accepts the lossy {} #139).O_NOFOLLOWwhere defined);missingdiagnostic and reminder use the file form.Why a patch bump: schema mode is used only by the aictrl executor, which pins exact versions. Consumers on a caret range (
^0.4.x) must update their schema-mode prompts to the file+path form before upgrading.Evidence (#139 reproduction):
elements: {}7/7.After merge:
gh release create v0.4.8 --target <merge SHA>, then the publish workflow and an install check.prompt-builder.ts,pr-explanation-output-contract.tsand theexplain-changeskill.🤖 Generated with Claude Code
https://claude.ai/code/session_019gASjVHuvN9AxK5WT8jzsN