Files
triggerdotdev--trigger.dev/apps/webapp/app/runEngine
Dan Sutton 51b471c128 feat(webapp): wire mollifier idempotency into trigger hot path (Phase B6b)
Three integration points that connect B6a's buffer-side primitives to
the customer-facing flow per Q5:

- IdempotencyKeyConcern.handleTriggerRequest falls through to
  buffer.lookupIdempotency after a PG miss. Buffered hits return
  isCached:true with a synthesised TaskRun via the existing
  findRunByIdWithMollifierFallback. Skipped when
  resumeParentOnCompletion is set: waitpoint blocking requires a PG
  row that doesn't exist yet; the follow-up accept SETNX still
  dedupes the trigger itself. Buffer outages fail open to "no cache
  hit" so the trigger hot path is never wedged by a transient Redis
  issue.

- mollifyTrigger passes idempotencyKey + taskIdentifier through to
  buffer.accept. The SETNX race loser receives duplicate_idempotency
  with the winner's runId; the API response echoes it with
  isCached:true, matching PG-side cache-hit shape.

- ResetIdempotencyKeyService calls buffer.resetIdempotency alongside
  the existing PG updateMany. 404 only fires when both stores report
  nothing bound. Buffer outage during reset is logged and treated as
  a miss; PG-side reset still works.
2026-05-20 16:51:33 +01:00
..