Skip to content

docs(design): pipeline pause semantics — recommend stop/start, defer warm-pause#2632

Merged
devarismeroxa merged 1 commit into
mainfrom
docs/pipeline-pause-semantics
Jul 15, 2026
Merged

docs(design): pipeline pause semantics — recommend stop/start, defer warm-pause#2632
devarismeroxa merged 1 commit into
mainfrom
docs/pipeline-pause-semantics

Conversation

@devarismeroxa

Copy link
Copy Markdown
Contributor

Recommendation (needs maintainer sign-off before we act on it)

Do not add a warm-idle pause primitive to the engine for v0.18. Model pause/resume as the existing user stop/start RPCs. This overturns the greenfield-UI doc's assumption that pause is prerequisite engine work — so it's flagged for your explicit decision, not self-merged.

Why

Research + an adversarial two-pass review (both verified every citation against the tree) established that a user-initiated stop already delivers what pause needs:

  • stops reading, drains in-flight to durable before teardown (invariants 1, 3),
  • persists position per-ack with transactional flush (invariants 2, 5),
  • is not auto-restarted (Init only restarts SystemStopped) — stays parked until an explicit start,
  • resumes from the last committed position (at-least-once),
  • and stopped_reason=USER (P3) already distinguishes an operator park from a system stop.

The only things a dedicated warm-pause adds are (a) keeping plugin subprocesses warm for lower resume latency and (b) a distinct label. Cold resume is byte-for-byte the same operation as crash recovery, which invariant 7 already requires every connector to survive without loss — so warm-pause adds zero correctness, only latency, for a workflow (operator maintenance / relieve pressure / investigate) that is low-frequency and tolerates cold resume.

The review specifically stress-tested CDC / replication-slot / snapshot sources and found no correctness hole: a connector that would lose data across a park already loses it across a crash, independent of pause.

What this unblocks

UI-6 (operate) needs no pause engine work — it ships against the existing StartPipeline/StopPipeline RPCs.

Alternatives (in the doc)

  • A — warm-idle pause: deferred. New source/destination idle paths, StatusPaused migration, backoff/force-stop interaction, kill -9-during-pause recovery — disproportionate data-path surface for a latency optimization with no demonstrated demand. Design sketch + required invariants captured for if/when demand (backed by benchi numbers) appears.
  • B — first-class Paused state reusing stop machinery: available, deferred (cheap middle step if API/agent ergonomics later want a distinct state).
  • C — pause/resume = stop/start: recommended.

Review

Two independent passes (research brief + adversarial technical review). No P0s; recommendation verified sound. Two P1s (name the snapshot re-snapshot cost; sharpen the drifted-remote-state argument to the invariant-7 crash-equivalence) and two P2 citation tightenings are folded in. If accepted, the "no warm-pause primitive" decision is a candidate to promote to an immutable ADR.

Tier 3 (docs); the decision is Tier-1-significant → your call. markdownlint clean.

🤖 Generated with Claude Code

…warm-pause

Design doc for the v0.18 P4 'pause' prerequisite. Research + two-pass
review against the tree established that a user-initiated stop already
provides correct, crash-safe, at-least-once park-and-resume (not
auto-restarted, drains in-flight to durable before teardown, resumes
from last committed position), and stopped_reason=USER already labels
operator intent.

Recommendation: do NOT add a warm-idle pause primitive for v0.18. Model
pause/resume as the existing stop/start RPCs (Alternative C). Warm-idle
(A) and a first-class Paused state (B) are deferred with design sketches
+ the invariants they must satisfy. Cold resume is byte-for-byte crash
recovery, which invariant 7 already requires every connector to survive,
so warm-pause adds zero correctness — only resume latency.

Consequence: UI-6 (operate) is unblocked with zero engine risk.

Overturns the greenfield-UI doc's assumption that pause is prerequisite
engine work — flagged for maintainer sign-off before acting on it.

Tier 3 (docs). Advances v0.18 (P4).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B3cLokwNJYLLBpdyt3cgGr
@devarismeroxa devarismeroxa requested a review from a team as a code owner July 15, 2026 05:36
@devarismeroxa devarismeroxa merged commit f3ab0bd into main Jul 15, 2026
6 checks passed
@devarismeroxa devarismeroxa deleted the docs/pipeline-pause-semantics branch July 15, 2026 05:44
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