sequence_type = 'nurture' AND Accounts.abm_active = TRUE:CadenceEventLog.suppressed_reason = 'abm_active_suppression'SalesPlayLibrary that get human-promoted to active state, AGT-302 becomes the execution engine for brain-co-designed plays. Two wire updates:SalesPlayLibrary WHERE state = 'active' alongside existing AGT-301 outreach generator output and AGT-203 ABMPlaybook entries.target_definition + suggested_cadence + active_period_start/end. AGT-302 matches accounts/leads against target_definition, generates sequences per suggested_cadence, respects active_period_end as auto-stop.CadenceEventLog:play_id — FK to SalesPlayLibrary.play_id when the event derives from an active brain-co-designed play. NULL otherwise (existing behavior preserved).originating_proposal_id — FK chain back to the BrainAnalysisLog row that produced the draft play. Inherited via SalesPlayLibrary.originating_proposal_id. NULL when no brain in the lineage.originating_proposal_id column on CadenceEventLog (and on ABMPlaybook, ExpansionLog, QBRLog, OpportunityBriefLog, CommBriefLog — same v27 ripple across 6 services) enables exactly that cohort filter. Win rate / sales cycle / ACV measured cohort-wise; not per-deal attribution.play_id grouping (per AGT-303 v27 brain-ready view extension).
AGT-302 is the single source of truth for all active cadences in the OS. Every sequence activation, step execution, transition, and termination is registered here. It enforces the 3-touch-per-week cap system-wide (non-transactional cadences only), resolves conflicts between concurrent agent sequences, and owns compliance — unsubscribe and opt-out propagation is AGT-302's responsibility. AGT-301 drafts and queues; AGT-302 executes and governs.
Every sequence activation request passes through these gates in order. A block at any gate prevents execution and logs the reason.
Leads.unsubscribe_flag and opt_out_flag. If either is TRUE: hard block. No sequence type bypasses this. Log suppressed_reason = 'compliance_block'.sequence_type = 'nurture' AND Accounts.abm_active = TRUE: block activation. Log suppressed_reason = 'abm_active_suppression'. Notify originating agent.suppressed_reason = 'touch_cap_exceeded' on the held event.suppressed_reason = 'conflict_resolved_queued' on the deferred event.When two agents want to contact the same prospect simultaneously, AGT-302 resolves autonomously based on ICP tier and signal recency.
| ICP Tier | Signal recency | Resolution |
|---|---|---|
| T1 | Sales signal fresher | Sales cadence wins. Marketing queued. |
| T1 | Marketing signal fresher | Sales cadence still wins. T1 always favors sales — cost of missed outreach window exceeds delayed marketing touch. |
| T2 | Sales signal fresher | Sales cadence wins. Marketing queued 48 hrs. |
| T2 | Marketing signal fresher | Marketing continues. Sales queued 48 hrs. |
| T3 | Any | Marketing always wins. Sales should never be active for T3 — flag as routing error to AGT-202. |
| Condition | Flag | Action |
|---|---|---|
| Touch cap about to be breached (1 touch remaining this week) | Cap warning | Notify rep before hard stop fires. No autonomous action. |
| Prospect in sales AND marketing cadence simultaneously | Concurrency flag | Conflict resolution matrix applied immediately. |
| Cadence stalled — no activity logged for 7+ days | Stall flag | Notify rep. If no action in 3 business days, pass to AGT-303 for analysis recommendation. |
| Rep has 10+ prospects in paused state | Backlog risk | Notify rep and manager. AGT-303 analyzes whether automated resolution is appropriate. |
| Table | Field | When written |
|---|---|---|
CadenceEventLog | suppressed_reason | On any gate block: abm_active_suppression / touch_cap_exceeded / compliance_block / conflict_resolved_queued. NULL when no suppression. (v22) |
CadenceEventLog | All standard event fields | Per-step: event_type, coordinator_action, resolution, touch_cap_at_event, compliance_status, timestamp. |
Leads | Cadence status fields | Active sequence ID, current step, last touch timestamp, unsubscribe/opt-out propagation. |
suppressed_reason. AGT-304 logs suppression in NurtureRecommendations (its own write surface) — AGT-302 logs it in CadenceEventLog so AGT-303 has a unified suppression audit trail across all sequence types.