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:
@lycato/clias the only user-facing executable;@lycato/cockpitas the local server and static UI used bylycato serve;@lycato/core,@lycato/schemas, and@lycato/templates;- every
@lycato/adapter-*and@lycato/agent-*runtime package named by the CLI manifest.
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.