Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
393 commits
Select commit Hold shift + click to select a range
40fbbac
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
dc213e3
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
fd3a02a
Merge branch 'docs/pr737-design-boundaries' into impl/sds-semantic-id…
zzylol Sep 26, 2026
cb1e237
Merge branch 'impl/sds-semantic-identity' into impl/sds-stack-771
zzylol Sep 26, 2026
14ef72d
refactor(sds): keep semantic variants compact without changing wire f…
zzylol Sep 26, 2026
83f21e9
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
842d5ff
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
4ba0a43
test: align evidence fixtures with selected exact count state
zzylol Sep 26, 2026
a56739d
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
403f547
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
599ea4b
docs: align precompute SDS description with semantic catalog
zzylol Sep 26, 2026
2cabd24
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
b9aa88f
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
af9fec0
test: bind imported-state fixtures to their actual semantic definition
zzylol Sep 26, 2026
c255a5a
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
3d49ed7
test: bind imported-state fixtures to their actual semantic definition
zzylol Sep 26, 2026
ac08158
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
68eb08d
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
17671d6
test: distinguish imported CMS transport from total-count planning
zzylol Sep 26, 2026
ae462e0
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 26, 2026
c4fe412
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 26, 2026
749252d
docs: clarify Planner physical plan and SDS architecture
zzylol Sep 17, 2026
74255ec
docs: specify executable subplan materialization boundaries
zzylol Sep 18, 2026
d048262
docs: scope migration to backend precompute and query plans
zzylol Sep 18, 2026
ae92339
docs: clarify window terminology migration
zzylol Sep 18, 2026
d25d6c9
Revert "docs: clarify window terminology migration"
zzylol Sep 18, 2026
011a6cd
docs: focus physical plan and SDS designs
zzylol Sep 18, 2026
1ca64ed
docs: add physical compiler input example
zzylol Sep 18, 2026
06b26eb
docs: add physical compiler output example
zzylol Sep 18, 2026
9a1c41b
docs: include query expression in compiler example
zzylol Sep 18, 2026
19bc7da
docs: reorganize physical plan integration design
zzylol Sep 18, 2026
8fbe0f3
docs: reorganize SDS and migration designs
zzylol Sep 18, 2026
eb3c3c4
docs: define maintenance inputs before plan split example
zzylol Sep 18, 2026
c9b6ea7
docs: use plan version consistently in backend design
zzylol Sep 18, 2026
4de2df4
docs: remove standalone catalog materialization abstraction
zzylol Sep 18, 2026
9892bed
docs: add concise planner backend glossary
zzylol Sep 18, 2026
1232ce9
docs: clarify selected deployment guarantee terminology
zzylol Sep 21, 2026
158c22a
docs: explain missing planner maintenance guarantee
zzylol Sep 21, 2026
6322175
docs: motivate selected producer maintenance decision
zzylol Sep 21, 2026
8bdb7a7
docs: label catalog reads and SDS metadata ownership
zzylol Sep 21, 2026
813e3e3
docs: align SDS ownership and lifecycle terminology
zzylol Sep 21, 2026
f3bd9d8
docs: use current planner and plan-version names consistently
zzylol Sep 21, 2026
11e21d2
docs: align integration diagram with SDS ownership
zzylol Sep 21, 2026
b4dec9b
docs: clarify instance identity and shared producer wording
zzylol Sep 21, 2026
f300704
docs: distinguish summary definitions from runtime stores
zzylol Sep 22, 2026
520ace6
docs: model one runtime summary store for DAG bindings
zzylol Sep 22, 2026
864c2a2
docs: scope SDS lifecycle to read eligibility
zzylol Sep 22, 2026
e0ab398
docs: tie stored summary examples directly to DAG outputs
zzylol Sep 22, 2026
5f383d1
docs: name summary tables, stored records, and output references by role
zzylol Sep 22, 2026
a2ab168
docs: illustrate summary definitions, stored records, and output refe…
zzylol Sep 22, 2026
d5f5203
docs: limit v1 summary storage to definitions and stored summaries
zzylol Sep 22, 2026
ebf4569
docs: separate Planner physical computation from backend deployment
zzylol Sep 25, 2026
eb60220
docs: bind Planner physical DAGs without backend re-lowering
zzylol Sep 26, 2026
1b36bb7
docs: describe summary inputs with groups and pane duration
zzylol Sep 26, 2026
b12512f
docs: define summary semantic completeness beyond input scope
zzylol Sep 26, 2026
51185de
docs: define SDS identity through canonical Planner computation
zzylol Sep 26, 2026
69b28c2
docs: decouple SDS semantic identity from executable Planner IR
zzylol Sep 26, 2026
5ffc426
docs: define Planner-owned SDS discovery for future ad hoc queries
zzylol Sep 26, 2026
5bcd54c
docs: streamline SDS design around definitions and stored results
zzylol Sep 26, 2026
5b402b8
docs: track bound-query SDS migration across implementation PRs
zzylol Sep 26, 2026
0d9ab8e
docs: identify active shared-library PR in bound-query migration
zzylol Sep 26, 2026
ef6c127
docs: separate bound SDS range lookup from state validation
zzylol Sep 26, 2026
eb94d73
docs: state SDS migration responsibilities without stale implementati…
zzylol Sep 26, 2026
5f1eebf
docs: preserve design index after rebasing onto main
zzylol Sep 28, 2026
8857f25
docs: clarify SDS source identity and version-scoped recovery
zzylol Sep 28, 2026
bccb189
docs: illustrate SDS identity and recovery decisions
zzylol Sep 28, 2026
12896bd
Merge branch 'restack/pr737-main' into impl/sds-semantic-identity
zzylol Sep 28, 2026
bc417b0
Merge branch 'impl/sds-semantic-identity' into impl/sds-stack-771
zzylol Sep 28, 2026
f4d7869
Merge branch 'impl/sds-stack-771' into impl/sds-stack-774
zzylol Sep 28, 2026
6239249
feat: bind Planner dataset semantics to deployment input identity
zzylol Sep 28, 2026
ceffa2e
fix: reject cross-version stored-state adoption
zzylol Sep 28, 2026
3f28f6b
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
5792e2e
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
2767dbb
fix: recognize shared native batch encoding at dependency boundary
zzylol Sep 28, 2026
802f1af
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
5429c24
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
c27dc95
test: reject pre-dataset planning snapshot versions
zzylol Sep 28, 2026
05e1479
refactor: version dataset-bound catalog and update empty-plan fixtures
zzylol Sep 28, 2026
a8cb523
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
1c69950
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
2d22eca
test: enforce whole-query consistency and new-version warm-up
zzylol Sep 28, 2026
e637cb8
docs: describe dataset-bound planning and installation inputs
zzylol Sep 28, 2026
0d67265
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
c4da46d
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
a81f1ba
docs: clarify candidate selection and deployment ownership
zzylol Sep 28, 2026
4e69188
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
8f36745
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
db7052b
docs: align installation guide with dataset and recovery contracts
zzylol Sep 28, 2026
79eb631
refactor: split backend deployment plans and bind stored outputs
zzylol Sep 28, 2026
070fad6
fix: restrict foundation SDS recovery to the installed generation
zzylol Sep 28, 2026
6e3a50b
merge: base typed plan support on rebased foundation
zzylol Sep 28, 2026
d513aa5
merge: carry version-scoped foundation recovery into semantic integra…
zzylol Sep 28, 2026
63e498e
merge: preserve storage contracts after foundation rebase
zzylol Sep 28, 2026
0081ef0
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
3c840ff
fix: allocate fresh physical series when a plan version changes
zzylol Sep 28, 2026
5d6cdbc
Merge branch 'restack/pr749-main' into impl/sds-stack-771
zzylol Sep 28, 2026
3627535
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
f2fc57c
merge: allocate fresh output storage during version warm-up
zzylol Sep 28, 2026
3845a19
fix: reserve the persisted storage handle during recovery
zzylol Sep 28, 2026
1a82255
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
70a8d88
test: record foundation rebase and recovery regression evidence
zzylol Sep 28, 2026
1953a40
Merge branch 'impl/sds-stack-771' into impl/sds-stack-774
zzylol Sep 28, 2026
7b35480
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
ab3bdb6
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
2dbe763
Merge branch 'restack/pr749-main' into impl/sds-stack-771
zzylol Sep 28, 2026
d71032d
fix: complete shared state encoding adoption at the dependency boundary
zzylol Sep 28, 2026
97ed2b6
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
6cdac84
merge: preserve shared decoder ownership and format rejection test
zzylol Sep 28, 2026
b013c91
style: satisfy workspace formatting after the compiler rename
zzylol Sep 28, 2026
38fb552
Merge branch 'restack/pr749-main' into impl/sds-stack-771
zzylol Sep 28, 2026
e48181c
Merge branch 'impl/sds-stack-771' into impl/sds-stack-774
zzylol Sep 28, 2026
7f470d4
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
f56f074
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
d8bf03e
feat(sds): separate bound output routing from persisted semantic iden…
zzylol Sep 26, 2026
42602b9
feat(sds): require dataset-bound Planner definitions and versioned ca…
zzylol Sep 28, 2026
9e0a892
refactor: implement typed summary semantics and physical plan lowering
zzylol Sep 24, 2026
0f05899
fix: validate final SDS semantics across Planner adapters and recovery
zzylol Sep 28, 2026
c556130
test: verify final SDS identity installation, serving and restart
zzylol Sep 28, 2026
d608213
merge: base shared execution on final SDS identity contract in #749
zzylol Sep 28, 2026
07f8ef6
test: align shared execution fixtures with final #749 SDS foundation
zzylol Sep 28, 2026
7f342ae
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
d3f8031
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
3f1db0f
docs: record shared execution directly after the SDS foundation
zzylol Sep 28, 2026
7b28606
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
9ca9ed3
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
f3c9c78
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
e627dbb
fix(control-plane): supply dataset_identity in the API test fixtures
zzylol Sep 28, 2026
890b69c
Remove obsolete SDS wire aliases and persisted metadata migration
zzylol Sep 28, 2026
b1e2c00
Merge commit 'e627dbb329dabcff5a8d18e8796da2b0111efc01' into impl/pr7…
zzylol Sep 28, 2026
ab0a4d7
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
0cef456
fix(data-plane): initialize dataset_identity in the bootstrap ingest …
zzylol Sep 28, 2026
90f9042
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
9cea766
Merge SDS format cleanup while retaining stored-output metadata schema 5
zzylol Sep 28, 2026
53d560e
Reject obsolete state-column syntax in compiler roundtrip coverage
zzylol Sep 28, 2026
a8cfcdd
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
e782a9a
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
7342aea
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
d6f688f
Remove unused materialization wire adapter and propagate recovery errors
zzylol Sep 28, 2026
b234911
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
30803d2
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
9f5467d
Propagate stored-output metadata recovery failures through runtime stack
zzylol Sep 28, 2026
b9f6e66
Keep projection fixtures on the canonical typed encoding
zzylol Sep 28, 2026
e67be26
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
855cfdb
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
f125008
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
621cc6e
Remove superseded deployment API field aliases
zzylol Sep 28, 2026
b07ea9d
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
e21c8cd
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
1dbaaa6
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
edc6de4
fix(control-plane): supply dataset_identity in the API test fixtures
zzylol Sep 28, 2026
40c3e74
fix(control-plane): supply dataset_identity in the API test fixtures
zzylol Sep 28, 2026
334b186
fix(control-plane): supply dataset_identity in the API test fixtures
zzylol Sep 28, 2026
88cd9b1
Merge remote-tracking branch 'refs/remotes/sds-cleanup/query' into im…
zzylol Sep 28, 2026
07525f2
Merge remote-tracking branch 'refs/remotes/sds-cleanup/precompute' in…
zzylol Sep 28, 2026
2177138
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
67b5366
Merge remote-tracking branch 'refs/remotes/sds-cleanup/shared' into i…
zzylol Sep 28, 2026
de04ab7
Preserve current startup plan while merging upstream fixture fixes
zzylol Sep 28, 2026
9e25e45
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
51a686e
Document obsolete-format removals and cleanup validation
zzylol Sep 28, 2026
507cc8f
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
656df5b
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
fc69397
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
f1256f0
Record passing restacked plan, storage and serving checks
zzylol Sep 28, 2026
2c726ce
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
eb120a1
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
802ad10
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
269c774
Remove generated evaluation archives and keep validation summaries
zzylol Sep 28, 2026
97e1285
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
55f94da
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
12dea43
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
be2b593
Normalize validation summary formatting
zzylol Sep 28, 2026
448c28c
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
aed0ec7
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
5e1b3b2
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
09cf67d
Remove PR process reports and defer execution design to shared-runtim…
zzylol Sep 28, 2026
04d5d2d
Own the precompute execution design in the shared-runtime foundation
zzylol Sep 28, 2026
9144358
Keep the expanded precompute design while removing PR evidence bundles
zzylol Sep 28, 2026
31b0edd
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
2a0f8ed
Keep discovery and calibration on dataset-bound snapshot version 3
zzylol Sep 28, 2026
f4a7653
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
226dc80
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
bacbbb3
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
84e9468
Use typed deployment configuration in process E2E fixtures
zzylol Sep 28, 2026
ec36ae9
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
3eaae03
Integrate foundation CI fixes while preserving physical-plan-only sta…
zzylol Sep 28, 2026
98eea3f
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
8f4a171
Remove unused streaming-config fixture after physical-only startup
zzylol Sep 28, 2026
1938ca8
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
c11a540
Align process assertions with dataset-bound SDS and cold successor ac…
zzylol Sep 28, 2026
302ab25
Merge branch 'impl/pr749-final-sds' into impl/sds-stack-774
zzylol Sep 28, 2026
99ce6c1
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
5bb977c
Integrate SDS process fixes preserving query-stage heap fixture contr…
zzylol Sep 28, 2026
c32094c
Align stack ancestry with the verified SDS foundation squash on main
zzylol Sep 28, 2026
97929bd
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
18bb875
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
0d7ac30
fix: execute typed Planner fragments and preserve terminal resource e…
zzylol Sep 28, 2026
f5090c3
Merge remote-tracking branch 'origin/main' into impl/sds-stack-774
zzylol Sep 28, 2026
268039b
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
77679a4
fix: bind exact integer samples without losing input types
zzylol Sep 28, 2026
556a87d
merge: preserve typed physical execution through query DAG integration
zzylol Sep 28, 2026
028e7af
test: retain resource failures across summary DAG execution
zzylol Sep 28, 2026
3a47a1b
fix: treat cooperative query yields as pending execution
zzylol Sep 28, 2026
17da11e
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
2ba4d6a
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
1f0ad1d
test: verify exact integer protocol input binding
zzylol Sep 28, 2026
626faad
refactor: name per-boundary physical fragments explicitly
zzylol Sep 28, 2026
61d5019
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
e29cc16
merge: align physical fragment bindings with shared foundation
zzylol Sep 28, 2026
d48ddce
fix: consume finalized Planner query candidate outputs
zzylol Sep 28, 2026
8f1a403
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
ad711aa
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
663a6d6
test: expose terminal error masking during revision changes
zzylol Sep 28, 2026
e42b0c1
test: require Planner filters for bound protocol vectors
zzylol Sep 28, 2026
9046b35
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
87f6d4f
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
96e31e3
test: use Planner schema lifting module
zzylol Sep 28, 2026
bb0b20e
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
bb97871
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
dbf18b0
fix: bind Planner filters and finalized query results
zzylol Sep 28, 2026
89fe60e
fix: preserve terminal execution errors before revision fencing
zzylol Sep 28, 2026
6292765
docs: describe bound Planner filter execution
zzylol Sep 28, 2026
e260694
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
70fcdb0
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
f04fd0b
refactor: return typed execution error directly
zzylol Sep 28, 2026
23e08ac
fix: retain state binding and sharing beneath explicit query readouts
zzylol Sep 28, 2026
46c7070
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
7233f40
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
22c7d4f
fix: pin Planner query finalization for every candidate entry point
zzylol Sep 28, 2026
a93328c
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
8037317
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
e26c787
docs: distinguish query values from stored accumulator boundaries
zzylol Sep 28, 2026
41093e6
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
0a75d27
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
a061df2
test: assert exact Count state beneath its query readout
zzylol Sep 28, 2026
f88d987
Merge branch 'impl/sds-stack-774' into impl/sds-stack-763
zzylol Sep 28, 2026
1a6f689
Merge branch 'impl/sds-stack-763' into impl/sds-stack-765
zzylol Sep 28, 2026
1c7833c
Merge main after shared physical operator foundation was squash-merged
zzylol Sep 28, 2026
2b2b2b4
fix: preserve maintenance failures and stop failed worker admission
zzylol Sep 28, 2026
4aac569
docs: specify bounded revisions and consistent query snapshots
zzylol Sep 28, 2026
8563c71
feat: execute bounded precompute revisions with consistent SDS reads
zzylol Sep 28, 2026
b3069e6
Merge main counter-delta cleanup into precompute revisions
zzylol Sep 29, 2026
4ba52cf
Merge remote-tracking branch 'origin/fix/precompute-post-asap-dag' in…
zzylol Sep 29, 2026
6e90272
Merge main after continuous precompute revisions were merged
zzylol Sep 29, 2026
c54f01b
fix: enforce query-wide resource and snapshot contracts
zzylol Sep 29, 2026
b83377a
test: reject deployment candidates without snapshot agreement
zzylol Sep 29, 2026
0c8a128
docs: clarify local versus external query input candidates
zzylol Sep 29, 2026
96251f7
test: retain Float64 formatting in external-only SQL oracle
zzylol Sep 29, 2026
4be85e7
docs: clarify precomputation terminology and remove stale review notes
zzylol Sep 29, 2026
6a85910
docs: structure query DAG design around ownership and execution contr…
zzylol Sep 29, 2026
0ea266d
docs: align query execution layers with Planner physical candidates
zzylol Sep 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 17 additions & 31 deletions control_plane/src/clickhouse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1413,7 +1413,7 @@ mod tests {
}

#[tokio::test]
async fn compiles_summary_joined_with_exact_table_into_mixed_dag() {
async fn rejects_mixed_snapshots_and_preserves_local_sql_contracts() {
let config = materialization(
AggregationType::Sum,
"value",
Expand Down Expand Up @@ -1461,14 +1461,10 @@ mod tests {
("telemetry".into(), timestamped("timestamp_ms", "value")),
(
"divisors".into(),
Schema::with_time_index(
vec![
Column::new("timestamp", DataType::Int64, false),
Column::new("divisor", DataType::Float64, false),
],
0,
vec![],
),
Schema::new(vec![
Column::new("timestamp", DataType::Int64, false),
Column::new("divisor", DataType::Float64, false),
]),
),
]),
accuracy: AccuracyTarget::Exact,
Expand All @@ -1479,6 +1475,16 @@ mod tests {
cumulative: true,
}],
};
let Err(error) = compile_clickhouse_workload(&request).await else {
panic!("local summary joined to an external table needs a common snapshot proof");
};
assert!(
error.to_string().contains("common snapshot proof"),
"{error}"
);
request.queries[0].sql =
"SELECT sum(value) FROM telemetry WHERE timestamp_ms >= 0 AND timestamp_ms < 2000"
.into();
let publication = compile_clickhouse_workload(&request).await.unwrap();
// A simple installed aggregate publishes the same key as a refresh.
let simple_sql =
Expand Down Expand Up @@ -1682,31 +1688,11 @@ mod tests {
> installed.document.nodes.len()
);
let entry = publication.query_plan.entries.values().next().unwrap();
// External SQL retains its literal time range until it can be bound.
assert!(!entry.canonical_query.starts_with("moving-window-v1:"));
assert!(entry
assert!(!entry
.nodes
.values()
.any(|node| matches!(node, crate::query_plan::QueryPlanNode::ExternalExact { .. })));
assert!(entry.nodes.values().any(|node| matches!(
node,
crate::query_plan::QueryPlanNode::ReadMaterialization { .. }
)));
assert!(entry.nodes.values().any(|node| matches!(
node,
crate::query_plan::QueryPlanNode::RelationalJoin { .. }
)));
assert!(entry.nodes.values().any(|node| {
let crate::query_plan::QueryPlanNode::Relational { operation, .. } = node else {
return false;
};
matches!(
serde_json::from_value::<planner_types::post_asap::ValueOperation>(
operation.clone()
),
Ok(planner_types::post_asap::ValueOperation::Project { .. })
)
}));
assert!(!entry.materialization_bindings().is_empty());
let original = request.queries[0].sql.clone();
let schema = request.tables.get_mut("telemetry").unwrap();
schema.columns[schema.time_index.unwrap()].name = "other_timestamp".into();
Expand Down
30 changes: 6 additions & 24 deletions control_plane/src/physical/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5064,36 +5064,18 @@ pub(crate) mod tests {
}

#[test]
fn metricsql_counter_gate_preserves_an_independent_summary_sibling() {
fn metricsql_counter_gate_rejects_mixed_input_snapshots() {
let mut workload = request("mixed", "max_over_time(m[1m]) + rate(m[1m])");
workload.allow_mixed_summary_and_exact_execution = true;
let mut deployment = environment(10_000);
deployment.target = PhysicalDeploymentTarget::BackendLocalRemoteWrite;
deployment.target_collector_ids.clear();
let plan = DeploymentPlanCompiler
.compile_metricsql(workload, deployment)
.unwrap();
assert!(!plan.precompute_plan.materializations.is_empty());
assert!(plan
.precompute_plan
.materializations
.iter()
.all(|m| !matches!(
m.aggregation_type,
asap_types::AggregationType::Increase | asap_types::AggregationType::Rate
)));
let entry = plan.query_plan.entries.values().next().unwrap();
assert!(!entry.materialization_bindings().is_empty());
let Err(error) = DeploymentPlanCompiler.compile_metricsql(workload, deployment) else {
panic!("mixed local/external snapshots must fail deployment binding");
};
assert!(
entry.nodes.values().any(|node| matches!(
node,
crate::query_plan::QueryPlanNode::ExternalExact { .. }
| crate::query_plan::QueryPlanNode::Logical {
operator:
crate::query_plan::residual::ResidualQueryOperator::ExactSubquery { .. },
..
}
))
error.to_string().contains("common snapshot proof"),
"{error}"
);
}

Expand Down
1 change: 1 addition & 0 deletions control_plane/src/physical/maintained_population.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ pub(super) fn operator(
without: input.without,
},
lookback_ms: input.lookback_ms,
history_retention_ms: request.query_retention_margin_ms,
max_k: spec.max_k as u64,
quantiles: spec.quantiles,
max_bytes,
Expand Down
24 changes: 19 additions & 5 deletions control_plane/src/physical/workload_cost.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1069,7 +1069,7 @@ mod tests {
}

#[test]
fn mixed_materialization_masks_price_state_and_prometheus_subquery_sources() {
fn materialization_masks_reject_mixed_snapshots_before_costing() {
let mut snapshot = fixture();
let q = &mut snapshot.query_workload.repeating_queries.as_mut().unwrap()[0];
q.query =
Expand All @@ -1082,18 +1082,30 @@ mod tests {
assert_eq!(
candidates.len(),
5,
"four legal candidate key sets plus native"
"four proposed candidate key sets plus native"
);
let mut identities = BTreeSet::new();
let mut rejected = 0;
for candidate in &candidates[..4] {
let enabled = candidate
.enabled_materialization_keys
.as_ref()
.unwrap()
.len();
let plan = DeploymentPlanCompiler
.compile_promql(candidate.clone(), environment.clone())
.unwrap();
let result =
DeploymentPlanCompiler.compile_promql(candidate.clone(), environment.clone());
if enabled == 1 {
let Err(error) = result else {
panic!("mixed snapshots must fail binding");
};
assert!(
error.to_string().contains("common snapshot proof"),
"{error}"
);
rejected += 1;
continue;
}
let plan = result.unwrap();
assert!(identities.insert(plan.envelope.plan_id));
let cost = manifest(&plan, &candidate.queries).unwrap();
assert_eq!(
Expand Down Expand Up @@ -1128,6 +1140,8 @@ mod tests {
crate::query_plan::QueryPlanNode::ExactFallback { .. }
))));
}
assert_eq!(rejected, 2);
assert_eq!(identities.len(), 2);
assert!(
!candidates
.last()
Expand Down
136 changes: 136 additions & 0 deletions crates/asap_types/src/query_plan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ impl QueryPlan {
}

pub fn lookup(&self, promql: &str) -> Result<&QueryPlanEntry, QueryPlanError> {
// Installed entries already carry validated canonical identities. The
// common exact spelling requires no serving-time parser invocation.
if let Some(entry) = self.entries.get(promql).filter(|entry| {
entry.language == QueryLanguage::PromQl && entry.canonical_query == promql
}) {
return Ok(entry);
}
let identity = canonical_promql(promql)?;
self.lookup_canonical(QueryLanguage::PromQl, &identity)
}
Expand Down Expand Up @@ -375,15 +382,48 @@ impl QueryPlanEntry {
topological_order(root, &self.nodes)
}

/// The current external adapters provide evaluation time, not a snapshot
/// token compatible with local SDS or current-series revisions.
pub fn validate_snapshot_sources(&self) -> Result<(), QueryPlanError> {
use residual::ResidualQueryOperator;
let mut local = false;
let mut external = false;
for id in self.topological_order()? {
match &self.nodes[&id] {
QueryPlanNode::ReadMaterialization { .. }
| QueryPlanNode::Logical {
operator: ResidualQueryOperator::CurrentSeries { .. },
..
} => local = true,
QueryPlanNode::ExternalExact { .. }
| QueryPlanNode::Logical {
operator:
ResidualQueryOperator::ExactSubquery { .. }
| ResidualQueryOperator::CandidateExactSubquery { .. },
..
} => external = true,
_ => {}
}
}
if local && external {
return Err(QueryPlanError::UnsupportedNode(
"local state and external exact input have no common snapshot proof".into(),
));
}
Ok(())
}

/// Validate references, bindings, reachability, and cycles before activation.
pub fn validate(&self, available: &BTreeSet<PolicyFingerprint>) -> Result<(), QueryPlanError> {
self.validate_snapshot_sources()?;
if !self.nodes.contains_key(&self.root) {
return Err(QueryPlanError::Invalid(format!(
"query `{}` has missing root {}",
self.query_id, self.root.0
)));
}
for (id, node) in &self.nodes {
validate_native_relation(*id, node)?;
if let QueryPlanNode::PhysicalFragment {
inputs,
dag,
Expand Down Expand Up @@ -853,3 +893,99 @@ mod contract_tests {
assert_send_sync::<super::QueryPlanEntry>();
}
}

/// Bind portable relation semantics before an installed plan can access its sources.
fn validate_native_relation(id: QueryNodeId, node: &QueryPlanNode) -> Result<(), QueryPlanError> {
use planner_types::post_asap::{
ExecutableDagNode, ExecutableOperatorPayload as Payload, ExecutionDataState, PostAsapNodeId,
};
use std::sync::Arc;
let invalid = |error: String| QueryPlanError::Invalid(format!("query node {}: {error}", id.0));
let (payload, inputs, output) = match node {
QueryPlanNode::Relational {
operation,
input_schema,
output_schema,
..
} => (
Payload::Value {
operation: serde_json::from_value(operation.clone())
.map_err(|e| invalid(e.to_string()))?,
},
vec![Arc::new(input_schema.clone())],
output_schema,
),
QueryPlanNode::RelationalJoin {
join_kind,
pred,
left_schema,
right_schema,
output_schema,
pruning,
..
} => (
Payload::RelationalJoin {
join_kind: join_kind.clone(),
pred: serde_json::from_value(pred.clone()).map_err(|e| invalid(e.to_string()))?,
pruning: serde_json::from_value(
serde_json::to_value(pruning).map_err(|e| invalid(e.to_string()))?,
)
.map_err(|e| invalid(e.to_string()))?,
},
vec![
Arc::new(left_schema.clone()),
Arc::new(right_schema.clone()),
],
output_schema,
),
_ => return Ok(()),
};
let node = ExecutableDagNode {
id: PostAsapNodeId(0),
payload,
output_state: ExecutionDataState::QUERY_ROWS,
output_schema: output.clone(),
guarantee: None,
};
asap_physical_operators::physical_planner::compile_node(&node, &inputs)
.map_err(|e| invalid(e.to_string()))?;
Ok(())
}

#[cfg(test)]
mod native_binding_tests {
use super::*;
use planner_types::{
post_asap::{SummaryFamilyType, SummaryField, SummarySchema, ValueOperation},
pre_asap::{DataType, Predicate, QueryExpr},
};

// Unsupported expressions fail installation without evaluating any source.
#[test]
fn rejects_unimplemented_relation_predicate_before_execution() {
let schema = SummarySchema {
fields: vec![SummaryField {
name: "value".into(),
dtype: SummaryFamilyType::Plain(DataType::Float64),
nullable: false,
}],
time_index: None,
};
let node = QueryPlanNode::Relational {
input: QueryNodeId(0),
operation: serde_json::to_value(ValueOperation::Filter {
pred: Predicate(
QueryExpr::FunctionCall {
name: "unimplemented_predicate".into(),
args: vec![],
}
.into(),
),
})
.unwrap(),
input_schema: schema.clone(),
output_schema: schema,
};
assert!(validate_native_relation(QueryNodeId(1), &node).is_err());
}
}
5 changes: 5 additions & 0 deletions crates/asap_types/src/query_plan/current_series.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ pub struct SeriesPopulation {
pub grouping: Grouping,
pub lookback_ms: u64,
pub max_input_lag_ms: u64,
/// Admitted historical distance behind ingestion; zero retains current state only.
#[serde(default)]
pub history_retention_ms: u64,
pub max_series: usize,
pub max_bytes: u64,
pub max_k: u64,
Expand All @@ -28,6 +31,7 @@ impl SeriesPopulation {
|| self.lookback_ms > i64::MAX as u64
|| self.max_input_lag_ms == 0
|| self.max_input_lag_ms > self.lookback_ms
|| self.history_retention_ms > i64::MAX as u64
|| self.max_series == 0
|| self.max_series > 100_000
|| self.max_bytes == 0
Expand Down Expand Up @@ -67,6 +71,7 @@ mod tests {
},
lookback_ms: 1_000,
max_input_lag_ms: 1_000,
history_retention_ms: 0,
max_series: 100,
max_bytes: 1_000_000,
max_k: 3,
Expand Down
8 changes: 8 additions & 0 deletions data_plane/examples/audit_clickhouse_fallback.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,14 @@ async fn main() {
"clickhouse_exception_code": headers.get("x-clickhouse-exception-code").and_then(|v| v.to_str().ok()),
"result": body,
}),
ClickHouseAccelerationOutcome::Failed(error) => json!({
"id": row.id,
"fallback_requested": false,
"exact_executed": false,
"exact_success": false,
"execution_error": error.to_string(),
"result": body,
}),
ClickHouseAccelerationOutcome::Accelerated(_) => json!({
"id": row.id,
"fallback_requested": false,
Expand Down
1 change: 1 addition & 0 deletions data_plane/src/drivers/ingest/prometheus_remote_write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1003,6 +1003,7 @@ mod tests {
snapshot_sha256: reference.snapshot_sha256,
};
let active = RuntimePhysicalPlan {
readout_programs: Default::default(),
envelope: envelope.clone(),
summary_catalog: Some(catalog),
precompute_plan: PrecomputePlan {
Expand Down
Loading
Loading