Files
hakorune/docs/research/ai-dual-mode-development/hidden-crisis-moments.md
Moe Charm 4e1b595796 AI協調開発研究ドキュメントの完成と Phase 10.9-β 進捗
【AI協調開発研究】
- AI二重化モデルの学術論文draft完成(workshop_paper_draft.md)
- 「隠れた危機」分析とbirthの原則哲学化
- TyEnv「唯一の真実」協調会話を保存・研究資料に統合
- papers管理構造の整備(wip/under-review/published分離)

【Phase 10.9-β HostCall進捗】
- JitConfigBox: relax_numeric フラグ追加(i64→f64コアーション制御)
- HostcallRegistryBox: 署名検証・白黒リスト・コアーション対応
- JitHostcallRegistryBox: Nyash側レジストリ操作API
- Lower統合: env直読 → jit::config::current() 参照に統一
- 数値緩和設定: NYASH_JIT_HOSTCALL_RELAX_NUMERIC/Config.set_flag

【検証サンプル拡充】
- math.sin/cos/abs/min/max 関数スタイル(examples/jit_math_function_style_*.nyash)
- 境界ケース: 署名不一致・コアーション許可・mutating拒否サンプル
- E2E実証: String.length→allow, Array.push→fallback, math関数の署名一致観測

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-28 12:09:09 +09:00

4.6 KiB
Raw Blame History

隠れた危機一髪 - 26日間で本当に危なかった瞬間

概要

表面的には順調に見えた26日間の開発。しかし実際には、何度も致命的な破綻の淵に立っていた。これらの危機を回避できたのは、「箱理論への執着」と「人間の違和感センサー」のおかげである。

危機1: プラグインボックスの罠

状況

ChatGPT5実装AIが提案した設計

// 危険な設計案
static PLUGIN_INSTANCES: Mutex<HashMap<String, Arc<PluginBox>>> = ...;

// インスタンスを参照で共有
fn get_plugin(name: &str) -> Arc<PluginBox> {
    PLUGIN_INSTANCES.lock().get(name).clone()
}

何が危険だったか

  • 箱理論の根本違反:他の箱はbirthで生まれるのに、プラグインだけ特別扱い
  • 状態管理の複雑化:グローバルな共有状態が生まれる
  • デバッグ困難:問題が起きても原因特定が困難

にゃーの介入

にゃー「他の箱と同じようにbirthでインスタンスをうむ」

解決策

// 正しい設計
box FileBox from PluginBox {
    birth(path) {
        // 外部ライブラリの初期化は1回だけstatic変数で管理
        PluginSystem.initOnce()
        
        // でもインスタンスは普通に生成
        me.handle = createNewHandle()
    }
}

学んだ教訓

  • AIも箱理論を見失うことがある
  • 効率性の誘惑に負けてはいけない
  • 統一性>効率性

危機2: P2Pライブラリの静かな破壊

状況

  • C++ nyameshライブラリコンテキスト圧縮で内部状態が破損
  • JavaScript nyamesh同様に破損
  • 表面上は動作継続(最悪のパターン)

何が危険だったか

// C++ nyameshの内部
class P2PContext {
    std::vector<NodeInfo> nodes;  // これが破損
    MessageQueue queue;           // でもここは動く
};
  • データ構造の一部だけ破損
  • エラーが出ないNULLチェックは通る
  • 徐々に通信が劣化

発見の瞬間

にゃー:「なんか通信の挙動がおかしいにゃ...」

対処

  1. 完全な再初期化を実装
  2. 状態検証のチェックポイント追加
  3. 「箱」として隔離P2PBox内に封じ込め

危機3: 型システムの静かな崩壊

状況

  • FloatがI64として扱われる
  • でも「動いている」ように見える
  • 計算結果が微妙にずれる

危険性

// 見た目は正常
local x = 3.14
local y = 2.0
local z = x + y  // 5になるはずが...

// 内部では
// 3.14 → 3 (I64)
// 2.0 → 2 (I64)
// z = 5 (正しく見える!)

発見

テストでsin(1.5707963267948966)0を返したとき

危機4: Arcの感染爆発

状況

  • 最初は「安全のため」StringBoxにMutex
  • 次第にすべてのBoxに感染
  • パーサーが個別処理地獄に

臨界点

// 16種類すべてがこの形に...
struct StringBox {
    base: Arc<Mutex<BoxBase>>,
    value: Arc<Mutex<String>>,  // たった1つの文字列に
}

にゃーの決断

にゃー「これはやばいにゃ。NyashValueに統一するにゃ」

共通パターン:静かな破壊

最も危険なのは**「表面上動いている」**状態:

  1. 部分的破損

    • 一部は正常動作
    • 徐々に劣化
    • 原因特定が困難
  2. 型の暗黙変換

    • エラーが出ない
    • 結果が「それっぽい」
    • 後で大問題に
  3. 複雑性の感染

    • 「安全のため」から始まる
    • 徐々に全体に広がる
    • 気づいたときには手遅れ

危機回避の共通要因

1. 箱理論への執着

「これも箱にすれば...」
「箱の規約を守れば...」
「問題を箱に封じ込めれば...」

2. 違和感の言語化

「なんか変だにゃ」
「これ続けたらやばいにゃ」
「表面は動いてるけど...」

3. シンプルさへの回帰

複雑化 → 「待って」 → 箱に戻す

結論:見えない危機との戦い

26日間の開発は、実は薄氷の上を歩くような危険な旅だった。

成功の鍵:

  • 箱理論という北極星:迷ったら必ず戻る場所
  • 人間の第六感:データでは見えない異常を察知
  • AIとの対話AIの暴走を人間が制御

これらの「隠れた危機」の記録は、将来の開発者への貴重な警告となる。

「動いているように見える」が最も危険

この教訓を忘れてはならない。