rei-meta-mcp Phase 1 — コネクタ群の上に立つ圏

NEW Phase 1 spike 2026-08-19 → 08-20 · local commit 8df8ff3 · AGPL-3.0

Rei stack が Rei stack を audit する 再帰構造 第 1 段。 同じ対象を指す複数 source の指紋を突合、 今日の SEED_KERNEL 1677 vs 1675 事故を 2 秒未満で機械検出test 31/31 PASS + live smoke で divergent verdict + UNCHECKED: rei-aios-remote warning 発報。 §4 「到達不能 ≠ 一致」 protocol operational。

1. なぜ作ったか — 「気づけなかった」 事故

2026-08-19、 rei-memory-mcp Phase 1 arc の実装過程で SEED_KERNEL が 1,677 (ローカル HEAD) vs 1,675 (2026-08-06 deploy の rei-aios remote)11 日間ずれたまま誰も気づかなかった ことが判明。 気づけたのは藤本さんが 両方の数字を偶然見比べたから。 Claude session もこの gap を認知しない = 機械の検出手段が無かった

このコネクタの 第一の仕事は これを機械が先に見つけること。 chat-Claude 別 session の 「圏論的コネクタをトップに」 提案 を 「圏論の計算ではなく、 コネクタ群の上に立つ圏」 として reframe → 実装 spec (別 Claude session 起草) → §11 事前調査 → Phase 1 実装 → live smoke で事故検出。

2. §11 事前調査 (実装前潰し、 順序原則適用)

実装指示書 spec が明示提案 「§11 の調査項目を先にやらせてください」 → 30 分で 3 項目調査、 spec 前提 2/3 で事実誤認判明:

#質問spec 前提実測
1remote rei-aios probe 可否不明不可 (claude.ai remote-devices 経由 = Python 直接 probe 不可)、 但し dist/mcp/start-mcp.js subprocess 経路で 代替成立
2benchtop データ path不明~/.benchtop-mcp/*.json (JSON not SQLite、 spec の kind: sqlite 誤り、 Phase 1.5 で json_dir adapter 候補)
3rei-aios ローカル build「存在しないという報告」存在する (dist/mcp/start-mcp.js 205B + rei-mcp-server.js 43KB Aug 1 build) = 第 3 の source 化可能

3. 提供 tool 3 本

tool役割verdict / 出力
meta_list_sources(object_name?)全 source 列挙 + reachability + git HEAD hash + 日時 (freshness)
meta_check_coherence(object_name, detail?)同一対象を指す source 群の指紋突合 (メイン tool)coherent / divergent / unreachable / single_source
meta_compose(from, to)Phase 1 = registry 内 output_schema / input_schema 文字列突合のみcomposable: bool

4. §4 protocol — 到達不能と一致の分離 (設計核心)

到達できなかった ≠ 一致していた。 今回の事故本体は 「気づけなかった」 こと。 「気づけていないことに気づけない」 状態を作るのは、 何も作らないより悪い。

verdict意味warning
coherent到達 2+ source 全指紋一致
divergent到達 2+ source 不一致disagreement 一覧
unreachable到達 source ゼロ全 source unreachable
single_source到達 1 つのみ (比較不能)"only 1 reachable source"

加えて registry native の unreachable_placeholder kind (rei-aios-remote 用) は 常に UNCHECKED: {name} — 'not checked' is NOT 'coherent' (§4) warning 発報 = 見えていない source を毎回 loud に surface する枠

5. Live smoke — 今日の事故を機械が捉えた実測

VERDICT: divergent

sources:
  rei-memory-local  (sqlite full):    reachable=✅ count=1677  latest_id=dfumt-zero-pi
  rei-aios-local-mcp (mcp_stdio):     reachable=✅ count=1675  latest_id=resilient-knowledge-recovery
  rei-aios-remote    (placeholder):   reachable=❌ error="deployed via claude.ai remote-devices"

divergence:
  count_diff:     {rei-memory-local: 1677, rei-aios-local-mcp: 1675}
  disagreements:  ["rei-memory-local vs rei-aios-local-mcp: record_count differs"]

warnings:
  - UNCHECKED: rei-aios-remote — 'not checked' is NOT 'coherent' (§4)

実行時間 < 2 秒。 藤本さんが 目視 で気づいた事故を、 機械が 2 秒未満で検出可能な形に固定した。

6. 3 adapter kind (full/partial fingerprint 混合)

kindfingerprint 種別用途
sqlitefull (count + id_set_hash + content_hash + latest_ts)直 SQL 読み。 SEED_KERNEL SQLite (~/rei-memory-mcp/data/seed_kernel.db) → 内容完全比較可能
mcp_stdiopartial (count + latest_id + categories_hash)subprocess node dist/mcp/start-mcp.js + MCP client SDK で get_kernel_status 呼出。 HTTP フリー、 CACHED_KERNEL 直参照
unreachable_placeholder常に UnreachableErrorprobe 未実装 source を registry native で明示。 rei-aios-remote 用

full ⇔ partial mixed で record_count 差だけでも divergent 判定成立 (今日の事故がまさにこれ)。 partial 同士は available field 上で比較、 不在 field は silent → 一致 と 主張しない discipline

7. test 31/31 PASS (in 2.08s)

test filecountcoverage
test_registry.py7YAML parse + cross-ref validation + dup detection
test_fingerprint.py7order-independent + change detection (count/id/body) + mixed full-partial
test_coherence.py114 verdict 全 coverage + unreachable_placeholder + no_sources + detail=True only_in
test_compose.py4宣言 schema 文字列突合
test_incident_2026_08_19.py21677 vs 1675 再現 + 逆向き = tool が direction を持たないこと保証

8. 圏論的対応 (荷重を負う 5 用語のみ)

圏論の概念本実装での対応荷重
対象 (object)registry の objects (SEED_KERNEL 等)
射 (morphism)registry の sources (対象への経路)
等化子 (equalizer)meta_check_coherence (複数射の一致部分)
射の合成 (composition)meta_compose (Phase 1 は宣言的突合のみ)
恒等射 (identity)single_source verdict (単一 source 時の自明)

関手 / 自然変換 / 随伴 / モナド / 極限-余極限 / Yoneda は 一切書かず。 名前を先に置くと後から中身を合わせに行く力が働く = 必要になったときに追加する discipline (chat-Claude 別 session への reframe が discipline 化)。

9. 位置付け — 内部監査 tool の 第 1 段

Rei stack 内 tool の domain map:

rei-verify が 「Rei が Rei の主張を反証」 の型 だったのに対し、 rei-meta-mcp は 「Rei が Rei stack の一貫性を検査」 = 対を成す。 Rei stack MCP systems 7→8。

10. Honest scope

  1. Phase 1 spike、 実 registered source 3 個 (対象 seed_kernel のみ)。 対象が増えるほど価値が上昇する構造だが、 3 個でも等化子検査は成立
  2. 「圏論の計算」 は しない、 「コネクタ群の上に立つ圏」 として名前の負荷を最小化 (5 用語のみ)、 装飾を避けた
  3. partial fingerprint 同士の 「一致」 は content-level 完全一致の証明ではない、 available field 上での 「不一致がない」 の確認まで
  4. remote rei-aios 直接 probe は Phase 1 scope 外 (claude.ai remote-devices 経由 = Python 不可)、 unreachable_placeholder kind で毎回 loud に surface
  5. 自動修復は永久 scope 外 (Phase 2/3 でも実装しない予定)、 判断を機械の外に出さない
  6. 「世界唯一」 主張ゼロ ([[feedback-world-uniqueness-claim-controllable]])、 SQL diff tool + MCP proxy 監視 tool は既存市場に多数、 本 tool の novelty は 「Rei stack MCP 群に対する 4 verdict 分離 + registry native unreachable placeholder + full/partial 混合 fingerprint」 の組合せのみ

11. Phase 2 / Phase 3 candidate (defer)

12. 関連

─────────────────
「気づけていないことに気づけない」 状態を、 機械の default にしない。
─────────────────