Conversation
…-executor crate Rename crates/asap-physical-operators to crates/executor (package asap-executor), keeping plan/ and physical_planner/ in it as #572's 2026-10-03 update decides. Imports are rewritten without compatibility re-exports. The three stage manifest guards now reject asap-executor; only integration-tests depends on it (#572, B5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 3, 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.
Why
#572 puts each #509 stage in its own crate. Stage 4, the reference executor, stays in this repository as a separate crate that no planning stage depends on. This PR is step B5, the last Phase B step. It renames
asap-physical-operatorstoasap-executor, keepingplan/andphysical_planner/in it, as #572's 2026-10-03 update decides: they compile plans into runtime operators, andplanandruntimeimport each other. It is a pure rename.What
Before this PR
After this PR
cargo tree -i asap-executor -e normal,dev,build --depth 1shows onlyasap-integration-tests, as a dev-dependency. For each ofasap-logical-optimizer,asap-physical-optimizer,asap-plan-selectionandasap-planner,cargo tree -p <crate> -e normal,dev,builddoes not containasap-executor.cargo tree -p asap-executor --depth 1 -e normal,dev:How
git mv crates/asap-physical-operators crates/executor. The package is nowasap-executor, so the library isasap_executor.asap_physical_operators→asap_executoreverywhere: the executor's own tests and README doctest, six integration-tests files, and two docs.asap-executorinstead ofasap-physical-operators. The executor's manifest states the rule.physical_planner/candidates.rs:367and four integration tests (deployment_computation,planspace_series_identity_heap,precompute_candidates,promql_fallback) call the legacyglobal_selection. This is the allowed direction, executor → stage, so no stage crate depends on the executor and nothing needs to move to integration-tests. These call sites go away with Pass 2 sharing and Stage 1 coverage parity with the retired MajorPass #580.Moved files
crates/asap-physical-operators/**(85 files:src/{plan, physical_planner, runtime, operators, sources, summary_kernels, expressions, dag, …}, 18 integration tests, README)crates/executor/**66 files move unchanged; 19 change only in the crate path (
Cargo.toml, README, tests).Volume
99 files changed, +208 / −227. 85 files renamed, about 130 lines rewritten from
asap_physical_operatorstoasap_executor.Final layout versus #572
asap-aware-mappingandasap-physical-operatorsare gone. Dependencies flow one way:logical-optimizer←physical-optimizer(dev only) ←plan-selection←planner;executordepends only ontypes.Deviations from #572's target:
physical-optimizer/materialization/{summary_maintenance_lifecycle, pane_sharing, storage_io}pane_sharingdeleted in #585 (no callers);storage_iois inplan-selection/cost(#572 update). Stage 2 materialization is not built yet.physical-optimizer/implementation/includesquery_physical_loweringand{plan, physical_planner}physical_candidatesquery_physical_loweringgoes to plan-selection,{plan, physical_planner}to the executor.physical-optimizerdepends onlogical-optimizerOperatorNoderoots.plan-selection/accuracy/{erp, empirical_comparison}and theAccuracyModeltraitaccuracy/moduleerpandempirical_comparisondeleted (no callers). The trait remains inlogical-optimizer/src/accuracy/mod.rs, and Stage 1's legacy search still takes it (Q22). Moving it is a behavior change.plan-selection/cost/summary_maintenance_costplan-selection/cost/query_physical_lowering,storage_io,empirical_resourcesempirical_resourcesis the measurement schemaempirical_costuses.candidate_selectionplan_selectionwas added in Phase C after #572 was written;candidate_selectionis deleted under #580.planner/absorbs the pass driverasap-plannerand so on the frontends (see #586).asap-physical-operatorscapability,dag,evaluation,measurement,statistic,key_by_label_values,errorpre_asap_sub_dagkey (tools/dag-viewer/render.py),tools/dag-viewer/post_asap_fixture.json, devtools binsshow_pre_asap_ir/show_post_asap_ir, andasap_types::post_asaptext indag.example.jsonremaintypes/cost.rs(export cost annotations),dag_export.rs,serde_f64.rs,types.rsGate (at the tip)
cargo fmt --all --check: passes.cargo clippy --workspace --all-targets --all-features -- -D warnings: passes.cargo test --workspace: 1,508 passed, 12 ignored, the same as B4b. No test is added or deleted. Compared with refactor: extract the Stage 1 logical-optimizer crate (#572 B2) #583 (1,528): 22 tests deleted with dead modules in refactor(planner): extract the Stage 3 plan-selection crate #585, and 2 manifest guards added (refactor(planner): extract the Stage 2 physical-optimizer crate #584, refactor(planner): extract the Stage 3 plan-selection crate #585).python3 -m unittest discover -s tools/dag-viewer -p test_render.py: OK, 6 skipped.stage_pipeline --example planner-layering-1regeneratestools/dag-viewer/examples/planner-layering-example1.jsonbyte for byte.Part of #572 (B5, completes Phase B) and #509. Follows #586. Related: #580.
🤖 Generated with Claude Code