ADR-0198 Phase 2 flip 手順 memo (代表取締役 op 用)
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.yml | ADR 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-linttestui-test
Do not require status checks on creation は既存設定を維持 (現在 OFF)。Require branches to be up to date before merging (strict) も既存設定維持 (現在 ON)。
続いて Bypass list の管理者 bypass を無効化し、Restrict deletions と Block 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 前に新設)