# Lint

> Lint the knowledge WIKI (docs/lore.md, docs/devlog.md, docs/plan.md, docs/adr/, memory/) for contradictions, stale claims, orphan references, missing entries, and missing cross-references. This is the documentation/knowledge linter, NOT a code linter -- it never runs gofmt, eslint, ruff, or any source-code tool. Use when asked to audit, lint, sanity-check, or find drift in the project wiki or kno…

- **Type:** Skill
- **Install:** `agentstack add skill-dndungu-agent-skills-lint`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [dndungu](https://agentstack.voostack.com/s/dndungu)
- **Installs:** 0
- **Category:** [Developer Tools](https://agentstack.voostack.com/c/developer-tools)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [dndungu](https://github.com/dndungu)
- **Source:** https://github.com/dndungu/agent-skills/tree/main/lint

## Install

```sh
agentstack add skill-dndungu-agent-skills-lint
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

You are a meticulous archivist auditing the project knowledge wiki for drift.
You scan the documentation tiers and the memory directory, report contradictions
and rot, and propose fixes. You DO NOT touch source code. This skill lints prose
and references, never programs.

User prompt: $ARGUMENTS

What this skill is (and is not)

- /lint audits the KNOWLEDGE WIKI: docs/lore.md, docs/devlog.md, docs/plan.md,
  docs/adr/*.md, and the project's memory/ directory (MEMORY.md plus the
  per-fact files it indexes).
- /lint is NOT a code linter. It never invokes gofmt, eslint, ruff, prettier,
  golangci-lint, or any source-code tool, and it never opens .go/.ts/.py source
  files except to confirm that a path referenced by the wiki still exists.
- /lint defaults to REPORT-ONLY. It writes nothing to the wiki unless the user
  passes --apply. Even with --apply it only applies fixes it marked HIGH
  confidence; everything else stays advisory (see "Confidence and R7" below).
- Safe to run weekly. A clean run is the expected steady state; a noisy run is a
  signal the wiki has drifted, not that the linter is broken.

Arguments

- `--apply`         Apply HIGH-confidence fixes after printing the report.
                    Without this flag the skill changes nothing.
- `--scope `   Restrict the scan to one tier: lore, devlog, plan, adr,
                    memory, or all (default all).
- `--since `  Only flag staleness/contradictions involving entries dated
                    on or after this date. Useful for incremental weekly runs.

Phase 0 -- Locate the wiki and confirm read-only intent

1) Resolve the repo root with `git rev-parse --show-toplevel`. If not in a git
   repo, fall back to the current directory and warn.
2) Build the file set for the chosen scope:
   - lore   -> docs/lore.md
   - devlog -> docs/devlog.md
   - plan   -> docs/plan.md
   - adr    -> docs/adr/*.md (sorted)
   - memory -> the project memory directory. Look for ./memory/ first; if absent
     and a CLAUDE.md or session context names a memory path, use that. Read
     MEMORY.md (the index) plus every *.md file it points to.
3) For any scoped file that does not exist, note "absent (skipped)" and continue.
   Never create wiki files in /lint -- absence is not an error here.
4) Record whether --apply was passed. If not, state plainly in the report header
   that this is an advisory run and nothing will be written.

Phase 1 -- Inventory

Read each file in the set ONCE. Build an in-memory inventory:

- Entries: lore L-NNNN blocks, devlog dated sections, plan tasks (T*/UC*/E*),
  ADR numbers and titles, and memory file names with their description lines.
- Claims: short factual assertions worth cross-checking ("X uses JetStream",
  "the hook matches Edit|Write", "deploy uses rebase-and-merge").
- References: every file path, L-NNNN / ADR-NNN / T-NNN / UC-NNN / [[memory-slug]]
  pointer, and URL.
- Dates: the date stamp on each entry, for staleness ordering.

Do not summarize source code. Only catalog what the wiki itself asserts.

Phase 2 -- Detection (run all five, conservatively)

For each finding assign a confidence: HIGH (mechanical, verifiable -- e.g. a
referenced file is genuinely gone), MEDIUM (strong textual signal but judgment
involved), or LOW (a hint a human should look at). When unsure, downgrade.

(1) Contradictions -- two entries that cannot both be true.
    - Direct negation of the same claim ("must match Edit|Write" vs "must match
      Edit|Write|Bash"), conflicting numbers, or opposite directives.
    - Confidence: MEDIUM by default; HIGH only when the two statements quote the
      same identifier with opposite values. Quote both entry IDs and the exact
      conflicting lines. NEVER auto-resolve a contradiction -- report only.

(2) Stale claims -- a statement a newer entry supersedes.
    - A lore entry already marked "superseded by L-NNNN" whose claim is still
      stated as current elsewhere; a devlog "root cause" later overturned; a plan
      task marked done that a later entry says regressed.
    - Respect --since. Confidence MEDIUM; HIGH only when an explicit "superseded
      by" / "obsoletes" / "replaced by" marker exists.

(3) Orphan references -- a pointer whose target no longer exists.
    - File paths: test existence relative to repo root (`test -e`). A missing
      file is HIGH confidence.
    - ID pointers (L-NNNN, ADR-NNN, T-NNN, UC-NNN, [[memory-slug]]): HIGH if the
      target ID/slug is absent from the inventory.
    - URLs: do NOT fetch the network in a default run; flag only malformed URLs
      (LOW). Live-checking URLs requires explicit user request.

(4) Missing entries -- a concept the wiki leans on but never defines.
    - A term referenced 3+ times across tiers with no defining lore/ADR/devlog
      entry, or a plan task that verifies a UC-NNN that has no catalog line.
    - Confidence LOW to MEDIUM -- this is the most false-positive-prone check
      (R7). Phrase every finding as a question ("Is X documented anywhere?"),
      never an assertion that an entry is required.

(5) Missing cross-references -- two entries about the same thing that should
    link but do not.
    - A devlog investigation whose confirmed root cause matches a lore Rule but
      cites no L-NNNN; an ADR decision a plan task implements without naming the
      ADR; sibling memory facts that should `[[link]]` each other.
    - Confidence LOW to MEDIUM. Propose the link; do not assert it is mandatory.

Conservatism is the whole game here. ADR 003 ships /lint report-only precisely
because a linter that cries wolf gets ignored, and an ignored linter lets real
drift through (risk R7). Prefer a quiet miss over a noisy false positive.

Phase 3 -- Report

Print this exact structure. ASCII only. Group findings by detector, ordered
HIGH -> MEDIUM -> LOW within each group.

```
WIKI LINT REPORT
Repo:        /
Mode:        ADVISORY (report-only)  |  APPLY (HIGH-confidence fixes written)
Scope:       
Since:       
Files:       
Findings:     high,  medium,  low

== Contradictions () ==
[C1]  docs/lore.md L-0002 vs docs/devlog.md 2026-02-08
     Claim A: ""
     Claim B: ""
     Proposed fix: 

== Stale claims () ==
[S1]  
     
     Proposed fix: 

== Orphan references () ==
[O1]   -> 
     Proposed fix: 

== Missing entries () ==
[M1]  concept "" referenced in  but undefined
     Question: is this documented anywhere it should be?
     Proposed fix: 

== Missing cross-references () ==
[X1]   should reference 
     Proposed fix: 

== Summary ==
Total:  findings ( high /  medium /  low).
HIGH-confidence fixes that --apply WOULD write: .
Run again with --apply to write the HIGH-confidence fixes above.
```

If a detector finds nothing, print its header with `(0)` and the line "clean".
If the whole run is clean, print "Wiki is clean -- no drift detected."

Phase 4 -- Apply (only with --apply)

Only runs when --apply is present. Otherwise stop after Phase 3.

1) Apply ONLY findings marked HIGH confidence. MEDIUM and LOW stay in the report
   for a human; never write them.
2) Permitted automatic edits (each is mechanical and reversible):
   - Orphan ID pointer -> rewrite to the correct existing ID when exactly one
     unambiguous match exists; otherwise leave it and downgrade to a report note.
   - Orphan file path -> only if the file clearly moved and the new path is
     unambiguous; never delete an entry to "fix" a dangling path.
   - Missing cross-reference that is HIGH (the target is unambiguous) -> insert
     the `[[link]]` / `L-NNNN` / `ADR-NNN` citation.
3) NEVER, even with --apply:
   - Resolve a contradiction by editing either side (a human decides which is
     right).
   - Delete a lore entry (lore is append-only; supersede, do not remove).
   - Create new entries to fill "missing entry" findings.
   - Touch any source-code file.
4) Edit the smallest span. Re-read nothing to "confirm" -- Edit/Write surface
   failures as tool errors.
5) Commit each tier's fixes as its own commit:
   `docs(lint): repair  cross-references and orphan pointers`.
   Stage only the wiki files you changed. Do NOT push -- lint fixes flow through
   normal PR channels.
6) Re-print the Summary block showing which findings were written and which
   remain advisory.

## Does Not Do

- Does NOT lint source code. No gofmt/eslint/ruff/prettier/golangci-lint, no
  style or type checking. For code-quality cleanup use /simplify or /code-review;
  for security use /deep-review or /red-team.
- Does NOT fetch URLs or hit the network in a default run (only malformed-URL
  detection). Live link-checking is out of scope unless explicitly requested.
- Does NOT create or seed wiki files. Use /lore, /journal, or /plan to
  author entries; /lint only audits what exists.
- Does NOT resolve contradictions automatically -- it surfaces both sides for a
  human. Even --apply leaves contradictions untouched.
- Does NOT prune old devlog entries (that is /tidy --trim) or harvest stranded
  work (/tidy --harvest).
- Does NOT auto-run from other skills. It is invoked deliberately, and is meant
  to be run on a weekly cadence per ADR 003.

Rules

- ASCII only. No emojis, no curly quotes. Use `--` for em-dash equivalents.
- Report-only by default. The wiki is modified ONLY when --apply is passed, and
  then only for HIGH-confidence findings. This is the R7 hedge: a /lint that
  papers over real drift with confident false positives is worse than none.
- Be conservative. When confidence is in doubt, downgrade and phrase the finding
  as a question. A quiet miss beats a noisy false alarm.
- Single pass per file. Read each wiki file once; build the inventory; detect
  against the inventory. Do not re-read files to "double-check."
- Respect the tier model (ADR 003): design.md is Tier 1 (architecture), adr/ is
  Tier 2 (decisions), devlog.md is Tier 3 (operations), lore.md is the orthogonal
  rules log, memory/ is cross-session facts. A "missing entry" suggestion must
  name the correct tier, never dump everything into one file.
- Never delete to satisfy a check. Orphans and contradictions are repaired by
  fixing pointers or superseding entries, not by removing content.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [dndungu](https://github.com/dndungu)
- **Source:** [dndungu/agent-skills](https://github.com/dndungu/agent-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-dndungu-agent-skills-lint
- Seller: https://agentstack.voostack.com/s/dndungu
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
