[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JWYAMRDFAGG5XYD4899V71":3,"skill-same:01M6JWYAMRDFAGG5XYD4899V71":59},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M6JWYAMRDFAGG5XYD4899V71","xddp-05-arch",null,"tsuna44\u002FXddpSettings","tsuna44","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F84987382?v=4","01M6JWX5PY45PD3W2131F7VMF4","01M6JWX5VFK80TQBJJY8SHAE4N",1,"MIT","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002FSKILL.md",[],[17,18],"arch","xddp 05 arch","2026-11-10 10:12:30",false,"---\nname: xddp-05-arch\ndescription: XDDP フェーズ3: 実装方式検討メモ（DSN）を作成し、AIレビュー→修正ループを実施する。「方式検討して」「実装方針を決めて」などで起動する。\nargument-hint: \"[CR番号] [--detail | --from-step-c]\"\n---\n\nYou are orchestrating **XDDP Step 05 (process step 5) — Implementation Approach Design**.\n\n> The implementation approach chosen here shapes build quality and maintainability for the life of this code. A poorly examined recommendation means months of rework. Orchestrate with depth — every tradeoff deserves honest comparison.\n\n**Arguments:** $ARGUMENTS = [CR_NUMBER] (optional) [--detail | --from-step-c]\n- `--detail`: 詳細図だけを生成する（Step B3）\n- `--from-step-c`: Step C（採用案の波紋調査の採用・SPO の仕上げ・CRS へのフィードバック）から再開する\n\n---\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## CR Resolution\" with $ARGUMENTS → let `CR`, `REST_ARGS`.\nLet `TODAY` = today's date.\n\n(xddp.config.md lookup done in xddp-common\u002FSKILL.md「## CR Resolution」; reuse WORKSPACE_ROOT, XDDP_DIR,\nREPOS_MAP, REPOS_KEYS, IS_MULTI, DOCS_DIR, DOCS, CR_PROFILE, DEVELOPMENT_MODE, EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH,\nSPECOUT_MAX_AFFECTED_FILES, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_DIAGRAM_LEVEL, SPECOUT_SEQUENCE_LEVELS, SPECOUT_BACKEND,\nSPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, SPECOUT_WAVE_HIT_BUDGET,\nSPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS, SPECOUT_SLICE_PYTHON_BIN.\n`SPECOUT_HIT_FILTER` は未指定時 `conservative`。`SPECOUT_CLASSIFY_CHUNK_SIZE` は未指定時 `40`、`SPECOUT_CLASSIFY_PARALLEL` は未指定時 `4`。\n`MAX_WAVE_DEPTH` は未指定時 `6`、`SPECOUT_WAVE_HIT_BUDGET` は未指定時 `10000`、`SPECOUT_LLM_HIT_BUDGET` は未指定時 `160`、\n`SPECOUT_SLICE` は未指定時 `auto`、`SPECOUT_SLICE_IGNORE_CALLS` は未指定時 空、`SPECOUT_SLICE_H_AS` は未指定時 `auto`、\n`SPECOUT_SLICE_PYTHON_BIN` は未指定時 空、`SPECOUT_MAX_AFFECTED_FILES` は未指定時 `20`。)\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Resolve Affected Repos\" with:\n  REPOS_KEYS: {REPOS_KEYS}, IS_MULTI: {IS_MULTI}, CR_PATH: {CR_PATH}, FILTER_BY_SPO: false\n→ let `AFFECTED_REPOS`.\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Resolve HAS_CROSS\" with:\n  IS_MULTI: {IS_MULTI}, ARTIFACT_PATH: {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md\n→ let `HAS_CROSS`.\n（本工程は直前工程＝specout の cross SPO の有無で cross 処理要否を判断する）\nLet `DETAIL_MODE` = (`REST_ARGS` に `--detail` が含まれる). If `DETAIL_MODE` = true: skip to Step B3.\nLet `FROM_STEP_C` = (`REST_ARGS` に `--from-step-c` が含まれる). If `FROM_STEP_C` = true:\n  Run via Bash: `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 5`\n  → 出力の `detail`（工程5の詳細ステップ）が `Step C:` で始まる場合だけ（Step C の冒頭の Progress Update を記録済み＝人レビューゲートを\n  通過済み）、Step 0〜B3 を飛ばして Step C から行う。それ以外は「`--from-step-c` は Step C の途中で止まった場合にだけ使えます。\n  `\u002Fxddp-05-arch {CR}` を実行してください」と伝えて停止する。\n\nLet `ARCH_TEMPLATE_PATHS` =\n  INDEX_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-template.md\n  APPROACH_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-approach-template.md\n  COMPARISON_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-comparison-template.md\n（{repo} に依存しないため、Step A\u002FB\u002FB3 のどの独立ループからもこの1箇所の定義をそのまま参照できる）\n\nLet `ARCH_CALL_SHARED` =\n  CR_NUMBER: {CR}\n  TODAY: {TODAY}\n（{repo} に依存しないため、ARCH_TEMPLATE_PATHS と同じ理由で Step A\u002FB\u002FB3 のどの独立ループからも\nこの1箇所の定義をそのまま参照できる。REPO_NAME はループ変数のため各呼び出し箇所に個別記述のまま残す）\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-rules\u002Fxddp.arch.rules.md` to get `ARCH_RULES`\n（{repo} に依存しないため、Step A-cross・Step A の両方——Step A の `For each {repo}` ループ内にある\narchitect agent 呼び出しの `ALTERNATIVES_TASK: {pass ARCH_RULES content as-is}` 行を\n含む——から、この1箇所の定義をそのまま参照できる。二重読み取りを避けるためここで1回のみ実施する。\n本注記は上記 `ARCH_TEMPLATE_PATHS` 注記と同一形式のスコープ継続性注記である）.\n\n## Step -1: CR_PROFILE Check\n\nIf `CR_PROFILE` = `quick`:\n  1. If `HAS_CROSS` = true（ファイル冒頭の `## Resolve HAS_CROSS` で解決済み。マルチリポジトリかつ\n     `{CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md` が存在する場合）:\n     a. 本ファイルの「## Step A-cross: Generate cross\u002FDSN (API-first principle — only when HAS_CROSS = true)」\n        の手順をそのまま実行し、`{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md` を生成する\n        （per-repo の方式比較は行わない。quick では cross インタフェース契約のみを確定させる）。\n     b. 本ファイルの「## Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)」の手順を\n        そのまま実行する（`## Cross Artifact Review` は元来1パス構成であり、`MAX_ROUNDS_OVERRIDE` の\n        対象外）。\n     c. 本ファイルの「## Step C: Feed Architecture Decision Back to CRS」の手順をそのまま実行し、\n        cross DSN で確定したインタフェース仕様・新規制約等を CRS へ反映する（per-repo の Step A が\n        未実行のため per-repo DSN ファイルは存在しない。Step C 側の読み込みには存在確認を追加済み\n        — 本節末尾参照。本プランレビュー指摘 #1 の是正）。\n     d. 本ファイルの「## Step D: Regenerate CRS Excel (UR-016)」の手順をそのまま実行する（Step C で\n        CRS が更新された場合のみ実行、という既存条件のとおり）。\n     e. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n          CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ（quick: cross DSN のみ生成）,\n          DETAIL_STEP: `-`,\n          ARTIFACT_LINK: `[cross\u002FDSN-{CR}-cross.md](05_architecture\u002Fcross\u002FDSN-{CR}-cross.md)`\n        （`## Step E: Update progress.md` は使わない。理由は本節冒頭「採用する対策」参照 —\n        `xddp-set-profile\u002FSKILL.md` の判定文字列との整合を保つため）。\n     f. 次に実行すべきコマンド → `\u002Fxddp-06-design {CR}`\n     g. ユーザーに通知:\n        > `CR_PROFILE: quick` のため、工程5（実装方式検討）の per-repo 方式比較はスキップし、\n        > リポジトリ間インタフェース契約（cross DSN）のみ生成しました。cross DSN の内容は\n        > CRS へフィードバック済みです\n        > （工程6a の cross CHD・工程9 の cross TSP・工程11 の `latest-specs\u002Fcross\u002Finterfaces\u002F` が\n        > これを必要とするため）。\n        > **次のコマンド:** `\u002Fxddp-06-design {CR}`\n     h. Stop.\n  2. Else（`HAS_CROSS` = false。シングルリポジトリ構成、または cross SPO が存在しない場合）:\n     a. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n          CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ（対象外）, DETAIL_STEP: `-`\n     b. 次に実行すべきコマンド → `\u002Fxddp-06-design {CR}`\n     c. ユーザーに通知:\n        > `CR_PROFILE: quick` のため、工程5（実装方式検討）はスキップします。\n        > **次のコマンド:** `\u002Fxddp-06-design {CR}`\n     d. Stop.\n\n## Step 0: Reference Current Specs\n\n（`CR_PROFILE` = `full` の場合のみ到達）\n\nFor each `{repo}` in `AFFECTED_REPOS`:\nLet `SPO_SUMMARY` = `{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md`.\nIf `SPO_SUMMARY` does not exist: let `CURRENT_SPECS_REFS[{repo}]` = [] (note \"SPO 未存在のためスキップ\") and continue with the next repo.\nRead `SPO_SUMMARY` to identify affected module names.\nLet `SPEC_FILE_PATHS` = [].\nFor each affected module `{mod}`:\n  - Primary:  `{XDDP_DIR}\u002Flatest-specs\u002F{repo}\u002F{mod}\u002Fspec.md` (if exists) → append to `SPEC_FILE_PATHS`\n  - Fallback: `{DOCS}\u002F{repo}\u002Fspecs\u002F{mod}\u002Fspec.md` (if primary absent and DOCS exists) → append to `SPEC_FILE_PATHS`\nIf neither path exists for a module: note as \"現状仕様なし（初回 CR）\".\nLet `CURRENT_SPECS_REFS[{repo}]` = `SPEC_FILE_PATHS` (may be empty).\n\n## Step 0.5: Mark In-Progress\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step A: DSN生成中`\nIf `IS_MULTI`, append per-repo progress table for step 5:\n```markdown\n## 工程5 実装方式検討進捗（リポジトリ別）\n| リポジトリ | DSN生成 | レビュー | 完了日 |\n|---|---|---|---|\n{for each repo in AFFECTED_REPOS: | {repo} | ⏳ 未着手 | ⏳ 未着手 | - |}\n{if HAS_CROSS: | cross | ⏳ 未着手 | ⏳ 未着手 | - |}\n```\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fsnapshot-phase-baseline.md`, apply \"## Snapshot Phase Baseline\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5\n\n## Step A0: Reference Lessons Learned Log\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-lessons-context.md`, apply \"## Load Lessons Context\" with:\n  LESSONS_FILE: {XDDP_DIR}\u002Flessons-learned.md\n  TARGET_TAGS: [#方式検討, #設計, #リスク, #依存関係]\n→ let `LESSONS_CONTEXT`.\n\n## Step A-cross: Generate cross\u002FDSN (API-first principle — only when HAS_CROSS = true)\n\n**API-first principle:** Establish the interface contract (cross\u002FDSN) before per-repo approach design.\n\n（`ARCH_RULES` は `DETAIL_MODE` 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。\nStep A の architect agent 呼び出しの `ALTERNATIVES_TASK` を含め、本ファイル内のどこからでも参照可能）\nRead `{XDDP_DIR}\u002Fproject-rulebook.md` (shared) and `{XDDP_DIR}\u002Fproject-rulebook-cross.md` (if exists) as `CROSS_RULEBOOK_CONTEXT`.\n\nGenerate `{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md` (write directly, not via agent):\n- Read `{CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md`\n- If `CROSS_RULEBOOK_CONTEXT` is non-empty: apply its naming conventions and interface\n  constraints (project-rulebook.md §2 命名規約 \u002F project-rulebook-cross.md §2 API バージョニング\n  規約・§3 インタフェース命名規則) when designing the interface in Section 3.\n- Content must include:\n  - Section 2: クロスリポジトリ実装方式（how inter-repo interfaces will be implemented）\n  - Section 3: インタフェース設計（API signatures, message schemas, shared types — concrete enough for CHD）\n  - Section 4: 実装依存順序（which repo's changes must be built first）\n  - Section 5: リスクと軽減策\n\nIf cross\u002FSPO does not exist → skip this step.\n\nIf cross\u002FSPO exists（= 上記の cross\u002FDSN 生成を実行した場合）かつ `IS_MULTI`:\n  per-repo progress table を更新: `| cross | ✅ 完了 | ⏳ 未着手 | - |`\n\n## Step A: Generate per-repo Architecture Memos\n\n（`ARCH_RULES` は `DETAIL_MODE` 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。\nStep A の architect agent 呼び出しの `ALTERNATIVES_TASK` を含め、本ファイル内のどこからでも参照可能）\n\nLet `REPO_WARNINGS_MAP` = `{}`（空の辞書。key: repo名 → value: その repo の `WARNINGS` リスト。\nStep B2 でこの辞書を参照して全 repo の警告をまとめて提示するため、for-each ループの外側で宣言し、\nループの全イテレーションを通じて保持する）。\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n  CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n→ let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-steering-context.md`, apply \"## Load Steering Context\" with:\n  XDDP_DIR: {XDDP_DIR}\n  REPO_NAME: {repo}\n→ let `RULEBOOK_CONTEXT`.\n\narchitect agent を呼び出す前に、以下の SP-ID 照合チェックを実行する\n（設計根拠: docs\u002Fadr\u002FADR-0001-sp-id-check-timing.md）:\n\n**前提確認:** `repo` が `\"cross\"` の場合は SP-ID 照合チェックをスキップし、`ADDITIONAL_CONTEXT` を設定しない（cross\u002F SPO には funcmap が存在しない。architect agent の cross\u002F 代替読み込みロジックで処理する）。\n`repo` が `\"cross\"` 以外かつ `SPO-{CR}-funcmap.md` が存在しない場合も SP-ID 照合チェックをスキップし、`ADDITIONAL_CONTEXT` を設定しない（新規開発モード時は新規開発モード処理で正常動作する。提供されたが存在しないファイルの場合のみ agent 側でエラー停止する）。\n1. CRS §2 の SP-ID 一覧を取得する。方法: CRS ファイルを Read して §2 セクション内に絞り、テーブル行（`\\|\\s*SP-` のパターン — Markdown フォーマッタによる先頭スペース挿入に対応）の第 1 列から識別子を抽出・重複排除する（本文参照・変更履歴等のノイズを排除するため `SP-` プレフィックスを持つセルに限定する）\n2. `SPO-{CR}-funcmap.md` の §1 テーブルの機能ID列（1列目）から SP-ID 一覧を取得する（ヘッダ行・区切り行・テンプレートプレースホルダー行（`{機能ID}` を含む行）を除く・重複排除）\n3. Let `WARNINGS` = `[]`（この repo についての警告リスト）。2つの ID 集合を比較し、以下のケースで `WARNINGS` に追加する:\n   - CRS にあって funcmap にない SP-ID が存在する場合（工程4bでの SP 追加または funcmap 未収録）:\n     「⚠️ funcmap 未収録 SP 項目: {ID一覧}。funcmap は工程4a時点のスナップショットです。これらの SP 項目のシグネチャは CRS §2 を直接照合し、方式比較に組み込んでください。comparison.md「## 4. 採用方式と理由」の懸念事項と対策テーブルに記録してください。」\n   - funcmap にあって CRS にない SP-ID が存在する場合（工程4bでの SP 変更・削除による旧 ID 残存）:\n     「⚠️ funcmap 余剰エントリ: {ID一覧}。CRS §2 に対応する SP 項目が存在しません。方式比較では CRS §2 の最新 SP 項目を正として扱ってください。」\n   - 両者が完全に一致する場合: `WARNINGS` への追加は不要（照合完了のみ記録）\n   `WARNINGS` が空でない場合:\n   - その内容を `ADDITIONAL_CONTEXT` として architect agent 呼び出し時に渡す\n     （agent タスク記述の `ADDITIONAL_CONTEXT:` フィールドとして追記する）。\n   - `REPO_WARNINGS_MAP[repo] = WARNINGS` を設定する（Step B2 で読み出すために永続化する）。\n   `WARNINGS` が空の場合は `ADDITIONAL_CONTEXT` を省略し、`REPO_WARNINGS_MAP` には何も追加しない。\n   **このチェックの結果に関わらず、このイテレーション内でユーザーへの確認を挟まずそのまま architect agent 呼び出しに進み、次の repo のイテレーションへ移る\n   （Step A 内では確認を行わない、という意味であり、Step B2 以降の人レビュー自体は別途実施される）。\n   `REPO_WARNINGS_MAP` に蓄積された全 repo の警告は、Step B2（Human Review Gate）で他のレビュー結果と合わせてまとめて提示する。**\n\n波紋調査の要約と申告のファイルを決める（repo が \"cross\" 以外の場合のみ）:\n- `RIPPLE_DIGESTS[repo]` = Glob `{CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F*\u002Fripple-digest.md` のうち、調査の名前が `initial`・`cross-` で始まるもの\n  と `_removed\u002F` 配下を除いたもの（前の2つは SPO の基礎として §5.0 に入っている。人が足した調査と方式の案ごとの調査を渡す）。\n- `RIPPLE_REQUEST_FILE[repo]` = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002Fwork\u002Fripple-requests.md`。残っていれば削除する。\n\n**Agent tool** `subagent_type=xddp-architect-agent`:\n```\n{ARCH_CALL_SHARED を展開}\nREPO_NAME: {repo}\nCRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\n（{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md が存在する場合のみ追加）SPO_FILE: {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md\n（repo が \"cross\" 以外 かつ {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md が存在する場合のみ追加）FUNCMAP_FILE: {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md\n（{CR_PATH}\u002F04_specout\u002F{repo}\u002Fmodules\u002F が存在する場合のみ追加）SPO_MODULES_DIR: {CR_PATH}\u002F04_specout\u002F{repo}\u002Fmodules\u002F\n{ARCH_TEMPLATE_PATHS の全キーを展開}\nINDEX_FILE: {ARCH_INDEX_FILE}\nAPPROACHES_DIR: {ARCH_APPROACHES_DIR}\n（LESSONS_CONTEXT が空でない場合のみ追加）LESSONS_CONTEXT: {LESSONS_CONTEXT}\nRULEBOOK_CONTEXT: {RULEBOOK_CONTEXT}\nADDITIONAL_REFS: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md (pass if exists — must conform to interface contract)\nALTERNATIVES_TASK: {pass ARCH_RULES content as-is}\n（SP-ID 照合チェックで警告が生成された場合のみ追加）ADDITIONAL_CONTEXT: {ADDITIONAL_CONTEXT}\n（Step 0 で CURRENT_SPECS_REFS[repo] が空でない場合のみ追加）CURRENT_SPECS_REFS: {CURRENT_SPECS_REFS[repo]}\n（RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加）RIPPLE_DIGESTS: {RIPPLE_DIGESTS[repo]}\n（repo が \"cross\" 以外の場合のみ追加）RIPPLE_REQUEST_FILE: {RIPPLE_REQUEST_FILE[repo]}\n```\n\nIf `IS_MULTI`: per-repo progress table を更新: `| {repo} | ✅ 完了 | ⏳ 未着手 | - |`\n\n## Step A-ripple: 方式の案ごとの波紋調査（申告がある場合のみ）\n\n方式検討エージェントが、方式の案で変える既存の識別子の広がりを確かめるために申告した波紋調査を、人の許可を得て実行する\n（SPO には入れずに調べる。採用した案の調査は Step C で SPO に入る）。\n\n1. `RIPPLE_REQUEST_FILE[repo]` のいずれにもデータ行（`| 案 | シンボル | 理由 |` の表の行）が無ければ、本 Step を飛ばす。\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n     CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step A-ripple: 波紋調査の申告の確認中`\n2. 全 repo の申告をまとめて提示し、回答を待つ:\n   > ? 方式検討エージェントが次の波紋調査を申告しました（SPO には入れずに調べます。採用した案の調査は Step C で SPO に入ります）。\n   > | # | repo | 案 | シンボル | 理由 |\n   > - **すべて実行** \u002F **番号を指定して実行**（シンボルを直せます） \u002F **実行しない**\n3. 許可した申告ごとに調査の名前を決める: `arch-{案の小文字}`。`specout_bfs.py run-list --repo-dir {CR_PATH}\u002F04_specout\u002F{repo}` で、\n   同じ名前の調査が同じシンボルの集合なら再利用し（`complete` ならそのまま、`in-progress`・`not-started` なら手順4 で再開する）、\n   違えば `arch-{案の小文字}-2`… の空いている名前にする。新しい調査ごとに Write ツールで\n   `{CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F{名前}\u002Fmeta.json` に `{\"approach\": \"{案}\", \"reason\": \"{理由}\", \"seeds\": [{シンボル…}], \"entry_identity\": \"resolved\"}`\n   を書く（申告の理由は自由文のためシェルの引数で渡さない）。\n4. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-engine-setup.md`, apply \"## Ripple Engine Setup\" with:\n     SPECOUT_SLICE: {SPECOUT_SLICE}, SPECOUT_SLICE_PYTHON_BIN: {SPECOUT_SLICE_PYTHON_BIN}\n   → let `SLICE_PY`, `PROBE_ENGINE`, `EFFECTIVE_SLICE_ENGINE`, `USE_PROBE_WARNING`.\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-run.md`, apply \"## Ripple Run\" with:\n     CR: {CR}, CR_PATH: {CR_PATH},\n     REPO_RUNS: {repo → 許可した調査のリスト（同じ repo の案A・案B は順に回る）。各要素 {run: {名前}, origin: `architect-agent`,\n       symbols: {シンボル…}, meta_file: {上記の meta.json}, entry_identity: `resolved`, adopt: false, adopted_by: `step5`,\n       RERUN_COMMAND: `\u002Fxddp-investigate {CR} ripple --name {名前} --repo {repo}`}},\n     REPOS_MAP: {REPOS_MAP}, SLICE_PY: {SLICE_PY}, PROBE_ENGINE: {PROBE_ENGINE}, EFFECTIVE_SLICE_ENGINE: {EFFECTIVE_SLICE_ENGINE},\n     USE_PROBE_WARNING: {USE_PROBE_WARNING}, TODAY: {TODAY},\n     設定（EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES,\n     SPECOUT_HIT_FILTER, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS,\n     SPECOUT_MAX_AFFECTED_FILES, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, DOCS）\n   → let `DONE`, `FAILED`.\n5. `DONE` に調査がある repo ごとに、architect agent を反映モードで1回だけ再起動する（反映モードでは申告しない。1回の工程5につき1ラウンド）:\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n     CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n   → let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n   **Agent tool** `subagent_type=xddp-architect-agent`:\n   ```\n   {ARCH_CALL_SHARED を展開}\n   REPO_NAME: {repo}\n   INDEX_FILE: {ARCH_INDEX_FILE}\n   APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n   {ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE \u002F COMPARISON_TEMPLATE_FILE を展開}\n   RIPPLE_REFLECT: true\n   RIPPLE_RESULTS: {DONE の各調査について「案{X}: {CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F{名前}\u002Fripple-digest.md」の一覧}\n   ```\n   `RIPPLE_DIGESTS[repo]` に `DONE` の各調査の `ripple-digest.md` を加える（Step B・B2 で使う）。\n6. 見送った申告と `FAILED` の申告ごとに Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py note-add --cr-path {CR_PATH} --step 5 --text \"波紋調査の申告を見送り（{repo} 案{X}: {シンボル}。{人の判断／失敗}）\"`\n   その案の影響範囲は DSN の「未検証」の記述のまま残る。`FAILED` の調査は `\u002Fxddp-investigate {CR} ripple --name {名前} --repo {repo}` で\n   続きから行える（完了後に `\u002Fxddp-05-arch {CR}` を再実行すると、Step A で方式検討エージェントがその要約を読む）。\n\n## Step B: Review Loop (up to `REVIEW_MAX_ROUNDS.DSN` rounds)\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step B: AIレビュー中`\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n  CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n→ let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\narchitect agent 完了後に `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` の存在チェックを行い、\n存在する場合は「2案以上モード」、存在しない場合は「1案モード」として TARGET_FILE を決定する:\n- 2案以上モード: TARGET_FILE = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md`\n- 1案モード: TARGET_FILE = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md`\n\nまた REFERENCE_FILES に approach ファイルを追加する（comparison.md が TARGET の場合）:\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md` （comparison.md が TARGET の場合）\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md` （exists の場合）\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md` （exists の場合）\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Freview-loop.md`, apply \"## Review Loop\" with:\n  DOCUMENT_TYPE: DSN\n  NEXT_DOCUMENT_TYPE: CHD\n  CONFIG_KEY: REVIEW_MAX_ROUNDS.DSN\n  TARGET_FILE: {上記で決定した TARGET_FILE}\n  REFERENCE_FILES: [\n    {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md,\n    （{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md が存在する場合のみ追加）{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md,\n    （repo が \"cross\" 以外 かつ {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md が存在する場合のみ追加）{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md,\n    （comparison.md が TARGET の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md,\n    （exists の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md,\n    （exists の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md,\n    （RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加）{RIPPLE_DIGESTS[repo]}\n  ]\n  REVIEW_OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n  FIXER_AGENT: xddp-architect-agent\n  FIXER_PARAMS:\n    {ARCH_CALL_SHARED を展開}\n    REPO_NAME: {repo}\n    INDEX_FILE: {ARCH_INDEX_FILE}\n    APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n    {ARCH_TEMPLATE_PATHS の INDEX_TEMPLATE_FILE \u002F APPROACH_TEMPLATE_FILE \u002F COMPARISON_TEMPLATE_FILE を展開}\n    REVIEW_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n  PROGRESS_CR_PATH: {CR_PATH}\n  PROGRESS_STEP_NUM: 5\n  METRICS_TARGET: {repo}\n\nIf `IS_MULTI`: per-repo progress table を更新: `| {repo} | ✅ 完了 | ✅ 完了 | {TODAY} |`\n\n## Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)\n\nIf `HAS_CROSS`:\n  Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fcross-artifact-review.md`, apply \"## Cross Artifact Review\" with:\n    CR_PATH: {CR_PATH}\n    STEP_NUM: 5\n    STEP_LABEL: `Step B-cross`\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md\n    REFERENCE_FILES: [\n      {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md,\n      {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md (if exists),\n      for each {repo} in AFFECTED_REPOS:\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md （exists かつ 2案以上の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md （exists の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md （exists の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md （exists の場合）\n      （インデックスファイル DSN-{CR}.md は省略。採用方式・アプローチ詳細が含まれるファイルを直接渡す）\n    ]\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md\n    DOC_DESCRIPTION: `インタフェース仕様・実装依存順序に特化した成果物`\n  If `IS_MULTI`: per-repo progress table を更新: `| cross | ✅ 完了 | ✅ 完了 | {TODAY} |`\n\n## Step B2: Human Review Gate\n\nBuild `INTRO_NOTE` by expanding the following (REPO_WARNINGS_MAP is already resolved in this\nskill's scope; omit `INTRO_NOTE` entirely if REPO_WARNINGS_MAP is empty):\n```\n⚠️ SP-ID 照合チェックで以下の警告が見つかりました（Step A で検出・処理は続行済みです）:\n{for each (repo, WARNINGS) in REPO_WARNINGS_MAP: - {repo}: {WARNINGS の内容}}\n```\n\nBuild `ARTIFACTS_TEXT` by expanding the following (AFFECTED_REPOS\u002FHAS_CROSS are already resolved\nin this skill's scope):\n```\n{for each repo in AFFECTED_REPOS:}\n- {repo}: インデックス `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}.md`\n  - 案A: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md`\n  - 案B: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md` （存在する場合）\n  - 比較: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` （2案以上の場合）\n  - 方式の案ごとの波紋調査の要約（{RIPPLE_DIGESTS[repo] がある場合のみ。調査ごとに1行）: `{要約のパス}`\n  - AIレビュー: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md`\n{if HAS_CROSS:}\n- cross: `{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md`\n  - AIレビュー: `{CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md`\n```\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fhuman-review-gate.md`, apply \"## Human Review Gate\" with:\n  CR_PATH: {CR_PATH}\n  STEP_NUM: 5\n  STEP_LABEL: `Step B2`\n  INTRO_NOTE: {built above, omit if REPO_WARNINGS_MAP is empty}\n  ARTIFACTS_TEXT: {built above}\n  REVISE_COMMAND: `\u002Fxddp-revise {CR} arch`（対象リポジトリを指定）\n  OPTION_NOTE: |\n    **詳細図（構造体関連図・主処理シーケンス図）が必要な場合：**\n    全案を統一粒度で生成します（比較可能な形式）:\n    `\u002Fxddp-05-arch {CR} --detail`\n→ let `CHANGED`.\n\nIf `CHANGED`:\n- For each `{repo}` in `AFFECTED_REPOS`: Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Ffinal-review-pass.md`,\n  apply \"## Final Review Pass\" with:\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` が存在すれば comparison.md、\n      なければ approach-A.md（Step B と同一の判定ロジック）\n    REFERENCE_FILES: {Step B と同一}\n    REVIEW_ROUND: (last_round + 1)\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n- If HAS_CROSS and the user changed cross\u002F DSN: Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Ffinal-review-pass.md`,\n  apply \"## Final Review Pass\" with:\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md\n    REFERENCE_FILES: {Step B-cross と同一}\n    REVIEW_ROUND: (last_round + 1)\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md\n\n## Step B3: Detail Diagram Generation (--detail mode only)\n\n`DETAIL_MODE` = true の場合のみ実行。通常フロー（Step 0〜B2）はスキップ済み。\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n  **cross\u002F はスキップ:** `{repo}` が `\"cross\"` の場合、`DSN-{CR}-cross.md` は\n  approach-*.md 構造を持たないためスキップする。\n  If `{repo}` = `\"cross\"`: continue.\n  （`REPOS:` キーに `\"cross\"` は使用不可（CLAUDE.md 予約名）のため実際には到達しない防衛的ガード）\n\n  If `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}.md` does not exist:\n    Warn the user:\n    > ⚠️ {repo}: DSN が存在しません。先に通常モードで `\u002Fxddp-05-arch {CR}` を実行してください。\n    Skip this repo.\n\n  Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n    CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n  → let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\n  **Agent tool** `subagent_type=xddp-architect-agent`:\n  ```\n  {ARCH_CALL_SHARED を展開}\n  REPO_NAME: {repo}\n  INDEX_FILE: {ARCH_INDEX_FILE}\n  APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n  {ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE を展開}\n  DETAIL_MODE: true\n  ```\n\nReport to user (Japanese):\n> ✅ 詳細図を生成しました。\n{for each repo where repo ≠ \"cross\":}\n> - {repo}: 更新ファイル一覧（INDEX_FILE から発見した approach-*.md）\n\n`DETAIL_MODE` = true の場合、Step C 以降はすべてスキップする。詳細図生成の結果報告は Step B3 内の Report to user で完結する（progress.md の更新もしない）。\n\n## Step C: Feed Architecture Decision Back to CRS\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step C: CRSフィードバック中`\n\n**採用案の波紋調査の採用と SPO の仕上げ:** cross 以外の repo ごとに次を行う。repo ごとの DSN（`DSN-{CR}-comparison.md` も\n`DSN-{CR}-approach-A.md` も）が無い repo は飛ばす（`CR_PROFILE: quick` の Step -1 の経路では repo ごとの DSN が無いため、すべて飛ばされる）。\nLet `O` = `{CR_PATH}\u002F04_specout\u002F{repo}`、`PY` = `command -v python3 || command -v python` の結果、`BFS` = `~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Fscripts\u002Fspecout_bfs.py`。\n1. 採用方式を読む（`DSN-{CR}-comparison.md` の `**採用方式：** 案{X}`。1案モードは案A）。\n2. Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}` → `runs`。由来が `architect-agent` の調査のうち `approach` が採用方式で状態が\n   `complete` のもので、`created` が最も新しい調査があれば、Run via Bash: `\"$PY\" \"$BFS\" run-adopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}`。\n   `adopted_by` が `step5` で採用中のそれ以外の調査（別の案、同じ案の古い調査）を、それぞれ Run via Bash:\n   `\"$PY\" \"$BFS\" run-unadopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}`。人が採用した調査（`adopted_by` が `human`）は変えない。\n   stdout の `changed` が true になった調査を `ADOPTION_CHANGES[repo]` に記録する。\n3. Run via Bash: `\"$PY\" \"$BFS\" finish-needed --repo-dir {O}` → `needed` が true の repo（手順2 で採用が変わった repo と、前回の SPO の仕上げが\n   途中で止まった repo が当たる）について:\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-doc-levels.md`, apply \"## Specout Doc Levels\" with:\n     CR_PROFILE: {CR_PROFILE}, SPECOUT_DIAGRAM_LEVEL: {SPECOUT_DIAGRAM_LEVEL}, SPECOUT_SEQUENCE_LEVELS: {SPECOUT_SEQUENCE_LEVELS}\n   → let `EFFECTIVE_DIAGRAM_LEVEL`, `EFFECTIVE_SEQUENCE_LEVELS`, `EFFECTIVE_SPO_DETAIL_LEVEL`.\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-finish.md`, apply \"## Specout Finish\" with:\n     CR: {CR}, CR_PATH: {CR_PATH}, repo: {repo}, REPOS_MAP: {REPOS_MAP}, ENTRY_POINTS: 空, IS_MULTI: {IS_MULTI}, XDDP_DIR: {XDDP_DIR},\n     DOCS: {DOCS}, EXCLUDE_PATTERNS: {EXCLUDE_PATTERNS}, INCLUDE_EXTENSIONS: {INCLUDE_EXTENSIONS},\n     SPECOUT_MAX_FILES_PER_MODULE: {SPECOUT_MAX_FILES_PER_MODULE}, SPECOUT_MAX_AFFECTED_FILES: {SPECOUT_MAX_AFFECTED_FILES},\n     EFFECTIVE_DIAGRAM_LEVEL: {EFFECTIVE_DIAGRAM_LEVEL}, EFFECTIVE_SEQUENCE_LEVELS: {EFFECTIVE_SEQUENCE_LEVELS},\n     EFFECTIVE_SPO_DETAIL_LEVEL: {EFFECTIVE_SPO_DETAIL_LEVEL}, RERUN_COMMAND: `\u002Fxddp-05-arch {CR} --from-step-c`, TODAY: {TODAY}\n   → let `FINISH_STATUS`, `REWRITTEN_SECTIONS[repo]`, `SPO_BACKUP[repo]`。\n   `stopped` なら、CRS への反映へ進まずに停止し、原因の解消後に `\u002Fxddp-05-arch {CR} --from-step-c` を再実行するよう伝える\n   （採用・取り消しは冪等で、再実行では `finish-needed` が true のままなので SPO の仕上げが再び行われる。入力が変わらなければ\n   document agent は起動しない）。\n4. 続けて下記の CRS へのフィードバックを行う。採用案の影響は DSN（反映モードで書かれた影響範囲）を通じて CRS に入る。\n\nRead all per-repo DSN files: 各 {repo} の comparison.md（2案以上の場合）または approach-A.md（1案の場合）\n（存在する場合のみ。`CR_PROFILE: quick` かつ `HAS_CROSS` = true の経路では Step A が未実行のため\nper-repo ファイルは存在せず対象外となる）、および cross\u002FDSN-{CR}-cross.md（if exists）。\nフィードバック抽出は採用方式・設計指針が記載されているファイルから行う。\nFor each file, extract items that are not yet reflected in CRS (new constraints, NF requirements,\ninterface specs, out-of-scope items). Compose a unified `DESIGN_FEEDBACK` list in the format:\n`種別: {追加UR\u002F追加SR\u002F追加SP\u002F廃止SR\u002F廃止SP} | 内容: ... | 根拠: DSN §X [cross]`\nAppend `[cross]` to items from cross\u002FDSN. Merge per-repo and cross items into one list.\n\nIf the list is non-empty:\n**Agent tool** `subagent_type=xddp-spec-writer-agent`:\n```\nCR_NUMBER: {CR}\nMODE: update-design\nCRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\nDESIGN_FEEDBACK: (the composed list from above)\nTODAY: {TODAY}\nAUTHOR_NOTE: 方式検討フィードバックを反映。採用方式に基づく要求・仕様の追加／削除／変更。\n```\n\n## Step D: Regenerate CRS Excel (UR-016)\n\nRun only if CRS was updated in Step C.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregenerate-crs-excel.md`, apply \"## Regenerate CRS Excel\" with:\n  CR_PATH: {CR_PATH}\n  CR: {CR}\n\n## Step E: Update progress.md\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ✅ 完了, DETAIL_STEP: `-`,\n  ARTIFACT_LINK: `[05_architecture\u002F](05_architecture\u002F)`\nNext command → `\u002Fxddp-06-design {CR}`\n\n## Step F: Report in Japanese\n\nReport: repos, adopted approach per repo, DSN files, review rounds, CRS feedback items.\n加えて、Step A-ripple で実行した波紋調査（repo・案・調査の名前・要約のパス）と、Step C で採用を変えた調査（`ADOPTION_CHANGES`）・\nSPO の仕上げで書き直した節（`REWRITTEN_SECTIONS`）・退避した SPO（`SPO_BACKUP`）を報告する（SPO の AI レビューは行っていない。\n`\u002Fxddp-review {CR} specout` で確認できる）。\n","You are orchestrating **XDDP Step 05 (process step 5) — Implementation Approach Design**.\n\n> The implementation approach chosen here shapes build quality and maintainability for the life of this code. A poorly examined recommendation means months of rework. Orchestrate with depth — every tradeoff deserves honest comparison.\n\n**Arguments:** $ARGUMENTS = [CR_NUMBER] (optional) [--detail | --from-step-c]\n- `--detail`: 詳細図だけを生成する（Step B3）\n- `--from-step-c`: Step C（採用案の波紋調査の採用・SPO の仕上げ・CRS へのフィードバック）から再開する\n\n---\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## CR Resolution\" with $ARGUMENTS → let `CR`, `REST_ARGS`.\nLet `TODAY` = today's date.\n\n(xddp.config.md lookup done in xddp-common\u002FSKILL.md「## CR Resolution」; reuse WORKSPACE_ROOT, XDDP_DIR,\nREPOS_MAP, REPOS_KEYS, IS_MULTI, DOCS_DIR, DOCS, CR_PROFILE, DEVELOPMENT_MODE, EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH,\nSPECOUT_MAX_AFFECTED_FILES, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_DIAGRAM_LEVEL, SPECOUT_SEQUENCE_LEVELS, SPECOUT_BACKEND,\nSPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, SPECOUT_WAVE_HIT_BUDGET,\nSPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS, SPECOUT_SLICE_PYTHON_BIN.\n`SPECOUT_HIT_FILTER` は未指定時 `conservative`。`SPECOUT_CLASSIFY_CHUNK_SIZE` は未指定時 `40`、`SPECOUT_CLASSIFY_PARALLEL` は未指定時 `4`。\n`MAX_WAVE_DEPTH` は未指定時 `6`、`SPECOUT_WAVE_HIT_BUDGET` は未指定時 `10000`、`SPECOUT_LLM_HIT_BUDGET` は未指定時 `160`、\n`SPECOUT_SLICE` は未指定時 `auto`、`SPECOUT_SLICE_IGNORE_CALLS` は未指定時 空、`SPECOUT_SLICE_H_AS` は未指定時 `auto`、\n`SPECOUT_SLICE_PYTHON_BIN` は未指定時 空、`SPECOUT_MAX_AFFECTED_FILES` は未指定時 `20`。)\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Resolve Affected Repos\" with:\n  REPOS_KEYS: {REPOS_KEYS}, IS_MULTI: {IS_MULTI}, CR_PATH: {CR_PATH}, FILTER_BY_SPO: false\n→ let `AFFECTED_REPOS`.\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Resolve HAS_CROSS\" with:\n  IS_MULTI: {IS_MULTI}, ARTIFACT_PATH: {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md\n→ let `HAS_CROSS`.\n（本工程は直前工程＝specout の cross SPO の有無で cross 処理要否を判断する）\nLet `DETAIL_MODE` = (`REST_ARGS` に `--detail` が含まれる). If `DETAIL_MODE` = true: skip to Step B3.\nLet `FROM_STEP_C` = (`REST_ARGS` に `--from-step-c` が含まれる). If `FROM_STEP_C` = true:\n  Run via Bash: `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 5`\n  → 出力の `detail`（工程5の詳細ステップ）が `Step C:` で始まる場合だけ（Step C の冒頭の Progress Update を記録済み＝人レビューゲートを\n  通過済み）、Step 0〜B3 を飛ばして Step C から行う。それ以外は「`--from-step-c` は Step C の途中で止まった場合にだけ使えます。\n  `\u002Fxddp-05-arch {CR}` を実行してください」と伝えて停止する。\n\nLet `ARCH_TEMPLATE_PATHS` =\n  INDEX_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-template.md\n  APPROACH_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-approach-template.md\n  COMPARISON_TEMPLATE_FILE: ~\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-comparison-template.md\n（{repo} に依存しないため、Step A\u002FB\u002FB3 のどの独立ループからもこの1箇所の定義をそのまま参照できる）\n\nLet `ARCH_CALL_SHARED` =\n  CR_NUMBER: {CR}\n  TODAY: {TODAY}\n（{repo} に依存しないため、ARCH_TEMPLATE_PATHS と同じ理由で Step A\u002FB\u002FB3 のどの独立ループからも\nこの1箇所の定義をそのまま参照できる。REPO_NAME はループ変数のため各呼び出し箇所に個別記述のまま残す）\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-rules\u002Fxddp.arch.rules.md` to get `ARCH_RULES`\n（{repo} に依存しないため、Step A-cross・Step A の両方——Step A の `For each {repo}` ループ内にある\narchitect agent 呼び出しの `ALTERNATIVES_TASK: {pass ARCH_RULES content as-is}` 行を\n含む——から、この1箇所の定義をそのまま参照できる。二重読み取りを避けるためここで1回のみ実施する。\n本注記は上記 `ARCH_TEMPLATE_PATHS` 注記と同一形式のスコープ継続性注記である）.\n\n## Step -1: CR_PROFILE Check\n\nIf `CR_PROFILE` = `quick`:\n  1. If `HAS_CROSS` = true（ファイル冒頭の `## Resolve HAS_CROSS` で解決済み。マルチリポジトリかつ\n     `{CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md` が存在する場合）:\n     a. 本ファイルの「## Step A-cross: Generate cross\u002FDSN (API-first principle — only when HAS_CROSS = true)」\n        の手順をそのまま実行し、`{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md` を生成する\n        （per-repo の方式比較は行わない。quick では cross インタフェース契約のみを確定させる）。\n     b. 本ファイルの「## Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)」の手順を\n        そのまま実行する（`## Cross Artifact Review` は元来1パス構成であり、`MAX_ROUNDS_OVERRIDE` の\n        対象外）。\n     c. 本ファイルの「## Step C: Feed Architecture Decision Back to CRS」の手順をそのまま実行し、\n        cross DSN で確定したインタフェース仕様・新規制約等を CRS へ反映する（per-repo の Step A が\n        未実行のため per-repo DSN ファイルは存在しない。Step C 側の読み込みには存在確認を追加済み\n        — 本節末尾参照。本プランレビュー指摘 #1 の是正）。\n     d. 本ファイルの「## Step D: Regenerate CRS Excel (UR-016)」の手順をそのまま実行する（Step C で\n        CRS が更新された場合のみ実行、という既存条件のとおり）。\n     e. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n          CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ（quick: cross DSN のみ生成）,\n          DETAIL_STEP: `-`,\n          ARTIFACT_LINK: `[cross\u002FDSN-{CR}-cross.md](05_architecture\u002Fcross\u002FDSN-{CR}-cross.md)`\n        （`## Step E: Update progress.md` は使わない。理由は本節冒頭「採用する対策」参照 —\n        `xddp-set-profile\u002FSKILL.md` の判定文字列との整合を保つため）。\n     f. 次に実行すべきコマンド → `\u002Fxddp-06-design {CR}`\n     g. ユーザーに通知:\n        > `CR_PROFILE: quick` のため、工程5（実装方式検討）の per-repo 方式比較はスキップし、\n        > リポジトリ間インタフェース契約（cross DSN）のみ生成しました。cross DSN の内容は\n        > CRS へフィードバック済みです\n        > （工程6a の cross CHD・工程9 の cross TSP・工程11 の `latest-specs\u002Fcross\u002Finterfaces\u002F` が\n        > これを必要とするため）。\n        > **次のコマンド:** `\u002Fxddp-06-design {CR}`\n     h. Stop.\n  2. Else（`HAS_CROSS` = false。シングルリポジトリ構成、または cross SPO が存在しない場合）:\n     a. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n          CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ（対象外）, DETAIL_STEP: `-`\n     b. 次に実行すべきコマンド → `\u002Fxddp-06-design {CR}`\n     c. ユーザーに通知:\n        > `CR_PROFILE: quick` のため、工程5（実装方式検討）はスキップします。\n        > **次のコマンド:** `\u002Fxddp-06-design {CR}`\n     d. Stop.\n\n## Step 0: Reference Current Specs\n\n（`CR_PROFILE` = `full` の場合のみ到達）\n\nFor each `{repo}` in `AFFECTED_REPOS`:\nLet `SPO_SUMMARY` = `{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md`.\nIf `SPO_SUMMARY` does not exist: let `CURRENT_SPECS_REFS[{repo}]` = [] (note \"SPO 未存在のためスキップ\") and continue with the next repo.\nRead `SPO_SUMMARY` to identify affected module names.\nLet `SPEC_FILE_PATHS` = [].\nFor each affected module `{mod}`:\n  - Primary:  `{XDDP_DIR}\u002Flatest-specs\u002F{repo}\u002F{mod}\u002Fspec.md` (if exists) → append to `SPEC_FILE_PATHS`\n  - Fallback: `{DOCS}\u002F{repo}\u002Fspecs\u002F{mod}\u002Fspec.md` (if primary absent and DOCS exists) → append to `SPEC_FILE_PATHS`\nIf neither path exists for a module: note as \"現状仕様なし（初回 CR）\".\nLet `CURRENT_SPECS_REFS[{repo}]` = `SPEC_FILE_PATHS` (may be empty).\n\n## Step 0.5: Mark In-Progress\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step A: DSN生成中`\nIf `IS_MULTI`, append per-repo progress table for step 5:\n```markdown\n## 工程5 実装方式検討進捗（リポジトリ別）\n| リポジトリ | DSN生成 | レビュー | 完了日 |\n|---|---|---|---|\n{for each repo in AFFECTED_REPOS: | {repo} | ⏳ 未着手 | ⏳ 未着手 | - |}\n{if HAS_CROSS: | cross | ⏳ 未着手 | ⏳ 未着手 | - |}\n```\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fsnapshot-phase-baseline.md`, apply \"## Snapshot Phase Baseline\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5\n\n## Step A0: Reference Lessons Learned Log\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-lessons-context.md`, apply \"## Load Lessons Context\" with:\n  LESSONS_FILE: {XDDP_DIR}\u002Flessons-learned.md\n  TARGET_TAGS: [#方式検討, #設計, #リスク, #依存関係]\n→ let `LESSONS_CONTEXT`.\n\n## Step A-cross: Generate cross\u002FDSN (API-first principle — only when HAS_CROSS = true)\n\n**API-first principle:** Establish the interface contract (cross\u002FDSN) before per-repo approach design.\n\n（`ARCH_RULES` は `DETAIL_MODE` 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。\nStep A の architect agent 呼び出しの `ALTERNATIVES_TASK` を含め、本ファイル内のどこからでも参照可能）\nRead `{XDDP_DIR}\u002Fproject-rulebook.md` (shared) and `{XDDP_DIR}\u002Fproject-rulebook-cross.md` (if exists) as `CROSS_RULEBOOK_CONTEXT`.\n\nGenerate `{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md` (write directly, not via agent):\n- Read `{CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md`\n- If `CROSS_RULEBOOK_CONTEXT` is non-empty: apply its naming conventions and interface\n  constraints (project-rulebook.md §2 命名規約 \u002F project-rulebook-cross.md §2 API バージョニング\n  規約・§3 インタフェース命名規則) when designing the interface in Section 3.\n- Content must include:\n  - Section 2: クロスリポジトリ実装方式（how inter-repo interfaces will be implemented）\n  - Section 3: インタフェース設計（API signatures, message schemas, shared types — concrete enough for CHD）\n  - Section 4: 実装依存順序（which repo's changes must be built first）\n  - Section 5: リスクと軽減策\n\nIf cross\u002FSPO does not exist → skip this step.\n\nIf cross\u002FSPO exists（= 上記の cross\u002FDSN 生成を実行した場合）かつ `IS_MULTI`:\n  per-repo progress table を更新: `| cross | ✅ 完了 | ⏳ 未着手 | - |`\n\n## Step A: Generate per-repo Architecture Memos\n\n（`ARCH_RULES` は `DETAIL_MODE` 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。\nStep A の architect agent 呼び出しの `ALTERNATIVES_TASK` を含め、本ファイル内のどこからでも参照可能）\n\nLet `REPO_WARNINGS_MAP` = `{}`（空の辞書。key: repo名 → value: その repo の `WARNINGS` リスト。\nStep B2 でこの辞書を参照して全 repo の警告をまとめて提示するため、for-each ループの外側で宣言し、\nループの全イテレーションを通じて保持する）。\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n  CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n→ let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-steering-context.md`, apply \"## Load Steering Context\" with:\n  XDDP_DIR: {XDDP_DIR}\n  REPO_NAME: {repo}\n→ let `RULEBOOK_CONTEXT`.\n\narchitect agent を呼び出す前に、以下の SP-ID 照合チェックを実行する\n（設計根拠: docs\u002Fadr\u002FADR-0001-sp-id-check-timing.md）:\n\n**前提確認:** `repo` が `\"cross\"` の場合は SP-ID 照合チェックをスキップし、`ADDITIONAL_CONTEXT` を設定しない（cross\u002F SPO には funcmap が存在しない。architect agent の cross\u002F 代替読み込みロジックで処理する）。\n`repo` が `\"cross\"` 以外かつ `SPO-{CR}-funcmap.md` が存在しない場合も SP-ID 照合チェックをスキップし、`ADDITIONAL_CONTEXT` を設定しない（新規開発モード時は新規開発モード処理で正常動作する。提供されたが存在しないファイルの場合のみ agent 側でエラー停止する）。\n1. CRS §2 の SP-ID 一覧を取得する。方法: CRS ファイルを Read して §2 セクション内に絞り、テーブル行（`\\|\\s*SP-` のパターン — Markdown フォーマッタによる先頭スペース挿入に対応）の第 1 列から識別子を抽出・重複排除する（本文参照・変更履歴等のノイズを排除するため `SP-` プレフィックスを持つセルに限定する）\n2. `SPO-{CR}-funcmap.md` の §1 テーブルの機能ID列（1列目）から SP-ID 一覧を取得する（ヘッダ行・区切り行・テンプレートプレースホルダー行（`{機能ID}` を含む行）を除く・重複排除）\n3. Let `WARNINGS` = `[]`（この repo についての警告リスト）。2つの ID 集合を比較し、以下のケースで `WARNINGS` に追加する:\n   - CRS にあって funcmap にない SP-ID が存在する場合（工程4bでの SP 追加または funcmap 未収録）:\n     「⚠️ funcmap 未収録 SP 項目: {ID一覧}。funcmap は工程4a時点のスナップショットです。これらの SP 項目のシグネチャは CRS §2 を直接照合し、方式比較に組み込んでください。comparison.md「## 4. 採用方式と理由」の懸念事項と対策テーブルに記録してください。」\n   - funcmap にあって CRS にない SP-ID が存在する場合（工程4bでの SP 変更・削除による旧 ID 残存）:\n     「⚠️ funcmap 余剰エントリ: {ID一覧}。CRS §2 に対応する SP 項目が存在しません。方式比較では CRS §2 の最新 SP 項目を正として扱ってください。」\n   - 両者が完全に一致する場合: `WARNINGS` への追加は不要（照合完了のみ記録）\n   `WARNINGS` が空でない場合:\n   - その内容を `ADDITIONAL_CONTEXT` として architect agent 呼び出し時に渡す\n     （agent タスク記述の `ADDITIONAL_CONTEXT:` フィールドとして追記する）。\n   - `REPO_WARNINGS_MAP[repo] = WARNINGS` を設定する（Step B2 で読み出すために永続化する）。\n   `WARNINGS` が空の場合は `ADDITIONAL_CONTEXT` を省略し、`REPO_WARNINGS_MAP` には何も追加しない。\n   **このチェックの結果に関わらず、このイテレーション内でユーザーへの確認を挟まずそのまま architect agent 呼び出しに進み、次の repo のイテレーションへ移る\n   （Step A 内では確認を行わない、という意味であり、Step B2 以降の人レビュー自体は別途実施される）。\n   `REPO_WARNINGS_MAP` に蓄積された全 repo の警告は、Step B2（Human Review Gate）で他のレビュー結果と合わせてまとめて提示する。**\n\n波紋調査の要約と申告のファイルを決める（repo が \"cross\" 以外の場合のみ）:\n- `RIPPLE_DIGESTS[repo]` = Glob `{CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F*\u002Fripple-digest.md` のうち、調査の名前が `initial`・`cross-` で始まるもの\n  と `_removed\u002F` 配下を除いたもの（前の2つは SPO の基礎として §5.0 に入っている。人が足した調査と方式の案ごとの調査を渡す）。\n- `RIPPLE_REQUEST_FILE[repo]` = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002Fwork\u002Fripple-requests.md`。残っていれば削除する。\n\n**Agent tool** `subagent_type=xddp-architect-agent`:\n```\n{ARCH_CALL_SHARED を展開}\nREPO_NAME: {repo}\nCRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\n（{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md が存在する場合のみ追加）SPO_FILE: {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md\n（repo が \"cross\" 以外 かつ {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md が存在する場合のみ追加）FUNCMAP_FILE: {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md\n（{CR_PATH}\u002F04_specout\u002F{repo}\u002Fmodules\u002F が存在する場合のみ追加）SPO_MODULES_DIR: {CR_PATH}\u002F04_specout\u002F{repo}\u002Fmodules\u002F\n{ARCH_TEMPLATE_PATHS の全キーを展開}\nINDEX_FILE: {ARCH_INDEX_FILE}\nAPPROACHES_DIR: {ARCH_APPROACHES_DIR}\n（LESSONS_CONTEXT が空でない場合のみ追加）LESSONS_CONTEXT: {LESSONS_CONTEXT}\nRULEBOOK_CONTEXT: {RULEBOOK_CONTEXT}\nADDITIONAL_REFS: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md (pass if exists — must conform to interface contract)\nALTERNATIVES_TASK: {pass ARCH_RULES content as-is}\n（SP-ID 照合チェックで警告が生成された場合のみ追加）ADDITIONAL_CONTEXT: {ADDITIONAL_CONTEXT}\n（Step 0 で CURRENT_SPECS_REFS[repo] が空でない場合のみ追加）CURRENT_SPECS_REFS: {CURRENT_SPECS_REFS[repo]}\n（RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加）RIPPLE_DIGESTS: {RIPPLE_DIGESTS[repo]}\n（repo が \"cross\" 以外の場合のみ追加）RIPPLE_REQUEST_FILE: {RIPPLE_REQUEST_FILE[repo]}\n```\n\nIf `IS_MULTI`: per-repo progress table を更新: `| {repo} | ✅ 完了 | ⏳ 未着手 | - |`\n\n## Step A-ripple: 方式の案ごとの波紋調査（申告がある場合のみ）\n\n方式検討エージェントが、方式の案で変える既存の識別子の広がりを確かめるために申告した波紋調査を、人の許可を得て実行する\n（SPO には入れずに調べる。採用した案の調査は Step C で SPO に入る）。\n\n1. `RIPPLE_REQUEST_FILE[repo]` のいずれにもデータ行（`| 案 | シンボル | 理由 |` の表の行）が無ければ、本 Step を飛ばす。\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n     CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step A-ripple: 波紋調査の申告の確認中`\n2. 全 repo の申告をまとめて提示し、回答を待つ:\n   > ? 方式検討エージェントが次の波紋調査を申告しました（SPO には入れずに調べます。採用した案の調査は Step C で SPO に入ります）。\n   > | # | repo | 案 | シンボル | 理由 |\n   > - **すべて実行** \u002F **番号を指定して実行**（シンボルを直せます） \u002F **実行しない**\n3. 許可した申告ごとに調査の名前を決める: `arch-{案の小文字}`。`specout_bfs.py run-list --repo-dir {CR_PATH}\u002F04_specout\u002F{repo}` で、\n   同じ名前の調査が同じシンボルの集合なら再利用し（`complete` ならそのまま、`in-progress`・`not-started` なら手順4 で再開する）、\n   違えば `arch-{案の小文字}-2`… の空いている名前にする。新しい調査ごとに Write ツールで\n   `{CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F{名前}\u002Fmeta.json` に `{\"approach\": \"{案}\", \"reason\": \"{理由}\", \"seeds\": [{シンボル…}], \"entry_identity\": \"resolved\"}`\n   を書く（申告の理由は自由文のためシェルの引数で渡さない）。\n4. Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-engine-setup.md`, apply \"## Ripple Engine Setup\" with:\n     SPECOUT_SLICE: {SPECOUT_SLICE}, SPECOUT_SLICE_PYTHON_BIN: {SPECOUT_SLICE_PYTHON_BIN}\n   → let `SLICE_PY`, `PROBE_ENGINE`, `EFFECTIVE_SLICE_ENGINE`, `USE_PROBE_WARNING`.\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-run.md`, apply \"## Ripple Run\" with:\n     CR: {CR}, CR_PATH: {CR_PATH},\n     REPO_RUNS: {repo → 許可した調査のリスト（同じ repo の案A・案B は順に回る）。各要素 {run: {名前}, origin: `architect-agent`,\n       symbols: {シンボル…}, meta_file: {上記の meta.json}, entry_identity: `resolved`, adopt: false, adopted_by: `step5`,\n       RERUN_COMMAND: `\u002Fxddp-investigate {CR} ripple --name {名前} --repo {repo}`}},\n     REPOS_MAP: {REPOS_MAP}, SLICE_PY: {SLICE_PY}, PROBE_ENGINE: {PROBE_ENGINE}, EFFECTIVE_SLICE_ENGINE: {EFFECTIVE_SLICE_ENGINE},\n     USE_PROBE_WARNING: {USE_PROBE_WARNING}, TODAY: {TODAY},\n     設定（EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES,\n     SPECOUT_HIT_FILTER, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS,\n     SPECOUT_MAX_AFFECTED_FILES, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, DOCS）\n   → let `DONE`, `FAILED`.\n5. `DONE` に調査がある repo ごとに、architect agent を反映モードで1回だけ再起動する（反映モードでは申告しない。1回の工程5につき1ラウンド）:\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n     CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n   → let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n   **Agent tool** `subagent_type=xddp-architect-agent`:\n   ```\n   {ARCH_CALL_SHARED を展開}\n   REPO_NAME: {repo}\n   INDEX_FILE: {ARCH_INDEX_FILE}\n   APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n   {ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE \u002F COMPARISON_TEMPLATE_FILE を展開}\n   RIPPLE_REFLECT: true\n   RIPPLE_RESULTS: {DONE の各調査について「案{X}: {CR_PATH}\u002F04_specout\u002F{repo}\u002Fripple\u002F{名前}\u002Fripple-digest.md」の一覧}\n   ```\n   `RIPPLE_DIGESTS[repo]` に `DONE` の各調査の `ripple-digest.md` を加える（Step B・B2 で使う）。\n6. 見送った申告と `FAILED` の申告ごとに Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py note-add --cr-path {CR_PATH} --step 5 --text \"波紋調査の申告を見送り（{repo} 案{X}: {シンボル}。{人の判断／失敗}）\"`\n   その案の影響範囲は DSN の「未検証」の記述のまま残る。`FAILED` の調査は `\u002Fxddp-investigate {CR} ripple --name {名前} --repo {repo}` で\n   続きから行える（完了後に `\u002Fxddp-05-arch {CR}` を再実行すると、Step A で方式検討エージェントがその要約を読む）。\n\n## Step B: Review Loop (up to `REVIEW_MAX_ROUNDS.DSN` rounds)\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step B: AIレビュー中`\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n  CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n→ let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\narchitect agent 完了後に `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` の存在チェックを行い、\n存在する場合は「2案以上モード」、存在しない場合は「1案モード」として TARGET_FILE を決定する:\n- 2案以上モード: TARGET_FILE = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md`\n- 1案モード: TARGET_FILE = `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md`\n\nまた REFERENCE_FILES に approach ファイルを追加する（comparison.md が TARGET の場合）:\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md` （comparison.md が TARGET の場合）\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md` （exists の場合）\n- `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md` （exists の場合）\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Freview-loop.md`, apply \"## Review Loop\" with:\n  DOCUMENT_TYPE: DSN\n  NEXT_DOCUMENT_TYPE: CHD\n  CONFIG_KEY: REVIEW_MAX_ROUNDS.DSN\n  TARGET_FILE: {上記で決定した TARGET_FILE}\n  REFERENCE_FILES: [\n    {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md,\n    （{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md が存在する場合のみ追加）{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md,\n    （repo が \"cross\" 以外 かつ {CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md が存在する場合のみ追加）{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}-funcmap.md,\n    （comparison.md が TARGET の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md,\n    （exists の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md,\n    （exists の場合のみ追加）{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md,\n    （RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加）{RIPPLE_DIGESTS[repo]}\n  ]\n  REVIEW_OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n  FIXER_AGENT: xddp-architect-agent\n  FIXER_PARAMS:\n    {ARCH_CALL_SHARED を展開}\n    REPO_NAME: {repo}\n    INDEX_FILE: {ARCH_INDEX_FILE}\n    APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n    {ARCH_TEMPLATE_PATHS の INDEX_TEMPLATE_FILE \u002F APPROACH_TEMPLATE_FILE \u002F COMPARISON_TEMPLATE_FILE を展開}\n    REVIEW_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n  PROGRESS_CR_PATH: {CR_PATH}\n  PROGRESS_STEP_NUM: 5\n  METRICS_TARGET: {repo}\n\nIf `IS_MULTI`: per-repo progress table を更新: `| {repo} | ✅ 完了 | ✅ 完了 | {TODAY} |`\n\n## Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)\n\nIf `HAS_CROSS`:\n  Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fcross-artifact-review.md`, apply \"## Cross Artifact Review\" with:\n    CR_PATH: {CR_PATH}\n    STEP_NUM: 5\n    STEP_LABEL: `Step B-cross`\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md\n    REFERENCE_FILES: [\n      {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md,\n      {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md (if exists),\n      for each {repo} in AFFECTED_REPOS:\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md （exists かつ 2案以上の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md （exists の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md （exists の場合）\n        - {CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-C.md （exists の場合）\n      （インデックスファイル DSN-{CR}.md は省略。採用方式・アプローチ詳細が含まれるファイルを直接渡す）\n    ]\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md\n    DOC_DESCRIPTION: `インタフェース仕様・実装依存順序に特化した成果物`\n  If `IS_MULTI`: per-repo progress table を更新: `| cross | ✅ 完了 | ✅ 完了 | {TODAY} |`\n\n## Step B2: Human Review Gate\n\nBuild `INTRO_NOTE` by expanding the following (REPO_WARNINGS_MAP is already resolved in this\nskill's scope; omit `INTRO_NOTE` entirely if REPO_WARNINGS_MAP is empty):\n```\n⚠️ SP-ID 照合チェックで以下の警告が見つかりました（Step A で検出・処理は続行済みです）:\n{for each (repo, WARNINGS) in REPO_WARNINGS_MAP: - {repo}: {WARNINGS の内容}}\n```\n\nBuild `ARTIFACTS_TEXT` by expanding the following (AFFECTED_REPOS\u002FHAS_CROSS are already resolved\nin this skill's scope):\n```\n{for each repo in AFFECTED_REPOS:}\n- {repo}: インデックス `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}.md`\n  - 案A: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-A.md`\n  - 案B: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-approach-B.md` （存在する場合）\n  - 比較: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` （2案以上の場合）\n  - 方式の案ごとの波紋調査の要約（{RIPPLE_DIGESTS[repo] がある場合のみ。調査ごとに1行）: `{要約のパス}`\n  - AIレビュー: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md`\n{if HAS_CROSS:}\n- cross: `{CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md`\n  - AIレビュー: `{CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md`\n```\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fhuman-review-gate.md`, apply \"## Human Review Gate\" with:\n  CR_PATH: {CR_PATH}\n  STEP_NUM: 5\n  STEP_LABEL: `Step B2`\n  INTRO_NOTE: {built above, omit if REPO_WARNINGS_MAP is empty}\n  ARTIFACTS_TEXT: {built above}\n  REVISE_COMMAND: `\u002Fxddp-revise {CR} arch`（対象リポジトリを指定）\n  OPTION_NOTE: |\n    **詳細図（構造体関連図・主処理シーケンス図）が必要な場合：**\n    全案を統一粒度で生成します（比較可能な形式）:\n    `\u002Fxddp-05-arch {CR} --detail`\n→ let `CHANGED`.\n\nIf `CHANGED`:\n- For each `{repo}` in `AFFECTED_REPOS`: Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Ffinal-review-pass.md`,\n  apply \"## Final Review Pass\" with:\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}-comparison.md` が存在すれば comparison.md、\n      なければ approach-A.md（Step B と同一の判定ロジック）\n    REFERENCE_FILES: {Step B と同一}\n    REVIEW_ROUND: (last_round + 1)\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002F{repo}\u002Freview\u002F05_architecture-review.md\n- If HAS_CROSS and the user changed cross\u002F DSN: Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Ffinal-review-pass.md`,\n  apply \"## Final Review Pass\" with:\n    DOCUMENT_TYPE: DSN\n    NEXT_DOCUMENT_TYPE: CHD\n    TARGET_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002FDSN-{CR}-cross.md\n    REFERENCE_FILES: {Step B-cross と同一}\n    REVIEW_ROUND: (last_round + 1)\n    OUTPUT_FILE: {CR_PATH}\u002F05_architecture\u002Fcross\u002Freview\u002F05_architecture-cross-review.md\n\n## Step B3: Detail Diagram Generation (--detail mode only)\n\n`DETAIL_MODE` = true の場合のみ実行。通常フロー（Step 0〜B2）はスキップ済み。\n\nFor each `{repo}` in `AFFECTED_REPOS`:\n  **cross\u002F はスキップ:** `{repo}` が `\"cross\"` の場合、`DSN-{CR}-cross.md` は\n  approach-*.md 構造を持たないためスキップする。\n  If `{repo}` = `\"cross\"`: continue.\n  （`REPOS:` キーに `\"cross\"` は使用不可（CLAUDE.md 予約名）のため実際には到達しない防衛的ガード）\n\n  If `{CR_PATH}\u002F05_architecture\u002F{repo}\u002FDSN-{CR}.md` does not exist:\n    Warn the user:\n    > ⚠️ {repo}: DSN が存在しません。先に通常モードで `\u002Fxddp-05-arch {CR}` を実行してください。\n    Skip this repo.\n\n  Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md`, apply \"## Build Arch Agent Paths\" with:\n    CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR}\n  → let `ARCH_INDEX_FILE`, `ARCH_APPROACHES_DIR`.\n\n  **Agent tool** `subagent_type=xddp-architect-agent`:\n  ```\n  {ARCH_CALL_SHARED を展開}\n  REPO_NAME: {repo}\n  INDEX_FILE: {ARCH_INDEX_FILE}\n  APPROACHES_DIR: {ARCH_APPROACHES_DIR}\n  {ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE を展開}\n  DETAIL_MODE: true\n  ```\n\nReport to user (Japanese):\n> ✅ 詳細図を生成しました。\n{for each repo where repo ≠ \"cross\":}\n> - {repo}: 更新ファイル一覧（INDEX_FILE から発見した approach-*.md）\n\n`DETAIL_MODE` = true の場合、Step C 以降はすべてスキップする。詳細図生成の結果報告は Step B3 内の Report to user で完結する（progress.md の更新もしない）。\n\n## Step C: Feed Architecture Decision Back to CRS\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: `Step C: CRSフィードバック中`\n\n**採用案の波紋調査の採用と SPO の仕上げ:** cross 以外の repo ごとに次を行う。repo ごとの DSN（`DSN-{CR}-comparison.md` も\n`DSN-{CR}-approach-A.md` も）が無い repo は飛ばす（`CR_PROFILE: quick` の Step -1 の経路では repo ごとの DSN が無いため、すべて飛ばされる）。\nLet `O` = `{CR_PATH}\u002F04_specout\u002F{repo}`、`PY` = `command -v python3 || command -v python` の結果、`BFS` = `~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Fscripts\u002Fspecout_bfs.py`。\n1. 採用方式を読む（`DSN-{CR}-comparison.md` の `**採用方式：** 案{X}`。1案モードは案A）。\n2. Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}` → `runs`。由来が `architect-agent` の調査のうち `approach` が採用方式で状態が\n   `complete` のもので、`created` が最も新しい調査があれば、Run via Bash: `\"$PY\" \"$BFS\" run-adopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}`。\n   `adopted_by` が `step5` で採用中のそれ以外の調査（別の案、同じ案の古い調査）を、それぞれ Run via Bash:\n   `\"$PY\" \"$BFS\" run-unadopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}`。人が採用した調査（`adopted_by` が `human`）は変えない。\n   stdout の `changed` が true になった調査を `ADOPTION_CHANGES[repo]` に記録する。\n3. Run via Bash: `\"$PY\" \"$BFS\" finish-needed --repo-dir {O}` → `needed` が true の repo（手順2 で採用が変わった repo と、前回の SPO の仕上げが\n   途中で止まった repo が当たる）について:\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-doc-levels.md`, apply \"## Specout Doc Levels\" with:\n     CR_PROFILE: {CR_PROFILE}, SPECOUT_DIAGRAM_LEVEL: {SPECOUT_DIAGRAM_LEVEL}, SPECOUT_SEQUENCE_LEVELS: {SPECOUT_SEQUENCE_LEVELS}\n   → let `EFFECTIVE_DIAGRAM_LEVEL`, `EFFECTIVE_SEQUENCE_LEVELS`, `EFFECTIVE_SPO_DETAIL_LEVEL`.\n   Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-finish.md`, apply \"## Specout Finish\" with:\n     CR: {CR}, CR_PATH: {CR_PATH}, repo: {repo}, REPOS_MAP: {REPOS_MAP}, ENTRY_POINTS: 空, IS_MULTI: {IS_MULTI}, XDDP_DIR: {XDDP_DIR},\n     DOCS: {DOCS}, EXCLUDE_PATTERNS: {EXCLUDE_PATTERNS}, INCLUDE_EXTENSIONS: {INCLUDE_EXTENSIONS},\n     SPECOUT_MAX_FILES_PER_MODULE: {SPECOUT_MAX_FILES_PER_MODULE}, SPECOUT_MAX_AFFECTED_FILES: {SPECOUT_MAX_AFFECTED_FILES},\n     EFFECTIVE_DIAGRAM_LEVEL: {EFFECTIVE_DIAGRAM_LEVEL}, EFFECTIVE_SEQUENCE_LEVELS: {EFFECTIVE_SEQUENCE_LEVELS},\n     EFFECTIVE_SPO_DETAIL_LEVEL: {EFFECTIVE_SPO_DETAIL_LEVEL}, RERUN_COMMAND: `\u002Fxddp-05-arch {CR} --from-step-c`, TODAY: {TODAY}\n   → let `FINISH_STATUS`, `REWRITTEN_SECTIONS[repo]`, `SPO_BACKUP[repo]`。\n   `stopped` なら、CRS への反映へ進まずに停止し、原因の解消後に `\u002Fxddp-05-arch {CR} --from-step-c` を再実行するよう伝える\n   （採用・取り消しは冪等で、再実行では `finish-needed` が true のままなので SPO の仕上げが再び行われる。入力が変わらなければ\n   document agent は起動しない）。\n4. 続けて下記の CRS へのフィードバックを行う。採用案の影響は DSN（反映モードで書かれた影響範囲）を通じて CRS に入る。\n\nRead all per-repo DSN files: 各 {repo} の comparison.md（2案以上の場合）または approach-A.md（1案の場合）\n（存在する場合のみ。`CR_PROFILE: quick` かつ `HAS_CROSS` = true の経路では Step A が未実行のため\nper-repo ファイルは存在せず対象外となる）、および cross\u002FDSN-{CR}-cross.md（if exists）。\nフィードバック抽出は採用方式・設計指針が記載されているファイルから行う。\nFor each file, extract items that are not yet reflected in CRS (new constraints, NF requirements,\ninterface specs, out-of-scope items). Compose a unified `DESIGN_FEEDBACK` list in the format:\n`種別: {追加UR\u002F追加SR\u002F追加SP\u002F廃止SR\u002F廃止SP} | 内容: ... | 根拠: DSN §X [cross]`\nAppend `[cross]` to items from cross\u002FDSN. Merge per-repo and cross items into one list.\n\nIf the list is non-empty:\n**Agent tool** `subagent_type=xddp-spec-writer-agent`:\n```\nCR_NUMBER: {CR}\nMODE: update-design\nCRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\nDESIGN_FEEDBACK: (the composed list from above)\nTODAY: {TODAY}\nAUTHOR_NOTE: 方式検討フィードバックを反映。採用方式に基づく要求・仕様の追加／削除／変更。\n```\n\n## Step D: Regenerate CRS Excel (UR-016)\n\nRun only if CRS was updated in Step C.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregenerate-crs-excel.md`, apply \"## Regenerate CRS Excel\" with:\n  CR_PATH: {CR_PATH}\n  CR: {CR}\n\n## Step E: Update progress.md\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Progress Update\" with:\n  CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ✅ 完了, DETAIL_STEP: `-`,\n  ARTIFACT_LINK: `[05_architecture\u002F](05_architecture\u002F)`\nNext command → `\u002Fxddp-06-design {CR}`\n\n## Step F: Report in Japanese\n\nReport: repos, adopted approach per repo, DSN files, review rounds, CRS feedback items.\n加えて、Step A-ripple で実行した波紋調査（repo・案・調査の名前・要約のパス）と、Step C で採用を変えた調査（`ADOPTION_CHANGES`）・\nSPO の仕上げで書き直した節（`REWRITTEN_SECTIONS`）・退避した SPO（`SPO_BACKUP`）を報告する（SPO の AI レビューは行っていない。\n`\u002Fxddp-review {CR} specout` で確認できる）。\n",{},"main","c15454fe190ba8cf0d4fe93871d77bf4e8dffabf","ClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch",0,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings","https:\u002F\u002Fgithub.com\u002Ftsuna44","2026-11-08 08:45:39",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add tsuna44\u002FXddpSettings --skill xddp-05-arch",{"tool":37,"command":38},"bunx","bunx skills add tsuna44\u002FXddpSettings --skill xddp-05-arch",{"tool":40,"command":41},"pnpm","pnpm dlx skills add tsuna44\u002FXddpSettings --skill xddp-05-arch","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002FSKILL.md",true,[45,51,55],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"templates\u002F05_design-approach-memo-approach-template.md","REFERENCE","参考文档",2197,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-approach-template.md",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"templates\u002F05_design-approach-memo-comparison-template.md",2184,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-comparison-template.md",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"templates\u002F05_design-approach-memo-template.md",1836,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-05-arch\u002Ftemplates\u002F05_design-approach-memo-template.md",[60,73,80,88,95,117],{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":70,"publishedAt":19},"01M6MDVNN0ZX8D5KABK9G0067Z","demo.skill","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.skill\u002FSKILL.md",[65],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[71,72],"demo skill","demo",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M6MDVK20HAJYBMXM7VX50A3J","demo.noname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.noname\u002FSKILL.md",[],[79,72],"demo noname",{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M6MDVFS20532JT4V7WT779XH","demo.common","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.common\u002FSKILL.md",[],[86,87,72],"demo common","common",{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M6MDVCV2JFN66NJTFG1CCJS1","demo.badname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.badname\u002FSKILL.md",[],[94,72],"demo badname",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":104,"publishedAt":19},"01M6MDV7CHGZGPXR0MQ44VC4C1","xddp-update-knowledge","任意のタイミングで baseline_docs\u002F の knowledge ディレクトリに知識を追加・更新する。CR 非依存。対話形式と引数形式に対応。「知識を登録して」「callgraph を記録して」「メモを保存して」などで起動する。","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000021","资料检索与研究",[105,106,107,108,109,110,111,112,113,114,115,116],"xddp update knowledge","update knowledge","knowledge","update","note","structure","constraint","lesson","glossary","baseline","flow","docs",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":131,"publishedAt":19},"01M6MDV2Q1Z02WAN4CZ2WVFZ27","xddp-sync-design","コードから DSN を再生成してリビジョンとして記録し、AIレビュー→人承認を実施する。「設計を同期して」「DSN を更新して」などで起動する。","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-sync-design\u002FSKILL.md",[123,126],{"categoryNo":124,"categoryName":125,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":127,"categoryName":128,"taxonomyType":129,"taxonomyTypeDesc":130},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[132,133,134,135],"sync","xddp sync design","design","生成"]