From adversarial-research
Use when running `/kb-lint <run-dir>` or whenever you want to assess the semantic health of an existing knowledge base. Defines what counts as a finding beyond pure schema, including engagement drift, traceback completeness, central-question coverage, contradiction-status drift, and entity-page opportunities. Pairs with the mechanical lint output of `scripts/kb-tool.py lint`.
How this skill is triggered — by the user, by Claude, or both
Slash command
/adversarial-research:kb-lintingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Periodic semantic health-check on a knowledge base. The mechanical part — schema integrity, edge resolution, orphan args, dangling-evidence args, unreferenced sources, status-stale candidates — is handled by `scripts/kb-tool.py lint`. **This skill covers the part the script can't do**: judgment calls about whether the graph still reflects the topic accurately, whether traceback has gone deep en...
Periodic semantic health-check on a knowledge base. The mechanical part — schema integrity, edge resolution, orphan args, dangling-evidence args, unreferenced sources, status-stale candidates — is handled by scripts/kb-tool.py lint. This skill covers the part the script can't do: judgment calls about whether the graph still reflects the topic accurately, whether traceback has gone deep enough, whether the public discourse on the topic has shifted in ways the KB hasn't yet absorbed.
Run regularly (once per significant new ingest, between phases of construction, before kicking off a debate). Karpathy's three core operations are ingest / query / lint; this is the lint operation, model-driven.
kb/.<run-dir>/kb/.lint-report.json (run python3 <plugin>/scripts/kb-tool.py lint <run-dir> first if it doesn't exist).If kb/ doesn't exist or the run-dir is empty, stop and tell the caller.
For each check below: read the relevant slice of the KB, identify findings, decide acknowledge / fix immediately / queue for next research pass. Apply fixes via Write/Edit; the plugin's hooks re-index automatically.
kb/quality-summary.md declares the topic's central questions and which arg-IDs addresses each. Over time the graph shifts:
addresses edges in the current graph? That's a coverage gap. Either find arguments that should engage them and add addresses edges, or queue gap-filling research.addresses edge being recorded? Add the edge.For each position represented in the KB, count how many of the central questions its arguments engage via addresses edges vs. how many it only relates to via tangential-to / scope-mismatch-with / layer-shift-from. Persistent imbalance is a finding worth noting in kb/log.md or kb/quality-summary.md — and it will already shape the debate skill's verdict downstream, so flagging it early is useful.
For each argument with basis_type: empirical or mixed:
Traceback notes section of the arg file. If it cites a meta-analysis or review, has the meta-analysis's primary studies themselves been examined?)robust or strong — is the rating actually justified by what's in the corpus, or has it inherited a rating from when the corpus was thinner?For each contradiction in kb/contradictions.md:
open / resolved-by-arg-NNN / unresolvable-given-current-corpus) still accurate? Sometimes a contradiction gets functionally resolved by later sourcing without anyone updating the status.Involved arguments and Involved sources lists still complete? New arguments may have been added that bear on the contradiction.kb/entities/ holds profiles for people, organizations, key studies, and named concepts that recur across the corpus. Use entity pages when consolidating scattered information helps:
type: conceptFor each candidate from the criteria above that doesn't have an entity page, decide: create one now, or note as a queue item.
For each peer-reviewed source: has the Author network field been populated? In topics where author concentration is itself a finding (small clusters dominating the literature), missing networks are a real blind spot. Cross-reference with entity pages — if an entity page exists for the author, the network analysis lives there; if not and 3+ sources by the same author exist, create the entity page.
For each source: re-read its Quality notes field. After more sourcing, has any source had its methodology effectively criticized by a newer source in the corpus? Is its Criticism field populated with cross-references? Has anything been retracted/corrected since access date that should move it to kb/sources/retracted/ or kb/sources/corrected/?
The mechanical lint surfaces status-stale-candidate findings for contested and weak arguments. For each:
knowledge-base-construction skill's strength-rating discipline.Walk the script's mechanical findings list and apply judgment:
derived-from-source edge wasn't added? Add the edge. Or did the source never get written? Then the argument's basis_type is wrong (set to reasoning or mixed).addresses edge to another argument. Does it engage a central question that simply lacks the edge (add the addresses edge), or is it legitimately peripheral (acknowledge it, no change)?After working through the checks, append one synthesis entry to <run-dir>/kb/log.md:
## [YYYY-MM-DD HH:MM UTC] lint | <one-line summary>
- mechanical findings: <count> total — <count> acknowledged, <count> fixed, <count> queued
- semantic findings: <count> total — <count> acknowledged, <count> fixed, <count> queued
- key items addressed: <bullet list>
- queued for next research pass:
- <bullet list with arg-ID / source-path references>
This single entry is the lint pass's narrative artifact. The mechanical report stays at kb/.lint-report.json (machine-managed by the script — do not write to it directly).
/debate <run-dir>kb/.lint-report.json (script-owned)kb-tool.py lint)npx claudepluginhub skothr/controversial-topic-research --plugin adversarial-researchGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.