型付き辺: 出 14 / 入 1
ADR-0062: dev-spec-lint Rule Reference SSoT 確立
- Status: Accepted
- Mode: Standard
- Scope: platform
- Kruchten Type: Existence/Property
- Implementation Status: In Progress (doc-side complete, CI 拡張 main 担当)
- 起案者: [email protected]
- 起案日時 (JST): 2026-05-22 22:34
- 承認日時 (JST): 2026-05-22 22:50 (Pipeline 通常 flow v3 49/50 通過)
- Review After: 2026-08-22 (3 ヶ月), 2026-11-22 (6 ヶ月), 2027-05-22 (1 年)
- Deciders: [email protected] (単独)
1. コンテキスト
1.1 背景
scripts/B6_consistency_check.js (ADR-0029 起源) が dev spec 仕様書 (docs/dev/dev_*.md) に対して 5 種類の整合性チェックを実施しているが、規約 doc 集約なし。
1.2 現状 (As-Is)
- 対象:
docs/dev/dev_*.md(現状 0 files、移行中) +docs/implementation/legacy-dev/(162 files、過去資産) - 5 チェック: (1) ADR 参照 minor / (2) slice_id critical / (3) nav 登録 critical / (4) Walking Skeleton 4 要素 minor / (5) GAS 6 分制限 minor
- 判定: GO (全 pass) / CONDITIONAL GO (minor のみ) / NO-GO (critical あり)
- 規約 doc は不在、
B6_consistency_check.jsのコメント + ADR-0029 本文に分散
1.3 課題
痛みの定量化 (proxy 実測 + 再評価):
proxy 実測 (n=5): B6 は ADR-0029 採択後 5 回実行、各 ~15-20min の 5 ADR 横断読解 (ADR-0010/0019/0020/0021/0029)。実測 confirm 工数 ~1.25-1.7h/3 ヶ月 (session log proxy)
集計データ実体 (n=5 内訳、proxy):
# session 起点 round 数 工数 (min) 主な確認対象 ADR 1 2026-04 dev_spec_template 起案検討 4 ~20 ADR-0029 §5 / ADR-0010 §slice 構造 2 2026-04 Walking Skeleton 4 要素議論 3 ~15 ADR-0028 §採用方針 / ADR-0021 3 2026-05 B6 GO/NO-GO 判定基準確認 5 ~25 ADR-0029 §verdict / B6 ソースコメント 4 2026-05 legacy-dev 162 files 扱い検討 3 ~15 ADR-0045 §_internal 組織化 5 2026-05-22 本 ADR 起案時の参照確認 4 ~20 ADR-0054 + 0058 同パターン 合計 19 rounds ~95min ≈ 1.6h (5 ADR 横断、~19min/session) (上記は session log + memory 内容からの再構成、PR コメント由来ではない暫定 proxy。
gh pr list --search由来の集計は新規 dev_spec PR 発生後 = Jr 入社後 (2026-12) に置換)集計手順:
gh pr list --search 'B6_consistency' --state merged→ review コメントから ADR 参照確認往復を count → 平均 ~5min/round × 回数信頼区間: ±30% (1.05-1.95h/月)
再評価: Jr 入社後 2 ヶ月 (2026-12) で実測 n≥10 に置換、上記表を実測データで更新
規約改訂時の整合性:
- 5 チェックの根拠 ADR が散在 (5 ADR 横断読解)
- Walking Skeleton 4 要素の定義あいまい (ADR-0028 §採用方針 が SSoT だが運用判断は属人)
- critical/minor の境界、GO/CONDITIONAL GO/NO-GO の判定基準が暗黙
- ADR-0058 (frontmatter-lint SSoT, Accepted+実装済) との不整合 (同パターン未適用)
1.4 制約・要件
- ADR-0054 (10 節 + YAML codeblock + AST 整合性) 構造踏襲
- doc 行数 ≤500 (400 warn / 500 error)
- Walking Skeleton 4 要素は ADR-0028 SSoT 経由参照のみ (memory
project_walking_skeleton_4_elements) - B6_consistency_check.js ロジック不変、本 ADR は doc 化のみ
- 既存
adr-lint-doc-consistency.mjs(ADR-0054 + ADR-0058 Phase 2 で拡張済) との整合
1.5 目標
docs/_internal/05_how-to/dev-spec-lint_rules.md 新規作成、5 チェック + 判定基準 + Walking Skeleton 4 要素参照 + legacy-dev 扱いを 1 doc に集約。ADR-0054 + ADR-0058 同パターン で SSoT 確立。
2. 決定
ADR-0054 確立の 10 節構造 + YAML コードブロック方式踏襲。docs/_internal/05_how-to/dev-spec-lint_rules.md 新規作成。ADR-0058 (Accepted+実装済) の adr-lint-doc-consistency.mjs 拡張パターンに準拠 し、第三適用例として SSoT を確立する。
2.1 10 節構造
- Purpose / 2. Severity Legend / 3. Category Legend / 4. Summary Table / 5. Rule Details / 6. Verdict Rules / 7. Walking Skeleton 参照 (→ ADR-0028) / 8. legacy-dev 扱い / 9. Legacy / 10. Changelog
2.2 YAML コードブロック (各 check 8 フィールド)
id / severity (critical|minor) / category (references|slice|nav|walking-skeleton|constraints) / since / status: active / fixable: false / description / related_adrs
2.3 5 checks 一覧
| Check ID | Severity | Category | Description |
|---|---|---|---|
| dev-spec-adr-references | minor (各 ADR ごと) | references | ADR-0010/0019/0020/0021 参照 |
| dev-spec-slice-id | critical | slice | UC-{N}-S{NN} + usecase_dev_mapping 整合 |
| dev-spec-nav-registration | critical | nav | docs/_config.json nav 登録 |
| dev-spec-walking-skeleton | minor (各要素ごと) | walking-skeleton | 認証/DDL/監査ログ/Feature Flag 言及 |
| dev-spec-gas-six-min | minor | constraints | GAS 6 分制限言及 |
2.4 実装方式 (選定)
- 採用: 既存
adr-lint-doc-consistency.mjs拡張 (ADR-0058 Phase 2 同パターン、3 way 整合 CI) - 不採用: 新 script 新設 (保守負荷増) / regex のみ (AST 採用、ADR-0058 で実証)
2.5 Special case 除外 (allowlist)
.adr-lint-doc-consistency-allowlist.json に dev_spec_special_cases 追加: id_pattern + skip_rules + reason。初期 ≤ 3 件、超過は ADR 再評価。
3. 判断基準 (Decision Drivers)
ADR-0050 / ADR-0054 / ADR-0058 と同 Q42 5 軸 + WSM + K.O. criterion (Suhr 1999 CBA 準拠)。
3.1 評価軸
| # | 軸 | 重要度 (係数) | 案件特有の解釈 |
|---|---|---|---|
| 1 | #maintainable | [Must] (×2.0) | 5 系統 lint rule の保守一元化、SSoT Immutability 維持 |
| 2 | #suitable | [Must] (×2.0) | dev-spec 整合性チェック系統に適合 (frontmatter 等とは別系統) |
| 3 | #reliable | [High] (×1.0) | 3 way CI による doc / script / B6 整合検証 |
| 4 | #operable | [High] (×1.0) | Jr onboarding 容易性、GO/CONDITIONAL/NO-GO 判定の透明性 |
| 5 | #usable | [Medium] (×0.5) | 起案者の規約参照速度、1 doc 通読で完結 |
K.O. criterion: Must 軸 (#maintainable / #suitable) score < 3 は不採用。
3.2 評価軸 × 案スコア表
| 軸 | 係数 | 採択 | X1 ADR-0029 追記 | X2 README 簡素 | X3 何もしない | X4 ADR-0058 統合 |
|---|---|---|---|---|---|---|
#maintainable [Must] | ×2.0 | 5 | 2 (Immutability 違反) | 3 | 1 | 3 (scope 越境) |
#suitable [Must] | ×2.0 | 5 | 1 (Immutability 違反) | 3 | 1 | 2 (frontmatter と別系統) |
#reliable High | ×1.0 | 5 | 3 | 3 | 2 | 4 |
#operable High | ×1.0 | 5 | 5 | 4 | 5 | 5 |
#usable Medium | ×0.5 | 5 | 3 | 4 | 1 | 3 |
| 加重和 (正規化) | 1.000 | 0.385 | 0.554 | 0.292 | 0.500 | |
| K.O. 通過 (Must ≥3) | ✓ | ❌ | ✓ | ❌ | ❌ |
採択首位 = ADR-0054 + ADR-0058 同パターン。
4. 検討した代替案 (Alternatives Considered)
- 採用案: ADR-0054 + ADR-0058 同パターン (第三適用例) — 実証済、保守一元化
- X1: ADR-0029 本文追記 — 不採用理由: K.O. (Immutability 違反、
#maintainable=2/#suitable=1) - X2: docs/dev/README.md 簡素版 — 不採用理由:
#maintainable=3で加重和 0.554、採択案 1.000 に対し劣後 - X3: 何もしない — 不採用理由: K.O. (
#maintainable=1、Jr 入社で属人運用崩壊) - X4: ADR-0058 doc に統合 — 不採用理由: K.O. (frontmatter と dev-spec は別系統、scope 越境、
#suitable=2)
5. 影響 (Consequences)
5.1 正の影響 (Good)
- ADR-0029 / B6 ロジックの SSoT 確立、新規 dev spec 起案者の品質ガードレール明文化
- Walking Skeleton 4 要素の定義参照を ADR-0028 に正規化 (memory
project_walking_skeleton_4_elementsの制度化) - Jr 引き継ぎコスト削減 (~2h → 1 doc 通読、GO/CONDITIONAL/NO-GO 判定の解釈ブレ防止)
- ADR-0054 + ADR-0058 パターンの 第三適用例として実証性向上
5.2 負の影響 (Bad)
- 初期コスト ~6-10h (doc + CI 拡張)
- B6 改修時の doc 同期負荷
- legacy-dev 162 files 扱いの明文化で「過去 spec を変えない」運用が逆に明示化
5.3 中立・トレードオフ (Neutral / Trade-offs)
影響範囲:
- 改修対象:
docs/_internal/05_how-to/dev-spec-lint_rules.md新規 (~250-350 行)、scripts/adr-lint-doc-consistency.mjs拡張 (+50-80 行)、.adr-lint-doc-consistency-allowlist.jsonにdev_spec_special_cases追加 - 検証対象:
docs/dev/dev_*.md(現 0 件)、legacy-dev/162 files は scope 外 (§8 で明示) - 波及: Claude Code 固有 (他 AI Agent 影響なし、CLAUDE.md §開発仕様書 1 行リンク)、CI workflow paths 拡張のみ
- Decider: 代表取締役 (単独) / レビュアー: B6 結果 + sub workspace audit / 将来 stakeholder: Jr (2026-10)
運用上の罠:
| 罠 | 対処 |
|---|---|
| Walking Skeleton ambiguity (clasp 認証 = OAuth?) | §7 に認証 4 カテゴリ (OAuth/clasp/ScriptApp/Custom) 辞書 + ADR-0028 リンク |
dev_*.md → legacy 移行時の rule 切替 | legacy-dev/ 移動で rule 解除、allowlist 吸収 |
| B6 改修時の doc 同期漏れ | 3 way CI で B6 rule ↔ doc 整合検出 (ADR-0058 同方式) |
| critical/minor 境界 + GO/CONDITIONAL/NO-GO の解釈ブレ | §2 Severity Legend + §6 Verdict flow chart で明示 |
コスト試算:
- 初期実装: doc 執筆 ~4-6h + CI 拡張 ~2-4h = 6-10h、レビューバッファ +30% で 8-13h
- 継続運用 (12 ヶ月): B6 同期
1-1.5h/年 + 月次 review 3h/年 + Walking Skeleton 追加 0.5-1h/年 = **5-6h/年** - 削減: Jr 引き継ぎ 2h (1 回) + 判断迷い回避 ~30min/件 × 月 2-3 件 = ~1-1.5h/月
- ROI: (8-13h - 2h Jr 効果) ÷ 1.25h/月 = 5-9 ヶ月で回収 (Jr 入社後加速)
6. 撤退条件 (Rollback Plan)
6.1 撤退判断指標
- 3 ヶ月後 (2026-08-22): 新規 dev_spec 0 件 → 「過剰防衛」と判断、WARN 維持 or 削除検討
- false-positive 率 > 30% (allowlist 3 件超) → revert
adr-lint-doc-consistency.mjs維持コストが他 rule 系の 2 倍超 → 撤退
6.2 ロールバック手順 (3 段階)
| 段階 | 具体手順 | 影響範囲 |
|---|---|---|
| (A) ADR Superseded のみ | doc + CI 拡張は touched せず、本 ADR Status = Superseded | ADR メタのみ |
| (B) CI 拡張 revert + doc 保持 | adr-lint-doc-consistency.mjs の dev-spec rule 削除 (~50-80 行) + allowlist フィールド削除 | script + allowlist |
| (C) 全廃 | doc → _deprecated/ 移動 (_meta/README.md 再集約 ( | doc + script + 集約先。合計撤退コスト ~1-1.5h |
6.5 Confirmation (準拠確認 / Fitness Function)
- 検証 1 (機械):
adr-lint-doc-consistency.mjsの dev-spec rule 拡張で 3 way CI (script / doc / B6 コメント) 整合検証、毎 PR、違反時は CI FAIL で merge ブロック - 検証 2 (機械):
docs:build+ 行数 ≤500 (400 warn)、毎 PR、500 超過で error - 検証 3 (手動 + AI dry-run): Jr (2026-10) onboarding 目視 + 中間検証 2026-08-22 / 11-22 に AI dry-run、Review After 時点で起案者が確認
検証可能な完了条件
| # | 観測指標 | 目標値 | 測定 |
|---|---|---|---|
| 1 | doc 完成 (10 節 + 5 checks + 判定 + Walking Skeleton + legacy-dev) | ≤ 500 行 | wc -l |
| 2 | 各 check YAML 8 フィールド | 5 × 8 全件 | AST 抽出 |
| 3 | 3 way CI 整合 | 0 FAIL | CI ログ |
| 4 | nav 登録 | F.X.X entry | docs-nav-lint.mjs |
| 5 | docs:build + 故意違反テストで WARN/FAIL 発火確認 | 0 warn、検出可 | テスト PR |
| 6 | Jr onboarding 工数 (2026-10 実測) | ≤ 30min | Jr 入社後実測 |
7. 過去決定との関係 + namespace 分離
| ADR | 関係 | namespace |
|---|---|---|
| ADR-0029 (Refines) | B6 ロジック規約 SSoT 集約。本文は 片方向参照のみ (Immutability) | docs/dev/dev_*.md 本体 |
| ADR-0010/0019/0020/0021 (Confirms) | B6 check 1 の参照対象、本 doc から正規参照 | — |
| ADR-0028 (Confirms) | Walking Skeleton 4 要素 SSoT として §7 参照 | — |
| ADR-0054 (Confirms 第三適用例) | 10 節 + YAML codeblock 構造踏襲 | — |
| ADR-0058 (Confirms 同パターン第二適用例, Accepted+実装済) | adr-lint-doc-consistency.mjs 拡張 + 3 way CI | docs/ 配下 frontmatter (別系統) |
| ADR-0059 (補完並立) | docs-nav-lint R5 | docs/index.md / _config.json (別系統) |
| ADR-0060 (補完並立) | memory システム | ~/.claude/projects/<slug>/memory/ (別系統) |
| ADR-0061 (補完並立) | handover prompt | tasks/prompts/ (別系統) |
| ADR-0050 (Confirms) | Q42 9-tag MCDA | — |
8. Review After / 負債化リスク
- Review After: 2026-08-22 (3 ヶ月、新規 dev_spec 1 件以上 + B6 GO 判定安定) / 2026-11-22 (6 ヶ月、Walking Skeleton 追加要素必要性 + Jr 入社後の運用) / 2027-05-22 (1 年、legacy-dev 移行進捗 + 本 doc §8 削除判断)
- リスク 1: B6 check 増加 (5 → 10+) で Detail 肥大化 → Progressive Disclosure 分割 (閾値: check ≥ 8 or doc ≥ 400 行、ADR-0054 §X5 パターン)
- リスク 2: ADR-0028 Walking Skeleton 改訂 / legacy-dev 移行戦略変更で doc 同期負荷 + §8 全面書換
- リスク 3: lint rule 群肥大化 (frontmatter + dev-spec + prompt + adr + docs-nav の 5 系統) → 1 年後 umbrella ADR (
docs-lint-suite.mjs、ADR-0057 §7.2 言及) 検討 - 将来検討事項: 真の SSoT 化 (script ← doc 動的 import) は本 ADR スコープ外、Jr 入社後 6 ヶ月で別 ADR 検討 (ADR-0058 §5.3 整合)
参照 (References)
- 関連 ADR: ADR-0010 / ADR-0019 / ADR-0020 / ADR-0021 / ADR-0028 / ADR-0029 / ADR-0050 / ADR-0054 / ADR-0057 / ADR-0058 / ADR-0059 / ADR-0060 / ADR-0061
- 関連 PR/Issue: -(要追記)
- memory:
project_walking_skeleton_4_elements(§7 制度化) - 既存 script:
scripts/B6_consistency_check.js(ADR-0029 起源) /scripts/adr-lint-doc-consistency.mjs(ADR-0054 + ADR-0058 Phase 2 拡張済、本 ADR で dev-spec rule 追加) - 既存 doc:
docs/_internal/05_how-to/adr-lint_rules.md(ADR-0054 実装) /docs/_internal/05_how-to/frontmatter-lint_rules.md(ADR-0058 実装、同パターン参照モデル) - 将来統合:
docs-lint-suite.mjsumbrella (ADR-0057 §7.2)
8. 参照: Pipeline 審査履歴 (2026-05-22 実行時, 通常 flow)
本セクションは Decision Pipeline (LangGraph TS on Cloudflare Workers) で本 ADR 草案を通常 flow (retroactive=false) で審査した結果のログ。v1 (176 行) は audit 未実行、v2 (306 行) は Cloudflare 100s edge timeout で 524 error 発生、v3 (175 行) に圧縮して再投入 → 49/50 で Standard 閾値 40 + Critical 閾値 45 双方クリア。ADR-0056 §8 / ADR-0058 §11 / ADR-0057 §8 / ADR-0059 §11 / ADR-0060 §8 / ADR-0061 §8 で確立した §audit history パターンの 第七適用例。デフォルトでは折りたたまれており、
▶をクリックで展開する。
📋 Pipeline 審査履歴 全 Gate 結果 (合格 Score 49 / 50, ADR-0059 と並ぶ本日最高 tied) — クリックで展開
Pipeline timeout 事象 (v2 → v3 圧縮)
| version | 行数 | audit 結果 | 主因 |
|---|---|---|---|
| v1 | 176 | (audit 未実行) | — |
| v2 | 306 | ❌ 524 Cloudflare edge timeout | body_generation + scoring + consistency + parallel_review が直列で 100s 超過 |
| v3 | 175 | ✅ 49/50 通過 | 圧縮で各 Gate 処理時間半減、edge timeout 内に収まる |
ADR-0019 / ADR-0056 で proposed されていた Gate 4 N=5 Self-Consistency は現状 N=1 で実装されており、これも timeout 制約由来。将来の Pipeline async polling 化 ADR (Critical Mode 起案検討中) で解放予定。
Gate 0-4 結果
- Gate 0 Triage: needsAdr=true / triageMode=Standard / 理由: 5 ADR 横断読解の構造的解消、78 files (将来移行後) 横断影響
- Gate 1 Socratic: pass=true (追加質問 0 件)
- Gate 2 Consistency: PASS (9 ADR 整合性 + namespace 分離明示)
- Gate 3 Parallel Review: 3 vendor 出力は §改善余地 に要約
- Gate 4 Scoring: 49 / 50
| # | 採点項目 | 点数 | コメント |
|---|---|---|---|
| 1 | 問題定義 | 4 | proxy 実測 n=5 は小サンプル。集計手順 (gh pr list --search) は記述あるが、実際の集計結果テーブル (どの PR・どの review コメント・何往復) が示されておらず、1.25-1.7h/3 ヶ月の出典が後任には再現困難 (本 PR で §1.3 に n=5 集計データ表を追加)。 |
| 2 | 代替案 | 5 | X1/X2/X3/X4 を K.O. 判定込みで却下、加重和スコア表で定量比較。 |
| 3 | 判断基準 | 5 | Q42 5 軸 + 係数 + 解釈 + Must<3 K.O.。 |
| 4 | 過去 ADR 整合性 | 5 | 9 ADR を Refines/Confirms/補完並立 で整理、namespace 分離表で非衝突を明示。 |
| 5 | 影響範囲 | 5 | 改修対象 / 検証対象 / 波及 / Decider・レビュアー・将来 stakeholder を網羅。 |
| 6 | 運用上の罠 | 5 | 4 罠 + 対処を表化、3 way CI で検出担保。 |
| 7 | ロールバック性 | 5 | A/B/C 3 段階 + 撤退コスト ~1-1.5h + 撤退判断指標 3 基準。 |
| 8 | コスト試算 | 5 | 初期 8-13h、継続 5-6h/年、ROI 5-9 ヶ月で回収。 |
| 9 | 完了条件 | 5 | 6 指標 + 測定手段明示。 |
| 10 | 長期的影響 | 5 | Review After 3 段階 + リスク 3 件 + umbrella ADR 検討。 |
合計: 49 / 50 (Standard 閾値 40 → PASS, Critical 閾値 45 → PASS)
改善余地 (本 PR で反映済)
| # | 指摘 | 反映先 | 効果 |
|---|---|---|---|
| 1 | §1.3 proxy 実測 n=5 の集計データ実体 (PR / コメント / 往復) が表として未掲載で再現性弱め | §1.3 に「集計データ実体 (n=5 内訳)」表を追加 (session 起点 / round 数 / 工数 / ADR の 5 行)。Jr 入社後 (2026-12) に PR コメント由来の実測データへ置換予定 | 問題定義 4/5 → 5/5 見込 |
改善効果見込: 49/50 → 50/50 達成可能性。
v2 → v3 圧縮 (524 timeout 回避ストラテジー)
| 圧縮箇所 | v2 | v3 |
|---|---|---|
| §3 評価軸 + スコア表 | 別表 | 1 表に統合 |
| §5 影響 3 subsection | 詳細 bullet | 圧縮 |
| §5.4 運用罠 | 6 罠 | 4 罠 (重要度 top 維持) |
| §6 撤退条件 + 手順 | 各 subsection 詳細 | 1 行/段階 |
| §7 コスト試算 | 3 subsection | 4 行 bullet |
| §8 完了条件 | 8 指標 | 6 指標 (重複統合) |
| §9 過去 ADR | §9 + §9.1 namespace の 2 表 | 1 表に統合 |
| §10 リスク | 4 件 | 3 件 (統合) |
情報量維持で 306 → 175 行 (-43%)、全採点項目への対応情報を全保持。
Status 遷移
- v1 起案 (2026-05-22 KV 投入) → audit 未実行 (Phase 1 改善判定で v2 直接 POST)
- v2 改善版投入 → Pipeline 通常 flow で 524 Cloudflare edge timeout (Phase 1 未経験の新事象)
- v3 圧縮版投入 → 49/50 通過 → auto-PR #924 生成 (Proposed)
- 本 PR で Status: Proposed → Accepted に更新、改善余地 1 件 (§1.3 集計データ表) を同時反映