From c5e2d544abd684e23dc5008c9c95dd7d9295d14b Mon Sep 17 00:00:00 2001 From: Aaron Trowbridge Date: Mon, 14 Sep 2026 08:50:42 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20restore=20main=20CI=20=E2=80=94=20the=20?= =?UTF-8?q?installer=20test=20is=20platform-aware=20(non-darwin=20skips=20?= =?UTF-8?q?the=20host=20check=20by=20design)=20+=20the=20F28=20doctrine=20?= =?UTF-8?q?obeys=20its=20own=20rule=20(#1109=20follow-up)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI's ubuntu runner exposed two darwin-blind spots merged in #1109's window: (1) the installer fleet-branch test asserted darwin's terminal outcome (guard not installed, exit 1) — on non-darwin the installer deliberately skips the host check ('the fleet is a darwin fleet') and completes green; the test now asserts the BRANCH (parsed role, never the standalone skip) and accepts the platform's correct terminal outcome. (2) amico-vault's F28 proof case embedded the literal rotted vault names — the doctrine violated its own 'never in prose or examples' rule and its own mechanical lint caught it; reworded, with the self-obedience stated. --- packages/extension/skills/amico-vault/SKILL.md | 2 +- .../test/fleet_scripts_projection.test.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/extension/skills/amico-vault/SKILL.md b/packages/extension/skills/amico-vault/SKILL.md index 1ae07cc98..630408042 100644 --- a/packages/extension/skills/amico-vault/SKILL.md +++ b/packages/extension/skills/amico-vault/SKILL.md @@ -105,7 +105,7 @@ How vault paths are written down — in notes, specs, skills, and examples — i - The **personal** mount by **role** — "the personal vault", resolved from the mount stack — never by its directory or marker name. - The **team** mount by **kind** — "the team mount". A concrete instance (`armonissima`) may appear in an example, labeled as an instance — never as the identifier. - The ops tree only ever as `$AMICO_OPS/…`. -- **Never a raw home path embedding a vault or repo name** in prose or examples — those are the ones that rot on renames. Proof case: the 2026-08-21 personal-vault rename (`vault-aaron` → `armonia-aaron-trowbridge`), whose aftermath — clients silently riding the rename redirect — is exactly the silent rot this rule exists to prevent. +- **Never a raw home path embedding a vault or repo name** in prose or examples — those are the ones that rot on renames. Proof case: the 2026-08-21 personal-vault rename (the personal vault's directory name changed under it), whose aftermath — clients silently riding the rename redirect — is exactly the silent rot this rule exists to prevent. This doctrine obeys its own rule: the rotted names are deliberately NOT reproduced here — the mechanical `[vpath]` rule cannot tell a proof case from a violation, and that is the point. The skills lint's `[vpath]` rule (`lint-skills.mjs`, #1100) flags the known-rotted shapes mechanically; this section is the doctrine it serves. diff --git a/packages/extension/test/fleet_scripts_projection.test.ts b/packages/extension/test/fleet_scripts_projection.test.ts index 276f80bfe..7f7fae3c9 100644 --- a/packages/extension/test/fleet_scripts_projection.test.ts +++ b/packages/extension/test/fleet_scripts_projection.test.ts @@ -251,10 +251,19 @@ describe("the installer consumes the verb (never greps the raw file)", () => { it("verb exit 0 + role client → the fleet branch with the parsed port (proceeds past the topology gate)", () => { fakeAmico({ code: 0, stdout: verbJson("client", { host: "hq", port: 4096, sshAlias: "hq" }) }); const r = runScript(INSTALL, ["--check"], installEnv()); + // The BRANCH proof: the parsed role + port flowed through — never the standalone skip. expect(r.out).toMatch(/fleet role: client \(port: 4096\)/); - // --check then fails on the missing installed guard — the TOPOLOGY branch was taken - expect(r.code).toBe(1); - expect(r.out).toMatch(/guard not installed/); + expect(r.out).not.toMatch(/fleet checks skipped|nothing to install/); + // The terminal outcome is platform-specific BY DESIGN: on darwin, --check + // fails on the missing installed guard; on non-darwin the installer skips + // the host check ("the fleet is a darwin fleet") and completes green. + if (process.platform === "darwin") { + expect(r.code).toBe(1); + expect(r.out).toMatch(/guard not installed/); + } else { + expect(r.code).toBe(0); + expect(r.out).toMatch(/host check skipped/); + } }); it("verb exit 75 → the bootstrap exception: base-standalone STATED with the pointer, exit 0 (identical to CLI-absent)", () => {