# Wiki Harvest

> 研究 repo セッションから LLM wiki (Obsidian Vault wiki/concept/) を read-only で走査し、その repo の主担当 concept ページから「repo の次アクションを変えうる候補」だけを抽出して、一次出典付き・landing slot マップ付きのランク付き候補台帳 (ledger) を repo の .notes/ に生成する。Use when the user invokes /wiki-harvest, asks「wiki から repo に還元して」「wiki の有益分を AKC/AAP/CA/authorship に持ってきて」, or when closing the daily-research→wiki→repo loop. wiki への書き込みは行わない（それは vault セッションの /ingest）。chat 上の自由質問は wiki-query。

- Skill: `shimo4228/wiki-harvest` (Agent Skill)
- Install (CLI): `npx skillmds@latest add shimo4228/wiki-harvest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/shimo4228/wiki-harvest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: shimo4228 (https://skillmd.com/u/shimo4228)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/shimo4228/wiki-harvest

---


# wiki-harvest — LLM wiki から研究 repo への還元

研究 repo セッションで実行し、LLM wiki（Obsidian Vault）の合成知識から **その repo の次アクションを変えうる候補だけ**を抽出して、一次出典付きのランク付き候補台帳（ledger）を repo 内に生成する。

各研究 repo の `CLAUDE.md`「Research Wiki Consultation」節に *passive prose* で書かれている還元マップ（4カテゴリ）を、再現可能な能動手続きに形式化したもの。wiki の合成知識を diff → ランク付き候補 → repo 内 ledger に落とす。daily-research → wiki（合成層）→ repo（昇格）という一方向ループの最終辺を1コマンドで回す。

> 兄弟スキル: `wiki-query` = chat 上の自由 Q&A（良回答は `wiki/concept/` へ書き戻す read-write）。`wiki-harvest` = repo 向け定型抽出 → 台帳で、**wiki には書き込まない**。置き換えではない。

## Vault パス（固定）

```
VAULT="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/Obsidian Vault"
```

- 概念ページ: `$VAULT/wiki/concept/<概念名>.md`
- インデックス: `$VAULT/wiki/index.md`
- 構造グラフ: `$VAULT/wiki/graph.jsonld`（symlink → `~/MyAI_Lab/daily-research/graph.jsonld`）
- 原資料: `$VAULT/daily-research/`

> この skill は shimo4228 の個人運用（固定 vault + 自分の研究 repo 群）に紐づく。repo→concept マッピングは skill にハードコードせず、各 repo の CLAUDE.md から読む（下記 Step 1）。

## 制約

- **wiki は read-only**。この skill から vault 内のいかなるファイルにも書き込まない。wiki の更新（ingest / index / log）は vault セッションの `/ingest` の領域。一方向ループ（source → wiki → repo）を保全する。
- **書き込みは repo 内の ledger のみ**。`.notes/wiki-harvest/ledger.md`（working/non-citable・gitignore 対象）だけを生成・更新する。
- **durable/citable な成果物（`docs/adr/` / `graph.jsonld` / `glossary.md` / `manifesto.md`）には書かない**。それらへの昇格は人間承認の別ステップ（reversibility gate + 既存ルール「promotion は repo author が判断」）。
- **prototype 系候補（`response-type: prototype`）のコード・計器も自動で実装しない**。この skill は候補の抽出と triage までで、計器/spike の実行は人間承認の別ステップ。harvest がやるのは「何を測るべきか」を ledger に書くところまで。
- iCloud dataless プレースホルダに注意: 読んだ concept ページ本文が空なら未ダウンロードの可能性。その旨を報告する。

## 手順

### Step 1 — repo と対象 concept の特定

1. cwd / git remote から現在の研究 repo を判定（`agent-knowledge-cycle` / `agent-attribution-practice` / `contemplative-agent` / `authorship-strategy` 等）。
2. その repo の `CLAUDE.md` 内「Research Wiki Consultation」節を Read し、`主担当ページ` + `隣接` に挙がっている concept 名を取得する。**マッピングはここ（repo 側）が正本**。skill にハードコードしない。
3. 節が無い repo は fallback（節を持つ repo のほうが少ない — 実測 2026-08-23 では
   agent-attribution-practice と authorship-strategy のみ。repo 名の列挙はすぐ腐るので
   `grep 'Research Wiki Consultation' <repo>/CLAUDE.md` で毎回確かめる）: `$VAULT/wiki/graph.jsonld` の `track` 値（akc / aap / contemplative / authorship）と repo 名から対象 concept を推定し、**「consultation 節が欠落している」ことを報告**する（後で節を backfill すべき signal）。

### Step 2 — wiki 走査（read-only）

`$VAULT/wiki/index.md` で対象 concept ページの所在を確認 → 各ページを Read し、以下の4カテゴリを抽出する（CLAUDE.md consultation 節の還元マップを正本化）:

| # | 抽出元（concept ページの節） | 候補の性質 | 次段 |
|---|---|---|---|
| ① | `## オープンクエスチョン` の「ADR 候補」マーク | 決定を要する論点 | → Step 3.5 triage |
| ② | `## 矛盾・論争` | 既存 ADR/claim との突合（stale-doc / conflict check） | → Step 3.5 triage |
| ③ | `## 主要な主張` の外部出典（arXiv/DOI） | 引用辺の追加（機械的） | → `graph.jsonld` / citation |
| ④ | `## 関連概念` リンク | repo graph に無い隣接（機械的） | → `graph.jsonld` |
| ⑤ | `## 主要な主張` の実装・計測に落ちる知見 | prototype 候補（gate/test/計器） | → Step 3.5 triage |

> **⑤ を落とすと ADR 節偏重になる**: ①② は「決定を要する論点」＝ ADR/framing になりやすい節、③④ は機械的な引用/辺。だが
> `## 主要な主張` には **build/measure に落ちる signal**（外部研究が実証した機構を repo で計器化・prototype 化できる類）が
> 埋まっている。ここを抽出対象に入れないと skill は構造的に「ADR 化しやすい節」だけを見て prototype 候補を素通りする。

抽出・列挙は機械的に網羅する（enumerate）。採否は次の Step で絞る（decide）。

> **「ADR 候補」マークを ADR 直行と読まない**: concept ページの「ADR 候補」は *論点の提起*
> であって *ADR 化の指示ではない*。ADR は「すでに下した決定の記録」であり、決定する装置ではない。
> ①② は必ず Step 3.5 の response-type triage を通す。ここを飛ばすと「研究知見 → ADR の種」が直結し、
> 実装判断を飛ばして成果物を先に作る（調べた労力を回収したくて成果物に走るサンクコスト罠）。

### Step 3 — signal フィルタ（品質ゲート）

output discipline を適用する（正本はこの節。[ADR-0026](../../docs/adr/0026-retire-signal-first-residency.md)）。**各候補は repo の具体的アクションを名指しできなければ捨てる**:

- どの ADR 番号を更新 / 新設するか
- どの graph 辺 / glossary 語 / manifesto 項を足す・解消するか

スコアや grade（「6/10」等）は付けない。**「action を変える具体的観察」**を記す（例:「ADR-0013 の前提を覆す」「graph に [[X]]↔[[Y]] の辺が無い」）。アクションを名指せない一般論・既知事項は ledger に載せない。

### Step 3.5 — response-type triage（実装判断を ADR より前に置く）

signal フィルタを生き残った ①② の各候補に **response-type** を振る。**ADR はデフォルトの着地点ではない** —
「下した決定の記録」なので、実装を伴う候補では ADR がゴールになってはいけない（まず問題実在性の確認 →
prototype → build 判断、ADR はその後に従属記録）。framing/stance だけの候補のみ ADR が終端。

| response-type | 判定基準 | 第一アクション | ADR の位置 |
|---|---|---|---|
| `framing` | 実装コードを伴わない stance/定義の決定（公理の運用定義、主体性の姿勢、接地系統の選択）。「文書化された姿勢そのもの」が成果物 | author が stance を確定 | **終端**（成果物そのもの） |
| `prototype` | CA の**振る舞いを変える**設計変更（gate / test / verification の追加）。問題が repo 固有に実在するか未測定 | 計器/spike で実在性を先に測る（read-only 計器が第一手） → build 判断 | 判断が出た後に従属記録 |
| `defer` | 論点は真だが repo で今 live でない（解のある問題の先取り／repo が採らない外部系との対立） | 再訪トリガーを記録して保留（廃止でなく＝再生成時の重複排除） | 書かない |
| `citation` | ③（機械的） | 一次照合 → citation-sync | 対象外 |
| `graph-edge` | ④（機械的） | jsonld-knowledge-graph | 対象外 |

判定の 4 問（`architect` agent の build-or-not 判定「複雑性 × 価値 × 使用頻度」を harvest に適用）:

0. **surface-existence check（先に通す dismiss ゲート）** — この候補の元になった外部研究が前提とする surface
   （行動時 retrieval 経路・特定の gate・特定の層）を、repo は**実コードで**持つか？ **wiki concept ページの要約でなく
   repo のコードで照合する**（wiki は repo 内部についても drift する — 実例: 「knowledge 昇格は人間承認」という
   wiki 記述が実際は自動だった）。前提 surface が無ければ、response-type を振らず **dismiss**（外部 framing の空 import。
   実例: memory-pollution 研究は「経験を*行動時に*注入する」agent を前提とするが、対象 repo が pattern を行動時に
   注入していなければ「pollution が行動を害するか」は測定不能 → dismiss）。
   **`prototype` が共有リソース（store / pool / パイプライン段）を読む・測る場合は、設計前にそのリソースの
   *消費者を全部*コードで列挙する**（一部の消費者しか数えないと計器が嘘の分布を出す。実例: pattern pool の消費者を
   distill-identity / amend だけ数えて **insight のクラスタリング消費を漏らし**、「未消費 = dead weight」の誤った
   finding と無意味なクロス集計を生んで実装後に revert した — `grep` で `get_live_patterns` / 対象 store の全 reader を
   洗ってから軸を決める）。
1. **これはコードを変えるか、姿勢を書くだけか** — 姿勢だけなら `framing`（ADR 終端で正しい）。
2. **その問題は repo 固有に実在するか、外部研究が言うだけか** — 未測定なら `prototype`（計器で先に測る、
   ADR/実装はその後）。repo が採らない設計との対立・低頻度で顕在化しない問題なら `defer`。
3. **「せっかく wiki を調べたから」で ADR 化しようとしていないか** — サンクコストは判断材料にしない。
   今ゼロから始めるとして、この決定を今優先するか？ No なら `defer`。

triage しない（＝ ①② を全部 ADR 候補として起こす）と、`defer`/`prototype` 相当の候補が **偽の ADR タスク**
として量産される。ledger の要約でこの triage 結果を必ず示す（type 別内訳）。

### Step 4 — 一次出典への遡行（citation discipline）

カテゴリ③（外部出典）の候補は、concept ページの `## 言及ソース` → `$VAULT/daily-research/YYYY-MM-DD_*.md` → 一次文献（arXiv ID / DOI）まで辿り、**一次 ID を候補に記録**する。

既存ルール厳守: 公開成果物には wiki ページや vault パスを引用しない。一次出典まで遡って引く（wiki は二次合成であり drift しうる）。wiki concept ページ・daily-research ノートは **provenance（追跡経路）としてのみ**候補に併記する。

### Step 5 — ledger 生成（two-tier 規律）

`.notes/wiki-harvest/ledger.md` を生成 or 追記する。

1. **gitignore 確保**: repo root の `.gitignore` に `.notes/` が無ければ1行追記する（`.gitignore` が無ければ作成）。これで working/non-citable な private ledger を git 追跡から物理的に外す（候補台帳は採否前の作業用であり citable でない）。
2. **冪等性**: 各候補に `status`（new / pending / promoted / dismissed）を持たせる。dedup キー = `concept ページ名 + 節 + claim の安定キー`。再実行時、既 `promoted`/`dismissed` は再浮上させない。`pending` は内容が変化した時のみ更新（重複追記しない）。
3. **response-type 併記（必須）**: 各候補に Step 3.5 の `response-type`（framing / prototype / defer / citation / graph-edge）を持たせ、`アクション` 行はその type の第一アクションを書く（`framing` 以外は ADR を第一アクションにしない）。`defer` は再訪トリガーを併記。
4. ranking: signal の強さ（repo アクションへの影響度）で `high` / `med` / `low`。
5. **task 台帳との関係**: この ledger は**候補台帳**であってタスク台帳ではない（rule `common/task-tracking.md` の単一台帳の対象外 — 採否判断前の候補はタスクでない）。候補が `promoted` になり、昇格作業がそのセッション内で完結しない場合は、repo の task 台帳に 1 行立てて引き継ぐ。

完了後、生成した候補の要約（件数・**response-type 別内訳**・high rank の見出し）を chat に返す。**ADR/graph への昇格も prototype の着手も提案に留め、自動で書かない・自動で実装しない**。承認されたら `framing` は `adr-writer`、`prototype` は計器/spike の実行（read-only 計器が第一手）、③④ は `citation-sync`（`~/MyAI_Lab/paper-lab` 常駐） / `jsonld-knowledge-graph` に人間が手動で引き継ぐ。

### Step 6 — 採用ゲート（load-bearing 前の一次照合 / fact-check）

候補の signal は wiki concept ページ・daily-research 経由の **digest 由来（一次未照合）**である。候補を `promoted` にして
**その主張が load-bear する瞬間**（= prototype コードがその論文の機構を前提に組まれる／ADR がその知見に依拠する／
citation を durable artifact に deposit する）**の前に、元の一次文献に対して主張を fact-check する**。抽出段（Step 4）は
一次 ID を*見つける*だけ。この Step 6 はその一次が digest の言う通りの内容かを*確認*する — 別工程。

- **機構・手法の主張**（「論文 X はこういう仕組み」）→ **`fact-checker` agent**（`~/MyAI_Lab/zenn-content` 常駐）に一次（arXiv/DOI）照合を依頼。
- **数値・実証・access-blocked な一次** → **`cited-source-mirror-verification` skill**（③ citation は従来どおりこれ。`~/MyAI_Lab/paper-lab` 常駐）。
- **一次が到達不能**なら claim は `UNVERIFIABLE` のまま。採用するなら durable artifact に「**未照合の前提**」と明記するか、`defer`。

**なぜ（この Step が防ぐ具体的失敗）**: digest は論文の手法を reframe しうる。prototype を「論文 X は Surprise×Utility
ゲートを使う」という digest 記述の上に組んだのに、その前提を一次で確認せず、後から食い違いが露見する—という順序ミスを防ぐ。
**fact-check は load-bearing 採用の *前*に置く。後追いにしない。** surface-existence check（Step 3.5 #0、repo コードで照合）が
「repo がその surface を持つか」を見るのと対に、Step 6 は「一次がその主張を支持するか」を見る。

各候補に `一次照合: needed | done(<verdict>) | unverifiable` を持たせ、digest 依存の主張が load-bear する候補は
`一次照合 = done` になるまで `promoted` にしない（または未照合前提を明記して採用）。

## Ledger フォーマット

```markdown
<!-- working ledger / NOT a citable artifact / gitignored (.notes/)。
     /wiki-harvest が生成・更新。昇格 (ADR/graph 書き込み) は人間承認の別ステップ。 -->
# wiki-harvest ledger: <repo-name>

## [YYYY-MM-DD] harvest | 対象 concept: [[<concept-A>]], [[<concept-B>]]

### 候補A (rank: high, response-type: framing, status: new) → docs/adr/（終端）
- カテゴリ: ① OQ「ADR 候補」
- 抽出元: [[<concept>]] §オープンクエスチョン
- signal: <実装コード無しの stance/定義の決定。例「主体性の姿勢を ADR に明記」>
- 一次出典: arXiv:25xx.xxxxx（[[daily-research/YYYY-MM-DD_...]] 経由）
- アクション: author が stance を確定 → adr-writer（人間承認待ち）

### 候補B (rank: med, response-type: prototype, status: new) → 計器/spike → ADR は判断後
- カテゴリ: ① OQ「ADR 候補」
- signal: <CA の振る舞いを変える設計変更。問題実在性が未測定。例「distill 汚染が CA で起きるか未測定」>
- アクション: prototype 先行 — read-only 計器で実在性を 1 サイクル測る → 実在すれば設計 + ADR（人間承認待ち）

### 候補C (rank: low, response-type: defer, status: new) → 保留（再訪トリガー付き）
- カテゴリ: ② 矛盾・論争
- signal: <論点は真だが repo で今 live でない理由>
- 再訪トリガー: <この条件が満たされたら再訪>
- アクション: defer（廃止でなく保留＝再生成時の重複排除）

### 候補D (rank: med, response-type: citation, status: pending) → graph.jsonld / .zenodo.json
- カテゴリ: ③ 外部出典 / ④ 関連概念辺
- アクション: 一次照合 → citation-sync（機械的・人間承認待ち）
```

## 還元先と昇格の引き継ぎ先（response-type 別 早見表）

**ADR は「決定を下した後の記録」**。①② は Step 3.5 の triage を経て response-type が決まり、着地点が分かれる。
ADR に直行するのは `framing`（実装を伴わない stance/定義の決定）だけ。

| response-type | 第一アクション | 昇格/実行に使うツール（人間承認後・手動） |
|---|---|---|
| `framing` | author が stance 確定 → **ADR 終端** | `adr-writer` agent / `/adr-writer` skill（+ 公理なら `contemplative-axioms.md` 脚注） |
| `prototype` | read-only 計器/spike で実在性を測る → build 判断 | `read-only-instruments` / `replayable-audit-logs` / `chaos-tdd-fault-injection` 系。実在確定後に ADR は従属記録 |
| `defer` | 再訪トリガーを記録して保留 | （ツールなし。ledger に残すだけ） |
| ③ `citation` | 一次照合 → 下層から同期 | `citation-sync` skill |
| ④ `graph-edge` | 辺/ノード追加 | `jsonld-knowledge-graph` skill |

