diff --git a/.planning/debug/pr243-unpublished-runner.md b/.planning/debug/pr243-unpublished-runner.md new file mode 100644 index 00000000..e912285c --- /dev/null +++ b/.planning/debug/pr243-unpublished-runner.md @@ -0,0 +1,37 @@ +--- +status: resolved +trigger: "PR #243 tests are red across the board" +created: 2026-10-13 +updated: 2026-10-14 +--- + +# PR #243 runner publication dependency + +## Symptoms + +- Expected: the standalone CLI provisions its pinned tools from npm with an empty PATH and a fresh cache on all five platforms. +- Actual: every job in run 38299057704 fails during the first screenshot command. +- Error: `No matching version found for @napplet/conformance-cli@0.3.4.` +- Original reproduction: installing that exact package version from npm failed because only 0.3.3 was published. + +## Current Focus + +- Cause: the documented release dependency. All five jobs in run 38520521467 failed with npm ETARGET for conformance CLI 0.3.4. +- Current state: PR #242 merged after nine fresh checks passed. Its npm and JSR publication workflows succeeded, the four required npm tarballs return HTTP 200, and this branch includes the released main commit. +- Next action: retarget #243 to main and verify all five platforms on the updated PR head. + +## Evidence + +- [Failed standalone run](https://github.com/napplet/web/actions/runs/38299057704): Linux x64/ARM64, macOS x64/ARM64, and Windows all fail on the same missing package. +- [PR #242](https://github.com/napplet/web/pull/242), head `44d663a14af0f91a3797614c76e5c3d684cec52e`: CI, conformance, links, slop, and all five standalone jobs passed. Release versions are already applied and no unconsumed changeset remains. +- Initial npm registry check: conformance CLI 0.3.4 absent; Kehto CLI 0.5.5 and Paja 0.21.0 present. +- [PR #242](https://github.com/napplet/web/pull/242) merged as `839000563f6b92293a1e94ae0cd3a63011139448` on October 14 after its updated head passed all nine checks. [npm publication](https://github.com/napplet/web/actions/runs/38598414641) and [JSR publication](https://github.com/napplet/web/actions/runs/38598414611) succeeded. +- Direct npm download checks returned HTTP 200 for core 0.34.0, nap 0.34.0, conformance 0.20.0, and conformance CLI 0.3.4. Published conformance CLI metadata requires Paja `>=0.21.0 <0.22.0` and core/nap 0.34.0, matching the reviewed peer compatibility fix. +- The compiled macOS ARM64 binary passed `standalone_integration_test.ts` against real npm packages with an empty PATH and a fresh cache: 1 passed, 0 failed, 1m20s. This covered screenshot generation, deployment dry-run, conformance, Paja startup, and cache reuse with network access disabled by invalid proxies. +- The pinned package installation is the behavior under test. Skipping the check, substituting a local package, or downgrading to the old runner would conceal or remove the intended release behavior. + +## Resolution + +Root cause confirmed. Updated the stacked branch with #242's latest reviewed fixes and restored the CLI changelog's existing unwrapped history, leaving one focused 0.9.1 entry. Local verification passed: build (12 tasks), type-check (18 tasks), recursive unit tests, and diff whitespace checks. The final full AI-slop scan passed at 95/100 with zero errors; warnings concern existing function length, nesting, and the `fflate` dependency advisory in files unchanged by this PR. + +The release blocker is resolved: required packages are published and downloadable, the branch includes released main, and the local compiled binary passed fresh-cache verification. Remote platform results are tracked in #243's checks. No dependency downgrade, local-package substitution, or test bypass was added. diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index ecf5fcc2..e2f18459 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,11 @@ # @napplet/cli +## 0.9.1 + +### Patch Changes + +- Select the GAMEPAD-capable conformance CLI 0.3.4 and Kehto CLI 0.5.5 in the private runner cache. These package versions must be published before this CLI release. + ## 0.9.0 ### Minor Changes diff --git a/packages/cli/deno.json b/packages/cli/deno.json index 8ba905e9..9a25a072 100644 --- a/packages/cli/deno.json +++ b/packages/cli/deno.json @@ -1,7 +1,7 @@ { "extends": "../../deno.json", "name": "@napplet/cli", - "version": "0.9.0", + "version": "0.9.1", "description": "Standalone CLI for creating, configuring, testing, and deploying napplets", "license": "MIT", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index d27bea63..2a1cc85d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@napplet/cli", - "version": "0.9.0", + "version": "0.9.1", "description": "Standalone CLI for creating, configuring, testing, and deploying napplets", "type": "module", "files": [ diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 8ccc8184..6dfbb83b 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -403,7 +403,7 @@ async function commandPaja(argv: string[]): Promise { const config = await loadConfig(flags); const configured = config.paja?.command?.trim(); const base: ResolvedCommand = !configured || configured === "kehto" - ? await managedPackageCommand("@kehto/cli@0.5.4", "dist/index.js") + ? await managedPackageCommand("@kehto/cli@0.5.5", "dist/index.js") : splitCommand(configured); const child = new Deno.Command(base.command, { args: [...base.args, "paja", ...resolvePajaArgs(flags.afterDoubleDash)], diff --git a/packages/cli/src/managed-node.ts b/packages/cli/src/managed-node.ts index ba8e71fe..2ebb3cfa 100644 --- a/packages/cli/src/managed-node.ts +++ b/packages/cli/src/managed-node.ts @@ -90,7 +90,7 @@ export async function ensureManagedNode(): Promise { * @param spec Exact package version. * @param entry Package-relative CLI script. * @returns Absolute executable/script and environment, independent of project dependencies. - * @example await managedPackageCommand('@napplet/conformance-cli@0.3.3', 'dist/cli.js') + * @example await managedPackageCommand('@napplet/conformance-cli@0.3.4', 'dist/cli.js') */ export async function managedPackageCommand(spec: string, entry: string): Promise { const node = await ensureManagedNode(); diff --git a/packages/cli/src/package-runner.ts b/packages/cli/src/package-runner.ts index 2e1f5870..cdbbb649 100644 --- a/packages/cli/src/package-runner.ts +++ b/packages/cli/src/package-runner.ts @@ -2,7 +2,7 @@ import { type CommandRunner, runCommand, splitCommand } from "./process.ts"; import { managedPackageCommand } from "./managed-node.ts"; -const CONFORMANCE_PACKAGE = "@napplet/conformance-cli@0.3.3"; +const CONFORMANCE_PACKAGE = "@napplet/conformance-cli@0.3.4"; /** Process and output adapters used to invoke a maintained package CLI. */ export interface PackageCliRunOptions { diff --git a/packages/cli/tests/cli_test.ts b/packages/cli/tests/cli_test.ts index 7ea61fde..076bed0a 100644 --- a/packages/cli/tests/cli_test.ts +++ b/packages/cli/tests/cli_test.ts @@ -258,7 +258,7 @@ Deno.test("resolveConformanceCommand uses private tooling for either platform", command: "/private/node", args: ["/private/conformance.js"], }); } - assertEquals(calls, ["@napplet/conformance-cli@0.3.3:dist/cli.js", "@napplet/conformance-cli@0.3.3:dist/cli.js"]); + assertEquals(calls, ["@napplet/conformance-cli@0.3.4:dist/cli.js", "@napplet/conformance-cli@0.3.4:dist/cli.js"]); }); Deno.test("resolveConformanceCommand preserves an explicit custom runner", async () => { diff --git a/packages/cli/tests/zapstore_test.ts b/packages/cli/tests/zapstore_test.ts index a2c78780..3110ee82 100644 --- a/packages/cli/tests/zapstore_test.ts +++ b/packages/cli/tests/zapstore_test.ts @@ -277,7 +277,7 @@ Deno.test("screenshot runner pins a compatible version and preserves literal arg }, os: "windows", resolvePackage: async (spec, entry) => { - assertEquals(spec, "@napplet/conformance-cli@0.3.3"); + assertEquals(spec, "@napplet/conformance-cli@0.3.4"); assertEquals(entry, "dist/cli.js"); return { command: "C:/private/node.exe", args: ["C:/private/screenshot.js"] }; },