Engagement silence duration (D-139)
Vendor-agnostic Layer-1 silent producer wrapping the `engagement_silence_duration` topic per spec § A.9.1. Subscribes to bus events from BOTH connection.api.hubspot.deal AND connection.api.salesforce.opportunity updates; for each fired record reads any housekeeping-computed row via `enrichment-list` with the dynamic `{{context.event.payload.platform}}` scope and re-emits it through the recipe cycle (so the row carries an up-to-date `cursor_at` reflecting the deal touch even when the substrate-side housekeeping cycle hasn't fired yet). The substrate-side housekeeping engagement-aggregates code (D-139 P1a.1 — `backend/server/src/housekeeping/engagement-aggregates/engagement-silence-duration.ts`) remains the canonical compute path; producer recipe writes carry `authored_by_recipe_id` distinct from the housekeeping `system.housekeeping.<topic>` author so both rows coexist on the unique `(topic, scope, target_id, authored_by_recipe_id)` index without conflict. Honest-zero defaults per the value-schema invariant when no housekeeping row exists yet.
How it works
Inspect the data fetches, transforms, gates, and output this recipe runs.
Trust & control
What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.