/lint — run the SCHEMA LINT operation
SkillDocs & knowledgeRun 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.
No other account needed.
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-experimentStep 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
- Unresolved
[!warning]contradictions — grepwiki/**.mdfor> [!warning]blocks; report each with file:line + the contradicting claim. - Orphan pages — pages with zero inbound markdown links. Special case:
_-prefixed dirs/files inwiki/are auto-generated; SKIP orphan check for them (see also: AST snapshots underwiki/codebases/<slug>/_ast/). - Broken markdown links — relative paths whose target
.mddoesn't exist. - 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
- Experiments without profile artifacts in
raw/profiles/— frontmatter says verdict was assigned, but no actual profile/trace/HLO artifacts exist. Atranscripts/subdir alone does NOT count — transcript snapshots land in the same experiment dir and must not mask a failed capture. Exception:backfilled: true. - Experiments missing
## Profileor## HLO Dumpsection — profile-analyzer wasn't dispatched or its output wasn't pasted. Exception:backfilled: true. - 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 — anywiki/kernel_experiments/*experiment page withverdict: supportedmust carryverified_by: kernel-verifierin frontmatter AND the firing-audit line in## HLO Dump(per the Roles section ofwiki/experiments/program.md: the author of a candidate never produces its verdict evidence). Missingverified_by:⇒ the audit is presumed author-produced and the verdict should be downgraded toinconclusiveuntilkernel-verifierre-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 — anywiki/kernel_experiments/*page withstatus: filedmust carry a non-empty## Candidate ledgersection (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: trueexception as 7a. 7c. Kernel pre-registration commit-order violation — forwiki/kernel_experiments/*pages with a verdict, the commit that INTRODUCED the page (withstatus: in_progress; find viagit 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 planitem executed or abandoned-with-reason; ledger rows citecandNids + a receipt path; reason-less extensions cap atinconclusive), 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 — anywiki/kernel_experiments/*page withstatus: filed: the## Candidate ledgermust BEGIN with aloaded: [...]attestation line (kernel-author contract: proof the author read the brief'srequired_readingcontent before authoring — the 2026-07-11 Antigravity benchmark's dominant failure was authors who never saw the knowledge). Missing attestation ⇒ verdict capped atinconclusive(same enforcement style as 7a). Forward-looking: hard check for pages created ≥ 2026-07-12; earlier pages advisory-only. Samebackfilled: trueexception as 7a/7b. - Stub-fill drift — experiments with
verdict:assigned (status: filed) whose## Hypothesis under testsection is missing any of the four required labeled paragraphs (**Hypothesis**,**Mechanism**,**Predicted signal**,**Falsification criterion**). Exception:backfilled: true. - Stuck stubs —
status: in_progressfor > 24 hours. Either re-dispatch profile-analyzer to complete or markverdict: inconclusive./stop-experimentStep 4.5 resolves these proactively. - Experiments missing
variant:field or whosevariant:doesn't appear in the parent model page's Variant matrix. - Experiment commit messages on the model-code-repo side missing the
exp: <wiki-path>footer (rungit log --grep=exp:on the relevant branch; flag commits referenced by experiment pages but missing the footer). - Experiment
.mdor other wiki artifact accidentally duplicated into the model code repo —grep -r "type: experiment" <code-repo>/should return nothing.
Model-page invariants
- Model pages where any variant row's
Current bestdoesn't match the latestsupportedexperiment for that variant. - Model pages where the Knobs translation matrix is missing entries for techniques that have multiple supported experiments across different variants.
- Hypotheses with
variants:listing rows that aren't in the parent model page's matrix. - Hypotheses
openwith no activity for > 14 days on an actively-optimized model.
Catalog-rot checks
- Per-model
refuted-patterns.mdreferencing experiment v-IDs that don't exist inwiki/experiments/<model>_autoresearch_optimization/<lane>/. model-optimization-index.mdormodel-optimization-blueprint.mdreferencing concept/observation/source pages that don't exist.
Codebase invariants
- Stale codebase pages whose
commit:is far behind the current checkout (git -C raw/code/<slug> rev-parse HEADvs frontmattercommit:).
Log-routing invariants (per SCHEMA's two-tier convention)
loop-iterationentries in globalwiki/log.md(post-migration cutoff). LINT fails if found.ingest-*/lint/loop-poolentries in any per-lane log. LINT fails if found.- Per-lane log file missing for an active lane (any
<lane>/dir with experiment pages but nolog.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 --followtraces the target to a known rename, auto-update the link. - Stale
updated:fields — if frontmatterupdated: 2026-04-15butgit log -1 --format=%cdfor the file is2026-05-22, auto-bump. - Missing trailing
## See alsoor## Sourcessection — 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)butls wiki/sources/ | wc -lreturns 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.mdStep 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