From 7307ff76f6cd0e74db66a27d83f580eada0d7025 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 16:06:24 +0900 Subject: [PATCH] phase29ao(p34): prevent pattern2 shadow-adopt on negative cases --- docs/development/current/main/10-Now.md | 3 +- docs/development/current/main/30-Backlog.md | 3 +- .../design/coreplan-migration-roadmap-ssot.md | 2 +- ...IVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md | 59 +++++++++++++++++++ .../current/main/phases/phase-29ao/README.md | 3 +- .../phase29ab_pattern2_seg_freeze_min_vm.sh | 9 +++ ...e29ab_pattern2_seg_notapplicable_min_vm.sh | 9 +++ 7 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index defeb2e9..3a9ed19b 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -3,7 +3,8 @@ ## Current Focus - Phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next: Phase 29ao P34(TBD) +- Next: Phase 29ao P34(Pattern2 negative shadow adopt gates) + - 指示書: `docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md` ## Gate (SSOT) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index e7b46d5c..beadd8d0 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -5,7 +5,8 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev ## Active -- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: P34 TBD) +- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: P34) + - 指示書: `docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md` ## Near-Term Candidates diff --git a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md index 082db6be..ce9b0e0a 100644 --- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md +++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md @@ -34,7 +34,7 @@ Related: ## 1.1 Current (active) - Active phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next step: Phase 29ao P34 (TBD) +- Next step: `docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md` - After P34: TBD ## 2. すでに固めた SSOT(再発防止の土台) diff --git a/docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md new file mode 100644 index 00000000..41f14833 --- /dev/null +++ b/docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md @@ -0,0 +1,59 @@ +--- +Status: Ready +Scope: tests+docs(仕様不変) +Related: + - tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh + - tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh + - tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh + - docs/development/current/main/phases/phase-29ao/README.md +--- + +# Phase 29ao P34: Pattern2 の誤マッチ防止(freeze / notapplicable で shadow adopt タグが出ないことを回帰で固定) + +Date: 2025-12-30 +Status: Ready for execution +Goal: Phase 29ao P33 で Pattern2 の match 範囲を広げたので、**本来 Pattern2Break として planner 由来になってはいけないケース**でも +誤って shadow adopt してしまう退行を防ぐ。 + +対象は `phase29ab_pattern2_` の negative ケース: +- `phase29ab_pattern2_seg_notapplicable_min_vm`(NotApplicable) +- `phase29ab_pattern2_seg_freeze_min_vm`(Freeze) + +これらで strict/dev 実行時に `[coreplan/shadow_adopt:pattern2_break_subset]` が出たら FAIL とする。 + +## 非目的 + +- 実装変更(facts/normalizer/planner には触れない) +- release の挙動変更 + +## 変更内容 + +### 1) NotApplicable smoke に “shadow adopt タグ禁止” を追加 + +対象: +- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh` + +やること: +- raw `OUTPUT` に `[coreplan/shadow_adopt:pattern2_break_subset]` が含まれていたら FAIL。 +- 既存の output=2 期待は維持。 + +### 2) Freeze smoke に “shadow adopt タグ禁止” を追加 + +対象: +- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh` + +やること: +- raw `OUTPUT` に `[coreplan/shadow_adopt:pattern2_break_subset]` が含まれていたら FAIL。 +- 既存の freeze tag 検証(`[joinir/freeze]`)は維持。 + +## 検証(必須) + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + +## コミット + +- `git add -A` +- `git commit -m "phase29ao(p34): prevent pattern2 shadow-adopt on negative cases"` + diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 4ca11f28..1a293f62 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -193,5 +193,6 @@ Gate(SSOT): ## Next(planned) -- Next: P34(TBD) +- Next: P34(Pattern2 negative shadow adopt gates) + - 指示書: `docs/development/current/main/phases/phase-29ao/P34-PATTERN2-NEGATIVE-SHADOW-ADOPT-TAG-GATES-INSTRUCTIONS.md` - After P34: TBD diff --git a/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh b/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh index 32eeb567..9b48b098 100644 --- a/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh +++ b/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_freeze_min_vm.sh @@ -8,6 +8,7 @@ require_env || exit 2 INPUT="$NYASH_ROOT/apps/tests/phase29ab_pattern2_seg_freeze_min.hako" RUN_TIMEOUT_SECS=${RUN_TIMEOUT_SECS:-10} +SHADOW_TAG='[coreplan/shadow_adopt:pattern2_break_subset]' set +e OUTPUT=$(timeout "$RUN_TIMEOUT_SECS" env NYASH_DISABLE_PLUGINS=1 HAKO_JOINIR_STRICT=1 "$NYASH_BIN" "$INPUT" 2>&1) @@ -27,6 +28,14 @@ if [ "$EXIT_CODE" -eq 0 ]; then exit 1 fi +if echo "$OUTPUT" | grep -qF "$SHADOW_TAG"; then + echo "[FAIL] Shadow adopt tag must not appear for Freeze case: $SHADOW_TAG" + echo "[INFO] Output:" + echo "$OUTPUT" | tail -n 60 || true + test_fail "phase29ab_pattern2_seg_freeze_min_vm: Unexpected shadow adopt" + exit 1 +fi + if echo "$OUTPUT" | grep -q "\[joinir/freeze\]"; then test_pass "phase29ab_pattern2_seg_freeze_min_vm: joinir freeze detected" exit 0 diff --git a/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh b/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh index 198a66c4..143fbc31 100644 --- a/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh +++ b/tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_seg_notapplicable_min_vm.sh @@ -8,6 +8,7 @@ require_env || exit 2 INPUT="$NYASH_ROOT/apps/tests/phase29ab_pattern2_seg_notapplicable_min.hako" RUN_TIMEOUT_SECS=${RUN_TIMEOUT_SECS:-10} +SHADOW_TAG='[coreplan/shadow_adopt:pattern2_break_subset]' set +e OUTPUT=$(timeout "$RUN_TIMEOUT_SECS" env NYASH_DISABLE_PLUGINS=1 HAKO_JOINIR_STRICT=1 "$NYASH_BIN" "$INPUT" 2>&1) @@ -21,6 +22,14 @@ fi OUTPUT_CLEAN=$(echo "$OUTPUT" | filter_noise) +if echo "$OUTPUT" | grep -qF "$SHADOW_TAG"; then + echo "[FAIL] Shadow adopt tag must not appear for NotApplicable case: $SHADOW_TAG" + echo "[INFO] Output (raw):" + echo "$OUTPUT" | tail -n 60 || true + test_fail "phase29ab_pattern2_seg_notapplicable_min_vm: Unexpected shadow adopt" + exit 1 +fi + if echo "$OUTPUT_CLEAN" | grep -q "^2$" || echo "$OUTPUT" | grep -q "^RC: 2$"; then test_pass "phase29ab_pattern2_seg_notapplicable_min_vm: promotion not applicable (output: 2)" exit 0