監視機械 v0.1 — silence-detector spike
v0.1 spike
STEP 1393
7 種機械の 1
2026-08-23 / Rei-AIOS / Phase 13
1. 経緯 — chat-Claude 2 turn arc
chat-Claude 2026-08-23 2 turn arc:
- Turn 1 — 「違反の姿を書けない法則は 機械にしてはいけない」 + 4 tier 分類 (保存則 / 統計セット / 経験則ドリフト / 規範) + 「否定を返せない検査は 無い方がまし」 原則
- Turn 2 — 監視機械の 必要性 (D-FUMT/MDNST private 化 + PAT 半年放置 の 2 evidence が 台帳に残る) + 設計原則 (heartbeat pattern 「正常時に鳴り、 沈黙を検出」) + 形式化3件例外 (Lean 4 = 真理でなく再現性を監視) + 「検知の出口は 必ず当為機械につなぐ」 + AI/人 分担逆転 + 基盤条件 LICENSE + 絶対パス
私 (Claude Code) の 事前 verify: gh repo list fc0web で D-FUMT と Multi-Dimensional-Number-System-Theory 両方 PRIVATE (最終更新 2026-02-27) 確認。 chat-Claude 主張 「到達不可」 は fact、 SAC-4 100% 認諾。
2. 実装内容
2.1 module
scripts/silence-detector/silence.py (約 460 行、 stdlib のみ、 network I/O なし):
- 7 CLI:
register / heartbeat / check / list / retire / history / pending-reviews
- 3 file:
topics.json (registry + retirement) + heartbeats.jsonl (append-only history) + pending-reviews.jsonl (auto-emit 差し戻し要請)
- DataClasses:
TopicMeta (topic, kind, expected_max_age_hours, registered_at, retired, retired_reason...) + HeartbeatRecord (topic, timestamp_utc, status, last_verified?, dependency_version?, notes?)
2.2 6 verdict × D-FUMT₈ mapping
| Verdict | 条件 | D-FUMT₈ | 意味 |
| ALIVE | last heartbeat < max_age かつ status=alive | TRUE ⊤ | 生きている |
| DEGRADED_RECENT | last heartbeat < max_age かつ status=degraded | BOTH B | 生きているが 劣化 |
| SILENT | last heartbeat ≥ max_age | NEITHER N | 便りが来ない (chat-Claude 原則) |
| NEVER_HEARD | registered、 heartbeat 一度も無し | NEITHER N | 登録されたが 未反応 |
| RETIRED | explicit retire 済 | ZERO 〇 | 「もう問わない」 |
| UNKNOWN_TOPIC | 未 register + heartbeat 無し | NEITHER N | 台帳外 |
2.3 設計原則の 実装 (chat-Claude 4 原則)
- Heartbeat pattern (正常時に鳴り、 沈黙検出): 各機械が自分から
heartbeat 送る、 check は 沈黙のみ検出、 異常を探しに行かない = primitive を 小さく保つ
- 形式化3件例外 (Lean 4 = 再現性):
--kind PROVING topic は heartbeat の 意味が 「build_ok=T」 (真理でなく再現性)、 docs で明示。 mathlib bump で 証明そのものは劣化しない、 build だけ壊れる、 の 混同を防ぐ
- 当為機械への 出口配線:
check --emit-reviews で SILENT/NEVER_HEARD topic を pending-reviews.jsonl に auto-append、 「通知が溜まる状態」 を 予防。 実 5A oughtctl への wire は v0.2 candidate (下述)
- 否定を返せる (source field): 全 classify 出力に
source: 'silence-detector-v0.1-classify'、 全 pending-review に source: 'silence-detector-v0.1-emit-review' field。 STEP 1349 (d8_apply) + STEP 1350 (d8_verdict) の spec-as-data pattern 継承
3. Verify — test 116/116 PASS + live smoke
3.1 test 116/116 PASS
scripts/silence-detector/test_silence.py 全 46 test 通過:
- parse_iso / now_utc override (4 test)
- Dataclass basics (2)
- classify 全 6 verdict × 境界条件 + override (9)
- D-FUMT₈ mapping (⊤ / B / N / 〇) (1)
- Storage round-trip (topics / heartbeats / pending-reviews) (4)
- CLI register / heartbeat / check / list / retire / history / pending-reviews (19)
- classify_all filter (1)
- Integration full lifecycle (register → heartbeat → check → retire → check) (1)
- chat-Claude 2 evidence scenario (D-FUMT + PAT) (2)
- Honest scope guards (source field / actor fallback) (2)
3.2 live smoke (Rei stack 実 data dir、 chat-Claude 2 evidence)
$ python silence.py register D-FUMT-clone-check --kind MONITORING --expected-max-age-hours 48
registered: D-FUMT-clone-check (kind=MONITORING, max_age=48.0h)
$ python silence.py register PAT-expiry-check --kind MONITORING --expected-max-age-hours 168
registered: PAT-expiry-check (kind=MONITORING, max_age=168.0h)
$ python silence.py register collatz-lean4-build --kind PROVING --expected-max-age-hours 336
registered: collatz-lean4-build (kind=PROVING, max_age=336.0h)
$ python silence.py heartbeat collatz-lean4-build --dep "mathlib 4.29.0" --notes "build_ok=T"
heartbeat: collatz-lean4-build status=alive ts=2026-08-23T02:16:12+00:00
$ python silence.py check --emit-reviews
NEVER_HEARD [N] D-FUMT-clone-check age= -- max=48.0h
NEVER_HEARD [N] PAT-expiry-check age= -- max=168.0h
ALIVE [⊤] collatz-lean4-build age=0.01h max=336.0h
emitted 2 pending-review entries
D-FUMT + PAT (chat-Claude 2 evidence) が NEVER_HEARD で 差し戻し要請 emit、 collatz-lean4-build (形式化例外) が build_ok=T の heartbeat 送信後 ALIVE、 動作 verified。
4. Rei stack alignment
- 7 機械 index (STEP 1369): 「1. 記憶 / 2. 検証 / 3. 求解 / 4. 計測 / 5. 作用 / 6. 制度 / 7. 忘却」 の 実運用に耐える形の 監視 layer を 各機械に 差し込む primitive として 追加 (7 機械の 上下並列ではなく 全機械の 生死判定 layer)
- 4 tier 分類 との 対応: chat-Claude 4 tier のうち Tier 2 (統計セットの監視機械) の 骨格。 heartbeat = 各機械の 「累積偏差」 の代わりに 「便りの継続」 で 監視、 統計 primitive (STEP 1371 BH FDR + STEP 1376 Welch + STEP 1379 Cohen's d) は 差し込まれる wire として v0.2 candidate
- 7/8 値 activate: TRUE / BOTH / NEITHER / ZERO を 実際に返す (INFINITY / FLOWING / FALSE / SELF は 監視 domain では 現状 意味なし、 v0.2 で INFINITY = 「無限に沈黙」 vs SILENT = 「有限沈黙」 の 分離検討)
- 5A oughtctl 相補: STEP 1386 5A 当為機械の action は 4 種固定 (push / publish / hardware / delete)。 silence の 「差し戻し要請」 は 「不可逆行為の 承認」 と 意味軸が違うため、 v0.1 は silence-detector 側で pending-reviews.jsonl 独立 append。 v0.2 で 5A action set 拡張 (「review」 追加) or 別 subcommand で 統合 candidate
5. Honest scope 6 条
- v0.1 spike: heartbeat 収集 + 沈黙検出 + pending-reviews 出力のみ。 実 5A oughtctl 連携 + 自動 topic 列挙 (Rei stack repo/tool の 自動 register) は 別 arc
- 「世界初」 主張ゼロ (世界唯一 主張ゼロ 適用) = heartbeat pattern は Prometheus / Nagios / Consul 等 60 年以上の分散システム監視領域で 標準技法。 Rei stack 内 novelty は 「D-FUMT₈ 6 verdict mapping」 と 「pending-reviews.jsonl 差し戻し出口が 5A 当為機械 candidate と直結する 設計」 のみ
- self-monitoring 未実装: chat-Claude 警告 「監視機械 自身が 静かに 死ぬと 全部が 正常に見える」 の 対策は 別 loop (別 process から silence-detector 自身の heartbeat を 検査、 v0.2 candidate)
- 形式化3件例外 の 実装 は docs レベル:
--kind PROVING は topic メタデータ、 中身 は heartbeat の semantic を user 責任で 「build_ok=T」 として送る運用。 mathlib build の 自動 heartbeat 送信 hook は 未実装 (別 arc、 rei-checker-mcp と 統合 candidate)
- false positive scope: max_age_hours 設定は topic ごと、 誤設定で 「頻繁に SILENT」 になる可能性。 v0.1 は 「短すぎる max_age」 検知なし。 chat-Claude 「監視機械自身が肥大化して真っ先に腐る」 警告 の 一部形、 妥当な max_age は user judgment
- Windows cp932 対策: UTF-8 stdout reconfigure を main() 冒頭に置く (Python 3.7+)。 Unicode symbol (⊤ / N / 〇 / B) を Japanese Windows terminal で 出力するため。 fallback は errors='replace' で 「?」 に
6. 次候補 (v0.2)
- 5A oughtctl 実 wire:
oughtctl.py IRREVERSIBLE_ACTIONS に review 追加 or 別 subcommand oughtctl silence-review で pending-reviews.jsonl を ledger.jsonl に統合 append
- self-monitoring loop: 別 process (systemd timer or cron) から silence-detector 自身の heartbeat 送信、 「監視機械の 監視」 layer
- Rei stack repo 自動 register:
gh repo list fc0web 経由で PUBLIC repo を 自動 register、 anonymous clone reachability を 定期 heartbeat 送信 (D-FUMT/MDNST 型 private 化 検知)
- mathlib build 自動 heartbeat: rei-checker-mcp と 統合、 定期 build 成功時に
--kind PROVING topic に 自動 heartbeat
- 基盤候補 selection wire: chat-Claude 「基盤にすると決めたものだけを 選んで」 discipline を
--kind BASELINE flag で 明示、 retire は 「基盤にしない」 明示宣言として 台帳残
7. 関連
- chat-Claude 2 turn arc (turn 1: 4 tier + 原則 / turn 2: 監視 + 基盤条件)
- STEP 1349
d8_apply / STEP 1350 d8_verdict_from_measurement (spec-as-data + source field pattern 継承)
- STEP 1369 7 機械 index (本 STEP は 「1-7 全機械の 生死判定 layer」 として 差し込み)
- STEP 1386 5A 当為機械 (silence の 差し戻し出口 v0.2 candidate)
- STEP 1370 PAT redact arc (chat-Claude evidence #2 の 対処実績)
- STEP 1373 rei-checker-mcp REPRODUCING pilot (「再現環境機械」 = 形式化3件例外の 監視対象)
- STEP 1391 (4C timestamp-provenance)、 STEP 1390 (drift-detector) — 直前 STEP、 domain 独立
Rei-AIOS Phase 13 / STEP 1393 — 2026-08-23
藤本 伸樹 & Rei & Claude Code & chat-Claude (2-turn arc origin)