docs(phase150): Selfhost Stage-3 Depth-1 ベースライン強化(指示書作成)

- 目標: 3本 → 5-7本の代表ケースで depth-1 安定化
- Task 1: パイプライン図を 1 ファイルに統合
- Task 2: 代表ケース拡張・テスト(文字列、JSON、FileBox、using)
- Task 3: スモークスクリプト整備(selfhost_phase150_depth1_smoke.sh)
- Task 4: 見つかったバグを Phase 151+ に切り出し
- Task 5: CURRENT_TASK へのロードマップ反映

次フェーズ: Phase 151+ selfhost 特有バグ修正

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-04 12:27:44 +09:00
parent c222cb825a
commit d3b0e83db1

View File

@ -0,0 +1,273 @@
# Phase 150: Selfhost Stage-3 Depth-1 ベースライン強化
## 🎯 ゴール
**Rust → Ny コンパイラ(Stage-3構文) → JSON v0 → Rust VM/LLVM** の selfhost 1周目depth-1を、代表 3 本だけでなく、より広いパターンで安定して動くラインとして確定する。
目的:
- Stage-3 構文の selfhost コンパイラで確実に 1 周目を回すベースラインを確立
- 将来の変更時に簡単に「足場チェック」できるスモーク体制構築
- selfhost 特有のバグを小フェーズに分離・可視化
## 📋 スコープ(やること・やらないこと)
### ✅ やること
- selfhost パイプラインの現状図を 1 ファイルに統合
- 代表ケース3本→ 5-7本に拡張
- 文字列処理ケース
- JSON 処理ケース
- FileBox 軽量ケース
- using 多めの CLI ケース
- selfhost depth-1 スモークスクリプト作成(`selfhost_phase150_depth1_smoke.sh`
- 見つかったバグを Phase 151+ に切り出し
- CURRENT_TASK にロードマップを反映
### ❌ やらないこと
- JoinIR/MIR 生成の意味論・実装Rust側
- .hako JoinIR/MIR ビルダーの実装Phase 160+ で実施)
- ny-llvmc への移行Phase 140+ に先送り)
---
## 🏗️ 5 つのタスク
### Task 1: Selfhost パイプラインの現状図を 1 枚にまとめる
**ファイル**: `docs/development/current/main/selfhost_stage3_expected_flow.md`(更新)
**やること**:
1. **Rust バイナリ → JSON v0 → VM/LLVM のフロー図**:
```
target/release/hakorune (Rust)
↓ [Stage-B: 関数スキャン + scaffold]
stage1_cli.hako (JSON v0 scaffold)
↓ [Stage-1: CLI/using 解決]
stage1_output.hako (Stage-3 構文)
↓ [Stage-3: 実際のコンパイル本体]
Program(JSON v0)
↓ [dev verify]
VM/LLVM 実行
```
2. **各ステージの責務を短く追記**:
- Stage-B: 関数スキャン、Program scaffold、JSON v0 初期生成
- Stage-1: CLI/using 解決、引数処理
- Stage-3: 実際のコンパイル本体IR 生成)
- dev_verify: JSON v0 形式検証、実行準備
3. **更新対象の参照ファイル**:
- phase120_baseline_results.md
- phase124_json_v0_ir_bridge.md
- selfhost_stage3_expected_flow.md
**成果物**:
- 更新版 `selfhost_stage3_expected_flow.md`(図 + ステージ責務)
---
### Task 2: Selfhost 代表ケースを 3 → 5〜7 本に拡張
**対象ファイル**: `apps/tests/` の候補ケース
**現在の 3 本**:
- `peek_expr_block.hako` - ブロック式・peek 基本
- `loop_min_while.hako` - ループ基本
- `esc_dirname_smoke.hako` - 文字列処理dirname
**追加候補2-4本を選択**:
1. **文字列長めケース**(候補: `string_*` ファイルから 1-2本
- 条件: 文字列操作が複数行、中程度の複雑度
- 例: `string_ops_basic.hako` など
2. **JSON 処理ケース**(候補: `json_*` ファイルから 1本
- 条件: JSON 読み込み/操作、軽量
- 例: `json_parse_simple.hako` など
3. **FileBox ケース**(候補: `file_*` から 1本、NoFs 外す)
- 条件: FileBox/FileHandleBox 軽量使用、Default プロファイル
- 例: `file_read_simple.hako` など
4. **using 多めケース**(候補: 新規作成または既存軽量ファイル)
- 条件: using nyashstd の使用が目立つ、ミニ CLI
- 例: `using_cli_simple.hako` など
**作業**:
1. 代表候補を `tools/selfhost_candidates.txt` にリスト化
2. 各ケースについて selfhost 実行テスト:
```bash
NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 NYASH_JOINIR_STRICT=1 \
./target/release/hakorune <candidate>.hako
```
3. 成功/失敗・エラー傾向を記録
**成果物**:
- `docs/development/current/main/phase150_selfhost_stage3_depth1_baseline.md`(新規)
- 表形式で候補一覧、実行結果Rust VM / LLVM
- known issue あればメモ欄
---
### Task 3: Selfhost 用スモークスクリプトを整備
**ファイル**: `tools/smokes/v2/profiles/integration/selfhost_phase150_depth1_smoke.sh`(新規)
**目的**: Task 2 で選んだ 5-7本を 1 コマンドで実行、足場チェック
**実装**:
```bash
#!/bin/bash
# Selfhost Phase 150 Depth-1 Smoke Test
# Purpose: Verify 5-7 representative cases for selfhost Stage-3 pipeline
PASS=0
FAIL=0
RESULTS=()
# Test candidates (from Task 2)
CANDIDATES=(
"apps/tests/peek_expr_block.hako"
"apps/tests/loop_min_while.hako"
"apps/tests/esc_dirname_smoke.hako"
"apps/tests/<string_case>.hako"
"apps/tests/<json_case>.hako"
"apps/tests/<file_case>.hako"
# ... more candidates
)
for candidate in "${CANDIDATES[@]}"; do
echo "Testing: $candidate"
if NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 NYASH_JOINIR_STRICT=1 \
./target/release/hakorune "$candidate" > /tmp/selfhost_test.log 2>&1; then
echo " ✅ PASS"
((PASS++))
RESULTS+=("✅ $candidate")
else
echo " ❌ FAIL"
((FAIL++))
RESULTS+=("❌ $candidate")
fi
done
echo ""
echo "=== Selfhost Phase 150 Depth-1 Results ==="
for result in "${RESULTS[@]}"; do
echo "$result"
done
echo ""
echo "Summary: $PASS passed, $FAIL failed"
```
**成果物**:
- スクリプト + logging_policy への一言「selfhost depth-1 スモークはここ」)
---
### Task 4: 見つかった Selfhost 専用バグを小フェーズに切り出す
**目的**: Task 2/3 で失敗したケースを Phase 151+ に分割
**作業**:
1. 失敗ケース分析:
- どのステージStage-B / JSON emit / dev verify / JoinIRで落ちたか特定
- エラーメッセージ/ログを記録
2. CURRENT_TASK に新エントリ:
```
### Phase 151: Selfhost Stage-3 X バグ修正
**原因**: Stage-B JSON emit
**失敗ケース**: <case1>, <case2>
**見込み工数**: 2-3 時間
```
**成果物**:
- `phase150_selfhost_stage3_depth1_baseline.md` に「Failure Summary」セクション追記
- CURRENT_TASK.md に Phase 151+ ToDo 行
---
### Task 5: CURRENT_TASK とロードマップの整合性更新
**ファイル**: `CURRENT_TASK.md`
**やること**:
1. CURRENT_TASK 冒頭ロードマップに Phase 150 追記:
```markdown
### Phase 150: Selfhost Stage-3 Depth-1 ベースライン強化 ← **進行中**
**目的**: 3本 → 5-7本の代表ケースで depth-1 安定化
**成果物**: パイプライン図、代表ケース拡張、スモークスクリプト
**次フェーズ**: Phase 151+ selfhost 特有バグ修正
**注**: .hako JoinIR/MIR 移植章Phase 160+)は Phase 150 完了後に着手予定
```
2. Phase 150 実装結果サマリーを追記:
- パイプライン図更新完了
- 代表ケース数3 → X本
- スモークスクリプト配置
- 見つかったバグ数・分類
**成果物**:
- 更新版 `CURRENT_TASK.md`
---
## ✅ 完成チェックリストPhase 150
- [ ] Task 1: Selfhost パイプライン図を 1 ファイルに統合
- [ ] Task 2: 代表ケース 3 → 5-7本に拡張
- [ ] 候補リスト化tools/selfhost_candidates.txt
- [ ] 各ケース実行テスト
- [ ] 結果表を作成phase150_selfhost_stage3_depth1_baseline.md
- [ ] Task 3: Selfhost スモークスクリプト作成
- [ ] selfhost_phase150_depth1_smoke.sh 実装
- [ ] logging_policy への一言追記
- [ ] Task 4: 失敗ケースを Phase 151+ に切り出し
- [ ] failure summary セクション追記
- [ ] Phase 151+ ToDo を CURRENT_TASK に追加
- [ ] Task 5: CURRENT_TASK 更新
- [ ] ロードマップに Phase 150 追記
- [ ] Phase 150 実装結果サマリー
- [ ] git commit で記録
---
## 所要時間
**4-5 時間程度**
- Task 1パイプライン図整理: 45分
- Task 2代表ケース拡張・テスト: 2時間
- Task 3スモークスクリプト: 45分
- Task 4バグ分類: 1時間
- Task 5CURRENT_TASK 更新): 30分
---
## 次のステップ
**Phase 151+: Selfhost 特有バグ修正**
- Task 4 で見つかったバグを段階的に修正
- 各バグごとに小フェーズを切り出し
**Phase 160+: .hako JoinIR/MIR 移植章**
- Rust MIR ビルダーを .hako に移植
- depth-2 以上の selfhost サポート
---
## 進捗
- ✅ Phase 130-134: LLVM Python バックエンド整理mir_call 統一、StringBox bridge
- 🎯 Phase 150: Selfhost Stage-3 Depth-1 ベースライン強化(← **現在のフェーズ**
- 📋 Phase 151+: Selfhost 特有バグ修正(予定)
- 📋 Phase 160+: .hako JoinIR/MIR 移植章(予定)