[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MDSYYVMZ6NWJ0S7AVBV3EM":3,"skill-same:01M6MDSYYVMZ6NWJ0S7AVBV3EM":45},{"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},"01M6MDSYYVMZ6NWJ0S7AVBV3EM","xddp-investigate",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-investigate\u002FSKILL.md",[],[17,18],"investigate","xddp investigate","2026-11-10 10:12:30",false,"---\nname: xddp-investigate\ndescription: XDDP 母体調査の追加: CR の母体調査に波紋調査を足す・採用する・取り消す・取り除く。人の依頼でファイル・モジュールを調べて資料にする。工程4a の後でも、工程5以降でも実行できる。「このシンボルの影響を見たい」「この調査を SPO に入れて」「この調査は外して」「調査の一覧」「このモジュールを調べて資料にして」「資料にする候補を見せて」などで起動する。\nargument-hint: \"[CR番号] (ripple [--name 名前] [--adopt] シンボル... | adopt --name 名前 | unadopt --name 名前 | remove --name 名前 | list | finish | document 対象... [--focus 観点] | suggest) [--repo リポジトリ]\"\n---\n\nYou are orchestrating **XDDP — 母体調査の追加（波紋調査の実行・採用・取り消し・取り除き、人の依頼による資料の追加）**.\n\n**Arguments:** $ARGUMENTS = [CR_NUMBER]（省略可）動詞 [オプション・シンボル…]\n- 動詞（先頭）: `ripple`（波紋調査を作る・続ける）・`adopt`（採用する）・`unadopt`（採用を取り消す）・`remove`（取り除く）・\n  `list`（一覧）・`finish`（SPO の仕上げのやり直し）・`document`（人の依頼でファイル・ディレクトリ・モジュールを調べて資料にする）・\n  `suggest`（資料にする候補を示す）\n- `--name 名前`: 調査の名前（`^[a-z0-9][a-z0-9-]{0,39}$`。`initial`・`cross-`・`arch-` で始まる名前と、名前 `callslot`（完全一致）は、\n  工程4a・クロスリポジトリ伝播・工程5・工程4a の同じ呼び出し口の関数の調査が使うため、`ripple` では指定できない〔`callslot-foo` 等は使える〕）\n- `--adopt`（`ripple` のみ）: 完了したら採用して SPO に入れる\n- `--repo リポジトリ`: 対象の repo\n- それ以外の語（`ripple` のみ）: シンボル（`名前`・`名前[FILE:パス]`・`名前[CLASS:クラス名]`〔名前空間をまたいで同じ名前のクラスがあれば `名前[CLASS:名前空間::クラス名]`。名前空間は内側の部分だけでもよい。名前空間に属さないクラスは `名前[CLASS:::クラス名]`〕・`型名.メンバー名`）\n- `document` の対象: リポジトリ相対のファイル・ディレクトリ、またはモジュール名（SPO §5.0・§8 の名前）\n- `--focus 観点`（`document` のみ。最後に置く）: `--focus` より後の語の残り全部を観点の文とする（観点は空白を含む自由文のため）\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 (YYYY-MM-DD).\n\n(xddp.config.md lookup done in xddp-common\u002FSKILL.md「## CR Resolution」; reuse WORKSPACE_ROOT, XDDP_DIR, DOCS, REPOS_MAP, REPOS_KEYS, IS_MULTI,\nDEVELOPMENT_MODE, CR_PROFILE, EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_AFFECTED_FILES, SPECOUT_MAX_FILES_PER_MODULE,\nSPECOUT_DIAGRAM_LEVEL, SPECOUT_SEQUENCE_LEVELS, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_CLASSIFY_CHUNK_SIZE,\nSPECOUT_CLASSIFY_PARALLEL, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS,\nSPECOUT_SLICE_PYTHON_BIN, SPECOUT_CALLSLOT_MAX_WAVE_DEPTH.\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`、`SPECOUT_CALLSLOT_MAX_WAVE_DEPTH` は未指定時 `2`。)\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`.\nLet `PY` = `command -v python3 || command -v python` の結果、`BFS` = `~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Fscripts\u002Fspecout_bfs.py`。\n以降の Bash 呼び出しで、スクリプトが見つからない場合は setup.sh の実行を案内して停止し、exit 非0 の場合は stderr を表示して停止する\n（下記で別の扱いを定めた場合を除く）。\n\n`REST_ARGS` の先頭の語を `VERB`、`--focus` より後の語の残り全部を空白でつないだものを `FOCUS`（`document` のみ）、それより前の語について\n`--name` の次の語を `NAME`、`--repo` の次の語を `REPO_ARG`、`--adopt` の有無を `ADOPT_FLAG`、残りの語を `SYMBOLS`（`document` では対象 `TARGETS`）\nとする。`VERB` が無い・上記の8つ以外なら、上の **Arguments** の使い方を示して停止する。\n人が言葉で頼んだ場合（例「案B の調査は外して」）は、`list` の結果から名前を特定してこの引数に置き換えて実行する（特定できなければ尋ねる）。\n資料の依頼を言葉で受けた場合（例「{機能名} まわりを調べて資料にして」。通信の再接続処理まわり／在庫引当の処理まわり／センサ読み取りの\n割り込み処理まわり等）は、SPO §5.0・`ripple-summary.md`・`suggest` の結果から対象を特定して `document` の引数に置き換え、\n**置き換えた対象を人に示して確認してから**実行する（人の言葉とファイルの対応は推測であるため）。\n\n## Step 0: 共通の前提\n\n1. `DEVELOPMENT_MODE` = `new` なら「新規開発モードでは母体調査を行いません」と伝えて停止する。\n2. 対象の repo（`TARGET_REPOS`）: `REPO_ARG` があればその repo（`REPOS_KEYS` に無ければ停止）。無ければ、シングルリポジトリはその repo、\n   マルチリポジトリは `list` なら全 repo、それ以外は尋ねる。\n3. 下調べが完了していない repo（`{CR_PATH}\u002F04_specout\u002F{repo}\u002Fwork\u002Fprelim-index.md` が無い）は「先に `\u002Fxddp-04-specout {CR}` を実行して\n   ください」と伝えて `TARGET_REPOS` から外す。空になれば停止する。\n4. 人レビューゲートの待機中（progress.md の詳細ステップが人レビューの待機を示している）に実行すると、ゲートの変更判定に SPO の変更が\n   混ざる。待機中なら、その旨を1行伝える（止めない）。\n5. 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\n以下 `{O}` = `{CR_PATH}\u002F04_specout\u002F{repo}`。\n\n## Step 1: 動詞ごとの処理\n\n### `ripple [--name 名前] [--adopt] シンボル…`\n\n対象は `TARGET_REPOS` の1つの repo（`{repo}`）。\n1. Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}` → `runs`。\n2. 名前を決める: `NAME` が無ければ `run-{n}`（`runs` に無い最小の正の整数 `n`）。`NAME` が `initial`・`cross-`・`arch-` で始まる場合、\n   または `callslot` と一致する場合は、シンボルがあれば停止する（それらの調査は工程4a・クロスリポジトリ伝播・工程5が作る）。シンボルが無ければ、\n   途中で止まった調査の続きとして手順4 へ進む。\n3. - `NAME` の調査が無い: `SYMBOLS` が空なら停止する（シンボルを求める）。Write ツールで `{O}\u002Fripple\u002F{NAME}\u002Fmeta.json` に\n     `{\"approach\": null, \"reason\": null, \"seeds\": [{SYMBOLS…}], \"entry_identity\": \"resolved\"}` を書く。\n   - `NAME` の調査があり `complete` で、`SYMBOLS` が空でない: 停止し、別の名前を指定するか `\u002Fxddp-investigate {CR} remove --name {NAME}` で\n     取り除いてから実行するよう求める。\n   - `NAME` の調査があり、それ以外（途中で止まった調査）: `SYMBOLS` は使わない（続きから行う）。\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`.\n5. 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}: [{run: {NAME}, origin: `human`（`arch-`・`cross-`・`callslot` の続きはその調査の由来）, symbols: {SYMBOLS}, meta_file: {O}\u002Fripple\u002F{NAME}\u002Fmeta.json,\n       entry_identity: `resolved`, adopt: {ADOPT_FLAG}, adopted_by: `human`, RERUN_COMMAND: `\u002Fxddp-investigate {CR} ripple --name {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〔`NAME` が `callslot` なら `SPECOUT_CALLSLOT_MAX_WAVE_DEPTH`〕, SPECOUT_MAX_FILES_PER_MODULE,\n     SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, 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`。`FAILED` なら理由を示し、`\u002Fxddp-investigate {CR} ripple --name {NAME} --repo {repo}` で続きから行えると伝えて停止する。\n6. 報告: 調査の要約 `{O}\u002Fripple\u002F{NAME}\u002Fripple-digest.md`・全量 `ripple-summary.md`・`ripple-graph.md`・`ripple-tree.md` のパス、\n   確定ファイル数・機能数・打ち切り（`run-list` と要約から転記する）、採用の有無。\n   名前が `callslot` の調査を完了させた場合は、「`callslot` は `SPECOUT_CALLSLOT_MAX_WAVE_DEPTH` の波数までしか調べません。より深く調べる場合は、\n   `callslot` のシードで別の名前の調査を `\u002Fxddp-investigate {CR} ripple --adopt --repo {repo} {シンボル…}` で作ってください」と伝える。\n   名前が `arch-` で始まる調査（工程5の Step A-ripple で途中まで進んだもの）を完了させた場合は、「方式検討の DSN への反映は工程5の中だけで\n   行います。`\u002Fxddp-05-arch {CR}` を再実行すると、Step A で方式検討エージェントがこの要約を読みます」と伝える。\n7. `ADOPT_FLAG` があり採用した場合は、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。採用しなかった場合は、SPO は変わっていない旨と、\n   `\u002Fxddp-investigate {CR} adopt --name {NAME} --repo {repo}` で後から SPO に入れられる旨を伝えて終わる。\n\n### `adopt --name 名前` ／ `unadopt --name 名前`\n\n`NAME` が無ければ停止する。対象は `TARGET_REPOS` の1つの repo。\n- `unadopt` で `NAME` が `initial` の場合、または取り消すと採用した調査が0件になる場合（`run-list` の `adopted_runs` が `NAME` だけ）は、\n  「SPO の波紋調査の欄から外れ、影響範囲が狭まります（影響漏れは後工程で気付きにくい）。取り消しますか」と確認してから行う。\n- Run via Bash: `\"$PY\" \"$BFS\" run-adopt --repo-dir {O} --run {NAME} --by human --today {TODAY}`（`unadopt` は `run-unadopt`）。\n  exit 1（調査が無い・完了していない）は stderr を示して停止する（完了していない調査は `\u002Fxddp-investigate {CR} ripple --name {NAME}` で続ける）。\n- stdout の `changed` が false なら「既に{採用済み／取り消し済み}です」と伝えて終わる。true なら、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。\n\n### `remove --name 名前`\n\n`NAME` が無ければ停止する。対象は `TARGET_REPOS` の1つの repo。`run-list` で調査の採用の有無を確かめ、\n「調査 `{NAME}` を `ripple\u002F_removed\u002F` へ退避し、記録から外します（{採用していれば: SPO の波紋調査の欄からも外れます}）。取り除きますか」と\n確認してから、Run via Bash: `\"$PY\" \"$BFS\" run-remove --repo-dir {O} --run {NAME} --today {TODAY}`。\nstdout の `moved_to`・`propagation_reset`（クロスリポジトリ伝播の調査なら、伝播の記録が未投入に戻り、次の `\u002Fxddp-04-specout {CR}` で\n同じシンボルが新しい調査として再投入される）を伝える。`was_adopted` が true なら、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。\n\n### `finish`\n\n理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」の手順2 以降だけを行う（SPO の仕上げが途中で止まった場合の再開）。\n\n### `suggest`\n\n対象は `TARGET_REPOS` の1つの repo。Run via Bash: `\"$PY\" \"$BFS\" doc-suggest --repo-dir {O} --exclude '{EXCLUDE_PATTERNS}'`\n（除外パターンは設定の値。SPO を組み立てる `assemble-spo --exclude` と同じもの）。\n- `reason` が `no-adopted-runs` なら「候補を出す波紋調査の結果がありません」と伝えて終わる。\n- `candidates` を表で示す: | モジュール | 確定ファイル数 | うち名前の一致のみ | 最も浅い到達波 | シードの直接参照（うち資料に無い） | 届いた調査 |\n  （値は stdout から転記する。自分で数えない。`candidate_count` が表の行数より多ければ「ほか {n} モジュール」と添える）\n- 各候補に、SPO や `ripple-summary.md` から読み取れる根拠を1行添えてよい。依頼するかは人が決める（提案だけで `document` を実行しない）。\n  依頼する場合は `\u002Fxddp-investigate {CR} document {モジュール名} --repo {repo}` で行える旨を伝える。\n\n### `document 対象… [--focus 観点]`\n\n対象は `TARGET_REPOS` の1つの repo。`TARGETS` が空なら停止する（対象を求める）。\n同じ repo で工程4a・`finish`・別の `document` と同時に実行しないよう1行注意する（台帳・観察メモ・資料の書き込みが衝突するため）。\n\n1. **準備** — Write ツールで `{O}\u002Fwork\u002Fdoc-request-focus.md` に `FOCUS` を書く（無ければ空のファイル。自由文をシェルの引数で渡さない）。\n   `{O}\u002Fwork\u002Fdoc-request-append.txt` があれば削除する（前回の依頼の答えを持ち越さない）。\n2. **対象の展開（スクリプト）** — Write ツールで `{O}\u002Fwork\u002Fdoc-request-targets.txt` に `TARGETS` を1行ずつ書き、Run via Bash:\n   `\"$PY\" \"$BFS\" doc-request --repo-dir {O} --repo-path {REPOS_MAP[repo]} --targets-file {O}\u002Fwork\u002Fdoc-request-targets.txt --exclude '{EXCLUDE_PATTERNS}' --include-ext '{INCLUDE_EXTENSIONS}' --soft-limit {SPECOUT_MAX_AFFECTED_FILES} --batch-size {SPECOUT_MAX_AFFECTED_FILES} --out {O}\u002Fwork\u002Fdoc-request-files.json`\n   （`doc-request-append.txt` がある場合は `--append-file {O}\u002Fwork\u002Fdoc-request-append.txt` を付ける）。exit 1 は stderr を示して停止する\n   （SPO の仕上げが途中〔`specout-finish.json` が `running`〕と報告されたら、「先に `\u002Fxddp-investigate {CR} finish --repo {repo}` を実行してください」と伝える。\n   新しいモジュール名の衝突は、`{O}\u002Fwork\u002Fmodule-assignments.json` に組を人が書いて名前を分けるよう案内する）。stdout から次を示す:\n   - `not_found`（リポジトリに無い・モジュール名に一致しない）・`excluded`（名指しした対象より下の階層で除外パターンに一致したため外した\n     ファイル）・`skipped_ext`（`SPECOUT_INCLUDE_EXTENSIONS` に一致しないため外したファイル）・`skipped_binary`（バイナリのため外したファイル）。\n   - `already_documented`（資料があるファイル）があれば、ファイルごとに（多ければモジュールごとにまとめて）\n     「すでに資料として記述しています。追記が必要ですか？」と尋ねる（`appended_on` があれば「（{appended_on} に追記済み）」を添える。\n     追記の要否は自分で判断しない）。「必要」と答えたファイルを `{O}\u002Fwork\u002Fdoc-request-append.txt` に1行ずつ Write し、`--append-file` を\n     付けて手順2 のコマンドを再実行する（そのファイルは追記の対象として入る）。「不要」のファイルは外れる。この確認は件数の確認より前に行い、\n     再実行の後は尋ねない。以下の確認は再実行の出力で行う。\n   - `pattern_overridden`（名指しした対象が除外パターンに一致したため、除外パターンを適用せずに対象にしたファイル）は、質問せずに件数と対象を示す。\n   - 依頼への疑問（拒否はしない）: `concerns` のあるファイル（`name_only`＝波紋調査の到達が名前の一致だけ、`gap_reviewed`＝追加下調べが関係なしと\n     判断した〔理由 `gap_reason` を添える〕）と、SPO（§5.0・§7）・CRS から根拠を挙げられる懸念（例: CRS の変更対象の振る舞いと離れた機能に見える）が\n     あれば、根拠とともにまとめて示し、「続けますか／対象を変えますか」と1回だけ尋ねる。根拠を挙げられない推測は示さない。\n     決めるのは人で、「続ける」なら依頼どおりに行う。\n   - 拡張子ごとのファイル数（`ext_counts`）と、モジュールごとのファイル数（`modules`）を示す。\n   - `over_soft_limit` が true（ファイル数 `file_count` が `SPECOUT_MAX_AFFECTED_FILES` を超える）なら、「全部」／「絞る（対象を指定し直す）」を尋ねる。\n   - `file_count` が 0 なら、その旨を伝えて終わる。\n   - 「対象を変える」「絞る」が選ばれたら、人が指定し直した対象で手順2 をやり直す。同じ実行の中で既に答えたファイルには、追記の要否と\n     依頼への疑問を再び尋ねない（追記の答えは `doc-request-append.txt` に残っている。依頼への疑問は新しく対象に加わったファイルの懸念だけを示す）。\n3. **書き先の決定（スクリプト）** — Run via Bash:\n   `\"$PY\" \"$BFS\" assemble-spo --repo-dir {O} --repo-path {REPOS_MAP[repo]} --repo {repo} --output-dir {O} --summary-template ~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Ftemplates\u002F04_specout-summary-template.md --module-template ~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Ftemplates\u002F04_specout-module-template.md --max-files-per-module {SPECOUT_MAX_FILES_PER_MODULE} --cr {CR} --today {TODAY} --layout-only --only requested --files-file {O}\u002Fwork\u002Fdoc-request-files.json > {O}\u002Fwork\u002Fdoc-request-layout.json`\n   （stdout の `file_outputs` が書き先。`discarded_drafts` が空でなければ、そのモジュールの途中の下書きを捨てた〔台帳に行が無く、再依頼で資料にし直せる〕旨を伝える）。\n   exit 0 以外（下書きの抜き出しの後に §2.A… が変わった・モジュール名の衝突・`module-assignments.json` の不正等）なら stderr を示して停止し、\n   「原因を直してから、同じ `\u002Fxddp-investigate {CR} document …` を再実行してください」と伝える（エージェントを起動していないため、台帳・資料は変わっていない）。\n4. **資料を書く（LLM）** — `{O}\u002Fwork\u002Fdoc-request-files.json` の `batches` を先頭から1つずつ順に処理する（並列にしない。統合パスでは同じ SPO の\n   下書きに書くため）。バッチ `i`（0 始まり）ごとに:\n   1. 追記のバッチ（`mode` が `append`）なら、Run via Bash:\n      `\"$PY\" \"$BFS\" doc-append-check snapshot --repo-dir {O} --files-file {O}\u002Fwork\u002Fdoc-request-files.json --layout {O}\u002Fwork\u002Fdoc-request-layout.json --batch {i}`\n      exit 4（前回の追記の写しが残っている）なら、stdout の写しの日時とファイルを示し、「元に戻す（前回の追記の前の状態に戻す）」／\n      「捨てる（今の状態を残し、写しを消す）」を尋ねて、`\"$PY\" \"$BFS\" doc-append-check restore --repo-dir {O}`／`\"$PY\" \"$BFS\" doc-append-check discard --repo-dir {O}` を\n      行ってから、もう一度 `snapshot` する（写しの後に工程4a・`finish` 等が台帳や資料を書いていることがあるため、黙って戻さない。\n      `restore` が exit 1 なら stderr を示して停止する）。\n   2. **Agent tool** で `subagent_type=xddp-specout-prelim-agent` を起動する。入力は \"## Specout Finish\"（`~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-finish.md`）の\n      追加下調べ（手順4.3）と同じ値で、次だけを変える（`GAP_REVIEWED_FILE` は渡さない。`ENTRY_POINTS` は空。`OUTPUT_DIR` は `{O}\u002F`。\n      資料の記載量は Step 0 の `EFFECTIVE_*` の値）:\n      ```\n      PRELIM_MODE: requested\n      TARGETS: {バッチのファイルごとに「- {ファイル} → モジュール {doc-request-files.json の module}・書き先 {doc-request-layout.json の file_outputs の output_file}」。mode が append の行は末尾に「（追記）」}\n      REQUEST_FOCUS_FILE: {O}\u002Fwork\u002Fdoc-request-focus.md\n      ```\n   3. 追記のバッチなら、返答によらず（`OK:`・`NG:`・起動の失敗のどれでも）Run via Bash:\n      `\"$PY\" \"$BFS\" doc-append-check verify --repo-dir {O}`（返答が `OK:` で始まらなければ `--restore` を付ける）。\n      - exit 0: 追記を残す。\n      - exit 3（元に戻した）: 「追記で既存の記述・台帳が変わった、または追記が最後まで終わらなかったため、追記の前の状態に戻しました」と\n        stderr の理由とともに示して停止する。\n      - exit 1（検査の実行エラー）: stderr を示して停止する（写し `work\u002Fdoc-append-backup\u002F` は残り、次の `snapshot` が exit 4 で知らせる）。\n   4. 返答が `OK:` で始まれば（追記のバッチは `verify` が exit 0 なら）、返答で「資料にできなかった」とされたファイルを除いたバッチのファイルを\n      `{O}\u002Fwork\u002Fdoc-request-done.txt` に Write し、Run via Bash:\n      `\"$PY\" \"$BFS\" doc-request-record --repo-dir {O} --files-file {O}\u002Fwork\u002Fdoc-request-files.json --done-file {O}\u002Fwork\u002Fdoc-request-done.txt --focus-file {O}\u002Fwork\u002Fdoc-request-focus.md --today {TODAY}`\n   5. 返答の2行目以降の `確認できず`・`助言`・`追加の観察なし`・`資料にできなかった` の行を、理由・助言とともに示す。\n   6. 返答が `OK:` で始まらなければ示して停止し、「同じ `\u002Fxddp-investigate {CR} document …` を再実行すると続きから行います（資料にしたファイルは\n      「すでに資料として記述しています」と尋ねられるので、追記しない場合は「不要」と答えてください）」と伝える。今回の依頼で終えたバッチの\n      ファイル（依頼調査の記録 `{O}\u002Fwork\u002Fdoc-request-log.md` に今日の日付で書いた行。新規・追記の別）を示し、「追記を終えたファイルは再実行で\n      「（{日付} に追記済み）」と示されます。二重に追記しないよう「不要」と答えてください」と添える。\n5. 理由「人の依頼による資料の追加」で「## Step 2: SPO への反映」を行う。\n6. **報告:** 資料にしたファイル・追記したファイル・モジュール、書き先、資料にできなかったファイル。エージェントが返した `確認できず` の理由と\n   `助言` をまとめて示し、依頼の意図（どの振る舞いとの関係を知りたいか）があれば `--focus` を付けた追記の依頼、または CRS の見直しを検討できる旨を\n   添える。SPO の仕上げを行った場合は、SPO の書き直された節（\"## Step 2: SPO への反映\" の手順5 の報告）も示す。\n\n### `list`\n\n`TARGET_REPOS` の各 repo について Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}`。repo ごとに表で示す:\n| 名前 | 由来 | 案 | シード | 状態 | 確定ファイル数（うち名前の一致のみ） | 打ち切り | 採用 |\n（値は `run-list` の出力から転記する。自分で数えない）\n根拠を添えて取り消しを提案してよい（例: 確定ファイルの大半が名前の一致のみ、シードが一般語）。決めるのは人であり、提案だけで\n`unadopt`・`remove` を実行しない。\n\n## Step 1.5: 回帰の範囲の案内\n\n採用した調査の集合が変わった直後（Step 2 に入る前）に行う。`{repo}` は Step 1 で扱った repo。\nRun via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 6a` → `state`。`⬜ 未着手` なら行わない。\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregression-status.md`, apply \"## Regression Status\"（CR: {CR}, CR_PATH: {CR_PATH}, REPO: {repo}, MODE: status）。\n`FORMAT_ERROR` が空でなければ「{repo} の回帰の範囲を確かめられません（CHD §4 の書式の誤り: {FORMAT_ERROR}）。\u002Fxddp-revise {CR} design で直してから \u002Fxddp-06-design {CR} regression --repo {repo} を実行してください」、それ以外で `STALE` が true なら「{repo} の回帰の範囲（CHD §7 の回帰の行）が古くなりました。\u002Fxddp-06-design {CR} regression --repo {repo} でやり直してください」と伝える。\n\n## Step 2: SPO への反映\n\n入力: 理由（`ripple`・`adopt`・`unadopt`・`remove`・`finish` は「波紋調査の採用・取り消し」、`document` は「人の依頼による資料の追加」）。\n\n1. Run via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 4a` → `state`。\n   `✅ 完了` でなければ「SPO には工程4a の SPO の仕上げで、CRS には工程4b で反映されます（`\u002Fxddp-04-specout {CR}`）」と伝えて終わる。\n2. 次を伝えて、続けるかを尋ねる:\n   > SPO の仕上げを行います。スクリプトが書く欄と、入力が変わった場合は LLM が書く欄（§2〜§4・§5.3・§5.4・§5.6・§5.7・§7）が書き直されます。\n   > 人が直した内容は `work\u002Fspo-backup\u002F` に退避した SPO との差分で確かめられます。\n   続けない場合は「`\u002Fxddp-investigate {CR} finish --repo {repo}` で後から仕上げられます」と伝えて終わる。\n3. 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-investigate {CR} finish --repo {repo}`, TODAY: {TODAY}\n   → let `FINISH_STATUS`, `REWRITTEN_SECTIONS`, `SPO_BACKUP`, `ADOPTED_RUNS`。`stopped` なら終わる（再開は `\u002Fxddp-investigate {CR} finish --repo {repo}`）。\n4. CRS の扱い: Run via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 5` → 工程5の `state`。\n   - `CR_PROFILE` = `full` かつ工程5が `⬜ 未着手` → 「工程5で方式検討エージェントが更新した SPO を読み、DSN を通じて Step C で CRS に\n     反映されます」と伝える。\n   - `CR_PROFILE` = `full` かつ工程5が `? 進行中` → 「DSN を作成済みなら、`\u002Fxddp-05-arch {CR}` の再実行か `\u002Fxddp-revise {CR} arch` で\n     SPO の変更を DSN に反映してください。DSN に反映された内容が Step C で CRS に入ります（SPO の変更が自動で CRS に入るわけではありません）」\n     と伝える。\n   - それ以外（工程5が完了・スキップ、または quick）→ 「CRS を今更新しますか」と尋ねる。\n     - 更新する: **Agent tool** で `subagent_type=xddp-spec-writer-agent` を起動する:\n       ```\n       CR_NUMBER: {CR}\n       MODE: update\n       CRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\n       SPO_DIR: {CR_PATH}\u002F04_specout\u002F\n       SPO_CROSS_FILE: {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md (pass only if exists)\n       TODAY: {TODAY}\n       AUTHOR_NOTE: 母体調査（{理由}）の結果を反映。\n       ```\n       続けて Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregenerate-crs-excel.md`, apply \"## Regenerate CRS Excel\" with:\n         CR_PATH: {CR_PATH}, CR: {CR}\n       CHD・TSP 等は自動では更新していないと伝える。\n     - 更新しない: Run via Bash:\n       `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py note-add --cr-path {CR_PATH} --step 4a --text \"{理由}を CRS に未反映（{TODAY}）\"`\n5. 報告: `REWRITTEN_SECTIONS`・`SPO_BACKUP`・`ADOPTED_RUNS`・SPO §5.0 の行数の変化（`SPO_BACKUP` があればその §5.0 と比べる）。\n   SPO の AI レビューは行っていない旨と、`\u002Fxddp-review {CR} specout` で確認できる旨を伝える。\n","You are orchestrating **XDDP — 母体調査の追加（波紋調査の実行・採用・取り消し・取り除き、人の依頼による資料の追加）**.\n\n**Arguments:** $ARGUMENTS = [CR_NUMBER]（省略可）動詞 [オプション・シンボル…]\n- 動詞（先頭）: `ripple`（波紋調査を作る・続ける）・`adopt`（採用する）・`unadopt`（採用を取り消す）・`remove`（取り除く）・\n  `list`（一覧）・`finish`（SPO の仕上げのやり直し）・`document`（人の依頼でファイル・ディレクトリ・モジュールを調べて資料にする）・\n  `suggest`（資料にする候補を示す）\n- `--name 名前`: 調査の名前（`^[a-z0-9][a-z0-9-]{0,39}$`。`initial`・`cross-`・`arch-` で始まる名前と、名前 `callslot`（完全一致）は、\n  工程4a・クロスリポジトリ伝播・工程5・工程4a の同じ呼び出し口の関数の調査が使うため、`ripple` では指定できない〔`callslot-foo` 等は使える〕）\n- `--adopt`（`ripple` のみ）: 完了したら採用して SPO に入れる\n- `--repo リポジトリ`: 対象の repo\n- それ以外の語（`ripple` のみ）: シンボル（`名前`・`名前[FILE:パス]`・`名前[CLASS:クラス名]`〔名前空間をまたいで同じ名前のクラスがあれば `名前[CLASS:名前空間::クラス名]`。名前空間は内側の部分だけでもよい。名前空間に属さないクラスは `名前[CLASS:::クラス名]`〕・`型名.メンバー名`）\n- `document` の対象: リポジトリ相対のファイル・ディレクトリ、またはモジュール名（SPO §5.0・§8 の名前）\n- `--focus 観点`（`document` のみ。最後に置く）: `--focus` より後の語の残り全部を観点の文とする（観点は空白を含む自由文のため）\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 (YYYY-MM-DD).\n\n(xddp.config.md lookup done in xddp-common\u002FSKILL.md「## CR Resolution」; reuse WORKSPACE_ROOT, XDDP_DIR, DOCS, REPOS_MAP, REPOS_KEYS, IS_MULTI,\nDEVELOPMENT_MODE, CR_PROFILE, EXCLUDE_PATTERNS, INCLUDE_EXTENSIONS, MAX_WAVE_DEPTH, SPECOUT_MAX_AFFECTED_FILES, SPECOUT_MAX_FILES_PER_MODULE,\nSPECOUT_DIAGRAM_LEVEL, SPECOUT_SEQUENCE_LEVELS, SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, SPECOUT_HIT_FILTER, SPECOUT_CLASSIFY_CHUNK_SIZE,\nSPECOUT_CLASSIFY_PARALLEL, SPECOUT_WAVE_HIT_BUDGET, SPECOUT_LLM_HIT_BUDGET, SPECOUT_SLICE, SPECOUT_SLICE_IGNORE_CALLS, SPECOUT_SLICE_H_AS,\nSPECOUT_SLICE_PYTHON_BIN, SPECOUT_CALLSLOT_MAX_WAVE_DEPTH.\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`、`SPECOUT_CALLSLOT_MAX_WAVE_DEPTH` は未指定時 `2`。)\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`.\nLet `PY` = `command -v python3 || command -v python` の結果、`BFS` = `~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Fscripts\u002Fspecout_bfs.py`。\n以降の Bash 呼び出しで、スクリプトが見つからない場合は setup.sh の実行を案内して停止し、exit 非0 の場合は stderr を表示して停止する\n（下記で別の扱いを定めた場合を除く）。\n\n`REST_ARGS` の先頭の語を `VERB`、`--focus` より後の語の残り全部を空白でつないだものを `FOCUS`（`document` のみ）、それより前の語について\n`--name` の次の語を `NAME`、`--repo` の次の語を `REPO_ARG`、`--adopt` の有無を `ADOPT_FLAG`、残りの語を `SYMBOLS`（`document` では対象 `TARGETS`）\nとする。`VERB` が無い・上記の8つ以外なら、上の **Arguments** の使い方を示して停止する。\n人が言葉で頼んだ場合（例「案B の調査は外して」）は、`list` の結果から名前を特定してこの引数に置き換えて実行する（特定できなければ尋ねる）。\n資料の依頼を言葉で受けた場合（例「{機能名} まわりを調べて資料にして」。通信の再接続処理まわり／在庫引当の処理まわり／センサ読み取りの\n割り込み処理まわり等）は、SPO §5.0・`ripple-summary.md`・`suggest` の結果から対象を特定して `document` の引数に置き換え、\n**置き換えた対象を人に示して確認してから**実行する（人の言葉とファイルの対応は推測であるため）。\n\n## Step 0: 共通の前提\n\n1. `DEVELOPMENT_MODE` = `new` なら「新規開発モードでは母体調査を行いません」と伝えて停止する。\n2. 対象の repo（`TARGET_REPOS`）: `REPO_ARG` があればその repo（`REPOS_KEYS` に無ければ停止）。無ければ、シングルリポジトリはその repo、\n   マルチリポジトリは `list` なら全 repo、それ以外は尋ねる。\n3. 下調べが完了していない repo（`{CR_PATH}\u002F04_specout\u002F{repo}\u002Fwork\u002Fprelim-index.md` が無い）は「先に `\u002Fxddp-04-specout {CR}` を実行して\n   ください」と伝えて `TARGET_REPOS` から外す。空になれば停止する。\n4. 人レビューゲートの待機中（progress.md の詳細ステップが人レビューの待機を示している）に実行すると、ゲートの変更判定に SPO の変更が\n   混ざる。待機中なら、その旨を1行伝える（止めない）。\n5. 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\n以下 `{O}` = `{CR_PATH}\u002F04_specout\u002F{repo}`。\n\n## Step 1: 動詞ごとの処理\n\n### `ripple [--name 名前] [--adopt] シンボル…`\n\n対象は `TARGET_REPOS` の1つの repo（`{repo}`）。\n1. Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}` → `runs`。\n2. 名前を決める: `NAME` が無ければ `run-{n}`（`runs` に無い最小の正の整数 `n`）。`NAME` が `initial`・`cross-`・`arch-` で始まる場合、\n   または `callslot` と一致する場合は、シンボルがあれば停止する（それらの調査は工程4a・クロスリポジトリ伝播・工程5が作る）。シンボルが無ければ、\n   途中で止まった調査の続きとして手順4 へ進む。\n3. - `NAME` の調査が無い: `SYMBOLS` が空なら停止する（シンボルを求める）。Write ツールで `{O}\u002Fripple\u002F{NAME}\u002Fmeta.json` に\n     `{\"approach\": null, \"reason\": null, \"seeds\": [{SYMBOLS…}], \"entry_identity\": \"resolved\"}` を書く。\n   - `NAME` の調査があり `complete` で、`SYMBOLS` が空でない: 停止し、別の名前を指定するか `\u002Fxddp-investigate {CR} remove --name {NAME}` で\n     取り除いてから実行するよう求める。\n   - `NAME` の調査があり、それ以外（途中で止まった調査）: `SYMBOLS` は使わない（続きから行う）。\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`.\n5. 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}: [{run: {NAME}, origin: `human`（`arch-`・`cross-`・`callslot` の続きはその調査の由来）, symbols: {SYMBOLS}, meta_file: {O}\u002Fripple\u002F{NAME}\u002Fmeta.json,\n       entry_identity: `resolved`, adopt: {ADOPT_FLAG}, adopted_by: `human`, RERUN_COMMAND: `\u002Fxddp-investigate {CR} ripple --name {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〔`NAME` が `callslot` なら `SPECOUT_CALLSLOT_MAX_WAVE_DEPTH`〕, SPECOUT_MAX_FILES_PER_MODULE,\n     SPECOUT_BACKEND, SPECOUT_BACKEND_OVERRIDES, 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`。`FAILED` なら理由を示し、`\u002Fxddp-investigate {CR} ripple --name {NAME} --repo {repo}` で続きから行えると伝えて停止する。\n6. 報告: 調査の要約 `{O}\u002Fripple\u002F{NAME}\u002Fripple-digest.md`・全量 `ripple-summary.md`・`ripple-graph.md`・`ripple-tree.md` のパス、\n   確定ファイル数・機能数・打ち切り（`run-list` と要約から転記する）、採用の有無。\n   名前が `callslot` の調査を完了させた場合は、「`callslot` は `SPECOUT_CALLSLOT_MAX_WAVE_DEPTH` の波数までしか調べません。より深く調べる場合は、\n   `callslot` のシードで別の名前の調査を `\u002Fxddp-investigate {CR} ripple --adopt --repo {repo} {シンボル…}` で作ってください」と伝える。\n   名前が `arch-` で始まる調査（工程5の Step A-ripple で途中まで進んだもの）を完了させた場合は、「方式検討の DSN への反映は工程5の中だけで\n   行います。`\u002Fxddp-05-arch {CR}` を再実行すると、Step A で方式検討エージェントがこの要約を読みます」と伝える。\n7. `ADOPT_FLAG` があり採用した場合は、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。採用しなかった場合は、SPO は変わっていない旨と、\n   `\u002Fxddp-investigate {CR} adopt --name {NAME} --repo {repo}` で後から SPO に入れられる旨を伝えて終わる。\n\n### `adopt --name 名前` ／ `unadopt --name 名前`\n\n`NAME` が無ければ停止する。対象は `TARGET_REPOS` の1つの repo。\n- `unadopt` で `NAME` が `initial` の場合、または取り消すと採用した調査が0件になる場合（`run-list` の `adopted_runs` が `NAME` だけ）は、\n  「SPO の波紋調査の欄から外れ、影響範囲が狭まります（影響漏れは後工程で気付きにくい）。取り消しますか」と確認してから行う。\n- Run via Bash: `\"$PY\" \"$BFS\" run-adopt --repo-dir {O} --run {NAME} --by human --today {TODAY}`（`unadopt` は `run-unadopt`）。\n  exit 1（調査が無い・完了していない）は stderr を示して停止する（完了していない調査は `\u002Fxddp-investigate {CR} ripple --name {NAME}` で続ける）。\n- stdout の `changed` が false なら「既に{採用済み／取り消し済み}です」と伝えて終わる。true なら、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。\n\n### `remove --name 名前`\n\n`NAME` が無ければ停止する。対象は `TARGET_REPOS` の1つの repo。`run-list` で調査の採用の有無を確かめ、\n「調査 `{NAME}` を `ripple\u002F_removed\u002F` へ退避し、記録から外します（{採用していれば: SPO の波紋調査の欄からも外れます}）。取り除きますか」と\n確認してから、Run via Bash: `\"$PY\" \"$BFS\" run-remove --repo-dir {O} --run {NAME} --today {TODAY}`。\nstdout の `moved_to`・`propagation_reset`（クロスリポジトリ伝播の調査なら、伝播の記録が未投入に戻り、次の `\u002Fxddp-04-specout {CR}` で\n同じシンボルが新しい調査として再投入される）を伝える。`was_adopted` が true なら、「## Step 1.5: 回帰の範囲の案内」を行ってから、理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」を行う。\n\n### `finish`\n\n理由「波紋調査の採用・取り消し」で「## Step 2: SPO への反映」の手順2 以降だけを行う（SPO の仕上げが途中で止まった場合の再開）。\n\n### `suggest`\n\n対象は `TARGET_REPOS` の1つの repo。Run via Bash: `\"$PY\" \"$BFS\" doc-suggest --repo-dir {O} --exclude '{EXCLUDE_PATTERNS}'`\n（除外パターンは設定の値。SPO を組み立てる `assemble-spo --exclude` と同じもの）。\n- `reason` が `no-adopted-runs` なら「候補を出す波紋調査の結果がありません」と伝えて終わる。\n- `candidates` を表で示す: | モジュール | 確定ファイル数 | うち名前の一致のみ | 最も浅い到達波 | シードの直接参照（うち資料に無い） | 届いた調査 |\n  （値は stdout から転記する。自分で数えない。`candidate_count` が表の行数より多ければ「ほか {n} モジュール」と添える）\n- 各候補に、SPO や `ripple-summary.md` から読み取れる根拠を1行添えてよい。依頼するかは人が決める（提案だけで `document` を実行しない）。\n  依頼する場合は `\u002Fxddp-investigate {CR} document {モジュール名} --repo {repo}` で行える旨を伝える。\n\n### `document 対象… [--focus 観点]`\n\n対象は `TARGET_REPOS` の1つの repo。`TARGETS` が空なら停止する（対象を求める）。\n同じ repo で工程4a・`finish`・別の `document` と同時に実行しないよう1行注意する（台帳・観察メモ・資料の書き込みが衝突するため）。\n\n1. **準備** — Write ツールで `{O}\u002Fwork\u002Fdoc-request-focus.md` に `FOCUS` を書く（無ければ空のファイル。自由文をシェルの引数で渡さない）。\n   `{O}\u002Fwork\u002Fdoc-request-append.txt` があれば削除する（前回の依頼の答えを持ち越さない）。\n2. **対象の展開（スクリプト）** — Write ツールで `{O}\u002Fwork\u002Fdoc-request-targets.txt` に `TARGETS` を1行ずつ書き、Run via Bash:\n   `\"$PY\" \"$BFS\" doc-request --repo-dir {O} --repo-path {REPOS_MAP[repo]} --targets-file {O}\u002Fwork\u002Fdoc-request-targets.txt --exclude '{EXCLUDE_PATTERNS}' --include-ext '{INCLUDE_EXTENSIONS}' --soft-limit {SPECOUT_MAX_AFFECTED_FILES} --batch-size {SPECOUT_MAX_AFFECTED_FILES} --out {O}\u002Fwork\u002Fdoc-request-files.json`\n   （`doc-request-append.txt` がある場合は `--append-file {O}\u002Fwork\u002Fdoc-request-append.txt` を付ける）。exit 1 は stderr を示して停止する\n   （SPO の仕上げが途中〔`specout-finish.json` が `running`〕と報告されたら、「先に `\u002Fxddp-investigate {CR} finish --repo {repo}` を実行してください」と伝える。\n   新しいモジュール名の衝突は、`{O}\u002Fwork\u002Fmodule-assignments.json` に組を人が書いて名前を分けるよう案内する）。stdout から次を示す:\n   - `not_found`（リポジトリに無い・モジュール名に一致しない）・`excluded`（名指しした対象より下の階層で除外パターンに一致したため外した\n     ファイル）・`skipped_ext`（`SPECOUT_INCLUDE_EXTENSIONS` に一致しないため外したファイル）・`skipped_binary`（バイナリのため外したファイル）。\n   - `already_documented`（資料があるファイル）があれば、ファイルごとに（多ければモジュールごとにまとめて）\n     「すでに資料として記述しています。追記が必要ですか？」と尋ねる（`appended_on` があれば「（{appended_on} に追記済み）」を添える。\n     追記の要否は自分で判断しない）。「必要」と答えたファイルを `{O}\u002Fwork\u002Fdoc-request-append.txt` に1行ずつ Write し、`--append-file` を\n     付けて手順2 のコマンドを再実行する（そのファイルは追記の対象として入る）。「不要」のファイルは外れる。この確認は件数の確認より前に行い、\n     再実行の後は尋ねない。以下の確認は再実行の出力で行う。\n   - `pattern_overridden`（名指しした対象が除外パターンに一致したため、除外パターンを適用せずに対象にしたファイル）は、質問せずに件数と対象を示す。\n   - 依頼への疑問（拒否はしない）: `concerns` のあるファイル（`name_only`＝波紋調査の到達が名前の一致だけ、`gap_reviewed`＝追加下調べが関係なしと\n     判断した〔理由 `gap_reason` を添える〕）と、SPO（§5.0・§7）・CRS から根拠を挙げられる懸念（例: CRS の変更対象の振る舞いと離れた機能に見える）が\n     あれば、根拠とともにまとめて示し、「続けますか／対象を変えますか」と1回だけ尋ねる。根拠を挙げられない推測は示さない。\n     決めるのは人で、「続ける」なら依頼どおりに行う。\n   - 拡張子ごとのファイル数（`ext_counts`）と、モジュールごとのファイル数（`modules`）を示す。\n   - `over_soft_limit` が true（ファイル数 `file_count` が `SPECOUT_MAX_AFFECTED_FILES` を超える）なら、「全部」／「絞る（対象を指定し直す）」を尋ねる。\n   - `file_count` が 0 なら、その旨を伝えて終わる。\n   - 「対象を変える」「絞る」が選ばれたら、人が指定し直した対象で手順2 をやり直す。同じ実行の中で既に答えたファイルには、追記の要否と\n     依頼への疑問を再び尋ねない（追記の答えは `doc-request-append.txt` に残っている。依頼への疑問は新しく対象に加わったファイルの懸念だけを示す）。\n3. **書き先の決定（スクリプト）** — Run via Bash:\n   `\"$PY\" \"$BFS\" assemble-spo --repo-dir {O} --repo-path {REPOS_MAP[repo]} --repo {repo} --output-dir {O} --summary-template ~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Ftemplates\u002F04_specout-summary-template.md --module-template ~\u002F.claude\u002Fskills\u002Fxddp-04-specout\u002Ftemplates\u002F04_specout-module-template.md --max-files-per-module {SPECOUT_MAX_FILES_PER_MODULE} --cr {CR} --today {TODAY} --layout-only --only requested --files-file {O}\u002Fwork\u002Fdoc-request-files.json > {O}\u002Fwork\u002Fdoc-request-layout.json`\n   （stdout の `file_outputs` が書き先。`discarded_drafts` が空でなければ、そのモジュールの途中の下書きを捨てた〔台帳に行が無く、再依頼で資料にし直せる〕旨を伝える）。\n   exit 0 以外（下書きの抜き出しの後に §2.A… が変わった・モジュール名の衝突・`module-assignments.json` の不正等）なら stderr を示して停止し、\n   「原因を直してから、同じ `\u002Fxddp-investigate {CR} document …` を再実行してください」と伝える（エージェントを起動していないため、台帳・資料は変わっていない）。\n4. **資料を書く（LLM）** — `{O}\u002Fwork\u002Fdoc-request-files.json` の `batches` を先頭から1つずつ順に処理する（並列にしない。統合パスでは同じ SPO の\n   下書きに書くため）。バッチ `i`（0 始まり）ごとに:\n   1. 追記のバッチ（`mode` が `append`）なら、Run via Bash:\n      `\"$PY\" \"$BFS\" doc-append-check snapshot --repo-dir {O} --files-file {O}\u002Fwork\u002Fdoc-request-files.json --layout {O}\u002Fwork\u002Fdoc-request-layout.json --batch {i}`\n      exit 4（前回の追記の写しが残っている）なら、stdout の写しの日時とファイルを示し、「元に戻す（前回の追記の前の状態に戻す）」／\n      「捨てる（今の状態を残し、写しを消す）」を尋ねて、`\"$PY\" \"$BFS\" doc-append-check restore --repo-dir {O}`／`\"$PY\" \"$BFS\" doc-append-check discard --repo-dir {O}` を\n      行ってから、もう一度 `snapshot` する（写しの後に工程4a・`finish` 等が台帳や資料を書いていることがあるため、黙って戻さない。\n      `restore` が exit 1 なら stderr を示して停止する）。\n   2. **Agent tool** で `subagent_type=xddp-specout-prelim-agent` を起動する。入力は \"## Specout Finish\"（`~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-finish.md`）の\n      追加下調べ（手順4.3）と同じ値で、次だけを変える（`GAP_REVIEWED_FILE` は渡さない。`ENTRY_POINTS` は空。`OUTPUT_DIR` は `{O}\u002F`。\n      資料の記載量は Step 0 の `EFFECTIVE_*` の値）:\n      ```\n      PRELIM_MODE: requested\n      TARGETS: {バッチのファイルごとに「- {ファイル} → モジュール {doc-request-files.json の module}・書き先 {doc-request-layout.json の file_outputs の output_file}」。mode が append の行は末尾に「（追記）」}\n      REQUEST_FOCUS_FILE: {O}\u002Fwork\u002Fdoc-request-focus.md\n      ```\n   3. 追記のバッチなら、返答によらず（`OK:`・`NG:`・起動の失敗のどれでも）Run via Bash:\n      `\"$PY\" \"$BFS\" doc-append-check verify --repo-dir {O}`（返答が `OK:` で始まらなければ `--restore` を付ける）。\n      - exit 0: 追記を残す。\n      - exit 3（元に戻した）: 「追記で既存の記述・台帳が変わった、または追記が最後まで終わらなかったため、追記の前の状態に戻しました」と\n        stderr の理由とともに示して停止する。\n      - exit 1（検査の実行エラー）: stderr を示して停止する（写し `work\u002Fdoc-append-backup\u002F` は残り、次の `snapshot` が exit 4 で知らせる）。\n   4. 返答が `OK:` で始まれば（追記のバッチは `verify` が exit 0 なら）、返答で「資料にできなかった」とされたファイルを除いたバッチのファイルを\n      `{O}\u002Fwork\u002Fdoc-request-done.txt` に Write し、Run via Bash:\n      `\"$PY\" \"$BFS\" doc-request-record --repo-dir {O} --files-file {O}\u002Fwork\u002Fdoc-request-files.json --done-file {O}\u002Fwork\u002Fdoc-request-done.txt --focus-file {O}\u002Fwork\u002Fdoc-request-focus.md --today {TODAY}`\n   5. 返答の2行目以降の `確認できず`・`助言`・`追加の観察なし`・`資料にできなかった` の行を、理由・助言とともに示す。\n   6. 返答が `OK:` で始まらなければ示して停止し、「同じ `\u002Fxddp-investigate {CR} document …` を再実行すると続きから行います（資料にしたファイルは\n      「すでに資料として記述しています」と尋ねられるので、追記しない場合は「不要」と答えてください）」と伝える。今回の依頼で終えたバッチの\n      ファイル（依頼調査の記録 `{O}\u002Fwork\u002Fdoc-request-log.md` に今日の日付で書いた行。新規・追記の別）を示し、「追記を終えたファイルは再実行で\n      「（{日付} に追記済み）」と示されます。二重に追記しないよう「不要」と答えてください」と添える。\n5. 理由「人の依頼による資料の追加」で「## Step 2: SPO への反映」を行う。\n6. **報告:** 資料にしたファイル・追記したファイル・モジュール、書き先、資料にできなかったファイル。エージェントが返した `確認できず` の理由と\n   `助言` をまとめて示し、依頼の意図（どの振る舞いとの関係を知りたいか）があれば `--focus` を付けた追記の依頼、または CRS の見直しを検討できる旨を\n   添える。SPO の仕上げを行った場合は、SPO の書き直された節（\"## Step 2: SPO への反映\" の手順5 の報告）も示す。\n\n### `list`\n\n`TARGET_REPOS` の各 repo について Run via Bash: `\"$PY\" \"$BFS\" run-list --repo-dir {O}`。repo ごとに表で示す:\n| 名前 | 由来 | 案 | シード | 状態 | 確定ファイル数（うち名前の一致のみ） | 打ち切り | 採用 |\n（値は `run-list` の出力から転記する。自分で数えない）\n根拠を添えて取り消しを提案してよい（例: 確定ファイルの大半が名前の一致のみ、シードが一般語）。決めるのは人であり、提案だけで\n`unadopt`・`remove` を実行しない。\n\n## Step 1.5: 回帰の範囲の案内\n\n採用した調査の集合が変わった直後（Step 2 に入る前）に行う。`{repo}` は Step 1 で扱った repo。\nRun via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 6a` → `state`。`⬜ 未着手` なら行わない。\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregression-status.md`, apply \"## Regression Status\"（CR: {CR}, CR_PATH: {CR_PATH}, REPO: {repo}, MODE: status）。\n`FORMAT_ERROR` が空でなければ「{repo} の回帰の範囲を確かめられません（CHD §4 の書式の誤り: {FORMAT_ERROR}）。\u002Fxddp-revise {CR} design で直してから \u002Fxddp-06-design {CR} regression --repo {repo} を実行してください」、それ以外で `STALE` が true なら「{repo} の回帰の範囲（CHD §7 の回帰の行）が古くなりました。\u002Fxddp-06-design {CR} regression --repo {repo} でやり直してください」と伝える。\n\n## Step 2: SPO への反映\n\n入力: 理由（`ripple`・`adopt`・`unadopt`・`remove`・`finish` は「波紋調査の採用・取り消し」、`document` は「人の依頼による資料の追加」）。\n\n1. Run via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 4a` → `state`。\n   `✅ 完了` でなければ「SPO には工程4a の SPO の仕上げで、CRS には工程4b で反映されます（`\u002Fxddp-04-specout {CR}`）」と伝えて終わる。\n2. 次を伝えて、続けるかを尋ねる:\n   > SPO の仕上げを行います。スクリプトが書く欄と、入力が変わった場合は LLM が書く欄（§2〜§4・§5.3・§5.4・§5.6・§5.7・§7）が書き直されます。\n   > 人が直した内容は `work\u002Fspo-backup\u002F` に退避した SPO との差分で確かめられます。\n   続けない場合は「`\u002Fxddp-investigate {CR} finish --repo {repo}` で後から仕上げられます」と伝えて終わる。\n3. 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-investigate {CR} finish --repo {repo}`, TODAY: {TODAY}\n   → let `FINISH_STATUS`, `REWRITTEN_SECTIONS`, `SPO_BACKUP`, `ADOPTED_RUNS`。`stopped` なら終わる（再開は `\u002Fxddp-investigate {CR} finish --repo {repo}`）。\n4. CRS の扱い: Run via Bash: `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py show --cr-path {CR_PATH} --step 5` → 工程5の `state`。\n   - `CR_PROFILE` = `full` かつ工程5が `⬜ 未着手` → 「工程5で方式検討エージェントが更新した SPO を読み、DSN を通じて Step C で CRS に\n     反映されます」と伝える。\n   - `CR_PROFILE` = `full` かつ工程5が `? 進行中` → 「DSN を作成済みなら、`\u002Fxddp-05-arch {CR}` の再実行か `\u002Fxddp-revise {CR} arch` で\n     SPO の変更を DSN に反映してください。DSN に反映された内容が Step C で CRS に入ります（SPO の変更が自動で CRS に入るわけではありません）」\n     と伝える。\n   - それ以外（工程5が完了・スキップ、または quick）→ 「CRS を今更新しますか」と尋ねる。\n     - 更新する: **Agent tool** で `subagent_type=xddp-spec-writer-agent` を起動する:\n       ```\n       CR_NUMBER: {CR}\n       MODE: update\n       CRS_FILE: {CR_PATH}\u002F03_change-requirements\u002FCRS-{CR}.md\n       SPO_DIR: {CR_PATH}\u002F04_specout\u002F\n       SPO_CROSS_FILE: {CR_PATH}\u002F04_specout\u002Fcross\u002FSPO-{CR}-cross.md (pass only if exists)\n       TODAY: {TODAY}\n       AUTHOR_NOTE: 母体調査（{理由}）の結果を反映。\n       ```\n       続けて Read `~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregenerate-crs-excel.md`, apply \"## Regenerate CRS Excel\" with:\n         CR_PATH: {CR_PATH}, CR: {CR}\n       CHD・TSP 等は自動では更新していないと伝える。\n     - 更新しない: Run via Bash:\n       `\"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py note-add --cr-path {CR_PATH} --step 4a --text \"{理由}を CRS に未反映（{TODAY}）\"`\n5. 報告: `REWRITTEN_SECTIONS`・`SPO_BACKUP`・`ADOPTED_RUNS`・SPO §5.0 の行数の変化（`SPO_BACKUP` があればその §5.0 と比べる）。\n   SPO の AI レビューは行っていない旨と、`\u002Fxddp-review {CR} specout` で確認できる旨を伝える。\n",{},"main","0719b3a37b134895da55968646acffe58aedce8f","ClaudeCode\u002F.claude\u002Fskills\u002Fxddp-investigate",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-investigate",{"tool":37,"command":38},"bunx","bunx skills add tsuna44\u002FXddpSettings --skill xddp-investigate",{"tool":40,"command":41},"pnpm","pnpm dlx skills add tsuna44\u002FXddpSettings --skill xddp-investigate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-investigate\u002FSKILL.md",true,[],[46,59,66,74,81,103],{"skillNo":47,"name":48,"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":49,"categories":50,"keywords":56,"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",[51],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[57,58],"demo skill","demo",{"skillNo":60,"name":61,"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":62,"categories":63,"keywords":64,"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",[],[65,58],"demo noname",{"skillNo":67,"name":68,"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":69,"categories":70,"keywords":71,"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",[],[72,73,58],"demo common","common",{"skillNo":75,"name":76,"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":77,"categories":78,"keywords":79,"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",[],[80,58],"demo badname",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":90,"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",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000021","资料检索与研究",[91,92,93,94,95,96,97,98,99,100,101,102],"xddp update knowledge","update knowledge","knowledge","update","note","structure","constraint","lesson","glossary","baseline","flow","docs",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":117,"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",[109,112],{"categoryNo":110,"categoryName":111,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":113,"categoryName":114,"taxonomyType":115,"taxonomyTypeDesc":116},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[118,119,120,121],"sync","xddp sync design","design","生成"]