• Status: Accepted (本 PR merge = 受理の規約により 2026-06-20 受理・代表取締役判断)
  • Mode: Standard
  • Kruchten Type: Executive/Property
  • Scope: platform
  • Implementation Status: Not Started
  • 起案者: [email protected]
  • 起案日時 (JST): 2026-06-20 02:08
  • 承認日時 (JST): 2026-06-20 15:49
  • Approver Role: platform
  • Approver Who: [email protected]
  • Driver: [email protected]
  • Consulted: Decision Pipeline AI 審査 (Gate 0-4)

コンテキスト

§1.1 背景

同一モノレポ bizlp-gas-accounting を 4 クローン {main, doc, ocr, drp} に分離し役割ごとにファイル編集境界を分けて並行運用している (ADR-0156)。Phase D (2026-06-17・PR #2074 / #2075) のクローン集約で ~/projects/bizlp/{main, doc, ocr, drp} に整列したが、MAS (GAS 会計本体) は依然として main クローンの mas/ サブディレクトリに同居している。

§1.2 現状 (As-Is)

独立クローン化された drp / ocr / doc の 3 ドメインと対称ではない非対称構造が MAS にのみ残る。main セッションは orchestration (ADR/DRP 起案・横断 docs・CI 配線・tasks/prompts inbox 発火) と GAS 実装の両責務を持つ。memory [background-agent-branch-bundling] に並行作業衝突の事故事例 4 件 (うち 2026-06-10 単日 3 件) が記録されている。memory [open-dir-by-domain] は「DRP=drp/、GAS/横断=ルート、docs=-doc/-sub」と cwd 切替を要求しているが、MAS は cwd=ルートで両責務を兼ねる。

§1.3 課題

  • 並行作業衝突 (構造的): main セッションの責務二重化により branch / worktree 取り合いが構造的に発生。事故事例 4 件 (2026-06-10 単日 3 件) は drp / ocr が独立クローン化で構造解消したが MAS は未解消。
  • 役割分担の非対称: 「dir 名 = 役割名 = handover 命名」標準化 (ADR-0156) 後、MAS だけ main 同居の例外が残り、新規参画者 (Jr 2026-10 入社想定) の onboarding 説明コストが恒久残存。
  • nested CLAUDE.md ロードの非対称: MAS は最初の一手で専属規律を on-demand ロードする経路が確立できない。

§1.4 制約・要件

  • memory [full-clone-uniformity] L11 が sparse-checkout / サブディレクトリ切り出し / 別 repo 化を禁則化。
  • workspace_rules.md L16 が「worktree は git 操作が干渉しやすいため非推奨」と明示。
  • cross-cutting 依存 (webapp_client/scripts/sync-engines.mjs / scripts/docs-build.mjs / scripts/pre-push-check.sh / .github/workflows/deploy.yml paths='mas/**' / .github/workflows/adr0129-rules-loading-lint.yml) を破壊しない。
  • ADR-0156 (4 クローン構成) と整合する amends 関係で拡張。
  • Jr 入社 (2026-10) 前に onboarding 整備完了。

§1.5 目標 (To-Be)

~/projects/bizlp/mas/ を 5 つ目のフル clone (同 origin) として新設し OCR/DRP/doc と完全対称な 5 クローン構成へ拡張。main クローンは GAS 実装権限を喪失 (論理層) し orchestration に純化。Non-Goals: origin 側 mas/ 物理削除・.clasp.* 物理削除・別 repo 化は採用しない。

決定

~/projects/bizlp/mas/ を bizlp-gas-accounting の 5 つ目のフル clone (同 origin・別 directory) として新設し OCR/DRP/doc と完全対称な 5 クローン構成へ拡張する。main クローンの GAS 実装権限剥奪は 4 段の論理ガード (①main 用 CLAUDE.local.md 新規作成で編集可/読み取り専用リスト宣言 / ②main package.json から GAS push/deploy scripts 9 件 (push:dev / push:prod / deploy:dev / deploy:prod / switch:dev / switch:prod / open:dev / open:prod / status) を削除し mas 側で新設 / ③scripts/hooks/pre_bash_guard.sh に cwd 判定追加 ($PWD ~ ~/projects/bizlp/main かつ mas/** touch で permissionDecision=ask) / ④workspace_rules.md ファイル担当マトリクスを 5 列化) で実装する。Phase a (2026-07-15 期限) / Phase b (2026-07-31 期限) / Phase c (2026-08-31 期限) で段階移行する。

Phase内容担当領分完了期限
Phase aworkspace_manifest.yaml に mas clone エントリ追加 + workspace_rules.md マトリクス 5 列化 + main 用 CLAUDE.local.md 新規作成 + root CLAUDE.md 索引 1 行修正 + 本 ADR 受理main2026-07-15
Phase bmas clone の物理新設 (git clone 手元実行) + main package.json から GAS scripts 9 件削除 + mas package.json に GAS scripts 9 件新設 + memory project_mas_clone_separation 新設 + memory open_dir_by_domain 改訂mas (新)2026-07-31
Phase cscripts/hooks/pre_bash_guard.sh に cwd 判定追加 + tracking docs (BUG_tracking.md / changelog.md / git_workflow.md / hooks_setup.md / todo_master_tables.md ほか 37 ファイル) に「MAS 実装は mas clone を参照」注記追加 + rollback runbook 追加mas (新)2026-08-31

判断基準 (Decision Drivers)

3.1 評価軸

#重要度 (係数)案件特有の解釈
1#usableMust (×2.0)並行作業衝突回避 + 役割分担対称化を構造的に達成するか
2#maintainableMust (×2.0)認知負荷低減・nested CLAUDE.md ロード最適化・main の責務単一化
3#operableHigh (×1.0)clasp / CI / GAS deploy / audit_log / cross-cutting 依存が保全されるか
4#reliableHigh (×1.0)rollback コスト・stickiness・不可逆性
5#efficientMedium (×0.5)移行工数 (人時 + LLM ドル + PR 本数) と達希の手間

K.O. criterion: Must 軸 (#usable / #maintainable) の score < 3 は不採用。

3.2 評価軸 × 案スコア表

係数採択 案 A (フル clone 新設)案 B (sparse-checkout)案 C (別 repo 完全分離)案 D (現状維持 + 規律強化)
#usable (Must)×2.05231
#maintainable (Must)×2.05242
#operable (High)×1.03325
#reliable (High)×1.04215
#efficient (Medium)×0.53415
加重和 (正規化)0.8770.4620.5380.569
K.O. 通過 (Must ≥3)❌ (#usable=2)❌ (#usable=1)

加重和計算: 満点 = 5、Σ 係数 = 6.5、満点 × Σ係数 = 32.5。

  • 案 A: (5×2 + 5×2 + 3×1 + 4×1 + 3×0.5) / 32.5 = 28.5 / 32.5 ≈ 0.877
  • 案 B: (2×2 + 2×2 + 3×1 + 2×1 + 4×0.5) / 32.5 = 15.0 / 32.5 ≈ 0.462
  • 案 C: (3×2 + 4×2 + 2×1 + 1×1 + 1×0.5) / 32.5 = 17.5 / 32.5 ≈ 0.538
  • 案 D: (1×2 + 2×2 + 5×1 + 5×1 + 5×0.5) / 32.5 = 18.5 / 32.5 ≈ 0.569

K.O. 通過は案 A と案 C。加重和タイブレークで 案 A 採択

検討した代替案 (Alternatives Considered)

  • 案 A: フル clone 新設 (採用)~/projects/bizlp/mas/ を bizlp-gas-accounting の 5 つ目のフル clone (同 origin) として新設。drp / ocr / doc と完全対称な構造で memory [full-clone-uniformity] の禁則 (sparse / 別 repo 化禁止) とも整合。
  • 案 B: sparse-checkout 方式 (不採用)~/projects/bizlp/mas/git clone --filter=blob:none + sparse-checkout で mas/** のみ展開する partial clone。memory [full-clone-uniformity] L11 が「sparse checkout・サブディレクトリのみの切り出し」を明示禁則化しているため #maintainable=2 で K.O. 失格。
  • 案 C: 別 repo 完全分離 (不採用)mas/git filter-repo で履歴ごと bizlp-mas という別 GitHub repo に切り出し。drp / ocr が同一 origin 内の別 clone なのに対し本案だけ別 origin となり 4 クローン対称運用 (ADR-0156) の構造が崩れる。K.O. は形式上通過するが reliable=1 (rollback 事実上不能・ADR-0156 amends の上位 ADR が必要で工数膨大) + 加重和 0.538 で案 A 未満。
  • 案 D: 現状維持 + 規律強化 (不採用) — 物理 clone を新設せず main 同居のまま git worktree + nested CLAUDE.md + .claude/rules/gas.md + pre_bash_guard hook で規律強化。workspace_rules.md L16 自身が「worktree は git 操作が干渉しやすいため非推奨」と明示し動機 (α) を構造的に解消できず #usable=1 で K.O. 失格。

影響 (Consequences)

§5.1 正の影響 (Good)

  • main セッションの責務が orchestration に単一化し、ADR/DRP 起案中に GAS 実装が必要な場面の branch / worktree 取り合い事故が構造的に消える (memory [background-agent-branch-bundling] の事故事例 4 件への構造解)。
  • drp / ocr / doc と完全対称な「dir 名 = 役割名 = handover 命名」が 5 クローン全体に揃い、Jr 入社 (2026-10) 時の onboarding 例外説明コストがゼロ化 (ADR-0156 §5.1 の精神を MAS まで拡張)。
  • memory [open-dir-by-domain] が定める cwd 切替原則が MAS まで一貫し、最初の一手から MAS 専属規律 (.claude/rules/gas.md + 必要に応じて mas/CLAUDE.md) が確実にロードされる。
  • ADR-Y (MAS Build/Verify ライフサイクル) の前提条件「MAS 実装の所在」が確定し ADR-Y の DRP 投入が進められる。

§5.2 負の影響 (Bad)

  • 5 クローン構成への移行は workspace_manifest.yaml / workspace_rules.md / main CLAUDE.local.md (新規) / root CLAUDE.md の 4 ファイル改訂 + 本 ADR 起案で 16-24 人時を要し LLM コスト $40-80 が発生する。
  • 移行期 (Phase b 完了〜Phase c 完了の数週間) は main と mas の両方に .clasp.* (tracked) と GAS push 経路が物理的に存在する期間が生じる。Phase b 最終 PR で「main package.json から GAS scripts 9 件削除」を atomic に実施するが、PR マージからローカル pull 完了までのタイムラグ (数日〜数週間) は main クローンの旧 package.json がキャッシュされ push:prod が実行可能な状態が続き、clasp は楽観的ロックを持たず後勝ち上書きするため本番 GAS が無音でデグレードする経路が残る (盲点 #1)。pre_bash_guard.sh の cwd ガードは Phase c 完了後に初めて機能するため、Phase b 完了〜Phase c 完了の数週間はガードなしの二重 push 期間が本番 GAS に直撃するリスクがある。緩和策として Phase b の DoD に「main クローンの .clasp.jsongit rm し、GAS scripts 削除 PR と .clasp.json 削除 PR を同一 merge train に乗せること」+ deploy.yml の paths フィルタと cron トリガーを mas クローン専用ブランチのみに書き換えるチェックリストを追加する。
  • webapp_client cross-clone 同期リスク (盲点 #2): mas クローンで mas/400_domain を編集しコミット後、main クローンで git fetch を忘れると古いコミットを参照した sync-engines.mjs が実行され本番 HTML テンプレートとエンジンが乖離したまま push される経路がある。pre-push-check.sh L36-41 は drift を検知するが fetch 漏れによる乖離は検知前に push が通る。緩和策: webapp_client cross-clone runbook の骨子 (コマンド列・確認チェックリスト) を Phase b の DoD に含める。代替設計として mas clone push 時に GitHub Actions が sync-engines.mjs を実行し artifact を main へ自動 PR する案も Phase b 着手前に実現可否を評価する。

§5.3 中立・トレードオフ (Neutral / Trade-offs)

  • 既存 drp / ocr クローンの CLAUDE.local.md (本 ADR 採択時点で「main = GAS 実装」前提で書かれている) は古くなる。drp / ocr CLAUDE.local.md の文言を「GAS 実装は mas clone 担当」へ書き換える雛形提示を Phase a に含める。
  • mas クローン用の Claude スペース (~/.claude/projects/-Users-ts-kuma-projects-bizlp-mas/) が新規発生し memory 索引の住み分け要 (drp clone 分離時の前例: main から 8 件移管・auth 系は main 残置)。memory 所在マップ未定義リスク (盲点 #3): GAS 関連 memory ([gas-run-infinity-null] / [clasp-push-silent-skip] 等) の所在判断を「Phase b で行う」と先送りすると、横断障害発生時にどのスペースの memory を参照すべきか判断できず MTTR が伸びる。Jr エンジニア (2026-10) 初回オンコール時点で分断が解消されていないリスク。緩和策: Phase b 完了時に「memory 所在マップ」を docs/_internal/05_how-to/workspace_rules.md に追記し横断障害用参照順序 (main → mas → drp) を明示 (Confirmation #9 として KPI 化)。
  • webapp_client/ は main クローン残置で SPA build artifact (webapp_client/scripts/sync-engines.mjsmas/400_domain → src/engines/pre-push-check.sh L36-41 の mas/templates/*.html drift 検知) は同一 origin/同一 commit の共有経路で機能する。mas クローン owner は SPA build artifact のコミット手順を fetch + commit のシーケンスで実行する (Phase b で runbook 化)。mas クローン固有の webapp_client cross-clone 待ち合わせ手順は drp / ocr / doc には存在しない新たな非対称性を生む (盲点 #7)。Confirmation テーブルに「mas クローン固有手順書が Phase b 完了時点で存在し Jr エンジニアがレビューして理解できる」を KPI #10 として追加し、onboarding 例外ゼロの定義を「mas 固有手順の文書化完了」まで含む形に拡張する。

撤退条件 (Rollback Plan)

  • 3 ヶ月後 (2026-10) ロールバック判定: Phase b 完了から 3 ヶ月時点で memory [background-agent-branch-bundling] と同型の MAS↔ADR/DRP 並行作業衝突が 2 件以上 再発した場合 → 案 A 全体を revert し案 D へ撤退。判定は git log --grep='並行セッション\|commit 混入' --since=Phase-b-merge でカウント + handover/memory での衝突言及件数。ただし検証有効条件 (盲点 #6): 3 ヶ月間に MAS 実装タスクが mas clone で 5 件以上実行されていない場合は「検証機会なし」とみなし検証期間を 3 ヶ月延長する。
  • 6 週間後 (2026-08 中旬) 認知負荷判定: Phase b 完了から 6 週間時点で達希の主観的認知負荷 (mas clone の cwd 切替・GAS push 前の cwd 確認・webapp_client build artifact の cross-clone 待ち合わせ) が main 同居時より明確に増加し生産性が低下したと達希が判断した場合 → mas clone を保留 (休眠) し main 同居に戻す。判定は達希の自己申告 + gh run list --workflow=deploy.yml --created='>Phase-b-merge' で GAS 週次デプロイ回数の前後比較 (移行前比 50% 以上の低下 を境界)。
  • stickiness デッドライン: Phase b 完了から 6 週間時点で mas clone を前提とした後続 ADR が 3 本以上 Accepted 化されたら rollback は実質不可とみなし本 ADR を恒久化。判定は adr-index.jsonrelates_to 集計で機械検証可能。
  • webapp_client パイプライン部分撤退: webapp_client → mas/templates/*.html の commit パイプラインが安定稼働せず pre-push-check.sh の drift 検知が誤検知/見逃しで 3 回以上 事故った場合 → 案 A 全体は止めず webapp_client を mas clone 同梱に切り替える部分 rollback で対応 (完全 revert ではない)。
  • rollback コスト: 16-24 人時 + 5-7 PR (mas clone 側 commit の reverse / workspace_manifest.yaml 5→4 戻し / workspace_rules.md マトリクス 4 列化 / main CLAUDE.local.md 削除 / root CLAUDE.md 索引 1 行 revert / memory project_mas_clone_separation の ARCHIVE.md 移動 / ADR-0156 amends 関係を Superseded 化する新 ADR 起案) + LLM $25-40。

コスト試算

項目楽観値最悪値 (各 Phase で 1 回手戻り発生)
Phase a (workspace_manifest + workspace_rules + main CLAUDE.local.md + root CLAUDE.md 修正 + 本 ADR 起案 + DRP Cross-Validation 受理待ち)4-6 人時約 6-9 人時
Phase b (mas clone 新設 + package.json 移送 + memory 新設・mas 起票)6-10 人時 (mas clone セットアップ + 物理移送 PR 3 本 + memory 新設)約 10-15 人時 (CI fail 3 回想定)
Phase c (pre_bash_guard cwd 判定 + tracking docs 37 ファイル注記 + rollback runbook・mas 起票)6-8 人時 (cross-cutting 注記 + lint 追加 + runbook)約 12-16 人時 (37 ファイル中 10 ファイル注記漏れ再起票想定)
初期合計16-24 人時30-40 人時 (盲点 #4)
LLM 課金$40-80 (本 ADR 起案 $5-10 + Cross-Validation 1-2 ループ $5-10 + Workflow 多面評価 1 走分 $30-60 — 既消費)$80-120 (context window 圧迫による再起動増加分込み)
達希の手間初回 mas clone セットアップ 2-3 人時 + 慣れるまで 1-2 セッション (cwd 切替・GAS push 前 cwd 確認・webapp_client build artifact 待ち合わせ)
年間運用5 クローン構成の scripts/workspace-manifest-lint.mjs 検証 (CI) 約 0.1 人時/月。drift 予防 grep (CI WARN) は ADR-0156 と同基盤

Phase c の 37 ファイル注記作業は scripts/add-mas-clone-note.sh 等の sed/awk 一括挿入スクリプトの実現可否を Phase b 着手前に評価する。判断基準として「自動化不可能なファイル数が 10 を超える場合は自動化必須」を設定する (盲点 #5 緩和)。

ROI: 動機 (α) 並行作業衝突の構造解消 (memory [background-agent-branch-bundling] で記録された 2026-06-10 単日 3 件の事故が毎月発生していた場合、月 1-2 人時の事故対応工数が消える) + 動機 (δ) 役割対称化による Jr 入社 (2026-10) onboarding 整備 (例外説明コストゼロ化)。初期 16-24 人時は Jr 入社前の整備として 2026-09 末までに完了を目指す。

Confirmation

#指標 (KPI)目標値検証手段実行頻度違反時対応
1workspace_manifest.yaml の clones 配列が 5 要素 (main, doc, ocr, drp, mas)5 件scripts/workspace-manifest-lint.mjs の REQUIRED_CLONE_KEYS 検証CI (PR ごと)lint fail で merge ブロック
2workspace_rules.md のファイル担当マトリクスで mas/000_infra/ 行が main 列 × / mas 列 ○完全一致grep + manifest 一致 lintCI (PR ごと)lint fail で merge ブロック
3main クローン用 CLAUDE.local.md が新規作成され編集可/読み取り専用リストが明示ファイル存在 + リスト 2 行以上達希の手元で ls /Users/ts_kuma/projects/bizlp/main/CLAUDE.local.md (gitignore のため CI 検証不可)Phase a 完了時に達希確認不存在なら Phase a 起票やり直し
4main package.json から GAS push/deploy scripts 9 件が削除され mas package.json に同等 9 件が新設完全移送 (差分ゼロ)jq '.scripts | keys[] | select(startswith("push") or startswith("deploy") or startswith("switch") or startswith("open") or . == "status")' で main=0 / mas=9Phase b 最終 PR の CI差分残存で merge ブロック
5scripts/hooks/pre_bash_guard.sh に cwd 判定が追加され $PWD ~ ~/projects/bizlp/main + mas/** 触り = ask が動作hook 関数存在 + テスト 1 件 passscripts/hooks/test_pre_bash_guard.sh の cwd=main + cmd=mas/* で ask 返却テストCI (PR ごと)テスト fail で merge ブロック
6ADR-0156 ↔ 本 ADR の双方向辺 (amends / amended_by) が一致一致scripts/adr-lint.mjs --check-edges --enforceCI (PR ごと)lint fail で merge ブロック
73 ヶ月後 (2026-10) MAS↔ADR/DRP 並行作業衝突件数 (検証有効条件: 期間中に MAS 実装タスクが mas clone で 5 件以上実行)0 件 / 月 (許容 1 件未満・2 件以上で rollback)git log --grep='並行セッション|commit 混入' --since=Phase-b-merge + handover/memory での衝突言及件数 + MAS 実装 PR 件数集計月次手動2 件以上で rollback 検討。MAS 実装タスク 5 件未満なら検証期間を 3 ヶ月延長
86 週間後 (2026-08) GAS 週次デプロイ回数の前後比較移行前と同等 (±20%)gh run list --workflow=deploy.yml --created='>Phase-b-merge' を月次集計月次手動50% 以上の低下で達希認知負荷判定
9memory 所在マップが docs/_internal/05_how-to/workspace_rules.md に追記され横断障害用参照順序 (main → mas → drp) が明示セクション存在 + 表 1 件以上grep で「memory 所在マップ」見出し検出 + 参照順序記述検証Phase b 完了時 CI不存在で merge ブロック
10mas クローン固有手順書 (webapp_client cross-clone runbook) が Phase b 完了時点で存在し Jr エンジニアがレビューして理解できるrunbook ファイル存在 + コマンド列 + 確認チェックリスト記載grep で runbook ファイル検出 + Jr レビュー署名 (handover 記録)Phase b 完了時 + Jr 入社 (2026-10) 時不存在で Phase b 完了を取り消し

参照 (References)

  • 関連 ADR:
    • ADR-0156: ワークスペース役割名を sub から doc へ統一 — Amends — 「4 クローン {main, doc, ocr, drp}」を「5 クローン {main, doc, ocr, drp, mas}」へ拡張する。ADR-0156 §1.5 To-Be 表 / Confirmation #1 を本 ADR で書き換える。受理後に ADR-0156 frontmatter amended_by: [ADR-XXXX] を双方向辺として追記する。
    • ADR-0152: UC スライス開発ワークフローを DRP discovery と MAS GAS-MVP の 2 ライフサイクルに構造分割 — 補完 — umbrella ADR-0028 を ADR-X (DRP Discovery) / ADR-Y (MAS Build/Verify) に分割する親 ADR。本 ADR は ADR-Y の前提条件「MAS 実装の所在」を確定する (軸違いで refines ではなく relates_to)。
    • ADR-0028: 6 段階ワークフロー UC スライス開発 CD GAS-MVP — 並立 — UC スライス 6 段ワークフローの umbrella ADR (status: accepted → umbrella 化予定・ADR-0152 §決定)。本 ADR の決定範囲 (workspace 物理層) と ADR-0028 (ワークフロー段階定義) は直交。
    • ADR-0129: CLAUDE.md 階層化 + path-scoped rule — 補完 — 本 ADR は ADR-0129 の枠組み (nested CLAUDE.md / path-scoped rule のロード機構) を 5 クローン目に拡張するのみで枠組み変更なし。
  • 関連 PR/Issue:
    • PR #1636 (2026-06-10): MAS を mas/ 配下に集約 (前提条件)
    • PR #2074 (2026-06-17): workspace_manifest.yaml 新設 + drp clone 反映 (本 ADR の Phase a が踏襲するパターン)
    • PR #1904 (2026-06-12): OCR クローン分離 (本 ADR の前例)
  • 外部資料 (memory):
    • memory [full-clone-uniformity]: フル clone のみ・sparse / 別 repo 化禁則
    • memory [background-agent-branch-bundling]: 並行作業衝突の事故事例
    • memory [open-dir-by-domain]: cwd 切替原則・本 ADR 受理で MAS 行追加
    • memory [subsystem-naming-convention]: ドメイン名称・役割名
    • memory [ocr-clone-separation]: 本 ADR の前例 memory