mirror of
https://github.com/Kaelio/ktx.git
synced 2026-07-04 10:52:13 +02:00
* 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
239 lines
8.1 KiB
Markdown
239 lines
8.1 KiB
Markdown
# Managed Local Embeddings Smoke Public Version 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:** Make the opt-in local embeddings release smoke validate the public
|
|
`@kaelio/ktx` package version instead of the private workspace version.
|
|
|
|
**Architecture:** Reuse the public package constants from
|
|
`scripts/build-public-npm-package.mjs` inside the local embeddings smoke. Add a
|
|
small exported RegExp helper so the unit test can lock the version expectation
|
|
without running the expensive model-download smoke.
|
|
|
|
**Tech Stack:** Node.js ESM scripts, `node:test`, pnpm release scripts.
|
|
|
|
---
|
|
|
|
## Current State
|
|
|
|
The npm-managed Python runtime spec is
|
|
`docs/superpowers/specs/2026-05-11-npm-managed-python-runtime-design.md`.
|
|
The current branch already contains implementation commits for each existing
|
|
plan derived from that spec.
|
|
|
|
Implemented spec-derived plans:
|
|
|
|
- `docs/superpowers/plans/2026-05-11-bundled-python-runtime-wheel.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-python-runtime-installer.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-python-runtime-command-integration.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-python-runtime-daemon-lifecycle.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-local-embeddings-runtime.md`
|
|
- `docs/superpowers/plans/2026-05-11-public-kaelio-ktx-npm-package.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-python-runtime-release-smoke.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-local-embeddings-release-smoke.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-agent-mcp-semantic-runtime.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-local-ingest-daemon-runtime.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-runtime-docs-and-postgres-smoke-cleanup.md`
|
|
- `docs/superpowers/plans/2026-05-11-published-package-managed-runtime-smoke.md`
|
|
- `docs/superpowers/plans/2026-05-11-public-npm-release-handoff.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-runtime-prune-smoke-and-docs.md`
|
|
- `docs/superpowers/plans/2026-05-11-managed-runtime-uv-prerequisite-contract.md`
|
|
- `docs/superpowers/plans/2026-05-11-single-public-runtime-artifact-cleanup.md`
|
|
|
|
The remaining gap is in
|
|
`scripts/local-embeddings-runtime-smoke.mjs`. The script selects and installs a
|
|
public tarball named `kaelio-ktx-*.tgz` and writes a smoke package dependency on
|
|
`@kaelio/ktx`, but line 267 still expects `@kaelio/ktx 0.0.0-private`. The
|
|
public package builder defines `PUBLIC_NPM_PACKAGE_VERSION = '0.1.0'`, and the
|
|
main packed-package smoke already expects `@kaelio/ktx 0.1.0`.
|
|
|
|
## File Structure
|
|
|
|
This change keeps the release version source of truth in one script and reuses
|
|
it from the opt-in smoke.
|
|
|
|
- Modify `scripts/local-embeddings-runtime-smoke.mjs`: import the public package
|
|
constants, export `expectedPublicKtxVersionPattern()`, and use that pattern
|
|
for the smoke version assertion.
|
|
- Modify `scripts/local-embeddings-runtime-smoke.test.mjs`: import
|
|
`expectedPublicKtxVersionPattern()` and assert that it accepts
|
|
`@kaelio/ktx 0.1.0` and rejects `@kaelio/ktx 0.0.0-private`.
|
|
|
|
### Task 1: Align the local embeddings smoke version assertion
|
|
|
|
**Files:**
|
|
- Modify: `scripts/local-embeddings-runtime-smoke.mjs:1-267`
|
|
- Modify: `scripts/local-embeddings-runtime-smoke.test.mjs:5-118`
|
|
- Test: `scripts/local-embeddings-runtime-smoke.test.mjs`
|
|
|
|
- [ ] **Step 1: Write the failing version-pattern test**
|
|
|
|
In `scripts/local-embeddings-runtime-smoke.test.mjs`, update the import block
|
|
to include `expectedPublicKtxVersionPattern`:
|
|
|
|
```js
|
|
import {
|
|
buildLocalEmbeddingsSmokeEnv,
|
|
expectedPublicKtxVersionPattern,
|
|
localEmbeddingsSmokeCommands,
|
|
localEmbeddingsSmokeOptIn,
|
|
parseDaemonBaseUrl,
|
|
publicKtxTarballName,
|
|
validateEmbeddingResponse,
|
|
} from './local-embeddings-runtime-smoke.mjs';
|
|
```
|
|
|
|
Then add this test after the `publicKtxTarballName` describe block:
|
|
|
|
```js
|
|
describe('expectedPublicKtxVersionPattern', () => {
|
|
it('matches the public package version and rejects the private workspace version', () => {
|
|
const pattern = expectedPublicKtxVersionPattern();
|
|
|
|
assert.match('@kaelio/ktx 0.1.0\n', pattern);
|
|
assert.doesNotMatch('@kaelio/ktx 0.0.0-private\n', pattern);
|
|
});
|
|
});
|
|
```
|
|
|
|
- [ ] **Step 2: Run the test to verify it fails**
|
|
|
|
Run:
|
|
|
|
```bash
|
|
node --test scripts/local-embeddings-runtime-smoke.test.mjs
|
|
```
|
|
|
|
Expected: FAIL with an ESM export error that says
|
|
`expectedPublicKtxVersionPattern` is not exported from
|
|
`./local-embeddings-runtime-smoke.mjs`.
|
|
|
|
- [ ] **Step 3: Import the public package constants**
|
|
|
|
In `scripts/local-embeddings-runtime-smoke.mjs`, add this import after the
|
|
existing Node imports:
|
|
|
|
```js
|
|
import {
|
|
PUBLIC_NPM_PACKAGE_NAME,
|
|
PUBLIC_NPM_PACKAGE_VERSION,
|
|
} from './build-public-npm-package.mjs';
|
|
```
|
|
|
|
The top of the file becomes:
|
|
|
|
```js
|
|
import { execFile } from 'node:child_process';
|
|
import { mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import { dirname, join, resolve } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { promisify } from 'node:util';
|
|
|
|
import {
|
|
PUBLIC_NPM_PACKAGE_NAME,
|
|
PUBLIC_NPM_PACKAGE_VERSION,
|
|
} from './build-public-npm-package.mjs';
|
|
```
|
|
|
|
- [ ] **Step 4: Add the version-pattern helper**
|
|
|
|
In `scripts/local-embeddings-runtime-smoke.mjs`, add these functions after the
|
|
`OPT_IN_MESSAGE` constant:
|
|
|
|
```js
|
|
function escapeRegExp(value) {
|
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
}
|
|
|
|
export function expectedPublicKtxVersionPattern() {
|
|
return new RegExp(
|
|
`${escapeRegExp(PUBLIC_NPM_PACKAGE_NAME)} ${escapeRegExp(PUBLIC_NPM_PACKAGE_VERSION)}`,
|
|
);
|
|
}
|
|
```
|
|
|
|
- [ ] **Step 5: Use the helper in the smoke**
|
|
|
|
In `scripts/local-embeddings-runtime-smoke.mjs`, replace this line:
|
|
|
|
```js
|
|
requireOutput(commands[0].label, version, /@kaelio\/ktx 0\.0\.0-private/);
|
|
```
|
|
|
|
with:
|
|
|
|
```js
|
|
requireOutput(commands[0].label, version, expectedPublicKtxVersionPattern());
|
|
```
|
|
|
|
- [ ] **Step 6: Run the focused test**
|
|
|
|
Run:
|
|
|
|
```bash
|
|
node --test scripts/local-embeddings-runtime-smoke.test.mjs
|
|
```
|
|
|
|
Expected: PASS. The new test proves the smoke accepts `@kaelio/ktx 0.1.0` and
|
|
rejects `@kaelio/ktx 0.0.0-private`.
|
|
|
|
- [ ] **Step 7: Run related release-script tests**
|
|
|
|
Run:
|
|
|
|
```bash
|
|
node --test scripts/local-embeddings-runtime-smoke.test.mjs scripts/build-public-npm-package.test.mjs scripts/package-artifacts.test.mjs
|
|
```
|
|
|
|
Expected: PASS. These tests cover the public package constants, tarball name,
|
|
artifact smoke source, and local embeddings smoke helpers.
|
|
|
|
- [ ] **Step 8: Run a stale-expectation search**
|
|
|
|
Run:
|
|
|
|
```bash
|
|
rg -n "@kaelio/ktx 0\\.0\\.0-private|0\\\\\\.0\\\\\\.0-private" scripts/local-embeddings-runtime-smoke.mjs
|
|
```
|
|
|
|
Expected: no output. The opt-in local embeddings smoke no longer contains the
|
|
private package version expectation. The test file still uses
|
|
`@kaelio/ktx 0.0.0-private` as a negative fixture.
|
|
|
|
- [ ] **Step 9: Commit**
|
|
|
|
Run:
|
|
|
|
```bash
|
|
git add scripts/local-embeddings-runtime-smoke.mjs scripts/local-embeddings-runtime-smoke.test.mjs
|
|
git commit -m "fix: align local embeddings smoke with public version"
|
|
```
|
|
|
|
## Verification
|
|
|
|
Run these checks before marking the plan complete:
|
|
|
|
```bash
|
|
node --test scripts/local-embeddings-runtime-smoke.test.mjs scripts/build-public-npm-package.test.mjs scripts/package-artifacts.test.mjs
|
|
rg -n "@kaelio/ktx 0\\.0\\.0-private|0\\\\\\.0\\\\\\.0-private" scripts/local-embeddings-runtime-smoke.mjs
|
|
```
|
|
|
|
Expected results:
|
|
|
|
- `node --test ...` exits with code 0.
|
|
- `rg ...` prints no matches.
|
|
- No Python files changed, so the repository Python pre-commit requirement does
|
|
not apply.
|
|
|
|
## Self-Review
|
|
|
|
- Spec coverage: this plan fixes the opt-in local embeddings release smoke from
|
|
the npm-managed runtime spec so it validates the public npm package produced
|
|
by the current release artifact flow.
|
|
- Placeholder scan: the plan contains concrete file paths, code blocks,
|
|
commands, and expected outcomes.
|
|
- Type consistency: the helper name is consistently
|
|
`expectedPublicKtxVersionPattern`, and it uses
|
|
`PUBLIC_NPM_PACKAGE_NAME` plus `PUBLIC_NPM_PACKAGE_VERSION` from the public
|
|
package builder.
|