kb-health: объективная метрика качества KB (karpathy-style val_bpb)

6 категорий штрафов со взвешенной суммой:
- broken_wikilinks (×10) — [[foo]] не ведёт никуда
- broken_paths (×10) — [text](./foo.md) не существует
- missing_frontmatter (×3) — .md без frontmatter-заголовка
- orphan_files (×2) — нет входящих wikilinks и не в служебных папках
- undated_todos (×1) — "- [ ]" без YYYY-MM-DD
- duplicate_basenames (×5) — одинаковое имя в разных папках

Baseline сегодня: score=493 (158 файлов).
Выход: audit/DATE-health.md (человекочит) + audit/health-latest.json (для agent-loop).

False-positives зачинены:
- wikilinks внутри backticks/fenced code игнорим
- ../ и ./ пути резолвятся от файла-источника
- CLAUDE.md/README.md не требуют frontmatter
This commit is contained in:
dttb
2026-04-18 20:14:43 +03:00
parent 9b33688311
commit 4508bc7339
3 changed files with 512 additions and 0 deletions

141
audit/2026-04-18-health.md Normal file
View File

@@ -0,0 +1,141 @@
---
date: 2026-04-18
type: audit
source: kb-health.py
score: 493
tags: [audit, health, metric]
---
# KB health — 2026-04-18
**Score (меньше = лучше): `493`**
Проверено файлов: 158
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 0 | 10 | 0 |
| broken_paths | 4 | 10 | 40 |
| missing_frontmatter | 70 | 3 | 210 |
| orphan_files | 90 | 2 | 180 |
| undated_todos | 48 | 1 | 48 |
| duplicate_basenames | 3 | 5 | 15 |
| **ИТОГО** | | | **493** |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-04-14-niikn-openwrt-awg-fix.md` | `/root/.claude/knowledge-base/projects/niikn/openwrt-bypass.md` |
| `decisions/2026-04-14-niikn-openwrt-awg-fix.md` | `/root/.claude/projects/-root/memory/niikn-vpn-status.md` |
| `projects/dttb/spaceweb-dns.md` | `feedback_spaceweb_dns.md` |
| `claude-memory/niikn-vpn-status.md` | `/root/.claude/knowledge-base/projects/niikn/openwrt-bypass.md` |
## Без frontmatter (70)
- `decisions/2026-04-17-peredelki-podkop-stability-fix.md`
- `decisions/2026-03-03-mailserver-setup-scenario.md`
- `decisions/2026-04-16-unifi-migration-peredelki.md`
- `decisions/2026-04-14-niikn-openwrt-awg-fix.md`
- `decisions/2026-03-04-matrix-niikn-setup.md`
- `decisions/2026-02-26-clawdbot-129-cliproxy-fix.md`
- `decisions/2026-04-14-openclaw-claude-code-pipeline.md`
- `decisions/2026-04-17-code-server-upgrade.md`
- `notes/2026-02-26-session-summary.md`
- `notes/2026-02-26-knowledge-base-setup.md`
- `notes/2026-02-26-full-session-log.md`
- `notes/2026-02-26-claude-code-session-clawdbot-fix.md`
- `projects/clawdbot-bots.md`
- `projects/bitrix-sites.md`
- `projects/infrastructure-overview.md`
- `projects/homelab-proxmox.md`
- `projects/video-surveillance.md`
- `projects/all-projects-summary.md`
- `projects/unresolved-issues.md`
- `projects/nextcloud.md`
- `projects/dttb/agentdvr-home.md`
- `projects/dttb/mailcow-dttb.md`
- `projects/dttb/netbird-inventory.md`
- `projects/dttb/npm-proxy-hosts.md`
- `projects/dttb/gitea.md`
- `projects/dttb/video-surveillance-report.md`
- `projects/dttb/network-topology.md`
- `projects/dttb/server1c.md`
- `projects/dttb/npm-homelab.md`
- `projects/dttb/openclaw.md`
- ... +40 ещё
## Orphan — без бэклинков (90)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-04-17-peredelki-podkop-stability-fix.md`
- `decisions/2026-03-03-mailserver-setup-scenario.md`
- `decisions/2026-04-16-unifi-migration-peredelki.md`
- `decisions/2026-04-14-niikn-openwrt-awg-fix.md`
- `decisions/2026-03-04-matrix-niikn-setup.md`
- `decisions/2026-02-26-clawdbot-129-cliproxy-fix.md`
- `decisions/README.md`
- `decisions/2026-04-14-openclaw-claude-code-pipeline.md`
- `decisions/2026-04-17-code-server-upgrade.md`
- `notes/2026-02-26-session-summary.md`
- `notes/2026-02-26-knowledge-base-setup.md`
- `notes/README.md`
- `notes/2026-02-26-full-session-log.md`
- `notes/2026-02-26-claude-code-session-clawdbot-fix.md`
- `projects/clawdbot-bots.md`
- `projects/bitrix-sites.md`
- `projects/infrastructure-overview.md`
- `projects/homelab-proxmox.md`
- `projects/video-surveillance.md`
- `projects/all-projects-summary.md`
- `projects/unresolved-issues.md`
- `projects/nextcloud.md`
- `projects/krasnogorsk/README.md`
- `projects/dttb/agentdvr-home.md`
- `projects/dttb/mailcow-dttb.md`
- `projects/dttb/netbird-inventory.md`
- `projects/dttb/gitea.md`
- `projects/dttb/video-surveillance-report.md`
- `projects/dttb/network-topology.md`
- `projects/dttb/server1c.md`
- ... +60 ещё
## TODO без даты (48 шт в 12 файлах)
- `projects/niikn/changelog.md` — 12 шт
- `projects/niikn/NIIKN-ChangeLog.md` — 6 шт
- `projects/niikn/matrix.md` — 5 шт
- `projects/dttb/nextcloud-talk-bot/README.md` — 5 шт
- `daily/2026-04-19.md` — 5 шт
- `claude-memory/mas-niikn.md` — 5 шт
- `decisions/2026-04-16-unifi-migration-peredelki.md` — 4 шт
- `projects/niikn/README.md` — 2 шт
- `decisions/2026-04-14-openclaw-claude-code-pipeline.md` — 1 шт
- `projects/dttb/mailcow-dttb.md` — 1 шт
- `daily/2026-04-17.md` — 1 шт
- `templates/daily-note.md` — 1 шт
## Дубликаты имён (3)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/krasnogorsk/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/niikn/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

21
audit/health-latest.json Normal file
View File

@@ -0,0 +1,21 @@
{
"date": "2026-04-18",
"score": 493,
"counts": {
"broken_wikilinks": 0,
"broken_paths": 4,
"missing_frontmatter": 70,
"orphan_files": 90,
"undated_todos": 48,
"duplicate_basenames": 3
},
"weights": {
"broken_wikilinks": 10,
"broken_paths": 10,
"missing_frontmatter": 3,
"orphan_files": 2,
"undated_todos": 1,
"duplicate_basenames": 5
},
"files_scanned": 158
}