ADR-0198 (主要な自動検証を必須化し技術的負債の累積を防ぐ) の Phase 2 切替 = 必須検証への昇格 を実施するための手順 memo。実施日は 2026-07-14 予定 (draft §3.3 の Phase 2 切替日)。

Phase 2 の狙い

ブランチ保護のルールセット (repo main-protection · id 18124726) の required_status_checks に 3 workflow 名を追加し、失敗状態での見送りマージを物理防御で禁止する。管理者強制を有効化して SOC 2 CC8.1 承認証跡経路を機械化する。

追加する 3 workflow 名

workflow 名 (job/check context)workflow file意味
adr-lint.github/workflows/adr-lint.ymlADR frontmatter 検証 (見出し・番号 prefix・placeholder 語)
test.github/workflows/drp-test.yml (Decision Pipeline Test)drp workspace の vitest 単体 test
ui-test.github/workflows/ui-test.yml (UI Visual Tests)webapp_client の Playwright 視覚回帰 (snapshot 比較)

事前 verify (Phase 2 flip 前に必ず確認)

1. Phase 0 完遂確認 (§Confirmation 1)

未解消の失敗 3 系統 (2026-07-03 起票時点) が close 済であることを確認する:

# 直近 3 run が SUCCESS であること
gh run list --workflow "ADR lint" --branch main --limit 3 --json conclusion
gh run list --workflow "Decision Pipeline Test" --branch main --limit 3 --json conclusion
gh run list --workflow "UI Visual Tests" --branch main --limit 3 --json conclusion

いずれかで failure が残っていれば Phase 2 flip を延期する。

2. Phase 1 猶予期間の乖離監視 (§Confirmation 2)

Phase 1 猶予期間 (2026-07-07 から 7 日 · ~2026-07-14) 中に乖離発生数 = 0 継続を確認する。乖離とは「Phase 0 で close した 3 系統が再度 FAIL 状態になる」こと。

# Phase 1 期間中の main branch の各 workflow 実行結果
gh run list --workflow "ADR lint" --branch main --created 2026-07-07..2026-07-14 --json conclusion
gh run list --workflow "UI Visual Tests" --branch main --created 2026-07-07..2026-07-14 --json conclusion

乖離が発生していれば原因調査 → 修正 → Phase 2 flip を延期。

3. SOC 2 事前確認記録 (§Confirmation 3 · 盲点 4 対応)

監査法人または外部コンサルタントに「CI 必須合格 = CC8.1 承認証跡」の事前確認を取得済であること。SOC 2 監査証跡管理 doc に記録済であることを確認する。未取得なら Phase 2 flip を延期する (draft §3.3 で Phase 2 完了条件に追加された盲点 4 対応要件)。

Phase 2 flip 手順

手順 A (GitHub UI · 推奨)

代表取締役が Settings > Rules > Rulesets から main-protection (id 18124726) を開き、Require status checks to pass セクションで次を追加する:

  • adr-lint
  • test
  • ui-test

Do not require status checks on creation は既存設定を維持 (現在 OFF)。Require branches to be up to date before merging (strict) も既存設定維持 (現在 ON)。

続いて Bypass list の管理者 bypass を無効化し、Restrict deletionsBlock force pushes を維持する。

手順 B (gh api · 手順 A の代替)

# 現在の ruleset 内容を保存 (rollback 用)
gh api repos/BizLinkPartners/bizlp-gas-accounting/rulesets/18124726 > /tmp/main-protection-before.json

# rules に required_status_checks を追加した JSON を組み立てて PATCH
# 注: 全 rules を維持したまま required_status_checks の parameters.required_status_checks 配列を拡張する
# → 実測時は /tmp/main-protection-before.json を jq で編集して PATCH body を作る (誤上書きリスク回避)

# rollback: 変更前状態を復元
# gh api --method PUT repos/BizLinkPartners/bizlp-gas-accounting/rulesets/18124726 --input /tmp/main-protection-before.json

gh api 経路は全 rules を上書き置換するリスクがあるため 手順 A (UI) を第一選択とする。

flip 後 verify

1. ブランチ保護設定確認 (§Confirmation 4)

gh api repos/BizLinkPartners/bizlp-gas-accounting/rules/branches/main | \
  jq -r '.[] | select(.type=="required_status_checks") | .parameters.required_status_checks[].context'

出力に adr-lint · test · ui-test · reinforcement-checklist の 4 個が含まれていることを確認する。

2. 実 PR での動作確認

flip 後 30 分以内に発行される新 PR で 3 workflow が 必須検証として blocking 対象になる ことを目視で確認する。CI 実行中は merge button が disabled になり、いずれか 1 つでも FAIL なら merge button は「Merge blocked by 1 failing check」と表示される。

撤退 (rollback)

flip 直後に想定外の広範囲阻止が発生した場合:

  • 手順 A (UI): Settings > Rules > Rulesets で追加した 3 個を削除して save
  • 手順 B (gh api): 上記の /tmp/main-protection-before.json--method PUT で復元

撤退実行の判断基準は draft §8 撤退条件 (1-8):

  • §8-1 (セキュリティ違反 · admin bypass 発見) → 即時 admin enforce 再有効化
  • §8-2 (PR 阻止率 > 60% 継続 2 ヶ月) → 警告に戻す
  • §8-8 (阻止率 30% 超で 30 日改善率 < 10 ポイント/月) → ui-test のみ警告に戻す (部分緩和)

継続監視 (Phase 2 完了後)

  • 必須化後 30 日 KPI (§Confirmation 5): PR 阻止率 30-60% 範囲 (weekly · 逸脱時 §8-2/§8-8 撤退条件で判断)
  • 必須化後 60 日 KPI (§Confirmation 6): PR 阻止率 < 5% + main クローン作業時間 1-2 分 (monthly)
  • 必須化後 90 日 KPI (§Confirmation 7): 継承技術的負債数 = 0 + マージキュー連鎖失敗発生率 = 0 (quarterly)
  • ROI 月次モニタリング (§Confirmation 8): 月次 ROI (削減分 - 継続運用分) が 2 ヶ月連続マイナスでないこと (monthly · §8-7 撤退条件)

関連

  • ADR-0198 本体: docs/adr/0198-mandate-essential-automated-validation-to-prevent-tech-debt.md
  • ADR-0159 (main = orchestrator · CI 配線)
  • ADR-0197 §3.2 (handover 起票時 order-needs-approval 判定)
  • ADR-0196 (Dependabot 週次自動マージ · ui-test 条件付き免除の根拠)
  • 起案フロー配線 (.claude/rules/handover.md · CLAUDE.md §Prohibited): PR #5648 で shipping
  • lint 配線 (ui-test 3 設定 · ubuntu 固定 · threshold · Dependabot 免除): PR #5649 で shipping
  • SOC 2 監査証跡管理 doc (§Confirmation 3 の記録先): docs/_internal/06_ops/soc2-evidence-log.md (未整備なら Phase 2 flip 前に新設)