Files
hakorune/docs/development/current/main/DOCS_LAYOUT.md
tomoaki 4496b6243d feat(joinir): Phase 259 P0 complete - Pattern8 final fixes + docs (pre-block-params migration)
Phase 259 P0: Pattern8 (BoolPredicateScan) 完全完了
is_integer/1 を Pattern8 で受理し、VM/LLVM EXE 両方で動作確認完了。
次の大工事(block-parameterized CFG への移行)前のマイルストーンとして記録。

## Key Fixes Applied

1. **skipped_entry_redirects** (instruction_rewriter.rs)
   - k_exit のスキップ時、entry block 参照を exit_block_id へリダイレクト
   - BasicBlockId not found エラーを根治

2. **loop_var_name** (pattern8_scan_bool_predicate.rs)
   - merge_entry_block 選択に使用(`Some(parts.loop_var.clone())`)
   - 未設定時の誤った entry block 選択を修正

3. **loop_invariants** (pattern8_scan_bool_predicate.rs)
   - PHI-free 不変量パラメータ(`[(me, me_host), (s, s_host)]`)
   - loop_var_name 設定時、BoundaryInjector が join_inputs Copy を全スキップするため必要
   - Pattern6 と同じ設計(header PHI で不変量を保持)

4. **expr_result** (pattern8_scan_bool_predicate.rs)
   - k_exit からの返り値を明示設定(`Some(join_exit_value)`)
   - Pattern7 style(推測ではなく明示)

5. **Smoke test scripts**
   - set +e パターンで exit code 7 をキャプチャ
   - LLVM EXE スクリプトにコメント追加(tools/build_llvm.sh 経由の明記)

## Contract Documentation

- join-explicit-cfg-construction.md に Pattern8 契約の具体例を追加
  - "pattern増でも推測増にしない" の実例として記録
  - loop_var_name / loop_invariants / expr_result / jump_args_layout の契約を明示
- 20-Decisions.md に正規化(Semantic/Plumbing)の分離方針を追記
- DOCS_LAYOUT.md に重要ドキュメントへの参照を追加

## Test Results

-  VM smoke test: `[PASS] phase259_p0_is_integer_vm` (exit 7)
-  LLVM EXE: tools/build_llvm.sh 経由で exit 7 確認
-  --verify: PASS

## Next FAIL (Phase 260+)

- Function: `Main.main/0` in `apps/examples/json_lint/main.hako`
- Error: `[cf_loop/pattern2] Failed to extract break condition from loop body`
- Pattern: Nested loop(外側 loop + 内側 loop with break)

🚀 次の大工事: block-parameterized CFG への移行を開始します。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:21:22 +09:00

85 lines
3.7 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.

# Docs Layout (SSOT)
Status: SSOT
Scope: `docs/development/current/` 以下の「置き場所ルール」と、SSOT/履歴メモの混在を防ぐための最小ガイド。
## 目的
- 入口(読む順序)と、詳細(設計図/調査/Phaseログを分離して迷子を防ぐ。
- “Phase 文書が増えても” SSOT が埋もれないようにする。
- 大規模移動はしない(リンク切れ回避)。以後の追加分から秩序を作る。
## ディレクトリの役割(推奨)
### `docs/development/current/main/`(入口・現状)
ここは「まず読む」入口を置く場所。SSOT を全部ここに置かない。
- 入口(例): `00-Overview.md`, `01-JoinIR-Selfhost-INDEX.md`, `10-Now.md`, `20-Decisions.md`, `30-Backlog.md`
### `docs/development/current/main/design/`設計図・SSOT寄り
設計の SSOT / 長期参照の設計図を置く。
- 原則: Phase 依存のログ/作業記録は置かない(それは phases へ)。
- 例: JoinIR の設計、Boundary/ExitLine の契約、Loop パターン空間、runtime/box 解決の地図。
- よく参照する設計SSOT:
- Join-Explicit CFG Constructionnorth star: `docs/development/current/main/design/join-explicit-cfg-construction.md`
### `docs/development/current/main/investigations/`(調査ログ)
不具合調査のログ、切り分け、暫定メモを置く。
- 原則: “結論” は `10-Now.md` / `20-Decisions.md` / 該当 design doc に反映し、調査ログ自体は参照用に残す。
- 原則: 調査ログを SSOT にしない(参照元を明記して“歴史化”できる形にする)。
- よく参照する調査ログ:
- Phase 259: block-parameterized CFG / ABI/contract 相談パケット: `docs/development/current/main/investigations/phase-259-block-parameterized-cfg-consult.md`
### `docs/development/current/main/phases/`Phaseログ
Phase ごとの記録・完了サマリ・実装チェックリストを置く。
- 推奨構造:
- `docs/development/current/main/phases/phase-131/`
- `docs/development/current/main/phases/phase-131/131-03-llvm-lowering-inventory.md`
- `docs/development/current/main/phases/phase-131/131-11-case-c-summary.md`
## ドキュメントの種別(ファイル先頭に明記)
追加/更新する文書の先頭に、最低限これを付ける。
```
Status: SSOT | Active | Historical
Scope: ...
Related:
- <入口/SSOT>
```
- `SSOT`: 現行の正本(同じテーマの“別名ファイル”を増やさない)。
- `Active`: 現行だが SSOT ではない(実装の手順書/チェックリスト等)。
- `Historical`: 参照用(当時の調査・ログ)。入口や Now から “歴史” としてリンクする。
## 移行ポリシー(リンク切れ防止)
既存のファイルは大量移動しない。移動が必要な場合は必ず旧パスに“転送スタブ”を残す。
例(旧ファイルの内容を最小化):
```
# Moved
Moved to: docs/development/current/main/phases/phase-131/131-03-llvm-lowering-inventory.md
```
## 命名(推奨)
- Phase 文書: `phase-<N>/` + `<N>-<NN>-<topic>.md`(同一フェーズ内で並べ替えが自然)
- 調査ログ: `<topic>-investigation-YYYY-MM-DD.md` など(時系列が分かる形)
- 入口/SSOT: “Phase番号を入れない” ことを基本にする(寿命が長いので)
## 運用の最小ルール
- 新しい Phase 文書は `main/phases/` に入れる(`main/` 直下に増やさない)。
- 設計図SSOT`main/design/` に寄せるPhase の完了サマリと混ぜない)。
- `10-Now.md` は「現状の要約+正本リンク」に徹し、詳細ログの本文は抱え込まない。