docs: close OKF conformance gaps found by night audit
- references/okf-spec.md: replace v0.2 note with the deltas verified against upstream SPEC.md 2026-10-19 (timestamp->generated.at and # Citations->sources are the two breaking changes; trust fields and root-index okf_version are additive; bundle stays v0.1). - index.md: restore the agentic-web-research section lost in the 2026-08-28 rebuild and link log.md (index-coverage doctrine). - gen-keybinds.sh emits OKF frontmatter so its generated artifact (tools/niri/keybindings.md, regenerated, 120 bindings) passes kb-lint; test added red->green. - fix the two broken [[niri]] wikilinks (handy, noctalia-shell). Refs #29
This commit is contained in:
1 parent
01d9d3fbd5
commit
e86e60af39
8 files changed
+98
-12
No files matched your search
@@ -48,7 +48,17 @@ Practice notes: SDLC, languages, infra tooling (Terraform, K8s, containers).
|
|||||||
Decision-support research: agentic web tooling, chezmoi evaluation,
|
Decision-support research: agentic web tooling, chezmoi evaluation,
|
||||||
secrets-for-agents. Research docs inform decisions; they are not facts yet.
|
secrets-for-agents. Research docs inform decisions; they are not facts yet.
|
||||||
|
|
||||||
|
## [Agentic web research](agentic-web-research/index.md)
|
||||||
|
|
||||||
|
Self-hosted web-agent stack research: SearXNG tuning, VPN routing, agentic
|
||||||
|
search practices, open models, MCP.
|
||||||
|
|
||||||
## [Inventory](inventory/index.md)
|
## [Inventory](inventory/index.md)
|
||||||
|
|
||||||
Pre-pruning census of every userspace config on this box — the input for the
|
Pre-pruning census of every userspace config on this box — the input for the
|
||||||
pruning session.
|
pruning session.
|
||||||
|
|
||||||
|
## [Change history](log.md)
|
||||||
|
|
||||||
|
Chronological update history of this bundle — incident lessons land here first,
|
||||||
|
then settle into concept pages.
|
||||||
@@ -8,11 +8,20 @@ tags:
|
|||||||
- documentation
|
- documentation
|
||||||
- knowledge-bundle
|
- knowledge-bundle
|
||||||
- specification
|
- specification
|
||||||
verified: 2026-08-28
|
verified: 2026-10-19
|
||||||
timestamp: 2026-01-15
|
timestamp: 2026-01-15
|
||||||
---
|
---
|
||||||
|
|
||||||
> **Note:** Google Cloud published OKF v0.2 at [GoogleCloudPlatform/open-knowledge-format](https://github.com/GoogleCloudPlatform/open-knowledge-format) with additional frontmatter families for provenance, trust, and attestation. This document covers the v0.1 format used by this knowledge bundle.
|
> **Note:** Google Cloud published OKF v0.2 at
|
||||||
|
> [GoogleCloudPlatform/open-knowledge-format](https://github.com/GoogleCloudPlatform/open-knowledge-format)
|
||||||
|
> (SPEC.md, verified 2026-10-19). v0.2 is a minor bump with two deliberate
|
||||||
|
> breaking changes: `timestamp` is superseded by `generated: { by, at }`, and the
|
||||||
|
> body `# Citations` list is superseded by a `sources` frontmatter family; it adds
|
||||||
|
> optional trust/lifecycle fields (`verified: { by, at }`, `status`,
|
||||||
|
> `stale_after`) and the `Attested Computation` type, and permits `okf_version:`
|
||||||
|
> frontmatter in a bundle-root `index.md`. This bundle stays on v0.1 semantics
|
||||||
|
> (kb-lint enforces them); the bundle-local `verified:` date stamp and `tags`
|
||||||
|
> discipline are producer extensions compatible with both versions.
|
||||||
|
|
||||||
# Open Knowledge Format (OKF) v0.1
|
# Open Knowledge Format (OKF) v0.1
|
||||||
|
|
||||||
|
|||||||
@@ -229,5 +229,5 @@ See [[noctalia-shell]] for IPC integration patterns.
|
|||||||
## See Also
|
## See Also
|
||||||
|
|
||||||
- [[noctalia-shell|noctalia-shell.md]] — Desktop environment integration
|
- [[noctalia-shell|noctalia-shell.md]] — Desktop environment integration
|
||||||
- [[niri|niri/index.md]] — Compositor configuration
|
- [niri](niri/index.md) — Compositor configuration
|
||||||
- [`handy --help`](https://github.com/cjpais/Handy) — CLI reference
|
- [`handy --help`](https://github.com/cjpais/Handy) — CLI reference
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
|
---
|
||||||
|
type: reference
|
||||||
|
title: Niri Keybindings
|
||||||
|
description: Live keybinding cheat sheet generated from keybinds.kdl — do not edit by hand.
|
||||||
|
tags:
|
||||||
|
- niri
|
||||||
|
- keybindings
|
||||||
|
generated: { by: scripts/gen-keybinds.sh }
|
||||||
|
---
|
||||||
|
|
||||||
# Niri Keybindings
|
# Niri Keybindings
|
||||||
|
|
||||||
> GENERATED by `scripts/gen-keybinds.sh` from `keybinds.kdl` — do not edit by hand.
|
> GENERATED by `scripts/gen-keybinds.sh` from `keybinds.kdl` — do not edit by hand.
|
||||||
@@ -64,10 +74,10 @@
|
|||||||
| `Mod+K` | focus-window-up |
|
| `Mod+K` | focus-window-up |
|
||||||
| `Mod+Down` | focus-window-down |
|
| `Mod+Down` | focus-window-down |
|
||||||
| `Mod+J` | focus-window-down |
|
| `Mod+J` | focus-window-down |
|
||||||
| `Mod+CTRL+Left` | swap-window-left |
|
| `Mod+CTRL+Left` | consume-or-expel-window-left |
|
||||||
| `Mod+CTRL+H` | swap-window-left |
|
| `Mod+CTRL+H` | consume-or-expel-window-left |
|
||||||
| `Mod+CTRL+Right` | swap-window-right |
|
| `Mod+CTRL+Right` | consume-or-expel-window-right |
|
||||||
| `Mod+CTRL+L` | swap-window-right |
|
| `Mod+CTRL+L` | consume-or-expel-window-right |
|
||||||
| `Mod+CTRL+Alt+Left` | move-column-left |
|
| `Mod+CTRL+Alt+Left` | move-column-left |
|
||||||
| `Mod+CTRL+Alt+H` | move-column-left |
|
| `Mod+CTRL+Alt+H` | move-column-left |
|
||||||
| `Mod+CTRL+Alt+Right` | move-column-right |
|
| `Mod+CTRL+Alt+Right` | move-column-right |
|
||||||
@@ -141,10 +151,10 @@
|
|||||||
| `Mod+CTRL+F` | expand-column-to-available-width |
|
| `Mod+CTRL+F` | expand-column-to-available-width |
|
||||||
| `Mod+C` | center-column |
|
| `Mod+C` | center-column |
|
||||||
| `Mod+CTRL+C` | center-visible-columns |
|
| `Mod+CTRL+C` | center-visible-columns |
|
||||||
| `Mod+Minus` | set-column-width "-10%" |
|
| `Mod+Minus` | set-column-width "-5%" |
|
||||||
| `Mod+Equal` | set-column-width "+10%" |
|
| `Mod+Equal` | set-column-width "+5%" |
|
||||||
| `Mod+Shift+Minus` | set-window-height "-10%" |
|
| `Mod+Shift+Minus` | set-window-height "-5%" |
|
||||||
| `Mod+Shift+Equal` | set-window-height "+10%" |
|
| `Mod+Shift+Equal` | set-window-height "+5%" |
|
||||||
|
|
||||||
## Modes
|
## Modes
|
||||||
|
|
||||||
|
|||||||
@@ -429,7 +429,7 @@ noctalia msg templates-apply
|
|||||||
|
|
||||||
## See Also
|
## See Also
|
||||||
|
|
||||||
- [[niri|niri/index.md]] — Compositor configuration
|
- [niri](niri/index.md) — Compositor configuration
|
||||||
- [[displays|displays]] — Display layout
|
- [[displays|displays]] — Display layout
|
||||||
- [[cachyos|cachyos]] — Operating system documentation
|
- [[cachyos|cachyos]] — Operating system documentation
|
||||||
- [`noctalia msg --help`](https://github.com/Noctalia/noctalia) — Full command reference
|
- [`noctalia msg --help`](https://github.com/Noctalia/noctalia) — Full command reference
|
||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Doctrine check: every dir has index.md; index links every sibling file/dir."""
|
||||||
|
import re, sys
|
||||||
|
from pathlib import Path
|
||||||
|
kb = Path(sys.argv[1])
|
||||||
|
issues = []
|
||||||
|
dirs = sorted({p.parent for p in kb.rglob("*.md")})
|
||||||
|
for d in dirs:
|
||||||
|
idx = d / "index.md"
|
||||||
|
if not idx.is_file() and d != kb:
|
||||||
|
issues.append(f"{d.relative_to(kb)}: no index.md")
|
||||||
|
continue
|
||||||
|
if not idx.is_file():
|
||||||
|
continue
|
||||||
|
text = idx.read_text(errors="replace")
|
||||||
|
linked = set()
|
||||||
|
for m in re.finditer(r"\]\((?!https?:|#)([^)#\s]+?)(?:#[^)]*)?\)", text):
|
||||||
|
t = m.group(1)
|
||||||
|
target = (d / t).resolve() if not t.startswith("/") else (kb / t.lstrip("/")).resolve()
|
||||||
|
linked.add(target)
|
||||||
|
# wikilinks too
|
||||||
|
wl_names = {m.group(1).strip().rsplit("/", 1)[-1] for m in re.finditer(r"\[\[([^\]|#]+)", text)}
|
||||||
|
for sib in sorted(d.iterdir()):
|
||||||
|
if sib.suffix != ".md" or sib.name == "index.md":
|
||||||
|
continue
|
||||||
|
if sib.resolve() not in linked and sib.stem not in wl_names:
|
||||||
|
issues.append(f"{d.relative_to(kb)}/index.md: does not link {sib.name}")
|
||||||
|
# subdirs of d linked as their index?
|
||||||
|
for sub in sorted(d.iterdir()):
|
||||||
|
if sub.is_dir() and (sub / "index.md").is_file():
|
||||||
|
subidx = (sub / "index.md").resolve()
|
||||||
|
dirref = sub.resolve()
|
||||||
|
if subidx not in linked and dirref not in linked:
|
||||||
|
# also accept link to sub/ or sub/index.md or wikilink to dir name
|
||||||
|
if not re.search(re.escape(sub.name) + r"[/)]", text):
|
||||||
|
issues.append(f"{d.relative_to(kb)}/index.md: does not link subdir {sub.name}/")
|
||||||
|
for i in issues:
|
||||||
|
print(i)
|
||||||
|
print(f"index-coverage: {len(issues)} issue(s)")
|
||||||
|
sys.exit(1 if issues else 0)
|
||||||
@@ -27,6 +27,16 @@ KBD="${KBD:-$HOME/.config/niri/cfg/keybinds.kdl}"
|
|||||||
[ -f "$KBD" ] || { echo "error: no such file: $KBD" >&2; exit 1; }
|
[ -f "$KBD" ] || { echo "error: no such file: $KBD" >&2; exit 1; }
|
||||||
|
|
||||||
gen() {
|
gen() {
|
||||||
|
echo "---"
|
||||||
|
echo "type: reference"
|
||||||
|
echo "title: Niri Keybindings"
|
||||||
|
echo "description: Live keybinding cheat sheet generated from $(basename "$KBD") — do not edit by hand."
|
||||||
|
echo "tags:"
|
||||||
|
echo " - niri"
|
||||||
|
echo " - keybindings"
|
||||||
|
echo "generated: { by: scripts/gen-keybinds.sh }"
|
||||||
|
echo "---"
|
||||||
|
echo
|
||||||
echo "# Niri Keybindings"
|
echo "# Niri Keybindings"
|
||||||
echo
|
echo
|
||||||
echo "> GENERATED by \`scripts/gen-keybinds.sh\` from \`$(basename "$KBD")\` — do not edit by hand."
|
echo "> GENERATED by \`scripts/gen-keybinds.sh\` from \`$(basename "$KBD")\` — do not edit by hand."
|
||||||
|
|||||||
@@ -63,6 +63,13 @@ teardown() {
|
|||||||
grep -q 'GENERATED' "$TMP/out/keybindings.md"
|
grep -q 'GENERATED' "$TMP/out/keybindings.md"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "output begins with OKF frontmatter so the artifact passes kb-lint" {
|
||||||
|
run "$GEN" "$TMP/keybinds.kdl"
|
||||||
|
[ "${lines[0]}" = '---' ]
|
||||||
|
[[ "${lines[1]}" == 'type: reference' ]]
|
||||||
|
grep -q '^generated:' <<<"$output"
|
||||||
|
}
|
||||||
|
|
||||||
@test "missing input file fails loudly" {
|
@test "missing input file fails loudly" {
|
||||||
run "$GEN" "$TMP/nope.kdl"
|
run "$GEN" "$TMP/nope.kdl"
|
||||||
[ "$status" -ne 0 ]
|
[ "$status" -ne 0 ]
|
||||||
|
|||||||
Reference in new issue
Block a user