[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MDV7CHGZGPXR0MQ44VC4C1":3,"skill-same:01M6MDV7CHGZGPXR0MQ44VC4C1":76},{"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":22,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6MDV7CHGZGPXR0MQ44VC4C1","xddp-update-knowledge",null,"任意のタイミングで baseline_docs\u002F の knowledge ディレクトリに知識を追加・更新する。CR 非依存。対話形式と引数形式に対応。「知識を登録して」「callgraph を記録して」「メモを保存して」などで起動する。","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-update-knowledge\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34],"update","knowledge","update knowledge","xddp update knowledge","docs","flow","baseline","glossary","lesson","structure","note","constraint","2026-11-10 10:12:30",false,"---\nname: xddp-update-knowledge\ndescription: 任意のタイミングで baseline_docs\u002F の knowledge ディレクトリに知識を追加・更新する。CR 非依存。対話形式と引数形式に対応。「知識を登録して」「callgraph を記録して」「メモを保存して」などで起動する。\nargument-hint: \"[repo名] [constraint|flow|callgraph|lesson|note|glossary|structure]\"\n---\n\nYou are executing **XDDP Update Knowledge — Persist Investigation Results**.\n\n> 本スキルは CR 非依存のため CR 解決行（xddp-common の \"## CR Resolution\"）は不要。\n\n**Arguments:** $ARGUMENTS\n- No args → interactive mode: ask repo, type, content sequentially\n- `{repo}` → specific repository (matches a REPOS: key); then ask type and content interactively\n- `{repo} {type}` → specific repo and type; ask content interactively\n  Valid types: `constraint` | `flow` | `callgraph` | `lesson` | `note` | `glossary` | `structure`\n- Type alone without repo → if REPOS_KEYS has 1 entry, auto-confirm repo; else ask\n\n---\n\n### Step 0: Parse arguments, locate xddp.config.md\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Load Config\"\n→ let `WORKSPACE_ROOT`, `DOCS_DIR`, `DOCS`, `REPOS_MAP`, `REPOS_KEYS`, `IS_MULTI`（他の戻り値は本スキルでは未使用）.\n\n**Resolve target repo (`TARGET_REPO`):**\n- If `{repo}` in args matches a REPOS_KEY: `TARGET_REPO` = {repo}.\n- If `{repo}` in args does not match: report error and stop.\n- If no repo specified and REPOS_KEYS has 1 entry: `TARGET_REPO` = that entry (report auto-confirm to user).\n- If no repo specified and REPOS_KEYS has ≥2 entries: show numbered list and ask user to select.\n\n**Resolve type (`TARGET_TYPE`):**\n- If `{type}` in args and is one of `constraint|flow|callgraph|lesson|note|glossary|structure`: `TARGET_TYPE` = {type}.\n- If not specified: ask user to select from numbered list.\n\nLet `KNOW_DIR` = `{DOCS}\u002F{TARGET_REPO}\u002Fknowledge`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-rules\u002Fcode-knowledge-boundary.md`, apply \"## 宛先ルーティング表\"\n  → let `KNOWLEDGE_ROUTING`, and \"## 知見の置き場所（MODULE）\" → let `KNOWLEDGE_PLACE`.\n\n---\n\n### Step 1: Collect input content (interactive prompts)\n\nShow the appropriate prompt based on `TARGET_TYPE`:\n\n**constraint:**\n```\n対象のファイルまたはディレクトリ（リポジトリのルートからの相対パス。特定のファイルに結び付かない制約は空）:\nタイトル（CK-NNN の見出し）:\n対象（ファイル・インタフェース・識別子・レジスタ等）:\n内容（具体的な制約・落とし穴）:\n回避策:\n出典（例: manual\u002F2026-07-04）:\n```\n\n**flow:**\n```\n図の種別（sequence \u002F dfd）:\nドメイン名（例: auth, device, scheduler）:\nフロー名（ファイル名のベース、ハイフン区切り）:\n図の内容（Mermaid テキストまたは説明）:\n出典:\n```\n\n**callgraph:**\n```\n対象変数\u002F識別子名:\nドメイン名（例: auth, device, scheduler）:\nフロー名（ファイル名のベース、ハイフン区切り）:\n更新する識別子・処理一覧（名称・ファイル・タイミング・条件）:\n参照する識別子・処理一覧（名称・ファイル・タイミング・条件）:\n備考・注意事項（並行更新リスク・タイミング制約・スレッドセーフ等）:\n出典（例: manual\u002F2026-07-04）:\n```\n\n**lesson:**\n```\n工程（例: 方式検討 \u002F コーディング \u002F テスト）:\nタグ（例: #リスク #見落とし #コーディング）:\nタイトル:\n発生状況:\n学んだこと:\n次回への適用:\n出典:\n```\n\n**note:**\n```\nトピック名（ファイル名のベース、ハイフン区切り）:\n概要:\n詳細（自由記述）:\n関連ファイル・識別子（任意）:\n出典:\n```\n\n**glossary:**\n```\n（IS_MULTI の場合）スコープ（project \u002F {repo名} \u002F cross）:\n（IS_MULTI でない場合）スコープ（project \u002F {repo名}）:\n正式表記:\n定義（1〜2文。曖昧語を使わない）:\n別名・揺れ（カンマ区切り。なければ空）:\n使用禁止の表記（カンマ区切り。なければ空）:\n関連モジュール（任意）:\n出典:\n```\n\n> `cross` は `IS_MULTI`（REPOS: が2エントリ以上）の場合のみ選択可能な特別スコープであり、\n> リポジトリ間で共通の用語を表す（`cross` は `REPOS:` の予約名のため、通常の `{repo名}` 選択肢とは\n> 別枠で扱う）。\n>\n> **既存 Step 0「Resolve target repo」との重複について:** Step 0 は `TARGET_TYPE` の確定前に\n> 無条件でリポジトリ選択を要求するため、glossary で `project` または `cross` スコープを意図する\n> 利用者も、Step 0 でいったん無関係なリポジトリを選ぶことになる（Step 0 で選んだリポジトリは、\n> 本 Step 1 のスコープ回答が `project`／`cross` の場合は使用されない）。これは意図的な設計判断で\n> あり、Step 0 を「TARGET_TYPE を先に確定してからリポジトリを解決する」順序に変更する代替案も\n> あるが、その変更は constraint\u002Fflow\u002Fcallgraph\u002Flesson\u002Fnote の既存5種別の対話フローにも影響する\n> リファクタリングになるため、本プランでは Step 0 を変更せず、glossary 1種別に閉じた本 Step 1 の\n> 追加質問で完結させる方を選択した。二重質問の UX コストは、glossary 登録の頻度が高くない\n> CR 非依存の随時実行コマンドであることを踏まえ許容する。\n\n**structure:**\n```\n対象言語のパラダイム（OOP \u002F 手続き型）:\n含まれるモジュール一覧:\nドメイン名（例: auth, device, scheduler）:\n対象データ型・構造体（名称・定義場所）:\nモジュール間の依存関係（参照元 → 参照先）:\n落とし穴・注意点（この構造を参照するときに気をつけること）:\n出典（例: manual\u002F2026-08-08）:\n```\n\n「対象言語のパラダイム」は、昇格先テンプレート `code-knowledge-structures-template.md` が要求する\n「OOP言語: classDiagram \u002F 手続き型（C言語等）: テキスト表または graph LR」という図の記法選択を\n入力時点で確定させる質問（`flow` 種別が「図の種別（sequence \u002F dfd）:」を明示質問するのと同じパターン）。\n「含まれるモジュール一覧」はテンプレートの「含まれるモジュール」欄に対応する。\n\n「落とし穴・注意点」は入力を強く推奨するが、機械的な必須項目としては扱わない\n（`code-knowledge-boundary.md`「宛先ルーティング表」の経路ごとの拘束範囲注記により、手動登録経路\n（本スキル）には昇格条件列を機械適用しない）。空で入力された場合:\n- その旨と、仕様側（`specs\u002Foverview\u002F`）への記載も選択肢であることを案内した上で、続行するかどうかを\n  人に確認する。\n- 「続行する」が選択された場合: Step 2 のプレビューに進む。\n- 「続行しない」が選択された場合: Step 2 の「If denied or cancelled: stop.」と全く同一の挙動\n  （コマンド全体を終了する。Step 0 の対話へループバックはしない）で `structure` の登録処理を終了する。\n\n「落とし穴・注意点」以外の6項目（対象言語のパラダイム・含まれるモジュール一覧・ドメイン名・\n対象データ型\u002F構造体・モジュール間の依存関係・出典）は必須入力とする。空の場合は理由を示して再入力を求める。\n\n---\n\n### Step 1.5（constraint のみ）: 置き場所の決定\n\n`KNOWLEDGE_PLACE` に従い、constraint の置き場所 `MODULE` を決める:\n- 「対象のファイルまたはディレクトリ」が空なら `MODULE` = `_general`。\n- それ以外は、入力を1件の対象として引用符付きのヒアドキュメントで stdin に渡して Run via Bash:\n  ```\n  PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fknowledge_place.py place --repo-root {REPOS_MAP[TARGET_REPO] の値} --workspace-root {WORKSPACE_ROOT} \u003C\u003C'EOF'\n  [{\"id\": \"manual\", \"targets\": [\"{入力された対象のファイルまたはディレクトリ}\"]}]\n  EOF\n  ```\n  - 終了コードが 0 以外なら、stderr を示して停止する（何も書かない）。\n  - 対象の `status` が `placed` なら、返った `module` を `MODULE` にする。`reserved_collision` が true なら、\n    置き場所が予約名と同じ名前のディレクトリである旨を Step 2 のプレビューに添える。\n  - `status` が `placed` 以外なら、その意味（`url`＝URL、`no-path`＝パスではない、`outside-repo`＝リポジトリの外、\n    `not-found`＝リポジトリに無い）を示し、人に「入力し直す／パスなし（`_general`）」を尋ねる。\n    入力し直す場合は、新しい入力でこの Step をやり直す。\n\n---\n\n### Step 2: Preview and confirm\n\nShow a preview of the content to be written and the target file path\n（constraint は Step 1.5 で決めた置き場所 `{KNOW_DIR}\u002Fcode-knowledge\u002F{MODULE}\u002Fconstraints.md` を示す）.\nAsk user to confirm. If denied or cancelled: stop.\n\n---\n\n### Step 3: Write to baseline_docs\u002F\n\nBased on `TARGET_TYPE`:\n\n**constraint:**\n- `MODULE` = Step 1.5 で決めた置き場所\n- Let `TARGET_FILE` \u002F テンプレート = `KNOWLEDGE_ROUTING`「制約・落とし穴」行に従う\n- Ensure directory exists (mkdir -p via Bash).\n- If `TARGET_FILE` exists: read existing CK-NNN entries; assign next available NNN.\n  Upsert: if same 出典 exists → replace entry; else → append new [CK-NNN] entry.\n- Else: create from the template named in `KNOWLEDGE_ROUTING`.\n\n**flow:**\n- Let `FLOW_TYPE` = `sequence` | `dfd`\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fcode-knowledge\u002F_flows\u002F{DOMAIN}-{FLOW_NAME}-{FLOW_TYPE}.md`\n- Ensure directory exists.\n- Create or overwrite using appropriate template:\n  - sequence → `~\u002F.claude\u002Fskills\u002Fxddp-close\u002Ftemplates\u002Fcode-knowledge-flows-sequence-template.md`\n  - dfd → `~\u002F.claude\u002Fskills\u002Fxddp-close\u002Ftemplates\u002Fcode-knowledge-flows-dfd-template.md`\n\n**callgraph:**\n- Let `VAR_NAME` = 対象変数\u002F識別子名（スペース→ハイフン・小文字）\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fcode-knowledge\u002F_flows\u002F{DOMAIN}-{VAR_NAME}-callgraph.md`\n- Ensure directory exists.\n- If `TARGET_FILE` exists: update tables; append row to 変更履歴.\n- Else: create from template `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fcallgraph-template.md`.\n\n**lesson:**\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Flessons-learned.md`\n- Ensure file exists (create with header if not).\n- Read existing LL-NNN; assign next NNN. Append new entry at end.\n\n**note:**\n- Let `TOPIC` = トピック名（スペース→ハイフン・小文字）\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fnotes\u002F{TOPIC}.md`\n- Ensure directory exists.\n- If `TARGET_FILE` exists: append new content block with 更新日.\n- Else: create from template `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fnotes-template.md`.\n\n**glossary:**\n\n- スコープが `project` の場合: Let `TARGET_FILE` = `{DOCS}\u002Fglossary.md`\n- スコープが `{repo}` の場合: Let `TARGET_FILE` = `{KNOW_DIR}\u002Fglossary.md`\n- スコープが `cross` の場合（`IS_MULTI` の場合のみ選択可能）:\n  Let `TARGET_FILE` = `{DOCS}\u002Fcross\u002Fknowledge\u002Fglossary.md`\n- ファイルが存在する場合: 「用語一覧」テーブルに行を upsert する\n  （**正式表記**列をキーとし、既存行があれば上書きする）\n- ファイルが存在しない場合: テンプレート\n  `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fglossary-template.md` から作成する\n- 「変更履歴」テーブルに1行追記する（CR 非依存の実行のため CR 列は `—` とする）\n\n**structure:**\n- Let `DOMAIN` = 入力されたドメイン名\n- Let `TARGET_FILE` \u002F テンプレート = `KNOWLEDGE_ROUTING`「構造体依存関係」行（per-repo 系統）に従う\n- Ensure directory exists (mkdir -p via Bash).\n- If `TARGET_FILE` exists: Upsert（同一ドメインの図を上書き更新）。\n- Else: create from the template named in `KNOWLEDGE_ROUTING`。\n- テンプレートへの入力項目マッピング（`code-knowledge-structures-template.md` の節に対応）:\n  - 「モジュール間の構造体依存関係」節: 対象言語のパラダイムが OOP の場合は mermaid `classDiagram`、\n    手続き型の場合はテキスト表または `graph LR` で、対象データ型・構造体とモジュール間の依存関係を記入する\n  - 「含まれるモジュール:」欄 ← 入力された「含まれるモジュール一覧」\n  - 「出典:」欄 ← 入力された「出典」（CR 非依存実行のため CR 番号ではなく入力値をそのまま使用）\n  - 「注意事項・制約」節（`KNOWLEDGE_ROUTING`「構造体依存関係」行のセクション列に対応）\n    ← 入力された「落とし穴・注意点」（`_structures\u002F` 存在意義の中核フィールド。Step 1 で空欄のまま\n    続行が選択された場合は、その旨を明記した上で節を空のまま作成する）\n\n**AI_INDEX.md の作り直し（どの種別でも、書いた後に実行する）:** Run via Bash（`TARGET_REPO` だけでなく全 repo を渡す）:\n`PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fai_index.py build --docs {DOCS} --repos-keys {REPOS_KEYS をカンマ区切り} {IS_MULTI の場合のみ}--is-multi`\n失敗したら Let `AI_INDEX_ERROR` = stderr の1行目（登録は取り消さない）。\n\n---\n\n### Step 4: Report\n\nTell the user:\n\n> **知識の登録が完了しました**\n>\n> | 項目 | 内容 |\n> |---|---|\n> | 種別 | {TARGET_TYPE} |\n> | リポジトリ | {TARGET_REPO} |\n> | 格納先 | `{TARGET_FILE}` |\n>\n> {AI_INDEX_ERROR がある場合: ⚠️ AI_INDEX.md の作り直しに失敗しました（{AI_INDEX_ERROR}）。登録は済んでいます。`ai_index.py build` を再実行してください}\n>\n> **次のステップ:**\n> - 内容を確認してください: `{TARGET_FILE}`\n> - 修正が必要な場合は直接編集するか、再度 `\u002Fxddp-update-knowledge` を実行してください\n\n---\n> **保守メモ:** このファイルを変更した場合は、`README.md`（スキル一覧テーブル）、`CLAUDE.md`\n> （ステップ番号体系テーブル）も合わせて更新すること。\n","You are executing **XDDP Update Knowledge — Persist Investigation Results**.\n\n> 本スキルは CR 非依存のため CR 解決行（xddp-common の \"## CR Resolution\"）は不要。\n\n**Arguments:** $ARGUMENTS\n- No args → interactive mode: ask repo, type, content sequentially\n- `{repo}` → specific repository (matches a REPOS: key); then ask type and content interactively\n- `{repo} {type}` → specific repo and type; ask content interactively\n  Valid types: `constraint` | `flow` | `callgraph` | `lesson` | `note` | `glossary` | `structure`\n- Type alone without repo → if REPOS_KEYS has 1 entry, auto-confirm repo; else ask\n\n---\n\n### Step 0: Parse arguments, locate xddp.config.md\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-common\u002FSKILL.md`, apply \"## Load Config\"\n→ let `WORKSPACE_ROOT`, `DOCS_DIR`, `DOCS`, `REPOS_MAP`, `REPOS_KEYS`, `IS_MULTI`（他の戻り値は本スキルでは未使用）.\n\n**Resolve target repo (`TARGET_REPO`):**\n- If `{repo}` in args matches a REPOS_KEY: `TARGET_REPO` = {repo}.\n- If `{repo}` in args does not match: report error and stop.\n- If no repo specified and REPOS_KEYS has 1 entry: `TARGET_REPO` = that entry (report auto-confirm to user).\n- If no repo specified and REPOS_KEYS has ≥2 entries: show numbered list and ask user to select.\n\n**Resolve type (`TARGET_TYPE`):**\n- If `{type}` in args and is one of `constraint|flow|callgraph|lesson|note|glossary|structure`: `TARGET_TYPE` = {type}.\n- If not specified: ask user to select from numbered list.\n\nLet `KNOW_DIR` = `{DOCS}\u002F{TARGET_REPO}\u002Fknowledge`.\n\nRead `~\u002F.claude\u002Fskills\u002Fxddp-rules\u002Fcode-knowledge-boundary.md`, apply \"## 宛先ルーティング表\"\n  → let `KNOWLEDGE_ROUTING`, and \"## 知見の置き場所（MODULE）\" → let `KNOWLEDGE_PLACE`.\n\n---\n\n### Step 1: Collect input content (interactive prompts)\n\nShow the appropriate prompt based on `TARGET_TYPE`:\n\n**constraint:**\n```\n対象のファイルまたはディレクトリ（リポジトリのルートからの相対パス。特定のファイルに結び付かない制約は空）:\nタイトル（CK-NNN の見出し）:\n対象（ファイル・インタフェース・識別子・レジスタ等）:\n内容（具体的な制約・落とし穴）:\n回避策:\n出典（例: manual\u002F2026-07-04）:\n```\n\n**flow:**\n```\n図の種別（sequence \u002F dfd）:\nドメイン名（例: auth, device, scheduler）:\nフロー名（ファイル名のベース、ハイフン区切り）:\n図の内容（Mermaid テキストまたは説明）:\n出典:\n```\n\n**callgraph:**\n```\n対象変数\u002F識別子名:\nドメイン名（例: auth, device, scheduler）:\nフロー名（ファイル名のベース、ハイフン区切り）:\n更新する識別子・処理一覧（名称・ファイル・タイミング・条件）:\n参照する識別子・処理一覧（名称・ファイル・タイミング・条件）:\n備考・注意事項（並行更新リスク・タイミング制約・スレッドセーフ等）:\n出典（例: manual\u002F2026-07-04）:\n```\n\n**lesson:**\n```\n工程（例: 方式検討 \u002F コーディング \u002F テスト）:\nタグ（例: #リスク #見落とし #コーディング）:\nタイトル:\n発生状況:\n学んだこと:\n次回への適用:\n出典:\n```\n\n**note:**\n```\nトピック名（ファイル名のベース、ハイフン区切り）:\n概要:\n詳細（自由記述）:\n関連ファイル・識別子（任意）:\n出典:\n```\n\n**glossary:**\n```\n（IS_MULTI の場合）スコープ（project \u002F {repo名} \u002F cross）:\n（IS_MULTI でない場合）スコープ（project \u002F {repo名}）:\n正式表記:\n定義（1〜2文。曖昧語を使わない）:\n別名・揺れ（カンマ区切り。なければ空）:\n使用禁止の表記（カンマ区切り。なければ空）:\n関連モジュール（任意）:\n出典:\n```\n\n> `cross` は `IS_MULTI`（REPOS: が2エントリ以上）の場合のみ選択可能な特別スコープであり、\n> リポジトリ間で共通の用語を表す（`cross` は `REPOS:` の予約名のため、通常の `{repo名}` 選択肢とは\n> 別枠で扱う）。\n>\n> **既存 Step 0「Resolve target repo」との重複について:** Step 0 は `TARGET_TYPE` の確定前に\n> 無条件でリポジトリ選択を要求するため、glossary で `project` または `cross` スコープを意図する\n> 利用者も、Step 0 でいったん無関係なリポジトリを選ぶことになる（Step 0 で選んだリポジトリは、\n> 本 Step 1 のスコープ回答が `project`／`cross` の場合は使用されない）。これは意図的な設計判断で\n> あり、Step 0 を「TARGET_TYPE を先に確定してからリポジトリを解決する」順序に変更する代替案も\n> あるが、その変更は constraint\u002Fflow\u002Fcallgraph\u002Flesson\u002Fnote の既存5種別の対話フローにも影響する\n> リファクタリングになるため、本プランでは Step 0 を変更せず、glossary 1種別に閉じた本 Step 1 の\n> 追加質問で完結させる方を選択した。二重質問の UX コストは、glossary 登録の頻度が高くない\n> CR 非依存の随時実行コマンドであることを踏まえ許容する。\n\n**structure:**\n```\n対象言語のパラダイム（OOP \u002F 手続き型）:\n含まれるモジュール一覧:\nドメイン名（例: auth, device, scheduler）:\n対象データ型・構造体（名称・定義場所）:\nモジュール間の依存関係（参照元 → 参照先）:\n落とし穴・注意点（この構造を参照するときに気をつけること）:\n出典（例: manual\u002F2026-08-08）:\n```\n\n「対象言語のパラダイム」は、昇格先テンプレート `code-knowledge-structures-template.md` が要求する\n「OOP言語: classDiagram \u002F 手続き型（C言語等）: テキスト表または graph LR」という図の記法選択を\n入力時点で確定させる質問（`flow` 種別が「図の種別（sequence \u002F dfd）:」を明示質問するのと同じパターン）。\n「含まれるモジュール一覧」はテンプレートの「含まれるモジュール」欄に対応する。\n\n「落とし穴・注意点」は入力を強く推奨するが、機械的な必須項目としては扱わない\n（`code-knowledge-boundary.md`「宛先ルーティング表」の経路ごとの拘束範囲注記により、手動登録経路\n（本スキル）には昇格条件列を機械適用しない）。空で入力された場合:\n- その旨と、仕様側（`specs\u002Foverview\u002F`）への記載も選択肢であることを案内した上で、続行するかどうかを\n  人に確認する。\n- 「続行する」が選択された場合: Step 2 のプレビューに進む。\n- 「続行しない」が選択された場合: Step 2 の「If denied or cancelled: stop.」と全く同一の挙動\n  （コマンド全体を終了する。Step 0 の対話へループバックはしない）で `structure` の登録処理を終了する。\n\n「落とし穴・注意点」以外の6項目（対象言語のパラダイム・含まれるモジュール一覧・ドメイン名・\n対象データ型\u002F構造体・モジュール間の依存関係・出典）は必須入力とする。空の場合は理由を示して再入力を求める。\n\n---\n\n### Step 1.5（constraint のみ）: 置き場所の決定\n\n`KNOWLEDGE_PLACE` に従い、constraint の置き場所 `MODULE` を決める:\n- 「対象のファイルまたはディレクトリ」が空なら `MODULE` = `_general`。\n- それ以外は、入力を1件の対象として引用符付きのヒアドキュメントで stdin に渡して Run via Bash:\n  ```\n  PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fknowledge_place.py place --repo-root {REPOS_MAP[TARGET_REPO] の値} --workspace-root {WORKSPACE_ROOT} \u003C\u003C'EOF'\n  [{\"id\": \"manual\", \"targets\": [\"{入力された対象のファイルまたはディレクトリ}\"]}]\n  EOF\n  ```\n  - 終了コードが 0 以外なら、stderr を示して停止する（何も書かない）。\n  - 対象の `status` が `placed` なら、返った `module` を `MODULE` にする。`reserved_collision` が true なら、\n    置き場所が予約名と同じ名前のディレクトリである旨を Step 2 のプレビューに添える。\n  - `status` が `placed` 以外なら、その意味（`url`＝URL、`no-path`＝パスではない、`outside-repo`＝リポジトリの外、\n    `not-found`＝リポジトリに無い）を示し、人に「入力し直す／パスなし（`_general`）」を尋ねる。\n    入力し直す場合は、新しい入力でこの Step をやり直す。\n\n---\n\n### Step 2: Preview and confirm\n\nShow a preview of the content to be written and the target file path\n（constraint は Step 1.5 で決めた置き場所 `{KNOW_DIR}\u002Fcode-knowledge\u002F{MODULE}\u002Fconstraints.md` を示す）.\nAsk user to confirm. If denied or cancelled: stop.\n\n---\n\n### Step 3: Write to baseline_docs\u002F\n\nBased on `TARGET_TYPE`:\n\n**constraint:**\n- `MODULE` = Step 1.5 で決めた置き場所\n- Let `TARGET_FILE` \u002F テンプレート = `KNOWLEDGE_ROUTING`「制約・落とし穴」行に従う\n- Ensure directory exists (mkdir -p via Bash).\n- If `TARGET_FILE` exists: read existing CK-NNN entries; assign next available NNN.\n  Upsert: if same 出典 exists → replace entry; else → append new [CK-NNN] entry.\n- Else: create from the template named in `KNOWLEDGE_ROUTING`.\n\n**flow:**\n- Let `FLOW_TYPE` = `sequence` | `dfd`\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fcode-knowledge\u002F_flows\u002F{DOMAIN}-{FLOW_NAME}-{FLOW_TYPE}.md`\n- Ensure directory exists.\n- Create or overwrite using appropriate template:\n  - sequence → `~\u002F.claude\u002Fskills\u002Fxddp-close\u002Ftemplates\u002Fcode-knowledge-flows-sequence-template.md`\n  - dfd → `~\u002F.claude\u002Fskills\u002Fxddp-close\u002Ftemplates\u002Fcode-knowledge-flows-dfd-template.md`\n\n**callgraph:**\n- Let `VAR_NAME` = 対象変数\u002F識別子名（スペース→ハイフン・小文字）\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fcode-knowledge\u002F_flows\u002F{DOMAIN}-{VAR_NAME}-callgraph.md`\n- Ensure directory exists.\n- If `TARGET_FILE` exists: update tables; append row to 変更履歴.\n- Else: create from template `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fcallgraph-template.md`.\n\n**lesson:**\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Flessons-learned.md`\n- Ensure file exists (create with header if not).\n- Read existing LL-NNN; assign next NNN. Append new entry at end.\n\n**note:**\n- Let `TOPIC` = トピック名（スペース→ハイフン・小文字）\n- Let `TARGET_FILE` = `{KNOW_DIR}\u002Fnotes\u002F{TOPIC}.md`\n- Ensure directory exists.\n- If `TARGET_FILE` exists: append new content block with 更新日.\n- Else: create from template `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fnotes-template.md`.\n\n**glossary:**\n\n- スコープが `project` の場合: Let `TARGET_FILE` = `{DOCS}\u002Fglossary.md`\n- スコープが `{repo}` の場合: Let `TARGET_FILE` = `{KNOW_DIR}\u002Fglossary.md`\n- スコープが `cross` の場合（`IS_MULTI` の場合のみ選択可能）:\n  Let `TARGET_FILE` = `{DOCS}\u002Fcross\u002Fknowledge\u002Fglossary.md`\n- ファイルが存在する場合: 「用語一覧」テーブルに行を upsert する\n  （**正式表記**列をキーとし、既存行があれば上書きする）\n- ファイルが存在しない場合: テンプレート\n  `~\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fglossary-template.md` から作成する\n- 「変更履歴」テーブルに1行追記する（CR 非依存の実行のため CR 列は `—` とする）\n\n**structure:**\n- Let `DOMAIN` = 入力されたドメイン名\n- Let `TARGET_FILE` \u002F テンプレート = `KNOWLEDGE_ROUTING`「構造体依存関係」行（per-repo 系統）に従う\n- Ensure directory exists (mkdir -p via Bash).\n- If `TARGET_FILE` exists: Upsert（同一ドメインの図を上書き更新）。\n- Else: create from the template named in `KNOWLEDGE_ROUTING`。\n- テンプレートへの入力項目マッピング（`code-knowledge-structures-template.md` の節に対応）:\n  - 「モジュール間の構造体依存関係」節: 対象言語のパラダイムが OOP の場合は mermaid `classDiagram`、\n    手続き型の場合はテキスト表または `graph LR` で、対象データ型・構造体とモジュール間の依存関係を記入する\n  - 「含まれるモジュール:」欄 ← 入力された「含まれるモジュール一覧」\n  - 「出典:」欄 ← 入力された「出典」（CR 非依存実行のため CR 番号ではなく入力値をそのまま使用）\n  - 「注意事項・制約」節（`KNOWLEDGE_ROUTING`「構造体依存関係」行のセクション列に対応）\n    ← 入力された「落とし穴・注意点」（`_structures\u002F` 存在意義の中核フィールド。Step 1 で空欄のまま\n    続行が選択された場合は、その旨を明記した上で節を空のまま作成する）\n\n**AI_INDEX.md の作り直し（どの種別でも、書いた後に実行する）:** Run via Bash（`TARGET_REPO` だけでなく全 repo を渡す）:\n`PY=$(command -v python3 || command -v python) && \"$PY\" ~\u002F.claude\u002Fskills\u002Fxddp-common\u002Fscripts\u002Fai_index.py build --docs {DOCS} --repos-keys {REPOS_KEYS をカンマ区切り} {IS_MULTI の場合のみ}--is-multi`\n失敗したら Let `AI_INDEX_ERROR` = stderr の1行目（登録は取り消さない）。\n\n---\n\n### Step 4: Report\n\nTell the user:\n\n> **知識の登録が完了しました**\n>\n> | 項目 | 内容 |\n> |---|---|\n> | 種別 | {TARGET_TYPE} |\n> | リポジトリ | {TARGET_REPO} |\n> | 格納先 | `{TARGET_FILE}` |\n>\n> {AI_INDEX_ERROR がある場合: ⚠️ AI_INDEX.md の作り直しに失敗しました（{AI_INDEX_ERROR}）。登録は済んでいます。`ai_index.py build` を再実行してください}\n>\n> **次のステップ:**\n> - 内容を確認してください: `{TARGET_FILE}`\n> - 修正が必要な場合は直接編集するか、再度 `\u002Fxddp-update-knowledge` を実行してください\n\n---\n> **保守メモ:** このファイルを変更した場合は、`README.md`（スキル一覧テーブル）、`CLAUDE.md`\n> （ステップ番号体系テーブル）も合わせて更新すること。\n",{"name":5,"description":7,"argument-hint":40},"[repo名] [constraint|flow|callgraph|lesson|note|glossary|structure]","main","c15454fe190ba8cf0d4fe93871d77bf4e8dffabf","ClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge",0,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings","https:\u002F\u002Fgithub.com\u002Ftsuna44","2026-11-08 08:45:39",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add tsuna44\u002FXddpSettings --skill xddp-update-knowledge",{"tool":54,"command":55},"bunx","bunx skills add tsuna44\u002FXddpSettings --skill xddp-update-knowledge",{"tool":57,"command":58},"pnpm","pnpm dlx skills add tsuna44\u002FXddpSettings --skill xddp-update-knowledge","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002FSKILL.md",true,[62,68,72],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"templates\u002Fcallgraph-template.md","REFERENCE","参考文档",1221,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fcallgraph-template.md",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"templates\u002Fglossary-template.md",1437,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fglossary-template.md",{"path":73,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":74,"sourceHtmlUrl":75},"templates\u002Fnotes-template.md",397,"https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-update-knowledge\u002Ftemplates\u002Fnotes-template.md",[77,88,95,103,110,129],{"skillNo":78,"name":79,"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":80,"categories":81,"keywords":85,"publishedAt":35},"01M6MDVNN0ZX8D5KABK9G0067Z","demo.skill","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.skill\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[86,87],"demo skill","demo",{"skillNo":89,"name":90,"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":91,"categories":92,"keywords":93,"publishedAt":35},"01M6MDVK20HAJYBMXM7VX50A3J","demo.noname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.noname\u002FSKILL.md",[],[94,87],"demo noname",{"skillNo":96,"name":97,"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":98,"categories":99,"keywords":100,"publishedAt":35},"01M6MDVFS20532JT4V7WT779XH","demo.common","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.common\u002FSKILL.md",[],[101,102,87],"demo common","common",{"skillNo":104,"name":105,"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":106,"categories":107,"keywords":108,"publishedAt":35},"01M6MDVCV2JFN66NJTFG1CCJS1","demo.badname","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002Ftools\u002Fharness\u002Ftests\u002Ffixtures\u002Fbadrepo\u002FClaudeCode\u002F.claude\u002Fskills\u002Fdemo.badname\u002FSKILL.md",[],[109,87],"demo badname",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":124,"publishedAt":35},"01M6MDV2Q1Z02WAN4CZ2WVFZ27","xddp-sync-design","コードから DSN を再生成してリビジョンとして記録し、AIレビュー→人承認を実施する。「設計を同期して」「DSN を更新して」などで起動する。","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-sync-design\u002FSKILL.md",[116,119],{"categoryNo":117,"categoryName":118,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[125,126,127,128],"xddp sync design","sync","design","生成",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":35},"01M6MDTX7S802386PM35ZRYK1V","xddp-survey","CR 非依存で母体コードを調査し「現状仕様」を文書化する。調査後に (a) 調査のみ (b) knowledge へ昇格 (c) specs へ昇格 を人が選択する。CR を1本も回していない母体から仕様書を起こす場合に使用する。 「母体を調査して」「コードの仕様を調べて」「baseline を起こして」などで起動する。","https:\u002F\u002Fgithub.com\u002Ftsuna44\u002FXddpSettings\u002Fblob\u002Fmain\u002FClaudeCode\u002F.claude\u002Fskills\u002Fxddp-survey\u002FSKILL.md",[],[136,137,138,139,24,29],"xddp survey","survey","promote","module"]