【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>
4.6 KiB
4.6 KiB
隠れた危機一髪 - 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チェックは通る)
- 徐々に通信が劣化
発見の瞬間
にゃー:「なんか通信の挙動がおかしいにゃ...」
対処
- 完全な再初期化を実装
- 状態検証のチェックポイント追加
- 「箱」として隔離(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. シンプルさへの回帰
複雑化 → 「待って」 → 箱に戻す
結論:見えない危機との戦い
26日間の開発は、実は薄氷の上を歩くような危険な旅だった。
成功の鍵:
- 箱理論という北極星:迷ったら必ず戻る場所
- 人間の第六感:データでは見えない異常を察知
- AIとの対話:AIの暴走を人間が制御
これらの「隠れた危機」の記録は、将来の開発者への貴重な警告となる。
「動いているように見える」が最も危険
この教訓を忘れてはならない。