Skip to content

Remove operators that read a time off the capability - #818

Merged
frankmcsherry merged 1 commit into
masterfrom
remove-vestigial
Sep 11, 2026
Merged

Remove operators that read a time off the capability#818
frankmcsherry merged 1 commit into
masterfrom
remove-vestigial

Conversation

@frankmcsherry

Copy link
Copy Markdown
Member

Follow-up to #817. Removes nine pieces of the vec operator DSL that no downstream user imports and that, since #813 made a message's stamp a set of times, have no sound meaning:

operator why
delay, delay_batch, delay_total maps the capability's time; records carry no time to map
count, accumulate keys the accumulation by the capability's time
aggregate keys the aggregation by the capability's time
state_machine orders processing by the capability's time
branch predicate on the capability's time and the datum
branch_when predicate on the capability's time, routes the whole container
reclock releases stashed containers by comparing stamps to a clock
iterator_source (flow_controlled) already required a total order; unused
ResultStream unused; ok_err on core is the container-generic form

Trait imports in differential-dataflow's workspace and Materialize's src: zero for all of these, except one BranchWhen in Materialize. That one is a bug: it bounds WMR iterations by routing each container on its capability's iteration, while the records in the container carry their own times and can be strictly later (a batch sealed under one capability spans [cap, upper)), so over-limit updates are retained and fed back. #817 already stops it compiling; the fix on that side is partition on the record's own time.

The first seven required T: TotalOrder after #817, which made them compile only for the case where "the capability's time" is well defined, but did not make them mean anything for a multi-element stamp. Deleting them is the honest end state; an operator that needs a time per record should carry it in the record.

Adaptations. The pingpong example carries a round counter in its data instead of branching on time; the loop examples in the feedback docs and the book terminate by data; the flow-control chapter of the book assigns timestamps with a small unary and cap.delayed(..), which is what delay did. Full workspace tests and doctests, including the book, pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_012k2GSwxmvD2LvckkoXi6GK

…ntrol and Result helpers

Removed: delay/delay_batch/delay_total, count/accumulate, aggregate,
state_machine, branch, branch_when, reclock, iterator_source
(flow_controlled), and ResultStream. None has a user in differential-dataflow
or Materialize. The first seven key their logic on the capability's time, which
records do not carry; since #813 a message's stamp is a set of times, and
since #817 these operators required a total order. branch_when in particular
routes a whole container by its capability, which is wrong for any stream
whose records carry their own times.

The pingpong example carries a round counter in its data; the loop examples
in the docs and the book terminate by data; the flow-control chapter assigns
timestamps with a small unary operator and delayed capabilities.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012k2GSwxmvD2LvckkoXi6GK
@frankmcsherry
frankmcsherry merged commit 1eb1e1c into master Sep 11, 2026
9 checks passed
frankmcsherry added a commit that referenced this pull request Sep 12, 2026
…ify (#819)

They held one capability per requested time and delivered it once the input
frontiers passed it: a convenience for the one-capability-per-message world
that no library operator uses since #818, that differential-dataflow does not
use, and whose one downstream user must leave it anyway. An operator that
wants the same holds its capabilities in a map keyed by time and checks them
against the frontiers, which is what the bfs and barrier examples, the
barrier test, the operator doctests, and the book now do directly.


Claude-Session: https://claude.ai/code/session_012k2GSwxmvD2LvckkoXi6GK

Co-authored-by: Claude Fable 5.1 <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