Engagement velocity signal (D-139)
Vendor-agnostic Layer-1 silent producer wrapping the `engagement_velocity_signal` 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. The substrate-side housekeeping engagement-aggregates code (D-139 P3 — `backend/server/src/housekeeping/engagement-aggregates/engagement-velocity-signal.ts`) is the canonical compute path with the full Pass-4 evidence-quality fold (authorship + lifecycle + direction filters; 90d window split into recent 30d + baseline 60d; weighted trajectory math). 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 `'steady'` default per the trajectory enum 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.