phase29ap(p11): release adopt nested minimal coreplan
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
## Current Focus
|
||||
|
||||
- Phase: `docs/development/current/main/phases/phase-29ap/README.md`
|
||||
- Next: Phase 29ap P11 (planned; see `docs/development/current/main/phases/phase-29ap/README.md`)
|
||||
- Next: Phase 29ap P12 (planned; see `docs/development/current/main/phases/phase-29ap/README.md`)
|
||||
|
||||
## Gate (SSOT)
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev
|
||||
|
||||
## Active
|
||||
|
||||
- Phase 29ap: `docs/development/current/main/phases/phase-29ap/README.md` (Next: P11 planned)
|
||||
- Phase 29ap: `docs/development/current/main/phases/phase-29ap/README.md` (Next: P12 planned)
|
||||
- JoinIR regression gate SSOT: `docs/development/current/main/phases/phase-29ae/README.md`
|
||||
- CorePlan hardening (docs-first): `docs/development/current/main/phases/phase-29al/README.md`
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ Related:
|
||||
## 1.1 Current (active)
|
||||
|
||||
- Active phase: `docs/development/current/main/phases/phase-29ap/README.md`
|
||||
- Next step: Phase 29ap P11 (planned)
|
||||
- Next step: Phase 29ap P12 (planned)
|
||||
|
||||
## 2. すでに固めた SSOT(再発防止の土台)
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ Goal: JoinIR の最小回帰セットを SSOT として固定する。
|
||||
- Pattern6 (strict shadow, VM): `phase29ao_pattern6_strict_shadow_vm`
|
||||
- Pattern6 (release adopt, VM): `phase29ao_pattern6_release_adopt_vm`
|
||||
- Pattern6: `phase29ab_pattern6_*`
|
||||
- Pattern6 (nested minimal release adopt, VM): `phase29ap_pattern6_nested_release_adopt_vm`
|
||||
- Pattern6 (nested minimal strict shadow, VM): `phase29ap_pattern6_nested_strict_shadow_vm`
|
||||
- Pattern7 (strict shadow, VM): `phase29ao_pattern7_strict_shadow_vm`
|
||||
- Pattern7 (release adopt, VM): `phase29ao_pattern7_release_adopt_vm`
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
# Phase 29ap P11: Pattern6_NestedLoopMinimal release adopt (CorePlan default)
|
||||
|
||||
## Goal
|
||||
|
||||
- Route nested minimal loops to CorePlan composer v2 in non-strict/release.
|
||||
- Keep strict/dev tag and fail-fast behavior unchanged.
|
||||
- Preserve legacy fallback when facts are missing.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Release adopt path
|
||||
- Use the same nested facts + composer v2 as strict/dev.
|
||||
- Only adopt when facts are present; otherwise fall back to legacy.
|
||||
- No new tags/logs in release.
|
||||
|
||||
2. Regression gate
|
||||
- Add a release adopt smoke for `phase1883_nested_minimal` (exit code 9).
|
||||
- Ensure no shadow-adopt tag is printed.
|
||||
|
||||
3. Docs
|
||||
- Mark P11 done in `phase-29ap/README.md`.
|
||||
- Advance Now/Backlog/roadmap to next planned step.
|
||||
|
||||
## Verification
|
||||
|
||||
- `cargo build --release`
|
||||
- `./tools/smokes/v2/run.sh --profile quick`
|
||||
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
@ -118,6 +118,16 @@ Gate (SSOT):
|
||||
- Release/default behavior remains unchanged (legacy JoinIR path stays).
|
||||
- Gate stays green.
|
||||
|
||||
## P11: Pattern6_NestedLoopMinimal release adopt ✅
|
||||
|
||||
- Scope:
|
||||
- Non-strict/release adopts the nested minimal CorePlan v2 when facts are present.
|
||||
- Strict/dev tag and fail-fast behavior remain unchanged.
|
||||
- Legacy fallback remains for non-matches.
|
||||
- Guardrails:
|
||||
- No new logs/tags in release.
|
||||
- Gate stays green.
|
||||
|
||||
## Next (planned)
|
||||
|
||||
- P11: Pattern6_NestedLoopMinimal release adopt (TBD; keep strict gate green)
|
||||
- P12: Decide final removal of legacy nested loop entry (gate-first)
|
||||
|
||||
@ -308,6 +308,15 @@ pub(crate) fn route_loop_pattern(
|
||||
}
|
||||
}
|
||||
|
||||
if !strict_or_dev {
|
||||
if let Some(core_plan) =
|
||||
composer::try_release_adopt_nested_minimal(builder, ctx, &outcome)?
|
||||
{
|
||||
PlanVerifier::verify(&core_plan)?;
|
||||
return PlanLowerer::lower(builder, core_plan, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(domain_plan) = domain_plan {
|
||||
|
||||
if let Some(adopt) = composer::try_shadow_adopt_core_plan(
|
||||
|
||||
@ -15,6 +15,7 @@ use crate::mir::builder::MirBuilder;
|
||||
|
||||
pub(in crate::mir::builder) use shadow_adopt::{
|
||||
strict_nested_loop_guard,
|
||||
try_release_adopt_nested_minimal,
|
||||
try_shadow_adopt_nested_minimal,
|
||||
try_release_adopt_core_plan,
|
||||
try_shadow_adopt_core_plan,
|
||||
|
||||
@ -68,6 +68,24 @@ pub(in crate::mir::builder) fn try_shadow_adopt_nested_minimal(
|
||||
}))
|
||||
}
|
||||
|
||||
pub(in crate::mir::builder) fn try_release_adopt_nested_minimal(
|
||||
builder: &mut MirBuilder,
|
||||
ctx: &LoopPatternContext,
|
||||
outcome: &PlanBuildOutcome,
|
||||
) -> Result<Option<CorePlan>, String> {
|
||||
let Some(facts) = outcome.facts.as_ref() else {
|
||||
return Ok(None);
|
||||
};
|
||||
if facts.facts.pattern6_nested_minimal.is_none() {
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
match try_compose_core_loop_v2_nested_minimal(builder, facts, ctx) {
|
||||
Ok(Some(core)) => Ok(Some(core)),
|
||||
Ok(None) | Err(_) => Ok(None),
|
||||
}
|
||||
}
|
||||
|
||||
fn try_compose_core_loop_scan_with_init(
|
||||
builder: &mut MirBuilder,
|
||||
facts: &CanonicalLoopFacts,
|
||||
|
||||
@ -34,6 +34,7 @@ run_filter "pattern5_release_adopt_vm" "phase29ao_pattern5_release_adopt_vm" ||
|
||||
run_filter "pattern6_strict_shadow_vm" "phase29ao_pattern6_strict_shadow_vm" || exit 1
|
||||
run_filter "pattern6_release_adopt_vm" "phase29ao_pattern6_release_adopt_vm" || exit 1
|
||||
run_filter "pattern6" "phase29ab_pattern6_" || exit 1
|
||||
run_filter "pattern6_nested_release_adopt_vm" "phase29ap_pattern6_nested_release_adopt_vm" || exit 1
|
||||
run_filter "pattern6_nested_strict_shadow_vm" "phase29ap_pattern6_nested_strict_shadow_vm" || exit 1
|
||||
run_filter "pattern7_strict_shadow_vm" "phase29ao_pattern7_strict_shadow_vm" || exit 1
|
||||
run_filter "pattern7_release_adopt_vm" "phase29ao_pattern7_release_adopt_vm" || exit 1
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
# phase29ap_pattern6_nested_release_adopt_vm.sh - Pattern6 nested minimal release adopt (VM)
|
||||
#
|
||||
# Expected:
|
||||
# - Exit code 9
|
||||
# - No shadow-adopt tags
|
||||
|
||||
source "$(dirname "$0")/../../../lib/test_runner.sh"
|
||||
require_env || exit 2
|
||||
|
||||
FIXTURE="$NYASH_ROOT/apps/tests/phase1883_nested_minimal.hako"
|
||||
RUN_TIMEOUT_SECS=${RUN_TIMEOUT_SECS:-10}
|
||||
TAG_PREFIX='[coreplan/shadow_adopt:'
|
||||
|
||||
set +e
|
||||
OUTPUT=$(timeout "$RUN_TIMEOUT_SECS" env \
|
||||
-u HAKO_JOINIR_STRICT \
|
||||
-u NYASH_JOINIR_STRICT \
|
||||
-u HAKO_JOINIR_DEBUG \
|
||||
-u NYASH_JOINIR_DEBUG \
|
||||
-u NYASH_JOINIR_DEV \
|
||||
NYASH_DISABLE_PLUGINS=1 \
|
||||
"$NYASH_BIN" --backend vm "$FIXTURE" 2>&1)
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
|
||||
if [ "$EXIT_CODE" -eq 124 ]; then
|
||||
test_fail "phase29ap_pattern6_nested_release_adopt_vm: hakorune timed out (>${RUN_TIMEOUT_SECS}s)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if echo "$OUTPUT" | grep -qF "$TAG_PREFIX"; then
|
||||
echo "[FAIL] Release adopt must not print shadow-adopt tags"
|
||||
echo "$OUTPUT" | tail -n 60 || true
|
||||
test_fail "phase29ap_pattern6_nested_release_adopt_vm: Unexpected tag"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$EXIT_CODE" -ne 9 ]; then
|
||||
echo "[FAIL] Expected exit 9, got $EXIT_CODE"
|
||||
echo "$OUTPUT" | tail -n 40 || true
|
||||
test_fail "phase29ap_pattern6_nested_release_adopt_vm: Unexpected RC"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test_pass "phase29ap_pattern6_nested_release_adopt_vm: PASS (exit=9)"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user