Files
hakorune/CURRENT_TASK.md

74 lines
5.0 KiB
Markdown
Raw Normal View History

# Current Task — Phase Freeze (Macro Complete)
Updated: 20250919
## Status
マクロ基盤は完成・既定ONで安定AST JSON v0、PyVMサンドボックス、strict/timeout、dump/golden、JSONL trace、プロファイル。ここで機能を一旦凍結し、自己ホスト/実アプリ開発に注力して磨き込むフェーズに入る。
## Delivered (Macro Platform)
- Builtin macros (Rust): derive(Equals/ToString) minimal, publiconly + hygiene.
- User macros (Nyash/PyVM): Proxy → child process (NYASH_VM_USE_PY=1, plugins disabled, timeout). Strict=1 by default (fail on error/timeout; strict=0 → identity fallback).
- Dump/Trace: `--dump-expanded-ast-json`, `NYASH_MACRO_TRACE_JSONL=…`.
- Runner routes:
- Child mode (PoC): `--macro-expand-child <file>` (stdin JSON → stdout JSON).
- PyVM runner (recommended): dynamic runner includes macro and calls `MacroBoxSpec.expand(json)` once per pass.
- Templates & Tests:
- Templates: echo_macro (identity), upper_string_macro ("UPPER:" prefix → uppercase suffix).
- Array/Map examples: array_prepend_zero_macro (prepend 0 to any Array), map_insert_tag_macro (insert {"__macro":"on"} into any Map).
- Goldens (user macros): identity, upper_string, array_prepend_zero, array_empty, array_nested, array_mixed, map_insert_tag, map_multi, map_esc。
- Negative smokes: user macro timeout (strict fail), invalid JSON strict fail, invalid JSON nonstrict → identity fallback。
- Capabilities (実効化): マクロNyashのAST静的走査で IO/NET をゲートstrict=fail / 非厳格は未登録=identity
- MacroCtx (MVP): gensym/report/getEnv の最小スキャフォールドを提供。
- Selfhost 前展開PyVM限定: `NYASH_USE_NY_COMPILER=1` + `NYASH_MACRO_SELFHOST_PRE_EXPAND=1|auto` → AST前展開→MIR→PyVM 実行。
- CI: mingate に macrogolden ジョブと selfhostpreexpandsmoke を追加。
- Docs: usermacros.md / astjsonv0.md / capabilities.md (io/net/env).
## Focus — Freeze & Polish
1) 実アプリの作成と運用(マクロ前展開/PyVM/LLVMラインの動作確認
2) バグ修正・ドキュメント整備・スモーク/ゴールデン/CI強化仕様不変
3) 自己ホスト前展開の観測強化(ログ/スモーク)と安定運用
4) ランタイムcapabilitiesio/net/envのPyVM側実効化は必要になった時点で最小修正
## Next Milestones
- DONE: Selfhost 前展開 既定化auto
- 変更多: `NYASH_MACRO_SELFHOST_PRE_EXPAND` 未設定時に、マクロ有効かつ `NYASH_VM_USE_PY=1` で自動ON安全策付き
- 追加: `--macro-preexpand-auto` フラグ。
- DONE: 環境変数の整理CLI中心の導線
- 追加: `--macro-top-level-allow`, `--macro-profile {dev|ci-fast|strict}`(非破壊の簡易マッピング)。
- DONE: Toplevel allow 既定値を OFF に変更 + AST検出へ統一ファイル名ヒューリスティック撤廃
- DONE: MacroCtx 契約 PoC — ランナーが `expand(json, ctx)` を優先、失敗時に `expand(json)` へフォールバック。
Next (short)
- Selfhost 前展開: array/map ケースの追加スモークauto 動作の追認)。
- `macro-profile` の最終化(ドキュメント化 + CIプロファイルの導入検討
- MacroCtx: ctx JSON スキーマの明記limits/nonce/gensym 提示)と `ctx.gensym` の採用例を追加。
Action Items (next 48h)
- [x] Add selfhost pre-expand smokes for array/map
- Scripts: `tools/test/smoke/macro/selfhost_preexpand_array_auto.sh`, `selfhost_preexpand_map_auto.sh`
- Accept: logs contain "selfhost macro pre-expand: engaging" and program exits 0
- [x] Finalize macro profiles
- Docs: `docs/guides/macro-profiles.md`dev/lite/ci → envの対応
- CLI: `--profile {lite|dev|ci|strict}` 実装済
- [x] MacroCtx example
- Example macro: `apps/macros/examples/gensym_example_macro.nyash`
- [x] ENV縮約の警告
- 旧ENV使用時の非推奨ログを追加TOPLEVEL_ALLOW/BOX_CHILD_RUNNER/BOX_NY_*
## Phase16 Outlook
- MacroCtx (gensym/report/getEnv) and capabilities mapped to `nyash.toml`.
- Attributestyle (@derive/@lint) macros consolidated via MacroBox.
- span/source map for better diagnostics.
## Final Goal (Replacement Strategy)
- Ultimately replace both the Rust front (beyond minimal bootstrap/backends) and PyVM with Nyash implementations—fully selfhosted pipeline.
- Steps: front macros → resolver helpers → MIR lowering helpers → Nyash VM → phase out PyVM → reduce Rust to boot/backends only.
## Quick Reference
- Profiles: `--profile {lite|dev|ci|strict}`dev相当が既定運用
- Register macros: `NYASH_MACRO_PATHS=apps/macros/examples/echo_macro.nyash`
- Strict/Timeout: `NYASH_MACRO_STRICT=1`(既定), `NYASH_NY_COMPILER_TIMEOUT_MS=2000`
- Dump expanded AST: `nyash --dump-expanded-ast-json <file.nyash>`
- Selfhost 前展開: 既定autoPyVM限定
- Docs: `docs/guides/user-macros.md`, `docs/guides/macro-profiles.md`, `docs/reference/ir/ast-json-v0.md`, `docs/reference/macro/capabilities.md`