wiki-lint · v1.0 · 2026-08-22 · sha256 1708ba725292ba95

wiki-lint v1.0A

Immutable. This exact content is served forever at /api/v1/blob/1708ba725292ba95.

---
name: wiki-lint
description: "Use when checking wiki health, detecting broken links, validating frontmatter, finding orphan pages, or auditing ref/ discoverability. Triggers: 'lint wiki', 'check wiki', 'wiki health', 'broken links', 'index drift', 'frontmatter check'. Soft report only — never blocks deploy."
version: "1.0"
---

# Wiki Lint Skill

## Goal
Detect structural decay in `.wiki/` — broken links, index drift, frontmatter violations, orphan pages, missing `See Also`, ref discoverability gaps. Soft report: appends findings to `.devops/logs/knowledge-changelog.md`. Never fails a build, never deletes content.

## Workflow

### 1. Scope
Lint every `.md` file under `.wiki/`, including:
- `.wiki/core/`
- `.wiki/components/`, `.wiki/features/`, `.wiki/database/`, `.wiki/logic/`
- `.wiki/hooks/`, `.wiki/integrations/`
- `.wiki/ref/` (special handling)
- `.wiki/templates/`, `.wiki/examples/` (linter target only, not orphans)

### 2. Deterministic Operations

**2.1 Index consistency** — every file in `.wiki/**/*.md` (excluding `index.md`, `ref-index.md`, `*-template.md`, `*-example.md`, and anything in `templates/` or `examples/`) must appear in `.wiki/core/00-system-index.md`. For every entry in `00-system-index.md`, verify the file exists. Missing files marked `[MISSING]`.

**2.2 Internal links** — every `[label](relative-path)` in any wiki file must resolve. Auto-fix on `--fix` if exactly one match elsewhere in the wiki; otherwise report with file:line. Self-referential links (`[foo](foo.md)` resolving to the same file) are ignored, not bugs.

**2.3 Frontmatter** — every wiki doc must have YAML frontmatter with `type`, `name`, `status`. `status` must be one of `stable|in-progress|deprecated`. `dependencies` paths must exist.

**2.4 Orphan pages** — wiki files with zero inbound links from any other wiki file. Exclude `00-system-index.md`, `knowledge-changelog.md`, `ref/`, `templates/`, `examples/`. Report only — never auto-delete.

**2.5 `See Also` health** — warn on wiki files >100 lines without `## See Also`. Validate any `See Also` link resolves.

**2.6 ref/ coverage** — every file in `.wiki/ref/` must appear in `.wiki/ref/ref-index.md`.

### 3. Error Handling

Every operation must handle these gracefully:

- **Empty wiki** — no `.wiki/**/*.md` files exist → report 0 issues, exit cleanly.
- **Missing index** — `00-system-index.md` doesn't exist → create with empty TOC, log to changelog as informational.
- **Locked file** — file exists but is read-only → skip, log to changelog with file path.
- **Permission denied** — read fails → skip, log warning, continue with other files.
- **Self-referential link** — `[foo](foo.md)` resolves to the same file → ignore (not a bug).
- **Always exit cleanly** — never throw, never leave the changelog in a partial state. Use single `append` per lint run.

### 4. Output

Append exactly one entry to `.devops/logs/knowledge-changelog.md` per invocation:

```markdown
## [YYYY-MM-DD HH:MM] — lint | <N> issues found
* **Skill:** wiki-lint
* **Findings:** N1 (broken links, index drift) | N2 (orphan pages, missing See Also) | N3 (passes)
* **Files affected:** [list with file:line]
* **Notes:** <optional summary>
```

### 5. Optional Flags

- `--fix` — auto-fix deterministic issues (index entries, broken links with exactly one match). Still soft-report; never delete content.
- `--quiet` — no changelog entry on clean run (0 issues). Default is to log a baseline entry on every invocation.
- `--scope <path>` — limit lint to a subdirectory (e.g. `--scope .wiki/ref/`).

## Usage Guidelines
- **Proactive**: Run at end of any work that touched wiki docs (per `agent-wrap-up` protocol).
- **First-thing**: Run `@wiki-lint` on a fresh wiki to establish a baseline.
- **Drift detection**: Run weekly to catch gradual decay (e.g. renamed files leaving dead links).