chore(repo): 個人標準の監査で見つかった不足を埋める (CI ゲート / permissions / CHANGELOG / ADR) - #254
Merged
Conversation
## 目的
個人標準 (repo-standards) の監査で、CI で強制できていない品質ゲートが 2 つ
残っていたため塞ぐ。
- pr-title: squash merge では PR タイトルがそのままマージコミットの要約になる
ため、Conventional Commits の崩れが main の履歴に永続する
- freshness: 参照先・依存のドリフトは PR CI では捉えられず、定期実行でしか
拾えない
## 変更点
- `.github/workflows/pr-title.yml`
- `pull_request_target` で fork PR でも走る。checkout せずタイトル文字列
しか読まないので fork のコードを実行する経路はない。permissions は
`pull-requests: read` のみ
- サードパーティ action に依存せず bash の正規表現 1 本で判定
(`feat|fix|docs|refactor|test|chore|ci`、scope 省略可、`!` 許可)
- タイトルは `env:` 経由で受け取り、`run:` へ直接展開しない
(コマンドインジェクション対策)
- job id = `pr-title` (= status check の context)
- `.github/workflows/freshness.yml`
- 週次 (月曜 00:00 UTC) + `workflow_dispatch`
- 検査 1: Markdown の相対リンク切れ (外部 URL・アンカー・サイト絶対パス・
gitignore 対象は除外)
- 検査 2: `npm outdated` の要約 (major 更新を先出し、全件は details に格納)
- 検知 0 件なら Issue を作らない。1 件以上なら同タイトルの open Issue が
あればコメント追記、無ければ新規作成 (週次で増殖させない)
## 確認方法
- 両ファイルが YAML として妥当であることを確認
- pr-title の判定式を YAML から抜き出し 22 ケース実行、全件期待どおり
(OK: `feat(editor): 追加` `fix: 修正` `feat!: 破壊的` / NG: `Add feature`
`feat: ` `wip` `Feat(editor): ...` `feat(): 空 scope` など)
- freshness の各 step をローカルで実行し、リンク検査 1 件・依存 21 件を検知、
`LINKS_COUNT=0 DEPS_COUNT=0` で Issue 作成へ進まないことを確認
- `npm run lint` green
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
## 目的 これまで Claude Code の permissions は未追跡の `.claude/settings.local.json` (5 件) にしかなく、clone / worktree を作るたびに引き継がれなかった。加えて `Bash(npm run *)` が広すぎ、`packages/workers` の `deploy:production` や `gen-checkpoint-key` (署名鍵生成) まで確認プロンプトなしで通る状態だった。 ## 変更点 - `.claude/settings.json` を新規追加 (追跡対象) - allow: 本リポで頻繁に使う読み取り系・非破壊コマンドを列挙 - ビルド / 型検査 / lint / テスト / dev サーバ / doctor - git の参照系 (status, diff, log, show, branch, worktree list, fetch など) - gh の参照系 (pr / issue / run / release の view・list、本リポの api GET) - deny: 外部影響・不可逆な操作を明示的に塞ぐ (deny は allow に優先する) - `npm run deploy:*` / `gen-checkpoint-key` / `gen-exam-authority-key` - `wrangler deploy` / `wrangler secret` - `git push --force` / `-f` / `--delete`、`git reset --hard`、`git tag -d` - `rm -rf`、`gh repo delete`、`gh release delete` - `.env` / `.dev.vars` の Read (秘密情報をコンテキストへ持ち込まない) 個人固有の設定は従来どおり `.claude/settings.local.json` (gitignore 済み) に 残す。 ## 確認方法 - `jq . .claude/settings.json` でパースできることを確認 - allow の対象コマンドがルート `package.json` の scripts・CLAUDE.md・ `.github/workflows/deploy.yml` に実在することを確認 - deny の対象が `packages/workers/package.json` の scripts に実在することを確認 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
## 目的 本リポはタグ式 GitHub Flow (ADR-0028) で `v*` タグから production へ出す。 リリースするリポでは変更履歴が利用者への契約になるが、これまで正本が無く GitHub Release の自動生成ノート (PR 全列挙) しか無かった。 ## 変更点 - ルートに `CHANGELOG.md` を追加 (Keep a Changelog 形式 / 日本語) - `[Unreleased]` に v1.1.0..main の 24 コミットから利用者に見える変化のみを 10 件 (変更 4 / 修正 4 / セキュリティ 2)。内部リファクタ・CI 高速化・ リポ運用整備は列挙しない - `[1.1.0] - 2026-07-07` に主要変更 40 件。プロジェクト開始以降の全 PR は 網羅せず、その旨と GitHub Release へのリンクを冒頭に注記 - 末尾にバージョン比較リンク 記載内容はすべて git 履歴で裏を取っている。コミット要約末尾の `(#NN)` は Issue 番号のことがあるため、`gh pr list --state merged` と merge commit で 実 PR 番号を突き合わせて確定させた。 ## 確認方法 - 本文中の `docs/adr/*.md` 相対リンク 20 本すべての実在を確認 - ルート `package.json` の version (1.1.0) とタグ v1.1.0 が一致することを `git log -L` で確認 (食い違いは無い) - `npm run lint` green Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
## 目的 個人標準の監査 (adr-covers-decisions) で、設計判断を伴う変更のうち 2 件に ADR が残っていないことが分かった。どちらも「なぜその範囲か」が CLAUDE.md と CONTRIBUTING の運用記述にしか無く、却下した選択肢が失われていた。 ## 変更点 - `docs/adr/0032-biome-as-single-lint-format-toolchain.md` (Accepted) - lint / format を Biome 1 つに集約した判断 (Issue #157 / PR #185) - 却下: ESLint + Prettier (依存 3 系統・型情報 lint が monorepo で遅い)、 現状維持 + `.editorconfig` (CI で強制できない) - `.editorconfig` を置かない理由 (format の正本を Biome に一本化) と、 型情報つきルールの不足を `tsconfig.base.json` の厳格化で補う分担を明記 - `docs/adr/0033-e2e-round-trip-harness-as-deploy-gate.md` (Accepted) - E2E を暗号成果物 (verify-cli の exit code) をオラクルにした round-trip に 限定し、全 deploy の必須ゲートに置いた判断 (PR #116〜#118 / #192) - 却下: ユニットのみ、UI アサーション中心の E2E、全シナリオ full 検証 - full は happy-path 1 本・他は `--mode fast`、負のオラクルを必ず対で持つ、 合成打鍵は `dispatchEvent` で注入 (ADR-0018) の線引きを決定として記録 - `docs/adr/README.md` の一覧に 2 行追加 いずれも事後の ADR 化のため、Date に決定時期と ADR 化時期の両方を書いている。 ## 確認方法 - 両 ADR が template.md の 4 節 (Context / Considered Options / Decision / Consequences) と Status・Date・PR の front block を満たすことを確認 - 参照している相対リンク (ADR-0018 / 0028 / 0032、deploy.yml、 packages/e2e/CLAUDE.md、biome.json、tsconfig.base.json) の実在を確認 - 記載した PR 番号を `gh pr list --state merged` と merge commit で突き合わせ - `npm run lint` green Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
## 目的 個人標準の監査 (claude-md-quality) で 128 行と目安 (100 行) を超過し、 グローバル CLAUDE.md や他ドキュメントとの重複が指摘された。玄関口としての 役割に絞り、正本が別にある内容はリンクに置き換える。 ## 変更点 - Version の記述を 1.0.0 → 1.1.0 に修正 (`package.json` の実態に合わせる。 タグ v1.1.0 のコミットで bump 済みだった) - 「コミットと PR タイトルは Conventional Commits」の行を削除 (グローバル CLAUDE.md と重複)。代わりに CI の `pr-title` job が検査する ことと許可 type を 1 行で書く - ブランチ名の規約をグローバル側に委ね、worktree で作業する点だけ残す - 委譲プロンプトを自己完結で書く旨の一般論を削除し、委譲の目安 2 行に圧縮 - 「ドキュメント階層」の箇条書き 6 行を 1 段落に圧縮 (CHANGELOG.md を追加) - 「環境設定」の変数一覧 (17 行) を削除し docs/setup.md と packages/workers/CLAUDE.md へのリンクに置換。三重の重複だった。あわせて 秘密情報を docs へ書き写さない旨を明記 - dev / build / test コマンドの列挙を圧縮 (個別コマンドは 1 行にまとめる) ## 確認方法 - `wc -l CLAUDE.md` = 100 行 - 記載した相対リンク (docs/setup.md, docs/system-spec.md, docs/adr/, CONTRIBUTING.md, CHANGELOG.md, packages/*/CLAUDE.md) の実在を確認 - 削除した内容の正本が docs/setup.md と packages/workers/CLAUDE.md に 存在することを確認 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
🚀 Preview Deployment
Deployed from commit adfd695 |
4 tasks
This was referenced Aug 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
目的
個人標準 (repo-standards) との突き合わせ監査で、必須 NG 2 件・推奨 WARN 12 件が出た。GitHub 側の設定は別途適用済みで、本 PR はリポ内ファイルで直せる分をまとめる。
監査で分かった根本は 2 つ:
変更点
ci(repo): PR タイトル検査と週次鮮度チェックの workflow を追加するpr-title-lint/scheduled-freshnesschore(claude): 共有 .claude/settings.json で permissions を整備するclaude-permissions-curateddocs: CHANGELOG.md を追加するchangelog-existsdocs(adr): Biome 導入と E2E deploy ゲートの判断を ADR-0032 / 0033 に残すadr-covers-decisions(必須)docs: CLAUDE.md の重複を削り 100 行に収めるclaude-md-quality各コミットメッセージに目的・変更点・確認方法を書いている。特に注意して見てほしい点:
pr-title.ymlはpull_request_targetを使う (fork PR でも走らせるため)。checkout せずタイトル文字列しか読まず、タイトルはenv:経由で受け取るのでrun:へのコマンドインジェクション経路は無い。permissions はpull-requests: readのみ.claude/settings.jsonのdenyでnpm run deploy:*/gen-checkpoint-key/wrangler deploy/ force push /rm -rf/.envの Read を明示的に塞いだ。従来の広いBash(npm run *)が本番デプロイと署名鍵生成を無確認で通していたため併せて適用済みの GitHub 設定 (本 PR の範囲外)
allowed_merge_methodsも squash に)COMMIT_OR_PR_TITLE/COMMIT_MESSAGES→PR_TITLE/PR_BODYHome.md1 行のみ)required_signatures+required_linear_historyを追加refs/tags/v*の rulesetdeletion+update→non_fast_forwardを追加確認方法
npm run lintgreen (60 warnings / 9 infos はいずれもscripts/由来の既存分)pr-titleの判定式を workflow の YAML から抜き出して 22 ケース実行し、全件期待どおりであることを確認 (OK:feat(editor): 追加fix: 修正feat!: 破壊的/ NG:Add featurefeat:wipFeat(editor): ...feat(): 空 scopeなど)freshnessの各 step をローカルで実行し、リンク検査 1 件・依存 21 件を検知、両方 0 件のとき Issue 作成へ進まないことを確認gh pr list --state mergedで裏取り済みpr-titleはpull_request_targetトリガのため、workflow ファイルが base ブランチ (main) に存在してからでないと発火しない。本 PR では走らず、初回実行はマージ後の次の PR になる残課題
freshnessの初回実行でdocs/adr/0004-verifier-checkpoint-stance.mdのpackages/verify/src/core/VerificationEngine.tsへのリンク切れが上がる見込み (検証エンジンは shared へ移動済み)。本題と別関心なので本 PR では直していないscripts/配下の Biome warning 60 件をどうするかは未決 (ADR-0032 の Follow-ups に記載)🤖 Generated with Claude Code