<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>KTL Registrar: bundle log</title>
  <subtitle>What changed in the knowledge bundle, a day to an entry, newest first.</subtitle>
  <link rel="self" type="application/atom+xml" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log.xml"/>
  <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/"/>
  <link rel="alternate" type="text/markdown" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log.md"/>
  <id>https://w3id.org/ktl/registrar/knowledge/log</id>
  <updated>2026-10-29T13:11:33Z</updated>
  <author><name>Noel McLoughlin</name></author>
  <rights>CC BY 4.0</rights>
  <link rel="license" href="https://creativecommons.org/licenses/by/4.0/"/>
  <entry>
    <title>2026-10-29 · Changed: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-29"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-29</id>
    <published>2026-10-29T13:11:33Z</published>
    <updated>2026-10-29T13:11:33Z</updated>
    <category term="Changed"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: LOKF Toolkit gives the &lt;code&gt;&amp;gt;=0.9.0&lt;/code&gt; floor that &lt;code&gt;.lokf/pyproject.toml&lt;/code&gt; now declares and pins its fallback schema to the commit tagged v0.9.0; Validator Engine lists fourteen relation fields with &lt;code&gt;isReplacedBy&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-27 · Changed: 6 · Resolved: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-27"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-27</id>
    <published>2026-10-27T01:18:04Z</published>
    <updated>2026-10-27T01:39:23Z</updated>
    <category term="Changed"/>
    <category term="Resolved"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Contributing says what a pin move copies, from &lt;code&gt;knowledge-sync.sh&lt;/code&gt; and &lt;code&gt;knowledge-sync.yaml&lt;/code&gt;: each template the release's &lt;code&gt;knowledge-sync.manifest&lt;/code&gt; lists that the repository carries, the site's templates, and the workflow changes held back for a person.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the source map's contributing row names &lt;code&gt;knowledge-sync.sh&lt;/code&gt; and &lt;code&gt;knowledge-sync.yaml&lt;/code&gt;, and its sync gap note points to the contributing playbook for what a pin move copies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Contributing now describes the skills pin moving through the weekly &lt;code&gt;knowledge-sync.yaml&lt;/code&gt; pull request, as &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; has said since #103, in place of the retired by-hand copy step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resolved&lt;/strong&gt;: &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; itself now describes the automated weekly sync (#103), so the playbook follows that wording rather than choosing between the two.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Knowledge registrar gate's validate job now runs &lt;code&gt;lokf-check-refs&lt;/code&gt; through &lt;code&gt;uv run --locked just&lt;/code&gt;, since &lt;code&gt;.lokf/uv.lock&lt;/code&gt; pins &lt;code&gt;rust-just&lt;/code&gt;, with the &lt;code&gt;uvx&lt;/code&gt; form kept only as the fallback for a host whose lock does not.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Scheduled librarian now says the wrapper sets &lt;code&gt;KNOWLEDGE_PEN_DRY_RUN_ONLY=1&lt;/code&gt; while the agent runs, so the pen itself refuses to apply a patch early and leaves the file for &lt;code&gt;publish&lt;/code&gt; to apply.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the source map's &lt;code&gt;knowledge-sync.yaml&lt;/code&gt; gap row no longer says &lt;code&gt;SECURITY.md&lt;/code&gt; leaves the workflow out, since #103 added it to the surface table.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-26 · Changed: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-26"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-26</id>
    <published>2026-10-26T01:24:57Z</published>
    <updated>2026-10-26T01:24:57Z</updated>
    <category term="Changed"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the bundle index says w3id.org resolves &lt;code&gt;https://w3id.org/ktl/registrar/knowledge/&lt;/code&gt;, as the docent reported on 2026-10-17; it had said the rule was pending.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-18 · Changed: 3 · Question: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-18"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-18</id>
    <published>2026-10-18T00:27:26Z</published>
    <updated>2026-10-18T16:57:06Z</updated>
    <category term="Changed"/>
    <category term="Question"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Knowledge registrar gate is related to the registrar in Knowledge Trust Ladder's bundle, the role that concept says &lt;code&gt;knowledge-registrar.yaml&lt;/code&gt; plays; the first link from this bundle into another member of the KTL federation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: links to Knowledge Trust Ladder's docs pages and to KTL Curator use their w3id.org addresses, as &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, &lt;code&gt;SECURITY.md&lt;/code&gt; and &lt;code&gt;docs/install.md&lt;/code&gt; now do.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Question&lt;/strong&gt;: the contributing playbook's pin rule counts three sidecar workflows, and the sync script now copies whatever the release's manifest lists, &lt;code&gt;knowledge-sync.yaml&lt;/code&gt; among them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the source map lists &lt;code&gt;knowledge-sync.yaml&lt;/code&gt; and its pull request template, which the sidecar syncs added, as a gap with no concept.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-17 · Changed: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-17"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-17</id>
    <published>2026-10-17T00:49:35Z</published>
    <updated>2026-10-17T00:49:35Z</updated>
    <category term="Changed"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the Diátaxis genre term now says its &lt;code&gt;genre: reference&lt;/code&gt; tag sits in its own frontmatter; it had placed the tag in the bundle's root header, which carries none.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-16 · Changed: 11 · Prose: 2 · Added: 2 · Rewrite: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-16"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-16</id>
    <published>2026-10-16T00:06:24Z</published>
    <updated>2026-10-17T00:49:35Z</updated>
    <category term="Prose"/>
    <category term="Changed"/>
    <category term="Added"/>
    <category term="Rewrite"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prose&lt;/strong&gt;: reworded 15 concept bodies in plain English. No fact, link, number or frontmatter changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Quality Gates; the paragraph on &lt;code&gt;MD024&lt;/code&gt; and the ignored folders no longer runs on from the last list item, so Markdown shows it as a paragraph of its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Validator Engine; the paragraph on the REQUIRED &lt;code&gt;generated.by&lt;/code&gt; and source &lt;code&gt;resource&lt;/code&gt; no longer runs on from the last list item, so Markdown shows it as a paragraph of its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Why KTL Registrar names the &lt;code&gt;okf/*&lt;/code&gt; findings where the base-layer switch turns them off, now that the switch has a paragraph of its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Why KTL Registrar's section on the OKF base layer is split into three paragraphs, one each for severity, the conformance switch and the base-layer switch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Contributing now names &lt;code&gt;.github/workflows/build.yml&lt;/code&gt; as a source, since it says &lt;code&gt;npm run check&lt;/code&gt; runs the same three steps that workflow runs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Why KTL Registrar now says that turning off &lt;em&gt;Enforce OKF conformance as errors&lt;/em&gt;, on by default in &lt;code&gt;src/settings.ts&lt;/code&gt;, downgrades the OKF errors to warnings, as the reworded &lt;code&gt;docs/for-the-curious.md&lt;/code&gt; puts it. The sentence after the list of checks is now its own paragraph.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added&lt;/strong&gt;: Install KTL Registrar, from &lt;code&gt;docs/install.md&lt;/code&gt;, which the source map listed as a gap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the source map now lists &lt;code&gt;docs/install.md&lt;/code&gt; as the source of Install KTL Registrar and no longer as a gap, names &lt;code&gt;build.yml&lt;/code&gt; beside &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, and leaves out &lt;code&gt;.gitignore&lt;/code&gt;, &lt;code&gt;.npmrc&lt;/code&gt;, &lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt; and the generated &lt;code&gt;src/lokf-vocab.json&lt;/code&gt; on purpose.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the bundle's &lt;code&gt;base_iri&lt;/code&gt; moved from the placeholder &lt;code&gt;https://ktl-registrar.example/knowledge/&lt;/code&gt; to &lt;code&gt;https://w3id.org/ktl/registrar/knowledge/&lt;/code&gt;, a namespace under Knowledge Trust Ladder's w3id.org authority, so the bundle can join a federation; every id and relation target moved with it, and no concept's text changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Quality Gates now says that &lt;code&gt;.markdownlint-cli2.jsonc&lt;/code&gt; ignores the folders the knowledge website generates, as it does since #74.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: LOKF Toolkit now gives the &lt;code&gt;&amp;gt;=0.8.0&lt;/code&gt; floor that &lt;code&gt;.lokf/pyproject.toml&lt;/code&gt; declares, not 0.7.0, and pins its fallback schema to the commit tagged v0.8.0 instead of &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: LOKF Toolkit now says that &lt;code&gt;lokf-install&lt;/code&gt; runs &lt;code&gt;uv sync&lt;/code&gt; while the other recipes run &lt;code&gt;uv run lokf&lt;/code&gt;, and that the website's sync runs &lt;code&gt;lokf export&lt;/code&gt;, from &lt;code&gt;.lokf/justfile&lt;/code&gt; and &lt;code&gt;website/README.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added&lt;/strong&gt;: Knowledge Website, from &lt;code&gt;website/README.md&lt;/code&gt;, &lt;code&gt;website/site.config.mjs&lt;/code&gt; and &lt;code&gt;.github/workflows/knowledge-website.yaml&lt;/code&gt;, which #74 added.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the source map now lists &lt;code&gt;website/&lt;/code&gt; and &lt;code&gt;knowledge-website.yaml&lt;/code&gt; as the sources of Knowledge Website, &lt;code&gt;.lokf/pyproject.toml&lt;/code&gt; and &lt;code&gt;.lokf/justfile&lt;/code&gt; as the sources of LOKF Toolkit, and says the README links the docs pages on the website.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prose&lt;/strong&gt;: reworded 16 concept bodies in plain English. No fact, link, number or frontmatter changed.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-10-15 · Changed: 20 · Rewrite: 12</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-10-15"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-10-15</id>
    <published>2026-10-16T00:06:24Z</published>
    <updated>2026-10-16T00:06:24Z</updated>
    <category term="Changed"/>
    <category term="Rewrite"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: the OKF specification moved to &lt;code&gt;GoogleCloudPlatform/open-knowledge-format&lt;/code&gt;, which still serves v0.2; the &lt;code&gt;knowledge-catalog/okf/&lt;/code&gt; copy is frozen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Why KTL Registrar, after the README became a doorway; the reasoning now comes from &lt;code&gt;docs/architecture.md&lt;/code&gt; and &lt;code&gt;docs/for-the-curious.md&lt;/code&gt;, and the history of removed designs is gone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Why KTL Registrar now names &lt;code&gt;docs/for-the-curious.md&lt;/code&gt; as its resource and the architecture and using pages as sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Contributing, from the current &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;: Node versions, the codemirror override, the skills pin with its SHA and sidecar copies, and the releasing pull request title.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Contributing now names &lt;code&gt;scripts/smoke-test.ts&lt;/code&gt; as a source for the word budgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Knowledge registrar gate; the validate job now runs the justfile recipe, provenance reads whole events added, changed or removed, and a second step checks signatures against &lt;code&gt;.lokf/curators/&lt;/code&gt; keys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Knowledge registrar gate's description now says the gate also reads confirmations a change alters or removes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Quality gates; &lt;code&gt;MD060&lt;/code&gt; is the sixth disabled markdownlint rule, actionlint ignores the &lt;code&gt;copilot-requests&lt;/code&gt; scope, and Dependabot holds back three majors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Quality gates now names the markdownlint config and the Dependabot file as sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Releasing now records the plan job's changelog and title checks, takes the protection of &lt;code&gt;main&lt;/code&gt; from &lt;code&gt;SECURITY.md&lt;/code&gt;, and lists the release workflows as sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Scheduled librarian; the workflow now has three jobs, the agent's one output is &lt;code&gt;.lokf/patch.yaml&lt;/code&gt;, a quiet week runs no agent, and &lt;code&gt;publish&lt;/code&gt; also refuses a change to a person's record.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Scheduled librarian now lists the wrapper script, &lt;code&gt;SECURITY.md&lt;/code&gt; and &lt;code&gt;AI_COVENANT.md&lt;/code&gt; as sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Knowledge sources now maps today's files, with the README split into the docs pages; the dated pass notes are gone, and &lt;code&gt;knowledge-release.yaml&lt;/code&gt;, &lt;code&gt;docs/install.md&lt;/code&gt; and &lt;code&gt;llms.txt&lt;/code&gt; are listed as gaps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Knowledge sources' description now names the left-out files and the gaps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: No telemetry, now drawn from the Privacy section of &lt;code&gt;docs/architecture.md&lt;/code&gt; and from &lt;code&gt;SECURITY.md&lt;/code&gt;, since the README became a doorway.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: No telemetry now names &lt;code&gt;docs/architecture.md&lt;/code&gt; as its resource.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: AI covenant; the file is adapted from knowledge-trust-ladder's covenant, not a verbatim copy, as its closing note says.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: AI covenant's description now follows the covenant's own section names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Code of conduct; the file says it is adapted from Contributor Covenant 2.1, so the claim that it is unmodified is gone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Code of conduct's description now says the covenant is adapted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Commands and settings, from &lt;code&gt;docs/using.md&lt;/code&gt; now that the README is a doorway; the command ids still come from &lt;code&gt;src/main.ts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Commands and settings now names &lt;code&gt;docs/using.md&lt;/code&gt; as its resource and &lt;code&gt;src/main.ts&lt;/code&gt; as a source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: OKF specification's description now names the specification's version and its trust and lifecycle fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Obsidian plugin guidelines' description now names the guidelines the lint rules enforce here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: LOKF glossary term gains a description, so its index bullet says what it defines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: OKF glossary term gains a description, so its index bullet says what it defines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Diátaxis genre glossary term gains a description, so its index bullet says what it defines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: KTL Registrar plugin now points at &lt;code&gt;docs/using.md&lt;/code&gt; and &lt;code&gt;docs/architecture.md&lt;/code&gt;, where the README's material moved; &lt;code&gt;src/main.ts&lt;/code&gt; changed only names and the ribbon icon.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Settings tab; the group headings are now spelt as &lt;code&gt;src/settings.ts&lt;/code&gt; spells them, the full list of comma-separated settings is named, and the break-glass toggle is quoted from its own description.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Settings tab now names &lt;code&gt;src/vocab.ts&lt;/code&gt; as a source for the vocabulary refresh rule.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite&lt;/strong&gt;: Validator engine; it checks the OKF v0.2 base layer itself, reports lokf 0.8.0's pattern failures as errors, and covers thirteen relation fields with &lt;code&gt;measures&lt;/code&gt;, &lt;code&gt;memberOf&lt;/code&gt; and &lt;code&gt;holder&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed&lt;/strong&gt;: Validator engine's description now names the OKF base layer and the errors shared with &lt;code&gt;lokf validate&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-24</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-24"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-24</id>
    <published>2026-09-24T16:09:18Z</published>
    <updated>2026-09-24T17:42:44Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Future-dated times corrected.&lt;/strong&gt; 6 &lt;code&gt;process:ktl-librarian&lt;/code&gt; times were later than the commit that recorded them (round placeholders written as UTC). Each now carries that commit's time, the latest moment git attests, so the bundle keeps the sidecar's new conventions rule 11.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The signing setup moved to its own page in the skills.&lt;/strong&gt;
knowledge-trust-ladder split the registrar gate out of &lt;code&gt;automation.md&lt;/code&gt; into
&lt;code&gt;gate.md&lt;/code&gt;, so &lt;code&gt;playbooks/knowledge-registrar-gate.md&lt;/code&gt; now points there for
the signing setup.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-23</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-23"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-23</id>
    <published>2026-09-23T21:55:57Z</published>
    <updated>2026-09-23T21:55:57Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The docent records a reader's gap without reading the file it goes in.&lt;/strong&gt;
&lt;code&gt;.lokf/feedback.md&lt;/code&gt; is kept newest first, so adding an entry meant reading
it, editing it and writing it back, which put other readers' free text into
the docent's session, held off by prose alone (Snyk W011). The sidecar now
carries &lt;code&gt;knowledge-feedback.sh&lt;/code&gt;: the docent hands over its own entry and
never opens the file. The script comes from the &lt;code&gt;v0.23.0&lt;/code&gt; templates, the
release that ships it, and the pin moved to that tag with it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The scheduled librarian installs its skill from a tag that has it.&lt;/strong&gt; The
pin still read &lt;code&gt;v0.21.0&lt;/code&gt;, where the skills are named &lt;code&gt;lokf-*&lt;/code&gt;; the rename to
&lt;code&gt;ktl-*&lt;/code&gt; landed in &lt;code&gt;v0.22.0&lt;/code&gt;. The install step copies &lt;code&gt;skills/ktl-librarian&lt;/code&gt;
and is not gated on &lt;code&gt;KNOWLEDGE_LIBRARIAN_ENABLED&lt;/code&gt;, so every weekly run has
been failing there since the plugin took the KTL name, armed or not. The pin
moves to &lt;code&gt;v0.23.0&lt;/code&gt;, the release that also ships &lt;code&gt;knowledge-feedback.sh&lt;/code&gt;. The
scripts under &lt;code&gt;.lokf/scripts/&lt;/code&gt; and &lt;code&gt;knowledge-registrar.yaml&lt;/code&gt; all match its
templates.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-19 · Reference audit moved onto the toolkit's own flag: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-19"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-19</id>
    <published>2026-09-19T20:37:04Z</published>
    <updated>2026-09-19T21:54:08Z</updated>
    <category term="Reference audit moved onto the toolkit's own flag"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The logo now carries knowledge and trust.&lt;/strong&gt; The first mark was three rungs
alone: it drew &lt;em&gt;ladder&lt;/em&gt; and left the other two words to the filename. The
ladder now rises out of an open book, and its top rung is the check mark in
the curator's blue, so the mark reads draft, checked, vouched-for from bottom
to top. Still byte-identical in all three repositories.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Both diagrams carry the mark and the wordmark&lt;/strong&gt; in the top-left corner,
from the same shared definition.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Text that collided with its own box.&lt;/strong&gt; A headless-Chrome pass measured
every label against its enclosing card: the curator card's &quot;a few at a time&quot;
was painted before the card and hidden behind it, and two labels in the
plugins card came within 3px of their edges. Both diagrams now match the
skills repository's copy byte for byte.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assets restacked, and the family logo added.&lt;/strong&gt; The diagrams' canvas was
pure white while their cards were tinted, so the biggest area was the
brightest and the cards read as sunken. The canvas is now &lt;code&gt;#E4E1D7&lt;/code&gt; and the
faint ink &lt;code&gt;#6E6D66&lt;/code&gt;, which also lifts 10px grey labels past 4.5:1. New
&lt;code&gt;.assets/knowledge-trust-ladder-logo.svg&lt;/code&gt;, identical in all three
repositories. The &lt;code&gt;.assets/*.svg&lt;/code&gt; source-map row covers it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Skills repository renamed to &lt;code&gt;knowledge-trust-ladder&lt;/code&gt;&lt;/strong&gt;, from
&lt;code&gt;lokf-agent-skills&lt;/code&gt;, because upstream LOKF now ships its own bundled skills.
Every deep link and the scheduled librarian's &lt;code&gt;LOKF_SKILLS_REPO&lt;/code&gt; follow it,
in one mechanical pass; no &lt;code&gt;verified&lt;/code&gt; event changed. This plugin's own name,
id and &lt;code&gt;base_iri&lt;/code&gt; are untouched - only references to the skills repository
moved. Concepts naming it in prose were rewritten by the same pass; entries
below this day keep the name the skills repository had when they were
written, as &lt;code&gt;CHANGELOG.md&lt;/code&gt; does.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reference audit moved onto the toolkit's own flag&lt;/strong&gt;: &lt;code&gt;just lokf-check-refs&lt;/code&gt;
ran a hand-written SPARQL query over ten relation predicates, which reported
an external &lt;code&gt;source:&lt;/code&gt; or &lt;code&gt;definedBy:&lt;/code&gt; URL - correct usage for both slots - as
a dangling target, and had drifted against the schema (missing &lt;code&gt;holder&lt;/code&gt;,
&lt;code&gt;measures&lt;/code&gt;, &lt;code&gt;memberOf&lt;/code&gt; and reified &lt;code&gt;relations&lt;/code&gt;). It calls &lt;code&gt;lokf validate --check-refs&lt;/code&gt; now, so the slot list comes from the schema. Only Knowledge
registrar gate changed here, to describe the recipe as it now runs; the
workflow no longer invokes it through &lt;code&gt;uvx ... just&lt;/code&gt;: the gate's third
step is gone and &lt;code&gt;--check-refs&lt;/code&gt; rides on its validate step, That change has not reached the skills
template yet, so this copy is ahead of it and the preflight's &lt;code&gt;copies&lt;/code&gt;
line reports the file as drifted until it does. That concept
described the recipe while citing only the workflow and &lt;code&gt;SECURITY.md&lt;/code&gt;, so
&lt;code&gt;.lokf/justfile&lt;/code&gt; is now one of its &lt;code&gt;sources&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-18 · Sidecar brought up to the skills templates: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-18"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-18</id>
    <published>2026-09-17T23:37:45Z</published>
    <updated>2026-09-17T23:37:45Z</updated>
    <category term="Sidecar brought up to the skills templates"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sidecar brought up to the skills templates&lt;/strong&gt;: the scripts here were the
pre-0.19 copies, so the wrapper lacked the &lt;code&gt;EXIT&lt;/code&gt;-trap restore and the
registrar gate still read confirmations by their &lt;code&gt;by:&lt;/code&gt; line. Synced all
five scripts, added &lt;code&gt;.gitattributes&lt;/code&gt;, and bumped &lt;code&gt;LOKF_SKILLS_REF&lt;/code&gt; from
&lt;code&gt;v0.9.0&lt;/code&gt; to &lt;code&gt;v0.19.2&lt;/code&gt;. The release workflow now checks release notes and
the pull request title on a releasing pull request.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-14</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-14"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-14</id>
    <published>2026-09-14T16:33:33Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt;, against this session's uncommitted &lt;code&gt;SECURITY.md&lt;/code&gt;
rewrite (matching the same change already committed in &lt;code&gt;lokf-agent-skills&lt;/code&gt;
and &lt;code&gt;obsidian-ktl-curator&lt;/code&gt;): its design content moved to the skills
repository's new &lt;code&gt;docs/threat-model.md&lt;/code&gt;. Two concepts had cited it by a
now-gone section heading - &lt;code&gt;playbooks/scheduled-librarian.md&lt;/code&gt; (&quot;The
librarian workflow: what is inherited, what this repository owns&quot;) and
&lt;code&gt;playbooks/knowledge-registrar-gate.md&lt;/code&gt; (&quot;The attribution gate is
installed&quot;) - both corrected to link the threat model's anchors directly.
&lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt;'s &lt;code&gt;SECURITY.md&lt;/code&gt; row updated to match.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no &lt;code&gt;.lokf/feedback.md&lt;/code&gt; present),
against the now-committed &lt;code&gt;chore/known-types-docs-and-coverage&lt;/code&gt; branch (git
status clean). Two real drifts found and fixed: &lt;code&gt;playbooks/knowledge-registrar-gate.md&lt;/code&gt;'s
&lt;code&gt;validate&lt;/code&gt; job paragraph still described only &lt;code&gt;uv run lokf validate knowledge&lt;/code&gt;, missing the two steps commit &lt;code&gt;80bd8b0&lt;/code&gt; added to that same job
(&lt;code&gt;scripts/knowledge-conventions.sh&lt;/code&gt; and &lt;code&gt;uvx ... just lokf-check-refs&lt;/code&gt;) -
that commit updated the workflow, the new script and &lt;code&gt;CHANGELOG.md&lt;/code&gt; but not
this bundle. &lt;code&gt;services/settings-tab.md&lt;/code&gt; and
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt; both listed the settings-tab group
order as &lt;code&gt;... Semantic header &amp;amp; base_iri, Relationships, OKF v0.2 base layer, Trust &amp;amp; lifecycle, Rule severity ...&lt;/code&gt;; &lt;code&gt;src/settings.ts&lt;/code&gt;'s actual
&lt;code&gt;heading:&lt;/code&gt; order is &lt;code&gt;... Semantic header and base IRI, OKF v0.2 base layer, Trust and lifecycle, Relationships, Rule severity ...&lt;/code&gt; - both concepts
corrected to match. Re-verified against source with no change needed:
&lt;code&gt;playbooks/contributing.md&lt;/code&gt; (&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;'s dev-setup, layout, and
pre-PR checklist sections), &lt;code&gt;references/commands-and-settings.md&lt;/code&gt;'s command
table (all 15 &lt;code&gt;addCommand&lt;/code&gt; ids in &lt;code&gt;src/main.ts&lt;/code&gt; match),
&lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt; (the &lt;code&gt;vocab.ts&lt;/code&gt; settings-merge
paragraph). Orphan sweep: no new file under &lt;code&gt;src/&lt;/code&gt;, &lt;code&gt;docs/&lt;/code&gt;,
&lt;code&gt;.github/workflows/&lt;/code&gt;, or the repository root beyond what
&lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt; already accounts for. &lt;code&gt;just lokf-validate&lt;/code&gt;
(22/22), &lt;code&gt;just lokf-check-refs&lt;/code&gt;, and &lt;code&gt;bash scripts/knowledge-conventions.sh&lt;/code&gt;
all pass.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no &lt;code&gt;.lokf/feedback.md&lt;/code&gt; present),
against this session's further uncommitted working-tree change on top of
the earlier pass below: &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; rewritten again, this time from a
design log back into a checklist under a 1000-word budget, with the
release walkthrough moved out to &lt;code&gt;lokf-agent-skills&lt;/code&gt;' &lt;code&gt;docs/releasing.md&lt;/code&gt;
and &lt;code&gt;docs/signing-commits.md&lt;/code&gt; (both confirmed present); &lt;code&gt;npm run check&lt;/code&gt;
added (&lt;code&gt;build &amp;amp;&amp;amp; lint &amp;amp;&amp;amp; smoke-test&lt;/code&gt;, matching &lt;code&gt;build.yml&lt;/code&gt;); four
&lt;code&gt;obsidianmd&lt;/code&gt; settings-tab/&lt;code&gt;createEl&lt;/code&gt; lint rules promoted from warning to
error in &lt;code&gt;eslint.config.mts&lt;/code&gt;; &lt;code&gt;lint-and-docs.yaml&lt;/code&gt; gained an
action-pinning step in &lt;code&gt;lint-workflows&lt;/code&gt; and, with &lt;code&gt;build.yml&lt;/code&gt;, narrowed
its &lt;code&gt;push&lt;/code&gt; trigger from every branch to &lt;code&gt;main&lt;/code&gt; only; and
&lt;code&gt;scripts/smoke-test.ts&lt;/code&gt; gained a drift guard checking CONTRIBUTING's own
word count and its import-free module list against what the suite
actually imports. &lt;code&gt;playbooks/contributing.md&lt;/code&gt; rewritten to match;
&lt;code&gt;playbooks/quality-gates.md&lt;/code&gt; corrected (trigger, the new pin-check step).
&lt;code&gt;explanation/why-ktl-registrar.md&lt;/code&gt; gains a short addition: the README's
new &lt;strong&gt;three lines of defence&lt;/strong&gt; framing (linking &lt;code&gt;docs/three-lines.md&lt;/code&gt;)
places this plugin on the second line. Re-verified, no content change:
&lt;code&gt;playbooks/releasing.md&lt;/code&gt; (&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;'s own release section is now a
pointer elsewhere, but &lt;code&gt;semantic-release.yml&lt;/code&gt;/&lt;code&gt;release.yml&lt;/code&gt;, the concept's
real facts, are unchanged). &lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt;: a run note,
a new &lt;code&gt;eslint.config.mts&lt;/code&gt; row, and the &lt;code&gt;package.json&lt;/code&gt; row extended to
cover npm scripts. Orphan sweep: no new file under &lt;code&gt;src/&lt;/code&gt;, &lt;code&gt;docs/&lt;/code&gt;,
&lt;code&gt;.github/workflows/&lt;/code&gt;, or the repository root. PyPI's &lt;code&gt;lokf&lt;/code&gt; is still
&lt;code&gt;0.7.0&lt;/code&gt;, matching the &lt;code&gt;pyproject.toml&lt;/code&gt; floor - no bump. &lt;code&gt;just lokf-validate&lt;/code&gt; (22/22) and &lt;code&gt;just lokf-check-refs&lt;/code&gt; both pass.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt; and its concept disagreed with the code&lt;/strong&gt;, found on a
whole-repository librarian pass. The document still said &quot;&lt;code&gt;npm run smoke-test&lt;/code&gt; only covers &lt;code&gt;validator.ts&lt;/code&gt;&quot; and listed only four &lt;code&gt;src/&lt;/code&gt; files,
after the suite grew to ten import-free modules and the settings merge rule
moved into &lt;code&gt;vocab.ts&lt;/code&gt; precisely so a test could reach it. The source is
corrected (a &lt;code&gt;vocab.ts&lt;/code&gt; row, the real module list, and the reason logic
leaves &lt;code&gt;main.ts&lt;/code&gt;) and &lt;code&gt;playbooks/contributing.md&lt;/code&gt; re-derived from it.
&lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt; gains the same fact for &lt;code&gt;loadSettings&lt;/code&gt;,
which the bundle had recorded only in this log.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no feedback pending) against the
uncommitted &lt;code&gt;chore/known-types-docs-and-coverage&lt;/code&gt; branch, where &lt;em&gt;Known
LOKF types&lt;/em&gt; is documented - settings description, README,
&lt;code&gt;docs/for-the-curious.md&lt;/code&gt; - as the extension point for a bundle validated
against a domain schema. &lt;code&gt;services/settings-tab.md&lt;/code&gt; says so, with the two
facts the code already held: a customised list is never refreshed to the
manifest, and the type-specific field checks key on the exact class name.
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt;: the README bullet. Re-verified, no
change: &lt;code&gt;explanation/why-ktl-registrar.md&lt;/code&gt;.
&lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt;: run note.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Coverage pass on the same branch&lt;/strong&gt;, no behaviour change: the settings
merge rule moved from &lt;code&gt;main.ts&lt;/code&gt; into the pure &lt;code&gt;vocab.ts&lt;/code&gt;
(&lt;code&gt;mergeSavedSettings&lt;/code&gt;, plus &lt;code&gt;vocabFromManifest&lt;/code&gt; so the malformed-manifest
fallbacks are reachable from a test); 277 to 324 expectations; the two
golden fixtures now pin their warning counts. This map's
&lt;code&gt;scripts/smoke-test.ts&lt;/code&gt; row was stale - it asked a future run to confirm
the suite &quot;imports only from &lt;code&gt;../src/validator&lt;/code&gt;&quot;, untrue as the plugin
grew - and now names the import-free modules it may draw on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-13</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-13"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-13</id>
    <published>2026-09-13T16:49:57Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no feedback pending), after a
&lt;code&gt;ktl-sidecar&lt;/code&gt; repair pass that restored &lt;code&gt;.lokf/justfile&lt;/code&gt;'s
&lt;code&gt;lokf-check-refs&lt;/code&gt; recipe and laid the &lt;code&gt;knowledge_bundle&lt;/code&gt; doorway link.
Re-verified &lt;code&gt;playbooks/scheduled-librarian.md&lt;/code&gt; and
&lt;code&gt;playbooks/knowledge-registrar-gate.md&lt;/code&gt; against the now-committed
workflows; the gate concept now says its copy also rewords the
&lt;code&gt;provenance&lt;/code&gt; job's signing comment, not only &lt;code&gt;persist-credentials: false&lt;/code&gt;.
&lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt;: &lt;code&gt;.assets/&lt;/code&gt; row and run note added.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no feedback pending), against the
1.1.0 release commits and this session's uncommitted working tree: the
README rewritten around usage (two vaults, quick start, commands, &lt;em&gt;Which
folder is the bundle&lt;/em&gt;), &lt;code&gt;SECURITY.md&lt;/code&gt; restructured to inherit the guard
design from &lt;code&gt;lokf-agent-skills&lt;/code&gt;, and &lt;code&gt;knowledge-registrar.yaml&lt;/code&gt; gaining the
template's &lt;code&gt;provenance&lt;/code&gt; and &lt;code&gt;attestation&lt;/code&gt; jobs. Added
&lt;code&gt;playbooks/knowledge-registrar-gate.md&lt;/code&gt; for that gate - a real gap: the
workflow had no source-map row and no concept. Corrected
&lt;code&gt;policies/no-telemetry.md&lt;/code&gt; (it still named the header command as the
plugin's only write; the README has listed the safe-fix, promote-relations,
affordance and report-action writes for some time - drift older than this
session), &lt;code&gt;explanation/why-ktl-registrar.md&lt;/code&gt; (the alternatives footnote
now sits beneath the credits, and the warnings-not-errors argument is
&lt;code&gt;docs/for-the-curious.md&lt;/code&gt;'s longest section, not the README's),
&lt;code&gt;playbooks/scheduled-librarian.md&lt;/code&gt; (the &lt;code&gt;if:&lt;/code&gt; guard on the &lt;code&gt;refresh&lt;/code&gt; job's
write-scope step; &lt;code&gt;SECURITY.md&lt;/code&gt;'s renamed section and its links out to the
skills repository) and &lt;code&gt;playbooks/releasing.md&lt;/code&gt; (required status checks
deliberately off, per &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;/&lt;code&gt;SECURITY.md&lt;/code&gt;) and
&lt;code&gt;references/lokf-specification.md&lt;/code&gt; (its &lt;code&gt;definedBy&lt;/code&gt; pointed at the spec's
own URL rather than a concept, the one dangling target the hand-run
reference check found; &lt;code&gt;derivedFrom&lt;/code&gt; the OKF spec instead; &quot;14 classes&quot;
corrected to 15; and it still said Rule 6's trust fields were left to a
separately installed OKF validator - the design abandoned on 2026-09-12,
since when the plugin checks their shape itself). Re-verified, no change:
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt; (command table and settings groups
identical in the rewritten README) and &lt;code&gt;playbooks/contributing.md&lt;/code&gt;.
&lt;strong&gt;Drift audit (reported, not fixed - ktl-sidecar's job):&lt;/strong&gt; &lt;code&gt;.lokf/justfile&lt;/code&gt;
lacks the template's &lt;code&gt;lokf-check-refs&lt;/code&gt; recipe (its query run by hand this
pass, clean after the fix above); &lt;code&gt;knowledge-librarian.yaml&lt;/code&gt; differs
from its template in comments only, beyond the deliberate
&lt;code&gt;persist-credentials: false&lt;/code&gt;; &lt;code&gt;knowledge-registrar.yaml&lt;/code&gt; differs by that
line alone. &lt;code&gt;lokf&lt;/code&gt; on PyPI is still &lt;code&gt;0.7.0&lt;/code&gt;, matching the floor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no feedback pending): re-verified
&lt;code&gt;policies/no-telemetry.md&lt;/code&gt;, &lt;code&gt;references/commands-and-settings.md&lt;/code&gt;,
&lt;code&gt;services/settings-tab.md&lt;/code&gt; and &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt; against
&lt;code&gt;README.md&lt;/code&gt;, &lt;code&gt;src/main.ts&lt;/code&gt; and &lt;code&gt;src/settings.ts&lt;/code&gt; after this session's
README-notice rewording, the header command's new two-choice modal
(&lt;code&gt;src/scaffold-modal.ts&lt;/code&gt;), and the sidecar's &lt;code&gt;.lokf/justfile&lt;/code&gt;/workflow
comments following the current &lt;code&gt;ktl-sidecar&lt;/code&gt; templates. All four already
matched - the command table, the break-glass setting's description and the
no-bundle state were corrected in an earlier pass this session - so only
each concept's &lt;code&gt;verified&lt;/code&gt; event was refreshed; no content changed.
&lt;code&gt;src/scaffold-modal.ts&lt;/code&gt; is not given its own concept: it is a small UI
helper of &lt;code&gt;ktl-registrar-plugin.md&lt;/code&gt;, already described there under &quot;Insert
the bundle's semantic header&quot;. &lt;code&gt;playbooks/quality-gates.md&lt;/code&gt; and
&lt;code&gt;playbooks/releasing.md&lt;/code&gt; were not re-checked this run - their resources
(&lt;code&gt;lint-and-docs.yaml&lt;/code&gt;, &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;) were untouched this session.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-12</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-12"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-12</id>
    <published>2026-09-12T15:51:01Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steady-state refresh&lt;/strong&gt; (librarian pass, no feedback pending): corrected
drift against this session's &quot;no bundle&quot; state and break-glass
&lt;code&gt;treatVaultRootAsBundle&lt;/code&gt; setting (&lt;code&gt;src/main.ts&lt;/code&gt;, &lt;code&gt;src/validator.ts&lt;/code&gt;,
&lt;code&gt;src/settings.ts&lt;/code&gt;) - &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt; and
&lt;code&gt;services/validator-engine.md&lt;/code&gt; described the old always-a-whole-vault
fallback and the renamed &lt;code&gt;autoBundleRoot&lt;/code&gt;/&lt;code&gt;implicitBundleRoots&lt;/code&gt; function
under its previous name; &lt;code&gt;services/settings-tab.md&lt;/code&gt; had no mention of the
break-glass toggle at all. &lt;code&gt;references/commands-and-settings.md&lt;/code&gt;'s command
table was corrected wholesale against &lt;code&gt;src/main.ts&lt;/code&gt;: it named 12 ids that
do not exist in the source (&lt;code&gt;find-orphan&lt;/code&gt;, &lt;code&gt;lookup-field&lt;/code&gt;, &lt;code&gt;goto-finding&lt;/code&gt;,
&lt;code&gt;fix-safe-active&lt;/code&gt;/&lt;code&gt;fix-safe-vault&lt;/code&gt;, &lt;code&gt;promote-links&lt;/code&gt;,
&lt;code&gt;affordances-active&lt;/code&gt;/&lt;code&gt;affordances-vault&lt;/code&gt;/&lt;code&gt;diataxis-map&lt;/code&gt;) in place of the 15
the plugin actually registers - a pre-existing drift this session's changes
only made more visible, not one this session caused.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;playbooks/scheduled-librarian.md&lt;/code&gt; against this session's
security hardening of the scheduled-agent workflow: a third, independent
write-scope re-derivation in the &lt;code&gt;publish&lt;/code&gt; job (on a checkout that never
shared a workspace with the agent), a guard refusing any patch that adds a
&lt;code&gt;by: human:&lt;/code&gt; claim, and the wrapper script's &lt;code&gt;.git/config&lt;/code&gt;/&lt;code&gt;.git/hooks&lt;/code&gt;
snapshot-and-restore around the agent call - all newly documented in
&lt;code&gt;SECURITY.md&lt;/code&gt; this session.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extended&lt;/strong&gt; &lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt; with a row for the new
&lt;code&gt;docs/for-the-curious.md&lt;/code&gt; (the former README &quot;For the curious&quot; section,
moved out this session) and an orphan-sweep note for &lt;code&gt;src/&lt;/code&gt;'s
implementation-detail files and a handful of repo-plumbing files, both
consciously left without their own concepts. Added &lt;code&gt;docs/for-the-curious.md&lt;/code&gt;
to &lt;code&gt;explanation/why-ktl-registrar.md&lt;/code&gt;'s &lt;code&gt;sources&lt;/code&gt;, alongside &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Re-verified&lt;/strong&gt; (no drift): &lt;code&gt;playbooks/contributing.md&lt;/code&gt;,
&lt;code&gt;policies/no-telemetry.md&lt;/code&gt;, &lt;code&gt;playbooks/quality-gates.md&lt;/code&gt;. &lt;code&gt;playbooks/releasing.md&lt;/code&gt;
was already current from earlier the same day. PyPI's &lt;code&gt;lokf&lt;/code&gt; is still at
&lt;code&gt;0.7.0&lt;/code&gt; (checked via the PyPI JSON API; &lt;code&gt;uv pip index versions&lt;/code&gt; is not a
subcommand of this environment's &lt;code&gt;uv 0.12.11&lt;/code&gt;) - no &lt;code&gt;pyproject.toml&lt;/code&gt; floor
bump needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Semantic-release, hardened&lt;/strong&gt; (maintainer decision): &lt;code&gt;playbooks/releasing.md&lt;/code&gt;
rewritten (&lt;code&gt;generated&lt;/code&gt;/&lt;code&gt;verified&lt;/code&gt; refreshed) - a person no longer picks the
version. &lt;code&gt;semantic-release.yml&lt;/code&gt;'s &lt;code&gt;release&lt;/code&gt; job, behind the &lt;code&gt;release&lt;/code&gt;
GitHub Environment, computes it from Conventional Commits and runs a new
&lt;code&gt;.github/scripts/changelog-release.mjs&lt;/code&gt; as semantic-release's own
&lt;code&gt;verifyRelease&lt;/code&gt;/&lt;code&gt;generateNotes&lt;/code&gt;/&lt;code&gt;prepare&lt;/code&gt; hooks: refuses an empty
&lt;code&gt;## [Unreleased]&lt;/code&gt;, uses it as the release notes, retitles it to a dated
heading. &lt;code&gt;@semantic-release/npm&lt;/code&gt; (&lt;code&gt;npmPublish: false&lt;/code&gt;) still triggers the
existing &lt;code&gt;version&lt;/code&gt; script, so &lt;code&gt;manifest.json&lt;/code&gt;/&lt;code&gt;versions.json&lt;/code&gt; update
exactly as before. &lt;code&gt;release.yml&lt;/code&gt; gained a &lt;code&gt;workflow_call&lt;/code&gt; trigger so the
resulting tag reaches it without relying on a bot-pushed tag re-triggering
its own &lt;code&gt;push:&lt;/code&gt; event; unchanged otherwise, including for a hand-pushed
tag. semantic-release is installed at pinned versions inside the workflow,
never added to &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Name and identity recorded&lt;/strong&gt; (maintainer decision): &lt;code&gt;why-ktl-registrar.md&lt;/code&gt;
gains a &quot;Why the name&quot; section and &lt;code&gt;ktl-registrar-plugin.md&lt;/code&gt; an
&quot;Identity&quot; section (API path, device key, &lt;code&gt;generated.by&lt;/code&gt; actor); both &lt;code&gt;generated&lt;/code&gt; refreshed. &lt;code&gt;NOTICE&lt;/code&gt; no
longer calls the plugin a companion to a separate OKF validator - it
checks the base layer itself. &lt;code&gt;references/okf-specification.md&lt;/code&gt; corrected
in passing: the plugin has checked required &lt;code&gt;type&lt;/code&gt; and Attested Computation
shape itself since 0.4.0, which that concept still denied.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt;, &lt;code&gt;services/settings-tab.md&lt;/code&gt;,
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt; after the maintainer had the
afternoon's feature-fit audit implemented: &lt;code&gt;diataxis.md&lt;/code&gt; is now written as a
&lt;code&gt;Document&lt;/code&gt; with a minted &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;generated.by: ktl-registrar/&amp;lt;version&amp;gt;&lt;/code&gt;
(the earlier headerless map made &lt;code&gt;lokf validate&lt;/code&gt; abort a run); with no
bundle roots configured a top-level &lt;code&gt;knowledge_bundle/&lt;/code&gt; is detected on its
own (&lt;code&gt;autoBundleRoot&lt;/code&gt;); a dot-folder root is accepted with a live-index
check and a warning instead of being refused. The &lt;code&gt;## Open questions&lt;/code&gt;
section on the plugin concept is replaced by the record of what changed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt;, &lt;code&gt;services/settings-tab.md&lt;/code&gt;,
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt;, and rewrote
&lt;code&gt;explanation/why-ktl-registrar.md&lt;/code&gt;: the plugin no longer detects,
recommends, or deep-links to any other OKF validator. The commented-out
&lt;code&gt;detectOkfValidator&lt;/code&gt;, the one-time notice (&lt;code&gt;recommendOkfValidator&lt;/code&gt; /
&lt;code&gt;okfValidatorNoticeShown&lt;/code&gt;), and the &quot;Alternative OKF validator&quot; settings
group were removed from &lt;code&gt;src/main.ts&lt;/code&gt;, &lt;code&gt;src/settings.ts&lt;/code&gt;, and
&lt;code&gt;src/validator.ts&lt;/code&gt; at the maintainer's direction: with the OKF v0.2 base
layer checked here, a separate validator is an &lt;em&gt;alternative&lt;/em&gt; worth a
footnote, not a companion, and the only plugin this one names is its
sibling KTL Curator. &lt;code&gt;README.md&lt;/code&gt; was restructured the same day around how
an Obsidian user actually meets a bundle (the bundle is the vault; a folder
in the vault; derived from a repository and opened via &lt;code&gt;knowledge_bundle&lt;/code&gt;)
and now states, per Obsidian's own help on symbolic links, that a
repository root opened as a vault cannot reach the bundle through the
link - the previous README's contrary claim was wrong. The smoke test's
first header fixture, formerly a verbatim copy of another project's
&lt;code&gt;index.md&lt;/code&gt;, is now a neutral example; the frozen template fixture moved
from &lt;code&gt;scripts/fixtures/scaffolding-skeleton/&lt;/code&gt; to
&lt;code&gt;scripts/fixtures/sidecar-skeleton/&lt;/code&gt; named for the upstream
&lt;code&gt;ktl-sidecar&lt;/code&gt; skill. Command table in
&lt;code&gt;references/commands-and-settings.md&lt;/code&gt; extended to the commands the README
documents. Not a full steady-state sweep - concepts untouched by these
changes were not re-checked.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-11 · Re-verified: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-11"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-11</id>
    <published>2026-09-10T23:07:52Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <category term="Re-verified"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;services/validator-engine.md&lt;/code&gt;, &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt;,
&lt;code&gt;services/report-view.md&lt;/code&gt; against the six-bug correctness pass on
&lt;code&gt;src/*.ts&lt;/code&gt;: the rule engine now warns on a bare scalar where the schema
requires a list (the same bug class fixed in this bundle's own concepts on
2026-09-09, recurring in &lt;code&gt;dependsOn&lt;/code&gt; et al.), on a non-string &lt;code&gt;type&lt;/code&gt;, on an
unnormalized &lt;code&gt;excludeFolders&lt;/code&gt; entry, and closes a &lt;code&gt;:port&lt;/code&gt; bypass in the
authority-denylist check; &lt;strong&gt;Validate active note&lt;/strong&gt; now tells the user why
when it does nothing (excluded, or outside every bundle root); and the
report panel's &quot;N clean&quot; count no longer subtracts bundle-level findings
that were never one of the scanned files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;playbooks/scheduled-librarian.md&lt;/code&gt; (&lt;code&gt;status: draft&lt;/code&gt;): the
&lt;code&gt;knowledge-librarian.yaml&lt;/code&gt; workflow's two-job privilege split (a read-only
agent job with no persisted credentials, handing a patch to a privileged
job that runs no agent code) had no concept at all, despite being the most
security-sensitive workflow in the repo - &lt;code&gt;SECURITY.md&lt;/code&gt; documents it in
prose but nothing in the bundle traced back to it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;policies/ai-covenant.md&lt;/code&gt;, &lt;code&gt;policies/code-of-conduct.md&lt;/code&gt; (both
&lt;code&gt;status: draft&lt;/code&gt;): two governance documents new since the last pass,
adopted verbatim from the sibling &lt;code&gt;lokf-agent-skills&lt;/code&gt; repository.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extended&lt;/strong&gt; &lt;code&gt;playbooks/quality-gates.md&lt;/code&gt;: added &lt;code&gt;.github/dependabot.yml&lt;/code&gt;,
the mechanism that actually keeps the gate's own SHA pins from going
stale (&lt;code&gt;actionlint&lt;/code&gt; catches syntax drift, never staleness).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Updated&lt;/strong&gt; &lt;code&gt;playbooks/knowledge-sources.md&lt;/code&gt; with source-map rows for all
of the above, and re-checked the PyPI &lt;code&gt;lokf&lt;/code&gt; floor (still &lt;code&gt;0.7.0&lt;/code&gt;, no
bump needed).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;services/ktl-registrar-plugin.md&lt;/code&gt;, &lt;code&gt;references/commands-and-settings.md&lt;/code&gt;:
both described a fourth command, &lt;code&gt;check-sibling-plugin&lt;/code&gt;, &quot;re-checking for
an installed OKF validator&quot; via &lt;code&gt;app.plugins&lt;/code&gt;. That detection
(&lt;code&gt;detectOkfValidator&lt;/code&gt;) is commented out in &lt;code&gt;src/main.ts&lt;/code&gt; - not a public
API, flagged in community-plugin review - and was never wired to a
command; only three commands exist (&lt;code&gt;validate-vault&lt;/code&gt;, &lt;code&gt;validate-active&lt;/code&gt;,
&lt;code&gt;scaffold-root-header&lt;/code&gt;), and the sibling notice now fires unconditionally
rather than only when the sibling is absent. &lt;code&gt;README.md&lt;/code&gt; already stated
this correctly; only the bundle's own concepts had drifted.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;services/report-view.md&lt;/code&gt;: attributed &lt;code&gt;processQueue&lt;/code&gt;/batch
size 50 to &lt;code&gt;src/report-view.ts&lt;/code&gt; itself. That batching lives in
&lt;code&gt;src/main.ts&lt;/code&gt; (see &lt;code&gt;ktl-registrar-plugin.md&lt;/code&gt;) and the batch size is the
user-configurable &lt;code&gt;batchSize&lt;/code&gt; setting, not a hardcoded constant;
&lt;code&gt;report-view.ts&lt;/code&gt; only renders the progress bar it's driven with.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;playbooks/quality-gates.md&lt;/code&gt; (&lt;code&gt;status: draft&lt;/code&gt;): the
&lt;code&gt;.github/workflows/lint-and-docs.yaml&lt;/code&gt; CI workflow (ShellCheck,
actionlint, markdownlint-cli2 + &lt;code&gt;.markdownlint-cli2.jsonc&lt;/code&gt;, lychee,
codespell) had no concept and wasn't in the source map, despite being
committed since 2026-09-08 (&lt;code&gt;e735ffe&lt;/code&gt;). Extended &lt;code&gt;knowledge-sources.md&lt;/code&gt;
with a row for it and its markdownlint config.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Re-verified&lt;/strong&gt;: &lt;code&gt;playbooks/contributing.md&lt;/code&gt; (enriched to describe the
git-ignored-&lt;code&gt;main.js&lt;/code&gt; &quot;Failed to load plugin&quot; failure mode, matching
&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;'s newly added guidance), &lt;code&gt;playbooks/releasing.md&lt;/code&gt;,
&lt;code&gt;services/validator-engine.md&lt;/code&gt;, &lt;code&gt;services/settings-tab.md&lt;/code&gt;,
&lt;code&gt;policies/no-telemetry.md&lt;/code&gt;, &lt;code&gt;references/lokf-toolkit.md&lt;/code&gt; (PyPI &lt;code&gt;lokf&lt;/code&gt;
still at &lt;code&gt;0.7.0&lt;/code&gt; - &lt;code&gt;pyproject.toml&lt;/code&gt;'s floor needs no bump) - no other
drift found. The three external-spec-URL references (LOKF spec, OKF spec,
Obsidian plugin guidelines) and the glossary/explanation concepts were not
re-fetched this run and remain unverified.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-10</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-10"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-10</id>
    <published>2026-09-10T09:38:34Z</published>
    <updated>2026-09-10T12:38:39Z</updated>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; the bundle header's &lt;code&gt;publisher.id&lt;/code&gt;: it declared &lt;code&gt;type: Person&lt;/code&gt;
but minted under &lt;code&gt;org/&lt;/code&gt; (&lt;code&gt;.../knowledge/org/noelmcloughlin&lt;/code&gt;); now
&lt;code&gt;person/noelmcloughlin&lt;/code&gt;, the convention the sibling &lt;code&gt;lokf-agent-skills&lt;/code&gt;
bundle uses. The plugin's own scaffold template (&lt;code&gt;src/main.ts&lt;/code&gt;,
&lt;code&gt;scaffold-root-header&lt;/code&gt;) carried the same mismatch and was fixed alongside.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrected&lt;/strong&gt; &lt;code&gt;playbooks/releasing.md&lt;/code&gt;'s &lt;code&gt;resource&lt;/code&gt;: it describes the
PR-based version-bump flow now cites &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-09 · Bug fixed: 1 · Re-verified: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-09"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-09</id>
    <published>2026-09-09T21:44:30Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <category term="Bug fixed"/>
    <category term="Re-verified"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bug fixed&lt;/strong&gt;: 6 concepts carried a bare-scalar value on a multivalued
typed-relation field (&lt;code&gt;definedBy&lt;/code&gt; on &lt;code&gt;glossary/lokf.md&lt;/code&gt;, &lt;code&gt;glossary/okf.md&lt;/code&gt;,
&lt;code&gt;references/lokf-specification.md&lt;/code&gt;; &lt;code&gt;relatedTo&lt;/code&gt; on &lt;code&gt;references/lokf-toolkit.md&lt;/code&gt;
and &lt;code&gt;services/validator-engine.md&lt;/code&gt;; &lt;code&gt;isPartOf&lt;/code&gt; on &lt;code&gt;services/report-view.md&lt;/code&gt;,
&lt;code&gt;services/settings-tab.md&lt;/code&gt;, &lt;code&gt;services/validator-engine.md&lt;/code&gt;) - the same bug
class the 2026-09-08 audit found and fixed elsewhere had recurred. &lt;code&gt;just lokf-validate&lt;/code&gt; now passes again (17/17 concepts). Caught only after bumping
the &lt;code&gt;lokf&lt;/code&gt; toolkit floor from &lt;code&gt;&amp;gt;=0.5.0&lt;/code&gt; to &lt;code&gt;&amp;gt;=0.7.0&lt;/code&gt; in &lt;code&gt;.lokf/pyproject.toml&lt;/code&gt;
(latest PyPI release; no breaking changes noted) surfaced it under the newer
generated schema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Re-verified&lt;/strong&gt;: all 9 resource-bearing concepts backed by a repo-local file
or by &lt;code&gt;README.md&lt;/code&gt; (both plugin services, both playbooks with a repo doc
resource, &lt;code&gt;references/commands-and-settings.md&lt;/code&gt;, &lt;code&gt;policies/no-telemetry.md&lt;/code&gt;)
against their current sources - no drift found - plus &lt;code&gt;references/lokf-toolkit.md&lt;/code&gt;
against the live PyPI listing. Recorded a &lt;code&gt;process:ktl-librarian&lt;/code&gt; &lt;code&gt;verified&lt;/code&gt;
event on each. The three concepts whose &lt;code&gt;resource&lt;/code&gt; is an external spec URL
(LOKF spec, OKF spec, Obsidian plugin guidelines) were not re-fetched this
run and were left unverified.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>2026-09-08 · Gap closed: 1 · Initialization: 1</title>
    <link rel="alternate" type="text/html" href="https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/log/#2026-09-08"/>
    <id>https://w3id.org/ktl/registrar/knowledge/log#2026-09-08</id>
    <published>2026-09-09T21:44:30Z</published>
    <updated>2026-09-22T23:26:19Z</updated>
    <category term="Gap closed"/>
    <category term="Initialization"/>
    <content type="html">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;references/lokf-toolkit.md&lt;/code&gt;: the &lt;code&gt;.lokf/pyproject.toml&lt;/code&gt; toolkit
dependency (the &lt;code&gt;lokf&lt;/code&gt; PyPI package, or its raw LinkML schema as a
no-Python fallback) was previously conflated with the specification website
in this bundle's own prose (&lt;code&gt;.lokf/README.md&lt;/code&gt; called the website &quot;the
toolkit that does the turning&quot;). Split into its own Reference concept,
&lt;code&gt;relatedTo&lt;/code&gt;-linked from &lt;code&gt;services/validator-engine.md&lt;/code&gt;, and fixed the
website/toolkit conflation in &lt;code&gt;.lokf/README.md&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gap closed&lt;/strong&gt;: the version-history gap flagged in
&lt;a href=&quot;https://noelmcloughlin.github.io/obsidian-ktl-registrar/knowledge/playbooks/knowledge-sources/&quot;&gt;Knowledge sources&lt;/a&gt; - &lt;code&gt;manifest.json&lt;/code&gt;/the
&lt;code&gt;v0.2.0&lt;/code&gt; git tag ahead of &lt;code&gt;versions.json&lt;/code&gt;/&lt;code&gt;CHANGELOG.md&lt;/code&gt; - was fixed in the
host repo (&lt;code&gt;versions.json&lt;/code&gt; now records &lt;code&gt;0.2.0&lt;/code&gt;; &lt;code&gt;CHANGELOG.md&lt;/code&gt; has a
&lt;code&gt;## [0.2.0]&lt;/code&gt; entry). Updated the playbook to stop reporting it as open.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Initialization&lt;/strong&gt;: Bootstrap discovery pass. Scaffolded the LOKF bundle and
populated it with 16 concepts derived from the obsidian-ktl-registrar repository: 4
services (plugin, validator engine, report view, settings tab), 4 references
(LOKF spec, OKF spec, Obsidian plugin guidelines, commands and settings), 3
glossary terms (LOKF, OKF, Diátaxis genre), 3 playbooks (knowledge sources,
contributing, releasing), 1 policy (no telemetry), and 1 explanation (why
KTL Registrar exists as a layered add-on). &lt;code&gt;base_iri&lt;/code&gt; is a placeholder
(&lt;code&gt;ktl-registrar.example&lt;/code&gt;) pending a real, owned namespace.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
</feed>
