🚨 AI協調開発の危機回避事例を論文化(paper-09)
「ん?大丈夫?」の一言がPython特化ハードコーディングを防いだ事例を記録。
Everything is Box哲学 vs 技術的正しさの綱渡りからの生還を分析。
- docs/research/paper-09-ai-collaboration-pitfall/ を新規作成
- incident-analysis.md: Lowerer特殊化危機の詳細分析
- ai-collaboration-lessons.md: AI協調開発の教訓
- intuition-in-engineering.md: エンジニアの直感の価値
- summary.md: 綱渡りからの生還まとめ
- 研究論文の1論文1フォルダ原則に従い整理
- Python統合関連の実装修正とビルド成功確認
🛡️ Generated with Claude Code
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
use std::collections::HashMap;
|
||||
use std::os::raw::c_char;
|
||||
use std::sync::{Mutex, atomic::{AtomicU32, Ordering}};
|
||||
use std::ffi::CStr;
|
||||
|
||||
// ===== Error Codes (BID-1) =====
|
||||
const NYB_SUCCESS: i32 = 0;
|
||||
@ -51,6 +52,26 @@ fn parse_first_string(args: &[u8]) -> Result<String, ()> {
|
||||
Ok(s)
|
||||
}
|
||||
|
||||
fn format_first_any(args: &[u8]) -> Option<String> {
|
||||
if args.len() < 4 { return None; }
|
||||
let mut p = 4usize;
|
||||
if args.len() < p + 4 { return None; }
|
||||
let tag = u16::from_le_bytes([args[p], args[p+1]]); p += 2;
|
||||
let sz = u16::from_le_bytes([args[p], args[p+1]]) as usize; p += 2;
|
||||
if args.len() < p + sz { return None; }
|
||||
let payload = &args[p..p+sz];
|
||||
match tag {
|
||||
1 => Some(if sz>0 && payload[0]!=0 { "true".into() } else { "false".into() }),
|
||||
2 => { if sz!=4 { None } else { let mut b=[0u8;4]; b.copy_from_slice(payload); Some((i32::from_le_bytes(b)).to_string()) } },
|
||||
3 => { if sz!=8 { None } else { let mut b=[0u8;8]; b.copy_from_slice(payload); Some((i64::from_le_bytes(b)).to_string()) } },
|
||||
5 => { if sz!=8 { None } else { let mut b=[0u8;8]; b.copy_from_slice(payload); Some(f64::from_le_bytes(b).to_string()) } },
|
||||
6 => { std::str::from_utf8(payload).ok().map(|s| s.to_string()) },
|
||||
7 => Some(format!("<bytes:{}>", sz)),
|
||||
8 => { if sz==8 { let mut t=[0u8;4]; t.copy_from_slice(&payload[0..4]); let mut i=[0u8;4]; i.copy_from_slice(&payload[4..8]); Some(format!("<handle {}:{}>", u32::from_le_bytes(t), u32::from_le_bytes(i))) } else { None } },
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
// Write TLV birth result: Handle(tag=8,size=8) with (type_id, instance_id)
|
||||
unsafe fn write_tlv_birth(type_id: u32, instance_id: u32, out: *mut u8, out_len: *mut usize) -> i32 {
|
||||
let need = 4 + 4 + 8; // header + entry + payload
|
||||
@ -118,16 +139,14 @@ pub extern "C" fn nyash_plugin_invoke(
|
||||
}
|
||||
METHOD_LOG | METHOD_PRINTLN => {
|
||||
let slice = std::slice::from_raw_parts(args, args_len);
|
||||
match parse_first_string(slice) {
|
||||
Ok(s) => {
|
||||
if method_id == METHOD_LOG { print!("{}", s); } else { println!("{}", s); }
|
||||
return write_tlv_void(result, result_len);
|
||||
}
|
||||
Err(_) => return NYB_E_INVALID_ARGS,
|
||||
}
|
||||
let s = match parse_first_string(slice) {
|
||||
Ok(s) => s,
|
||||
Err(_) => format_first_any(slice).unwrap_or_else(|| "".to_string()),
|
||||
};
|
||||
if method_id == METHOD_LOG { print!("{}", s); } else { println!("{}", s); }
|
||||
return write_tlv_void(result, result_len);
|
||||
}
|
||||
_ => NYB_E_INVALID_METHOD,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user