@@ -442,41 +442,52 @@ async fn push_cumulative_entries(
442442 // succeeds only when all three are accepted.
443443 let plan_id = PLAN_ID_COUNTER . fetch_add ( 1 , Ordering :: Relaxed ) ;
444444 let generated_at_unix_ms = now_unix_ms ( ) ;
445- let plan_bytes = match crate :: backend_plan:: from_stage_config (
445+ let backend_plan = match crate :: backend_plan:: from_stage_config (
446446 & cumulative_be,
447447 monitors,
448448 plan_id,
449449 generated_at_unix_ms,
450450 ) {
451- Ok ( plan) => plan. encode_to_vec ( ) ,
451+ Ok ( plan) => plan,
452452 Err ( e) => {
453453 warn ! ( error = %e, "backend_plan::from_stage_config failed; refusing partial publication" ) ;
454454 return PushOutcome :: EmitFailed ;
455455 }
456456 } ;
457- let precompute_plan = PrecomputePlan {
458- envelope : PlanEnvelope {
459- plan_id,
460- plan_version : 1 ,
461- generated_at_unix_ms,
462- activation_unix_ms : generated_at_unix_ms,
463- expiry_unix_ms : None ,
464- backend_compat : "asap-query-backend.v1" . into ( ) ,
465- planner_revision : crate :: physical:: compiler:: PLANNER_REVISION . into ( ) ,
466- capability_snapshot_id : "replanner" . into ( ) ,
467- } ,
468- materializations : match cumulative_be
469- . aggregations
470- . iter ( )
471- . map ( crate :: backend_plan:: aggregation_config_for_materialization)
472- . collect :: < anyhow:: Result < Vec < _ > > > ( )
473- {
474- Ok ( materializations) => materializations,
475- Err ( error) => {
476- warn ! ( %error, "failed to build typed PrecomputePlan" ) ;
477- return PushOutcome :: EmitFailed ;
478- }
479- } ,
457+ let plan_bytes = backend_plan. encode_to_vec ( ) ;
458+ let precompute_envelope = PlanEnvelope {
459+ plan_id,
460+ plan_version : 1 ,
461+ generated_at_unix_ms,
462+ activation_unix_ms : generated_at_unix_ms,
463+ expiry_unix_ms : None ,
464+ backend_compat : "asap-query-backend.v1" . into ( ) ,
465+ planner_revision : crate :: physical:: compiler:: PLANNER_REVISION . into ( ) ,
466+ capability_snapshot_id : "replanner" . into ( ) ,
467+ } ;
468+ let materializations = match cumulative_be
469+ . aggregations
470+ . iter ( )
471+ . map ( crate :: backend_plan:: aggregation_config_for_materialization)
472+ . collect :: < anyhow:: Result < Vec < _ > > > ( )
473+ {
474+ Ok ( materializations) => materializations,
475+ Err ( error) => {
476+ warn ! ( %error, "failed to build typed PrecomputePlan" ) ;
477+ return PushOutcome :: EmitFailed ;
478+ }
479+ } ;
480+ let precompute_plan = match PrecomputePlan :: build (
481+ precompute_envelope,
482+ materializations,
483+ & backend_plan,
484+ & [ "legacy-replanner" . into ( ) ] ,
485+ ) {
486+ Ok ( plan) => plan,
487+ Err ( error) => {
488+ warn ! ( %error, "failed to validate typed PrecomputePlan" ) ;
489+ return PushOutcome :: EmitFailed ;
490+ }
480491 } ;
481492
482493 // Storage-routing: the routing classifier (`build_routing_entry` in
0 commit comments