--- name: doc-lint description: ドキュメントがCLAUDE.mdの運用ルール1〜4に沿っているか検査する。推測タグと未確認事項の対応漏れ、journalへのリンク、比較表の混入などを検出する。 argument-hint: [ファイル...] --- # ドキュメントのルール違反を検査する 機械的に判定できる項目はスクリプトで検出し、判断が要る項目だけ目視で見る。 **検出して報告するだけで、勝手に直さない。** 修正は内容を確認してもらってから。 ## 1. スクリプトを走らせる ``` python .claude/skills/doc-lint/doc-lint.py [ファイル...] ``` 引数なしで直下の `*.md` と `journal/*.md` を全部見る。ERROR があれば終了コード 1。 検出する項目: | 種別 | 内容 | |---|---| | ERROR | 本文の `[推測:P-n]` に対応する `## 未確認事項` の項目がない | | ERROR | `## 未確認事項` の項目に `- 格上げ条件:` の行がない | | ERROR | `## 未確認事項` のIDが重複している | | ERROR | journal へのリンク / journal から他ファイルへのリンク | | ERROR | `## 検討済み・非採用` の項目が journal ファイル名を参照していない | | ERROR | journal のファイル名が `YYYY-MM-DD-.md` 形式でない | | WARN | `## 検討済み・非採用` が5件を超えた | | WARN | journal の冒頭20行に結論が見当たらない | | WARN | メインドキュメントに比較表・優先度評価・却下案の記述らしきもの | **本文タグのない `## 未確認事項` の項目はエラーにしない。** 「まだ本文に書けない未解決の問い」として正当。 WARN の散文検出は当たりが粗い。取りこぼしも誤検出もあるので、出た/出ないを結論にしない。 ## 2. スクリプトで見られない項目を確認する こちらが本体。ファイルを読んで判断する。 - **「なぜBではないのか」が理由として残っていないか。** 却下理由ではなく、現在効いている制約として書かれているか。 - ✗ `階層構造はKLEが非対応なので諦めた` - ○ `階層クラスターはKLE JSONに出力しない(KLE互換性の制約)` - **裏取りしていない記述にタグが付いていないか。** 検査項目の中で最も重要で、 機械では判定できない。「〜できるはず」「〜と考えられる」「実現可能」で実際に試していない 記述を探し、`[推測:P-n]` が付いているか確認する。 - **同じ事実が複数ドキュメントに複製されていないか。** 片方だけ古くなる。 - **journal の冒頭20行で、結論と選択肢が分かるか。** 見出しの有無ではなく中身を読む。 - **コミット規約**(必要なら `git log --oneline` を見る) - 1コミット1決定になっているか - journal を伴う決定のメッセージに `Journal:` 行があるか ## 3. 報告する ERROR / WARN / 目視で見つけたもの を分けて出す。 修正案は出してよいが、適用は確認を取ってから。事実関係の誤りを見つけた場合も、直さず指摘する。 ## 注意 - 運用ルール策定前に書かれた既存ドキュメントは、まだルール1〜4が適用されていない。 WARN が大量に出るのは想定内で、再編(`/restructure-doc`)のタイミングで解消する。 再編前のファイルの WARN を個別に直そうとしない。