From 8feea34199ee1614db51da036213b70ae2a087e3 Mon Sep 17 00:00:00 2001 From: Nikita Ivanov Date: Sun, 3 May 2026 10:00:09 +0000 Subject: [PATCH 1/2] chore(release): bump version to 0.3.2 for rc1 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch on top of v0.3.1 carrying the master-merged follow-ups since the first dogfood failure (AL-18): - PR #7 — three dogfood-discovered installer-path bugs (curl-installer ORG default, --purge sudoers cleanup, GSD + Playwright CLI skill bootstrap wiring, AGENTLINUX_AGENT_HOME export during purge, playwright-cli cd to writable home). - PR #5 — Ubuntu 26.04 (Resolute Raccoon) added to v0.3.0 supported targets. - PR #11 — bump GitHub Actions to Node 24-ready versions. - PR #13 — review-reminder Stop hook + ADR-010 refinement (AL-23). - PR #14 — workspace-cleanup skill. - PR #4 / #9 / #10 — CI / website-deploy fixes. scripts/build-release.sh enforces a three-way version lock — the tag's base version (after stripping any -rc suffix) must equal both plugin/cli/package.json.version and plugin/catalog/catalog.json.version. Bumping both files to 0.3.2 so v0.3.2-rc1 (and eventually v0.3.2 final) clear the gate. Refs: AL-18 Co-Authored-By: Claude Opus 4.7 (1M context) --- plugin/catalog/catalog.json | 2 +- plugin/cli/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/catalog/catalog.json b/plugin/catalog/catalog.json index 8dd7f76..ff8d322 100644 --- a/plugin/catalog/catalog.json +++ b/plugin/catalog/catalog.json @@ -1,5 +1,5 @@ { - "version": "0.3.0", + "version": "0.3.2", "agents": [ { "id": "claude-code", diff --git a/plugin/cli/package.json b/plugin/cli/package.json index d34cb04..5a9c649 100644 --- a/plugin/cli/package.json +++ b/plugin/cli/package.json @@ -1,6 +1,6 @@ { "name": "@agentlinux/cli", - "version": "0.3.0", + "version": "0.3.2", "private": true, "description": "AgentLinux registry CLI — install, upgrade, remove catalog agents", "type": "module", From 973d5ad65761c0cd6fd82fc53d616ca4645ca8d6 Mon Sep 17 00:00:00 2001 From: Nikita Ivanov Date: Sun, 3 May 2026 10:30:46 +0000 Subject: [PATCH 2/2] chore(release): sync hardcoded 0.3.0 -> 0.3.2 across plugin source + bats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Catches the version-string sprawl that broke CI on PR #16 (CAT-05 staged catalog at /opt/agentlinux/catalog/0.3.2/catalog.json missing — the test reads the expected version from plugin/cli/package.json dynamically, but the installer's AGENTLINUX_VERSION constant was still pinned to 0.3.0, so the staged path was /opt/agentlinux/catalog/0.3.0/...). The previous v0.3.1 release sidestepped this by being a metadata-only tag rename (per its tag annotation), so release.yml never validated the version coherency. v0.3.2-rc1 goes through the full pipeline, which required aligning every hardcoded reference. Plugin source (4 files): - plugin/bin/agentlinux-install AGENTLINUX_VERSION constant - plugin/cli/src/index.ts commander .version() - plugin/cli/src/catalog/loader.ts defaultCatalogDir() fallback - plugin/cli/src/catalog/schema.ts resolveSchemaPath() fallback Bats tests (4 files) — assertions / fixture paths / fallback defaults: - tests/bats/10-installer.bats INST-02 fallback default - tests/bats/40-registry-cli.bats CLI-01 / CLI-05 / CAT-03 fixture - tests/bats/50-agents.bats CATALOG path - tests/bats/51-agt02-release-gate.bats CATALOG path CLI unit-test fixtures (plugin/cli/test/fixtures/*.json + *.test.ts) intentionally NOT bumped — they are self-contained: assertions match the test data on both sides, and they don't read the runtime version. Refs: AL-18 Co-Authored-By: Claude Opus 4.7 (1M context) --- plugin/bin/agentlinux-install | 2 +- plugin/cli/src/catalog/loader.ts | 2 +- plugin/cli/src/catalog/schema.ts | 2 +- plugin/cli/src/index.ts | 2 +- tests/bats/10-installer.bats | 2 +- tests/bats/40-registry-cli.bats | 12 ++++++------ tests/bats/50-agents.bats | 4 ++-- tests/bats/51-agt02-release-gate.bats | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/plugin/bin/agentlinux-install b/plugin/bin/agentlinux-install index bf60c89..59bc4c2 100755 --- a/plugin/bin/agentlinux-install +++ b/plugin/bin/agentlinux-install @@ -9,7 +9,7 @@ # §Pattern 1, §Pitfall 6, §Example 1; 02-CONTEXT.md "Installer UX & Logging". set -euo pipefail -readonly AGENTLINUX_VERSION="0.3.0" +readonly AGENTLINUX_VERSION="0.3.2" readonly LOG_FILE="${AGENTLINUX_LOG:-/var/log/agentlinux-install.log}" # Resolve script-relative directories. Split `declare`/`assign` per SC2155 so # a cmdsub failure surfaces as a non-zero return instead of being masked by diff --git a/plugin/cli/src/catalog/loader.ts b/plugin/cli/src/catalog/loader.ts index 4849b03..1174f6b 100644 --- a/plugin/cli/src/catalog/loader.ts +++ b/plugin/cli/src/catalog/loader.ts @@ -11,7 +11,7 @@ import type { Catalog } from "../types.js"; import { formatErrors, getValidator } from "./schema.js"; function defaultCatalogDir(): string { - const ver = process.env.AGENTLINUX_VERSION ?? "0.3.0"; + const ver = process.env.AGENTLINUX_VERSION ?? "0.3.2"; return `/opt/agentlinux/catalog/${ver}`; } diff --git a/plugin/cli/src/catalog/schema.ts b/plugin/cli/src/catalog/schema.ts index 3b44b22..346536f 100644 --- a/plugin/cli/src/catalog/schema.ts +++ b/plugin/cli/src/catalog/schema.ts @@ -61,7 +61,7 @@ async function resolveSchemaPath(): Promise { const candidates: string[] = []; if (envDir) candidates.push(join(envDir, "schema.json")); // Production default — matches loader.ts's defaultCatalogDir(). - const ver = process.env.AGENTLINUX_VERSION ?? "0.3.0"; + const ver = process.env.AGENTLINUX_VERSION ?? "0.3.2"; candidates.push(`/opt/agentlinux/catalog/${ver}/schema.json`); // Walk up 6 levels; covers dist/ dist-test/src/ src/ and a couple spare // for dev/test layouts. diff --git a/plugin/cli/src/index.ts b/plugin/cli/src/index.ts index 3642d9b..293bc49 100644 --- a/plugin/cli/src/index.ts +++ b/plugin/cli/src/index.ts @@ -26,7 +26,7 @@ const program = new Command(); program .name("agentlinux") .description("AgentLinux registry CLI — install, upgrade, remove catalog agents") - .version("0.3.0", "-V, --version"); + .version("0.3.2", "-V, --version"); // Commander's `.enablePositionalOptions()` is REQUIRED so the install // subcommand's `--version ` override (CLI-03) can shadow the diff --git a/tests/bats/10-installer.bats b/tests/bats/10-installer.bats index cc36afb..99139e4 100644 --- a/tests/bats/10-installer.bats +++ b/tests/bats/10-installer.bats @@ -66,7 +66,7 @@ INSTALLER=/opt/agentlinux-src/plugin/bin/agentlinux-install # - readlink target: a string, byte-stable by construction. # - first line of dist/index.js: the #!/usr/bin/env node shebang — stable # regardless of any internal tsc reordering of the generated body. - local version=${AGENTLINUX_VERSION:-0.3.0} + local version=${AGENTLINUX_VERSION:-0.3.2} find \ /etc/profile.d/agentlinux.sh \ /etc/agentlinux.env \ diff --git a/tests/bats/40-registry-cli.bats b/tests/bats/40-registry-cli.bats index 34ec885..67a17ea 100644 --- a/tests/bats/40-registry-cli.bats +++ b/tests/bats/40-registry-cli.bats @@ -71,10 +71,10 @@ setup() { done } -# CLI-01: --version prints 0.3.0 across invocation modes — proves the symlink +# CLI-01: --version prints 0.3.2 across invocation modes — proves the symlink # + Node shebang + dist/index.js + package.json "type":"module" chain all fire # regardless of which shell wrapper the caller uses. -@test "CLI-01: agentlinux --version prints 0.3.0 from every invocation mode" { +@test "CLI-01: agentlinux --version prints 0.3.2 from every invocation mode" { local mode for mode in "${INVOKE_MODES[@]}"; do invoke_mode "$mode" 'agentlinux --version' @@ -82,7 +82,7 @@ setup() { skip "CLI-01 (${mode}): systemd PID 1 not running" fi assert_exit_zero "CLI-01 (${mode})" - assert_path_has "CLI-01 (${mode})" "0.3.0" + assert_path_has "CLI-01 (${mode})" "0.3.2" done } @@ -244,7 +244,7 @@ setup() { @test "CLI-05: running agentlinux as agent user succeeds without sudo" { run sudo -u agent -H bash --login -c 'agentlinux --version' assert_exit_zero "CLI-05" - assert_path_has "CLI-05" "0.3.0" + assert_path_has "CLI-05" "0.3.2" } # ---------- CLI-06: upgrade detects divergence; report-only without bulk flag ---------- @@ -396,11 +396,11 @@ setup() { # the same AGENTLINUX_CATALOG_DIR env var — schema.ts §resolveSchemaPath). # Copy the production schema verbatim so the fixture catalog validates # against the SAME rules production does. - cp /opt/agentlinux/catalog/0.3.0/schema.json "$tmp/schema.json" + cp /opt/agentlinux/catalog/0.3.2/schema.json "$tmp/schema.json" cat >"$tmp/catalog.json" <<'JSON' { - "version": "0.3.0", + "version": "0.3.2", "agents": [ { "id": "fake-42", diff --git a/tests/bats/50-agents.bats b/tests/bats/50-agents.bats index b8e95cd..cd9e90c 100644 --- a/tests/bats/50-agents.bats +++ b/tests/bats/50-agents.bats @@ -13,7 +13,7 @@ # - failures emit __fail four-line TST-04 diagnostics # - setup_file installs all three agents ONCE for the whole file; teardown_file # removes them. Serial installs keep sentinel writes unambiguous. -# - version pins are read from /opt/agentlinux/catalog/0.3.0/catalog.json via +# - version pins are read from /opt/agentlinux/catalog/0.3.2/catalog.json via # jq — NEVER hardcoded in @test bodies (so a catalog version bump does not # require editing this file). # @@ -27,7 +27,7 @@ load 'helpers/invoke_modes' load 'helpers/assertions' LOG=/var/log/agentlinux-install.log -CATALOG=/opt/agentlinux/catalog/0.3.0/catalog.json +CATALOG=/opt/agentlinux/catalog/0.3.2/catalog.json setup_file() { # 40-registry-cli.bats's INST-04 --purge @tests run earlier in filename sort diff --git a/tests/bats/51-agt02-release-gate.bats b/tests/bats/51-agt02-release-gate.bats index d16f2d3..febf558 100644 --- a/tests/bats/51-agt02-release-gate.bats +++ b/tests/bats/51-agt02-release-gate.bats @@ -22,7 +22,7 @@ load 'helpers/invoke_modes' load 'helpers/assertions' -CATALOG=/opt/agentlinux/catalog/0.3.0/catalog.json +CATALOG=/opt/agentlinux/catalog/0.3.2/catalog.json setup_file() { # 40-registry-cli.bats's INST-04 @tests run --purge at the end of that file