Stability Contract
As of 1.0.0, the surfaces below are frozen under semver: breaking any of them requires a major version. Minor and patch updates may add to these surfaces but never change or remove existing meaning. Every promise on this page is pinned by contract tests in the repository (tests/contract/) — the freeze is enforced by CI, not by good intentions.
What a 1.x update may do to you
Add new commands, flags, tools, optional fields, and optional files. Improve retrieval scores. Fix bugs. Refresh skill content.
What a 1.x update may never do to you
Remove or rename a command, flag, or tool; change the meaning of an existing file or field; change JSON output keys; break a workspace or bundle created by 1.0.0.
Frozen surfaces
Workspace format
- The meaning and location of
KNOWLEDGE.md,SCHEMA.md,INDEX.base, the four compiled directories (entities/,concepts/,comparisons/,queries/),inbox/, andLibrary/<bundle-id>/. .knowlery/manifest.json(existing fields) and.knowlery/bundles.json(schemaVersion 1). Any 1.x reads state written by 1.0.0, forever.- The page tier rules (compiled dirs are agent-tier; everything else is user-tier).
CLI surface
- Every command and subcommand shipped in 1.0, their positional arities, and their flags.
--jsonoutput shapes: existing keys never change; additive keys are minor.- Exit-code semantics:
0success — including findings (an abstaining query, an empty report);1operational failure;2usage error. - The
--kb/--dirresolution rules:--kbresolves through the registry,--dirworks forever, passing both is an error, and the registry is never a prerequisite.
MCP contracts
- The eight tool names (
list_kbs,query,stale,health,list_bundles,init_kb,capture,sync), their input schemas (required fields and types; new optional inputs are minor), and theirstructuredContentshapes (existing keys). The advertised schemas carry the frozen keys — what a client introspects viatools/listis the contract, and the server validates every result against it at runtime. - Findings-vs-errors semantics: abstention,
healthy: false, and stale-heavy reports are successful results; tool errors are reserved for broken calls. - The nine prompt names, the
knowlery://{kb}/{+path}resource scheme, and the readable-surface allowlist boundary. knowlery mcp serveflags and the auth contract (bearer token, 401 shape).
Bundle format (OKF)
knowlery-bundle.jsonschemaVersion 1 fields and the zip layout (index.md,agent-index.json,_sources/, the update log).- Install/update gate semantics: version-increase requirement and local-modification refusal.
KB registry
registry.jsonschemaVersion 1, the name grammar ([a-z0-9][a-z0-9-_], max 64 chars), reserved names (*,all), and the corrupt-is-loud rule (a damaged registry is reported, never silently reset).
Explicitly not frozen
Stated just as plainly, so absence of a promise is never mistaken for one:
- Retrieval ranking internals. Scores, ordering among candidates, and the confidence-gate thresholds may improve in any release. The contract is the shape of results and the abstention verdict string (
no-confident-match), not the numbers. - Skill prose. Skill content evolves; skill names are contract.
- The inner keys of
health'sconfigobject. Individual check fields may be added, renamed, or retired as the health checker evolves — freezing them would freeze the checks themselves. Its contract ishealthy(boolean) plus the presence of aconfigobject. - Plugin UI (dashboard layout, modals, settings organization), docs, and eval thresholds.
- Private state under
.knowlery/not listed above (activity receipts, reports, freshness files). - TypeScript internals:
src/is not a public API; importing from the package is unsupported.
Deprecation path
A surface can gain a successor (a new flag, a new tool) in a minor release; the old one keeps working until a major version removes it. Aliases are not breaks.