Distribution boundary

Lycato's installable unit is a coordinated npm package closure, not a standalone copy of @lycato/cli and not the source monorepo. The closure contains:

All packages in that closure are public, versioned together, and expose only their declared files output. Agent packages include their prompt and agent descriptor because the compiled worker resolves those assets at runtime. Source files, tests, and monorepo-only tooling are not part of the runtime artifact.

Release invariant

The closure must be built and published together through pnpm/Changesets. pnpm rewrites workspace:* ranges to the coordinated release versions. Publishing @lycato/cli alone is an invalid release because a registry install could not resolve its runtime packages.

pnpm test:cli:clean-machine enforces the local artifact form of this invariant. It builds the workspace, packs the CLI and every runtime workspace dependency, installs all third-party runtime dependencies in an isolated directory, extracts the package tarballs without source-tree symlinks, and exercises the installed CLI and Cockpit server. The gate also checks package identity, public access metadata, tarball integrity, required assets, and installed server resolution.

Public-registry availability remains a release-time canary: the local gate proves package contents and runtime resolution but does not claim that a version has already propagated through npm.