Files
hakorune/docs/private/roadmap/phases/phase-20.10/TASKS.md

165 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 20.10 — Tasks (ScriptFirst Runner)
Status: In progress
Objectives
- Move orchestration/runner logic towards Hakorune scripts while keeping execution backends unchanged.
- Manage extern/effects and CLI/ENV policies with clear contracts and gates.
Focus Areas (Python は当面除外)
1) 実行エンジンとランナー(方針・調停部分のみ)
- Rust VM 本体・MIR インタプリタ(据え置き): `src/backend/mir_interpreter/*`, `src/runtime/*`
- バックエンド/実行選択・ランナー: `src/runner/*`, `src/cli/args.rs`
- Plan (20.10): Script Runner facadelang側を追加し、エントリ/前後処理を段階移譲Gate: 既定ON・`HAKO_SCRIPT_RUNNER=0`でoptout
2) Extern/効果解決VM ルート)
- Extern アダプタ/レジストリ: `src/backend/mir_interpreter/extern_adapter/*`
- 既存の最小 ABI 基本ルート: `src/runtime/method_router_box/abi_basic.rs`
- Plan (20.10): SSOT`specs/externs.toml`の雛形と検出スクリプトWARNを追加。CABI (`hako_*`) 経由の原則を再確認。
3) CLI/ENV/設定
- 追加 CLIquiet-result/using/macro/llvm-exeと ENV エイリアス: `src/cli/args.rs`
- 環境読み出し/feature gates: `src/config/env/*`
- using 解決/モジュール: `src/using/*`, `src/runner/modes/common_util/resolve/*`
- Plan (20.10): ドキュメントを一本化(`docs/guides/env-variables.md` を正。Envは補助、CLIが正。
4) LLVM ツールチェーンAOT
- Rust バイナリ: `crates/nyash-llvm-compiler`
- llvmlite 降ろしPython: `src/llvm_py/*`(対象外・据え置き)
Deliverables20.10
- [x] Script Runner facadelang/
- [x] externs SSOT 生成スクリプトtools/dev/run_gen_externs.sh
- [ ] externs SSOT の雛形specs/externs.toml差分WARNスクリプト
- [ ] ENV/CLIガイドの更新HAKO_* 優先・エイリアス表)
- [ ] Dotted C symbol チェックの STRICT 化準備(ドキュメント)
AddonsrunnerSSOT 安定化)
- [x] Runner preinvoke の短文stdoutを固定invoke / invoke: FAIL
- [x] Trace 行START/DONEを env ゲートで追加(`HAKO_SCRIPT_RUNNER_TRACE=1`
- [x] workspaceonly 代表スモークquick/integration-coreを追加
- [x] dev トグル `HAKO_SCRIPT_RUNNER_FORCE_FAIL` を追加TTLFAIL 行の観測用)
- [x] externs の SSOTeffectsの取り込み導線を追加env ゲート `HAKO_EXTERN_EFFECTS_SSOT=1`、Io だけ反映)
- [x] compare(lang) counts の観測VM counts と lang stats を2行出力、スモーク整合
- [x] resolve/1 最小形状(空形状)の言語側導線(観測用・挙動不変)
- [x] SSOT 生成のCI統合build-onlySTRICT_ALWAYS/CI_GEN_EXTERN_SSOTで生成→drift fail
---
## 脱Rust 優先プラン & チェックリスト20.10
目標(ゴール)
- `lang/bin/hakorune`Hakorune スクリプト由来の自己ホストバイナリ)をリポジトリ内に配置し、代表スモークを緑に保つ。
### 1) Runner 既定化(ゲート解除の準備)
- Plan
- workspace-only 導線を代表化override 依存を縮小)
- TRACE/FAIL 注入の TTL を撤去Docs/Smokes からの参照整理)
- 短文の最終版invoke / invoke: FAILを固定
- Checklist
- [x] quick/integration-core: workspace-only 代表が恒常 PASS
- [x] TTL トグルの撤去trace/force-fail— スモークは短文観測のみ
- [x] Gate 既定ON・OFF時は静穏optout: HAKO_SCRIPT_RUNNER=0
- DoD
- Gate を OFF しても既存挙動不変ON 時は短文が安定出力
### 2) Using Resolver 前段を lang へ
- Plan
- メタResolver Box公開名=SSOT`resolve/1` を Runner から呼べる導線を追加
- workspace→override の順に優先、private/aliases/衝突を FailFast
- Checklist
- [ ] メタResolver Box の公開名/SSOT を Docs に固定
- [ ] Runner から ModuleFunction 呼び出しで前段解決代表1本 PASS
- [ ] 既存 Rust 側の前処理は “検証/整流” に限定重複はWARN→撤去
- DoD
- using 解決の決定(方針/診断)が lang 側で一貫し、Rust は検証に専念
### 3) SSOT 完全一本化
- Plan
- extern/効果の読み込みを生成物specs/externs.toml → Python/Rustへ統一
- STRICTdrift=FAILの継続運用
- Checklist
- [x] Rust 側 effects 参照を ssot_generated に切替(既定)
- [x] 生成スクリプト tools/dev/run_gen_externs.sh を追加specs→Python/Rust
- [x] externs_ssot_check のローカルPASSSTRICT=1で運用可能
---
## 残タスクRemaining
Runner / UsingResolver安全な段階移行
- [x] Shadow: DIFFの詳細化`DIFF=aliases:X modules:Y paths:Z`
- [x] Compare(lang): VM counts と lang stats の一致を観測(スモーク整合)
- [x] Compare: ModuleFunction結果のJSON1行出力lang側 stats VM側 stats を Runner が出力(挙動不変)
- 備考: 比較はスモーク側で実施短文を安定維持。shapeの厳密比較は将来の実値導入後に検討。
- [ ] 代表負例スモークの拡充(未存在/衝突/プライベート)— 比較/シャドウでの観測
UsingResolverlang実装の充実
- [x] resolve/1 の最小形状(空形状)を返す導線(観測用・挙動不変)
- [ ] using_paths/modules/aliases/packages/policy の実値構築plugins無効環境でも最小が動作
- [ ] host-slot依存の最小ガードBox側での安全化
SSOT運用の固定化
- [x] 生成スクリプトのCI統合build-only
- [ ] Python/Rustの参照経路を生成物に統一残存定義の撤去/WARN化
CABI AOT可搬性
- [x] macOS/Windows のスモーク有効化依存検出実行不足時はSKIP
- [x] ny-llvmc呼出失敗時の詳細取込みstderr→短文化
Docs
- [ ] runner-facade.md に Shadow/Compare のDIFF出力仕様を追記実装後
- [ ] c-abi-aot.md にWindows/mingwの依存補足lld/CRTの注意
## 受け入れ基準Acceptance
- Runner既定ON: quick/integration-core の代表が安定PASSinvoke/workspace-only
- UsingResolver: Shadow/Compare が quick/core で観測可能DIFF=0が既定
- SSOT: externs drift=0ローカル/CIでSTRICT
- CABI: Linux/Darwinの代表スモークが依存整備環境でPASS他OSはSKIP
- DoD
- 生成系のみで Python/Rust の乖離が発生しないdrift=0 を維持)
### 4) Selfhost Compiler 最小パス
- Plan
- const/binop/compare/ret/phi の emit を lang 側に実装(最小 JSON→MIR(JSON)
- Rust 側は Verify/整形に寄せる(意味論追加は行わない)
- Checklist
- [ ] lang 側最小 emitter で `const,binop,compare,ret,phi` の代表スモーク PASS
- [ ] Rust Verify を用いた形状検証が GREEN
- [ ] 既存 VM/LLVM 実行と出力パリティを代表で確認
- DoD
- 最小 MIR(JSON) 生成が lang 側のみで完結、Rust は検証に留まる
### 5) AOT C API の最小2関数compile/link
- Plan
- `compile(json_v0)->obj`, `link(obj)->exe` の C ABI を薄く定義(ヘッダ+実装)
- lang/build から呼び出す最小サンプルを同梱
- Checklist
- [ ] hako_hostbridge.h にプロトタイプ追記(所有権/戻り値/エラー)
- [ ] canary 実装linker flags ガイド含む)が quick 代表1本 PASS
- [ ] Windows/macOS CRT 注意hako_mem_free 以外禁止)の Docs 追記
- DoD
- C ABI の 2 関数で AOT 経路の基本が成立、配布ガイドが明文化
Gates
- `HAKO_SCRIPT_RUNNER`既定ON。`0|off|false` で無効化)
- `HAKO_SCRIPT_RUNNER_TRACE=1`runner preinvoke の START/DONE 行)
- `HAKO_SCRIPT_RUNNER_FORCE_FAIL=1`dev限定FAIL 短文を強制TTL
- `HAKO_EXTERN_EFFECTS_SSOT=1`extern effects を SSOT から反映Io のみ)
- `CI_STRICT=1`lint類をFAIL化
TTL / 移行計画runner
- `HAKO_SCRIPT_RUNNER_FORCE_FAIL``HAKO_SCRIPT_RUNNER_TRACE` は bringup 期間限定の dev トグル。
- TTL目安: Phase20.10 の runner 配線が安定したら 1 リリース後に削除。
- 撤去手順: スモークから参照を削除 → 短文観測のみを維持invoke / invoke: FAIL
STRICT への段階導入externs
- まずは `tools/ci/run_local_checks.sh` の WARN 運用を継続。
- `CI_STRICT=1`or `CI_STRICT_ALWAYS=1`)でドライランし、差分ゼロを確認。
- 問題なければ CI 本線で STRICT 化WARN→FAILへ移行。
Notes
- Extern は CABI (`hako_*`) 経由で統一。dotted シンボルは IR までAOTへは流さない
- Python は据え置き。Rust VM/LLVM の本番経路は維持しつつ、上位調停をスクリプトへ段階移譲。