Conversation
An installed PrecomputeMaterialization now carries its stored output id, source binding, grouping layout, cadence and window layout, retention and semantic fragment. What an output computes is defined only by the Planner DAG node bound to it. Removed: aggregation_type, aggregation_sub_type, parameters, spatial_filter, spatial_filter_normalized, aggregated_labels, rollup_labels, original_yaml, and the derived accumulator_spec() and sample_update_rule() projections. - The stored state family lives in the existing StateSchemaContract (now the lossless Planner SummaryFamilyType); validation requires it to equal the family of any SummaryAgg node that produces the output. - Input predicates, item labels and the PromQL right-closed pane rule are read from the bound DAG producer; the catalog's data descriptors use the same predicate. - The compiler allocates stored_output_id explicitly from the deployment fields and the producer's computation identity. - PolicyRegistry and RoutingIndex are removed; OTLP content matching and the sketch sink read the installed plan directly. - BACKEND_COMPAT is asap-query-backend.v2 and SummaryCatalog schema 7; older plans are rejected on decode by version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Materializations no longer carry their input filter, so an output's population comes only from the DAG node that produces it. Plan validation now rejects: - an output produced by several DAGs that disagree on the update or on the population (metric and canonical filter) they read; - a raw time-series output that has no Planner producer in a plan that carries DAGs, which would otherwise be read as unfiltered; - a bound raw producer whose input is not a source scan. Also keeps plain OTLP sketch envelopes out of shared (Hydra) states, restores the single-catalog descriptor test, and drops comments that still named removed fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
zzylol
changed the base branch from
fix/topk-by-heap-groups
to
refactor/codecs-over-planner-kernels
September 30, 2026 14:38
zzylol
force-pushed
the
refactor/materialization-deployment-only
branch
from
September 30, 2026 14:38
4f367fe to
57baf5d
Compare
This was referenced Sep 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #805.
Why
Installed precompute plans still described each stored output's computation
twice: once as the Planner physical DAG that now runs ingest (#796/#797/#800),
and again as backend fields on
PrecomputeMaterialization(aggregation_type,parameters,spatial_filter,aggregated_labels, …) that were cross-checkedagainst the DAG. The Planner DAG is the only computation definition; the backend
keeps deployment facts. The owner accepted that all old plans become invalid
(development stage, no migration).
What
PrecomputeMaterializationkeeps only deployment fields: stored output id,source binding, grouping, cadence and window layout, retention, semantic
fragment.
aggregation_type,aggregation_sub_type,parameters,spatial_filter(_normalized),aggregated_labels,rollup_labels,original_yaml,accumulator_spec(),sample_update_rule(), plusPolicyRegistryandRoutingIndex.full Planner
SummaryFamilyTypeinStateSchemaContract(validated againstthe producing DAG node); input filter, item label and the PromQL right-closed
pane rule are read from the producer via
PrecomputePlan::summary_producer/population_filter.stored_output_idis assigned explicitly from deployment fields plus theproducer's computation.
population or update, and a raw output with no Planner producer (previously
treated as unfiltered).
Breaking change
BACKEND_COMPATisasap-query-backend.v2and the SummaryCatalog schema is 7.Plans from earlier builds fail to decode with a version error (tested).
Before this PR
After this PR
Known follow-ups (from independent review)
may not decode (plans are installed as JSON).
label for keyed non-top-k sketches.
Validation
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspace(lib, integration and process e2e targets). Anindependent reviewer found two install-time gaps (conflicting producers; missing
producer), both fixed with regression tests that fail without the fix.
🤖 Generated with Claude Code