chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更
Phase 25.1 完了成果: - ✅ LoopForm v2 テスト・ドキュメント・コメント完備 - 4ケース(A/B/C/D)完全テストカバレッジ - 最小再現ケース作成(SSAバグ調査用) - SSOT文書作成(loopform_ssot.md) - 全ソースに [LoopForm] コメントタグ追加 - ✅ Stage-1 CLI デバッグ環境構築 - stage1_cli.hako 実装 - stage1_bridge.rs ブリッジ実装 - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh) - アーキテクチャ改善提案文書 - ✅ 環境変数削減計画策定 - 25変数の完全調査・分類 - 6段階削減ロードマップ(25→5、80%削減) - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG) Phase 26-D からの累積変更: - PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等) - MIRビルダーリファクタリング - 型伝播・最適化パス改善 - その他約300ファイルの累積変更 🎯 技術的成果: - SSAバグ根本原因特定(条件分岐内loop変数変更) - Region+next_iパターン適用完了(UsingCollectorBox等) - LoopFormパターン文書化・テスト化完了 - セルフホスティング基盤強化 Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: ChatGPT <noreply@openai.com> Co-Authored-By: Task Assistant <task@anthropic.com>
This commit is contained in:
@ -26,7 +26,9 @@ fn parse_required_methods(spec: &str) -> HashMap<String, Vec<String>> {
|
||||
let mut map = HashMap::new();
|
||||
for part in spec.split(';') {
|
||||
let p = part.trim();
|
||||
if p.is_empty() { continue; }
|
||||
if p.is_empty() {
|
||||
continue;
|
||||
}
|
||||
if let Some((ty, rest)) = p.split_once(':') {
|
||||
let methods: Vec<String> = rest
|
||||
.split(',')
|
||||
@ -44,15 +46,30 @@ fn parse_required_methods(spec: &str) -> HashMap<String, Vec<String>> {
|
||||
|
||||
fn load_required_methods_from_toml() -> HashMap<String, Vec<String>> {
|
||||
let mut map: HashMap<String, Vec<String>> = HashMap::new();
|
||||
let text = match std::fs::read_to_string("nyash.toml") { Ok(s) => s, Err(_) => return map };
|
||||
let doc: toml::Value = match toml::from_str(&text) { Ok(v) => v, Err(_) => return map };
|
||||
let text = match std::fs::read_to_string("nyash.toml") {
|
||||
Ok(s) => s,
|
||||
Err(_) => return map,
|
||||
};
|
||||
let doc: toml::Value = match toml::from_str(&text) {
|
||||
Ok(v) => v,
|
||||
Err(_) => return map,
|
||||
};
|
||||
|
||||
// Helper: add entry if array-of-strings
|
||||
let mut add_arr = |ty: &str, arr: &toml::Value| {
|
||||
if let Some(a) = arr.as_array() {
|
||||
let mut v: Vec<String> = Vec::new();
|
||||
for e in a { if let Some(s) = e.as_str() { let s = s.trim(); if !s.is_empty() { v.push(s.to_string()); } } }
|
||||
if !v.is_empty() { map.insert(ty.to_string(), v); }
|
||||
for e in a {
|
||||
if let Some(s) = e.as_str() {
|
||||
let s = s.trim();
|
||||
if !s.is_empty() {
|
||||
v.push(s.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
if !v.is_empty() {
|
||||
map.insert(ty.to_string(), v);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -61,8 +78,15 @@ fn load_required_methods_from_toml() -> HashMap<String, Vec<String>> {
|
||||
if let Some(req) = vrfy.get("required_methods") {
|
||||
if let Some(tbl) = req.as_table() {
|
||||
for (k, v) in tbl.iter() {
|
||||
if v.is_array() { add_arr(k, v); continue; }
|
||||
if let Some(t) = v.as_table() { if let Some(m) = t.get("methods") { add_arr(k, m); } }
|
||||
if v.is_array() {
|
||||
add_arr(k, v);
|
||||
continue;
|
||||
}
|
||||
if let Some(t) = v.as_table() {
|
||||
if let Some(m) = t.get("methods") {
|
||||
add_arr(k, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -72,7 +96,11 @@ fn load_required_methods_from_toml() -> HashMap<String, Vec<String>> {
|
||||
if let Some(types) = doc.get("types") {
|
||||
if let Some(tbl) = types.as_table() {
|
||||
for (k, v) in tbl.iter() {
|
||||
if let Some(t) = v.as_table() { if let Some(m) = t.get("required_methods") { add_arr(k, m); } }
|
||||
if let Some(t) = v.as_table() {
|
||||
if let Some(m) = t.get("required_methods") {
|
||||
add_arr(k, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -83,16 +111,22 @@ fn load_required_methods_from_toml() -> HashMap<String, Vec<String>> {
|
||||
pub fn verify_from_env() -> Result<(), String> {
|
||||
let mode = std::env::var("NYASH_PROVIDER_VERIFY").unwrap_or_default();
|
||||
let mode = mode.to_ascii_lowercase();
|
||||
if !(mode == "warn" || mode == "strict") { return Ok(()); }
|
||||
if !(mode == "warn" || mode == "strict") {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Merge: nyash.toml + env override
|
||||
let mut req = load_required_methods_from_toml();
|
||||
let spec = std::env::var("NYASH_VERIFY_REQUIRED_METHODS").unwrap_or_default();
|
||||
if !spec.trim().is_empty() {
|
||||
let env_map = parse_required_methods(&spec);
|
||||
for (k, v) in env_map { req.entry(k).or_default().extend(v); }
|
||||
for (k, v) in env_map {
|
||||
req.entry(k).or_default().extend(v);
|
||||
}
|
||||
}
|
||||
if req.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
if req.is_empty() { return Ok(()); }
|
||||
|
||||
let host = crate::runtime::plugin_loader_unified::get_global_plugin_host();
|
||||
let host = host.read().unwrap();
|
||||
@ -107,11 +141,18 @@ pub fn verify_from_env() -> Result<(), String> {
|
||||
}
|
||||
}
|
||||
|
||||
if failures.is_empty() { return Ok(()); }
|
||||
if failures.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
let msg = format!(
|
||||
"Provider verify failed ({}): missing methods: {}",
|
||||
mode,
|
||||
failures.join(", ")
|
||||
);
|
||||
if mode == "warn" { eprintln!("[provider-verify][warn] {}", msg); Ok(()) } else { Err(msg) }
|
||||
if mode == "warn" {
|
||||
eprintln!("[provider-verify][warn] {}", msg);
|
||||
Ok(())
|
||||
} else {
|
||||
Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user