Files
hakorune/docs/development/current/main/phase47-test-files-inventory.md
nyash-codex 23ebb86e6e docs(joinir): Phase 47 - Normalized P3 (If-Sum) design
Complete design for extending Normalized JoinIR to Pattern3 (if-sum) loops,
reusing 90% of existing P2 infrastructure.

Key insight: P3 already uses P2's Structured JoinIR foundation (Phase 220
ConditionEnv integration), so Normalized extension is straightforward.

Design documents:
- phase47-norm-p3-design.md: Complete P3 Normalized design
  - Infrastructure reuse analysis (ConditionEnv, CarrierInfo, ExitLine)
  - Representative loops identified (phase212_if_sum_min primary target)
  - StepScheduleBox extension (IfCond, ThenUpdates, ElseUpdates)
  - JpInst reuse (If instruction already exists)
  - Implementation strategy (dev-only → canonical)
  - File impact estimate (~365 lines, pure additive)

- phase47-test-files-inventory.md: P3 test file catalog
  - 3 P3 test files analyzed
  - phase212_if_sum_min.hako: Single carrier (PRIMARY)
  - phase217_if_sum_multi_min.hako: Multi-carrier (sum + count)
  - phase218_json_if_sum_min.hako: Variable accumulation (sum + i)

Architecture:
- Unified Normalized for P1/P2/P3 (same pipeline)
- Conditional updates only difference vs P2
- No P2 code changes needed (pure additive)

Benefits:
- 90% infrastructure reuse from P2
- Proven incremental rollout (dev → canonical)
- Clear path to P4 (continue pattern)

Implementation roadmap:
- Phase 47-A: Minimal sum_count (dev-only)
- Phase 47-B: array_filter (body-local + method calls)
- Phase 47-C: Canonical promotion

Updates:
- joinir-architecture-overview.md: Added Phase 47 section
- CURRENT_TASK.md: Updated Phase 47 entry (Design Complete)

Status: Design phase complete, ready for implementation
2025-12-12 04:50:26 +09:00

200 lines
4.9 KiB
Markdown

# Phase 47 Test Files Inventory
**Date**: 2025-12-12
## P3 (If-Sum) Test Files Available
### 1. phase212_if_sum_min.hako ⭐ PRIMARY TARGET
**Path**: `/home/tomoaki/git/hakorune-selfhost/apps/tests/phase212_if_sum_min.hako`
**Pattern**: Simple if-sum with single carrier
```nyash
local sum = 0
local i = 0
local len = 3
loop(i < len) {
if (i > 0) {
sum = sum + 1 // Conditional update
} else {
sum = sum + 0 // Else branch (no-op)
}
i = i + 1
}
```
**Characteristics**:
- ✅ Single carrier: `sum`
- ✅ Simple condition: `i > 0`
- ✅ One loop param: `i`
- ✅ Explicit else branch
- ✅ Clean structure (no method calls, no body-local)
**Expected output**: `sum = 2`
**Use case**: **Phase 47-A Minimal** (first Normalized P3 implementation)
---
### 2. phase217_if_sum_multi_min.hako
**Path**: `/home/tomoaki/git/hakorune-selfhost/apps/tests/phase217_if_sum_multi_min.hako`
**Pattern**: Multi-carrier if-sum (2 accumulators)
```nyash
local sum = 0
local count = 0
local i = 0
local len = 3
loop(i < len) {
if (i > 0) {
sum = sum + 1 // Conditional update 1
count = count + 1 // Conditional update 2
print(sum)
print(count)
} else {
print(0)
}
i = i + 1
}
```
**Characteristics**:
-**Two carriers**: `sum`, `count`
- ✅ Side effects: `print()` calls
- ✅ Multiple updates in then branch
- ⚠️ Slightly more complex than phase212
**Expected output**: `sum = 2, count = 2`
**Use case**: **Phase 47-A Extended** (multi-carrier test)
---
### 3. phase218_json_if_sum_min.hako
**Path**: `/home/tomoaki/git/hakorune-selfhost/apps/tests/phase218_json_if_sum_min.hako`
**Pattern**: JsonParser-style accumulation
```nyash
local sum = 0
local i = 0
local len = 5
loop(i < len) {
if (i > 0) {
sum = sum + i // Variable accumulation (not constant)
print(sum)
} else {
print(0)
}
i = i + 1
}
```
**Characteristics**:
- ✅ Single carrier: `sum`
- ✅ Variable accumulation: `sum + i` (not `sum + 1`)
- ✅ Simulates JsonParser digit accumulation pattern
- ⚠️ More complex arithmetic
**Expected output**: `sum = 10` (1+2+3+4)
**Use case**: **Phase 47-A Extended** (variable accumulation test)
---
## Phase 47-A Implementation Priority
### First Target: phase212_if_sum_min.hako
**Why**:
1.**Simplest structure** - single carrier, simple condition
2.**Clean pattern** - no side effects (no print), no method calls
3.**Direct P2 analogy** - just adds if branching to P2 structure
4.**Best for proving concept** - minimal complexity
**Normalized components needed**:
- EnvLayout: `{ i: int, sum: int }` (same as P2)
- StepSchedule: `[HeaderCond, IfCond, ThenUpdates, Updates, Tail]`
- JpInst: Reuse existing `If` instruction
### Second Target: phase217_if_sum_multi_min.hako
**Why**:
1.**Multi-carrier test** - proves P3 handles multiple accumulators
2. ⚠️ Side effects (print) - tests that side effects work in then/else branches
3.**Still simple condition** - `i > 0` (same as phase212)
**Additional Normalized components**:
- EnvLayout: `{ i: int, sum: int, count: int }` (multi-carrier)
- Side effect handling in then/else branches
### Third Target: phase218_json_if_sum_min.hako
**Why**:
1.**Variable accumulation** - `sum + i` (not constant)
2.**JsonParser pattern** - prepares for real JsonParser loops
3. ⚠️ More complex arithmetic expression
**Additional Normalized components**:
- Expression lowering for `sum + i` (already supported by ExprLowerer)
---
## Phase 47-B Target (Future)
**Candidate**: JsonParser array_filter pattern (if exists in codebase)
```nyash
local out = new ArrayBox()
local i = 0
loop(i < arr.length()) {
local v = arr.get(i)
if (predicate(v)) {
out.push(v)
}
i = i + 1
}
```
**Complexity**:
- ⚠️ Method calls: `arr.length()`, `arr.get(i)`, `out.push(v)`
- ⚠️ Body-local: `v` (used in if condition)
- ⚠️ External predicate call
**Status**: Not yet verified if this exact pattern exists in codebase
---
## Summary
**Available P3 test files**: 3
1. ✅ phase212_if_sum_min.hako (PRIMARY)
2. ✅ phase217_if_sum_multi_min.hako (SECONDARY)
3. ✅ phase218_json_if_sum_min.hako (TERTIARY)
**Phase 47-A roadmap**:
1. Start with phase212 (single carrier, simple)
2. Extend to phase217 (multi-carrier)
3. Extend to phase218 (variable accumulation)
4. All dev-only (Normalized→MIR direct comparison tests)
**Phase 47-B roadmap** (future):
- Real JsonParser loops with method calls + body-local
- Requires body-local handling in EnvLayout (already exists for P2 DigitPos)
**Phase 47-C roadmap** (future):
- Canonical promotion of P3 minimal (like P2)
- Performance validation
---
## References
- **Phase 47 Design**: [phase47-norm-p3-design.md](./phase47-norm-p3-design.md)
- **P2 Completion**: [PHASE_43_245B_NORMALIZED_COMPLETION.md](./PHASE_43_245B_NORMALIZED_COMPLETION.md)
- **Architecture**: [joinir-architecture-overview.md](./joinir-architecture-overview.md)