Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup

Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT):

Core changes:
- Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in)
- Implement SSOT resolver bridge (src/using/ssot_bridge.rs)
- Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support
- Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim)

MIR builder improvements:
- Fix using/alias consistency in Hako MIR builder
- Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml
- Normalize LLVM extern calls: nyash.console.* → nyash_console_*

Smoke tests:
- Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh)
- Add phase2220, phase2230, phase2231 test structure
- Add phase2100 S3 backend selector tests
- Improve test_runner.sh with quiet/timeout controls

Documentation:
- Add docs/ENV_VARS.md (Phase 22.1 env vars reference)
- Add docs/development/runtime/C_CORE_ABI.md
- Update de-rust-roadmap.md with Phase 22.x details

Tools:
- Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper)
- Add tools/tlv_roundtrip_smoke.sh placeholder
- Improve ny_mir_builder.sh with better backend selection

Known issues (to be fixed):
- Parser infinite loop in static method parameter parsing
- Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1)
- phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard)

Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
This commit is contained in:
nyash-codex
2025-11-09 15:11:18 +09:00
parent 5d2cd5bad0
commit 981ddd890c
62 changed files with 1981 additions and 103 deletions

View File

@ -20,12 +20,84 @@ Update (today)
- String API: size() を length() のエイリアスとして VM で受理
- Analyzer CLI: --format/--debug/--source-file を順不同で処理
- Analyzer IR: AST 空時の methods をテキスト走査でフォールバック
- HC021/HC031: 実装完了。PHI 調査は一旦収束AST path は既定OFF、`--force-ast` でオン)。
- CLI: `--rules`/`--skip-rules` を追加し、ルール単体/組合せ検証を高速化。`--no-ast` 既定化。
- Runtime: `NYASH_SCRIPT_ARGS_HEX_JSON` を導入HEX経由で改行・特殊文字を安全搬送
- File I/O: FileBox provider 設計SSOT + 薄いラッパ + 選択ポリシーを文書化docs/development/runtime/FILEBOX_PROVIDER.md
- HC021/HC031: 実装完了。PHI 調査は一旦収束AST path は既定OFF、`--force-ast` でオン)。
- CLI: `--rules`/`--skip-rules` を追加し、ルール単体/組合せ検証を高速化。`--no-ast` 既定化。
- Runtime: `NYASH_SCRIPT_ARGS_HEX_JSON` を導入HEX経由で改行・特殊文字を安全搬送
- File I/O: FileBox provider 設計SSOT + 薄いラッパ + 選択ポリシーを文書化docs/development/runtime/FILEBOX_PROVIDER.md
- ENV: `NYASH_FILEBOX_MODE=auto|core-ro|plugin-only` を追加ENV_VARS.md。Analyzer/CI は corero 相当で運用。
Quick update — Green Conditions & Togglesquick
- Green baselinequick
- Builder: Hako registry/internal = ON既定。必要時のみ `=0` でOFF。
- hv1 inline PRIMARY = ON直列も緑。必要時のみ `HAKO_PHASE2100_ENABLE_HV1=0`
- S3 reps: 任意(`NYASH_LLVM_S3=1` かつ LLVM18 環境時。未満は自動SKIP。
- EXEfirst: 任意(`SMOKES_ENABLE_SELFHOST=1`。重いのでデフォルトOFF。
- TLV smoke: 常時nyash-tlv のみを -p でビルド/テスト)。本体未配線でも安全。
Toggles quicklist
- Builder: `HAKO_MIR_BUILDER_INTERNAL=0/1`(既定=1, `HAKO_MIR_BUILDER_REGISTRY=0/1`(既定=1
- hv1: `HAKO_PHASE2100_ENABLE_HV1=0/1`(既定=1
- S3: `NYASH_LLVM_S3=0/1`(既定=auto; LLVM18検出でON
- EXEfirst: `SMOKES_ENABLE_SELFHOST=1`既定OFF
- TLV: `--features tlv-shim` + `HAKO_TLV_SHIM=1`既定OFF/配線は無害な identity
- Using SSOT: `HAKO_USING_SSOT=1`MVP は現行解決ロジックを経由しつつタグ出力)
22.1 progress (today)
- TLV配線最小導線・既定OFF
- 追加: ルート `Cargo.toml``nyash-tlv`optionalと feature `tlv-shim`
- 追加: `src/runtime/plugin_ffi_common.rs``maybe_tlv_roundtrip()` を実装し、`encode_args()` の末尾で呼び出しENV `HAKO_TLV_SHIM=1` かつ feature 有効時のみ動作)
- スモーク: `tools/tlv_roundtrip_smoke.sh` を SKIP→常時 PASS に変更(`-p nyash-tlv` 固定)
- Resolver/Using SSOT薄い導線・トグル
- 追加: `HAKO_USING_SSOT=1` 時に SSOT ブリッジを呼び出しmodules のみを ctx として渡す)。未解決時は既存ロジックにフォールバック
- ctx: `{ modules, using_paths, cwd }`MVPは modules のみ有効)
- トレース: `NYASH_RESOLVE_TRACE=1``[using/ssot]` タグを出力
- スモーク: `tools/smokes/v2/profiles/quick/core/phase2211/using_ssot_parity_canary_vm.sh` を追加ON/OFF で出力同一を検証)
22.1 next (followup tasks)
- SSOT ctx 拡張(段階導入・既定不変)
- [ ] Bridge→Hako 箱で `using_paths`/`cwd` を活用した相対推定のMVPIOはRunner側で制御
- [ ] Runner 側の ctx 渡しを拡張し、パス推定に必要な情報(呼出元ディレクトリ、プロファイル)を追加。
- 受け入れ: パリティcanarymodules命名あり維持 + 代表ケースで `using_paths` 提示時に解決成功既定OFF/トグルONのみ
- TLV shim 観測タグ既定OFF・安全
- [x] `HAKO_TLV_SHIM_TRACE=1` で shim 経由のコールに `[tlv/shim:<Box>.<method>]` を出力(既定は `MapBox.set` のみ)。
- [x] `HAKO_TLV_SHIM_FILTER=MapBox.set` などで対象コールを限定(カンマ区切り可)。
- 受け入れ: canary で `MapBox.set` の単発コール時にタグが現れるfeature有効ENV時、既定OFFではログ増加なし。
22.1 exit (criteria)
- SSOTrelative 推定の仕上げ)
- Unique: `phase2211/ssot_relative_unique_canary_vm.sh` が常時 PASScwd 優先、短時間で終了)。
- Ambiguous+strict: `phase2211/ssot_relative_ambiguous_strict_canary_vm.sh` が PASSstrict=1 時は legacy 委譲)。
- Recursion guard: `HAKO_USING_SSOT_HAKO=1` を含む実行でも無限再帰は発生しない(子プロセスへ SSOT を強制OFFINVOKING=1
- TLV/Extern観測統合
- `HAKO_CALL_TRACE=1` で plugin/extern 双方に `[call:<target>.<method>]` が観測可能。
- `HAKO_CALL_TRACE_FILTER` で method 名/`<target>.<method>` の双方が機能(例: `MapBox.set,env.console.log`)。
- 既定挙動は不変新機能はすべてトグルOFFで無影響
22.2 progress (today) — Core Thinning I
- Docs/plan: docs/private/roadmap/phases/phase-22.2/PLAN.mdT0/T1/T2・ABI契約・受け入れ規準
- C-core crate設計: crates/nyash_c_corefeature c-core=OFF 既定)
- 導線既定OFF: cwrap/c-core タグENV。対象は MapBox.set / ArrayBox.push / ArrayBox.get / ArrayBox.size(len/length)。
- Parity canariesON/OFF 完全一致):
- phase2220/c_core_map_set_parity_canary_vm.sh → PASS
- phase2220/c_core_array_push_parity_canary_vm.sh → PASS
- phase2220/c_core_array_len_length_parity_canary_vm.sh → PASS
- Exit22.2: 既定OFFで挙動不変ON/OFF parityが緑失敗時フォールバックRust経路
Next — Phase 22.3 (Kernel Minimal C Runtime)
- Docs skeleton added: docs/private/roadmap/phases/phase-22.3/PLAN.md
- No behavior change; future toggle: NYASH_KERNEL_C_MIN (reserved).
- Crate present: `crates/nyash_kernel_min_c` (staticlib) with `nyash_console_log` and a few handle stubs.
- Canary: `tools/smokes/v2/profiles/quick/core/phase2230/kernel_min_c_build_canary.sh` → PASSビルドのみ、未リンク
- Note: LLVM extern lowering maps `nyash.console.*``nyash_console_*` for C linkage (dots→underscores).
LLVM line (21.10 prework)
- Added backend selector to tools/ny_mir_builder.sh via `NYASH_LLVM_BACKEND=llvmlite|crate|native` (default llvmlite).
- Added crate path canaries:
- obj (dummy): phase2100/s3_backend_selector_crate_obj_canary_vm.sh → PASS
- exe (dummy): phase2100/s3_backend_selector_crate_exe_canary_vm.sh → PASS
- exe (print): phase2100/s3_backend_selector_crate_exe_print_canary_vm.sh → SKIPllvmlite未導入環境では自動SKIP名称整合は済
- Extern lowering updated: `nyash.console.*` is emitted as `nyash_console_*` to match C symbols (`nyash-kernel-min-c`).
Roadmap links (21.5→21.7)
- 21.5 — Unicode & Provider Polish現行計画: docs/private/roadmap/phases/phase-21.5/PLAN.md
- 21.6 — Hako MIR Builder MVP & Registryoptin: docs/private/roadmap/phases/phase-21.6/PLAN.md
@ -76,6 +148,26 @@ Phase 21.8 — Hako Check: Refactor & QuickFixMVP
- --fix-plan で refactor_plan.json と sed 雛形apply_scriptを出力手動レビュー想定
- 既定挙動は不変。適用は別フェーズwrite-capable providerで検討。
Phase 21.9 — DeRustNonPluginChecklist
- [x] Docs: Roadmap docs/development/strategies/de-rust-roadmap.md原則/ゲート/リバータブル)
- [x] Docs: Gap Analysis docs/development/strategies/de-rust-gap-analysis.mdPhase1/2の具体
- [x] Script: Phase0 archive helper tools/de_rust/archive_rust_llvm_backend.shRESTORE.md 自動生成)
- [x] Phase0: Rust LLVM backend を archive/ へ移動(既定ビルド影響なし・リバータブル)
- [ ] hv1_inline optout トグルHAKO_VERIFY_DISABLE_INLINE=1追加任意
- [ ] TLV C shimFFI雛形往復テスト最小
- [ ] MIR Interpreter の診断化Primary=Hakovm を確認、envで明示切替
- [ ] Resolver/Using SSOT ドキュメントを運用ガイド化Runner/Analyzer 一致)
- [x] LLVM harness: object 出力tmp/nyash_llvm_run.o確認
- [ ] LLVM link: NyRT 静的ライブラリcrates/nyash_kernelビルド → EXE リンクの確認
CI Integrationend of phase
- [ ] Add optional CI job: selfhost EXE-first smoke
- Steps: install LLVM18; prebuild nyash(llvm)/ny-llvmc/nyash_kernel; run `tools/exe_first_smoke.sh` and `tools/exe_first_runner_smoke.sh`.
- Policy: non-blocking initially`continue-on-error` or separate optional workflow; promote later when stable.
- [ ] Fix legacy CI workflow bugold workflow failing
- Audit existing `.github/workflows/*` for broken steps/env; update to use `hakorune` binary and new env toggles.
- Ensure LLVM/S3 gates respect environment (skip when LLVM18 absent).
Remaining (21.4)
1) Hako Parser MVP 実装tokenizer/parser_core/ast_emit/cli【微修整】
2) Analyzer AST 入力の安定化(必要時のみ AST を使用)