phase29ai(p15): observe pattern2 promotion hint under strict

This commit is contained in:
2025-12-29 11:37:31 +09:00
parent 6afae6f7b8
commit 2e1bb938b4
8 changed files with 117 additions and 44 deletions

View File

@ -1,64 +1,65 @@
# Phase 29ai P15: Observe Pattern2 promotion hintSSOT, 仕様不変)
# Phase 29ai P15: Observe Pattern2 promotion hint (strict/dev)
Date: 2025-12-29
Status: Ready for execution
Scope: P14 で追加した `Pattern2BreakPlan.promotion` を “観測可能にする(挙動不変)
Goal: 次の「Plan/Frag に promotion を吸収する」フェーズ前に、hint が正しく付与されていることを fixture/smoke で固定す
Scope: Pattern2 LoopBodyLocal promotion hint を strict/dev 限定で観測可能にする(仕様不変)
Goal: promotion hint が付与されている事実を stable tag で固定し、次の Plan/Frag 吸収フェーズへ進む前提を揃え
## Objective
P14 で planner は LoopBodyLocal facts がるときだけ `Pattern2BreakPlan.promotion` を付与できるようになった。
しかし現状は “hint が付いているか” を実行経路で検証できない。
- Pattern2 LoopBodyLocal facts が取れるときだけ、strict/dev 限定で安定タグを出して観測できるようにする
- 既定(非 strictではログ増やさない・挙動/エラー文字列は不変
P15 では:
- dev-only / strict-only の観測ログ(安定タグ)を 1 箇所に追加し
- 代表 fixtureseg/digit_posで hint が付与されていることを smoke で固定する
## SSOT / Preconditions
## Non-goals
- 実際の promotion 実装の変更(挙動変更は禁止)
- 新しい env var の追加(既存の strict フラグだけ使う)
- by-name 分岐の追加(禁止)
- production 既定でログ増加strict/dev のみ)
- strict 判定は既存の `HAKO_JOINIR_STRICT=1` / `NYASH_JOINIR_STRICT=1` のみ(新 env var 禁止)
- `filter_noise()``^[joinir/``^[trace:` を落とすため、タグは `[plan/` で出す
## Implementation Steps
### Step 1: 観測の入口1箇所を決める
### Step 1: タグ出力を追加planner採用時のみ
推奨:
- `src/mir/builder/control_flow/joinir/patterns/router.rs` の “plan 採用ログ” 直前
- 理由: `DomainPlan` が確定しており、Pattern2BreakPlan を直接見られる
ファイル:
- `src/mir/builder/control_flow/plan/single_planner/rules.rs`
出力フォーマット安定タグ、strict/dev のみ):
- `[plan/pattern2/promotion_hint:<TrimSeg|DigitPos>]`
実装位置:
- `try_build_domain_plan()``if let Some(domain_plan) = plan_opt { ... }` 直前付近
ガード条件(全部満たすときだけ出す):
- `entry.kind``RuleKind::Pattern2`
- `crate::config::env::joinir_strict_enabled()` が true
- `Pattern2LoopBodyLocalFacts` が取れるplanner 由来の promotion か、facts 直抽出)
出力するタグstderr 推奨、1行固定:
- TrimSeg: `[plan/pattern2/promotion_hint:TrimSeg]`
- DigitPos: `[plan/pattern2/promotion_hint:DigitPos]`
注意:
- `promotion == None` の場合は出力しない(ノイズを増やさない)
- `promotion == Some` の場合だけ 1 行strict/dev のみ)
- `trace::trace()``filter_noise()` で落ちるので `eprintln!` を使う
### Step 2: smoke で固定
### Step 2: integration smoke をタグ検証に昇格
対象 fixture既存を使う:
- `apps/tests/phase29ab_pattern2_loopbodylocal_seg_min.hako`TrimSeg
- `apps/tests/phase29ab_pattern2_loopbodylocal_min.hako`DigitPos
対象ファイル既存2本の強化:
- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_seg_min_vm.sh`
- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_min_vm.sh`
追加 smokeintegration:
- `tools/smokes/v2/profiles/integration/apps/phase29ai_pattern2_promotion_hint_seg_vm.sh`
- `tools/smokes/v2/profiles/integration/apps/phase29ai_pattern2_promotion_hint_digitpos_vm.sh`
変更内容:
- 既存の `RC=2`/出力チェックは維持
- 追加で `OUTPUT_CLEAN` にタグが含まれることを必須条件にする
判定:
- strict で実行し、stdout にタグが含まれることを確認exit code は既存の期待を維持)
期待:
- seg_min: `[plan/pattern2/promotion_hint:TrimSeg]`
- digit_pos_min: `[plan/pattern2/promotion_hint:DigitPos]`
### Step 3: Docs 更新
### Step 3: Docs + CURRENT_TASK 更新
- `docs/development/current/main/phases/phase-29ai/README.md`
- `docs/development/current/main/phases/phase-29ai/README.md`P15 完了、タグ仕様をSSOT化
- `docs/development/current/main/10-Now.md`
- `docs/development/current/main/30-Backlog.md`
- `CURRENT_TASK.md`
## Verification (SSOT)
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
- `./tools/smokes/v2/run.sh --profile integration --filter "phase29ai_pattern2_promotion_hint_*"`

View File

@ -91,10 +91,12 @@ Goal: pattern 名による分岐を外部APIから消し、Facts事実
- 完了: promotion hint を plan vocab に追加し、planner が facts から hint を付与legacy は None
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## P15: Observe Pattern2 promotion hintSSOT
## P15: Observe Pattern2 promotion hint (strict/dev)
- 指示書: `docs/development/current/main/phases/phase-29ai/P15-OBSERVE-PATTERN2-PROMOTION_HINT-INSTRUCTIONS.md`
- ねらい: promotion hint の付与を fixture/smoke で観測固定し、次の Plan/Frag 吸収フェーズの前提を固める(仕様不変)
- ねらい: strict/dev のときだけ promotion hint を安定タグで観測できるようにする(挙動不変)
- 完了: LoopBodyLocal facts が取れたときに `[plan/pattern2/promotion_hint:{TrimSeg|DigitPos}]` を出力し、2 本をタグ検証に昇格
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## Verification (SSOT)