Releases
Version 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.