* docs: add npm managed python runtime design * build: add bundled python runtime wheel builder * build: make local embedding dependencies optional * build: bundle python runtime wheel in cli artifacts * build: track bundled python runtime release artifact * test: verify bundled python runtime wheel * docs: add plan for bundled python runtime wheel * test: cover managed python runtime lifecycle * feat: add managed python runtime installer * feat: add runtime command runner * feat: expose runtime management commands * test: verify managed python runtime commands * docs: add plan for managed python runtime installer * feat: add managed python command helper * feat: use managed runtime for sl query compute * feat: route sl query managed runtime policy * docs: add plan for managed runtime sl query integration * feat: add managed runtime daemon metadata * feat: manage python daemon lifecycle * feat: add runtime daemon start stop commands * fix: verify managed runtime daemon lifecycle * docs: add plan for managed runtime daemon lifecycle * feat: add managed local embeddings config marker * feat: add managed local embeddings daemon helper * feat: use managed runtime for local embedding setup * feat: pass managed runtime policy through setup * docs: add plan for managed local embeddings runtime * feat: read CLI package metadata dynamically * feat: assemble public kaelio ktx npm package * feat: release one public kaelio ktx npm artifact * test: cover public kaelio ktx package invocations * chore: verify public kaelio ktx package artifacts * docs: add plan for public kaelio ktx npm package * test: verify managed runtime in public package smoke * test: finalize managed runtime release smoke * docs: add plan for managed runtime release smoke * test: specify local embeddings release smoke * feat: add local embeddings runtime smoke * chore: register local embeddings smoke * fix: verify local embeddings smoke * fix: restore artifact smoke python env helper * docs: add plan for managed local embeddings release smoke * refactor: share managed runtime install policy parsing * feat: use managed runtime for agent semantic queries * feat: use managed runtime for MCP semantic compute * docs: add plan for managed agent and MCP semantic runtime * feat(cli): add managed daemon HTTP helpers * feat(cli): route local adapters through managed daemon * feat(cli): use managed daemon for ingest helpers * feat(cli): pass managed daemon options to scan * feat(context): pass MCP ingest pull config options * feat(cli): pass managed daemon options to serve ingest * test: verify managed local ingest daemon runtime * docs: add plan for managed local ingest daemon runtime * docs: align managed runtime examples * docs: add plan for managed runtime docs cleanup * test: cover published package runtime smoke commands * test: validate published package smoke outputs * docs: add plan for published package runtime smoke * build: stamp public npm package version * release: add npm public release policy * release: add guarded npm publish script * release: document public npm release handoff * docs: add plan for public npm release handoff * test: cover managed runtime prune in package smoke * docs: document managed runtime prune * docs: add plan for managed runtime prune smoke and docs * chore: encode uv runtime prerequisite policy * fix: clarify missing uv runtime error * docs: document uv runtime prerequisite * docs: add plan for uv runtime prerequisite contract * refactor: limit release artifacts to public package runtime * chore: align release policy with bundled runtime wheel * docs: describe single public runtime artifact surface * test: verify single public runtime artifact contract * docs: add plan for single public runtime artifact cleanup * fix: align local embeddings smoke with public version * docs: add plan for local embeddings smoke public version * release: soft-launch as @kaelio/ktx@0.1.0-rc.0 on next tag Publish target moves to the pre-release version 0.1.0-rc.0 under the next dist-tag so npm install @kaelio/ktx (which resolves to latest) does not pick up the soft-launch build. Users opt in via @kaelio/ktx@next. * Fix release script boundary checks * Remove PostHog from public package bundle
13 KiB
Managed Runtime Prune Smoke and Docs Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Prove and document ktx runtime prune as part of the npm-managed
Python runtime release contract.
Architecture: The prune command already exists in the CLI runtime layer, so
this plan adds black-box package smoke coverage and public documentation only.
The smoke creates an isolated stale versioned runtime directory, previews it,
verifies confirmation is required, and removes it through the installed
@kaelio/ktx package.
Tech Stack: Node 22 ESM scripts, node:test, pnpm, Markdown, KTX CLI
managed Python runtime.
Current state
This plan follows
docs/superpowers/specs/2026-05-11-npm-managed-python-runtime-design.md.
The following plan files are based on that spec and are implemented in the current tree:
docs/superpowers/plans/2026-05-11-bundled-python-runtime-wheel.mddocs/superpowers/plans/2026-05-11-managed-python-runtime-installer.mddocs/superpowers/plans/2026-05-11-managed-python-runtime-command-integration.mddocs/superpowers/plans/2026-05-11-managed-python-runtime-daemon-lifecycle.mddocs/superpowers/plans/2026-05-11-managed-local-embeddings-runtime.mddocs/superpowers/plans/2026-05-11-public-kaelio-ktx-npm-package.mddocs/superpowers/plans/2026-05-11-managed-python-runtime-release-smoke.mddocs/superpowers/plans/2026-05-11-managed-local-embeddings-release-smoke.mddocs/superpowers/plans/2026-05-11-managed-agent-mcp-semantic-runtime.mddocs/superpowers/plans/2026-05-11-managed-local-ingest-daemon-runtime.mddocs/superpowers/plans/2026-05-11-managed-runtime-docs-and-postgres-smoke-cleanup.mddocs/superpowers/plans/2026-05-11-published-package-managed-runtime-smoke.mddocs/superpowers/plans/2026-05-11-public-npm-release-handoff.md
Implementation evidence found before writing this plan includes:
packages/cli/assets/python/manifest.jsonandpackages/cli/assets/python/kaelio_ktx-0.1.0-py3-none-any.whl.packages/cli/src/managed-python-runtime.ts, includinginstallManagedPythonRuntime(),doctorManagedPythonRuntime(), andpruneManagedPythonRuntimes().packages/cli/src/runtime.ts, including theinstall,status,doctor,start,stop, andpruneruntime command runner branches.packages/cli/src/commands/runtime-commands.ts, including theruntime prune --dry-runandruntime prune --yesCommander wiring.scripts/build-public-npm-package.mjs,scripts/package-artifacts.mjs,scripts/published-package-smoke.mjs,scripts/local-embeddings-runtime-smoke.mjs,scripts/publish-public-npm-package.mjs,release-policy.json, and.github/workflows/release.yml.README.mdandexamples/package-artifacts/README.mddocument the managed runtime but do not mentionktx runtime prune.
The remaining gap is narrow: the spec lists ktx runtime prune as part of the
runtime management command family, but public docs and installed package smoke
coverage only prove install, status, doctor, start, and stop.
File structure
- Modify
scripts/package-artifacts.test.mjs: assert that the generated installed npm smoke coversktx runtime prune --dry-run, confirmation failure, and confirmed deletion. - Modify
scripts/package-artifacts.mjs: extendnpmRuntimeSmokeSource()to create a stale runtime directory and exercisektx runtime prune. - Modify
scripts/examples-docs.test.mjs: require public docs to mentionktx runtime prune --dry-runandktx runtime prune --yes. - Modify
README.md: add prune commands and one sentence describing preview and confirmed deletion. - Modify
examples/package-artifacts/README.md: describe prune coverage in the package artifact smoke.
Task 1: Add installed package prune smoke coverage
Files:
-
Modify:
scripts/package-artifacts.test.mjs -
Modify:
scripts/package-artifacts.mjs -
Step 1: Add failing smoke-source assertions
In scripts/package-artifacts.test.mjs, inside
it('runs installed CLI commands through the public package runtime', () => {
and immediately after the existing assertions for ktx runtime stop, add:
assert.match(source, /ktx runtime prune dry run/);
assert.match(source, /0\.0\.0/);
assert.match(source, /ktx runtime prune needs confirmation/);
assert.match(source, /Refusing to prune without --yes/);
assert.match(source, /ktx runtime prune confirmed/);
assert.match(source, /Removed stale KTX Python runtimes/);
assert.match(source, /assert\.rejects\(\(\) => access\(staleRuntimeDir\)\)/);
- Step 2: Run the package artifact test and verify failure
Run:
node --test scripts/package-artifacts.test.mjs
Expected: FAIL in the installed CLI smoke source test because
npmRuntimeSmokeSource() does not yet contain the prune labels, confirmation
guard, or stale runtime removal assertion.
- Step 3: Extend the generated installed CLI smoke
In scripts/package-artifacts.mjs, inside npmRuntimeSmokeSource(), add this
block immediately after:
process.stdout.write('ktx runtime daemon lifecycle verified\n');
Add:
const staleRuntimeDir = join(process.env.KTX_RUNTIME_ROOT, '0.0.0');
await mkdir(staleRuntimeDir, { recursive: true });
const runtimePruneDryRun = await run('pnpm', ['exec', 'ktx', 'runtime', 'prune', '--dry-run']);
requireSuccess('ktx runtime prune dry run', runtimePruneDryRun);
requireOutput('ktx runtime prune dry run', runtimePruneDryRun, /Stale KTX Python runtimes/);
requireOutput('ktx runtime prune dry run', runtimePruneDryRun, /0\.0\.0/);
await access(staleRuntimeDir);
const runtimePruneNeedsConfirmation = await run('pnpm', ['exec', 'ktx', 'runtime', 'prune']);
assert.equal(runtimePruneNeedsConfirmation.code, 1, 'ktx runtime prune without --yes must fail');
assert.equal(runtimePruneNeedsConfirmation.stdout, '', 'ktx runtime prune confirmation failure wrote stdout');
assert.match(runtimePruneNeedsConfirmation.stderr, /Refusing to prune without --yes/);
const runtimePruneConfirmed = await run('pnpm', ['exec', 'ktx', 'runtime', 'prune', '--yes']);
requireSuccess('ktx runtime prune confirmed', runtimePruneConfirmed);
requireOutput('ktx runtime prune confirmed', runtimePruneConfirmed, /Removed stale KTX Python runtimes/);
requireOutput('ktx runtime prune confirmed', runtimePruneConfirmed, /0\.0\.0/);
await assert.rejects(() => access(staleRuntimeDir));
process.stdout.write('ktx runtime prune verified\n');
No import changes are needed because the generated smoke already imports
assert, access, mkdir, and join.
- Step 4: Run the package artifact test and verify pass
Run:
node --test scripts/package-artifacts.test.mjs
Expected: PASS. The source assertions now find prune dry-run coverage, confirmation failure coverage, confirmed prune coverage, and stale directory deletion verification.
- Step 5: Commit the smoke coverage
Run:
git add scripts/package-artifacts.mjs scripts/package-artifacts.test.mjs
git commit -m "test: cover managed runtime prune in package smoke"
Task 2: Document runtime prune in public docs
Files:
-
Modify:
scripts/examples-docs.test.mjs -
Modify:
README.md -
Modify:
examples/package-artifacts/README.md -
Step 1: Add failing docs assertions
In scripts/examples-docs.test.mjs, inside
it('documents public npm and managed runtime usage in the README', async () => {
and immediately after:
assert.match(rootReadme, /ktx runtime stop/);
Add:
assert.match(rootReadme, /ktx runtime prune --dry-run/);
assert.match(rootReadme, /ktx runtime prune --yes/);
In the same file, inside
it('documents the public package artifact smoke shape', async () => { and
immediately after:
assert.match(readme, /ktx runtime doctor/);
Add:
assert.match(readme, /ktx runtime prune --dry-run/);
assert.match(readme, /ktx runtime prune --yes/);
- Step 2: Run the docs test and verify failure
Run:
node --test scripts/examples-docs.test.mjs
Expected: FAIL because README.md and
examples/package-artifacts/README.md do not yet mention ktx runtime prune.
- Step 3: Update the root README runtime section
In README.md, in the ## Managed Python runtime command block, replace:
npx ktx runtime install --yes
npx ktx runtime status
npx ktx runtime doctor
npx ktx runtime start
npx ktx runtime stop
with:
npx ktx runtime install --yes
npx ktx runtime status
npx ktx runtime doctor
npx ktx runtime start
npx ktx runtime stop
npx ktx runtime prune --dry-run
npx ktx runtime prune --yes
Immediately after that command block, add:
Use `runtime prune --dry-run` to preview stale runtime directories from older
CLI versions. Add `--yes` to remove those stale directories after daemon
processes are stopped.
- Step 4: Update package artifact smoke docs
In examples/package-artifacts/README.md, replace:
The managed Python runtime smoke isolates `KTX_RUNTIME_ROOT`, verifies
`ktx runtime status`, runs `ktx sl query --yes` to install the core runtime from
the bundled wheel, checks `ktx runtime doctor`, starts and reuses the managed
daemon, and stops it.
with:
The managed Python runtime smoke isolates `KTX_RUNTIME_ROOT`, verifies
`ktx runtime status`, runs `ktx sl query --yes` to install the core runtime from
the bundled wheel, checks `ktx runtime doctor`, starts and reuses the managed
daemon, stops it, previews a stale runtime with `ktx runtime prune --dry-run`,
verifies confirmation is required, and removes the stale runtime with
`ktx runtime prune --yes`.
- Step 5: Run the docs test and verify pass
Run:
node --test scripts/examples-docs.test.mjs
Expected: PASS. The public README and package artifact README now document runtime prune alongside the other managed runtime commands.
- Step 6: Commit the docs coverage
Run:
git add scripts/examples-docs.test.mjs README.md examples/package-artifacts/README.md
git commit -m "docs: document managed runtime prune"
Task 3: Verify the completed prune release surface
Files:
-
Verify:
scripts/package-artifacts.mjs -
Verify:
scripts/package-artifacts.test.mjs -
Verify:
scripts/examples-docs.test.mjs -
Verify:
README.md -
Verify:
examples/package-artifacts/README.md -
Step 1: Run focused tests
Run:
node --test scripts/package-artifacts.test.mjs scripts/examples-docs.test.mjs
Expected: PASS. The source-level tests cover generated package smoke behavior and docs assertions.
- Step 2: Run the installed package artifact smoke
Run:
pnpm run artifacts:check
Expected: PASS. The generated installed CLI smoke prints:
ktx runtime prune verified
and removes the temporary 0.0.0 directory from the isolated
KTX_RUNTIME_ROOT.
- Step 3: Inspect git status
Run:
git status --short
Expected: only the five planned files are modified before the final commit, or no modified files remain after the task commits.
- Step 4: Commit verification fixes if needed
If verification required small corrections, commit only those intended files:
git add scripts/package-artifacts.mjs scripts/package-artifacts.test.mjs scripts/examples-docs.test.mjs README.md examples/package-artifacts/README.md
git commit -m "test: verify managed runtime prune release surface"
Acceptance criteria
- The generated installed npm package smoke creates a stale versioned runtime
directory under the isolated
KTX_RUNTIME_ROOT. ktx runtime prune --dry-runlists the stale runtime and leaves it on disk.ktx runtime prunewithout--yesexits nonzero and prints the existing confirmation guidance.ktx runtime prune --yesremoves the stale runtime directory.README.mdlistsktx runtime prune --dry-runandktx runtime prune --yeswith the other managed runtime commands.examples/package-artifacts/README.mddescribes prune coverage in the package artifact smoke.
Self-review
- Spec coverage: this plan covers the remaining visible gap for the runtime management command family in the npm-managed Python runtime spec. The prune implementation already exists, and this plan adds release smoke and public docs coverage.
- Placeholder scan: no placeholder steps, deferred implementation notes, or unspecified behavior gaps remain.
- Type consistency: the plan uses existing labels and functions:
npmRuntimeSmokeSource(),requireSuccess(),requireOutput(),KTX_RUNTIME_ROOT,ktx runtime prune --dry-run, andktx runtime prune --yes.