Sweep addressed callouts older than a threshold (default 180 days) into the target note's
日本語の概要は準備中です。原文の説明を表示しています。
Run health checks on the vault for inconsistencies, stale data, orphaned notes, and missing connections. Use periodically or when user says "lint", "health check", or "audit".
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Comprehensive vault health audit. Read-only — never deletes, never edits. Report only.
Design rationale in .claude/skills/lint/RATIONALE.md (§N.M anchors).
Architecture (2026-07-08, script-first): the deterministic majority of the check registry (~45 of the registry's #1–#61, with #31 and #40 retired/unused — set-diffs, date arithmetic, regex, schema probes) is implemented in .claude/skills/lint/lint.py, following the generate_graph.py precedent. The script is the authoritative spec for those checks; this file specifies only the LLM-judgment checks and the merge procedure. Main-context cost drops from a full-vault read to one script call + targeted reads of flagged files.
Per .claude/skills/_shared/preflight.md Procedure 1. Even though /lint never writes to vault content files, a lock is still acquired so that concurrent writers (e.g., a mid-flip /sync manifest, an in-flight /prune sector edit) do not cause /lint to see transient inconsistent state and raise false-positive flags.
/lint with no arguments): acquire a vault-wide scope lock. Timeout budget: 5 minutes./lint TICKER): acquire a .vault-lock.readonly lock. Timeout budget: 2 minutes.Capture the token emitted at Step 0.1. Verify ownership (Procedure 1.5) before subsequent Bash blocks. Release the lock explicitly in the final reporting Bash block via rm -f "$LOCK_FILE".
/lint is a read-only diagnostic skill and is an explicit exception in .claude/skills/_shared/preflight.md §2.1. lint.py #37 surfaces active .rename_incomplete.* markers as check output — hard-blocking would defeat lint's purpose.
python3 .claude/skills/lint/lint.py # full mode
python3 .claude/skills/lint/lint.py --ticker $T # scoped mode
snapshot_of:/snapshot_date: frontmatter + any non-.md artifact in Snapshots/ — the class invisible to /clean and unrestorable-by-spec for /rollback); #59 template-drift-at-birth (thesis <7d old already missing template sections → IMPORTANT immediately, split out of the #14 backlog — signals /thesis drifted from the template on that run). New 2026-07-14: #60 conviction-trigger falsifiability (active/monitoring thesis whose ## Conviction Triggers is a present-but-unfilled scaffold → IMPORTANT, or filled-but-carries-no-numeric/dated/named-observable-threshold → NICE; section-absent stays #14's job — the precondition _shared/trigger-touch.md depends on); #61 Key Metrics staleness (key_metrics_last_refreshed missing or >90d — IMPORTANT on high-conviction active, NICE elsewhere; consumes the field /numbers Step 11 writes). New 2026-07-15 (CHG-15, analytical tier): #62 non-consensus-names-consensus (candidate — active/monitoring thesis whose ## Key Non-consensus Insights states no consensus it opposes; LLM Step 2 confirms); #63 Mental-Models stable-ID aggregate (ONE NICE listing populated ## Mental Models sections lacking [G-#]/§ citations — a convention-adoption backlog, not per-thesis defects; hypothesis-vs-verdict framing judged in Step 2); #64 hedge-word ban (NICE — CLAUDE.md Writing Standards filler words in thesis/sector/macro spines, "significantly" excluded as often-quantitative, capped 3/file); #65 Summary-vs-frontmatter conviction consistency (candidate — Summary conviction word ≠ frontmatter; LLM confirms genuine stale statement vs conditional/negative prose); #66 weakly-sourced spine figures (NICE — [1×: …]/[est.] provenance tags that reached a thesis body, pairs with CHG-10). New 2026-07-29: #67 publish-flag coverage (thesis/sector/macro note missing the publish: frontmatter key → IMPORTANT — the GitHub→website sync silently skips it; publish: false passes as intentional unpublish; Research/ and Website/ out of scope by design).Read ONLY the files the script flagged or that these checks name. Do not re-run any check the script covers; do not full-read the vault.
Thin critical sections — for each #5 judgment candidate (section exists but under ~25 words), read the section and judge whether it is substantively empty (placeholder prose, restated heading) vs. legitimately terse. Substantively empty → Important.
Old financial data — for theses flagged by #6 or with conviction: high, read ## Key Metrics and judge whether the data vintage (as-of dates, quarter references) is older than 6 months. Stale → Nice to Have; stale AND driving a conviction claim → Important.
Unlinked mentions — using Grep (word-bounded ticker tokens across Theses/ Sectors/ Macro*/), identify notes that discuss a ticker with a thesis but never wikilink it. Judgment: distinguish substantive discussion (flag, Nice to Have) from passing mention (skip).
12/13. Conviction-evidence and Bull/Bear interpretation — for each #12 candidate and #13 flag from the script, read the thesis and judge whether the mechanical count/ratio reflects a real evidence gap or bias. Upgrade to Important only with a specific stated reason.
Partial-write confirmation — for each #28 candidate, read the flagged section and confirm whether it is genuinely truncated (mid-sentence, broken table) or a false positive (stylistic fragment, list item ending in a preposition-like token). Confirmed → Important, and name the likely matching snapshot in _Archive/Snapshots/ if one exists.
Registry reverse-check + semantic drift — the script verified registry→skill presence. Do the reverse: scan each producer SKILL.md's quoted Log-prefix strings (Drift-coupling blocks, Log-format fences) for prefixes NOT in _shared/log-prefixes.md → Important (orphan coupling). Also judge any #29 script finding for semantic (not just literal) drift before reporting.
Graph-primer anti-pattern review — for each #55 candidate, read the surrounding SKILL.md context and judge whether the matched phrase actually instructs primer-as-filter behavior (violation → Important) or is a negation/anti-pattern warning quoting the phrase (skip).
Non-consensus names its consensus — for each #62 candidate, read ## Key Non-consensus Insights and judge whether each insight actually states the consensus view it contradicts (prose or the CHG-11 Consensus: field). An insight that only asserts a positive view without naming what the market believes → Important (unfalsifiable positioning, not analysis); if the consensus is named in nearby prose the grep missed → skip.
Mental-Models hypothesis-vs-verdict framing — read the ## Mental Models sections listed in the #63 stable-ID aggregate (they are the populated ones). Judge whether "Triggers that fired" are held as hypotheses-to-test (READING PROTOCOL) or stated as verdicts/conclusions (e.g. "the moat is real, buy" rather than "layer-monopoly hypothesis — the falsifier is X"). Verdict framing → Important; note that the VLM lens's own Alpha verdict output-format field is legitimate and not itself a violation. The stable-ID absence is already reported mechanically (aggregate NICE) — do not re-flag it per-thesis.
Conviction Summary-vs-frontmatter — for each #65 candidate, read the ## Summary sentence containing the conviction word. Confirm it is a genuine stale statement (Summary asserts a conviction level that contradicts frontmatter, e.g. after a /status change) → Important; dismiss if the word appears in conditional/negative prose ("preclude high conviction until…", "would warrant medium") → skip. This is the INTC-class drift catcher.
Merge Step 1 findings (verbatim) with Step 2 confirmations into the standard format. Attribute each finding to its check ID. Drop unconfirmed candidates silently.
(reproduce the script's Stats block, plus: judgment candidates reviewed / confirmed / dismissed)
Release the lock in the same final Bash block.
lint.py is the spec of record for the deterministic checks. When a check's rules change, edit the script (and its docstring COVERED list), not this file._shared/log-prefixes.md (#29), _shared/sector-resolution.md (#30/#34), _shared/hot-md-contract.md (#35/#42), _shared/graph-primer.md (#54/#55), _shared/preflight.md (#43).まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Sweep addressed callouts older than a threshold (default 180 days) into the target note's
日本語の概要は準備中です。原文の説明を表示しています。
Extract a thesis's load-bearing assumptions and scan for internal contradictions — the falsifiable claims the bull case requires, what would falsify each, and where the thesis's own Risks / Bear Case / research already argue against it. Use when user says "assumptions", "what must be true", "load-bearing assumptions", or "does [TICKER] contradict itself".
日本語の概要は準備中です。原文の説明を表示しています。
Generate a concise 1-page investment brief from a thesis — the elevator pitch version. Use when user says "brief", "summarise thesis", "pitch me [TICKER]", "one-pager", or "investment memo".
日本語の概要は準備中です。原文の説明を表示しています。
Extract and maintain a cross-portfolio catalyst calendar from all thesis notes. Use when user says "catalyst", "calendar", "what's coming up", "upcoming events", or "what could move the portfolio".
日本語の概要は準備中です。原文の説明を表示しています。
Delete old snapshots from _Archive/Snapshots/. Accepts a day threshold (default 180). Also `daily-intel [days]` mode — prune auto-generated n8n scanning surfaces (news briefs, X dashboards) from Daily Intel/ older than 90 days. Use when user says "clean", "clean snapshots", "delete old snapshots", "clean daily intel", or when /lint flags stale snapshots.
日本語の概要は準備中です。原文の説明を表示しています。
Delete old snapshots from _Archive/Snapshots/. Accepts a day threshold (default 180). Also `daily-intel [days]` mode — prune auto-generated n8n scanning surfaces (news briefs, X dashboards) from Daily Intel/ older than 90 days. Use when user says "clean", "clean snapshots", "delete old snapshots", "clean daily intel", or when $lint flags stale snapshots.
日本語の概要は準備中です。原文の説明を表示しています。