2.7 KiB
2.7 KiB
Phase 29ai P15: Observe Pattern2 promotion hint (strict/dev)
Date: 2025-12-29
Status: Ready for execution
Scope: Pattern2 LoopBodyLocal promotion hint を strict/dev 限定で観測可能にする(仕様不変)
Goal: promotion hint が付与されている事実を stable tag で固定し、次の Plan/Frag 吸収フェーズへ進む前提を揃える
Objective
- Pattern2 LoopBodyLocal facts が取れるときだけ、strict/dev 限定で安定タグを出して観測できるようにする
- 既定(非 strict)ではログ増やさない・挙動/エラー文字列は不変
SSOT / Preconditions
- strict 判定は既存の
HAKO_JOINIR_STRICT=1/NYASH_JOINIR_STRICT=1のみ(新 env var 禁止) filter_noise()は^[joinir/や^[trace:を落とすため、タグは[plan/で出す
Implementation Steps
Step 1: タグ出力を追加(planner outcome 参照)
ファイル:
src/mir/builder/control_flow/plan/single_planner/rules.rs
実装位置:
try_build_domain_plan()のif let Some(domain_plan) = plan_opt { ... }直前付近
補足:
- planner outcome は
build_plan_with_facts()の結果を使い、facts 直抽出はしない
ガード条件(全部満たすときだけ出す):
entry.kindがRuleKind::Pattern2crate::config::env::joinir_dev::strict_enabled()が truebuild_plan_with_facts()の outcome からPattern2LoopBodyLocalFactsが取れる
出力するタグ(stderr 推奨、1行固定):
- TrimSeg:
[plan/pattern2/promotion_hint:TrimSeg] - DigitPos:
[plan/pattern2/promotion_hint:DigitPos]
注意:
trace::trace()はfilter_noise()で落ちるのでeprintln!を使う- facts 直抽出は禁止(planner outcome だけを参照する)
Step 2: integration smoke をタグ検証に昇格
対象ファイル(既存2本の強化):
tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_seg_min_vm.shtools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_min_vm.sh
変更内容:
- 既存の
RC=2/出力チェックは維持 - 追加で
OUTPUT_CLEANにタグが含まれることを必須条件にする
期待:
- seg_min:
[plan/pattern2/promotion_hint:TrimSeg] - digit_pos_min:
[plan/pattern2/promotion_hint:DigitPos]
Step 3: Docs + CURRENT_TASK 更新
docs/development/current/main/phases/phase-29ai/README.md(P15 完了、タグ仕様をSSOT化)docs/development/current/main/10-Now.mddocs/development/current/main/30-Backlog.mdCURRENT_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