docs: Phase 120 StepTree facts/contract SSOT
This commit is contained in:
@ -44,6 +44,29 @@ lowering/PHI/CFG の判断にはまだ使わない(dev-only)だが、再解
|
||||
- `required_caps`: capability 宣言(例: `NestedLoop`, `TryCatch`, `Throw`, `Lambda` など)
|
||||
- `cond_sig`: if/loop 条件式の要約(下記)
|
||||
|
||||
### Facts→Decision→Emit 設計(Phase 120)
|
||||
|
||||
**責務分離(Box-First原則)**:
|
||||
1. **StepTreeBuilderBox**: 構造 + facts 抽出まで
|
||||
- AST を StepNode 木に変換
|
||||
- `StepTreeFacts` を収集(exits/writes/required_caps/cond_sig の生データ)
|
||||
- 意思決定・整形・署名生成はしない
|
||||
|
||||
2. **StepTreeContractBox**: facts → contract の整形のみ
|
||||
- `StepTreeFacts` を受け取り `StepTreeContract` に整形
|
||||
- BTreeSet で安定性保証(順序決定性)
|
||||
- 意思決定はしない(facts をそのまま contract に移す)
|
||||
|
||||
3. **StepTree→Normalized**: contract を読むだけ
|
||||
- AST 再解析禁止
|
||||
- contract に含まれる情報のみで lowering 判断
|
||||
- 将来実装時の契約
|
||||
|
||||
**不変条件**:
|
||||
- `signature_basis_string()` の決定性維持(既定挙動不変)
|
||||
- facts は順序に依存しない(BTreeSet 使用)
|
||||
- contract 生成は冪等(同じ facts から同じ contract)
|
||||
|
||||
### cond の SSOT(Phase 119)
|
||||
|
||||
**SSOT**: `cond` は **AST 参照(ID/ハンドル)** を保持する。
|
||||
|
||||
Reference in New Issue
Block a user