AGENT SKILL

xddp-05-arch

暂无简介

License 许可
MIT
最近更新
2026-11-08
Stars
★ 1
Forks
0

02 资源文件 3

03 SKILL.md 正文

You are orchestrating XDDP Step 05 (process step 5) — Implementation Approach Design.

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.

Arguments: $ARGUMENTS = [CR_NUMBER] (optional) [--detail | --from-step-c]

  • --detail: 詳細図だけを生成する(Step B3)
  • --from-step-c: Step C(採用案の波紋調査の採用・SPO の仕上げ・CRS へのフィードバック)から再開する

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## CR Resolution" with $ARGUMENTS → let CR, REST_ARGS. Let TODAY = today's date.

(xddp.config.md lookup done in xddp-common/SKILL.md「## CR Resolution」; reuse WORKSPACE_ROOT, XDDP_DIR, REPOS_MAP, REPOS_KEYS, IS_MULTI, DOCS_DIR, DOCS, CR_PROFILE, DEVELOPMENT_MODE, EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_AFFECTED_FILES, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_DIAGRAM_LEVEL, SPECOUT_SEQUENCE_LEVELS, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS, SPECOUT_SLICE_PYTHON_BIN. SPECOUT_HIT_FILTER は未指定時 conservative。SPECOUT_CLASSIFY_CHUNK_SIZE は未指定時 40、SPECOUT_CLASSIFY_PARALLEL は未指定時 4。 MAX_WAVE_DEPTH は未指定時 6、SPECOUT_WAVE_HIT_BUDGET は未指定時 10000、SPECOUT_LLM_HIT_BUDGET は未指定時 160、 SPECOUT_SLICE は未指定時 auto、SPECOUT_SLICE_IGNORE_CALLS は未指定時 空、SPECOUT_SLICE_H_AS は未指定時 auto、 SPECOUT_SLICE_PYTHON_BIN は未指定時 空、SPECOUT_MAX_AFFECTED_FILES は未指定時 20。) Let CR_PATH = {WORKSPACE_ROOT}/{XDDP_DIR}/{CR}.

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Resolve Affected Repos" with: REPOS_KEYS: {REPOS_KEYS}, IS_MULTI: {IS_MULTI}, CR_PATH: {CR_PATH}, FILTER_BY_SPO: false → let AFFECTED_REPOS. Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Resolve HAS_CROSS" with: IS_MULTI: {IS_MULTI}, ARTIFACT_PATH: {CR_PATH}/04_specout/cross/SPO-{CR}-cross.md → let HAS_CROSS. (本工程は直前工程=specout の cross SPO の有無で cross 処理要否を判断する) Let DETAIL_MODE = (REST_ARGS に --detail が含まれる). If DETAIL_MODE = true: skip to Step B3. Let FROM_STEP_C = (REST_ARGS に --from-step-c が含まれる). If FROM_STEP_C = true: Run via Bash: PY=$(command -v python3 || command -v python) && "$PY" ~/.claude/skills/xddp-common/scripts/xddp_progress.py show --cr-path {CR_PATH} --step 5 → 出力の detail(工程5の詳細ステップ)が Step C: で始まる場合だけ(Step C の冒頭の Progress Update を記録済み=人レビューゲートを 通過済み)、Step 0〜B3 を飛ばして Step C から行う。それ以外は「--from-step-c は Step C の途中で止まった場合にだけ使えます。 /xddp-05-arch {CR} を実行してください」と伝えて停止する。

Let ARCH_TEMPLATE_PATHS = INDEX_TEMPLATE_FILE: ~/.claude/skills/xddp-05-arch/templates/05_design-approach-memo-template.md APPROACH_TEMPLATE_FILE: ~/.claude/skills/xddp-05-arch/templates/05_design-approach-memo-approach-template.md COMPARISON_TEMPLATE_FILE: ~/.claude/skills/xddp-05-arch/templates/05_design-approach-memo-comparison-template.md ({repo} に依存しないため、Step A/B/B3 のどの独立ループからもこの1箇所の定義をそのまま参照できる)

Let ARCH_CALL_SHARED = CR_NUMBER: {CR} TODAY: {TODAY} ({repo} に依存しないため、ARCH_TEMPLATE_PATHS と同じ理由で Step A/B/B3 のどの独立ループからも この1箇所の定義をそのまま参照できる。REPO_NAME はループ変数のため各呼び出し箇所に個別記述のまま残す)

Read ~/.claude/skills/xddp-rules/xddp.arch.rules.md to get ARCH_RULES ({repo} に依存しないため、Step A-cross・Step A の両方——Step A の For each {repo} ループ内にある architect agent 呼び出しの ALTERNATIVES_TASK: {pass ARCH_RULES content as-is} 行を 含む——から、この1箇所の定義をそのまま参照できる。二重読み取りを避けるためここで1回のみ実施する。 本注記は上記 ARCH_TEMPLATE_PATHS 注記と同一形式のスコープ継続性注記である).

Step -1: CR_PROFILE Check

If CR_PROFILE = quick:

  1. If HAS_CROSS = true(ファイル冒頭の ## Resolve HAS_CROSS で解決済み。マルチリポジトリかつ {CR_PATH}/04_specout/cross/SPO-{CR}-cross.md が存在する場合): a. 本ファイルの「## Step A-cross: Generate cross/DSN (API-first principle — only when HAS_CROSS = true)」 の手順をそのまま実行し、{CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md を生成する (per-repo の方式比較は行わない。quick では cross インタフェース契約のみを確定させる)。 b. 本ファイルの「## Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)」の手順を そのまま実行する(## Cross Artifact Review は元来1パス構成であり、MAX_ROUNDS_OVERRIDE の 対象外)。 c. 本ファイルの「## Step C: Feed Architecture Decision Back to CRS」の手順をそのまま実行し、 cross DSN で確定したインタフェース仕様・新規制約等を CRS へ反映する(per-repo の Step A が 未実行のため per-repo DSN ファイルは存在しない。Step C 側の読み込みには存在確認を追加済み — 本節末尾参照。本プランレビュー指摘 #1 の是正)。 d. 本ファイルの「## Step D: Regenerate CRS Excel (UR-016)」の手順をそのまま実行する(Step C で CRS が更新された場合のみ実行、という既存条件のとおり)。 e. Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ(quick: cross DSN のみ生成), DETAIL_STEP: -, ARTIFACT_LINK: [cross/DSN-{CR}-cross.md](05_architecture/cross/DSN-{CR}-cross.md) (## Step E: Update progress.md は使わない。理由は本節冒頭「採用する対策」参照 — xddp-set-profile/SKILL.md の判定文字列との整合を保つため)。 f. 次に実行すべきコマンド → /xddp-06-design {CR} g. ユーザーに通知:

    CR_PROFILE: quick のため、工程5(実装方式検討)の per-repo 方式比較はスキップし、 リポジトリ間インタフェース契約(cross DSN)のみ生成しました。cross DSN の内容は CRS へフィードバック済みです (工程6a の cross CHD・工程9 の cross TSP・工程11 の latest-specs/cross/interfaces/ が これを必要とするため)。 次のコマンド: /xddp-06-design {CR} h. Stop.

  2. Else(HAS_CROSS = false。シングルリポジトリ構成、または cross SPO が存在しない場合): a. Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ⏭️ スキップ(対象外), DETAIL_STEP: - b. 次に実行すべきコマンド → /xddp-06-design {CR} c. ユーザーに通知:

    CR_PROFILE: quick のため、工程5(実装方式検討)はスキップします。 次のコマンド: /xddp-06-design {CR} d. Stop.

Step 0: Reference Current Specs

(CR_PROFILE = full の場合のみ到達)

For each {repo} in AFFECTED_REPOS: Let SPO_SUMMARY = {CR_PATH}/04_specout/{repo}/SPO-{CR}.md. If SPO_SUMMARY does not exist: let CURRENT_SPECS_REFS[{repo}] = [] (note "SPO 未存在のためスキップ") and continue with the next repo. Read SPO_SUMMARY to identify affected module names. Let SPEC_FILE_PATHS = []. For each affected module {mod}:

  • Primary: {XDDP_DIR}/latest-specs/{repo}/{mod}/spec.md (if exists) → append to SPEC_FILE_PATHS
  • Fallback: {DOCS}/{repo}/specs/{mod}/spec.md (if primary absent and DOCS exists) → append to SPEC_FILE_PATHS If neither path exists for a module: note as "現状仕様なし(初回 CR)". Let CURRENT_SPECS_REFS[{repo}] = SPEC_FILE_PATHS (may be empty).

Step 0.5: Mark In-Progress

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: Step A: DSN生成中 If IS_MULTI, append per-repo progress table for step 5:

## 工程5 実装方式検討進捗(リポジトリ別)
| リポジトリ | DSN生成 | レビュー | 完了日 |
|---|---|---|---|
{for each repo in AFFECTED_REPOS: | {repo} | ⏳ 未着手 | ⏳ 未着手 | - |}
{if HAS_CROSS: | cross | ⏳ 未着手 | ⏳ 未着手 | - |}

Read ~/.claude/skills/xddp-common/procedures/snapshot-phase-baseline.md, apply "## Snapshot Phase Baseline" with: CR_PATH: {CR_PATH}, STEP_NUM: 5

Step A0: Reference Lessons Learned Log

Read ~/.claude/skills/xddp-common/procedures/load-lessons-context.md, apply "## Load Lessons Context" with: LESSONS_FILE: {XDDP_DIR}/lessons-learned.md TARGET_TAGS: [#方式検討, #設計, #リスク, #依存関係] → let LESSONS_CONTEXT.

Step A-cross: Generate cross/DSN (API-first principle — only when HAS_CROSS = true)

API-first principle: Establish the interface contract (cross/DSN) before per-repo approach design.

(ARCH_RULES は DETAIL_MODE 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。 Step A の architect agent 呼び出しの ALTERNATIVES_TASK を含め、本ファイル内のどこからでも参照可能) Read {XDDP_DIR}/project-rulebook.md (shared) and {XDDP_DIR}/project-rulebook-cross.md (if exists) as CROSS_RULEBOOK_CONTEXT.

Generate {CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md (write directly, not via agent):

  • Read {CR_PATH}/04_specout/cross/SPO-{CR}-cross.md
  • If CROSS_RULEBOOK_CONTEXT is non-empty: apply its naming conventions and interface constraints (project-rulebook.md §2 命名規約 / project-rulebook-cross.md §2 API バージョニング 規約・§3 インタフェース命名規則) when designing the interface in Section 3.
  • Content must include:
    • Section 2: クロスリポジトリ実装方式(how inter-repo interfaces will be implemented)
    • Section 3: インタフェース設計(API signatures, message schemas, shared types — concrete enough for CHD)
    • Section 4: 実装依存順序(which repo's changes must be built first)
    • Section 5: リスクと軽減策

If cross/SPO does not exist → skip this step.

If cross/SPO exists(= 上記の cross/DSN 生成を実行した場合)かつ IS_MULTI: per-repo progress table を更新: | cross | ✅ 完了 | ⏳ 未着手 | - |

Step A: Generate per-repo Architecture Memos

(ARCH_RULES は DETAIL_MODE 分岐直後・ファイル冒頭で読み込み済みのためここでの再読み取りは不要。 Step A の architect agent 呼び出しの ALTERNATIVES_TASK を含め、本ファイル内のどこからでも参照可能)

Let REPO_WARNINGS_MAP = {}(空の辞書。key: repo名 → value: その repo の WARNINGS リスト。 Step B2 でこの辞書を参照して全 repo の警告をまとめて提示するため、for-each ループの外側で宣言し、 ループの全イテレーションを通じて保持する)。

For each {repo} in AFFECTED_REPOS:

Read ~/.claude/skills/xddp-common/procedures/build-arch-agent-paths.md, apply "## Build Arch Agent Paths" with: CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR} → let ARCH_INDEX_FILE, ARCH_APPROACHES_DIR.

Read ~/.claude/skills/xddp-common/procedures/load-steering-context.md, apply "## Load Steering Context" with: XDDP_DIR: {XDDP_DIR} REPO_NAME: {repo} → let RULEBOOK_CONTEXT.

architect agent を呼び出す前に、以下の SP-ID 照合チェックを実行する (設計根拠: docs/adr/ADR-0001-sp-id-check-timing.md):

前提確認: repo が "cross" の場合は SP-ID 照合チェックをスキップし、ADDITIONAL_CONTEXT を設定しない(cross/ SPO には funcmap が存在しない。architect agent の cross/ 代替読み込みロジックで処理する)。 repo が "cross" 以外かつ SPO-{CR}-funcmap.md が存在しない場合も SP-ID 照合チェックをスキップし、ADDITIONAL_CONTEXT を設定しない(新規開発モード時は新規開発モード処理で正常動作する。提供されたが存在しないファイルの場合のみ agent 側でエラー停止する)。

  1. CRS §2 の SP-ID 一覧を取得する。方法: CRS ファイルを Read して §2 セクション内に絞り、テーブル行(\|\s*SP- のパターン — Markdown フォーマッタによる先頭スペース挿入に対応)の第 1 列から識別子を抽出・重複排除する(本文参照・変更履歴等のノイズを排除するため SP- プレフィックスを持つセルに限定する)
  2. SPO-{CR}-funcmap.md の §1 テーブルの機能ID列(1列目)から SP-ID 一覧を取得する(ヘッダ行・区切り行・テンプレートプレースホルダー行({機能ID} を含む行)を除く・重複排除)
  3. Let WARNINGS = [](この repo についての警告リスト)。2つの ID 集合を比較し、以下のケースで WARNINGS に追加する:
    • CRS にあって funcmap にない SP-ID が存在する場合(工程4bでの SP 追加または funcmap 未収録): 「⚠️ funcmap 未収録 SP 項目: {ID一覧}。funcmap は工程4a時点のスナップショットです。これらの SP 項目のシグネチャは CRS §2 を直接照合し、方式比較に組み込んでください。comparison.md「## 4. 採用方式と理由」の懸念事項と対策テーブルに記録してください。」
    • funcmap にあって CRS にない SP-ID が存在する場合(工程4bでの SP 変更・削除による旧 ID 残存): 「⚠️ funcmap 余剰エントリ: {ID一覧}。CRS §2 に対応する SP 項目が存在しません。方式比較では CRS §2 の最新 SP 項目を正として扱ってください。」
    • 両者が完全に一致する場合: WARNINGS への追加は不要(照合完了のみ記録) WARNINGS が空でない場合:
    • その内容を ADDITIONAL_CONTEXT として architect agent 呼び出し時に渡す (agent タスク記述の ADDITIONAL_CONTEXT: フィールドとして追記する)。
    • REPO_WARNINGS_MAP[repo] = WARNINGS を設定する(Step B2 で読み出すために永続化する)。 WARNINGS が空の場合は ADDITIONAL_CONTEXT を省略し、REPO_WARNINGS_MAP には何も追加しない。 このチェックの結果に関わらず、このイテレーション内でユーザーへの確認を挟まずそのまま architect agent 呼び出しに進み、次の repo のイテレーションへ移る (Step A 内では確認を行わない、という意味であり、Step B2 以降の人レビュー自体は別途実施される)。 REPO_WARNINGS_MAP に蓄積された全 repo の警告は、Step B2(Human Review Gate)で他のレビュー結果と合わせてまとめて提示する。

波紋調査の要約と申告のファイルを決める(repo が "cross" 以外の場合のみ):

  • RIPPLE_DIGESTS[repo] = Glob {CR_PATH}/04_specout/{repo}/ripple/*/ripple-digest.md のうち、調査の名前が initial・cross- で始まるもの と _removed/ 配下を除いたもの(前の2つは SPO の基礎として §5.0 に入っている。人が足した調査と方式の案ごとの調査を渡す)。
  • RIPPLE_REQUEST_FILE[repo] = {CR_PATH}/05_architecture/{repo}/work/ripple-requests.md。残っていれば削除する。

Agent tool subagent_type=xddp-architect-agent:

{ARCH_CALL_SHARED を展開}
REPO_NAME: {repo}
CRS_FILE: {CR_PATH}/03_change-requirements/CRS-{CR}.md
({CR_PATH}/04_specout/{repo}/SPO-{CR}.md が存在する場合のみ追加)SPO_FILE: {CR_PATH}/04_specout/{repo}/SPO-{CR}.md
(repo が "cross" 以外 かつ {CR_PATH}/04_specout/{repo}/SPO-{CR}-funcmap.md が存在する場合のみ追加)FUNCMAP_FILE: {CR_PATH}/04_specout/{repo}/SPO-{CR}-funcmap.md
({CR_PATH}/04_specout/{repo}/modules/ が存在する場合のみ追加)SPO_MODULES_DIR: {CR_PATH}/04_specout/{repo}/modules/
{ARCH_TEMPLATE_PATHS の全キーを展開}
INDEX_FILE: {ARCH_INDEX_FILE}
APPROACHES_DIR: {ARCH_APPROACHES_DIR}
(LESSONS_CONTEXT が空でない場合のみ追加)LESSONS_CONTEXT: {LESSONS_CONTEXT}
RULEBOOK_CONTEXT: {RULEBOOK_CONTEXT}
ADDITIONAL_REFS: {CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md (pass if exists — must conform to interface contract)
ALTERNATIVES_TASK: {pass ARCH_RULES content as-is}
(SP-ID 照合チェックで警告が生成された場合のみ追加)ADDITIONAL_CONTEXT: {ADDITIONAL_CONTEXT}
(Step 0 で CURRENT_SPECS_REFS[repo] が空でない場合のみ追加)CURRENT_SPECS_REFS: {CURRENT_SPECS_REFS[repo]}
(RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加)RIPPLE_DIGESTS: {RIPPLE_DIGESTS[repo]}
(repo が "cross" 以外の場合のみ追加)RIPPLE_REQUEST_FILE: {RIPPLE_REQUEST_FILE[repo]}

If IS_MULTI: per-repo progress table を更新: | {repo} | ✅ 完了 | ⏳ 未着手 | - |

Step A-ripple: 方式の案ごとの波紋調査(申告がある場合のみ)

方式検討エージェントが、方式の案で変える既存の識別子の広がりを確かめるために申告した波紋調査を、人の許可を得て実行する (SPO には入れずに調べる。採用した案の調査は Step C で SPO に入る)。

  1. RIPPLE_REQUEST_FILE[repo] のいずれにもデータ行(| 案 | シンボル | 理由 | の表の行)が無ければ、本 Step を飛ばす。 Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: Step A-ripple: 波紋調査の申告の確認中
  2. 全 repo の申告をまとめて提示し、回答を待つ:

    ? 方式検討エージェントが次の波紋調査を申告しました(SPO には入れずに調べます。採用した案の調査は Step C で SPO に入ります)。 | # | repo | 案 | シンボル | 理由 |

    • すべて実行 / 番号を指定して実行(シンボルを直せます) / 実行しない
  3. 許可した申告ごとに調査の名前を決める: arch-{案の小文字}。specout_bfs.py run-list --repo-dir {CR_PATH}/04_specout/{repo} で、 同じ名前の調査が同じシンボルの集合なら再利用し(complete ならそのまま、in-progress・not-started なら手順4 で再開する)、 違えば arch-{案の小文字}-2… の空いている名前にする。新しい調査ごとに Write ツールで {CR_PATH}/04_specout/{repo}/ripple/{名前}/meta.json に {"approach": "{案}", "reason": "{理由}", "seeds": [{シンボル…}], "entry_identity": "resolved"} を書く(申告の理由は自由文のためシェルの引数で渡さない)。
  4. Read ~/.claude/skills/xddp-common/procedures/ripple-engine-setup.md, apply "## Ripple Engine Setup" with: SPECOUT_SLICE: {SPECOUT_SLICE}, SPECOUT_SLICE_PYTHON_BIN: {SPECOUT_SLICE_PYTHON_BIN} → let SLICE_PY, PROBE_ENGINE, EFFECTIVE_SLICE_ENGINE, USE_PROBE_WARNING. Read ~/.claude/skills/xddp-common/procedures/ripple-run.md, apply "## Ripple Run" with: CR: {CR}, CR_PATH: {CR_PATH}, REPO_RUNS: {repo → 許可した調査のリスト(同じ repo の案A・案B は順に回る)。各要素 {run: {名前}, origin: architect-agent, symbols: {シンボル…}, meta_file: {上記の meta.json}, entry_identity: resolved, adopt: false, adopted_by: step5, RERUN_COMMAND: /xddp-investigate {CR} ripple --name {名前} --repo {repo}}}, REPOS_MAP: {REPOS_MAP}, SLICE_PY: {SLICE_PY}, PROBE_ENGINE: {PROBE_ENGINE}, EFFECTIVE_SLICE_ENGINE: {EFFECTIVE_SLICE_ENGINE}, USE_PROBE_WARNING: {USE_PROBE_WARNING}, TODAY: {TODAY}, 設定(EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_FILES_PER_MODULE, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS, SPECOUT_MAX_AFFECTED_FILES, SPECOUT_CLASSIFY_CHUNK_SIZE, SPECOUT_CLASSIFY_PARALLEL, DOCS) → let DONE, FAILED.
  5. DONE に調査がある repo ごとに、architect agent を反映モードで1回だけ再起動する(反映モードでは申告しない。1回の工程5につき1ラウンド): Read ~/.claude/skills/xddp-common/procedures/build-arch-agent-paths.md, apply "## Build Arch Agent Paths" with: CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR} → let ARCH_INDEX_FILE, ARCH_APPROACHES_DIR. Agent tool subagent_type=xddp-architect-agent:
    {ARCH_CALL_SHARED を展開}
    REPO_NAME: {repo}
    INDEX_FILE: {ARCH_INDEX_FILE}
    APPROACHES_DIR: {ARCH_APPROACHES_DIR}
    {ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE / COMPARISON_TEMPLATE_FILE を展開}
    RIPPLE_REFLECT: true
    RIPPLE_RESULTS: {DONE の各調査について「案{X}: {CR_PATH}/04_specout/{repo}/ripple/{名前}/ripple-digest.md」の一覧}
    
    RIPPLE_DIGESTS[repo] に DONE の各調査の ripple-digest.md を加える(Step B・B2 で使う)。
  6. 見送った申告と FAILED の申告ごとに Run via Bash: PY=$(command -v python3 || command -v python) && "$PY" ~/.claude/skills/xddp-common/scripts/xddp_progress.py note-add --cr-path {CR_PATH} --step 5 --text "波紋調査の申告を見送り({repo} 案{X}: {シンボル}。{人の判断/失敗})" その案の影響範囲は DSN の「未検証」の記述のまま残る。FAILED の調査は /xddp-investigate {CR} ripple --name {名前} --repo {repo} で 続きから行える(完了後に /xddp-05-arch {CR} を再実行すると、Step A で方式検討エージェントがその要約を読む)。

Step B: Review Loop (up to REVIEW_MAX_ROUNDS.DSN rounds)

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: Step B: AIレビュー中

For each {repo} in AFFECTED_REPOS:

Read ~/.claude/skills/xddp-common/procedures/build-arch-agent-paths.md, apply "## Build Arch Agent Paths" with: CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR} → let ARCH_INDEX_FILE, ARCH_APPROACHES_DIR.

architect agent 完了後に {CR_PATH}/05_architecture/{repo}/DSN-{CR}-comparison.md の存在チェックを行い、 存在する場合は「2案以上モード」、存在しない場合は「1案モード」として TARGET_FILE を決定する:

  • 2案以上モード: TARGET_FILE = {CR_PATH}/05_architecture/{repo}/DSN-{CR}-comparison.md
  • 1案モード: TARGET_FILE = {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-A.md

また REFERENCE_FILES に approach ファイルを追加する(comparison.md が TARGET の場合):

  • {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-A.md (comparison.md が TARGET の場合)
  • {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-B.md (exists の場合)
  • {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-C.md (exists の場合)

Read ~/.claude/skills/xddp-common/procedures/review-loop.md, apply "## Review Loop" with: DOCUMENT_TYPE: DSN NEXT_DOCUMENT_TYPE: CHD CONFIG_KEY: REVIEW_MAX_ROUNDS.DSN TARGET_FILE: {上記で決定した TARGET_FILE} REFERENCE_FILES: [ {CR_PATH}/03_change-requirements/CRS-{CR}.md, ({CR_PATH}/04_specout/{repo}/SPO-{CR}.md が存在する場合のみ追加){CR_PATH}/04_specout/{repo}/SPO-{CR}.md, (repo が "cross" 以外 かつ {CR_PATH}/04_specout/{repo}/SPO-{CR}-funcmap.md が存在する場合のみ追加){CR_PATH}/04_specout/{repo}/SPO-{CR}-funcmap.md, (comparison.md が TARGET の場合のみ追加){CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-A.md, (exists の場合のみ追加){CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-B.md, (exists の場合のみ追加){CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-C.md, (RIPPLE_DIGESTS[repo] が1件以上ある場合のみ追加){RIPPLE_DIGESTS[repo]} ] REVIEW_OUTPUT_FILE: {CR_PATH}/05_architecture/{repo}/review/05_architecture-review.md FIXER_AGENT: xddp-architect-agent FIXER_PARAMS: {ARCH_CALL_SHARED を展開} REPO_NAME: {repo} INDEX_FILE: {ARCH_INDEX_FILE} APPROACHES_DIR: {ARCH_APPROACHES_DIR} {ARCH_TEMPLATE_PATHS の INDEX_TEMPLATE_FILE / APPROACH_TEMPLATE_FILE / COMPARISON_TEMPLATE_FILE を展開} REVIEW_FILE: {CR_PATH}/05_architecture/{repo}/review/05_architecture-review.md PROGRESS_CR_PATH: {CR_PATH} PROGRESS_STEP_NUM: 5 METRICS_TARGET: {repo}

If IS_MULTI: per-repo progress table を更新: | {repo} | ✅ 完了 | ✅ 完了 | {TODAY} |

Step B-cross: Cross DSN AI Review (only when HAS_CROSS = true)

If HAS_CROSS: Read ~/.claude/skills/xddp-common/procedures/cross-artifact-review.md, apply "## Cross Artifact Review" with: CR_PATH: {CR_PATH} STEP_NUM: 5 STEP_LABEL: Step B-cross DOCUMENT_TYPE: DSN NEXT_DOCUMENT_TYPE: CHD TARGET_FILE: {CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md REFERENCE_FILES: [ {CR_PATH}/03_change-requirements/CRS-{CR}.md, {CR_PATH}/04_specout/cross/SPO-{CR}-cross.md (if exists), for each {repo} in AFFECTED_REPOS: - {CR_PATH}/05_architecture/{repo}/DSN-{CR}-comparison.md (exists かつ 2案以上の場合) - {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-A.md (exists の場合) - {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-B.md (exists の場合) - {CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-C.md (exists の場合) (インデックスファイル DSN-{CR}.md は省略。採用方式・アプローチ詳細が含まれるファイルを直接渡す) ] OUTPUT_FILE: {CR_PATH}/05_architecture/cross/review/05_architecture-cross-review.md DOC_DESCRIPTION: インタフェース仕様・実装依存順序に特化した成果物 If IS_MULTI: per-repo progress table を更新: | cross | ✅ 完了 | ✅ 完了 | {TODAY} |

Step B2: Human Review Gate

Build INTRO_NOTE by expanding the following (REPO_WARNINGS_MAP is already resolved in this skill's scope; omit INTRO_NOTE entirely if REPO_WARNINGS_MAP is empty):

⚠️ SP-ID 照合チェックで以下の警告が見つかりました(Step A で検出・処理は続行済みです):
{for each (repo, WARNINGS) in REPO_WARNINGS_MAP: - {repo}: {WARNINGS の内容}}

Build ARTIFACTS_TEXT by expanding the following (AFFECTED_REPOS/HAS_CROSS are already resolved in this skill's scope):

{for each repo in AFFECTED_REPOS:}
- {repo}: インデックス `{CR_PATH}/05_architecture/{repo}/DSN-{CR}.md`
  - 案A: `{CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-A.md`
  - 案B: `{CR_PATH}/05_architecture/{repo}/DSN-{CR}-approach-B.md` (存在する場合)
  - 比較: `{CR_PATH}/05_architecture/{repo}/DSN-{CR}-comparison.md` (2案以上の場合)
  - 方式の案ごとの波紋調査の要約({RIPPLE_DIGESTS[repo] がある場合のみ。調査ごとに1行): `{要約のパス}`
  - AIレビュー: `{CR_PATH}/05_architecture/{repo}/review/05_architecture-review.md`
{if HAS_CROSS:}
- cross: `{CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md`
  - AIレビュー: `{CR_PATH}/05_architecture/cross/review/05_architecture-cross-review.md`

Read ~/.claude/skills/xddp-common/procedures/human-review-gate.md, apply "## Human Review Gate" with: CR_PATH: {CR_PATH} STEP_NUM: 5 STEP_LABEL: Step B2 INTRO_NOTE: {built above, omit if REPO_WARNINGS_MAP is empty} ARTIFACTS_TEXT: {built above} REVISE_COMMAND: /xddp-revise {CR} arch(対象リポジトリを指定) OPTION_NOTE: | 詳細図(構造体関連図・主処理シーケンス図)が必要な場合: 全案を統一粒度で生成します(比較可能な形式): /xddp-05-arch {CR} --detail → let CHANGED.

If CHANGED:

  • For each {repo} in AFFECTED_REPOS: Read ~/.claude/skills/xddp-common/procedures/final-review-pass.md, apply "## Final Review Pass" with: DOCUMENT_TYPE: DSN NEXT_DOCUMENT_TYPE: CHD TARGET_FILE: {CR_PATH}/05_architecture/{repo}/DSN-{CR}-comparison.md が存在すれば comparison.md、 なければ approach-A.md(Step B と同一の判定ロジック) REFERENCE_FILES: {Step B と同一} REVIEW_ROUND: (last_round + 1) OUTPUT_FILE: {CR_PATH}/05_architecture/{repo}/review/05_architecture-review.md
  • If HAS_CROSS and the user changed cross/ DSN: Read ~/.claude/skills/xddp-common/procedures/final-review-pass.md, apply "## Final Review Pass" with: DOCUMENT_TYPE: DSN NEXT_DOCUMENT_TYPE: CHD TARGET_FILE: {CR_PATH}/05_architecture/cross/DSN-{CR}-cross.md REFERENCE_FILES: {Step B-cross と同一} REVIEW_ROUND: (last_round + 1) OUTPUT_FILE: {CR_PATH}/05_architecture/cross/review/05_architecture-cross-review.md

Step B3: Detail Diagram Generation (--detail mode only)

DETAIL_MODE = true の場合のみ実行。通常フロー(Step 0〜B2)はスキップ済み。

For each {repo} in AFFECTED_REPOS: cross/ はスキップ: {repo} が "cross" の場合、DSN-{CR}-cross.md は approach-*.md 構造を持たないためスキップする。 If {repo} = "cross": continue. (REPOS: キーに "cross" は使用不可(CLAUDE.md 予約名)のため実際には到達しない防衛的ガード)

If {CR_PATH}/05_architecture/{repo}/DSN-{CR}.md does not exist: Warn the user: > ⚠️ {repo}: DSN が存在しません。先に通常モードで /xddp-05-arch {CR} を実行してください。 Skip this repo.

Read ~/.claude/skills/xddp-common/procedures/build-arch-agent-paths.md, apply "## Build Arch Agent Paths" with: CR_PATH: {CR_PATH}, REPO_NAME: {repo}, CR: {CR} → let ARCH_INDEX_FILE, ARCH_APPROACHES_DIR.

Agent tool subagent_type=xddp-architect-agent:

{ARCH_CALL_SHARED を展開}
REPO_NAME: {repo}
INDEX_FILE: {ARCH_INDEX_FILE}
APPROACHES_DIR: {ARCH_APPROACHES_DIR}
{ARCH_TEMPLATE_PATHS の APPROACH_TEMPLATE_FILE を展開}
DETAIL_MODE: true

Report to user (Japanese):

✅ 詳細図を生成しました。 {for each repo where repo ≠ "cross":}

  • {repo}: 更新ファイル一覧(INDEX_FILE から発見した approach-*.md)

DETAIL_MODE = true の場合、Step C 以降はすべてスキップする。詳細図生成の結果報告は Step B3 内の Report to user で完結する(progress.md の更新もしない)。

Step C: Feed Architecture Decision Back to CRS

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ? 進行中, DETAIL_STEP: Step C: CRSフィードバック中

採用案の波紋調査の採用と SPO の仕上げ: cross 以外の repo ごとに次を行う。repo ごとの DSN(DSN-{CR}-comparison.md も DSN-{CR}-approach-A.md も)が無い repo は飛ばす(CR_PROFILE: quick の Step -1 の経路では repo ごとの DSN が無いため、すべて飛ばされる)。 Let O = {CR_PATH}/04_specout/{repo}、PY = command -v python3 || command -v python の結果、BFS = ~/.claude/skills/xddp-04-specout/scripts/specout_bfs.py。

  1. 採用方式を読む(DSN-{CR}-comparison.md の **採用方式:** 案{X}。1案モードは案A)。
  2. Run via Bash: "$PY" "$BFS" run-list --repo-dir {O} → runs。由来が architect-agent の調査のうち approach が採用方式で状態が complete のもので、created が最も新しい調査があれば、Run via Bash: "$PY" "$BFS" run-adopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}。 adopted_by が step5 で採用中のそれ以外の調査(別の案、同じ案の古い調査)を、それぞれ Run via Bash: "$PY" "$BFS" run-unadopt --repo-dir {O} --run {名前} --by step5 --today {TODAY}。人が採用した調査(adopted_by が human)は変えない。 stdout の changed が true になった調査を ADOPTION_CHANGES[repo] に記録する。
  3. Run via Bash: "$PY" "$BFS" finish-needed --repo-dir {O} → needed が true の repo(手順2 で採用が変わった repo と、前回の SPO の仕上げが 途中で止まった repo が当たる)について: Read ~/.claude/skills/xddp-common/procedures/specout-doc-levels.md, apply "## Specout Doc Levels" with: CR_PROFILE: {CR_PROFILE}, SPECOUT_DIAGRAM_LEVEL: {SPECOUT_DIAGRAM_LEVEL}, SPECOUT_SEQUENCE_LEVELS: {SPECOUT_SEQUENCE_LEVELS} → let EFFECTIVE_DIAGRAM_LEVEL, EFFECTIVE_SEQUENCE_LEVELS, EFFECTIVE_SPO_DETAIL_LEVEL. Read ~/.claude/skills/xddp-common/procedures/specout-finish.md, apply "## Specout Finish" with: CR: {CR}, CR_PATH: {CR_PATH}, repo: {repo}, REPOS_MAP: {REPOS_MAP}, ENTRY_POINTS: 空, IS_MULTI: {IS_MULTI}, XDDP_DIR: {XDDP_DIR}, DOCS: {DOCS}, EXCLUDE_PATTERNS: {EXCLUDE_PATTERNS}, INCLUDE_EXTENSIONS: {INCLUDE_EXTENSIONS}, SPECOUT_MAX_FILES_PER_MODULE: {SPECOUT_MAX_FILES_PER_MODULE}, SPECOUT_MAX_AFFECTED_FILES: {SPECOUT_MAX_AFFECTED_FILES}, EFFECTIVE_DIAGRAM_LEVEL: {EFFECTIVE_DIAGRAM_LEVEL}, EFFECTIVE_SEQUENCE_LEVELS: {EFFECTIVE_SEQUENCE_LEVELS}, EFFECTIVE_SPO_DETAIL_LEVEL: {EFFECTIVE_SPO_DETAIL_LEVEL}, RERUN_COMMAND: /xddp-05-arch {CR} --from-step-c, TODAY: {TODAY} → let FINISH_STATUS, REWRITTEN_SECTIONS[repo], SPO_BACKUP[repo]。 stopped なら、CRS への反映へ進まずに停止し、原因の解消後に /xddp-05-arch {CR} --from-step-c を再実行するよう伝える (採用・取り消しは冪等で、再実行では finish-needed が true のままなので SPO の仕上げが再び行われる。入力が変わらなければ document agent は起動しない)。
  4. 続けて下記の CRS へのフィードバックを行う。採用案の影響は DSN(反映モードで書かれた影響範囲)を通じて CRS に入る。

Read all per-repo DSN files: 各 {repo} の comparison.md(2案以上の場合)または approach-A.md(1案の場合) (存在する場合のみ。CR_PROFILE: quick かつ HAS_CROSS = true の経路では Step A が未実行のため per-repo ファイルは存在せず対象外となる)、および cross/DSN-{CR}-cross.md(if exists)。 フィードバック抽出は採用方式・設計指針が記載されているファイルから行う。 For each file, extract items that are not yet reflected in CRS (new constraints, NF requirements, interface specs, out-of-scope items). Compose a unified DESIGN_FEEDBACK list in the format: 種別: {追加UR/追加SR/追加SP/廃止SR/廃止SP} | 内容: ... | 根拠: DSN §X [cross] Append [cross] to items from cross/DSN. Merge per-repo and cross items into one list.

If the list is non-empty: Agent tool subagent_type=xddp-spec-writer-agent:

CR_NUMBER: {CR}
MODE: update-design
CRS_FILE: {CR_PATH}/03_change-requirements/CRS-{CR}.md
DESIGN_FEEDBACK: (the composed list from above)
TODAY: {TODAY}
AUTHOR_NOTE: 方式検討フィードバックを反映。採用方式に基づく要求・仕様の追加/削除/変更。

Step D: Regenerate CRS Excel (UR-016)

Run only if CRS was updated in Step C.

Read ~/.claude/skills/xddp-common/procedures/regenerate-crs-excel.md, apply "## Regenerate CRS Excel" with: CR_PATH: {CR_PATH} CR: {CR}

Step E: Update progress.md

Read ~/.claude/skills/xddp-common/SKILL.md, apply "## Progress Update" with: CR_PATH: {CR_PATH}, STEP_NUM: 5, STATE: ✅ 完了, DETAIL_STEP: -, ARTIFACT_LINK: [05_architecture/](05_architecture/) Next command → /xddp-06-design {CR}

Step F: Report in Japanese

Report: repos, adopted approach per repo, DSN files, review rounds, CRS feedback items. 加えて、Step A-ripple で実行した波紋調査(repo・案・調査の名前・要約のパス)と、Step C で採用を変えた調査(ADOPTION_CHANGES)・ SPO の仕上げで書き直した節(REWRITTEN_SECTIONS)・退避した SPO(SPO_BACKUP)を報告する(SPO の AI レビューは行っていない。 /xddp-review {CR} specout で確認できる)。

04 同仓库更多 Skills