Skip to content

feat(asap_types): retire WindowType in favor of asap_ir::WindowKind - #405

Merged
zzylol merged 1 commit into
mainfrom
feat/window-type-to-window-kind
Jul 21, 2026
Merged

zzylol merged 1 commit into
mainfrom
feat/window-type-to-window-kind

Conversation

@zzylol

@zzylol zzylol commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • WindowType (Tumbling/Sliding) was a local duplicate of asap_ir::intent_algebra::query_expr::WindowKind (Tumbling/Sliding/Session) -- same concept, this workspace's copy just lacked the Session variant.
  • ASAPController PR refactor(legacy_expr): step γ2 — SketchAgg un-fusion bridge #143 (merged) added the serving-time traits this workspace's real call sites need (Copy/Default/Hash/Display/FromStr, #[serde(rename_all = "snake_case")]) directly to WindowKind.
  • Bumps the pinned asap-ir/asap-sketch/asap-plan rev to that merge commit (7fcaf914d87e71407c3a6d7ccac613b867f9c11b), adds asap-ir as a new dependency of asap_types, and re-exports WindowKind from asap_types::enums in WindowType's place. All ~35 real call sites renamed WindowType -> WindowKind.
  • This is asap_types (and transitively data_plane)'s first-ever dependency on an ASAPController crate -- previously only control_plane depended on them. WindowType lived in the shared crate with real data_plane call sites, so a genuine merge (not just adding Session locally) meant crossing that boundary; discussed and confirmed with the user before making the ASAPController-side change.
  • Pure rename -- same Tumbling default, same lowercase Display/FromStr round-trip, same wire format (AggregationConfig's direct-derive JSON/YAML and the hand-rolled "windowType" field both unaffected). No logic changed.

Test plan

  • cargo build --workspace -- clean
  • cargo test -p asap_types -p control_plane -p data_plane --no-run -- all lib/bin/test/bench targets compile
  • cargo test -p asap_types --lib -- 36 passed, 0 failed
  • cargo test -p control_plane --lib -- 822 passed, 1 pre-existing unrelated failure (confirmed also failing on main pre-change)
  • cargo test -p data_plane --lib -- --test-threads=1 -- 881 passed, 0 failed, 2 ignored (7 failures under default parallel threading were confirmed to be disk-I/O test-isolation flakiness on this sandbox, not a regression -- each passes individually and the full suite passes single-threaded)
  • rustfmt applied to touched files only

🤖 Generated with Claude Code

WindowType (Tumbling/Sliding) was a local duplicate of the same
concept ASAPController's IR already models as WindowKind
(Tumbling/Sliding/Session), just missing the Session variant and the
serving-time traits (Copy/Default/Hash/Display/FromStr, snake_case
serde) this workspace's real call sites need. ASAPController PR #143
added those upstream; this bumps the pinned asap-ir/asap-sketch/
asap-plan rev to the merge commit and re-exports WindowKind from
asap_types::enums in WindowType's place.

First-ever asap-ir dependency for asap_types (and transitively
data_plane) -- previously only control_plane depended on
ASAPController crates. WindowType lived in the shared crate and had
~35 real data_plane call sites, so unifying it for real (not just
adding a Session variant locally) meant crossing that boundary.

Pure rename at every call site -- same Tumbling default, same
lowercase Display/FromStr round-trip, same wire format. No logic
changed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@zzylol
zzylol merged commit 83b7161 into main Jul 21, 2026
@zzylol
zzylol deleted the feat/window-type-to-window-kind branch July 21, 2026 15:59
zzylol added a commit that referenced this pull request Jul 21, 2026
…rs tests

Picked up by rebasing onto main post-#405 (WindowType retired in
favor of asap_ir::WindowKind). Test-only fixture reference, no
behavior change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
zzylol added a commit that referenced this pull request Jul 22, 2026
…rs tests

Picked up by rebasing onto main post-#405 (WindowType retired in
favor of asap_ir::WindowKind). Test-only fixture reference, no
behavior change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
zzylol added a commit that referenced this pull request Jul 22, 2026
…ed params + grouping) (#401)

* feat(asap_types, data_plane): split AggregationType into AccumulatorSpec

Step 5 of the sketch-identity unification (scratchpad/artifacts/enum-
unification-plan.md, section 6/8). data_plane's AggregationConfig has
represented "which accumulator to run, on what, with what parameters"
as three loosely-typed things: a 16-variant AggregationType enum that
conflates sketch identity with the keyed/unkeyed axis, a raw
aggregation_sub_type string consulted only for two "wrapper" variants,
and an untyped parameters: HashMap<String, Value> bag. The real
dispatch (accumulator_factory.rs::create_accumulator_updater) was a
14-arm match with a second string-typed dispatch layer underneath it.

This adds asap_types::AccumulatorSpec { kind: SummaryKind, params:
SummaryParams, grouping: Option<KeyByLabelNames> }, converging
data_plane onto the same asap_sketch::SummaryKind/SummaryParams
representation control_plane already uses (Stage 3, merged), extended
with the keyed/unkeyed grouping axis AggregationType wrongly folded
into identity. accumulator_factory.rs now dispatches on
AccumulatorSpec.kind instead of the AggregationType + string combo;
the SingleSubpopulation/MultipleSubpopulation string-matching arms
collapse away now that grouping is a sibling field. Every one of the
old 14 match arms' behavior is preserved exactly, including the CMS-
heap vs bare-CMS distinction, the bare-CountSketch-shares-CmsAccumulator
quirk, and all three fallback/unknown-warning paths (same warning
text, same default updater per path).

Two decisions worth flagging for review:

- Additive, not a replacement. AggregationConfig keeps its
  aggregation_type/aggregation_sub_type/parameters fields untouched.
  PolicyFingerprint::from_config hashes those three fields directly
  and its own module doc calls the byte layout it produces a stability
  contract ("any such change invalidates every deployed fingerprint
  and forces a cold-start rebuild") -- so policy_fingerprint.rs is not
  touched by this change at all. Separately, AggregationType turned
  out to be read by ~40 files across data_plane/asap_types (query-time
  capability matching, persistence, reconciliation, index maintenance)
  well beyond accumulator_factory.rs, so full removal was judged too
  large to land and review safely in one PR. AccumulatorSpec is
  computed on demand from AggregationConfig's existing fields via
  AggregationConfig::accumulator_spec(); full removal of the old
  fields is follow-up work, not done here.
- Three details don't fit asap_sketch's upstream types and still read
  AggregationConfig/its parameters map directly, documented in
  accumulator_spec.rs's module doc: min/max direction (SummaryParams::
  MinMax carries no fields), HydraKLL's (row, col) tiling grid
  (SummaryParams::Kll carries only k), and top-k weight_mode (no
  upstream concept at all).

The wire format (aggregationType/aggregationSubType/parameters JSON
and YAML keys) is unaffected -- AggregationConfig::from_yaml/from_json
still parse those key names generically, unchanged.

cargo test -p asap_types: 78 passed (18 new, covering every
AggregationType variant's resolution, both wrapper sub_type alias
lists, all three error paths, and a fingerprint-stability regression
guard). cargo test -p data_plane --lib: 881 passed, 2 ignored -- no
change from the pre-existing baseline. cargo build --workspace: clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(asap_types): repoint accumulator_spec.rs import after promql_utilities retirement

promql_utilities was deleted in #403 (merged to main after this branch
was cut); AggregationType now lives in-crate at
asap_types::aggregation_type. Update the one remaining import site
picked up by the rebase.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(asap_types): rename WindowType to WindowKind in accumulator_spec.rs tests

Picked up by rebasing onto main post-#405 (WindowType retired in
favor of asap_ir::WindowKind). Test-only fixture reference, no
behavior change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant