Wiki Curate — Read-only Audit
SkillDocs & knowledgeAudit the Research Vault concept wiki read-only for fragmentation, missing tags, write-only concepts, and draft or anatomy conformance, producing a Markdown report. Use when assessing wiki quality before maintenance. Not for promoting or merging concepts; use $wiki-grow or $wiki-merge.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Wiki Curate — Read-only Audit skill
What this skill tells your AI
The instructions your AI receives, as published by flonat/flonat-research in skills/wiki-curate/SKILL.md and read by ahel’s review.
Reads the vault wiki and produces a triage report. Never writes. Detects four classes of issue: overlap clusters (fragmentation), tag gaps (untagged concepts + orphan/near-duplicate tags), write-only concepts (zero backrefs from the corpus), and anatomy/lifecycle issues (drafts awaiting curation + curated pages that regressed the concept anatomy). Companion to
wiki-grow(which adds new concepts) andwiki-merge(which collapses overlap clusters).
When to Use
- After a
wiki-growrun, to check what the new stubs introduced. - Before deciding which concepts to refine or merge.
- Monthly, to keep the wiki's signal-to-noise ratio high.
When NOT to Use
- For project knowledge folders — those are audited via
knowledge-lint. - For atlas topics — that's
atlas-audit. - For mechanical edits — this skill never writes. Use
wiki-mergeto collapse overlap clusters and the planned tag-inference pass inwiki-growto backfill missing tags.
Architecture
scripts/wiki-curate-scan.py
├─ reads: ~/vault/concepts/*.md
│ ~/vault/atlas/<theme>/*.md (for backref counts)
│ ~/vault/books/<slug>/*.md (for backref counts)
│ <research-root>/<theme>/<proj>/CLAUDE.md (for backref counts)
└─ writes: /tmp/wiki-curate-report.md
/tmp/wiki-curate.json
The skill is invoked by running the Python orchestrator. No Claude dispatch — the audit is pure deterministic analysis.
What it checks
A. Overlap clusters (the headline feature)
Concept slugs are tokenised (kebab parts, stopwords removed, trailing
s stripped for crude singularisation). Any token shared by ≥2
concept slugs forms a cluster.
Within each cluster, the canonical winner is suggested by:
- Human-curated (
auto_generated: false) beats auto-generated. - Longer body beats shorter.
- Alphabetically earliest slug breaks ties.
Pair-level title-Jaccard ≥ 0.40 is flagged as 🔥 high confidence (distinct from "shared keyword" — the slugs are substantively similar).
Example output from a recent run:
### `goodhart` (size 3)
- `goodhart-resistance` — auto, 3533 chars
- `goodhart-taxonomy` — auto, 3902 chars
- `goodharts-law` — curated, 3111 chars ← canonical (suggested)
Suggested action: wiki-merge goodharts-law goodhart-taxonomy goodhart-resistance
B. Tag coverage
- Untagged concepts — frontmatter has no
tags:field. Filters on/concepts?tag=Xwon't surface them. - Orphan tags — used by exactly one concept. Either expand or retire.
- Near-duplicate tags — pairs differing only by case / hyphen /
trailing
s(e.g.mlvsmachine-learning,modelvsmodels).
C. Backref health
For each concept, count:
- Incoming wikilinks —
[[slug]]references from atlas topic bodies, book chapters, and project CLAUDE.md files. - Corpus mentions — case-insensitive whole-word slug occurrences in the same corpus.
Concepts with both counts zero are flagged as write-only — they don't surface anywhere. Two remedies:
- Insert
[[slug]]references in the atlas topics that should reference the concept (mechanism A from this session — body wikilinks auto-surface as chips on the topic page). - Add the slug to
~/vault/concepts/.denylistand delete the file — accept the concept isn't carrying weight.
D. Anatomy & lifecycle
The status: frontmatter field is the lifecycle axis: draft
(no guarantees, may be project-voiced) → curated (conforms to the
concept anatomy). Status is read from frontmatter with the same
fallback as atlas-workspace (auto_generated: true → draft, else
curated) so pages predating the field classify correctly. The
anatomy is defined in packages/atlas-vault/schema.md → "Concept
File Schema":
## In one line— required definition block (machine-anchored).## In my portfolio— the boundary below which project-voiced prose ("the project", "this paper", "we propose", …) is allowed.
Two lists are reported:
- Drafts awaiting curation — every
status: draftconcept, with a ✓/— table showing which anatomy pieces already exist (In one line,In my portfolio) and how many project-voice phrases sit above the boundary. Higher counts mean more restructuring to do. - Curated pages violating the anatomy — pages marked
curatedthat regressed: missing theIn one linedefinition, or project-voice prose above theIn my portfolioboundary (including a portfolio section under a non-canonical heading). These are the priority fix — a curated page is supposed to conform.
The curation action itself is a Claude-driven restructuring edit (this skill is read-only); see the triage workflow below.
Output
/tmp/wiki-curate-report.md with three sections (A/B/C) and a
suggested triage order. Stdout from the script:
Concepts: 14 (6 curated, 8 draft)
Overlap clusters: 0
Drafts awaiting curation: 8
Curated pages violating anatomy: 1
Untagged: 8/14
Write-only (no backrefs): 0
Report: /tmp/wiki-curate-report.md
JSON: /tmp/wiki-curate.json
The JSON sidecar feeds the planned wiki-merge skill so it can
read the suggested winner/fold-in lists without re-running the
detection.
Modes
| Mode | Invocation | Behaviour |
|---|---|---|
| Default | wiki-curate (or uv run python scripts/wiki-curate-scan.py) | Run all three audits, write report + JSON, print summary to stdout. Read-only. |
There's no --autonomous flag here — the skill is already pure-read
and idempotent. Future cron integration: chained after the Saturday
06:45 wiki-grow run, the audit can land in
log/audits/wiki-curate-YYYY-MM-DD.md for a weekly health snapshot.
Triage workflow
After running:
- Section D regressions first — any curated page flagged as
violating the anatomy is a bug: it claims
curatedbut doesn't conform. Fix in place (add## In one line, or rename/add the## In my portfoliosection and move project-voiced prose under it). - Section A — every overlap cluster fragments knowledge. Pick a
canonical winner (often the suggestion) and run
wiki-merge <winner> <fold-in-slugs>to collapse. Re-runwiki-curateto confirm the cluster is gone. - Section D drafts — curate each
draftto the anatomy:- Extract a 2-4 sentence project-agnostic definition into
## In one line. - Keep the cited, stable knowledge in encyclopedia voice.
- Move all project-voiced prose under
## In my portfolio. - Verify
references:keys are canonical Paperpile keys (rekey hand-minted lookalikes). - Flip
status: draft→status: curatedin frontmatter and setlast_updated.
- Extract a 2-4 sentence project-agnostic definition into
- Section B — untagged concepts won't surface in the tag filter.
Until the planned
wiki-growtag-inference pass lands, add tags manually for the auto-promoted stubs you care about. - Section C — write-only concepts. Decide per-concept: link from a topic, denylist, or accept.
Cross-References
| Skill | Relationship |
|---|---|
wiki-grow | Writes the auto-promoted concepts this skill audits. |
wiki-merge | Acts on the overlap clusters this skill finds (planned — not yet built). |
compile-knowledge | Upstream of wiki-grow; produces the project knowledge articles that get promoted. |
atlas-audit | Audits atlas topics; complementary lens. |
knowledge-lint | Audits per-project knowledge folders; complementary lens. |
Signals
- GitHub stars
- 133
- Forks
- 24
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
wiki-curate- Source
- github.com/flonat/flonat-research