Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
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
3c840ff
fix: allocate fresh physical series when a plan version changes
zzylol Sep 28, 2026
70a8d88
test: record foundation rebase and recovery regression evidence
zzylol Sep 28, 2026
b013c91
style: satisfy workspace formatting after the compiler rename
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
3f1db0f
docs: record shared execution directly after the SDS foundation
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
53d560e
Reject obsolete state-column syntax in compiler roundtrip coverage
zzylol Sep 28, 2026
d6f688f
Remove unused materialization wire adapter and propagate recovery errors
zzylol Sep 28, 2026
b9f6e66
Keep projection fixtures on the canonical typed encoding
zzylol Sep 28, 2026
621cc6e
Remove superseded deployment API field aliases
zzylol Sep 28, 2026
51a686e
Document obsolete-format removals and cleanup validation
zzylol Sep 28, 2026
f1256f0
Record passing restacked plan, storage and serving checks
zzylol Sep 28, 2026
269c774
Remove generated evaluation archives and keep validation summaries
zzylol Sep 28, 2026
be2b593
Normalize validation summary formatting
zzylol Sep 28, 2026
09cf67d
Remove PR process reports and defer execution design to shared-runtim…
zzylol Sep 28, 2026
2a0f8ed
Keep discovery and calibration on dataset-bound snapshot version 3
zzylol Sep 28, 2026
84e9468
Use typed deployment configuration in process E2E fixtures
zzylol Sep 28, 2026
c11a540
Align process assertions with dataset-bound SDS and cold successor ac…
zzylol Sep 28, 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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ uuid
/store/

.claude/

# Generated evaluation archives stay outside version control.
/docs/evaluation/**/*.gz
33 changes: 15 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 5 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ resolver = "2"
members = [
"crates/asap_otel_proto",
"crates/asap_types",
"crates/asap_sketch_codec",
"data_plane",
"control_plane",
]
Expand All @@ -11,19 +12,13 @@ members = [
edition = "2021"
version = "0.1.0"

# ASAPCollector's `asap-precompute-rs` currently declares Sketchlib as a
# relative path. When Collector is consumed from Git, resolve that dependency
# to the same Git-sourced Sketchlib package as the backend.
[patch."https://github.com/ProjectASAP/ASAPCollector"]
asap_sketchlib = { git = "https://github.com/ProjectASAP/asap_sketchlib", branch = "main" }

[workspace.dependencies]
# Keep Planner frontends, selection, and IR on the same immutable revision.
# Alias upstream asap-types because this workspace also defines asap_types.
planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cd7e9e0f710816d49190dabd6c789359067a208f" }
asap-aware-mapping = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cd7e9e0f710816d49190dabd6c789359067a208f" }
asap-frontend-promql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cd7e9e0f710816d49190dabd6c789359067a208f" }
asap-frontend-sql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cd7e9e0f710816d49190dabd6c789359067a208f" }
planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "bccc837f5caf21c888b2cce73c64a1be283b679a" }
asap-aware-mapping = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "bccc837f5caf21c888b2cce73c64a1be283b679a" }
asap-frontend-promql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "bccc837f5caf21c888b2cce73c64a1be283b679a" }
asap-frontend-sql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "bccc837f5caf21c888b2cce73c64a1be283b679a" }

# Shared external deps (used by 2+ crates)
serde = { version = "1.0", features = ["derive"] }
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ git -C ../ASAPCollector checkout main

[MVP CI](.github/workflows/mvp-ci.yml) is the source for compatible dependency
checkouts; currently Collector uses its default branch. For reproducible runs,
record all three exact revisions. ASAPPlanner is fetched at the revision pinned
in Cargo manifests; do not substitute an unrelated local planner checkout.
record the exact revisions. ASAPPlanner is fetched at the revision pinned in
the Cargo manifests; do not substitute an unrelated local planner checkout.

### 2. Check prerequisites and build

Expand Down
2 changes: 1 addition & 1 deletion control_plane/examples/audit_clickhouse_corpus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ fn publication_inputs(schema: &Schema, sql: String) -> ClickHouseSqlWorkload {
)
.unwrap();
let reference = sds.reference().unwrap();
precompute_plan.summary_catalog = Some(reference.clone());
precompute_plan.bind_catalog(&sds).unwrap();
transmission_plan.summary_catalog = Some(reference);
ClickHouseSqlWorkload {
summary_catalog: sds,
Expand Down
22 changes: 6 additions & 16 deletions control_plane/examples/calibration_candidates.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Export every bindable candidate for isolated measurement, without selecting a winner.
use control_plane::physical::{
compiler::{BackendLocalPlanningInput, PhysicalPlanCompiler},
compiler::{BackendLocalPlanningInput, DeploymentPlanCompiler},
workload_cost,
};
use planner_types::post_asap::{SummaryExpr, SummaryNode};
Expand Down Expand Up @@ -37,17 +37,6 @@ fn planner_forest(queries: &[control_plane::physical::compiler::QueryCompilation
vec![lhs, rhs],
json!({"operator_debug":format!("{operator:?}"),"timing_debug":format!("{timing:?}")}),
),
SummaryExpr::CandidateTopK {
candidates,
values,
k,
grouping,
completeness,
} => (
"CandidateTopK",
vec![candidates, values],
json!({"k":k,"grouping_debug":format!("{grouping:?}"),"completeness_debug":format!("{completeness:?}")}),
),
SummaryExpr::ValueOperation {
child,
operation,
Expand Down Expand Up @@ -84,10 +73,11 @@ fn planner_forest(queries: &[control_plane::physical::compiler::QueryCompilation
right,
kind,
pred,
pruning,
} => (
"RelationalJoin",
vec![left, right],
json!({"kind_debug":format!("{kind:?}"),"predicate_debug":format!("{pred:?}")}),
json!({"kind_debug":format!("{kind:?}"),"predicate_debug":format!("{pred:?}"), "pruning_debug":format!("{pruning:?}")}),
),
SummaryExpr::SummarySubtract { left, right } => {
("SummarySubtract", vec![left, right], json!({}))
Expand All @@ -105,7 +95,7 @@ fn planner_forest(queries: &[control_plane::physical::compiler::QueryCompilation
vec![summary_input],
json!({"query_debug":format!("{query:?}")}),
),
SummaryExpr::SummaryMerge { children } => {
SummaryExpr::SummaryMerge { children, .. } => {
("SummaryMerge", children.iter().collect(), json!({}))
}
};
Expand Down Expand Up @@ -138,9 +128,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let enabled_materialization_keys = candidate.enabled_materialization_keys.clone();
let planner_selected_queries = planner_forest(&queries);
let compiled = if metricsql {
PhysicalPlanCompiler.compile_metricsql(candidate, environment.clone())
DeploymentPlanCompiler.compile_metricsql(candidate, environment.clone())
} else {
PhysicalPlanCompiler.compile_promql(candidate, environment.clone())
DeploymentPlanCompiler.compile_promql(candidate, environment.clone())
};
let plan = match compiled {
Ok(plan) => plan,
Expand Down
8 changes: 1 addition & 7 deletions control_plane/examples/offline_planner_replay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ fn inspect(
inspect(summary_input, model, seen, states, raw)
}
SummaryExpr::ValueOperation { child, .. } => inspect(child, model, seen, states, raw),
SummaryExpr::SummaryMerge { children } => {
SummaryExpr::SummaryMerge { children, .. } => {
for child in children {
inspect(child, model, seen, states, raw);
}
Expand All @@ -82,12 +82,6 @@ fn inspect(
inspect(lhs, model, seen, states, raw);
inspect(rhs, model, seen, states, raw);
}
SummaryExpr::CandidateTopK {
candidates, values, ..
} => {
inspect(candidates, model, seen, states, raw);
inspect(values, model, seen, states, raw);
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions control_plane/examples/workload_cost_manifest.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Emit pricing requirements; never fabricate quotes or publish a plan.
use control_plane::physical::{
compiler::BackendLocalPlanningInput, compiler::PhysicalPlanCompiler, workload_cost,
compiler::BackendLocalPlanningInput, compiler::DeploymentPlanCompiler, workload_cost,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
Expand All @@ -14,7 +14,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
.into_iter()
.filter_map(|candidate| {
let queries = candidate.queries.clone();
PhysicalPlanCompiler
DeploymentPlanCompiler
.compile_promql(candidate, environment.clone())
.and_then(|plan| workload_cost::manifest(&plan, &queries))
.ok()
Expand Down
Loading
Loading