cwest/okfctl
Author and maintain Open Knowledge Format (OKF) bundles from your agent — scaffold and validate nodes, run curation health checks, plan v0.1→v0.2 migrations, and query the opt-in semantic layer.
Changelog
All notable changes to okfctl are documented here.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
Entries for tagged releases mirror the notes published on the
GitHub releases page. On each new
tagged release, goreleaser generates the release notes from the commit log
(see .goreleaser.yaml).
Unreleased
0.4.0 - 2026-08-19
Added
- Agent Plugins 1.0.0 packaging: a root
plugin.jsonthat lets a compatible agent client install okfctl's shareable skills as one unit. The manifest is spec-only plusAGENTS.md, pins the$schemato the Agent Plugins 1.0.0 schema URL, and keeps okfctl-specific config underextensions."dev.okfctl". CI validates it against the pinned schema, rejects a deliberately malformed fixture, and runs the skill-leak gate over the packaged payload. - A skill-command contract check that installs the released binary from the public install path and runs every command the shipped skills document, so a skill drifting out of sync with the CLI fails CI even when the manifest stays byte-identical.
Changed
- User-facing prose across the README, the hand-written docs, and the command help text was rewritten in a plainer voice, and the README now leads with the problem okfctl solves rather than a command list.
- House prose style is the closed-up Chicago em dash (
word—word); the shipped Markdown surfaces were converted to it.
Fixed
- Homepage inline-boundary spacing and the brand wordmark render correctly.
- The retired Go Report Card badge was dropped from the README.
Build
- A CI prose gate scans the shipped Markdown surfaces and the built site for a negative-listing slop cadence and for spaced em dashes, failing the build on either. The gate rides one detector set across both an HTML and a Markdown front end, and both of its controls are proven in CI.
- The release path now refuses to publish a tag whose version has no matching,
dated, non-empty
## [X.Y.Z]section in this changelog. The check runs before goreleaser, so an empty release can never ship.
0.3.1 - 2026-08-13
Fixed
- The published documentation site rebuilds from
mainafter a release, so the live docs no longer lag a freshly tagged version.
Build
- The Go toolchain was bumped to 1.26.6 to pick up patched standard-library fixes.
0.3.0 - 2026-08-13
Added
- Installable, verifiable distribution. A one-line installer served at
https://okfctl.dev/install.shdetects OS/arch, downloads the matching release archive, verifies it against the publishedchecksums.txt, and installs bothokfctlandokfctl-search, refusing to install on a checksum mismatch. A Homebrew cask (brew install cwest/tap/okfctl) is published tocwest/homebrew-tap. Releases now include Windows builds (amd64 and arm64) as.ziparchives and Linux system packages (.deband.rpm) via nfpm. - Supply-chain provenance. Every archive ships a Software Bill of Materials
generated with syft, and release artifacts are signed keyless with cosign
(Sigstore/Fulcio) using the release workflow's OIDC identity, verifiable with
cosign verify-blob. GET /api/v1/search—theokfctl-apiplugin serves search off a resident index, with the lexical gate exposed as a query parameter, unknown parameters rejected, and the recency-decay floor applied. The API is v0.2-aware, surfacingstatus,epistemic, andgenerated.at.- Query scoping for search—repeatable, negatable
--path/--type/--tag(and--not-*) filters, a--lexical-gatethat preserves lexical recall alongside semantic ranking, and bounded recency decay with a configurable relevance floor and half-life. - The okfctl.dev site—a bespoke Astro site and its GitHub Pages pipeline,
serving the documentation at clean URLs, with a social card, favicon,
robots.txt,llms.txt, and a 404 page, shipped through the theming seam. - Generated command reference—the command reference is generated from the cobra tree with a CI drift gate, and every command gained a long description and a runnable example.
- A TACA-style trustworthiness evaluation pass for knowledge-base nodes.
- Fuzz targets for the untrusted-input parsers.
Changed
validate,lint, andanalyzeare OKF v0.2-aware—they read the v0.2 provenance families and resolve nested provenance in templaterequired_fields, while keeping the v0.1 fallbacks.okfctl versionfrom ago install github.com/cwest/okfctl@latestbuild now reports the installed module version instead ofdev, via adebug.ReadBuildInfo()fallback. Release builds still report the injected tag, and a plain checkout build without usable module metadata still reportsdev.analyzeprefersverified[].atas the freshness basis.- The README was rewritten as an on-ramp rather than a command dump, and the homepage copy had its AI-slop tells removed.
- CI pins its actions to commit SHAs, attests build provenance, runs the site
test suite rather than only the site build, and re-enables
gosecanderrcheckwith per-site triage.
Fixed
- Release signing publishes correctly by using cosign's bundle format.
- Search orders the preserved lexical tail by score, and rejects an
out-of-range
--decay-flooror a negative--half-life. - The documentation site publishes at clean URLs instead of
/_generated/, and the 404 page andllms.txtpoint at the clean doc URLs. - A v0.1 flat-string
sourceslist is accepted for templaterequired_fields.
0.2.0 - 2026-08-02
okfctl targets OKF v0.2. New bundles are created at okf_version: 0.2, and
v0.1 bundles remain readable—v0.2's two breaking renames (timestamp →
generated.at, body # Citations → frontmatter sources) are read with a v0.1
fallback, per spec §12's best-effort consumption rule.
Added
okf migrate—a two-phase v0.1 → v0.2 upgrade path: a mechanical pass plus a judgment queue for calls a tool should not make alone. Ships with theokf-migrate-planskill.okfctl-api—an HTTP API plugin over a bundle, serving/statsand/graph(walking skeleton; ships with an ADR describing its shape).- Passage-level search indexing—sub-node passages are indexed and returned as snippets, so a hit points at the paragraph rather than the file. Retrieval quality on the real corpus improved 0.545 → 0.909 (~12x index size).
- Query scoping—filter semantic queries by path, type, and tag, with optional recency decay.
lint --json—machine-readable findings for CI and downstream tooling.- Bulk index promotion—promote directory-as-concept
index.mdnodes in bulk.
Changed
- Provenance reads the v0.2
generated/verified/sourcesfamilies, falling back to the v0.1 forms when a bundle declares the older version. - Freshness resolves through
generated.atrather than filesystemmodified/created, so a regenerated node reports its real age. - Prose-only scanning—cross-reference and time-marker detection no longer
reads link URLs as prose, eliminating a class of false
missing-xrefand time-sensitive findings (both inline and reference-style links excluded). - Title-as-home-node—a node whose title leads with a term is credited as that term's home, closing a coverage-gap false positive.
- A model2vec directory containing
tokenizer.jsonis now accepted for search. - Section citations corrected throughout for the v0.1 (11 sections) → v0.2 (13 sections) numbering shift.
Fixed
- Broken internal links are gated as defects when they look like defects.
- Vendored and derived directories are skipped during the bundle walk.
- A bulk mechanical commit can declare itself as such and skip the git-drift check.
0.1.0 - 2026-07-27
Initial release: the okfctl command-line tool for authoring and maintaining
Open Knowledge Format (OKF) bundles, targeting OKF v0.1.
Added
- Bundle lifecycle—
bundle init, node authoring, andvalidate(the walking skeleton). - Reserved-file lifecycle—generation and maintenance of the reserved
index.mdandlog.mdfiles, with nested per-directory indexes and dir-relative links (§6). - Node mutation verbs—
node edit,node mv,node rm, andnode refresh(bulk-fix of stale timestamps). - Derived-artifact maintenance—
created/modifiedmetadata,log.md, andindex.mdmaintained by default, with git-drift findings. - Lint—structural checks and semantic curation checks (
lint --semantic); precision hardened on the real corpus (2,438 findings → 21). - Analyze—
okfctl analyze, a proactive curation report covering freshness and clusters. - Graph—link-graph export and serve; DOT-pipe as the sanctioned SVG path.
- Search—core lexical + graph-structural search, plus the
okfctl-searchsemantic plugin (Model2Vec safetensors loader, WordPiece tokenizer). - Plugins—
okfctl-<name>plugin dispatch overPATH, withplugin install. - Remote sources—
registry/connectfor git-backed remote bundle sources. - Release mechanics—goreleaser, version injection via ldflags, and installable binaries.
- Documentation & conformance—the PRD, ADRs, ship-with-the-tool skills
(
okf-authoring,okf-curation-health,okf-semantic-search), and a spec-conformance suite proving okfctl's output validates clean.