Releases
0.15.0
Changed
lokf-curator/references/domain-schemas.mdgains “When the domain already has a schema”: a domain schema imports a domain’s existing LinkML vocabulary beside LOKF’s rather than re-describing it. Whether provenance fields belong on domain records is left to the domain’s owners and OKF.lokf-scaffoldingrenamedlokf-sidecar, matching what it produces: directory, frontmatter, install commands, this repository’s own bundle, and every cross-reference. A bundle already laid down needs nothing - the files it wrote are identical.- Corrected Obsidian guidance for
knowledge_bundle: the link is opened itself as a vault, never the repository root (Obsidian skips a symlink resolving inside the vault it’s indexing, and never indexes a dot-folder). Linking a repository’s.lokf/knowledgeinto a personal vault - the reverse direction - is supported and now documented. README.mdgains “Where the skills meet an Obsidian vault”: the bundle’s two names and which is real per host, a plugin-for-skill table, and the vault-as-workshop/bundle-as-exhibition framing. “The fifth role” no longer calls LOKF Curator a registrar: it is the curator’s assistant, and the curator is always a person.- LOKF Enforcer is now LOKF Registrar (repository
obsidian-lokf-registrar), renamed for its role before its first release, wherever the README, the skills and this repository’s bundle name it.
Added
lokf-sidecarlays the bundle down by host. Two names, one real folder:.lokf/knowledge(what the tools address) andknowledge_bundle(what people and Obsidian open). A code repository keeps the hidden folder real withknowledge_bundleas the doorway link; a notes vault or shared folder (Step 0 asks) makesknowledge_bundle/real and.lokf/knowledgethe link - detected by both plugins with nothing to configure.just lokf-linkrecreates the visible layout’s link where a sync service drops it, follows a newvisiblevariable for a vault nested inside its repository (e.g.../vault/knowledge_bundle), and refuses a dangling link instead of failing onln.scripts/test-sidecar-layouts.sh, run by the repository-contract check: builds throwaway hosts in both layouts and pins the wrapper’s boundary check, the librarian workflow’s change detection and packaging, the registrar’s triggers, andlokf-link, all against both bundle names.lokf-librariannow leaves LOKF Registrar’s Obsidian affordances alone by rule - the<!-- lokf:related -->block and thediataxis.mdmap - and addresses the bundle by both paths when scoping a diff or PR.- Semantic release, version and changelog only: the version is computed from Conventional Commits on
main, andCHANGELOG.md’s## [Unreleased]section is promoted into a dated heading. It never tags -gh skill publishremains the one tag creator - andpublish.ymlnow refuses a typed version that disagrees with what was promoted. See docs/releasing.md.
Fixed
- The librarian wrapper and both workflow templates name the bundle under both
.lokf/knowledgeandknowledge_bundle: a git pathspec never traverses a symlink, so the visible layout previously went undetected.git addis guarded against a pathspec matching nothing. - Windows guidance now prefers a junction (
mklink /J, no elevated rights, followed by Obsidian like a symlink) over the Developer-Modemklink /Dnote.
0.14.0
Security
A human:<id> verification is a claim any writer can type, not a credential, and lokf validate passes a forged one since it is well-formed - so “confirmed by a person” was forgeable by anything able to steer lokf-curator or edit the bundle directly.
knowledge-registrar.yamlgains aprovenancejob: everyhuman:actor a PR newly adds under.lokf/knowledge/needs forge-held evidence - an APPROVED review from that account, or, when they authored the PR, a signature of theirs on the introducing commit, checked via GitHub’s API (a runner has no keyring, sogit log %G?can’t do this locally). The load-bearing change; the rest is defence in depth.- Solo maintainers take the signature branch (three
git configlines, documented inreferences/automation.md); an optionalattestationjob gates on a GitHub Environment’s required reviewers instead for a repository that can’t sign - deliberately not a switch that disables the check, since an environment reviewer may be the PR’s own author. lokf-curatorresolves identity fromgh api useronly - the spoofablegit config user.namefallback is gone - and Step 2 now refuses to run unattended (CI, a headless session, a subagent, a scheduled task); Step 1 stays read-only and safe anywhere.lokf-sidecarandlokf-curatornow report whether commit signing is on before a solo maintainer spends twenty minutes on confirmations the gate will reject, andlokf-curatorStep 1 reports a Not tied to a signed commit count on existinghuman:events - both report only, never touchgit config.
Fixed
lokf-curatorandREADME.mdsaid LOKF has 14 built-in classes; the installed schema has 15 -Rolewas missing from every count and enumeration. Corrected in the class list, the vocabulary-fit label, and the “vocabulary stops fitting” paragraph.
Added
lokf-sidecarStep 2 now also creates aknowledge_bundlesymlink to.lokf/knowledgeat the repo root, a visible entry point for folder pickers that hide dot-directories, Obsidian’s “Open folder as vault” among them.templates/gitignoreexcludes the.obsidian/folder Obsidian writes through it, and the lint and link checks skip the aliased files.
0.13.0
- The librarian SKILL now says a spaced dash (“X - Y”) must not land at the start of a line after wrapping, where Markdown reads it as a list item and trips
MD032/blanks-around-lists. Reword or rewrap so the dash stays mid-line. .markdownlint-cli2.jsoncdisablesMD060(table column style): it flags the padded-header/bare-separator table style used everywhere in this repo (and on GitHub generally) as inconsistent, and nostylesetting reconciles the two without just relocating which row gets flagged..lokf/README.md’s concept checklist gained a reminder not to let a spaced dash wrap onto its own line, since Markdown reads that as a list item (MD032).
0.12.0
Changed
- Renamed the
knowledge-validate.yamlCI gate (and its scaffolding template counterpart) toknowledge-registrar.yaml, to name it for the registrar role it actually performs - keeping bundle records well-formed, never judging whether their content is true. Updated every cross-reference, includingREADME.md’s own “fifth role” paragraph, which now names the gate directly. A repo that already scaffolded the old filename keeps working; re-scaffolding (or a manual rename) picks up the new name.
Fixed
- Each
SKILL.md(lokf-curator,lokf-docent,lokf-librarian,lokf-sidecar) now declareslicense: Apache-2.0in its frontmatter, matching this repository’sLICENSE. Fixes therecommended field missing: licensewarninggh skill publishraised on all four skills during thev0.11.0release.
0.11.0
Security
knowledge-librarianworkflow now runs a fixed, reviewed in-repo script (bash .lokf/scripts/knowledge-librarian.sh) instead of an arbitrary command string from a repository variable, so changing what executes goes through code review rather than an unreviewed Settings edit.knowledge-librarianworkflow split into two jobs: the agent (third-party code) runs in acontents: readjob with no persisted git credentials and hands its proposed change to a separate privileged job - which runs no agent code - as a patch artifact. Only that job holdscontents: write/pull-requests: write, so a compromised agent cannot reach a write-scoped credential. Top-level workflow permissions now default to none.knowledge-librarian.shwrapper now parsesAGENT_CLIinto a quoted argv array (removing the unquoted expansion that word-split the value at the command position) and enforces the bundle boundary after the agent runs: it fails if the agent modified any path outside.lokf/knowledge/(.lokf/feedback.mdallowed), so the “edit only the bundle” contract is enforced, not merely requested.
Changed
- Arm the scheduled librarian run with the
KNOWLEDGE_LIBRARIAN_ENABLEDrepository variable set totrue(replacesKNOWLEDGE_LIBRARIAN_CMD);AGENT_CLIis unchanged. Updated thelokf-sidecartemplates, the dogfooded workflow, the wrapper-script header, and thelokf-sidecar/lokf-librarianautomation docs to match.
0.9.0
Initial release: four Agent Skills that turn a repository’s scattered knowledge into a maintained, trusted LOKF knowledge bundle - built once, kept current, and reviewed by a person, rather than rediscovered every session.
lokf-sidecar- bootstraps a fresh.lokf/sidecar into a repository that has none: tooling, docs, and a dummy skeleton from bundled templates.lokf-librarian- scrapes the repository, derives concepts with their sources, wires typed relationships, audits the bundle against the LOKF schema, and hands off for review. Runs often, including on a schedule; deals in facts about the repository, never in verdicts about truth.lokf-curator- a human curator’s assistant: a one-screen trust and freshness report, and an opt-in review session that records a person’s confirm/correct/retire/send-back verdict directly in the bundle’s frontmatter.lokf-docent, the reader’s entry point. It answers from the bundle first with each concept’s trust label, verifies exact values at the source, and records a gap in.lokf/feedback.mdfor the librarian when the bundle has no answer.docs/examples/docent.mdhas real transcripts.
This repository dogfoods its own skills: .lokf/ here is a real bundle built by lokf-sidecar and lokf-librarian, self-describing all four skills, this repository’s own governance, and its CI.