diff --git a/README.md b/README.md index a8a69e70..cd7c5b70 100644 --- a/README.md +++ b/README.md @@ -289,10 +289,13 @@ packages. ## Release status -This repository builds one public npm artifact named `@kaelio/ktx`. The first -public npm handoff is policy-gated through `release-policy.json`, which keeps -Python package publishing disabled because KTX-owned Python code ships inside -the npm package as a bundled wheel. +This repository builds one public npm artifact named `@kaelio/ktx`. The release +artifact manifest contains the public npm tarball and the bundled `kaelio-ktx` +runtime wheel. The first public npm handoff is policy-gated through +`release-policy.json`, which keeps Python package publishing disabled because +KTX-owned Python code ships inside the npm package as a bundled wheel. The +`python/ktx-sl` and `python/ktx-daemon` directories remain source packages for +development, not public release artifacts. Build local package artifacts and verify the guarded dry-run publish path with: diff --git a/examples/package-artifacts/README.md b/examples/package-artifacts/README.md index 089bcbbe..67c8d212 100644 --- a/examples/package-artifacts/README.md +++ b/examples/package-artifacts/README.md @@ -18,6 +18,7 @@ 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`. -The Python smoke project still installs the Python artifacts directly because -it verifies the standalone Python distributions that feed the bundled runtime -wheel. +The artifact manifest contains the public `@kaelio/ktx` npm tarball and the +bundled `kaelio-ktx` runtime wheel. The smoke does not install standalone +Python packages directly; Python-backed behavior is verified through the +managed runtime installed from the npm package. diff --git a/scripts/examples-docs.test.mjs b/scripts/examples-docs.test.mjs index 213b6b25..e8ff363a 100644 --- a/scripts/examples-docs.test.mjs +++ b/scripts/examples-docs.test.mjs @@ -150,6 +150,8 @@ describe('standalone example docs', () => { assert.match(rootReadme, /ktx runtime prune --yes/); assert.match(rootReadme, /KTX requires `uv` on `PATH`/); assert.match(rootReadme, /KTX doesn't download `uv` automatically/); + assert.match(rootReadme, /release\s+artifact manifest contains the public npm tarball and the\s+bundled `kaelio-ktx`\s+runtime wheel/); + assert.match(rootReadme, /source packages for\s+development, not public release artifacts/); assert.match(rootReadme, /ktx serve --mcp stdio/); assert.doesNotMatch(rootReadme, /uv run ktx-daemon serve-http/); assert.doesNotMatch(rootReadme, /--semantic-compute-url http:\/\/127\.0\.0\.1:8765/); @@ -160,6 +162,10 @@ describe('standalone example docs', () => { assert.match(readme, publicPackagePattern('{package}')); assert.match(readme, /managed Python runtime/); + assert.match(readme, /public `@kaelio\/ktx` npm tarball and the\s+bundled `kaelio-ktx`\s+runtime wheel/); + assert.match(readme, /does not install standalone\s+Python packages directly/); + assert.doesNotMatch(readme, /standalone Python distributions/); + assert.doesNotMatch(readme, /installs the Python artifacts directly/); assert.match(readme, /requires `uv` on `PATH`/); assert.match(readme, /ktx runtime status/); assert.match(readme, /ktx runtime doctor/);