Skip to content

Bundle log

A feed reader can follow this log: log.xml holds its newest 20 days.

  • Changed: lokf toolkit gives the >=0.9.0 floor that .lokf/pyproject.toml now declares; LOKF and Trust engine count fourteen relation fields, with isReplacedBy.
  • Changed: Contributing describes the skills pin moving through knowledge-sync.yaml and knowledge-sync.sh, which copy every template the release’s knowledge-sync.manifest lists, as CONTRIBUTING.md has said since #104, in place of the three-workflow copy step.
  • Resolved: knowledge-sync.sh reads the manifest out of the release tag and copies every listed template the repository carries, so the playbook describes that sync; CONTRIBUTING.md says the same since #104.
  • Changed: the source map’s sync row names .lokf/scripts/knowledge-sync.sh and feeds the contributing playbook, which now says what a pin move copies.
  • Changed: Settings tab adds src/settings-model.ts as a source: the knownTypes defaults and the upgrade-merge rule its description already describes live there, not in src/settings.ts, and the coverage sweep found the file named in no concept.
  • Changed: Trust fields names the ktl-curator skill in Knowledge Trust Ladder’s bundle as the whole it is part of, since its resource is skills/ktl-curator/references/trust-fields.md in that skill; the first link from this bundle into another member of the KTL federation.
  • Changed: Review session names the ktl-curator skill in Knowledge Trust Ladder’s bundle as the whole it is part of, since its resource is skills/ktl-curator/references/review-session.md in that skill.
  • Changed: the trust-model page names its companion project as Knowledge Trust Ladder (KTL), as docs/for-the-curious.md now does, so the later KTL Registrar reads as defined.
  • Question: the contributing playbook’s pin rule counts three sidecar workflows, and the sync script now copies whatever the release’s manifest lists, knowledge-sync.yaml among them.
  • Changed: the source map names knowledge-sync.yaml and its pull request template, which the sidecar syncs added, and lists package-lock.json among the build files left out.
  • Changed: the edits engine names what each paired function does: applyConfirm appends the event and applyStaleAfter only sets stale_after, and parseCurationTally reads back the counts upsertCurationLine writes, as src/edits.ts shows.
  • Prose: reworded 18 concept bodies in plain English. No fact, link, number or frontmatter changed.
  • Changed: The OKF glossary term gains a description, so its index bullet says what it defines.
  • Changed: The LOKF glossary term gains a description, so its index bullet says what it defines.
  • Changed: The Diátaxis genre glossary term gains a description, so its index bullet says what it defines.
  • Changed: Curator side panel says that a confirmed concept a question set back to draft reads “reopened” on the card and the active note, and gets the reopened hint in the queue, as src/curator-view.ts has done since faa8d93.
  • Changed: In-editor aids says that a confirmed concept a question reopened keeps the confirmed tone, as src/trust-label.ts has done since faa8d93. Its sources now list the seven files the source map names for it, so the work list sees trust-label.ts move.
  • Changed: The trust-fields description names docs/using.md for the health-line chips, which left the README when it became a doorway.
  • Rewrite: lokf toolkit follows what lokf validate does in 0.8.0, a JSON Schema check with no SHACL pass, and adds scripts/build-vocab.mjs, the one maintenance step that reads the toolkit’s schema.
  • Changed: The lokf toolkit description drops the SHACL checks lokf validate does not run, and its sources add the sidecar’s pyproject.toml, its justfile and scripts/build-vocab.mjs.
  • Changed: LOKF specification says what the page holds today: no Golden Rules, which are the librarian skill’s, and a type table of fourteen classes, while the 0.8.0 schema adds Role.
  • Changed: The LOKF glossary term counts the thirteen relation fields src/bundle.ts reads, not ten, the count services/trust-engine.md already gives, and cites src/bundle.ts as its source.
  • Changed: Diátaxis genre now carries genre: reference, which its body already said it had.
  • Changed: the source map adds scripts/build-vocab.mjs to the lokf toolkit row, and names the repository files it leaves out on purpose. The reworded README and docs pages still match their rows.
  • Changed: the bundle’s base_iri moved from the placeholder https://ktl-curator.example/knowledge/ to https://w3id.org/ktl/curator/knowledge/, 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.
  • Added: Knowledge website, from website/README.md and .github/workflows/knowledge-website.yaml, which the ktl-website skill added in a259ac0.
  • Changed: the source map gains the knowledge website (website/ and knowledge-website.yaml, added in a259ac0), and the README row says the doorway now links the website’s pages.
  • Prose: reworded 12 concept bodies in plain English. No fact, link, number or frontmatter changed.
  • Changed: the OKF specification moved to GoogleCloudPlatform/open-knowledge-format, which still serves v0.2; the knowledge-catalog/okf/ copy is frozen.
  • Changed: the source map links the canonical OKF specification.
  • Rewrite: Why KTL Curator exists follows docs/for-the-curious.md, which docs/architecture.md now links to in place of the README, and adds what the plugin leaves to KTL Registrar and the librarian.
  • Rewrite: Contributing follows the current CONTRIBUTING.md checklist: Node 20 or later, the changelog line, the vocab refresh, the skills pin sync and the releasing pull request title.
  • Changed: The Contributing description names the checklist items the concept now carries.
  • Rewrite: the registrar gate follows the current workflow: validate runs the justfile recipe after uv sync --locked and passes the merge base to the conventions script; provenance reads whole events, removals included, and checks signatures against .lokf/curators/ too; the copy now keeps the template’s jobs unchanged.
  • Changed: The registrar gate description covers removed confirmations, and its sources add knowledge-provenance.sh.
  • Rewrite: the source map adds the docs pages, the release config, the sidecar’s other copies and the curator keys, and its registrar and skill-reference rows follow their current sources. The dated re-check notes are gone; the log keeps that history.
  • Rewrite: Releasing adds the workflow_dispatch path release.yml gained for a tag semantic-release pushed before failing, the security release type, and the plan job’s changelog and title checks.
  • Changed: The Releasing description names the hand-run dispatch path, and its sources add .releaserc.json.
  • Rewrite: the no-telemetry policy follows SECURITY.md’s current wording and cites docs/architecture.md’s Privacy section, where the README’s former Privacy section now lives.
  • Changed: The no-telemetry description follows SECURITY.md, and its sources add docs/architecture.md.
  • Changed: Curator side panel names the trust-ladder icon its tab and the ribbon now carry.
  • Changed: Edits engine says the caller writes the body through vault.process, not vault.modify, and adds the four exported functions it left out.
  • Changed: KTL Curator plugin: the verbs write the body through vault.process, the corrected guard is hasReviewedCard plus hasChangedSinceCardOpened (no canMarkCorrected), and all six commands and the ribbon icon are listed.
  • Changed: Settings tab adds the In-editor group, the trust-marker and autocomplete toggles it had left out.
  • Changed: Trust engine: reliance counts the schema’s thirteen relation fields, once per relying concept with retired concepts left out, and an empty verified list reads as unchecked.
  • Resolved: src/main.ts wires the four modules as the concept says. Its Look up a LOKF field command opens FieldReferenceModal over LOKF_FIELD_DOCS, it registers lokfTrustMarkerExtension and KtlCuratorSuggest, and it renders trustLabel and handoffLabel.
  • Future-dated times corrected. 3 process:ktl-librarian 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.
  • The signing setup moved to its own page in the skills. knowledge-trust-ladder split the registrar gate out of automation.md into gate.md, so playbooks/knowledge-registrar-gate.md now points there for the signing setup.
  • The docent records a reader’s gap without reading the file it goes in. .lokf/feedback.md 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 knowledge-feedback.sh: the docent hands over its own entry and never opens the file. The script comes from the v0.23.0 templates, the release that ships it, and the pin moved to that tag with it.

  • The scheduled librarian installs its skill from a tag that has it. The pin still read v0.21.0, where the skills are named lokf-*; the rename to ktl-* landed in v0.22.0. The install step copies skills/ktl-librarian and is not gated on KNOWLEDGE_LIBRARIAN_ENABLED, so every weekly run has been failing there since the plugin took the KTL name, armed or not. The pin moves to v0.23.0, the release that also ships knowledge-feedback.sh. The scripts under .lokf/scripts/ and knowledge-registrar.yaml all match its templates.

  • The logo now carries knowledge and trust. The first mark was three rungs alone: it drew ladder 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.

  • Both diagrams carry the mark and the wordmark in the top-left corner, from the same shared definition.

  • Text that collided with its own box. A headless-Chrome pass measured every label against its enclosing card: the curator card’s “a few at a time” 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.

  • Assets restacked, and the family logo added. 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 #E4E1D7 and the faint ink #6E6D66, which also lifts 10px grey labels past 4.5:1. New .assets/knowledge-trust-ladder-logo.svg, identical in all three repositories. The .assets/*.svg source-map row covers it.

  • Skills repository renamed to knowledge-trust-ladder, from lokf-agent-skills, because upstream LOKF now ships its own bundled skills. Every deep link and the scheduled librarian’s LOKF_SKILLS_REPO follow it, in one mechanical pass; no verified event changed. This plugin’s own name, id and base_iri 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 CHANGELOG.md does.

  • Reference audit moved onto the toolkit’s own flag: just lokf-check-refs ran a hand-written SPARQL query over ten relation predicates, which reported an external source: or definedBy: URL - correct usage for both slots - as a dangling target, and had drifted against the schema (missing holder, measures, memberOf and reified relations). It calls lokf validate --check-refs 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 uvx ... just: the gate’s third step is gone and --check-refs 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 copies line reports the file as drifted until it does. That concept described the recipe while citing only the workflow, the conventions script and SECURITY.md, so .lokf/justfile is now one of its sources.

  • Resources repinned off runtime state: references/trust-fields.md and references/review-session.md named their installed copies under .agents/, which git ignores, so the conventions gate failed in a clean CI checkout. Both now name the published file at the v0.19.2 tag the workflow installs.

  • Sidecar brought up to the skills templates: the scripts here were the pre-0.19 copies, so the wrapper lacked the EXIT-trap restore and the registrar gate still read confirmations by their by: line. Synced all five scripts, added .gitattributes, and bumped LOKF_SKILLS_REF from v0.9.0 to v0.19.2. The release workflow now checks release notes and the pull request title on a releasing pull request.

  • Open question closed: references/trust-fields.md asked whether the plugin was ahead of its pinned spec of record on “known vocabulary”. The LOKF_SKILLS_REF bump to v0.19.2 settles it - that release carries the wording src/curator-view.ts uses.

  • Steady-state refresh, against the now-committed 96cf5fe (“docs(security): improved layout”): SECURITY.md was slimmed and its design content moved to the skills repository’s new docs/threat-model.md. playbooks/knowledge-registrar-gate.md corrected - two sentences named SECURITY.md as the design’s home when it now only links there; retitled to name the threat model directly. policies/no-telemetry.md re-verified, its cited section unchanged by the rewrite. playbooks/knowledge-sources.md’s SECURITY.md row updated to describe the slimmed file. No new concept needed: this repository has always treated SECURITY.md as a sources entry, not a Policy concept of its own.

  • Steady-state refresh (librarian pass, no feedback pending), against the now-committed feba4e0 (“gate runs the conventions script and lokf-check-refs”): the validate job in .github/workflows/knowledge-registrar.yaml gained two steps - scripts/knowledge-conventions.sh and just lokf-check-refs - that playbooks/knowledge-registrar-gate.md did not yet describe; corrected, with the script added as a sources entry. All other concepts re-checked against current src/, CONTRIBUTING.md, and the pinned skill copy: no further drift. references/trust-fields.md’s open question (the installed copy still pinned to LOKF_SKILLS_REF: v0.9.0 and reading “built-in vocabulary” against src/curator-view.ts’s “known vocabulary”) re-checked and still holds, unchanged. just lokf-validate, just lokf-check-refs, and scripts/knowledge-conventions.sh all pass.

  • Steady-state refresh against an uncommitted working-tree change (CONTRIBUTING.md rewritten as a checklist under a word budget and pointing at the skills repository’s docs/ for release/signing detail; npm run check; four lint rules raised to error; a drift guard added to scripts/smoke-test.ts; build.yml/lint-and-docs.yaml hardened with a main-only push trigger, a concurrency group, and an action-pin check). playbooks/contributing.md re-derived (the pure-module list grew from four to seven; CI’s mirror of npm run check and the pin/link checks added). playbooks/releasing.md’s resource moved from CONTRIBUTING.md to semantic-release.yml/release.yml, since the prose it was derived from no longer lives in CONTRIBUTING.md. Four source-map rows added for files that predate this pass but were never listed: CONTRIBUTING.md, build.yml/lint-and-docs.yaml, semantic-release.yml/release.yml, pull_request_template.md. playbooks/index.md was missing knowledge-registrar-gate.md; added.

  • Re-verified against the actual pinned resource, not the skill repository’s live checkout: the prior pass’s log entry called references/trust-fields.md’s open question closed by pointing at the lokf-agent-skills working tree; the concept’s own resource is the locally installed copy, still pinned to v0.9.0 (knowledge-librarian.yaml’s LOKF_SKILLS_REF, unchanged this run) and still reading “built-in vocabulary” with no domain-schema mention, while src/curator-view.ts already reads “known vocabulary”. Reopened as an open question there rather than left silently settled.

  • Re-verified, no change: references/obsidian-plugin-guidelines.md (checked against the new eslint.config.mts rules) and playbooks/knowledge-registrar-gate.md (workflow file unchanged). lokf on PyPI is still 0.7.0, matching the pinned floor - no bump (uv pip index versions has no index subcommand in this environment; checked directly against pypi.org/pypi/lokf/json instead).

  • CONTRIBUTING.md corrected, and playbooks/contributing.md re-derived from it. The document still said the smoke test covers “the three pure modules” and its src/ table had no settings-model.ts row, so the concept had been written ahead of its own source - the wrong direction for a derived record. Source and concept now agree, and the same check found the same fault in the sibling ktl-registrar repository.

  • Steady-state refresh (librarian pass, no feedback pending) against the uncommitted feat/known-types-setting branch, which adds Known LOKF types (knownTypes) under a new Type vocabulary settings group - the same list and upgrade rule as ktl-registrar’s - and threads it into classify() and parseCurationPolicyTable(), so a bundle validated against a domain schema can list that schema’s classes: they stop counting as misfits and can carry a review interval. Updated services/settings-tab.md, services/trust-engine.md (the class check was still described as “14-class”; it is the manifest’s fifteen, or the list handed in), services/ktl-curator-plugin.md and services/curator-view.md (the vocabulary line’s new wording, and an open question on its divergence from the skill’s trust-fields.md). Re-verified, no change: explanation/why-ktl-curator.md. playbooks/knowledge-sources.md: settings row and run note.

  • Two defects found by a coverage pass, corrected here and in the code. parseCurationPolicyTable matched a class name literally, so the prose rows of this plugin’s own curation-policy template (“Glossary terms”, “people”) bound nothing - hidden by their intervals coinciding with the settings defaults. The parse now ignores spaces and English plurals, and services/trust-engine.md records rule and history; the upstream skill’s references/review-session.md, spec of record for that table, states it too, so the two cannot drift apart again. Separately, deleting an ## Open questions section left two blank lines behind it (markdownlint MD012); one now.

  • The open question services/curator-view.md raised was answered upstream the same day and is closed: the ktl-curator skill’s references/trust-fields.md now reads a host’s domain schema from .lokf/justfile’s --schema and words the label “doesn’t fit the known vocabulary”, as this plugin already did. The plugin keeps its Known LOKF types setting because it cannot read a file outside the vault; the two no longer disagree about what the vocabulary is.

  • src/settings-model.ts is a new pure module holding the settings shape, defaults and the saved-data merge rule, moved out of main.ts so a test can reach them. Recorded in services/ktl-curator-plugin.md, this map’s src/ row, and playbooks/contributing.md, whose import-free rule now names it and says why logic leaves main.ts rather than being tested through it.

  • Steady-state refresh (librarian pass, no feedback pending), after a ktl-sidecar repair pass that restored .lokf/.gitignore’s .obsidian/ rule and laid the knowledge_bundle doorway link. Re-verified playbooks/knowledge-registrar-gate.md against the now-committed workflow; it now says the copy also words two comments its own way, not only persist-credentials: false and permissions: {}. playbooks/knowledge-sources.md: .assets/ row and run note added.

  • Steady-state refresh (librarian pass, no feedback pending), against the commits since 248f9e6 (knowledge-registrar.yaml gaining the template’s provenance/attestation jobs, SECURITY.md restructured to inherit the guard design from lokf-agent-skills, two README images) and this session’s uncommitted README rewrite around usage. Added playbooks/knowledge-registrar-gate.md (a gap: no source-map row, no concept) and two workflow rows to the source map. Audit fixes: just lokf-check-refs failed on four sameAs relations whose targets were the external URLs already carried by resource - removed from the four references/* concepts, as the sibling bundles do; references/okf-specification.md had derivedFrom pointing at the LOKF spec, backwards - moved onto references/lokf-specification.md, the profile derived from OKF; the LOKF spec’s body said a “14-class” vocabulary, corrected to 15 (Role); the source map listed CUR.md, a file this repository has never had (deleted in the fork parent’s 0.2.0). references/trust-fields.md‘s description no longer claims a README trust-label table - the rewritten README links to the skills’ README for the labels and to docs/for-the-curious.md for the rules. Re-verified, no change: policies/no-telemetry.md, explanation/why-ktl-curator.md (first verified event), references/review-session.md and references/trust-fields.md (the installed .agents/skills/ktl-curator/ copies are identical to the source skill this run). Drift audit (reported, not fixed): both workflow copies differ from their templates only by the stricter persist-credentials: false / permissions: {} and by comments. lokf on PyPI is still 0.7.0, matching the floor.

  • Steady-state refresh (librarian pass, no feedback pending): re-verified services/settings-tab.md and services/ktl-curator-plugin.md against src/settings.ts and src/main.ts after this session’s README-notice rewording and a comment-only pass over src/main.ts/src/bundle.ts (knowledge_bundle doorway wording, implicitRoots). Both already matched, so each gained its first verified event (process:ktl-librarian) rather than a content change; status: draft is unchanged - that records no human curator has confirmed them yet, which this refresh does not settle. policies/no-telemetry.md (resource SECURITY.md) and explanation/why-ktl-curator.md (resource docs/for-the-curious.md) were not re-checked this run - neither resource changed this session.

  • Steady-state refresh (process:ktl-librarian), triggered by this session’s “no bundle” state and break-glass “Treat the vault root as the bundle” setting (src/main.ts, src/bundle.ts, src/settings.ts, src/curator-view.ts) and the README→docs/for-the-curious.md split:

    • services/ktl-curator-plugin.md - description and body corrected for the no-bundle state (hasNoBundle()/noBundleNotice()) and fixed drifted function names (detectedRoot()/autoBundleRoot no longer exist; the current path is implicitRoots() calling bundle.ts’s pure implicitBundleRoots).
    • services/settings-tab.md - added the break-glass “Treat the vault root as the bundle” toggle to the Scope group’s description.
    • services/curator-view.md - added the report’s no-bundle message.
    • explanation/why-ktl-curator.md - resource moved from README.md to docs/for-the-curious.md, where the four-tier trust model content now actually lives.
    • playbooks/knowledge-sources.md - updated the README.md “For the curious” row to point at docs/for-the-curious.md, and added a row for the in-editor-aids source files.
    • Added services/in-editor-aids.md (status: draft, open question left for a person): a new Service concept covering src/fields.ts, src/field-modal.ts, src/inline.ts, src/suggest.ts, src/suggest-context.ts, src/trust-label.ts, src/lokf-vocab.json - the “Look up a LOKF field” command, the inline trust badge, and frontmatter autocomplete - which had no concept of their own despite being live features since v0.2.0. Wired into services/index.md, root index.md, and ktl-curator-plugin.md’s hasPart.
    • Re-verified against their sources and unchanged otherwise: 13 concepts (policies/no-telemetry.md; the six references/*.md; the three glossary/*.md; services/trust-engine.md, services/edits-engine.md; playbooks/contributing.md) got a refreshed process:ktl-librarian verified event, no content changes.
    • .lokf/pyproject.toml: lokf[build] floor raised >=0.5.0 → >=0.7.0 (latest on PyPI is 0.7.0; a minor-version bump, no major change to review).
  • Semantic-release, hardened (maintainer decision, matching upstream ktl-registrar): playbooks/releasing.md rewritten (generated/verified refreshed) - a person no longer picks the version. semantic-release.yml’s release job, behind the release GitHub Environment, computes it from Conventional Commits and runs a new .github/scripts/changelog-release.mjs as semantic-release’s own verifyRelease/generateNotes/prepare hooks: refuses an empty ## [Unreleased], uses it as the release notes, retitles it to a dated heading. @semantic-release/npm (npmPublish: false) still triggers the existing version script. release.yml gained a workflow_call trigger for the same reason as the sibling plugin; unchanged otherwise.

  • Corrected services/ktl-curator-plugin.md and services/settings-tab.md after the maintainer had the afternoon’s recommendations implemented: with no bundle roots configured a top-level knowledge_bundle/ is detected on its own (autoBundleRoot, identical to KTL Registrar’s), and a dot-folder root is accepted with a live-index check and a warning instead of refused.

  • README restructured around how an Obsidian user meets a knowledge bundle - a new “How this fits into an Obsidian vault” section (the bundle is the vault; a folder inside the vault; derived from a repository and opened through knowledge_bundle), where the lokf-agent-skills come in, and why a vault is never migrated into a bundle. Corrected the previous README’s claim that a repository root opened as a vault reaches the bundle through the knowledge_bundle link: per Obsidian’s own help on symbolic links, a link whose target is inside the same vault is ignored, and a dot-folder is never indexed. Other OKF validators are now mentioned once, in an “Alternative plugins” footnote. No concept body changed: explanation/why-ktl-curator.md already describes the relationship to KTL Registrar correctly (siblings, no dependency either way). Targeted pass, not a full steady-state sweep.

  • Bootstrap discovery: replaced the two placeholder services with 5 Service concepts (ktl-curator-plugin, trust-engine, edits-engine, curator-view, settings-tab) derived from src/*.ts; added 6 Reference concepts (the LOKF/OKF specs, the lokf toolkit, Obsidian’s plugin guidelines, and the ktl-curator skill’s trust-fields.md/review-session.md); 3 GlossaryTerm concepts (OKF, LOKF, Diátaxis genre); 1 Policy (no-telemetry); 1 Explanation (why KTL Curator exists); and playbooks/knowledge-sources.md recording where each of these came from, plus playbooks/releasing.md and playbooks/contributing.md from CONTRIBUTING.md. All 17 new concepts are status: draft, none yet confirmed by a person.
  • Initialization: Scaffolded the LOKF bundle for KTL Curator with placeholder services. Real concepts to follow.