[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MDS3F7AFE3KHRWKTKPEBFM":3,"skill-same:01M6MDS3F7AFE3KHRWKTKPEBFM":316},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":33,"install":34,"resources":47},"01M6MDS3F7AFE3KHRWKTKPEBFM","xddp-common",null,"XDDP スキル共通ロジック。CR 番号の解決・CR非依存の config 読み込みなどを定義する。","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-common\u002FSKILL.md",[],[18,19,20,21],"common","xddp common","config","false","2026-11-10 10:12:30",false,"---\nname: xddp-common\ndescription: XDDP スキル共通ロジック。CR 番号の解決・CR非依存の config 読み込みなどを定義する。\nuser-invocable: false\n---\n\n# XDDP Common Logic\n\n## Load Config\n\nxddp.config.md を探索・読み込み、CR に依存しない標準設定バンドルを返す共通手順。\nCR 解決が不要なスキル（`xddp-status`・`xddp-codemap`・`xddp-update-knowledge`・\n`xddp-fill-rulebook` 等）はこちらを直接使う。CR 解決が必要なスキルは `## CR Resolution` を使う。\n\n**Input:** `NOT_FOUND_MESSAGE`（任意, default: `\"xddp.config.md が見つかりません。ワークスペース\nルートまたはそのサブディレクトリで実行してください。\"`）: 未検出時に表示するメッセージ。\n\n**Output:** スクリプトが出力する JSON のトップレベルキー全て。\nキー名・既定値・消費者の一覧は `xddp_config.py load --list-keys` で得られる。\n\n**Process:**\n1. Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_config.py load --format json --start-dir .`\n2. 終了コードで分岐する: 0=成功 \u002F 1=実行時エラー（stderr を表示して停止）\u002F\n   2=使用法エラー（argparse 既定。stderr を表示して停止）\u002F 3=xddp.config.md 未検出\n   （`{NOT_FOUND_MESSAGE}` を表示して停止）。\n3. 出力 JSON をそのまま設定バンドルとして使う。stderr に警告があれば人に中継する。\n4. `REPOS:` が未設定・空の場合の扱いは呼び出し元スキルの裁量。\n\n## CR Resolution\n\n**Input:**\n- `RAW_ARGS` = trimmed string of $ARGUMENTS\n- `SKIP_ABORT_GUARD`（任意, default: `false`）: `true` の場合、下記の「中止済み CR ガード」を\n  スキップする。`\u002Fxddp-abort` 専用。他スキルはこの引数を渡さない。\n\n**Output:** `CR`（解決済みCR番号）, `REST_ARGS`（CR以降の残り引数）、および `## Load Config` が\n返す標準設定バンドル全て。\nOn failure, report error and stop.\n\napply \"## Load Config\"（本ファイル内）→ 標準設定バンドルを取得する。\n\n### Step 1: Identify CR from arguments\n\nLet `FIRST_ARG` = first token of `RAW_ARGS`.\n\nList all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F`, excluding hidden directories\n(dotfiles) and the reserved names `latest-specs` \u002F `survey` (同じ除外規則を Step 2 とも共有する)。\n\n- `FIRST_ARG` is non-empty AND exactly matches (完全一致。前方一致・部分一致ではない) the name of one\n  of the listed directories\n  → `CR = FIRST_ARG`, `REST_ARGS` = remaining tokens. Go to Step 1.X.\n- otherwise (FIRST_ARG is empty, or no listed directory name equals `FIRST_ARG`)\n  → `REST_ARGS = RAW_ARGS` (treat all tokens as secondary args). Go to Step 2.\n\n> **命名上の注意:** CRフォルダ名は `{XDDP_DIR}\u002F` 直下の実在ディレクトリとして解決されるため、\n> スキルが CR 番号の後に置く引数の語（`xddp-review`・`xddp-revise` の `analysis`\u002F`req`\u002F`specout`\u002F`arch`\u002F\n> `design`\u002F`test`\u002F`spec`、`xddp-feedback` の `code`、`xddp-set-profile` の `full`\u002F`quick`、\n> `xddp-06-design` の `regression`、`xddp-investigate` の `ripple`\u002F`adopt`\u002F`unadopt`\u002F`remove`\u002F`list`\u002F\n> `finish`\u002F`document`\u002F`suggest`）、`xddp-04-specout` の `ENTRY_POINTS`（調査対象の関数・\n> クラス名等の自由記述シンボル）、および予約ディレクトリ名（`latest-specs`・`survey`）と同名のCRを作成しないこと。\n> 同名の場合、Step 1 がその引数を誤ってCR番号と解釈する可能性がある。\n\n> **Skills that use secondary args:**\n> - `xddp-review`: first token of `REST_ARGS` → `DOCUMENT_TYPE`（`DOCUMENT_TYPE = spec` の場合、2番目のトークン → `TARGET_ARG`（省略可））\n> - `xddp-revise`: first token of `REST_ARGS` → `DOC_TYPE`\n> - `xddp-excel2md`: first token of `REST_ARGS` → `EXCEL_PATH`\n> - `xddp-04-specout`: remaining tokens of `REST_ARGS` → `ENTRY_POINTS`\n\n### Step 2: Auto-detect\n\nList all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F` as CR candidates,\nexcluding hidden directories (dotfiles) and the reserved names `latest-specs` \u002F `survey`.\n\n- **0 found** → report `\"CRフォルダが見つかりません。{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F に CR フォルダを作成するか、CR番号を引数に指定してください。\"` and stop.\n- **1 found** → `CR = that directory name`. Report `\"CR を自動検出しました: {CR}\"` and continue.\n- **Multiple found** → for each candidate directory `{dir}`, let `DIR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{dir}`\n  （`{dir}` は直前の「List all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F`」で得られる\n  ディレクトリの裸の名前であり絶対パスではない。`xddp_progress.py` の `_progress_path()` は\n  `--cr-path` の値をそのまま `Path(cr_path)\u002F\"progress.md\"` として解決するため、裸の名前を渡すと\n  オーケストレータの cwd 次第で `progress.md` が見つからず全候補が異常系と誤判定される。\n  `xddp-abort\u002FSKILL.md`「Let `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`」と同一のパス構築パターンに\n  倣う。`CR` 確定前（Step 1.X 到達前）のこの分岐では `CR_PATH` 変数が存在しないため、ここで\n  `{dir}` ごとに個別のローカル変数 `DIR_PATH` を明示的に構築する）、run via Bash:\n  `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py check-in-progress --cr-path {DIR_PATH}`\n  → let `CHECK_RESULT`（stdout の JSON 1オブジェクト）。\n  If it errors（e.g. `{DIR_PATH}\u002Fprogress.md` が存在しない・破損している等の異常系）:\n    treat `{dir}` as not in-progress for this candidate, and additionally warn:\n    \"⚠️ {dir} の progress.md を読み取れませんでした（不正な CR フォルダの可能性があります）。\"\n    （候補一覧からは除外しない——`{dir}` が実在する以上、人が最終的に選択肢として認識できる必要が\n    あるため。in-progress 判定からのみ除外する）\n  Else: a CR is \"in progress\" if `CHECK_RESULT.in_progress` is `true`\n  （判定条件の実装は `check-in-progress` に一元化されている。条件(a)(b)の設計意図・除外条件の理由は\n  `xddp_progress.py` の `cmd_check_in_progress` のコメントを参照）:\n  - Exactly **1 in progress** → `CR = that directory name`. Report `\"CR を自動検出しました: {CR}\"` and continue.\n  - **0 or multiple in progress** → display candidate list, report `\"CR番号を引数に指定してください\"` and stop.\n\n### Step 1.X: Resolve CR Profile（追加。`CR` 確定後・`## Resolve Affected Repos` の前に実行）\n\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`（この手続き内部限定のローカル変数。呼び出し元\nスキルは `## CR Resolution` から戻った後、別途同じ式で `CR_PATH` を構築して使う — 両者は独立した\n構築だが同じ式のため値は一致する）。\n\n1. `CR_PROFILE` の初期値は上記 apply \"## Load Config\" で既に解決済みの値（`xddp.config.md` の\n   `CR_PROFILE`、未設定なら `full`）とする。\n2. `{CR_PATH}\u002Fprogress.md` が存在する場合: Read し、`**CRプロファイル：**` 行があればその値で\n   `CR_PROFILE` を上書きする（progress.md が存在しない、または該当行がない場合は上書きせず、\n   手順1の初期値のまま次のステップに進む。`## CR Resolution` は `xddp-01-init` からは呼ばれず\n   `xddp-01-init` の Step 5 で progress.md 生成後に初めて他スキルから呼ばれる想定のため、通常の\n   フローではこの分岐に到達しない。到達するのは CR フォルダが手動作成された等の異常系のみ）。\n3. 上書き後の値が `full` \u002F `quick` 以外の場合は `full` にフォールバックし、警告を出力する。\n\n### Step 1.Y: Abort Guard（追加。`CR` 確定後・戻り値返却前）\n\nIf `SKIP_ABORT_GUARD` is `true`: このガード全体をスキップする。\nElse: CR 確定後、`{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}\u002Fprogress.md` が存在する場合、\n`## CR 中止` セクションの有無を確認する。存在する場合:\n> ⚠️ CR `{CR}` は {中止日} に中止済みです（理由: {中止理由}）。\n> このまま処理を続行しますか？ [続行 \u002F 中止]\nWait for user confirmation. If 中止 が選択された場合、呼び出し元スキルの処理を停止する。\n\n## Resolve Affected Repos\n\n**Input:** `REPOS_KEYS`, `IS_MULTI`, `CR_PATH`（`FILTER_BY_SPO=true` の場合のみ手続き内部で使用するが、\n  呼び出し元は `FILTER_BY_SPO` の値によらず常に渡す）, `FILTER_BY_SPO`（true\u002Ffalse）,\n  `HAS_CROSS`（`FILTER_BY_SPO=true` の場合のみ必須）,\n  `CR`（CR番号。`FILTER_BY_SPO=true` の場合のみ使用 — `SPO-{CR}.md`・`CHD-{CR}-cross.md` の\n  パス解決に必要。`FILTER_BY_SPO=false` の場合は不要。既存の `Discover CHD Files`・\n  `Regenerate CRS Excel` プロシージャと同様、`CR` を明示 Input として受領する）\n**Output:** `AFFECTED_REPOS`\n\n**Process:**\n1. `FILTER_BY_SPO = false`（既定・ほとんどのスキルで使用）の場合:\n   `AFFECTED_REPOS` = `REPOS_KEYS` のコピー。\n   （REPOS: に列挙された全リポジトリを対象とする。個別スキルによる絞り込みが別途必要な場合は\n   呼び出し元スキルが本プロシージャの結果を上書きする — 例: `xddp-04-specout` Step 0.5 の人による確認・絞り込み。）\n2. `FILTER_BY_SPO = true`（`xddp-11-specs` 専用 — 実際に specout・設計が完了したリポジトリのみを\n   最新仕様書生成の対象とするため。存在しない SPO\u002FDSN\u002FCHD を前提にした生成を防ぐ）の場合:\n   1. 基本: `{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md` が存在するリポジトリを対象とする。\n   2. 追加条件（`IS_MULTI` and `HAS_CROSS` の場合）: `{CR_PATH}\u002F06_design\u002Fcross\u002FCHD-{CR}-cross.md` を\n      Read し（存在する場合）、インタフェース変更サマリーで「影響リポジトリ」として列挙されている\n      リポジトリを `AFFECTED_REPOS` に追加する（SPO がなくても overview\u002Farchitecture.md 更新対象に\n      なる可能性があるため）。CHD cross が存在しない場合はこの追加条件は適用しない。\n   3. `AFFECTED_REPOS` = 上記1・2で確定したリポジトリのリスト。\n3. Return `AFFECTED_REPOS`.\n\n## Resolve HAS_CROSS\n\n**Input:** `IS_MULTI`, `ARTIFACT_PATH`（直前工程の cross 成果物ファイルパス。工程により\n  SPO-{CR}-cross.md \u002F DSN-{CR}-cross.md \u002F CHD-{CR}-cross.md のいずれか）\n**Output:** `HAS_CROSS`\n\n**Process:**\n1. `HAS_CROSS` = (`IS_MULTI` and `ARTIFACT_PATH` が存在する)。\n2. Return `HAS_CROSS`.\n\n**注記（呼び出し元が明記すべき事項）:** `ARTIFACT_PATH` にどの工程の cross 成果物を渡すかは\n呼び出し元スキルの工程位置によって決まる（自分の直前工程が生成した cross 成果物を見る、という\n設計上の意図がある）。本プロシージャは存在チェックの実施のみを共通化し、\n「どのファイルを見るべきか」の判断は呼び出し元の責務のまま残す。\n\n**適用外（本プロシージャを使わないスキルとその理由）:**\n- `xddp-04-specout`: cross 成果物自体がこの工程で初めて生成されるため、着手時点では\n  存在チェック対象のファイルがまだない。`HAS_CROSS` は初期値 `IS_MULTI` とし、\n  Discovery でリポジトリ間依存が見つからなければ `false` に降格する、成果物存在チェックとは\n  異なる判定方式を用いる。\n- `xddp-close`: 特定1ファイルの存在ではなく、CR 内の cross\u002F 配下に何らかの成果物が\n  存在するか（工程4a〜8のどこかで cross 処理が行われたか）を広く問う棚卸し用途のため、\n  「直前工程の特定ファイル」を前提とする本プロシージャの対象外とする。\n\n## Progress Update\n\nprogress.md の指定ステップの状態・詳細ステップ・日付を更新する共通手順。\n\n**Input:**\n- `CR_PATH`: CRフォルダのパス\n- `STEP_NUM`: 更新するステップ番号\n- `STATE`: 新しい状態（? 進行中 \u002F ✅ 完了 \u002F ? レビュー待ち \u002F ? 修正中 \u002F ⏸ 中断 \u002F ? 中止）\n- `DETAIL_STEP`（任意）: 詳細ステップ文字列（完了時は `\"-\"` とする）。省略時は既存の詳細ステップを\n  変更しない（例: 差し戻し時に状態列だけを更新する場合）\n- `ARTIFACT_LINK`（任意）: 成果物へのリンク文字列。指定時は STATE によらず成果物列を更新する\n  （工程完了時のリンク設定に加え、`xddp-06-design`「## Step C': Generate Traceability Matrix (TM)」の\n  ように工程進行中に成果物列だけを先行更新するケースにも使う）。\n  `ARTIFACT_LINK` の書式は `xddp_progress.py` が検証する（不正な場合は非 0 終了して理由を表示する）。\n  巻き戻し時に成果物列をクリアするには `-` を明示的に渡す（空文字は無視される）。\n\n**Process:**\n1. Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py update --cr-path {CR_PATH} --step {STEP_NUM} --state \"{STATE}\" [--detail \"{DETAIL_STEP}\"] [--artifact-link \"{ARTIFACT_LINK}\"]`\n   （`STATE` = ✅ 完了 のとき、スクリプトが `## 備考・メモ` の `⚠️ 工程{STEP_NUM}:` 行を自動削除する）\n2. If the script is not found: tell the user to run `setup.sh` and stop.\n   If it errors: display stderr to the user and stop.\n3. If `{STATE}` = `✅ 完了`: also run via Bash（工程所要時間テレメトリ。ベストエフォート。\n   `## Snapshot Phase Baseline` を経由していない工程では開始マーカーが無いため `duration_ms` は\n   省略される。この場合もレコード自体は書き込まれる）:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_metrics.py record --cr-path {CR_PATH} --step {STEP_NUM} --event phase_complete`\n   If the script is not found or errors: display stderr as advisory only and continue — do not stop\n   （手順1・2とは異なり、テレメトリ失敗は工程完了そのものをブロックしない）。\n\n## Discover CHD Files\n\nCHD（変更設計書）がインデックス + UR別内容ファイルに分割されている前提で、\n内容ファイル一覧を解決する共通手順。CHDを参照する全スキル・エージェント呼び出し元はこれを使うこと。\n\n**Input:**\n- `CR_PATH`: CRフォルダのパス\n- `REPO_NAME`: リポジトリ名（`\"cross\"` の場合は分割対象外のため単一ファイルを返す）\n- `CR`: CR番号\n\n**Output:**\n- `CHD_INDEX_FILE`: インデックスファイルのパス\n- `CHD_CONTENT_FILES`: 内容ファイルのパスのリスト（生成順）\n\n**Process:**\n1. `REPO_NAME` が `\"cross\"` の場合:\n   `CHD_INDEX_FILE` = `CHD_CONTENT_FILES[0]` = `{CR_PATH}\u002F06_design\u002Fcross\u002FCHD-{CR}-cross.md`。Return.\n2. `CHD_INDEX_FILE` = `{CR_PATH}\u002F06_design\u002F{REPO_NAME}\u002FCHD-{CR}.md`。\n3. `CHD_INDEX_FILE` が存在しない場合: `CHD_CONTENT_FILES` = 空リストを返す（CHD未生成）。\n4. `CHD_INDEX_FILE` を Read し、「## 2. UR別ファイル一覧」テーブルのファイルパス列から\n   全リンクを抽出して `CHD_CONTENT_FILES` とする。\n5. Return `CHD_INDEX_FILE`, `CHD_CONTENT_FILES`.\n\n## Procedures Index\n\n高頻度（直接参照ファイル数 ≥ 9）の6手順は本ファイルに残置し、それ以外は\n`procedures\u002F` 配下へ分割した。呼び出し元は該当ファイルを `Read ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002F{ファイル名}`\nした上で、ファイル内の見出しを対象に `apply` する。\n\n- `invoke-reviewer.md` — Invoke Reviewer: xddp-reviewer への Agent tool 呼び出し共通手順\n- `review-loop.md` — Review Loop: AIレビュー→Fixer の反復ループ共通制御フロー\n- `human-review-gate.md` — Human Review Gate: 人レビューゲート共通フロー\n- `final-review-pass.md` — Final Review Pass: 最終確認パス\n- `cross-artifact-review.md` — Cross Artifact Review: cross\u002F 成果物のAIレビュー→インライン修正フロー\n- `snapshot-phase-baseline.md` — Snapshot Phase Baseline: 工程所要時間テレメトリの開始マーカー記録\n- `regenerate-crs-excel.md` — Regenerate CRS Excel (UR-016): CRS Markdown → Excel 再生成\n- `resolve-vcs-target-repos.md` — Resolve VCS Target Repos: VCS操作対象リポジトリの解決\n- `vcs-commit-if-dirty.md` — VCS Commit If Dirty: 未コミット変更があるリポジトリへの自動コミット\n- `vcs-auto-commit.md` — VCS Auto-Commit: 指定ステップでの自動コミット制御\n- `load-lessons-context.md` — Load Lessons Context: 知見ログの読み込み\n- `run-verification-tools.md` — Run Verification Tools: lint\u002Fbuild\u002Ftypecheck の実ツール実行\n- `load-steering-context.md` — Load Steering Context: project-rulebook.md の読み込み\n- `load-domain-constraints.md` — Load Domain Constraints: ドメイン制約の読み込み\n- `detect-test-framework.md` — Detect Test Framework: テストフレームワーク自動検出\n- `build-design-spec-params.md` — Build Design Spec Params: xddp-designer-agent 呼び出しパラメータ構築\n- `build-arch-agent-paths.md` — Build Arch Agent Paths: xddp-architect-agent 呼び出しパス構築\n- `build-tsp-output-file.md` — Build TSP Output File: TSP 出力ファイルパス構築\n- `ripple-engine-setup.md` — Ripple Engine Setup: 波紋調査の判定エンジン（スライス判定／規則判定）の決定\n- `ripple-engine-check.md` — Ripple Engine Check: 状態ファイルのある波紋調査の判定エンジンの照合\n- `ripple-wave-loop.md` — Ripple Wave Loop: 波紋調査の波ループ（search → 判定 → merge → commit-wave）\n- `ripple-count-check.md` — Ripple Count Check: 波紋調査の件数一致検証と不一致の扱い\n- `ripple-wave-resume.md` — Ripple Wave Resume: 波の途中の失敗を人が手で復旧する手順\n- `ripple-run.md` — Ripple Run: 工程4a の初回以外の波紋調査の作成・再開・採用\n- `ripple-run-outputs.md` — Ripple Run Outputs: 完了した波紋調査1つの出力（要約・全量・検証スイープ・伝播グラフ）\n- `specout-doc-levels.md` — Specout Doc Levels: スペックアウト資料の記載量の決定\n- `specout-finish.md` — Specout Finish: 採用した波紋調査の合算による SPO の仕上げ\n- `regression-status.md` — Regression Status: 工程6 Step A3 の回帰の範囲が CHD §4・採用した波紋調査・設定より古いかの確認\n","# XDDP Common Logic\n\n## Load Config\n\nxddp.config.md を探索・読み込み、CR に依存しない標準設定バンドルを返す共通手順。\nCR 解決が不要なスキル（`xddp-status`・`xddp-codemap`・`xddp-update-knowledge`・\n`xddp-fill-rulebook` 等）はこちらを直接使う。CR 解決が必要なスキルは `## CR Resolution` を使う。\n\n**Input:** `NOT_FOUND_MESSAGE`（任意, default: `\"xddp.config.md が見つかりません。ワークスペース\nルートまたはそのサブディレクトリで実行してください。\"`）: 未検出時に表示するメッセージ。\n\n**Output:** スクリプトが出力する JSON のトップレベルキー全て。\nキー名・既定値・消費者の一覧は `xddp_config.py load --list-keys` で得られる。\n\n**Process:**\n1. Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_config.py load --format json --start-dir .`\n2. 終了コードで分岐する: 0=成功 \u002F 1=実行時エラー（stderr を表示して停止）\u002F\n   2=使用法エラー（argparse 既定。stderr を表示して停止）\u002F 3=xddp.config.md 未検出\n   （`{NOT_FOUND_MESSAGE}` を表示して停止）。\n3. 出力 JSON をそのまま設定バンドルとして使う。stderr に警告があれば人に中継する。\n4. `REPOS:` が未設定・空の場合の扱いは呼び出し元スキルの裁量。\n\n## CR Resolution\n\n**Input:**\n- `RAW_ARGS` = trimmed string of $ARGUMENTS\n- `SKIP_ABORT_GUARD`（任意, default: `false`）: `true` の場合、下記の「中止済み CR ガード」を\n  スキップする。`\u002Fxddp-abort` 専用。他スキルはこの引数を渡さない。\n\n**Output:** `CR`（解決済みCR番号）, `REST_ARGS`（CR以降の残り引数）、および `## Load Config` が\n返す標準設定バンドル全て。\nOn failure, report error and stop.\n\napply \"## Load Config\"（本ファイル内）→ 標準設定バンドルを取得する。\n\n### Step 1: Identify CR from arguments\n\nLet `FIRST_ARG` = first token of `RAW_ARGS`.\n\nList all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F`, excluding hidden directories\n(dotfiles) and the reserved names `latest-specs` \u002F `survey` (同じ除外規則を Step 2 とも共有する)。\n\n- `FIRST_ARG` is non-empty AND exactly matches (完全一致。前方一致・部分一致ではない) the name of one\n  of the listed directories\n  → `CR = FIRST_ARG`, `REST_ARGS` = remaining tokens. Go to Step 1.X.\n- otherwise (FIRST_ARG is empty, or no listed directory name equals `FIRST_ARG`)\n  → `REST_ARGS = RAW_ARGS` (treat all tokens as secondary args). Go to Step 2.\n\n> **命名上の注意:** CRフォルダ名は `{XDDP_DIR}\u002F` 直下の実在ディレクトリとして解決されるため、\n> スキルが CR 番号の後に置く引数の語（`xddp-review`・`xddp-revise` の `analysis`\u002F`req`\u002F`specout`\u002F`arch`\u002F\n> `design`\u002F`test`\u002F`spec`、`xddp-feedback` の `code`、`xddp-set-profile` の `full`\u002F`quick`、\n> `xddp-06-design` の `regression`、`xddp-investigate` の `ripple`\u002F`adopt`\u002F`unadopt`\u002F`remove`\u002F`list`\u002F\n> `finish`\u002F`document`\u002F`suggest`）、`xddp-04-specout` の `ENTRY_POINTS`（調査対象の関数・\n> クラス名等の自由記述シンボル）、および予約ディレクトリ名（`latest-specs`・`survey`）と同名のCRを作成しないこと。\n> 同名の場合、Step 1 がその引数を誤ってCR番号と解釈する可能性がある。\n\n> **Skills that use secondary args:**\n> - `xddp-review`: first token of `REST_ARGS` → `DOCUMENT_TYPE`（`DOCUMENT_TYPE = spec` の場合、2番目のトークン → `TARGET_ARG`（省略可））\n> - `xddp-revise`: first token of `REST_ARGS` → `DOC_TYPE`\n> - `xddp-excel2md`: first token of `REST_ARGS` → `EXCEL_PATH`\n> - `xddp-04-specout`: remaining tokens of `REST_ARGS` → `ENTRY_POINTS`\n\n### Step 2: Auto-detect\n\nList all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F` as CR candidates,\nexcluding hidden directories (dotfiles) and the reserved names `latest-specs` \u002F `survey`.\n\n- **0 found** → report `\"CRフォルダが見つかりません。{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F に CR フォルダを作成するか、CR番号を引数に指定してください。\"` and stop.\n- **1 found** → `CR = that directory name`. Report `\"CR を自動検出しました: {CR}\"` and continue.\n- **Multiple found** → for each candidate directory `{dir}`, let `DIR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{dir}`\n  （`{dir}` は直前の「List all directories directly under `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F`」で得られる\n  ディレクトリの裸の名前であり絶対パスではない。`xddp_progress.py` の `_progress_path()` は\n  `--cr-path` の値をそのまま `Path(cr_path)\u002F\"progress.md\"` として解決するため、裸の名前を渡すと\n  オーケストレータの cwd 次第で `progress.md` が見つからず全候補が異常系と誤判定される。\n  `xddp-abort\u002FSKILL.md`「Let `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`」と同一のパス構築パターンに\n  倣う。`CR` 確定前（Step 1.X 到達前）のこの分岐では `CR_PATH` 変数が存在しないため、ここで\n  `{dir}` ごとに個別のローカル変数 `DIR_PATH` を明示的に構築する）、run via Bash:\n  `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py check-in-progress --cr-path {DIR_PATH}`\n  → let `CHECK_RESULT`（stdout の JSON 1オブジェクト）。\n  If it errors（e.g. `{DIR_PATH}\u002Fprogress.md` が存在しない・破損している等の異常系）:\n    treat `{dir}` as not in-progress for this candidate, and additionally warn:\n    \"⚠️ {dir} の progress.md を読み取れませんでした（不正な CR フォルダの可能性があります）。\"\n    （候補一覧からは除外しない——`{dir}` が実在する以上、人が最終的に選択肢として認識できる必要が\n    あるため。in-progress 判定からのみ除外する）\n  Else: a CR is \"in progress\" if `CHECK_RESULT.in_progress` is `true`\n  （判定条件の実装は `check-in-progress` に一元化されている。条件(a)(b)の設計意図・除外条件の理由は\n  `xddp_progress.py` の `cmd_check_in_progress` のコメントを参照）:\n  - Exactly **1 in progress** → `CR = that directory name`. Report `\"CR を自動検出しました: {CR}\"` and continue.\n  - **0 or multiple in progress** → display candidate list, report `\"CR番号を引数に指定してください\"` and stop.\n\n### Step 1.X: Resolve CR Profile（追加。`CR` 確定後・`## Resolve Affected Repos` の前に実行）\n\nLet `CR_PATH` = `{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}`（この手続き内部限定のローカル変数。呼び出し元\nスキルは `## CR Resolution` から戻った後、別途同じ式で `CR_PATH` を構築して使う — 両者は独立した\n構築だが同じ式のため値は一致する）。\n\n1. `CR_PROFILE` の初期値は上記 apply \"## Load Config\" で既に解決済みの値（`xddp.config.md` の\n   `CR_PROFILE`、未設定なら `full`）とする。\n2. `{CR_PATH}\u002Fprogress.md` が存在する場合: Read し、`**CRプロファイル：**` 行があればその値で\n   `CR_PROFILE` を上書きする（progress.md が存在しない、または該当行がない場合は上書きせず、\n   手順1の初期値のまま次のステップに進む。`## CR Resolution` は `xddp-01-init` からは呼ばれず\n   `xddp-01-init` の Step 5 で progress.md 生成後に初めて他スキルから呼ばれる想定のため、通常の\n   フローではこの分岐に到達しない。到達するのは CR フォルダが手動作成された等の異常系のみ）。\n3. 上書き後の値が `full` \u002F `quick` 以外の場合は `full` にフォールバックし、警告を出力する。\n\n### Step 1.Y: Abort Guard（追加。`CR` 確定後・戻り値返却前）\n\nIf `SKIP_ABORT_GUARD` is `true`: このガード全体をスキップする。\nElse: CR 確定後、`{WORKSPACE_ROOT}\u002F{XDDP_DIR}\u002F{CR}\u002Fprogress.md` が存在する場合、\n`## CR 中止` セクションの有無を確認する。存在する場合:\n> ⚠️ CR `{CR}` は {中止日} に中止済みです（理由: {中止理由}）。\n> このまま処理を続行しますか？ [続行 \u002F 中止]\nWait for user confirmation. If 中止 が選択された場合、呼び出し元スキルの処理を停止する。\n\n## Resolve Affected Repos\n\n**Input:** `REPOS_KEYS`, `IS_MULTI`, `CR_PATH`（`FILTER_BY_SPO=true` の場合のみ手続き内部で使用するが、\n  呼び出し元は `FILTER_BY_SPO` の値によらず常に渡す）, `FILTER_BY_SPO`（true\u002Ffalse）,\n  `HAS_CROSS`（`FILTER_BY_SPO=true` の場合のみ必須）,\n  `CR`（CR番号。`FILTER_BY_SPO=true` の場合のみ使用 — `SPO-{CR}.md`・`CHD-{CR}-cross.md` の\n  パス解決に必要。`FILTER_BY_SPO=false` の場合は不要。既存の `Discover CHD Files`・\n  `Regenerate CRS Excel` プロシージャと同様、`CR` を明示 Input として受領する）\n**Output:** `AFFECTED_REPOS`\n\n**Process:**\n1. `FILTER_BY_SPO = false`（既定・ほとんどのスキルで使用）の場合:\n   `AFFECTED_REPOS` = `REPOS_KEYS` のコピー。\n   （REPOS: に列挙された全リポジトリを対象とする。個別スキルによる絞り込みが別途必要な場合は\n   呼び出し元スキルが本プロシージャの結果を上書きする — 例: `xddp-04-specout` Step 0.5 の人による確認・絞り込み。）\n2. `FILTER_BY_SPO = true`（`xddp-11-specs` 専用 — 実際に specout・設計が完了したリポジトリのみを\n   最新仕様書生成の対象とするため。存在しない SPO\u002FDSN\u002FCHD を前提にした生成を防ぐ）の場合:\n   1. 基本: `{CR_PATH}\u002F04_specout\u002F{repo}\u002FSPO-{CR}.md` が存在するリポジトリを対象とする。\n   2. 追加条件（`IS_MULTI` and `HAS_CROSS` の場合）: `{CR_PATH}\u002F06_design\u002Fcross\u002FCHD-{CR}-cross.md` を\n      Read し（存在する場合）、インタフェース変更サマリーで「影響リポジトリ」として列挙されている\n      リポジトリを `AFFECTED_REPOS` に追加する（SPO がなくても overview\u002Farchitecture.md 更新対象に\n      なる可能性があるため）。CHD cross が存在しない場合はこの追加条件は適用しない。\n   3. `AFFECTED_REPOS` = 上記1・2で確定したリポジトリのリスト。\n3. Return `AFFECTED_REPOS`.\n\n## Resolve HAS_CROSS\n\n**Input:** `IS_MULTI`, `ARTIFACT_PATH`（直前工程の cross 成果物ファイルパス。工程により\n  SPO-{CR}-cross.md \u002F DSN-{CR}-cross.md \u002F CHD-{CR}-cross.md のいずれか）\n**Output:** `HAS_CROSS`\n\n**Process:**\n1. `HAS_CROSS` = (`IS_MULTI` and `ARTIFACT_PATH` が存在する)。\n2. Return `HAS_CROSS`.\n\n**注記（呼び出し元が明記すべき事項）:** `ARTIFACT_PATH` にどの工程の cross 成果物を渡すかは\n呼び出し元スキルの工程位置によって決まる（自分の直前工程が生成した cross 成果物を見る、という\n設計上の意図がある）。本プロシージャは存在チェックの実施のみを共通化し、\n「どのファイルを見るべきか」の判断は呼び出し元の責務のまま残す。\n\n**適用外（本プロシージャを使わないスキルとその理由）:**\n- `xddp-04-specout`: cross 成果物自体がこの工程で初めて生成されるため、着手時点では\n  存在チェック対象のファイルがまだない。`HAS_CROSS` は初期値 `IS_MULTI` とし、\n  Discovery でリポジトリ間依存が見つからなければ `false` に降格する、成果物存在チェックとは\n  異なる判定方式を用いる。\n- `xddp-close`: 特定1ファイルの存在ではなく、CR 内の cross\u002F 配下に何らかの成果物が\n  存在するか（工程4a〜8のどこかで cross 処理が行われたか）を広く問う棚卸し用途のため、\n  「直前工程の特定ファイル」を前提とする本プロシージャの対象外とする。\n\n## Progress Update\n\nprogress.md の指定ステップの状態・詳細ステップ・日付を更新する共通手順。\n\n**Input:**\n- `CR_PATH`: CRフォルダのパス\n- `STEP_NUM`: 更新するステップ番号\n- `STATE`: 新しい状態（? 進行中 \u002F ✅ 完了 \u002F ? レビュー待ち \u002F ? 修正中 \u002F ⏸ 中断 \u002F ? 中止）\n- `DETAIL_STEP`（任意）: 詳細ステップ文字列（完了時は `\"-\"` とする）。省略時は既存の詳細ステップを\n  変更しない（例: 差し戻し時に状態列だけを更新する場合）\n- `ARTIFACT_LINK`（任意）: 成果物へのリンク文字列。指定時は STATE によらず成果物列を更新する\n  （工程完了時のリンク設定に加え、`xddp-06-design`「## Step C': Generate Traceability Matrix (TM)」の\n  ように工程進行中に成果物列だけを先行更新するケースにも使う）。\n  `ARTIFACT_LINK` の書式は `xddp_progress.py` が検証する（不正な場合は非 0 終了して理由を表示する）。\n  巻き戻し時に成果物列をクリアするには `-` を明示的に渡す（空文字は無視される）。\n\n**Process:**\n1. Run via Bash:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py update --cr-path {CR_PATH} --step {STEP_NUM} --state \"{STATE}\" [--detail \"{DETAIL_STEP}\"] [--artifact-link \"{ARTIFACT_LINK}\"]`\n   （`STATE` = ✅ 完了 のとき、スクリプトが `## 備考・メモ` の `⚠️ 工程{STEP_NUM}:` 行を自動削除する）\n2. If the script is not found: tell the user to run `setup.sh` and stop.\n   If it errors: display stderr to the user and stop.\n3. If `{STATE}` = `✅ 完了`: also run via Bash（工程所要時間テレメトリ。ベストエフォート。\n   `## Snapshot Phase Baseline` を経由していない工程では開始マーカーが無いため `duration_ms` は\n   省略される。この場合もレコード自体は書き込まれる）:\n   `PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_metrics.py record --cr-path {CR_PATH} --step {STEP_NUM} --event phase_complete`\n   If the script is not found or errors: display stderr as advisory only and continue — do not stop\n   （手順1・2とは異なり、テレメトリ失敗は工程完了そのものをブロックしない）。\n\n## Discover CHD Files\n\nCHD（変更設計書）がインデックス + UR別内容ファイルに分割されている前提で、\n内容ファイル一覧を解決する共通手順。CHDを参照する全スキル・エージェント呼び出し元はこれを使うこと。\n\n**Input:**\n- `CR_PATH`: CRフォルダのパス\n- `REPO_NAME`: リポジトリ名（`\"cross\"` の場合は分割対象外のため単一ファイルを返す）\n- `CR`: CR番号\n\n**Output:**\n- `CHD_INDEX_FILE`: インデックスファイルのパス\n- `CHD_CONTENT_FILES`: 内容ファイルのパスのリスト（生成順）\n\n**Process:**\n1. `REPO_NAME` が `\"cross\"` の場合:\n   `CHD_INDEX_FILE` = `CHD_CONTENT_FILES[0]` = `{CR_PATH}\u002F06_design\u002Fcross\u002FCHD-{CR}-cross.md`。Return.\n2. `CHD_INDEX_FILE` = `{CR_PATH}\u002F06_design\u002F{REPO_NAME}\u002FCHD-{CR}.md`。\n3. `CHD_INDEX_FILE` が存在しない場合: `CHD_CONTENT_FILES` = 空リストを返す（CHD未生成）。\n4. `CHD_INDEX_FILE` を Read し、「## 2. UR別ファイル一覧」テーブルのファイルパス列から\n   全リンクを抽出して `CHD_CONTENT_FILES` とする。\n5. Return `CHD_INDEX_FILE`, `CHD_CONTENT_FILES`.\n\n## Procedures Index\n\n高頻度（直接参照ファイル数 ≥ 9）の6手順は本ファイルに残置し、それ以外は\n`procedures\u002F` 配下へ分割した。呼び出し元は該当ファイルを `Read ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002F{ファイル名}`\nした上で、ファイル内の見出しを対象に `apply` する。\n\n- `invoke-reviewer.md` — Invoke Reviewer: xddp-reviewer への Agent tool 呼び出し共通手順\n- `review-loop.md` — Review Loop: AIレビュー→Fixer の反復ループ共通制御フロー\n- `human-review-gate.md` — Human Review Gate: 人レビューゲート共通フロー\n- `final-review-pass.md` — Final Review Pass: 最終確認パス\n- `cross-artifact-review.md` — Cross Artifact Review: cross\u002F 成果物のAIレビュー→インライン修正フロー\n- `snapshot-phase-baseline.md` — Snapshot Phase Baseline: 工程所要時間テレメトリの開始マーカー記録\n- `regenerate-crs-excel.md` — Regenerate CRS Excel (UR-016): CRS Markdown → Excel 再生成\n- `resolve-vcs-target-repos.md` — Resolve VCS Target Repos: VCS操作対象リポジトリの解決\n- `vcs-commit-if-dirty.md` — VCS Commit If Dirty: 未コミット変更があるリポジトリへの自動コミット\n- `vcs-auto-commit.md` — VCS Auto-Commit: 指定ステップでの自動コミット制御\n- `load-lessons-context.md` — Load Lessons Context: 知見ログの読み込み\n- `run-verification-tools.md` — Run Verification Tools: lint\u002Fbuild\u002Ftypecheck の実ツール実行\n- `load-steering-context.md` — Load Steering Context: project-rulebook.md の読み込み\n- `load-domain-constraints.md` — Load Domain Constraints: ドメイン制約の読み込み\n- `detect-test-framework.md` — Detect Test Framework: テストフレームワーク自動検出\n- `build-design-spec-params.md` — Build Design Spec Params: xddp-designer-agent 呼び出しパラメータ構築\n- `build-arch-agent-paths.md` — Build Arch Agent Paths: xddp-architect-agent 呼び出しパス構築\n- `build-tsp-output-file.md` — Build TSP Output File: TSP 出力ファイルパス構築\n- `ripple-engine-setup.md` — Ripple Engine Setup: 波紋調査の判定エンジン（スライス判定／規則判定）の決定\n- `ripple-engine-check.md` — Ripple Engine Check: 状態ファイルのある波紋調査の判定エンジンの照合\n- `ripple-wave-loop.md` — Ripple Wave Loop: 波紋調査の波ループ（search → 判定 → merge → commit-wave）\n- `ripple-count-check.md` — Ripple Count Check: 波紋調査の件数一致検証と不一致の扱い\n- `ripple-wave-resume.md` — Ripple Wave Resume: 波の途中の失敗を人が手で復旧する手順\n- `ripple-run.md` — Ripple Run: 工程4a の初回以外の波紋調査の作成・再開・採用\n- `ripple-run-outputs.md` — Ripple Run Outputs: 完了した波紋調査1つの出力（要約・全量・検証スイープ・伝播グラフ）\n- `specout-doc-levels.md` — Specout Doc Levels: スペックアウト資料の記載量の決定\n- `specout-finish.md` — Specout Finish: 採用した波紋調査の合算による SPO の仕上げ\n- `regression-status.md` — Regression Status: 工程6 Step A3 の回帰の範囲が CHD §4・採用した波紋調査・設定より古いかの確認\n",{"name":5,"description":7,"user-invocable":23},"main","042a4ff56d7618af83f802295e7a38c851e78da2","ClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common",0,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings","https:\u002F\u002Fgithub.com\u002Ftsuna44","2026-11-08 08:45:39",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add tsuna44\u002FXddpSettings --skill xddp-common",{"tool":40,"command":41},"bunx","bunx skills add tsuna44\u002FXddpSettings --skill xddp-common",{"tool":43,"command":44},"pnpm","pnpm dlx skills add tsuna44\u002FXddpSettings --skill xddp-common","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md",true,[48,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"procedures\u002Fbuild-arch-agent-paths.md","REFERENCE","参考文档",721,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-arch-agent-paths.md",{"path":55,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":56,"sourceHtmlUrl":57},"procedures\u002Fbuild-design-spec-params.md",1581,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-design-spec-params.md",{"path":59,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":60,"sourceHtmlUrl":61},"procedures\u002Fbuild-tsp-output-file.md",553,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fbuild-tsp-output-file.md",{"path":63,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":64,"sourceHtmlUrl":65},"procedures\u002Fcross-artifact-review.md",3295,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fcross-artifact-review.md",{"path":67,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":68,"sourceHtmlUrl":69},"procedures\u002Fdetect-test-framework.md",1221,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fdetect-test-framework.md",{"path":71,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":72,"sourceHtmlUrl":73},"procedures\u002Ffinal-review-pass.md",2360,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Ffinal-review-pass.md",{"path":75,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":76,"sourceHtmlUrl":77},"procedures\u002Fhuman-review-gate.md",6478,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fhuman-review-gate.md",{"path":79,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":80,"sourceHtmlUrl":81},"procedures\u002Finvoke-reviewer.md",4684,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Finvoke-reviewer.md",{"path":83,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":84,"sourceHtmlUrl":85},"procedures\u002Fload-domain-constraints.md",1156,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-domain-constraints.md",{"path":87,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":88,"sourceHtmlUrl":89},"procedures\u002Fload-lessons-context.md",2282,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-lessons-context.md",{"path":91,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":92,"sourceHtmlUrl":93},"procedures\u002Fload-steering-context.md",1001,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fload-steering-context.md",{"path":95,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":96,"sourceHtmlUrl":97},"procedures\u002Fregenerate-crs-excel.md",2015,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregenerate-crs-excel.md",{"path":99,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":100,"sourceHtmlUrl":101},"procedures\u002Fregression-status.md",3798,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fregression-status.md",{"path":103,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":104,"sourceHtmlUrl":105},"procedures\u002Fresolve-vcs-target-repos.md",4951,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fresolve-vcs-target-repos.md",{"path":107,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":108,"sourceHtmlUrl":109},"procedures\u002Freview-loop.md",8443,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Freview-loop.md",{"path":111,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":112,"sourceHtmlUrl":113},"procedures\u002Fripple-count-check.md",5582,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-count-check.md",{"path":115,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":116,"sourceHtmlUrl":117},"procedures\u002Fripple-engine-check.md",3402,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-engine-check.md",{"path":119,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":120,"sourceHtmlUrl":121},"procedures\u002Fripple-engine-setup.md",2153,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-engine-setup.md",{"path":123,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":124,"sourceHtmlUrl":125},"procedures\u002Fripple-run-outputs.md",3875,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-run-outputs.md",{"path":127,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":128,"sourceHtmlUrl":129},"procedures\u002Fripple-run.md",8543,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-run.md",{"path":131,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":132,"sourceHtmlUrl":133},"procedures\u002Fripple-wave-loop.md",19905,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-wave-loop.md",{"path":135,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":136,"sourceHtmlUrl":137},"procedures\u002Fripple-wave-resume.md",7144,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fripple-wave-resume.md",{"path":139,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":140,"sourceHtmlUrl":141},"procedures\u002Frun-verification-tools.md",5169,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Frun-verification-tools.md",{"path":143,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":144,"sourceHtmlUrl":145},"procedures\u002Fsnapshot-phase-baseline.md",1935,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fsnapshot-phase-baseline.md",{"path":147,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":148,"sourceHtmlUrl":149},"procedures\u002Fspecout-doc-levels.md",1434,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-doc-levels.md",{"path":151,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":152,"sourceHtmlUrl":153},"procedures\u002Fspecout-finish.md",19917,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fspecout-finish.md",{"path":155,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":156,"sourceHtmlUrl":157},"procedures\u002Fvcs-auto-commit.md",1716,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fvcs-auto-commit.md",{"path":159,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":160,"sourceHtmlUrl":161},"procedures\u002Fvcs-commit-if-dirty.md",6621,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fprocedures\u002Fvcs-commit-if-dirty.md",{"path":163,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":164,"sourceHtmlUrl":165},"reviewer-checklists\u002FANA.md",1609,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FANA.md",{"path":167,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":168,"sourceHtmlUrl":169},"reviewer-checklists\u002FCHD.md",5650,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FCHD.md",{"path":171,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":172,"sourceHtmlUrl":173},"reviewer-checklists\u002FCRS.md",5129,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FCRS.md",{"path":175,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":176,"sourceHtmlUrl":177},"reviewer-checklists\u002FDSN.md",2029,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FDSN.md",{"path":179,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":180,"sourceHtmlUrl":181},"reviewer-checklists\u002FPLAN.md",3044,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FPLAN.md",{"path":183,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":184,"sourceHtmlUrl":185},"reviewer-checklists\u002FSPEC.md",4718,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FSPEC.md",{"path":187,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":188,"sourceHtmlUrl":189},"reviewer-checklists\u002FSPO.md",2967,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FSPO.md",{"path":191,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":192,"sourceHtmlUrl":193},"reviewer-checklists\u002FTSP.md",2896,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Freviewer-checklists\u002FTSP.md",{"path":195,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":198,"sourceHtmlUrl":199},"scripts\u002Fai_index.py","SCRIPT","脚本",20734,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fai_index.py",{"path":201,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":202,"sourceHtmlUrl":203},"scripts\u002Fartifact_lint.py",48134,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fartifact_lint.py",{"path":205,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":206,"sourceHtmlUrl":207},"scripts\u002Fcrs_model.py",16709,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fcrs_model.py",{"path":209,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":210,"sourceHtmlUrl":211},"scripts\u002Fcrs_ur_scope.py",6179,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fcrs_ur_scope.py",{"path":213,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":214,"sourceHtmlUrl":215},"scripts\u002Fdocs_layout.py",7134,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fdocs_layout.py",{"path":217,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":218,"sourceHtmlUrl":219},"scripts\u002Fknowledge_place.py",11701,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fknowledge_place.py",{"path":221,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":222,"sourceHtmlUrl":223},"scripts\u002Ftests\u002Ftest_ai_index.py",16471,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_ai_index.py",{"path":225,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":226,"sourceHtmlUrl":227},"scripts\u002Ftests\u002Ftest_artifact_lint.py",46000,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_artifact_lint.py",{"path":229,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":230,"sourceHtmlUrl":231},"scripts\u002Ftests\u002Ftest_crs_model.py",5761,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_crs_model.py",{"path":233,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":234,"sourceHtmlUrl":235},"scripts\u002Ftests\u002Ftest_crs_ur_scope.py",5745,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_crs_ur_scope.py",{"path":237,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":238,"sourceHtmlUrl":239},"scripts\u002Ftests\u002Ftest_docs_layout.py",4282,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_docs_layout.py",{"path":241,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":242,"sourceHtmlUrl":243},"scripts\u002Ftests\u002Ftest_knowledge_place.py",10665,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_knowledge_place.py",{"path":245,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":246,"sourceHtmlUrl":247},"scripts\u002Ftests\u002Ftest_xddp_config.py",9238,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_config.py",{"path":249,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":250,"sourceHtmlUrl":251},"scripts\u002Ftests\u002Ftest_xddp_gate_snapshot.py",4403,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_gate_snapshot.py",{"path":253,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":254,"sourceHtmlUrl":255},"scripts\u002Ftests\u002Ftest_xddp_metrics.py",9869,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_metrics.py",{"path":257,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":258,"sourceHtmlUrl":259},"scripts\u002Ftests\u002Ftest_xddp_progress.py",18492,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_progress.py",{"path":261,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":262,"sourceHtmlUrl":263},"scripts\u002Ftests\u002Ftest_xddp_review_brief.py",17699,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_review_brief.py",{"path":265,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":266,"sourceHtmlUrl":267},"scripts\u002Ftests\u002Ftest_xddp_vcs.py",19728,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_vcs.py",{"path":269,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":270,"sourceHtmlUrl":271},"scripts\u002Ftests\u002Ftest_xddp_verify_tools.py",4463,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Ftests\u002Ftest_xddp_verify_tools.py",{"path":273,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":274,"sourceHtmlUrl":275},"scripts\u002Fxddp_config.py",18040,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_config.py",{"path":277,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":278,"sourceHtmlUrl":279},"scripts\u002Fxddp_gate_snapshot.py",4977,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_gate_snapshot.py",{"path":281,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":282,"sourceHtmlUrl":283},"scripts\u002Fxddp_metrics.py",5772,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_metrics.py",{"path":285,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":286,"sourceHtmlUrl":287},"scripts\u002Fxddp_progress.py",16142,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_progress.py",{"path":289,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":290,"sourceHtmlUrl":291},"scripts\u002Fxddp_review_brief.py",15944,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_review_brief.py",{"path":293,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":294,"sourceHtmlUrl":295},"scripts\u002Fxddp_vcs.py",12567,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_vcs.py",{"path":297,"resourceType":196,"resourceTypeDesc":197,"sizeBytes":298,"sourceHtmlUrl":299},"scripts\u002Fxddp_verify_tools.py",7926,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fxddp_verify_tools.py",{"path":301,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":302,"sourceHtmlUrl":303},"templates\u002Fproject-rulebook-cross-template.md",6207,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Ftemplates\u002Fproject-rulebook-cross-template.md",{"path":305,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":306,"sourceHtmlUrl":307},"templates\u002Fproject-rulebook-repo-template.md",6476,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Ftemplates\u002Fproject-rulebook-repo-template.md",{"path":309,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":310,"sourceHtmlUrl":311},"templates\u002Fproject-rulebook-template.md",7292,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Ftemplates\u002Fproject-rulebook-template.md",{"path":313,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":314,"sourceHtmlUrl":315},"templates\u002Freview-template.md",2279,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-common\u002Ftemplates\u002Freview-template.md",[317,330,337,344,351,373],{"skillNo":318,"name":319,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":320,"categories":321,"keywords":327,"publishedAt":22},"01M6MDVNN0ZX8D5KABK9G0067Z","demo.skill","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.skill\u002FSKILL.md",[322],{"categoryNo":323,"categoryName":324,"taxonomyType":325,"taxonomyTypeDesc":326},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[328,329],"demo skill","demo",{"skillNo":331,"name":332,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":333,"categories":334,"keywords":335,"publishedAt":22},"01M6MDVK20HAJYBMXM7VX50A3J","demo.noname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.noname\u002FSKILL.md",[],[336,329],"demo noname",{"skillNo":338,"name":339,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":340,"categories":341,"keywords":342,"publishedAt":22},"01M6MDVFS20532JT4V7WT779XH","demo.common","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.common\u002FSKILL.md",[],[343,18,329],"demo common",{"skillNo":345,"name":346,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":347,"categories":348,"keywords":349,"publishedAt":22},"01M6MDVCV2JFN66NJTFG1CCJS1","demo.badname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.badname\u002FSKILL.md",[],[350,329],"demo badname",{"skillNo":352,"name":353,"nameZh":6,"description":354,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":355,"categories":356,"keywords":360,"publishedAt":22},"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",[357],{"categoryNo":358,"categoryName":359,"taxonomyType":325,"taxonomyTypeDesc":326},"01JBSEEDCAT000000000000021","资料检索与研究",[361,362,363,364,365,366,367,368,369,370,371,372],"xddp update knowledge","update knowledge","knowledge","update","note","structure","constraint","lesson","glossary","baseline","flow","docs",{"skillNo":374,"name":375,"nameZh":6,"description":376,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":377,"categories":378,"keywords":387,"publishedAt":22},"01M6MDV2Q1Z02WAN4CZ2WVFZ27","xddp-sync-design","コードから DSN を再生成してリビジョンとして記録し、AIレビュー→人承認を実施する。「設計を同期して」「DSN を更新して」などで起動する。","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-sync-design\u002FSKILL.md",[379,382],{"categoryNo":380,"categoryName":381,"taxonomyType":325,"taxonomyTypeDesc":326},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":383,"categoryName":384,"taxonomyType":385,"taxonomyTypeDesc":386},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[388,389,390,391],"sync","xddp sync design","design","生成"]