Skip to content

Fix the 10 defects surfaced by the end-to-end claims audit#10

Merged
jayhere1 merged 2 commits into
mainfrom
fix/claims-audit-fixes
Jul 13, 2026
Merged

Fix the 10 defects surfaced by the end-to-end claims audit#10
jayhere1 merged 2 commits into
mainfrom
fix/claims-audit-fixes

Conversation

@jayhere1

Copy link
Copy Markdown
Owner

Fixes every defect found in the end-to-end claims audit, each with failing-first tests and live verification:

Correctness

  • Retries actually happen: the scheduler re-dispatches tasks after the retry delay via an internal timer channel — conduit run no longer hangs forever on a failing task with retries; serve and backfill inherit the fix. Exponential backoff wired end to end via retry_backoff (SDK kwarg → YAML/decorator extraction → scheduler); dead executor RetryPolicy removed.
  • Python body edits invalidate fingerprints: compiler hashes task source (nested @task def + module-level same-name def) into Task.source_hash; the planner folds it into the content key, so edits show as Modified and cascade.
  • Event sourcing is real: scheduler persists run/task lifecycle events; env manager emits create/promote/rollback; apply emits SnapshotCreated + PlanApplied — conduit replay now reconstructs actual history.
  • Cron schedules fire: conduit serve ticks the scheduler every minute with per-DAG per-minute dedup; scheduler-initiated runs appear in /runs and the UI.
  • Pools are enforced: slot acquire on dispatch, release + cross-run waiter wakeup on completion/failure, re-acquire on retry; definitions load from conduit.yaml; undefined pools run unlimited with a warning.
  • SQL params are bound: :name placeholders rewritten to native placeholders and bound as real query parameters (type-inferred) across all six sqlx providers; injection payloads are literals; missing params error clearly.
  • conduit run exits non-zero on a failed run; /api/v1/runs supports dagId/dag_id filtering; env diff prints full snapshot IDs; completed runs keep per-task logs (API taskLogs + run detail UI).

Honesty

  • Demo run seeding is now opt-in (conduit serve --demo) and labeled triggered_by="demo".
  • Docs match reality: no cgroup claim, stdout protocol + env/file XCom (not stdin), 12 implemented + 20 stub providers, qualified single-binary wording, Fingerprint documented as 64-bit SipHash.

Tests: 1,121 workspace tests pass (24 added), Python SDK 185 pass.

🤖 Generated with Claude Code

jayhere1 added 2 commits July 13, 2026 11:52
Correctness:
- Retries: the scheduler now re-dispatches tasks after the retry delay
  via an internal timer channel, so `conduit run` no longer hangs on a
  failing task with retries (serve and backfill inherit the fix).
  Exponential backoff is wired end to end via `retry_backoff` (SDK
  kwarg, YAML field, compiler extraction); the dead executor
  RetryPolicy is removed.
- Fingerprints: the compiler hashes Python task source (nested @task
  def plus module-level same-name def) into Task.source_hash and the
  planner folds it into the content key, so body edits are detected as
  Modified and cascade downstream.
- Event sourcing: the scheduler persists run/task lifecycle events, the
  environment manager emits create/promote/rollback, and apply emits
  SnapshotCreated + PlanApplied; run/serve/backfill/env all attach the
  store, so `conduit replay` reconstructs real history.
- Cron: `conduit serve` ticks the scheduler at the top of every minute,
  with per-DAG per-minute dedup; scheduler-initiated runs are recorded
  in the API run cache so they appear in /runs and the UI.
- Pools: dispatch acquires slots, completion/failure releases them and
  wakes waiters across runs, retries re-acquire, and undefined pools
  run unlimited with a warning; definitions load from conduit.yaml.
- SQL params: named :param placeholders are rewritten to native
  placeholders and bound as real query parameters (type-inferred) in
  all six sqlx providers; referencing a missing param errors clearly.
- `conduit run` exits non-zero when the run fails; /api/v1/runs
  supports dagId/dag_id filtering; `env diff` prints full snapshot IDs.
- Completed runs keep per-task logs (16KB cap), exposed as taskLogs in
  the run detail API and rendered on the run detail page.

Honesty:
- serve no longer seeds fabricated demo runs unless --demo is passed;
  seeded runs are labeled triggered_by="demo".
- Docs match reality: no cgroup claim (timeouts are enforced; declared
  CPU/memory limits are not yet), stdout protocol with env/file XCom
  (not stdin), 12 implemented + 20 stub providers, qualified
  single-binary wording, Fingerprint documented as 64-bit SipHash.

1,121 workspace tests pass (24 added, written failing-first).
Python SDK: 185 pass.
@jayhere1
jayhere1 merged commit c824f47 into main Jul 13, 2026
8 of 9 checks passed
@jayhere1
jayhere1 deleted the fix/claims-audit-fixes branch July 13, 2026 11:02
@github-actions

Copy link
Copy Markdown

Schema impact: no changes detected

Compared 4 task outputs across 6 DAGs — every output is identical.

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