docs: update Phase 257-259 SSOT (first FAIL is is_integer)

This commit is contained in:
2025-12-21 00:29:55 +09:00
parent 23531bf643
commit e4f57ea83d
4 changed files with 103 additions and 36 deletions

View File

@ -1,6 +1,6 @@
# Phase 257: Loop with Early Return Pattern
Status: Active
Status: Completed (2025-12-20)
Scope: Pattern6ScanWithInit拡張で reverse scan + early return を受理する
Related:
- Phase 256 完了Pattern2 boundary SSOT 化、entry_param_mismatch 根治)
@ -9,8 +9,8 @@ Related:
## Current Status (SSOT)
- Former first FAIL: `json_lint_vm / StringUtils.last_index_of/2`P0/P1で解消
- Current first FAIL: `json_lint_vm / StringUtils.is_integer/1`nested-if + loop, still unsupported
- Approach (done): Pattern6ScanWithInitを reverse scan + early return に拡張し、PHI/CFG を fail-fast + 自動補正で安定化
- Current first FAIL: `json_lint_vm / StringUtils.is_integer/1`Phase 259
- Result: Pattern6 reverse scan + PHI/CFG 安定化P0/P1により quick が次へ進む
---
@ -129,23 +129,16 @@ Pattern6ScanWithInitを “scan direction” を持つ形に一般化す
- Pattern6 を双方向 scan に拡張forward/reverse
- reverse scan 用 lowerer を追加(`scan_with_init_reverse.rs`
- `apps/tests/phase257_p0_last_index_of_min.hako` を追加
- ただし現状は「PHI predecessor mismatch」が先に露出しており、P1 でインフラ不変条件を固定する必要がある
- ただし当初は「PHI predecessor mismatch」が露出したため、P1 でインフラ不変条件を固定した
## Phase 257 P1次の指示書 / SSOT
### P1完了
### Goal
P1 で以下を実装し、runtime の `phi pred mismatch` を compile-time 側で捕捉・根治した:
- Pattern6 の実行時 `phi pred mismatch` を根治し、`index_of` / `last_index_of` が VM で正常に走る
- `./tools/smokes/v2/run.sh --profile quick` の最初の FAIL を次へ進める
### Tasks順序
1) MIR verifier を強化して `InvalidPhi` を検出するfail-fast
- 期待: phi inputs が「ブロックの predecessor 全部」をカバーし、自己ブロックselfを含まない
2) Pattern6 の loop header PHI の entry edge source を正す
- `entry_block == header_block` になっているケースを禁止し、必要なら preheader を作る or merge entry を main に寄せる
3) smoke の false positive を防ぐ
- `phase254_p0_index_of_vm.sh``--verify` を併用するか、VM error を検出して FAIL にする
- Pattern6 の誤検出防止detect/extract SSOT
- MIR verifier へ PHI predecessor 検証を追加fail-fast
- loop header PHI の entry edge を CFG から復元self pred 根治)
- smoke の false positive を抑止(`--verify` + VM error 検出
---

View File

@ -0,0 +1,47 @@
Status: Completed (2025-12-20)
Scope: `StringUtils.index_of_string/2`dynamic window scanを JoinIR で受理して `--profile quick` を進める。
Related:
- Now: `docs/development/current/main/10-Now.md`
- Phase 257: `docs/development/current/main/phases/phase-257/README.md`
- Phase 259 (Next): `docs/development/current/main/phases/phase-259/README.md`
- Design goal: `docs/development/current/main/design/join-explicit-cfg-construction.md`
# Phase 258: `StringUtils.index_of_string/2` (dynamic window scan)
## Current Status (SSOT)
-**P0 完了**2025-12-21
- Former first FAIL: `json_lint_vm / StringUtils.index_of_string/2`
- **New first FAIL**: `json_lint_vm / StringUtils.is_integer/1`Phase 259へ移行
- Shape summary (from quick log):
- prelude: `if substr.length()==0 return 0`, `if substr.length()>s.length() return -1`
- loop: `loop(i <= s.length() - substr.length()) { if s.substring(i, i+substr.length()) == substr return i; i=i+1 }`
- post: `return -1`
- caps: `If,Loop,Return`
## Goal
-`./tools/smokes/v2/run.sh --profile quick``StringUtils.index_of_string/2` を突破し、次の FAIL へ進む
## Proposed Approach (P0)
方針: Pattern6ScanWithInitを “needle length 付き scan” に最小拡張する(構造で解決)
Pattern6 との差分だけを足す:
- loop cond: `i <= s.length() - substr.length()`bound 付き)
- window: `substring(i, i + substr.length())`
- needle: `substr`String
JoinIR 側は P0 では “毎回 length() を呼んでよい”。まず correctness を固定:
- `needle_len = substr.length()`
- `bound = s.length() - needle_len`
- stop: `i > bound` で k_exitnot-found return
- match: `s.substring(i, i + needle_len) == substr` で return i
- step: `i = i + 1`
## Tasks (Draft)
1) Fixture + integration smokes
2) Pattern6 extractor を拡張して `index_of_string/2` の loop 形を acceptFail-Fast
3) Pattern6 lowerer を拡張dynamic window length / boundして JoinIR を生成
4) `--verify` / integration / quick を回して SSOT 更新

View File

@ -0,0 +1,29 @@
Status: Active
Scope: `StringUtils.is_integer/1`nested-if + loopを JoinIR で受理して `--profile quick` を進める。
Related:
- Now: `docs/development/current/main/10-Now.md`
- Phase 258: `docs/development/current/main/phases/phase-258/README.md`
- Design goal: `docs/development/current/main/design/join-explicit-cfg-construction.md`
# Phase 259: `StringUtils.is_integer/1` (nested-if + loop)
## Current Status (SSOT)
- Current first FAIL: `json_lint_vm / StringUtils.is_integer/1`
- Shape summaryログ由来:
- prelude: nested-if to compute `start` (handles leading `"-"`)
- loop: `loop(i < s.length()) { if not this.is_digit(s.substring(i, i+1)) { return false } i = i + 1 }`
- post: `return true`
- caps: `If,Loop,NestedIf,Return`
## Goal
- `StringUtils.is_integer/1` を JoinIR で受理し、quick の first FAIL を次へ進める
## Proposed Approach (P0)
方針: preludenested-ifは既存 lowering のまま、loop 部分だけを scan パターンへ寄せる(構造で解決)。
P0 の狙い:
- loop の core は “scan until mismatch” で、Pattern6scanと近い
- ただし return 値が `i/-1` ではなく `true/false` なので、scan パターンの “return payload” を一般化する必要がある可能性がある