/lint — run the SCHEMA LINT operation

SkillDocs & knowledge

Run the LINT operation defined in SCHEMA.md across the wiki. Checks every invariant the schema declares, orphan pages, broken links, missing profile/HLO sections, missing hypothesis-firing audits, stuck `status: in_progress` stubs, missing stub labels (Hypothesis/Mechanism/Predicted signal/Falsification criterion), log routing violations (loop-iteration in global log; ingest in per-lane log), stale codebase commit pins, model-page variant-matrix drift, knobs-translation-matrix coverage gaps, model-optimization-index catalog rot, per-model refuted-patterns referencing non-existent v-IDs, experiment commits on the code-repo side missing `exp:` footer, and more. Fixes mechanical issues automatically; surfaces judgment calls as a punch list for the user. Invoke periodically (every few days during active iteration), from `/stop-experiment` at session end (already wired), or whenever the wiki shape changed substantially (post-rename, post-bulk-import, post-SCHEMA-update).

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /lint — run the SCHEMA LINT operation skill

What this skill tells your AI

The instructions your AI receives, as published by vlasenkoalexey/tpu_performance_autoresearch_wiki in .claude/skills/lint/SKILL.md and read by ahel’s review.

Wraps SCHEMA's LINT operation as a standalone callable skill. Mostly mechanical; surfaces judgment calls for human review. Should be invoked periodically — drift accumulates silently otherwise.

When to invoke

  • Periodic hygiene — every few days during active iteration, or weekly during quieter periods.
  • At session end — /stop-experiment Step 5 already runs LINT (this skill is the canonical implementation it points at).
  • Post-substantial wiki change — after a rename, a bulk import, a SCHEMA update, or a topic-taxonomy revision. Things drift when shapes shift.
  • Pre-merge / CI — could be wired into git pre-push or a CI workflow to catch issues before they land.
  • NOT during the autoresearch loop's normal cadence — LINT is too noisy + expensive to run per-iteration.

Cardinal rules

  • Auto-fix mechanical issues (broken markdown links to renamed files, stale updated: dates inconsistent with last edit, etc.). Surface what was auto-fixed in the report.
  • Flag judgment calls — anything that requires a human decision (contradiction adjudication, unresolved [!warning] blocks, semantic alignment between Current best and latest supported experiment) — surfaces these as a punch list with file:line references.
  • Don't auto-commit. User reviews the auto-fix diffs + decides what to commit.
  • Don't fail on first issue. Run ALL checks; produce a comprehensive report. A single broken link shouldn't hide 10 other issues.

Step 1 — Run every check from SCHEMA's LINT section

Per SCHEMA.md's "Operations → LINT" section. The canonical list (extend if SCHEMA gains new checks):

Cross-cutting wiki invariants

  1. Unresolved [!warning] contradictions — grep wiki/**.md for > [!warning] blocks; report each with file:line + the contradicting claim.
  2. Orphan pages — pages with zero inbound markdown links. Special case: _-prefixed dirs/files in wiki/ are auto-generated; SKIP orphan check for them (see also: AST snapshots under wiki/codebases/<slug>/_ast/).
  3. Broken markdown links — relative paths whose target .md doesn't exist.
  4. Concept/entity names mentioned in prose but not linked — heuristic: substrings from known concept page titles that appear unlinked in prose. Surface as advisory; many false positives.

Experiment-page invariants

  1. Experiments without profile artifacts in raw/profiles/ — frontmatter says verdict was assigned, but no actual profile/trace/HLO artifacts exist. A transcripts/ subdir alone does NOT count — transcript snapshots land in the same experiment dir and must not mask a failed capture. Exception: backfilled: true.
  2. Experiments missing ## Profile or ## HLO Dump section — profile-analyzer wasn't dispatched or its output wasn't pasted. Exception: backfilled: true.
  3. Experiments missing the Phase 3 hypothesis-firing audit in ## HLO Dump (the silent-noop verification result line). Exception: backfilled: true. 7a. Kernel experiments missing independent verification — any wiki/kernel_experiments/* experiment page with verdict: supported must carry verified_by: kernel-verifier in frontmatter AND the firing-audit line in ## HLO Dump (per the Roles section of wiki/experiments/program.md: the author of a candidate never produces its verdict evidence). Missing verified_by: ⇒ the audit is presumed author-produced and the verdict should be downgraded to inconclusive until kernel-verifier re-runs. Forward-looking: hard check for pages created ≥ 2026-07-11; the 2026-07-09 comparison pages are grandfathered — advisory only. 7b. Kernel experiments missing the candidate ledger — any wiki/kernel_experiments/* page with status: filed must carry a non-empty ## Candidate ledger section (kernel_experiments/program.md K7 fixed columns; one row per attempt including failures and abandoned kernels). A filed kernel page with no ledger lost its iteration trail — the 2026-07-10 sweep gap. Same forward-looking cutoff + backfilled: true exception as 7a. 7c. Kernel pre-registration commit-order violation — for wiki/kernel_experiments/* pages with a verdict, the commit that INTRODUCED the page (with status: in_progress; find via git log --follow --diff-filter=A --format=%H -- <page>) must predate the commit carrying the verdict/results. Stub and verdict landing in the same single commit ⇒ flag: pre-registration cannot be demonstrated; the intervention class / falsification bar may have been retrofitted. KERNEL-SCOPED ONLY — model lanes legitimately batch-commit stub+results (e.g. recurrentgemma v010) and are never checked. Forward-looking (≥ 2026-07-11). 7d′ (canonical list note): SCHEMA.md's LINT section is CANONICAL for kernel-lane checks — it includes newer checks this enumeration may lag on: declared-plan coverage (every ## Candidate plan item executed or abandoned-with-reason; ledger rows cite candN ids + a receipt path; reason-less extensions cap at inconclusive), prematurely-stopped families (named next-lever + no follow-up + no at-ceiling double-retrospective), headroom-propagation gaps (experiment names a lead the family page never received), frontier full-verification at family close (receipt + verified_by), and index catalog-count drift. Run those from SCHEMA even if not listed here. 7d. Kernel experiments missing the required-reading attestation — any wiki/kernel_experiments/* page with status: filed: the ## Candidate ledger must BEGIN with a loaded: [...] attestation line (kernel-author contract: proof the author read the brief's required_reading content before authoring — the 2026-07-11 Antigravity benchmark's dominant failure was authors who never saw the knowledge). Missing attestation ⇒ verdict capped at inconclusive (same enforcement style as 7a). Forward-looking: hard check for pages created ≥ 2026-07-12; earlier pages advisory-only. Same backfilled: true exception as 7a/7b.
  4. Stub-fill drift — experiments with verdict: assigned (status: filed) whose ## Hypothesis under test section is missing any of the four required labeled paragraphs (**Hypothesis**, **Mechanism**, **Predicted signal**, **Falsification criterion**). Exception: backfilled: true.
  5. Stuck stubs — status: in_progress for > 24 hours. Either re-dispatch profile-analyzer to complete or mark verdict: inconclusive. /stop-experiment Step 4.5 resolves these proactively.
  6. Experiments missing variant: field or whose variant: doesn't appear in the parent model page's Variant matrix.
  7. Experiment commit messages on the model-code-repo side missing the exp: <wiki-path> footer (run git log --grep=exp: on the relevant branch; flag commits referenced by experiment pages but missing the footer).
  8. Experiment .md or other wiki artifact accidentally duplicated into the model code repo — grep -r "type: experiment" <code-repo>/ should return nothing.

Model-page invariants

  1. Model pages where any variant row's Current best doesn't match the latest supported experiment for that variant.
  2. Model pages where the Knobs translation matrix is missing entries for techniques that have multiple supported experiments across different variants.
  3. Hypotheses with variants: listing rows that aren't in the parent model page's matrix.
  4. Hypotheses open with no activity for > 14 days on an actively-optimized model.

Catalog-rot checks

  1. Per-model refuted-patterns.md referencing experiment v-IDs that don't exist in wiki/experiments/<model>_autoresearch_optimization/<lane>/.
  2. model-optimization-index.md or model-optimization-blueprint.md referencing concept/observation/source pages that don't exist.

Codebase invariants

  1. Stale codebase pages whose commit: is far behind the current checkout (git -C raw/code/<slug> rev-parse HEAD vs frontmatter commit:).

Log-routing invariants (per SCHEMA's two-tier convention)

  1. loop-iteration entries in global wiki/log.md (post-migration cutoff). LINT fails if found.
  2. ingest-* / lint / loop-pool entries in any per-lane log. LINT fails if found.
  3. Per-lane log file missing for an active lane (any <lane>/ dir with experiment pages but no log.md). Advisory, not hard fail.

Step 2 — Auto-fix mechanical issues

The following are safe to auto-fix:

  • Broken markdown links to recently-renamed files — if git log --follow traces the target to a known rename, auto-update the link.
  • Stale updated: fields — if frontmatter updated: 2026-04-15 but git log -1 --format=%cd for the file is 2026-05-22, auto-bump.
  • Missing trailing ## See also or ## Sources section — if the page-type template requires them and they're absent, add empty placeholders (with a "TODO" comment for the user to fill in).
  • Inconsistent counts in wiki/index.md — if the index says ## Sources (79) but ls wiki/sources/ | wc -l returns 81, auto-correct.

The following require human judgment — surface them, don't auto-fix:

  • Contradiction adjudication
  • Orphan page disposition (delete? add inbound link? consolidate?)
  • Knobs matrix entries (cross-variant claim requires per-variant evidence)
  • Stuck stub resolution (re-dispatch vs mark inconclusive — depends on cluster state)
  • Concept-name-mentioned-but-not-linked (heuristic, many false positives)

Step 3 — Generate report

# LINT report — <YYYY-MM-DD HH:MM UTC>

**Scope**: <wiki/ paths checked>
**Pages scanned**: <N>
**Checks run**: 22 of 22

## Auto-fixed (N issues)

<list each with file:line + what was changed>

## Human review required (N issues)

### Cross-cutting (N)
- [page:line] <issue> — <suggestion>
- ...

### Experiment pages (N)
- ...

### Model pages (N)
- ...

### Catalog rot (N)
- ...

### Codebase (N)
- ...

### Log routing (N)
- ...

## Summary

- Clean: <N> checks passed with no issues
- Auto-fixed: <N> mechanical issues resolved (review the diff)
- Punch list: <N> items need human review

Next steps:
- Review auto-fixes via `git diff` (changes staged, not committed)
- Walk the human-review punch list above; address per-issue
- Re-run `/lint` to confirm

Step 4 — Append to global wiki/log.md

Per SCHEMA's log routing rules, lint op is GLOBAL only.

## [YYYY-MM-DD] lint | LINT run — <N> findings

**Op**: lint
**Pages created**: (none)
**Pages updated**: <list of auto-fixed pages>, wiki/log.md
**Key result**: Scanned <N> pages across 22 checks. Auto-fixed <N>; punch list <N>.
**Notes**: <high-level summary of dominant issues; pointers to the report>

Step 5 — Return to user

The report from Step 3. If running interactively, also offer to:

  • Open the first punch-list item for resolution
  • Drill into a specific check (e.g., "show all stuck stubs")
  • Re-run after manual fixes

Failure modes to handle

  • No wiki/ directory — refuse with hint (probably running from wrong CWD).
  • SCHEMA.md missing or modified to remove the LINT operation — surface as a meta-issue; still run all checks the skill knows about.
  • One check's data is unavailable (e.g., raw/code/<slug>/ not present for the codebase commit-staleness check) — skip THAT check, run the rest, note in report.
  • Massive number of findings (>100) — group + summarize rather than list each. Suggest "run lint per-subdir to iterate" if the wiki is in a degraded state.

Cost expectations

  • Per check: most are sub-second to a few seconds (grep + ls patterns).
  • Total: ~30 seconds to 2 minutes for a typical-sized wiki (200+ experiments + 100+ concepts + 50+ sources).
  • Tokens: ~20-50K for the report depending on findings count.

What this skill does NOT do

  • Does not auto-commit auto-fixes. User reviews the diff.
  • Does not adjudicate contradictions. Surfaces them.
  • Does not delete pages (even orphans). Always flags for human decision.
  • Does not modify raw/.
  • Does not modify SCHEMA.md. If SCHEMA needs a new LINT check, that's a separate manual edit.
  • Does not enforce style consistency (markdown formatting beyond what SCHEMA explicitly requires). Use a separate markdown linter for style.
  • Does not catch semantic content issues (factual errors in claims, misinterpretation of profile data). LINT is structural / invariant-based.

See also

  • SCHEMA.md — the LINT operation contract this skill implements (canonical check list)
  • .claude/skills/stop-experiment/SKILL.md Step 5 — wired to invoke this skill
  • .claude/skills/ingest-source/SKILL.md — the index/log updates LINT verifies

Signals

GitHub stars
56
Forks
5
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
lint-vlasenkoalexey
Source
github.com/vlasenkoalexey/tpu_performance_autoresearch_wiki