enforce
`.claude/rules` と `docs/design-guideline.md` の規約のうち、機械に落とせるものを探して issue にする。週次の Routine から呼ばれる。
SKILL.md.claude/skills/enforce/SKILL.md
GitHub規約を検査に移す
ここでは実装しない。 探して issue にするところまで。
検査を足すことと、移った規約の行を消すことで1つの変換。 片方だけだと二重管理が残る。
判定の結果を文書に残さない。 出すのは issue だけ。除外リストも進捗表も作らない。
1. 集める
.claude/rules/**/*.md の箇条書きと本文の断定、docs/design-guideline.md の方針。1項目を1本として数える。
「機械が落とせない」と書いてある項目こそ読む。 その断言は書いた時点の道具で下したもので、道具が増えれば失効する。失効したまま残ると、目視で受け続けることになる。
2. 置き場で落とす
判定に何が要るかで置き場を決める。置き場は scripts/check が呼ぶ検査(lint・型・テスト・scripts/ のスクリプト)か、.claude/hooks/ のフック。
決まらなければ落とす。
人の読みが要るものは落とす。 「原則として書かない」「利用者が1つしかない抽象化」「同じ概念に複数の語を使わない」は、判定に文脈が要る。規約のまま置くのが正しい。
ツールを増やさないと書けないものは落とす。 今ある道具で書けるものだけ拾う。
3. 既に落ちるか試す
その規約を破る最小の例を書いて、./scripts/check とフックにかける。どのツールが何を見ているかを設定から読み解かない。読み解くと、既に効いている検査をもう一度足す issue が出る。試した細工はコミットに含めない(→ .claude/rules/commit.md)。
| 結果 | どうする |
|---|---|
| 落ちる | 検査は既にある。規約の行が残っていれば、それを消す issue にする |
| 落ちない | 変換の候補。次へ |
4. 起きた違反を数える
根拠になるのは実際に起きた違反だけ。 規約にそう書いてあることは根拠ではない。書いた時点の想定で、起きたことの記録ではない。
今の実装の件数と、過去に起きた実績の両方を数える。件数を飛ばすと、入れた瞬間に赤くなる検査を issue にしてしまう。
実績は台帳の行か、その規約を破っていた差分(git log -S で綴りを追う。規約の行を書いた差分は違反ではない)。
sh scripts/harness-journal.sh ledger
台帳が1行も出ない回は数えない。 取得に失敗しても空で終了コード 0 を返すので、実績が無いのと見分けが付かない。次の回に回す。
| 数えた結果 | どうする |
|---|---|
| 今0件で、実績も無い | 落とす。起きていない違反のための検査は、読む量と後で消す手間だけを増やす |
| 今0件で、実績がある | 候補。戻りを止めるだけで、直す作業が無い |
| 今1件以上 | 候補。件数と該当箇所を「現状」に書き、実装を直すか規約を緩めるかは書かない |
5. 既に出したものを落とす
同じ規約の issue を、open と closed の両方から探す。
| 見つかったもの | どうする |
|---|---|
| open | 落とす |
| completed で閉じている | 検査は入っている。規約の行が残っていれば、それを消す issue にする |
| not planned で閉じている | 一度「移さない」と決めている。落とす |
その規約自体を見直す issue が open なら落とす。 覆るかもしれない規約を検査で固めると、結論次第で入れた検査を捨てることになる。変換の可否より先に見る。
判定の記憶は issue が持つ。 同じ規約を毎週蒸し返さないための状態を、文書に作らない。
6. 出す
1回に最大2本。 今0件のものを先に。書き方は issue テンプレートの型に従う。
1で集めた候補は、畳んで空いた枠にだけ入れる。 検査を1本減らして閉じた issue を1つ引き当て、#NNN の形で「現状」に書く。引ける枠が無ければ、足す issue は出さない。上限が無いと、毎週かかるのは足す力だけになる。
同じ枠は2度引けない。 #NNN と書けば枠の issue に参照が残るので、そこで引かれているかを見る。
codify から渡ってきた指摘は枠を待たない。 2回受けた指摘そのものが実績で、枠を待たせると台帳の判定に置ける値が無くなる(→ codify の「台帳に戻す」)。
完了条件は次の2つだけにする。どちらも外から判定できる。
- その規約を破った変更を
./scripts/checkかフックが落とす - 移した規約の行が
.claude/rules/かdocs/design-guideline.mdから消えている
どのツールにどう書くかを完了条件に入れない。 置き場の見当は「手がかり」に1行で添え、指示ではないと明記する。
7. 報告
出した issue の番号とタイトルだけ。1本も出さなければ報告しない。 週次の「なし」を残さない。