KUDO-Vault Stage 1-A2 完了報告¶
結論¶
| 問題 | 結果 |
|---|---|
| 問題4 SSOT自動再生成の停止疑い | 修復不要(仮説誤り。script・LaunchAgent とも正常稼働中) |
| 問題3 description数字drift | 報告のみ。drift の真の scope は 1 箇所(更新方針は工藤氏選択「全スキル」を記録) |
| 問題1 Drive sync 欠落 | 修復完了(手動 rsync)+ 再発防止 GUI 手順書を作成 |
| 問題2 YAML frontmatter 欠落 | 修復完了(3 件全件 PASS) |
- 既存 SKILL.md 本文の意味内容は一切変更していない(frontmatter 補完のみ)
- 全変更ファイルに
.bak.2026-05-18退避済み(6 件=真SSOT・Drive 両方) - SSOT auto-regen 実行(exit 0、HIGH-severity rot 0 件)
- 副次効果:
kudo-skill-tree-ssot-mapdescription が 54 → 57 に自動更新(Problem 1 修復で 3 件が Drive にも見えるようになった結果)
問題4:SSOT自動再生成の停止疑い → 修復不要¶
診断結果(Stage 1-A の仮説は実機事実と矛盾)¶
| 検査項目 | 結果 |
|---|---|
~/.claude/scripts/regenerate_ssot_map.py 存在 |
✅ あり(26939B、mtime 2026-05-12) |
関連 LaunchAgent com.kudo.regenerate-ssot-map 登録 |
✅ launchctl list で確認 |
plist 配置 ~/Library/LaunchAgents/ |
✅ あり(mtime 2026-05-08) |
| 直近の自動実行 | ✅ 2026-05-17 03:00 — exit 0(clean) |
生成物 ~/.claude/skill-ssot-report.md mtime |
✅ 2026-05-17 05:22 |
kudo-skill-tree-ssot-map の last_generated |
✅ "2026-05-17T05:22:13" — 実機と整合 |
実行履歴(~/.claude/skill-ssot-cron.log):
2026-05-08T17:02:36+0900 regenerate_ssot_map exit=1
2026-05-08T20:38:34+0900 regenerate_ssot_map exit=1
2026-05-10T03:00:06+0900 regenerate_ssot_map exit=1
2026-05-17T03:00:05+0900 regenerate_ssot_map exit=0
すべて exit 0/1 = execution success(exit 1 は「HIGH-severity rot 検出(実行は成功)」、exit 2 = 「実行エラー」)。実行エラーは一度もない。
結論¶
Stage 1-A 完了報告の「regenerate cron が止まっているか source-of-truth path が間違っている可能性」は仮説誤り。何もしない。次回の日曜 03:00 にも自動再生成される。
提案(オプション・実装は工藤氏判断)¶
validate_design_tokens.py または kudo-skill-md-format-validator に「総数表記の実態一致チェック」を追加すれば、今後 description のハードコード数字 drift を機械検出できる。本 HANDOFF では提案まで。
問題3:description数字drift → 報告のみ・更新方針を記録¶
数字の実態 vs 表記の精査結果¶
| 場所 | 値 | 種別 | 状態 |
|---|---|---|---|
kudo-skill-tree-ssot-map description(自動生成) |
54 → 57(本日更新) | script 出力 | ✅ 正確 |
kudo-skill-cross-reference-resolver description line 3 「48 スキルのSSOTマップ」 |
48 | 手動維持 | ❌ drift(present-tense 主張) |
| 同 line 33 anchor heading「§11 48スキル段階的移行プロトコル」 | 48 | 歴史的セクション名 | 触らない |
| 同 line 292 section title | 48 | 同上 | 触らない |
| 同 line 318「全48スキルのanchors辞書」 | 48 | テンプレート例 | 触らない |
| 同 line 459「48スキル全スキャン」 | 48 | 歴史的記述 | 触らない |
kudo-persist-settings line 481, 1062「約 50 スキル」 |
50 | 歴史的記述(2026-05-07) | 触らない |
kudo-cowork-code-handoff-protocol line 79, 869, 1241「48 スキル」 |
48 | 歴史的記述(2026-05-05 棚卸し案件) | 触らない |
kudo-personal-settings-changelog line 207「50 スキル」 |
50 | 歴史的記述 | 触らない |
真の present-tense drift は 1 箇所のみ:
- kudo-skill-cross-reference-resolver/SKILL.md line 3「48 スキルのSSOTマップを自動生成」
工藤氏選択(記録のみ・本 Stage では未実行)¶
「全スキル(数値を抜く)」を選択。drift の再発を防げる抽象表現。Stage 1-C で kudo-skill-cross-reference-resolver を改訂する際にこの方針で書き換える。
重要な発見:Stage 1-A の「実態 47」も再考要¶
Stage 1-A 完了報告は「実態 47」と書いたが、これは kudo-* prefix の union(Drive 44 + SNAP 3)。regenerate_ssot_map.py はすべての SKILL.md(kudo- + 非 kudo の docx/pdf/pptx/xlsx/etc.)を scan するため、scan 数は 54*(Stage 1-A2 修復後は 57)。
「47 スキル」「54 スキル」「57 スキル」のいずれも文脈次第で正しい。Stage 1-C で書き換える場合「全スキル」表現にすれば文脈非依存になる。
問題1:Drive sync 欠落 → 真の原因は macOS Full Disk Access 不足¶
真の SSOT を特定¶
~/.claude/skills.git-mirror/auto-snapshot.sh を読解した結果、真の SSOT は skills-plugin 物理ストレージであることが判明:
SRC = ~/Library/Application Support/Claude/local-agent-mode-sessions/skills-plugin/
3d48e787-cadf-495d-ad7f-bc26535863ce/29545076-9f99-4406-b410-8c4409db721c/skills
↓ rsync -a --delete(毎日 03:30 LaunchAgent)
DST1 = ~/.claude/skills.git-mirror/snapshots/{date}/ (local mirror)
DST2 = ~/Library/CloudStorage/.../working/claude/kudo-skill-sync/skills/ (Drive mirror)
DST1(local snapshot)は成功し続けている。DST2(Drive)が失敗していた。
真の原因¶
~/.claude/skills.git-mirror/snapshot.log に動かぬ証拠:
━━━ Cloud mirror to GoogleDrive ━━━
rsync(54732): error: /Users/kudotakuma/Library/CloudStorage/.../kudo-skill-sync/skills/: open: Operation not permitted
rsync(54730): error: unexpected end of file
Operation not permitted = macOS TCC(Privacy)保護による拒否。launchd 起動の bash プロセスは 「フルディスクアクセス」が未付与で、Google Drive の CloudStorage/ 配下に書き込めない。Terminal フォアグラウンドからは書ける(Stage 0/1-A で実証)。
当座の修復(Code 実施)¶
3 スキルを skills-plugin → Drive に手動 rsync。Terminal フォアグラウンド経由なので FDA 制限を回避:
# 結果(dry-run → 実行)
kudo-ai-error-watchlist: 40895 bytes mirrored
kudo-mac-health-check: 9250 bytes mirrored
kudo-shared-storage-protocol: 18317 bytes mirrored
Drive canonical kudo-* count: 44 → 47 ✅
恒久的修復(工藤氏 GUI 操作)¶
full-disk-access-setup-2026-05-18.md を作成(~/working/_claude_workspace_global/reports/):
- 手順 A(推奨):
auto-snapshot.sh本体だけを FDA に追加(副作用最小) - 手順 B:
/bin/bashを追加(副作用大、A 失敗時の予備) - 手順 C:
launchctl kickstartで許可ダイアログを発生させて承認 - 設定後の検証手順、トラブルシュート(TCC キャッシュ・Finder 隠しフォルダ・LaunchAgent 再登録)込み
「kudo-skill-tree-ssot-map」が Drive のみに存在する件¶
Drive にあって skills-plugin に無い唯一の skill kudo-skill-tree-ssot-map は、regenerate_ssot_map.py が Drive canonical に直接書き出す設計のため。skills-plugin に同期される必要は無い(claude.ai 側からは Drive→skills-plugin 経路で見えれば良い)。問題ではない。
問題2:YAML frontmatter 欠落 → 3 件補完¶
真の SSOT での欠落確認¶
skills-plugin(真の SSOT)の 3 件は YAML frontmatter に name と description のみで、verb_group / parent / anchors が欠落していた。
補完内容(工藤氏承認後に書込)¶
| Skill | verb_group | parent | 工藤氏判断の根拠 |
|---|---|---|---|
kudo-ai-error-watchlist |
5 | kudo-persist-settings | description に「動詞群5所属。kudo-persist-settings の補完実装子」と明記 |
kudo-mac-health-check |
5 | kudo-persist-settings | description に「動詞群5所属」明記。工藤氏判断で kudo-ai-error-watchlist と同じ親に揃える |
kudo-shared-storage-protocol |
5 | null | description に動詞群明記なし(推定)。本文の「§16-3 と双方向参照」は対等関係=親子ではない |
実行手順(カスケード規律準拠)¶
.bak.2026-05-18退避(skills-plugin 3 件 + Drive 3 件 = 計 6 件)✅- Edit ツールで skills-plugin 側 3 件を編集 ✅
- cp で skills-plugin → Drive 同期 ✅
- YAML パース検証(all 3 PASS)✅
kudo-skill-md-format-validatorのvalidate_skill.py実行(all 3 SUMMARY 0件 FAIL)✅regenerate_ssot_map.py再実行で SSOT マップ更新(exit 0・57 スキル loaded・HIGH-severity rot 0 件・3 件が正しい親で tree に出現)✅
編集対象ファイル¶
Edit 前後の差分(全 3 件で同じパターン):
検証で出た [!!] 警告(FAIL ではない・本編集と無関係)¶
kudo-ai-error-watchlist:[!!] path-references-exist— SKILL.md 本文がscripts/validate_skill.pyを参照しているがそれが当該スキル配下に無い。pre-existing。kudo-shared-storage-protocol:[!!] description-verb-group-mention— description 本文に「動詞群N」の文字列が無い。pre-existing。verb_group: 5は frontmatter で明示済みなので運用上問題なし。
両警告は本編集が起こしたものではなく、SKILL.md 本文の独立した観察事項。Stage 1-C 改訂時に併せて手当てしてよい。
検証チェックリスト¶
- 問題4:診断結果として「修復不要」を報告(仮説誤り)
- 問題3:drift scope と工藤氏選択(「全スキル」)を記録、本 Stage では未実行
- 問題1:3 件を canonical/mirror で特定、真の原因(FDA)を特定、手動 rsync で当座救済、GUI 手順書を作成
- 問題2:3 件の
verb_group/parentを補完、validator PASS、SSOT auto-regen でツリーに正しく反映 - 全変更ファイルに
.bak.2026-05-18退避済み(合計 6 件) - 1 問題ずつ完結し、各問題完了時に工藤氏へ報告(findings → 承認 → 実行)
- カスケード:層を跨ぐ書き換え(skills-plugin → Drive → SSOT map)で
kudo-ecosystem-cascade-protocolの腐敗防止規律準拠 - スキル本文の意味内容は変更していない(frontmatter 補完のみ)
- Git:
~/KUDO-Vaultには Stage 1-A2 の変更は及ばず、commit 不要
新たに発見した問題(記録のみ・Stage 1-B 以降へ申し送り)¶
1. 真の SSOT は skills-plugin 物理ストレージ¶
kudo-persist-settings#config-file-location-map および kudo-shared-storage-protocol には「skills-plugin が真の SSOT で、Drive は launchd 経由の mirror」という階層が明示的には記述されていない可能性がある(要 Stage 1-C 改訂時に確認)。設計者(工藤氏)の頭の中にはあっても、SKILL.md には書かれていない記述抜けが疑われる。
2. kudo-skill-cross-reference-resolver の数字drift と heading drift の混同¶
§11 のセクション名「48スキル段階的移行プロトコル」のように、過去事象を冠した heading 名が将来の数字drift 元になる構造。これを避けるには、heading 内に数字を入れず「§11 段階的移行プロトコル(48スキル時の実証)」のような注釈形式が望ましい。Stage 1-C で改訂時に検討。
3. validate_skill.py の description-verb-group-mention チェック¶
frontmatter verb_group: が明示されていても、description 本文に「動詞群N」文字列が無いと WARN になる仕様。FAIL ではないので阻害はしないが、Stage 1-C で kudo-skill-md-format-validator の仕様を「frontmatter にあれば本文必須なし」に変える選択肢もある。
4. snapshots ディレクトリの数(11 日分)¶
~/.claude/skills.git-mirror/snapshots/ 配下に 2026-05-06 から 2026-05-18 まで 11 日分の snapshot が蓄積。これらは git 管理されており増え続ける。Stage 1-D あたりで古い snapshot の rotation policy(30 日以前は削除等)を導入する選択肢。
工藤さんへの申し送り¶
1. 最優先:Full Disk Access 設定(GUI 操作)¶
~/working/_claude_workspace_global/reports/full-disk-access-setup-2026-05-18.md を参照。手順 A から試行を推奨。設定後、以下で検証:
launchctl kickstart gui/$(id -u)/com.kudo.skills-snapshot
tail -30 ~/.claude/skills.git-mirror/snapshot.log
Cloud mirror ... → /Users/kudotakuma/Library/CloudStorage/... が出ていれば成功。
これが完了するまで、新しく ~/Library/Application Support/.../skills-plugin/.../skills/ 配下に skill を追加しても Drive には自動同期されない(Code が手動 rsync するか、launchd の cron 待ち)。
2. Stage 1-C の対象に追加すべき項目¶
kudo-skill-cross-reference-resolver/SKILL.mdline 3 の「48 スキル」を「全スキル」に書き換え(工藤氏選択済み)kudo-persist-settingsまたはkudo-shared-storage-protocolの「config-file-location-map」に 真の SSOT = skills-plugin 物理ストレージを明示validate_skill.pyのdescription-verb-group-mention仕様見直し- snapshots/ の rotation policy 検討(Stage 1-D)
3. Stage 1-B 着手前提条件¶
- 本 Stage 1-A2 の完了 ✅
- FDA 設定(任意・Stage 1-B 自体には不要だが、エコシステム健全性のため早期推奨)
- Stage 1-A 完了報告の「要相談 2 件」(kudo-personal-settings-changelog/kudo-skill-extraction)の R/M 確定
ファイル一覧¶
新規作成¶
~/working/_claude_workspace_global/reports/stage1a2-completion-2026-05-18.md(本ファイル)~/working/_claude_workspace_global/reports/full-disk-access-setup-2026-05-18.md(GUI 手順書)
変更(frontmatter 補完)— 6 件¶
- skills-plugin 3 件:
kudo-ai-error-watchlist/SKILL.mdkudo-mac-health-check/SKILL.mdkudo-shared-storage-protocol/SKILL.md- Drive canonical 3 件(同名・skills-plugin と一致)
新規作成(rsync で Drive へコピー)— 3 件¶
- Drive canonical:
kudo-ai-error-watchlist/SKILL.md(Drive 上は新規。skills-plugin の同期分)kudo-mac-health-check/SKILL.md(同上)kudo-shared-storage-protocol/SKILL.md(同上)
バックアップ — 6 件¶
*.bak.2026-05-18を skills-plugin 3 件 + Drive 3 件 = 6 件作成
自動再生成¶
~/.claude/skill-ssot-report.md(2026-05-18 20:52:35 更新・57 skills loaded)- skills-plugin
kudo-skill-tree-ssot-map/SKILL.md(auto-generated) - Drive canonical
kudo-skill-tree-ssot-map/SKILL.md(同上) ~/.claude/skills/kudo-skill-tree-ssot-map/SKILL.md(同上・runtime mirror)
変更なし(非破壊保証)¶
~/KUDO-Vault/配下一切(Stage 1-A2 は Vault に touchしていない)- 既存 SKILL.md の 本文 一切(frontmatter 4 行追加・本文無変更)
~/.claude/scripts/regenerate_ssot_map.py(修復不要)~/Library/LaunchAgents/com.kudo.regenerate-ssot-map.plist(修復不要)~/Library/LaunchAgents/com.kudo.skills-snapshot.plist(FDA 設定は工藤氏 GUI 操作対象)~/.claude/CLAUDE.md(global)~/working/_claude_workspace_global/master-lists/(Stage 1-A 出力は履歴として残す)- WorkFlowy(一切触らず)