コンテンツにスキップ

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-map description が 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-maplast_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.pyDrive canonical に直接書き出す設計のため。skills-plugin に同期される必要は無い(claude.ai 側からは Drive→skills-plugin 経路で見えれば良い)。問題ではない


問題2:YAML frontmatter 欠落 → 3 件補完

真の SSOT での欠落確認

skills-plugin(真の SSOT)の 3 件は YAML frontmatter に namedescription のみで、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 と双方向参照」は対等関係=親子ではない

実行手順(カスケード規律準拠)

  1. .bak.2026-05-18 退避(skills-plugin 3 件 + Drive 3 件 = 計 6 件)✅
  2. Edit ツールで skills-plugin 側 3 件を編集 ✅
  3. cp で skills-plugin → Drive 同期 ✅
  4. YAML パース検証(all 3 PASS)✅
  5. kudo-skill-md-format-validatorvalidate_skill.py 実行(all 3 SUMMARY 0件 FAIL)✅
  6. regenerate_ssot_map.py 再実行で SSOT マップ更新(exit 0・57 スキル loaded・HIGH-severity rot 0 件・3 件が正しい親で tree に出現)✅

編集対象ファイル

Edit 前後の差分(全 3 件で同じパターン):

 ---
 name: kudo-XXX
 description: ...
+verb_group: 5
+parent: <value>
 ---

検証で出た [!!] 警告(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.pydescription-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.md line 3 の「48 スキル」を「全スキル」に書き換え(工藤氏選択済み)
  • kudo-persist-settings または kudo-shared-storage-protocol の「config-file-location-map」に 真の SSOT = skills-plugin 物理ストレージを明示
  • validate_skill.pydescription-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.md
  • kudo-mac-health-check/SKILL.md
  • kudo-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(一切触らず)