These are rules the AI proposes from watching how you actually reply + resolve cards (each from N observed events). They're held here, not on your action board — so they don't clutter lead-work and don't get lost. Review is read-only for now; the collaborative Training Area (approve / edit / reject / propose experiments) is being designed from research into how the best AI systems do this.
organic-operator_resolution92%21 events
When Any contact (of any type: unclassified, lead, member, business) triggers a walker notification or alert
→ Do Resolve the contact as 'no-action-needed' and mute the walker
Why: Operator dismisses the alert without taking further action, suppressing walker notifications for that contact
All 21 events over the 7-day lookback window share an identical shape: intent='resolved', signal_kind='no-action-needed', walker_muted=true, detail=null, reason=null. The pattern holds uniformly across all contact types (unclassified, lead, member, business), with no conflicting signals where the operator chose a different action. The high volume and consistency strongly suggest this is a deliberate operator policy — contacts surfaced by the walker are being systematically dismissed without action — though the absence of any reason/detail field means the underlying cause of dismissal cannot be further differentiated.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution88%22 eventsrefines a rule
When An operator resolution signal is raised for any contact type (lead, member, unclassified, business) where walker is muted and no detail or reason is provided
→ Do Mark the conversation as resolved with no further action required; suppress walker involvement
Why: Conversation is closed silently without escalation, follow-up, or AI walker intervention
All 22 events share an identical structure: intent=resolved, signal_kind=no-action-needed, walker_muted=true, detail=null, reason=null — across varied contact types, indicating this is a deliberate bulk-resolution pattern rather than contact-type-specific behaviour. The high volume (22 events across two days, with a cluster of 13 in under an hour on Jun 29) suggests a systematic review-and-dismiss workflow. The only counter-evidence is the absence of operator-supplied reasons, making it unclear whether this pattern is intentional policy or a UI default that skips reason capture.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy88%50 events
When A walker-policy run detects stale orchestration rows (stale_days=30) for any walker_kind (post_apt_outcome, stalled_followup, member_at_risk_attendance_drop) with orq_row_count >= 1
→ Do Insert an auto-mute with expires_in_days=90 for the affected walker row(s)
Why: Stale orchestration rows are silenced for 90 days to prevent re-triggering noise from aged, unactioned items
All 50 events share identical structure: stale_days=30 and expires_in_days=90 across three distinct walker_kinds, fired consistently at ~05:15 each day — strongly indicating a scheduled policy rule. The pattern is walker_kind-agnostic (applies to post_apt_outcome, stalled_followup, and member_at_risk_attendance_drop equally), suggesting the trigger is purely the staleness threshold. Minor counter-evidence: one event has orq_row_count=5 and one has orq_row_count=2, but the auto-mute action is still applied identically, so count variation does not alter the consequent.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy88%50 eventsrefines a rule
When A walker-policy run finds stale orchestration queue rows (stale_days=30) for any walker_kind, with at least 1 orq_row_count
→ Do Insert an auto-mute for the affected member/conversation with expires_in_days=90
Why: Stale orchestration queue rows are suppressed from re-triggering walker actions for 90 days, preventing noise or redundant outreach
All 50 events share identical structure: stale_days=30 and expires_in_days=90 across three distinct walker_kinds, firing from the same source at the same daily scheduled time — this is a consistent, repeated automated policy decision, not a one-off. The pattern generalises across walker_kinds, suggesting the rule is walker-kind-agnostic. Minor counter-evidence: one event has orq_row_count=5 and one has orq_row_count=2, but the mute action was still applied identically, so row count magnitude does not appear to change the outcome.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking85%3 eventsrefines a rule
When Lead contact requires scheduling follow-up appointment
→ Do Schedule appointment with specific datetime and appointment type
Why: Structured follow-up meeting arranged with lead
All 3 events show identical pattern: operator records lead outcomes by scheduling specific appointments with datetime and type. The appointment types vary (intro, in_person, phone_call) but the core action is consistent - converting lead interactions into scheduled follow-ups. Strong evidence with no conflicting behaviors observed.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution85%22 eventsrefines a rule
When An operator-resolution signal fires with no actionable reason/detail attached, regardless of contact_type (member, lead, unclassified, business)
→ Do Automatically mute the walker/thread for this contact and mark it resolved without further operator intervention
Why: Operator's time is not spent on contacts flagged as no-action-needed; walker_muted is consistently set true to suppress further notifications
All 22 events show identical signal_kind='no-action-needed' paired with intent='resolved' and walker_muted=true, with zero exceptions across varying contact_types and timestamps spanning two days. This is a highly consistent, repeated shape (22/22 agreement) making it a strong candidate for a reusable auto-resolution rule, though contact_type diversity suggests the trigger is independent of contact classification, which should be confirmed by the operator before automating broadly.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution85%22 eventsrefines a rule
When An operator-resolution signal arrives with no specific detail or reason attached, regardless of contact_type (member, lead, unclassified, business)
→ Do Automatically mark the signal as resolved with intent='resolved' and keep the walker muted (no operator intervention or notification needed)
Why: Operator confirms these are low-value/no-action signals that can be auto-closed without review, reducing noise in the queue
All 22 events show an identical shape: signal_kind='no-action-needed' consistently pairs with intent='resolved' and walker_muted=true, across every contact_type variant, with zero exceptions or conflicting outcomes. This is a strong, uniform pattern with high volume in a short window, though the lack of variation (no counter-examples of unresolved 'no-action-needed' signals) means we can't rule out this is simply how the system always behaves rather than a discretionary operator choice — worth confirming this is intentional design vs. an artifact of the sampled window.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send82%8 eventsrefines a rule
When An inbound chat message arrives via WhatsApp from a contact in the 'lead' journey stage with active status, DND off, no terminal outcome set, triggered via chat_entry
→ Do AI sender issues a reply outbound message on WhatsApp
Why: Lead receives an AI-generated reply, keeping the conversation active and progressing the lead through the journey
All 8 events share an identical shape: AI-sent WhatsApp replies triggered by chat_entry, all on leads with active status, no DND, no terminal state, and no resolved outcome. The pattern is highly consistent with zero conflicting events. Confidence is capped below 0.9 because all events appear to be from a single contact/thread (no outcome ever changes across 6 days), so this may represent one ongoing conversation rather than a generalised cross-contact rule — operator should verify if this fires across multiple distinct leads.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%31 eventsrefines a rule
When A lead or unclassified contact is engaging for the first time or needs to be moved toward a next step, and the AI has either drafted a generic follow-up or produced no draft (take_over/edit signals on leads/unclassified contacts)
→ Do Operator personally takes over to ask a binary qualification question — typically 'do you have fitness/exercise experience or is this new?' — then immediately presents exactly two concrete pathways (1:1 sessions at £45 to build confidence, OR a free taster class), asking the contact to choose between them rather than leaving it open-ended.
Why: Contact self-selects a route in, reducing friction and allowing the operator to book the next step directly.
At least 10+ events (e.g. events 7, 9, 11, 22, 23, 25, 26, 27, 7, 9) show the same two-part structure: (1) ask about fitness background/experience, then (2) present the binary 1:1 vs free taster choice with a closing question. This is consistent across SMS, WhatsApp, and Instagram, and across named leads and unclassified contacts. The main counter-evidence is that some takeovers skip the qualification question and go straight to a link or booking (events 3, 6, 17, 21) — these appear to be cases where the contact has already progressed past the qualification stage, so they don't truly conflict with the pattern.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%38 eventsrefines a rule
When A new lead or unclassified contact initiates or responds to a conversation about joining/starting at the gym, and the AI has either drafted a generic follow-up or no draft exists
→ Do Operator takes over and presents exactly two clearly labelled entry-point options: (1) a free taster/trial class, or (2) paid 1:1 sessions (£45) to build confidence — then closes with a direct binary choice question asking which the contact prefers
Why: Contact commits to one of the two routes, reducing friction and moving them toward a booked session
At least 10+ events (events 5, 7, 8, 9, 16, 17, 20, 21, 25, 26, 38 and others) show the operator overriding the AI to deliver the same two-option framing ('free taster or 1:1?') to leads and unclassified contacts at the first meaningful onboarding touchpoint. The pattern is highly consistent in structure and language across different channels (SMS, WhatsApp, Instagram) and different contact names. The main counter-evidence is that some take-overs are pure link-sends (events 4, 15, 37) or logistical scheduling (events 11, 22, 29) rather than the binary-choice pitch, suggesting the two-option pattern applies specifically when the contact's entry route hasn't yet been determined.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy82%4 eventsrefines a rule
When A stalled_followup walker detects items that have been stale for 30 days
→ Do Insert an auto-mute with an expiry of 90 days
Why: Stalled followup items are suppressed/muted for 90 days to reduce noise from long-inactive cases
All 4 events share identical policy parameters (stale_days=30, walker_kind=stalled_followup, expires_in_days=90), indicating a consistent automated policy rule being applied. The only variation is orq_row_count (1 vs 5), which does not change the action taken, suggesting it is not a discriminating condition. Counter-evidence is limited: all events cluster on two days and could reflect a single batch run rather than independently recurring decisions, so true generalisability across time is not fully confirmed yet.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition82%4 events
When A contact in the 'lead' stage with 'active' status is closed with reason 'exhausted' (not aborted)
→ Do Transition the contact from stage 'lead' to stage 'closed' when all outreach attempts have been exhausted without a response or conversion
Why: Contact is formally closed out of the lead pipeline, freeing resources and marking the journey as complete without conversion
All 4 events share an identical shape: lead-stage active contacts being closed due to exhaustion, non-aborted, within a ~5-second window suggesting a batch operation. The pattern is consistent with zero conflicts across all events. Confidence is capped below 0.9 because the tight timestamp clustering (all within ~5 seconds) may indicate a single bulk action rather than four independently recurring decisions, which slightly weakens generalisability as a repeating causal rule.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%37 eventsrefines a rule
When A new lead or unclassified contact is engaging about joining and the AI has drafted or would draft a message, but the operator steps in — particularly when the conversation involves explaining onboarding routes (1:1 vs taster session) or pricing
→ Do Operator writes a personalised message in their own voice that: (1) briefly acknowledges any context, (2) presents exactly two concrete options (e.g. 1:1 session at £45 vs free taster), and (3) ends with a direct binary question asking the contact to choose between the two options
Why: Contact feels personally addressed and is nudged toward a clear next step, reducing decision paralysis by limiting choice to two paths
At least 10–12 events (events 5, 7, 8, 9, 16, 18, 20, 21, 25, 26, 35) show the same structural pattern: operator takes over, explains two onboarding routes (1:1 vs taster/class), and closes with a binary question. This is highly consistent across leads and unclassified contacts on WhatsApp and SMS. Counter-evidence: some take-overs are purely logistical (scheduling, links, member check-ins — events 1, 2, 11, 12, 14, 30, 31) which don't follow this pattern, but those involve different contact types or stages, so the pattern is real but scoped specifically to early-stage onboarding conversations with leads/unclassified contacts.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile82%15 events
When An inbox card appears in the board reconcile domain requiring review
→ Do Dismiss the inbox card (and any associated drafts) via inbox/dismiss, clearing it from the board
Why: Inbox item is resolved with cards_cleared >= 1; drafts may or may not be dismissed depending on whether they exist
All 15 events share the same source (inbox/dismiss) and event type (inbox_resolved), with cards_cleared always >= 1, indicating a consistent operator behaviour of dismissing inbox cards in the board_reconcile domain rather than acting on them differently. The variation in drafts_dismissed (0–2) across events is not conflicting — it reflects incidental draft state at dismiss time, not a different action choice. The pattern is strong in volume and consistency within a single day, though the 7-day lookback only covers one day, which slightly limits generalisability.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition82%5 eventsrefines a rule
When A contact in the 'lead' stage with 'active' status reaches sequence exhaustion (all outreach steps completed without conversion or manual intervention)
→ Do Automatically transition the contact from 'lead' (active) to 'closed' stage with reason 'exhausted' and aborted=false — no manual override applied
Why: Lead is cleanly archived/closed after sequence exhaustion, keeping pipeline accurate and preventing zombie leads
All 5 events share an identical payload shape (exhausted, lead→closed, active, aborted=false), indicating a consistent automated or operator-confirmed behaviour whenever a lead exhausts its sequence. The pattern is clear and uniform with zero conflicting outcomes across the sample. Confidence is not higher because the sample size is small (5) and all events cluster within ~21 hours, which could reflect a single batch flush rather than a truly generalised recurring rule — operator should confirm this is intended system-wide policy and not a one-off cleanup.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%31 eventsrefines a rule
When A new lead makes contact (or AI has drafted a generic follow-up) and the operator has no background on the lead's fitness/exercise experience
→ Do Operator asks the lead about their fitness/exercise background (beginner vs experienced), then presents a binary choice: (1) start with 1:1 sessions (£45) to build confidence, or (2) jump straight into a free taster class — and asks the lead which works best for them
Why: Lead self-selects an onboarding path, reducing friction and moving toward booking a first session
At least 10–12 events (e.g. events 7, 9, 11, 22, 23, 25, 26, 27, 28) show the identical two-step shape: assess experience level, then present the 1:1-vs-taster binary choice. Events 5 and 11 also show the operator editing AI drafts to add this pattern where the AI missed it. Counter-evidence: a minority of events (e.g. 1, 3, 6, 17, 21) skip the experience question and go straight to a payment link or booking, suggesting the operator only applies this pattern when the lead's background is unknown — the trigger is specifically the absence of known fitness context.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition82%8 eventsrefines a rule
When A booking_confirmed event fires with reason='appointment_upcoming' while the user is in an active status
→ Do Transition the user to stage 'booked' (or keep them there if already booked)
Why: User is confirmed in the 'booked' stage ahead of an upcoming appointment
All 8 events share the same shape: booking_confirmed + reason=appointment_upcoming + aborted=false → to_stage=booked, with no conflicting outcomes observed. 7 of 8 transitions are booked→booked (idempotent confirmations); 1 is member→booked, showing the pattern also applies when coming from a different prior stage. The consistent automated cadence (cluster at 10:15 and 08:15) suggests a scheduled trigger rather than ad-hoc operator action, which strengthens the pattern but also means it may already be automated — the operator should verify whether this is a system-driven rule or a manual override.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy82%5 eventsrefines a rule
When A walker of kind 'stalled_followup' or 'team_handler_idle' has been stale for 30 days and is detected by the auto-mute policy scan (runs daily around 05:15 BST)
→ Do Insert an auto-mute record for the stale walker with a 90-day expiry, suppressing further activity or alerts from it
Why: Stale walkers that have not progressed after 30 days are silenced for 90 days, reducing noise from idle or stalled workflow handlers
All 5 events share the same shape: stale_days=30, expires_in_days=90, and walker_kind is either 'stalled_followup' (4 events) or 'team_handler_idle' (1 event), suggesting a consistent policy trigger. The daily ~05:15 BST cadence further supports an automated scheduled rule rather than ad-hoc operator action. The only uncertainty is whether the orq_row_count threshold matters (values range 1–5 with no apparent filtering), and whether 'team_handler_idle' follows exactly the same rule or is a related but distinct sub-policy.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy82%50 eventsrefines a rule
When A walker-policy auto-mute is triggered for any walker_kind (post_apt_outcome, stalled_followup, member_at_risk_attendance_drop) when the orchestration queue row count is low (typically 1, occasionally 2-5) and the data is stale beyond a threshold
→ Do Insert an auto-mute record for the affected walker instance with stale_days=30 and expires_in_days=90, suppressing further walker-driven outreach for 90 days
Why: Walker is silenced for members/contexts where data has been stale for 30+ days, preventing stale or low-signal outreach actions from firing
All 50 events share an identical structure (stale_days=30, expires_in_days=90) across three distinct walker_kinds, firing consistently at ~05:15 BST daily — strongly suggesting a scheduled policy sweep rather than ad-hoc decisions. The pattern is consistent with no conflicting behaviour observed (no cases where the same conditions did NOT produce a mute). Minor counter-evidence: orq_row_count varies (1-5), and it's unclear whether higher row counts ever suppress the mute, so the exact orq_row_count threshold is not fully resolved.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition82%5 eventsrefines a rule
When A contact in 'lead' stage with 'active' status has its sequence/journey exhausted (all steps completed without conversion or manual close)
→ Do Automatically transition the contact to 'closed' stage (to_stage: 'closed') when the lead sequence is exhausted without manual intervention
Why: Exhausted leads are cleanly closed out of the active pipeline, preventing stale leads from persisting in the 'lead' stage
All 5 events share an identical shape: reason='exhausted', aborted=false, from_stage='lead', from_status='active', to_stage='closed'. The pattern is highly consistent with no conflicting outcomes observed. Confidence is capped below 0.9 because the dataset is small (5 events, clustered across only 2 days) and this may reflect a single automated system rule rather than a deliberate operator decision pattern — though the recurrence does confirm it generalises across multiple contacts.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%49 eventsrefines a rule
When The AI has been handling a lead/contact conversation but the operator steps in to take over — either because the AI sent something incorrect, the conversation is at a critical conversion point, or contact needs a personal touch
→ Do Operator personally re-introduces themselves by first name (Jack) and gym name (CrossFit Bodmin), often apologises for the AI or delay, then provides a concrete next step: either (a) a direct booking link, (b) two clear pathway options (e.g. free taster vs 1:1 session), or (c) an offer to phone call to discuss further — always ending with a warm, low-pressure close
Why: Contact feels they are now speaking to a real human, trust is restored or established, and they are moved toward a concrete next action (booking, calling, or clicking a link)
49 out of 49 events share signal_kind=take_over with ai_draft_text=null, and across the operator's messages there is a highly consistent pattern: self-identification as Jack from CrossFit Bodmin, acknowledgement of the AI or a delay, and a clear CTA (link, call offer, or binary pathway choice). The pattern holds across all contact types and channels. The main variation is in the specific CTA offered (link vs call vs options), but the structural shape — humanise, apologise/acknowledge, give next step — is consistent enough to be actionable. Counter-evidence is minimal: event 17 (Instagram/business contact) deviates slightly as it is more social, but this is a single outlier.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%50 eventsrefines a rule
When A new or unclassified contact (lead or unclassified) sends an inbound message expressing interest in CrossFit Bodmin, OR an AI-drafted response is insufficient/generic, OR the conversation has stalled without a concrete next step
→ Do Operator (Jack) personally introduces himself by name and gym, apologises for any delay or AI confusion if relevant, asks about the contact's fitness background/experience, then presents 2 clear entry routes (free taster class OR 1:1 session at £45) and asks which works best — often ending with specific available time slots
Why: Prospect commits to a concrete next step: booking a taster session, scheduling a 1:1, or arranging a phone call — moving them from passive interest to active booking
The pattern is highly consistent across 30+ events: Jack takes over from AI, introduces himself, often apologises for delay or AI errors, asks about fitness background, and presents the binary choice of free taster vs. 1:1 (£45). This exact structure appears in events [10, 11, 13, 14, 15, 28, 32, 38, 43, 44, 48] among others. Counter-evidence: some take-overs are for existing members (check-ins, re-engagement) or are simple confirmations/closings, so the pattern is not universal across all contact types — it is primarily triggered by new lead/unclassified contacts at the discovery stage.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%50 eventsrefines a rule
When The AI draft is either absent or judged insufficient for the conversation stage, and the contact is a lead (or unclassified prospect) requiring a personalised, nuanced response that involves qualifying the prospect, presenting onboarding options (1:1 vs taster), or closing a booking
→ Do Operator takes over and sends a personal, first-person message that (a) introduces himself by name ('Jack from CrossFit Bodmin'), (b) asks about the prospect's fitness background/experience, and (c) presents exactly two concrete next-step options framed as a binary choice (e.g. free taster session vs 1:1 session at £45), often ending with a direct question to elicit a response
Why: Prospect engages, self-selects a pathway, and a booking or phone call is secured; operator builds rapport and controls the conversion rather than letting the AI give a generic reply
At least 15–20 events show the same structural shape: operator takes over (ai_draft_text=null), identifies himself by name, assesses experience level, and presents a binary 1:1-vs-taster choice with a closing question. This occurs consistently across WhatsApp and SMS channels for leads and unclassified contacts. Counter-evidence: a minority of take-overs are logistical (scheduling, links, member check-ins) with no binary-choice pattern (events 9, 10, 12, 28, 29), and two 'edit' events (1, 7) show a similar rewrite but from an existing draft, indicating the trigger isn't solely ai_draft_text=null — the operator also fires when the AI draft misses the personalisation/binary-choice format.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply82%31 eventsrefines a rule
When A lead (or unclassified contact) is being engaged for the first time or re-engaged after no prior qualification of fitness background, and the AI draft either doesn't exist or asks a generic/shallow follow-up question
→ Do Operator takes over and asks the lead about their fitness/exercise background (beginner vs experienced), then presents a binary choice between two entry routes: (1) 1:1 sessions (£45) to build confidence, or (2) a free taster class — asking which works best for them.
Why: Lead self-qualifies on experience level and commits to one of two clear next steps, reducing friction and moving them toward a booked session.
At least 10–12 events (e.g. events 7, 9, 11, 22, 23, 24, 25, 26, 27, 29) show the same two-part structure: ask about fitness background, then present the 1:1 vs free taster binary. This is highly consistent across different contacts, channels (SMS, WhatsApp), and days. The main counter-evidence is that some take-overs skip the background question and jump straight to logistics (e.g. events 1, 6, 14, 21) — but those appear to be contacts already qualified or further along, not first-touch leads. The pattern is strong enough for AI to propose this response shape when a new lead has not yet been asked about their background.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply78%49 eventsrefines a rule
When The AI has been handling a conversation with a lead or unclassified contact and either sent an incorrect/generic message, failed to progress the conversation appropriately, or the operator judges the AI's handling as insufficient — prompting the operator to step in personally
→ Do Operator personally takes over the conversation: introduces themselves by name (Jack from CrossFit Bodmin), apologises for the AI confusion or delay where relevant, then immediately presents a clear binary choice or next step (e.g. free taster vs 1:1 session, call vs jump in, specific membership links) to move the contact toward booking or conversion
Why: Contact feels they are speaking to a real person, confusion from AI messages is resolved, and they are guided to a concrete next action (booking a session, choosing a membership plan, or scheduling a call)
Across 30+ events, the operator consistently takes over with a personal introduction and a binary next-step offer whenever the AI has mishandled or stalled a lead/unclassified conversation — this pattern is highly consistent in structure (name intro + apology where needed + clear two-option CTA). Counter-evidence: a minority of take-overs (e.g. events 11-12, 35, 44-46) show no apology and no binary choice, just a simple confirmation or link, suggesting the pattern is strongest for cold/stalled leads but not universal across all contact states.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply78%24 eventsrefines a rule
When A new lead contacts the gym (via SMS or WhatsApp) and there is no AI draft available, OR the AI automation has sent unhelpful/repeated messages — operator takes over to personally engage a new lead
→ Do Operator introduces themselves by name and gym ('Hey [name], its Jack from CrossFit Bodmin'), apologises if automations were disruptive, then immediately asks about the lead's fitness background or experience level as the first qualifying question
Why: Opens a personalised conversation, qualifies the lead on experience level, and moves them toward a concrete next step (taster session, 1:1, or class booking)
Events 14, 15, 17, 22 all show the same structure: operator takes over an SMS lead conversation, introduces as 'Jack from CrossFit Bodmin', often apologises for automations, and immediately asks about fitness/CrossFit background. Events 2 and 3 show a similar qualifying question pattern on leads mid-conversation. Counter-evidence: not all lead take-overs follow this exact template (e.g. events 4, 9, 13 skip the introduction and go straight to options/pricing), suggesting the intro+apology pattern is context-dependent — likely triggered specifically when the lead has received confusing automated messages rather than every new lead interaction.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%4 eventsrefines a rule
When A closed record (lead or member) is reactivated
→ Do Transition the reactivated record into the 'follow_up' stage
Why: Reactivated leads/members are consistently routed into follow-up handling regardless of their prior stage
All 4 events show the same shape: a closed record (from lead or member status) gets reactivated and is moved to 'follow_up' stage, with consistent flags (reason=reactivated, aborted=false). The pattern generalizes across two different from_stage values (lead, member), suggesting the destination stage is determined by the reactivation event itself rather than the origin. Confidence is moderated by small sample size (4 events, 3 identical + 1 variant) and short 7-day lookback, so robustness across longer time horizons is unconfirmed.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution75%22 eventsrefines a rule
When An operator-resolution signal is emitted with signal_kind='no-action-needed' (walker flags a contact interaction as not requiring follow-up), regardless of contact_type (lead, member, business, unclassified)
→ Do Automatically mark the resolution as 'resolved' with intent='resolved' and keep the walker muted, without surfacing it for operator review
Why: Operator expects these no-action-needed signals to be silently closed out (resolved + muted) since they consistently require no human intervention across all contact types
All 22 events show identical intent='resolved' and walker_muted=true whenever signal_kind='no-action-needed', with zero exceptions across a variety of contact_types, indicating a strong, consistent mapping. Confidence is capped below 0.8 because detail/reason are always null, so we can't confirm the underlying trigger logic beyond the signal_kind label itself, and all events come from a single dense burst (mostly one day), limiting evidence of generalization over time.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%39 eventsrefines a rule
When When engaging with leads who express interest in CrossFit but need scheduling or clarification
→ Do Offer specific time slots for calls/sessions and provide booking links when appropriate
Why: Convert leads to scheduled appointments or direct bookings
Strong pattern emerges across 8+ lead interactions where operator consistently offers specific time options (e.g., '8am, 10:30am or evening 4:30pm or 7pm') and provides booking links. Pattern is consistent across WhatsApp and SMS channels. Counter-evidence is minimal - no conflicting approaches seen for similar lead contexts.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking75%3 eventsrefines a rule
When Lead contact requires scheduling follow-up appointment
→ Do Schedule follow-up appointment with specific date/time and appointment type
Why: Maintain lead engagement through structured appointment pipeline
All 3 events show identical pattern: operator records outcome for lead contacts by scheduling future appointments with specific times and types (intro→in_person→phone_call sequence suggests progression). Counter-evidence is limited sample size and unclear what triggers the specific appointment type selection.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution75%24 eventsrefines a rule
When Operator resolution walker fires for a contact interaction with no reply/action required (signal_kind=no-action-needed), across lead/member/business/unclassified contact types
→ Do Auto-mark the item as resolved and mute the walker/notification without operator intervention
Why: Item is closed out silently with no further operator action or alert needed
22 of 24 events share an identical shape: intent=resolved, signal_kind=no-action-needed, walker_muted=true, with reason almost always null — strongly suggesting a consistent auto-resolution behavior independent of contact_type. The one event with reason='replied-call' still resolves identically, showing the pattern generalizes across trigger reasons, though the near-total absence of varying reason/detail fields means we can't yet confirm what differentiates this from cases needing action.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy75%15 eventsrefines a rule
When A walker of any kind (post_apt_outcome, team_handler_idle, member_at_risk_attendance_drop, stalled_followup) has produced no fresh output for 30 consecutive days (stale_days=30), regardless of orq_row_count
→ Do Automatically insert an auto-mute for the stale walker, suppressing further alerts/output for that walker_kind, with a 90-day expiry before re-evaluation
Why: Reduce noise from walkers that have gone stale for 30+ days without needing manual review each time; mute persists until expires_in_days lapses or walker becomes active again
All 15 events share the identical trigger shape (stale_days=30, expires_in_days=90) and identical system action (auto-mute-inserted) across four distinct walker_kinds, showing this is a generalized threshold rule rather than a one-off. The pattern is consistent with no conflicting outcomes observed, though orq_row_count varies without visibly affecting the decision, suggesting it's not a causal factor — this was already the automated system's own consistent behavior rather than a discovered operator habit, so confidence is capped below 0.8 pending operator confirmation that this auto-mute logic should remain unchanged.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy75%14 eventsrefines a rule
When A walker output (post_apt_outcome, team_handler_idle, member_at_risk_attendance_drop, stalled_followup) has not produced new/refreshed rows for 30 days (stale_days=30), regardless of orq_row_count
→ Do System automatically inserts an auto-mute policy for that walker with a 90-day expiry
Why: Suppress repeated/stale walker alerts for 90 days to reduce noise, while allowing the mute to lapse and re-evaluate after expiry
All 14 events share an identical trigger shape (stale_days=30 -> auto-mute-inserted with expires_in_days=90) across four different walker_kinds, showing this is a generalized system rule rather than a one-off, with orq_row_count varying freely (not a determining factor). Confidence is not higher because this looks like a deterministic automated policy rather than an operator decision, so it may just reflect a fixed threshold rule rather than a learned/discretionary pattern.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%34 eventsrefines a rule
When When taking over from AI to communicate with leads, especially after delays or AI issues
→ Do Apologize for delay/issues, introduce self by name (Jack), and immediately propose scheduling a phone call with specific time options
Why: Convert lead interest into scheduled phone conversation to move them through sales funnel
Strong pattern across 8+ lead interactions where operator consistently: (1) apologizes for delays/AI issues, (2) introduces himself as 'Jack', and (3) proposes specific call times (e.g. events 1,2,6,10,19,24). This appears to be a systematic approach to lead conversion. Counter-evidence includes some leads getting booking links instead of calls, but the call-scheduling pattern dominates lead interactions.
ApproveEditRejectone-tap review lands with the Training Area
workboard-resolution75%50 eventsrefines a rule
When A workboard card is auto-swept by the stale-card-sweeper (signal_kind='auto-stale'), most commonly with detail='contact_deleted' but also for dormant_handoff, has_queued_card, insufficient_engagement, long_dormant_territory, existing_card, or aged_out_cold
→ Do System automatically marks the workboard entry as stale/resolved without operator or AI intervention (no manual approve/defer action taken)
Why: Stale or invalid cards (deleted contacts, dormant handoffs, aged-out leads) are cleared from the workboard automatically, keeping the board focused on live actionable entries
37 of 50 events (74%) are auto-stale sweeps with aa9_fired=false and no operator action, strongly indicating this is a fully automated, non-operator-driven resolution path that recurs constantly across the lookback window. The remaining events split between distinct patterns (live_lead_handover auto-approvals, and a couple of ownership-defer signals on the same entry), which are separate causal chains not conflicting with this one, but do mean 'auto-stale' itself has no single downstream operator action beyond the automated sweep — it's the sweeper's own decision, not a reactive operator behavior, which caps confidence.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%4 eventsrefines a rule
When A lead-stage contact exhausts their journey (no further steps/attempts remaining) while status is active
→ Do Transition the contact to 'closed' stage automatically
Why: Exhausted leads are consistently closed out rather than left active, keeping the lead pipeline clean
All 4 events over 7 days show an identical shape: reason='exhausted', aborted=false, from_stage='lead', from_status='active', to_stage='closed', with no conflicting outcomes observed. This is a small but perfectly consistent sample, so confidence is above the noise threshold but not maximal given the limited event count and single domain.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%30 eventsrefines a rule
When When an AI assistant has sent confusing, off-track, or technical error messages that may have confused the contact
→ Do Acknowledge and apologize for the AI confusion, explicitly tell contact to ignore the problematic messages, then redirect conversation back to the core business purpose
Why: Recover from AI errors gracefully and maintain professional relationship while getting back on track
Strong pattern seen in events 28 and 29 where operator explicitly apologizes for AI going 'off track' or 'technical bugs', tells contact to ignore problematic parts, then redirects. Event 28: 'apologies for the funny messages we have an ai assist that can go a little off track' and Event 29: 'ignore those bits, Cite is just a technical bug'. This is a clear recovery pattern when AI systems fail visibly to contacts.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%4 eventsrefines a rule
When A closed record (lead or member) is reactivated
→ Do Transition the record to 'follow_up' stage
Why: Reactivated closed records are consistently routed into follow_up for re-engagement, regardless of whether they originated as a lead or member
All 4 events show identical to_stage='follow_up' on reactivation from a closed status, spanning two different from_stage values (lead, member), suggesting the transition target is driven by the reactivation event itself rather than the originating stage. Confidence is moderated by small sample size (4 events, 3 of which share the same from_stage='lead') and short 7-day lookback, so generalization across stages is only lightly tested.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%7 eventsrefines a rule
When A lead-stage contact's journey reaches exhaustion (no more journey steps/rules apply and it is not manually aborted)
→ Do Automatically transition the contact from lead/active to closed when journey exhaustion is detected
Why: Leads that have run out of journey steps are consistently closed out rather than left lingering in active lead status
All 7 events show an identical, uniform transformation: reason=exhausted, aborted=false, from_stage=lead/active → to_stage=closed, with no conflicting variants (e.g., no 'aborted:true' or different reason codes). This strongly suggests a deterministic system rule rather than case-by-case operator judgment. Confidence is capped below 0.9 because this looks like it may already be automated system behavior (not an operator decision) and the sample, while consistent, spans a short window with some near-duplicate timestamps (possible batch/dedup artifacts) that slightly reduce independence of evidence.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%28 eventsrefines a rule
When A lead (contact_type=lead) messages in via WhatsApp or SMS asking about CrossFit classes, pricing, or how to get started, especially with no prior response (AI draft absent) and it's a 100% human take_over reply
→ Do Operator replies personally (using own name, apologizing for delay if applicable), asks a qualifying question about experience/background or preferred training time, then offers a clear next-step choice: free taster class vs 1:1 session, and shares pricing (£45 per 1:1, ~£10/class for membership, £120 unlimited) plus a booking link (pushpress.com/landing/plans/...)
Why: Lead is moved toward booking a taster or 1:1 session, converting engagement into a scheduled visit or membership signup
Across 15+ lead-classified events, the operator consistently follows a repeatable sales script: acknowledge/apologize, ask about fitness background or time preference, present taster-vs-1:1 options, quote pricing, and send a PushPress booking link. This structure recurs verbatim across multiple different leads (Jacob, Jo, Ross, Karen, Stuart, Kerry), showing strong generalization. Counter-evidence: some events are member/unclassified billing fixes or casual acknowledgments (e.g., events 9, 14-16) that don't fit this lead-onboarding shape, so the pattern is specific to new-lead intake, not all operator replies.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%35 eventsrefines a rule
When A lead makes contact (via SMS or WhatsApp) expressing interest in trying CrossFit Bodmin, especially after silence/automation delay or an initial inquiry about pricing/getting started
→ Do Operator personally messages the lead by first name, identifies as 'Jack from CrossFit Bodmin', apologizes for any delay, asks about their fitness/CrossFit background, then offers a choice between a free taster session or 1:1 session, often following up with a direct PushPress booking link
Why: Lead feels personally engaged, understands next steps and pricing, and converts to booking a taster or 1:1 session
Across ~15 lead-tagged events, there's a consistent operator behavior: personalized greeting with name + operator name + gym name, acknowledgment of delay/automation issues, a qualifying question about fitness background, and an offer structured around taster vs 1:1 sessions, frequently closed with a PushPress booking link. This repeats across multiple different lead names (Jacob, Jo, Ross, Karen, Nicola, Stuart) with near-identical scripting, indicating a reusable operator playbook rather than one-off coincidence. Counter-evidence: some events (member/unclassified/casual_drop_in contact types) deviate from this exact script, showing the pattern is specific to 'lead' contact_type rather than universal across all contact types.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply75%30 eventsrefines a rule
When When taking over from AI for leads, especially after delays or AI issues
→ Do Apologize for delay/issue, introduce self as Jack, and immediately propose scheduling a phone call with specific time options
Why: Convert lead interest into scheduled conversation to move toward membership
Clear pattern across 8+ lead interactions where Jack takes over, apologizes (delay/AI issues), introduces himself, and proposes calls with specific times. Consistent structure: apology + introduction + call scheduling. Counter-evidence: some variation in apology reasons and time specificity, but core pattern holds strong.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%6 eventsrefines a rule
When A lead contact exhausts its journey without conversion (no further actions/attempts remain)
→ Do System auto-closes the contact, transitioning it from lead/active to closed with reason 'exhausted'
Why: Stale/unresponsive leads are cleanly removed from active pipeline without manual intervention
All 6 events show an identical shape: same event type, reason, stage transition, and status, indicating a consistent automated rule rather than operator discretion. Confidence is moderated rather than higher because this looks like a deterministic system behavior (not a judgment call) and the sample is clustered in time (4 events within seconds on one day), suggesting a single batch trigger rather than independently generalized cases.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition75%11 eventsrefines a rule
When A booking is confirmed with reason 'appointment_upcoming' and the contact is already in stage 'booked' (or transitioning from 'member' to 'booked')
→ Do Log/confirm the journey stage transition to 'booked' without triggering any re-engagement or recovery flow, since this is a routine reconfirmation of an upcoming appointment
Why: Contact remains correctly marked as 'booked' with status 'active', ensuring downstream automations (reminders, prep messages) continue uninterrupted
All 11 events share identical event type, reason, aborted=false, to_stage='booked', and from_status='active', with from_stage being either 'booked' (9/11) or 'member' (2/11) — a consistent, non-conflicting shape. This looks like a recurring system-generated reconfirmation pattern rather than a one-off, though the repeated near-duplicate timestamps (e.g., 4 identical events at 15:15:00) suggest possible duplicate firing worth flagging to the operator rather than a distinct causal decision each time.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle72%3 eventsrefines a rule
When A workboard entry with affordance 'fyi' reaches its decay threshold (age_days >= decay_days) without operator action
→ Do Allow the entry to auto-resolve via decay without operator intervention — no manual action required for 'fyi'-affordance entries once they reach decay age
Why: Stale informational entries are cleared automatically, keeping the workboard clean without burdening the operator with low-priority closures
All 3 events share the same shape: affordance='fyi', contact_id=null, age_days == decay_days == 7, resolved by decay with no operator action. Two distinct event kinds (channel_outage x2, warmup_freshness_low x1) both follow the same resolution path, suggesting the pattern generalises across 'fyi' entry types rather than being kind-specific. Counter-evidence: small sample (n=3), and it's possible the operator simply never saw these rather than consciously delegating them to decay — confidence is moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy72%13 eventsrefines a rule
When A walker of a given kind (team_handler_idle, member_at_risk_attendance_drop, or stalled_followup) has been stale for 30 days with orq_row_count between 1-5 and expires_in_days=90
→ Do Auto-insert a mute for the stale walker instance to suppress further alerts/actions until expiry
Why: Reduce noise from stale, unresolved walker rows without deleting the underlying data, deferring re-evaluation until the 90-day expiry window
All 13 events share the identical trigger shape (stale_days=30, expires_in_days=90) across three distinct walker_kinds, and all consistently produce the same auto-mute action, suggesting a fixed policy rule rather than case-specific judgment. Confidence is not higher because orq_row_count varies (1-5) without visible correlation to any different treatment, and this looks like a deterministic system policy (likely a cron/batch job) rather than an operator decision, so 'reusable pattern' here mainly confirms existing automation rather than surfacing new operator intent.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply72%28 eventsrefines a rule
When The AI is handling a lead conversation and the operator steps in (take_over or edit) — particularly when the AI either produced an unhelpful/generic message, failed to send at all (ai_draft_text=null), or the conversation requires nuanced personal qualification of the lead
→ Do Operator introduces themselves personally (by name, from CrossFit Bodmin), acknowledges any automation friction, then immediately asks a qualifying question about the lead's fitness background OR presents the two entry-point options (free taster session vs. 1:1 at £45) and asks the lead to choose one
Why: Lead is moved from cold/stalled to an active decision point — either booking a taster, committing to 1:1 sessions, or revealing their availability/preference so next steps can be scheduled
At least 8–10 lead take-over events (events 6, 9, 10, 11, 12, 13, 18, 21, 23, 25, 27) follow the same shape: operator takes over from a stalled or automation-broken lead thread, re-introduces themselves, and either asks about fitness background or presents the taster-vs-1:1 binary choice. This pattern is consistent across SMS and WhatsApp channels. Counter-evidence: some take-overs for non-lead contacts (members, drop-ins, unclassified) follow different logic (pricing, links, casual closings), so the pattern is lead-specific and should not generalise to all contact types.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%5 events
When Scheduler triggers an outbound SMS send with intent 'tier_signoff' for an active lead-stage contact with DND=false and no terminal outcome set
→ Do Send a tier_signoff SMS via AI sender to the contact
Why: Contact receives a scheduled tier signoff message progressing them through the lead journey
All 5 events share an identical signal shape: scheduler-initiated, AI-sent, SMS channel, tier_signoff intent, active lead with no terminal outcome and DND off. The pattern is internally consistent with zero conflicting actions observed. Confidence is capped at 0.72 rather than higher because events 1-4 occur within 5 seconds of each other on the same day, which suggests a potential burst/retry anomaly rather than 4 independent confirmations — effectively this may be 2 distinct scheduling occurrences (Jun 22 and Jun 28), not 5.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition72%4 eventsrefines a rule
When A booking_confirmed event fires with reason='appointment_upcoming' while the user is already in 'booked' stage with 'active' status
→ Do Confirm the booking transition from booked→booked (no stage change), treating it as a re-confirmation or reminder acknowledgement for an upcoming appointment
Why: The journey remains in 'booked/active' state; the event is logged as a non-destructive confirmation ping rather than a stage progression
All 4 events share an identical shape: booking_confirmed with reason=appointment_upcoming, a self-loop from booked→booked, active status, and aborted=false. This is consistent across 3 separate days (Tue, Wed, Fri twice), suggesting a recurring automated or operator-triggered reminder confirmation pattern. Counter-evidence: the identical payload across all events could indicate a single systemic loop rather than distinct operator decisions, and the lack of stage change means it may be a no-op notification rather than a deliberate action requiring future automation.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile72%4 events
When A board reconcile journey event fires, closing a contact with exactly 1 card cleared and 0 drafts dismissed
→ Do Close the contact via the board-reconcile journey when a single card has been cleared and no drafts remain
Why: Contact is cleanly closed after reconciliation with one card resolved and no outstanding draft work
All 4 events share an identical payload shape (cards_cleared=1, drafts_dismissed=0, source=journey) and occurred within a 4-second burst, strongly suggesting a consistent automated or semi-automated reconcile action rather than noise. There is no conflicting outcome — every event results in contact_closed under the same conditions. The tight time clustering (4 events in ~4 seconds) slightly reduces confidence that these represent independent operator decisions versus a single batch operation being logged multiple times, which could overstate generalisability.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_resolution72%24 eventsrefines a rule
When An operator-resolution event fires with signal_kind='no-action-needed' and intent='resolved', typically muted via walker
→ Do Automatically mark the associated conversation/task as resolved with no further follow-up required, keeping walker muted
Why: Operator confirms no action is needed and the item is closed out silently without escalation, regardless of contact_type
All 24 events share identical intent='resolved', signal_kind='no-action-needed', and walker_muted=true, forming a highly consistent shape across a 7-day window and multiple contact types — strong evidence of a stable, repeated operator behavior. Confidence is capped below 0.8 because 'reason' and 'contact_type' vary without clear differentiation in outcome, and the events are clustered heavily on one day (Jun 29), suggesting possible batch/bulk-clearing behavior rather than a per-case decision pattern.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%3 eventsrefines a rule
When A contact is active (non-terminal, non-DND) at any journey stage and a scheduled trigger fires (scheduler, appointment-reminder-day_before, or appointment-reminder-day_of)
→ Do Send an AI-authored follow-up message via WhatsApp
Why: Contact is re-engaged or reminded, keeping the journey moving toward a terminal outcome
All 3 events share the same shape: AI-sent, WhatsApp channel, follow_up intent, active/non-terminal/non-DND contact, fired by a time-based or schedule-based caller_source. The pattern generalises across two distinct journey stages (lead and booked) and three distinct caller_sources, suggesting the rule is 'send follow-up whenever a scheduled trigger fires and the contact is reachable and non-terminal.' Confidence is moderate rather than high because 3 events is a small sample and all have null outcomes, so there is no evidence yet that the outbound message achieves the expected re-engagement.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle72%2 eventsrefines a rule
When A channel_outage workboard entry with affordance 'fyi' and no associated contact reaches its decay threshold (age_days equals decay_days, both = 7)
→ Do Allow the workboard entry to be resolved automatically by decay — no operator intervention required; entry is closed via lifecycle decay mechanism
Why: Stale channel_outage FYI entries with no contact are silently retired after 7 days, keeping the workboard clean without manual triage
Both events share an identical shape: channel_outage kind, fyi affordance, null contact_id, and age_days exactly matching decay_days (7), both resolved by the same decay mechanism at the same timestamp. This consistency across two independent workboard entries (2427 and 2409) suggests a deliberate policy — fyi-only outage notices with no contact are left to decay rather than actively closed. Counter-evidence: only 2 events and both fired simultaneously, which could reflect a batch decay run rather than a robust ongoing policy; confidence is moderate until more temporally distributed examples are observed.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%7 eventsrefines a rule
When An inbound message arrives via WhatsApp from a contact in journey_stage='lead' with journey_status='active', dnd=false, no terminal outcome set, triggered via chat_entry
→ Do Send an AI-authored reply outbound on WhatsApp
Why: AI continues the conversation with the lead, maintaining active engagement without human intervention
All 7 events share an identical shape: AI sender, WhatsApp channel, chat_entry caller, active lead with no terminal outcome and DND off. This is consistent across multiple days and times, suggesting a deliberate routing rule rather than coincidence. The main caveat is that all events appear to be from a single contact's journey (no counter-examples of this trigger producing a different action), so the pattern may be contact-specific rather than fully generalised — operator should confirm this applies across multiple contacts.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition72%4 eventsrefines a rule
When A booking_confirmed event fires with reason='appointment_upcoming' while the contact is already in stage='booked' with status='active'
→ Do Confirm the booking without changing stage (remain in 'booked'), keeping status active — no stage transition is executed despite a journey_transition decision type being fired
Why: Contact stays in 'booked' stage; the system acknowledges the upcoming appointment without advancing or resetting the journey
All 4 events share identical shape: booking_confirmed, reason=appointment_upcoming, from_stage=booked, to_stage=booked, aborted=false — indicating a deliberate no-op transition pattern when an appointment is imminent for already-booked contacts. The pattern is consistent with zero conflicting signals. Confidence is moderate rather than high because 4 events is a small sample, all may belong to the same automated scheduled job (events at 08:15 on two days suggest a cron), and it's unclear whether this represents operator intent or a recurring system artefact worth reviewing.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%2 events
When A contact is in journey_stage='booked' with journey_status='active', dnd=false, no terminal outcome, and an appointment-reminder caller_source fires (either 'appointment-reminder-day_before' or 'appointment-reminder-day_of')
→ Do Send an AI-initiated follow_up message via WhatsApp on both the day-before and day-of the appointment
Why: Contact receives timely appointment reminders at two touchpoints, increasing show rate for booked appointments
Both events share identical shape: booked+active contact, dnd=false, no outcome yet, AI sender, WhatsApp channel, and the two distinct caller_sources represent a deliberate two-stage reminder sequence (day_before → day_of). This is a consistent automation pattern rather than noise. Confidence is moderate rather than high because there are only 2 events and no variation to test against — the pattern may be a single appointment's reminder pair rather than a truly generalised rule, though the structured caller_source naming strongly implies intentional sequencing.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%4 events
When An inbound message arrives via WhatsApp from a contact in 'lead' stage with 'active' status, DND off, no terminal outcome set, routed through chat_entry
→ Do Send an AI-generated reply outbound via WhatsApp
Why: Operator expects the AI to handle WhatsApp lead conversations autonomously via chat_entry, replying without human intervention
All 4 events share an identical shape: AI sender, WhatsApp channel, chat_entry source, active lead with no terminal state and DND off. This consistency across multiple events on the same day suggests a stable automated pattern rather than one-off operator actions. Counter-evidence: all events occur on a single day (Jun 22) for what could be a single contact thread, so generalisability across contacts is unconfirmed — operator should verify whether this reflects multiple distinct leads or one conversation.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition72%11 eventsrefines a rule
When A booking exists (stage=booked) with an upcoming appointment and the system emits a booking_confirmed lifecycle check, regardless of whether the prior stage was 'booked' or 'member'
→ Do Log/confirm the booking as re-affirmed (stage transition to 'booked') without any status change or intervention; treat as a routine re-confirmation event tied to an upcoming appointment
Why: Booking remains active and confirmed ahead of the scheduled appointment; no operator action required beyond passive logging
All 11 events share identical event type, reason, aborted flag, to_stage, and from_status, showing a highly consistent, repeatable pattern of appointment-upcoming reconfirmations. The only variation (from_stage 'booked' vs 'member') doesn't change the outcome, suggesting the trigger generalizes across entry states. Confidence is moderate-high rather than very high because this looks like an automated system heartbeat/reconfirmation rather than a distinct operator decision, so its value as an actionable 'pattern for operator' is limited beyond confirming expected automation behavior.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy72%5 eventsrefines a rule
When A walker of kind 'post_apt_outcome' or 'member_at_risk_attendance_drop' produces an orq_row_count of 1 and the data is stale for 30 days
→ Do Insert an auto-mute with expires_in_days=90 for the triggering walker row
Why: Suppress walker-generated outreach for 90 days when the queue has only 1 stale row, preventing low-signal noise from reaching members
All 5 events share an identical shape: orq_row_count=1, stale_days=30, expires_in_days=90, across exactly two walker kinds, fired at consistent early-morning scheduled times. The repetition across distinct walker kinds and multiple days suggests a deliberate policy rule rather than a one-off. Counter-evidence: the sample is small (5 events), both walker kinds always appear with orq_row_count=1 so it's unclear if higher row counts would still trigger a mute, and we cannot rule out that this is purely automated system behaviour rather than an operator-authored policy.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%4 eventsrefines a rule
When An inbound message arrives via WhatsApp from a contact in journey_stage='lead' with journey_status='active', dnd=false, no terminal outcome set, triggered via chat_entry
→ Do Send an AI-generated reply outbound via WhatsApp
Why: AI continues the conversation with the lead, keeping the journey active and progressing toward a terminal outcome
All 4 events share an identical shape: AI sender, WhatsApp channel, chat_entry caller, active lead with no terminal outcome and DND off. This is consistent enough to suggest a standing rule that chat_entry triggers on WhatsApp from active leads always result in an AI reply. The main caveat is that all 4 events occurred on the same day (Jun 22), so this could reflect a single conversation thread rather than a generalised cross-contact pattern — confidence is moderate rather than high for that reason.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%27 eventsrefines a rule
When A lead-stage contact is active (or occasionally in a non-terminal closed state) and is surfaced on the workboard review queue, regardless of channel or prior outcome
→ Do Operator manually reviews and sends an outbound message via the contact's available channel (sms, whatsapp, or instagram) from the workboard review interface
Why: Re-engagement of the lead; operator expects the send to move the contact along the journey or at least attempt contact
All 27 events share the same shape: workboard_review caller, team sender, lead journey_stage, dnd=false, and an operator-approved outbound send — this is a highly consistent pattern across two working days and three channels. The pattern is slightly weakened by one anomalous event (event 5: isTerminal=true, journey_status=closed, outcome=exhausted) where the operator sent to an exhausted-closed lead, suggesting the rule is not strictly enforced by the system and is human-overridable. No conflicting behaviour exists (operators always send, never skip), so the pattern is real but the anomaly prevents full confidence.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%8 eventsrefines a rule
When An inbound message arrives via WhatsApp from a contact in 'lead' journey stage with 'active' status, DND off, no terminal outcome, triggered via chat_entry
→ Do Send an AI-authored reply outbound on WhatsApp
Why: Lead receives an AI response, keeping the conversation active while the contact remains in the lead stage
All 8 events share an identical signal shape: AI sender, WhatsApp channel, chat_entry caller, lead/active journey snapshot with no DND or terminal flags — this is highly consistent with no conflicting cases. The pattern is clear but confidence is moderated because all events map to a single contact/thread (no cross-contact variety is visible), so it may reflect one conversation rather than a generalised rule. Still, the uniformity warrants proposing this as a reusable trigger-action rule for operator review.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%5 eventsrefines a rule
When An inbound chat message is received via WhatsApp from a contact who is in the 'lead' journey stage with active status, DND off, no terminal outcome, and the caller source is 'chat_entry'
→ Do Send an AI-generated reply outbound via WhatsApp
Why: Operator expects the AI to handle WhatsApp lead conversations autonomously with replies, keeping the lead engaged while in active/non-terminal status
All 5 events share an identical shape: AI sender, WhatsApp channel, chat_entry caller source, lead stage, active status, DND false, non-terminal, no outcome — making the pattern structurally consistent across multiple events and two separate dates. The pattern is strong in uniformity but limited by the fact that all signals come from a single contact or a very narrow scenario, so it may reflect one ongoing conversation thread rather than a fully generalised rule. No conflicting cases (e.g., operator overrides or human replies) are present in the dataset to contradict it.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply72%35 eventsrefines a rule
When A lead (contact_type=lead or unclassified) messages in expressing interest in starting CrossFit, asking about pricing, or going quiet after initial contact, and every AI draft for these conversations is null (fully manual takeover)
→ Do Operator personally replies introducing themselves ('Jack from CrossFit Bodmin'), asks about fitness/CrossFit background, offers a choice between a 1:1 session (£45) or a free taster class, asks preferred days/times, and sends a PushPress landing page link to book/pay
Why: Move the lead from inquiry to booked taster or 1:1 session, converting interest into a scheduled visit or membership signup
Across 20+ lead-classified events, there's a consistent operator playbook: friendly personal intro, ask about experience level, present taster-vs-1:1 choice, negotiate times, then send a pushpress plan link — this repeats across many different named leads (Jacob, Jo, Karen, Ross, Nicola, Stuart, Danielle). All events share ai_draft_text=null and signal_kind=take_over, meaning the AI never handled these and the operator fully manually crafts responses, suggesting this is a well-established human workflow ripe for AI templating. Counter-evidence: member and casual_drop_in contacts get different treatment (billing fixes, free week nudges), so the pattern is specific to 'lead'/'unclassified' contact_type at top-of-funnel, not universal across all contact types.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition72%4 eventsrefines a rule
When A booking_confirmed event fires with reason 'appointment_upcoming' while the contact is already in 'booked' stage with 'active' status
→ Do Confirm the booking and keep the contact in the 'booked' stage without advancing or aborting the journey
Why: Contact remains in 'booked' stage with the booking reaffirmed ahead of an upcoming appointment, no stage transition occurs
All 4 events share an identical shape: booking_confirmed triggered by appointment_upcoming, with no stage change (booked→booked) and aborted=false. The pattern is consistent with no conflicting cases. The main uncertainty is that this looks like a system-generated confirmation loop rather than a deliberate operator action — the repeated no-op transition (same from/to stage) may indicate an automated re-confirmation signal rather than a meaningful operator decision point, which limits confidence somewhat.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%3 eventsrefines a rule
When A scheduled or automated trigger fires for a contact who is active (dnd=false, isTerminal=false, outcome=null) at any journey stage
→ Do Send an AI-initiated follow-up message via WhatsApp
Why: Contact receives a timely follow-up, keeping them engaged and progressing through their journey stage
All 3 events share the same shape: AI-sent WhatsApp follow-ups triggered automatically (scheduler or appointment reminder), with the contact in an active, non-terminal state and no resolved outcome. The pattern holds across two different journey stages (lead and booked), suggesting it generalises to the active/non-terminal condition rather than being stage-specific. Counter-evidence: the small sample (3 events) and differing caller_sources mean this could reflect three distinct configured automations rather than a single unified rule — confidence is moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%26 eventsrefines a rule
When A lead-stage contact is active (journey_status=active, isTerminal=false, dnd=false) and appears in the workboard review queue
→ Do Send an outbound message via the contact's available channel (sms, whatsapp, or instagram) through operator_review_send
Why: Operator manually approves and dispatches outbound messages to active leads surfaced in the workboard review, keeping the lead pipeline engaged
25 of 26 events share the same shape: workboard_review-triggered, team-sender, lead stage, active status, dnd=false, isTerminal=false — across multiple channels (sms, whatsapp, instagram), indicating a consistent manual review-and-send workflow for active leads. The one exception (event #4) had outcome=exhausted and isTerminal=true with journey_status=closed, suggesting the operator also sends terminal/exhausted contacts occasionally — this is a mild conflict but represents only 1/26 cases and may be an edge-case or error. The pattern is robust enough to propose but should be reviewed for whether terminal/closed contacts should ever be included.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%6 eventsrefines a rule
When An AI sender triggers a reply via chat_entry on any channel (SMS or WhatsApp) when the contact is an active lead, DND is false, and the journey is non-terminal
→ Do Send the outbound reply message via the active channel
Why: Message is delivered to the lead regardless of outcome state (null or exhausted), keeping the conversation progressing while the journey remains active and non-terminal
All 6 events share the same core shape: AI-initiated reply via chat_entry, active non-terminal lead, DND false — and in every case the outbound send was executed. The pattern holds across two channels (SMS and WhatsApp) and two outcome states (null and exhausted), suggesting the trigger is broad. The main uncertainty is whether 'exhausted' outcome on SMS (events 1–2) is intentional or an edge case that should be blocked; the operator may want to review whether sending on an exhausted outcome is correct behaviour.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile72%5 eventsrefines a rule
When A board reconcile event fires from the journey source with exactly 1 card cleared and 0 drafts dismissed
→ Do Close the contact and clear the single pending card from the board without dismissing any drafts
Why: Board is reconciled cleanly — one card removed, no draft work lost
All 5 events share an identical payload shape (cards_cleared=1, drafts_dismissed=0, source=journey), which is a consistent, repeatable signal rather than noise. The clustering of 4 events within a 4-second window on Jun 28 may indicate a burst/retry mechanism rather than 4 independent human actions, which slightly weakens confidence that each represents a truly independent operator decision. Counter-evidence: the small sample size (5 events, 2 distinct timestamps) and possible de-duplication failure mean the true independent-event count could be as low as 2, keeping confidence moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition72%4 eventsrefines a rule
When A booking_confirmed event fires with reason 'appointment_upcoming' while the journey is already in 'booked' stage with 'active' status
→ Do Confirm/re-confirm the booking and keep the journey in 'booked' stage without transitioning — treat this as a reminder or re-affirmation trigger rather than a stage change
Why: Journey remains in 'booked'/'active' state; appointment is flagged as upcoming without disrupting the existing booking flow
All 4 events share an identical shape: same event type, same reason, same from/to stage, same status, and aborted=false — suggesting this is a deliberate, repeated pattern where an upcoming-appointment signal causes a booking re-confirmation in place rather than a stage transition. The lack of any conflicting events (e.g. aborted=true or a different to_stage) strengthens consistency. Counter-evidence: the small sample (4 events, all structurally identical) could reflect a single recurring automated trigger rather than a true operator decision pattern, so confidence is moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%3 eventsrefines a rule
When A contact is active (non-DND, non-terminal, active journey status) at any journey stage, and a scheduled or system-triggered follow-up moment arrives (scheduler, appointment-reminder-day_before, appointment-reminder-day_of)
→ Do Send an AI-initiated follow-up message via WhatsApp
Why: Contact receives a timely outbound touchpoint aligned to their journey stage, keeping them engaged or reminded without human intervention
All 3 events share the same shape: AI-sent WhatsApp follow-up, active/non-terminal contact, null outcome, triggered by automated sources (scheduler or appointment reminders). This suggests a deliberate automation pattern where the system sends follow-ups at key journey moments. The main caveat is the small sample (3 events) and that two different journey stages (lead, booked) are present — though both result in the same action, so stage appears not to differentiate the consequent. No conflicting signals observed.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy72%15 eventsrefines a rule
When A walker's Orq output rows have been stale for 30 days with no fresh activity, regardless of walker_kind
→ Do System auto-inserts an auto-mute decision on the walker to suppress further noise from stale rows
Why: Stale walker outputs (30+ days old) stop generating alerts/actions until they expire naturally at 90 days, reducing operator noise from dead leads
All 15 events share an identical structural shape: stale_days=30 and expires_in_days=90 trigger an auto-mute-inserted decision, consistently across four different walker_kinds and varying row counts, suggesting a uniform system rule rather than a one-off. Confidence is moderated because this looks like an automated policy rather than an operator-driven choice (no evidence of operator override or exception), so the 'pattern' may simply reflect a fixed threshold rule already encoded in the system rather than a discretionary behavior to generalize.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%5 eventsrefines a rule
When An inbound WhatsApp message arrives from a contact in 'lead' journey stage with 'active' status, DND off, no terminal outcome, triggered via chat_entry
→ Do Send an AI-generated reply via WhatsApp
Why: AI handles the conversation autonomously for active leads on WhatsApp without human escalation
All 5 events share an identical shape: AI sender, WhatsApp channel, chat_entry caller, lead/active journey state, DND off, non-terminal. This strongly suggests a standing rule that active leads messaging via WhatsApp are handled by the AI automatically. Counter-evidence: the sample is small (5 events, single contact likely), there is no variation in conditions to confirm the rule boundaries, and we cannot rule out that these are all the same conversation thread rather than independent trigger-action pairs.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile72%16 eventsrefines a rule
When An inbox item appears on the board (cards pending or drafts present) during board reconciliation
→ Do Dismiss each inbox item individually via inbox/dismiss, clearing cards and/or dismissing drafts as applicable
Why: Inbox is fully resolved, board reconciled with no pending items remaining
All 16 events share the same source (inbox/dismiss) and event type (inbox_resolved), showing a consistent operator behaviour of dismissing inbox items one-by-one during board reconciliation sessions — two distinct sessions visible (Mon 29 Jun ~11:24–12:40, Tue 30 Jun ~11:57). The pattern is strong in action shape but the payload varies (cards_cleared ranges 0–2, drafts_dismissed ranges 0–2), suggesting the operator handles whatever is present without a fixed rule on composition. The main uncertainty is whether dismissal is always the right action or whether some items should instead be acted upon (no 'accept/commit' events observed, which could mean this is the correct resolution path or simply that those events are captured elsewhere).
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile72%5 eventsrefines a rule
When A board reconciliation event fires with source='journey', clearing exactly 1 card and dismissing 0 drafts
→ Do Close the contact and clear 1 card from the board with no draft dismissals
Why: Board is reconciled cleanly — one card removed, journey progresses, no pending drafts left behind
All 5 events share an identical payload shape (cards_cleared=1, drafts_dismissed=0, source=journey), which is consistent enough to suggest a repeatable pattern rather than noise. The clustering of 4 events within 4 seconds on Jun 28 is slightly unusual and could indicate a batch/replay scenario rather than 5 independent operator actions, which slightly reduces confidence. No conflicting shapes are present, but the rapid burst warrants operator review before promoting this as a fully generalised rule.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send72%3 eventsrefines a rule
When A contact is active (dnd=false, isTerminal=false, journey_status=active) in either 'lead' or 'booked' stage and a scheduled trigger fires (scheduler, appointment-reminder-day_before, appointment-reminder-day_of)
→ Do Send an AI-initiated follow-up message via WhatsApp
Why: Contact is re-engaged or reminded at the appropriate journey stage, keeping the conversation active until a terminal outcome is reached
All 3 events share the same shape: AI sender, WhatsApp channel, follow_up intent, dnd=false, isTerminal=false, outcome=null, journey_status=active — fired by distinct but schedule-based caller_sources. This suggests a consistent operator policy of allowing the AI to send follow-ups whenever a scheduled trigger fires and the contact remains reachable and unresolved. The main counter-evidence is the small sample size (3 events) and the variation in journey_stage (lead vs booked), which could mean different message content applies per stage — but the send-or-not decision appears uniform.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking70%2 eventsrefines a rule
When After completing an intro appointment with a lead
→ Do Schedule a follow-up in-person appointment within 5 days
Why: Progress lead from initial intro to deeper engagement meeting
Pattern shows operator scheduling in-person follow-up (June 15) after intro appointment (June 10). The 5-day gap and progression from 'intro' to 'in_person' suggests a systematic lead nurturing approach. However, only 2 events limits confidence - need more instances to confirm this isn't coincidental timing.
ApproveEditRejectone-tap review lands with the Training Area
workboard-resolution70%50 eventsrefines a rule
When A workboard entry is of entry_kind 'live_lead_handover' and reaches the walker's auto-sent evaluation point
→ Do System automatically approves the handover (aa9_fired=true, signal_kind=approve) without operator intervention
Why: Lead handover proceeds automatically once walker marks it auto-sent, no manual approval step needed
All 7 events with entry_kind=live_lead_handover and entry_source=walker:live_lead_handover:auto-sent (events 4,6,12,17,18,32) consistently show aa9_fired=true and signal_kind=approve, a clean and repeated shape. This is distinct from the much larger auto-stale/sweeper cluster which is a separate, non-approval pattern (system marking cards stale for various reasons like contact_deleted, aged_out, dormant_handoff) with no consistent single operator action beyond the automated staleness marking itself — that cluster is background housekeeping rather than a decision pattern worth flagging as actionable.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking70%3 eventsrefines a rule
When Lead contact requires follow-up engagement
→ Do Schedule appointment with lead within 2-7 days
Why: Convert lead through structured engagement
All 3 events show consistent pattern of scheduling appointments with leads after recording outcomes. Appointment types vary (intro, in_person, phone_call) but core behavior is consistent - operator always schedules follow-up within reasonable timeframe. Pattern generalizes across different appointment formats, suggesting robust operator practice for lead nurturing.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition68%2 eventsrefines a rule
When A conversation stage is reactivated from 'lead' (closed status) and transitions to 'follow_up'
→ Do Transition the conversation from a closed 'lead' stage into the 'follow_up' stage and mark it as reactivated (not aborted)
Why: Closed leads are re-engaged and moved into a follow-up workflow for further operator action
Both events share an identical signal shape: a closed lead stage being reactivated and routed to follow_up, with no aborts, occurring on the same day within ~90 minutes of each other. This consistency across two events supports a genuine pattern rather than noise. However, the low event count (2) and the tight temporal clustering (same day) limit confidence — this could reflect a one-off batch operation rather than a recurring operational rule, so operator review is warranted.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle68%2 events
When A channel_outage workboard entry reaches its decay threshold (age_days >= decay_days, both equal to 7) with affordance 'fyi' and no associated contact_id
→ Do Allow the workboard entry to be auto-resolved via decay (no manual operator intervention required); the system closes the entry automatically
Why: Stale channel_outage FYI entries with no contact are cleared from the workboard without operator action, keeping the board tidy
Both events share identical shape: channel_outage kind, fyi affordance, null contact_id, and age_days exactly matching decay_days (7), resolved by the same decay mechanism at the same timestamp. This suggests a consistent policy of letting informational, contact-free channel outage entries expire automatically rather than requiring manual resolution. Counter-evidence: only 2 events sampled, both captured at the same instant which may indicate a batch run rather than independently recurring behaviour, slightly limiting generalisability.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle68%2 eventsrefines a rule
When A channel_outage workboard entry reaches its decay threshold (age_days equals decay_days, both = 7) with affordance 'fyi' and no associated contact_id
→ Do Allow the workboard entry to be auto-resolved via decay (no operator intervention required); let the decay mechanism close the item
Why: Stale channel_outage FYI entries with no contact are quietly retired without manual operator action, keeping the workboard clean
Both events share identical shape: channel_outage, affordance=fyi, contact_id=null, age_days=decay_days=7, resolved by the same decay mechanism at the same timestamp. This suggests a consistent policy of letting FYI-level channel outages with no contact self-expire after 7 days. Counter-evidence is thin — only 2 events, both captured at exactly the same time, which could indicate a batch run rather than repeated independent decisions, slightly limiting generalisability.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply68%22 eventsrefines a rule
When A new lead comes in (via automation) asking about pricing, gym experience, or trial options, and 100% AI/automation handling has failed or stalled (evidenced by operator apologising for 'automations playing up' or whatsapp kicking them out)
→ Do Operator manually takes over the conversation, introduces themselves by name (Jack), asks about the lead's fitness/CrossFit background, then routes them to either a free taster session or 1:1 sessions, sending a PushPress plan link and quoting specific pricing (e.g. £120 unlimited, £45 for 1:1, £90 for 9x/month)
Why: Lead is qualified by experience level, given a clear low-friction entry point (taster or 1:1), and receives a booking link to convert into a paying member
There is a clear, repeated multi-step script across 8+ lead-facing events: greet by name, mention automation issues, ask about experience level, then offer taster vs 1:1 with pricing and a booking link. This is consistent enough (events 3,4,10,13,14,15,16,17,22) to be a reusable template for lead onboarding takeovers. Confidence is moderated because member/unclassified contact types show different, less consistent behavior (billing fixes, casual acknowledgments) that shouldn't be conflated into the same pattern.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_organic_reply68%30 eventsrefines a rule
When A new or re-engaged lead messages in (via SMS or WhatsApp) asking about pricing, getting started, or has gone quiet after an automation failure, and no AI draft was used (operator fully composes reply)
→ Do Operator personally introduces themselves by name (Jack from CrossFit Bodmin), asks a qualifying question about the lead's fitness/CrossFit background, then guides them toward a specific next step: either a free taster class, a 1:1 session (£45), or sends a PushPress plan/booking link, often mentioning pricing (e.g. £120 unlimited, ~£10/class, £45 1:1)
Why: Lead responds with preference (taster vs 1:1) and operator converts the conversation into a booked session or completed sign-up via the plan link
Across 30 events, a clear recurring script emerges for lead/unclassified contacts: personalized greeting apologizing for automation issues, a qualifying question about experience level, then routing to taster/1:1 options with pricing and a PushPress link — this repeats in at least 8-10 near-identical instances (e.g. events 10,11,12,20,21,22,23,25,30). Counter-evidence: member and casual_drop_in contacts get different treatment (billing fixes, simple link sends), and the exact sequencing/wording varies enough that this is a soft conversational pattern rather than a rigid rule, so confidence is moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy65%3 eventsrefines a rule
When A walker policy produces an auto-mute signal with stale_days=30 and orq_row_count=1, indicating a single stale orchestration row exists for a walker of kind 'post_apt_outcome' or 'member_at_risk_attendance_drop'
→ Do Insert an auto-mute with expires_in_days=90 for the triggering walker row when stale_days reaches 30 and orq_row_count is 1
Why: Stale single-row walker orchestration entries are suppressed for 90 days, preventing redundant or outdated walker executions from surfacing
All 3 events share the same shape: stale_days=30, orq_row_count=1, expires_in_days=90, and the auto-mute-inserted action — two different walker_kinds both trigger the same response, suggesting the pattern generalises across walker types rather than being kind-specific. The consistent parameter values (30-day staleness threshold, 1-row count, 90-day expiry) across events support a policy-driven rule rather than coincidence. Counter-evidence: only 3 events in 7 days is a small sample, and the two distinct walker_kinds could indicate separate policies that happen to share parameters rather than a single unified rule.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile65%17 eventsrefines a rule
When Operator opens inbox and finds pending cards/drafts awaiting review (board reconciliation session)
→ Do Dismiss/clear inbox cards and drafts in bulk via inbox/dismiss during a single reconciliation pass
Why: Inbox backlog reduced to zero or near-zero; stale draft suggestions removed without individual triage
All 17 events share identical source/action shape (inbox/dismiss clearing 0-2 cards and 0-3 drafts), and they cluster into two clear batch sessions (Jun 29 morning/midday, and isolated events Jun 30/Jul 4), indicating a repeatable 'bulk dismiss during reconciliation' behavior. However, the pattern is purely mechanical (same action repeated) with no distinguishing antecedent signal beyond 'inbox has items' — there's no evidence of what specifically triggers a session (time-based, volume-based, or manual habit), so confidence is moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%5 eventsrefines a rule
When A lead-stage contact exhausts its journey (no further steps remain) while status is active
→ Do Automatically transition the contact from 'lead' to 'closed' stage with reason 'exhausted'
Why: Leads that have run out of journey steps are consistently closed out rather than left active, keeping pipeline state accurate
All 5 events show an identical shape: same from_stage, from_status, reason, to_stage, and aborted=false, indicating a consistent system/operator behavior rather than a one-off. However, all events are system-generated (not clearly operator-decided) and cluster within a very short window (4 within 5 seconds, plus 1 a day later), suggesting they may stem from a single automated batch process rather than distinct causal decisions — this limits confidence that it generalizes as a discretionary operator pattern.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle65%3 eventsrefines a rule
When A workboard entry's warmup/channel signal reaches age_days == decay_days (i.e. the signal has aged exactly to its configured decay threshold, typically 7 days) without being resolved otherwise
→ Do Auto-resolve the workboard entry via decay (mark as orq-resolved-by-decay) rather than escalating or requiring operator action
Why: Stale, low-affordance (fyi-only) signals are cleared automatically once they hit their decay window, keeping the workboard free of noise without operator intervention
All 3 events share the same shape: an 'fyi' affordance signal aging exactly to its 7-day decay_days threshold, uniformly resolved by the same automated decay mechanism, across two different kinds (warmup_freshness_low, channel_outage) and separate workboard entries, suggesting a generalizable decay rule rather than a one-off. Confidence is moderate rather than high because the sample is small (n=3), all events come from a single automated source (orq-decay/auto-stale) rather than reflecting a distinct operator decision, and there's no evidence yet of how non-fyi affordances or contact-linked entries behave under decay.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%2 events
When A conversation/stage is reactivated from 'lead' stage with status 'closed', transitioning to 'follow_up' stage
→ Do Transition the contact from the closed lead stage into the follow_up stage and mark the conversation as reactivated
Why: Previously closed leads are re-engaged and moved into a follow-up workflow for further nurturing or action
Both events share an identical shape — closed leads being reactivated and moved to follow_up — occurring twice within roughly 90 minutes on the same day, suggesting a deliberate operator behaviour or process. However, with only 2 events and no variation in conditions, it is difficult to rule out a coincidental batch operation or a one-off bulk reactivation rather than a repeatable general rule. Confidence is modest because the sample is minimal, both events occurred on the same day (possibly a single operator action), and there is no counter-evidence but also no diversity of context to confirm generalisation.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%7 eventsrefines a rule
When A booking is confirmed for an appointment that is upcoming, where the member's stage is either already 'booked' or 'member' with active status
→ Do System transitions/reaffirms the member's journey stage to 'booked' without aborting, logging the confirmation as a routine reinforcement event
Why: Member remains correctly tracked in the 'booked' stage ahead of their upcoming appointment, whether they were already booked (re-confirmation) or newly moving from 'member' to 'booked'
All 7 events share identical event/reason/aborted values and consistently transition to_stage='booked' from either 'booked' (5 events) or 'member' (2 events), with no conflicting outcomes — this is a stable, repeatable shape. Confidence is moderate rather than high because this looks like a system-driven notification/reconfirmation rather than a distinct operator decision, and the pattern is narrow (single reason code, single domain) with limited variation to stress-test generalisability.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%7 eventsrefines a rule
When A lead-stage contact's journey runs out of steps/actions without conversion (exhausted) and reaches system-driven closure
→ Do Automatically transition the contact to 'closed' stage (system-driven, non-aborted closure) when journey exhausts with no further steps defined
Why: Lead is cleanly closed out as exhausted rather than left active indefinitely, keeping pipeline state accurate
All 7 events are identical in shape (same reason, from_stage, from_status, to_stage, aborted=false), showing a consistent, repeatable system behavior rather than an operator decision. However, this looks like a deterministic system/automation outcome rather than a discretionary operator action, and the tight clustering of 4 events within 2 seconds on Jun 28 suggests a batch/bulk process rather than distinct causal instances, slightly limiting generalizability.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send65%4 eventsrefines a rule
When A lead is in an active tier_signoff journey stage with no outcome yet, and the scheduler triggers a recurring outbound check-in
→ Do Send an automated outbound SMS to the lead as a scheduled tier signoff follow-up
Why: Lead re-engages and progresses toward a tier signoff outcome; if no response, the scheduler will retry again after a few days
All 4 events show identical structure: same intent, channel, sender, and scheduler-driven trigger with no outcome/terminal state, recurring every 2-4 days over the lookback window. This looks like a consistent scheduled nurture cadence rather than a one-off action, but sample size is small (4 events, single lead/thread inferred) and lacks outcome data to confirm effectiveness.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle65%3 eventsrefines a rule
When A workboard entry's orq signal reaches its decay threshold (age_days equals decay_days, typically 7) while marked as 'fyi' affordance with no associated contact
→ Do Auto-resolve the workboard entry via decay (mark as stale/resolved-by-decay) rather than escalating or requiring operator action
Why: Low-priority 'fyi' signals that have aged past their decay window are cleared automatically, keeping the workboard focused on active/actionable items without operator intervention
All 3 events share the identical shape: age_days == decay_days (7), affordance='fyi', contact_id=null, resulting in auto-resolution by the decay mechanism — consistent and non-conflicting. Confidence is moderate rather than high because the sample is small (3 events, 2 distinct kinds) and this reflects an existing automated system behavior (source=orq-decay/auto-stale) rather than a discovered operator decision, so it's more a confirmation of known logic than a novel inferred pattern.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%3 eventsrefines a rule
When A closed lead is reactivated
→ Do Transition the reactivated lead to the 'follow_up' stage
Why: Reactivated closed leads are consistently routed into follow_up so they receive renewed outreach rather than remaining stuck in a closed lead state
All 3 events show an identical shape: a closed lead reactivated and moved to follow_up, with no conflicting outcomes (aborted always false, to_stage always follow_up). This is consistent enough to suggest a deterministic transition rule, though the sample is small (3 events, all within a 4-day window) and could reflect a single automated rule rather than a generalizable operator judgment call.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%7 eventsrefines a rule
When A booking with an upcoming appointment reaches its confirmation checkpoint while the record is already in 'booked' (or 'member') stage with active status
→ Do System auto-confirms the booking and keeps/moves the record to 'booked' stage without manual intervention (self-loop transition for booked stage; promotion for member stage)
Why: Booking status remains consistent and confirmed ahead of the appointment, requiring no operator action
All 7 events share identical event/reason/aborted values and the same to_stage='booked', showing a consistent, non-conflicting transition triggered by 'appointment_upcoming'. The only variation is from_stage (booked in 6/7 cases, member in 1/7), which is a minor branching detail rather than a contradiction, but the small sample and single non-booked source stage limit full generalisability.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy65%3 eventsrefines a rule
When A walker-policy auto-mute is triggered for a walker kind (e.g., post_apt_outcome, member_at_risk_attendance_drop) with an orq_row_count of 1 and stale_days of 30
→ Do Insert an auto-mute with expires_in_days=90 for the triggering walker kind when orq_row_count=1 and stale_days=30
Why: Walker is muted for 90 days to suppress low-signal or stale queue entries, reducing noise from walkers with minimal outstanding rows
All 3 events share identical parameters (stale_days=30, orq_row_count=1, expires_in_days=90), occurring across two different walker_kinds, which suggests a generalised policy rule rather than a one-off. The pattern holds consistently with no conflicting values observed. However, 3 events over 7 days is a small sample, and it's unclear whether the 90-day mute duration or the orq_row_count=1 threshold are hard rules or coincidental defaults — operator should confirm these are intentional policy constants.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%2 events
When A booking_confirmed event fires with reason='appointment_upcoming' while the contact is already in stage='booked' with status='active'
→ Do Re-confirm the booking (no stage change) — keep contact in 'booked' stage and trigger a booking confirmation action/notification without transitioning to a new stage
Why: Contact remains in 'booked/active' state with a refreshed or repeated booking confirmation, likely sending a reminder or re-acknowledgement ahead of the upcoming appointment
Both events share an identical shape: booking_confirmed with reason=appointment_upcoming, same-to-same stage transition (booked→booked), aborted=false, and active status — suggesting this is a deliberate re-confirmation pattern triggered by an upcoming appointment rather than a stage advancement. The pattern is consistent across two consecutive days, implying a recurring scheduled trigger. Counter-evidence: only 2 events in 7 days is a thin sample, and same-stage transitions could also indicate a misconfigured workflow rather than intentional behaviour — operator should verify intent.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile65%5 eventsrefines a rule
When A journey-sourced contact-closed event fires with exactly 1 card cleared and 0 drafts dismissed
→ Do Auto-reconcile the board by closing the single associated card without touching drafts
Why: Board stays in sync with journey-driven contact closures with no manual reconciliation needed
All 5 events are identical in shape (same source, cards_cleared=1, drafts_dismissed=0), suggesting a consistent, repeatable trigger-action mapping. However, 4 of 5 events are clustered within seconds of each other on one day, which may reflect a single burst/backfill rather than independent generalizable occurrences, so robustness across varied contexts is unproven.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition65%3 eventsrefines a rule
When A closed lead is reactivated
→ Do Transition the record to the 'follow_up' stage
Why: Reactivated closed leads are consistently moved into follow_up for renewed engagement, rather than staying in another stage
All 3 events show identical structure: a closed lead reactivated and transitioned to follow_up, with no conflicting outcomes observed. However, the sample is small (3 events, all within a 4-day window) and comes from a single domain/cell, so generalisation beyond this narrow slice is uncertain — this looks like a system-default transition rather than a discretionary operator choice, which slightly limits its value as an 'action pattern' but still holds as a reliable detectable rule.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition62%2 eventsrefines a rule
When A booking_confirmed event fires with reason='appointment_upcoming' while the contact is already in stage='booked' with status='active'
→ Do Re-confirm the booking and keep the contact in the 'booked' stage without advancing or aborting — treat as a no-op stage transition that refreshes/validates the booking state
Why: Contact remains in 'booked/active', appointment is acknowledged as upcoming, no stage change occurs
Both events share an identical shape: booking_confirmed fires with reason=appointment_upcoming on an already-booked/active contact, causing a self-loop (booked→booked) with aborted=false. This suggests a deliberate pattern where an imminent appointment triggers a confirmation re-check rather than a new stage transition. Counter-evidence: only 2 events in 7 days is a thin sample, and the self-loop could equally be a system artefact rather than an intentional operator action — confidence is kept low accordingly.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send62%2 eventsrefines a rule
When Operator reviews a contact via the workboard and the contact is an active lead with no DND flag, no terminal outcome, and no resolved outcome
→ Do Send an outbound message to the contact (via available messaging channels such as SMS or WhatsApp)
Why: Contact is reached and progressed along the lead journey
Both events share an identical snapshot shape (active lead, no DND, no terminal outcome, no resolved outcome) and were both triggered from workboard_review within 8 seconds of each other, suggesting a deliberate operator send action during a review session. The two events differ only in channel (SMS vs WhatsApp), which may indicate multi-channel outreach rather than two independent decisions, slightly weakening the generalisation. Confidence is modest because only 2 events exist, the near-simultaneous timing could mean a single review interaction rather than two separate pattern instances, and channel selection logic is not yet clear.
ApproveEditRejectone-tap review lands with the Training Area
orq-lifecycle62%3 eventsrefines a rule
When An orq workboard entry with 'fyi' affordance reaches its decay_days threshold (age_days == decay_days) without resolution, regardless of the underlying signal kind (warmup_freshness_low, channel_outage, etc.)
→ Do Auto-resolve the workboard entry via decay mechanism rather than escalating or requiring operator action
Why: Stale, low-priority 'fyi' entries are cleared from the workboard automatically once past their decay window, keeping the board focused on actionable items
All 3 events share identical structural shape: affordance='fyi', age_days equals decay_days (7), contact_id=null, and the same resolution mechanism (orq-resolved-by-decay). This consistency across different 'kind' values (warmup_freshness_low, channel_outage) suggests the decay behavior generalizes across signal types rather than being kind-specific. However, confidence is moderate because this is a system-automated decay process rather than an operator decision, sample size is small (3 events, 2 distinct kinds), and there's no evidence of operator override behavior to confirm this is desired versus merely default system behavior going unchallenged.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send62%5 eventsrefines a rule
When A scheduler-triggered outbound SMS is initiated for a lead contact who is active, non-terminal, not on DND, with no resolved outcome, at the tier_signoff intent stage
→ Do Send an AI-composed SMS outbound message as a tier signoff to the lead
Why: Outbound SMS is delivered to an active lead contact as part of the scheduled tier signoff cadence, advancing or maintaining the lead journey
All 5 events share an identical signal shape: scheduler-triggered, AI sender, SMS channel, tier_signoff intent, active lead with no DND or terminal state. This strongly suggests a repeating automated pattern. However, events 2–5 occurred within 2 seconds of each other on the same day, raising a concern about duplicate firing (a burst anomaly) rather than 5 independent confirmations — which limits confidence. Event 1 occurring ~20.5 hours later provides one genuine independent data point supporting recurrence.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile62%16 eventsrefines a rule
When Inbox contains cards and/or draft items awaiting review (typical batch: 1 card plus 0-2 drafts)
→ Do Dismiss/resolve the inbox item via inbox/dismiss, clearing the card and any associated drafts in a single action
Why: Inbox reaches zero unresolved items; operator treats dismissal as the default resolution rather than acting on individual drafts
All 16 events share the identical source (inbox/dismiss) and event type, forming a consistent batch-clearing behavior over a short session (11:24-12:40 on Jun 29, plus one follow-up Jun 30), which supports a real habitual pattern of rapid-fire dismissal. However, the antecedent is weak as a 'detectable trigger' since we don't see what preceded each dismiss (e.g., what the card/draft content was), so this is more a description of a recurring action shape than a true if-X-then-Y causal rule tied to external context — confidence is kept moderate accordingly.
ApproveEditRejectone-tap review lands with the Training Area
outcome-appointment_outcome62%3 eventsrefines a rule
When An appointment reaches the terminal state of the outcome-loop with an 'unknown' outcome recorded
→ Do Flag or escalate appointments whose outcome remains 'unknown' after the outcome-loop terminates, so a human operator can manually resolve the outcome
Why: Unknown outcomes are caught and resolved rather than silently persisting in the system
All three events share the identical shape: distinct appointment IDs reaching the outcome-loop terminal node with outcome='unknown', spread across three separate days, suggesting this is a recurring gap rather than a one-off. The pattern is consistent with no conflicting signals (no events show a different outcome at terminal state). Confidence is modest because three events is a small sample and there is no visibility into whether an operator action was actually taken in response, or what the intended resolution workflow is — this may simply be a system logging artefact rather than an actionable operator pattern.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send62%5 eventsrefines a rule
When A lead contact is in an active journey (journey_stage=lead, journey_status=active), DND is false, no terminal outcome has been set, and the scheduler triggers an outbound send evaluation
→ Do Send a tier_signoff SMS outbound message via AI on behalf of the scheduler
Why: The AI delivers a sign-off tier message to the lead over SMS to progress or close out the engagement tier
All 5 events share an identical payload shape — same intent, channel, sender, snapshot fields, and caller_source — confirming a consistent automated pattern rather than manual variation. However, events 2–5 fired within 2 seconds of each other on the same day, suggesting possible duplicate/burst firing from the scheduler rather than 5 independent trigger instances; this reduces confidence that each event represents a truly distinct causal occurrence. The pattern itself (scheduler + active lead + no terminal state → AI sends tier_signoff SMS) is detectable and actionable, but the burst behaviour warrants operator review to rule out a scheduling bug inflating the apparent frequency.
ApproveEditRejectone-tap review lands with the Training Area
outcome-appointment_outcome62%2 eventsrefines a rule
When An appointment reaches the outcome-loop terminal stage with an unresolved ('unknown') outcome
→ Do Flag the appointment for manual operator review or follow-up to resolve the unknown outcome
Why: Operator investigates and records a definitive outcome for the appointment, preventing it from remaining unresolved
Both events share an identical shape — appointments reaching 'outcome-loop-terminal' with outcome='unknown' on consecutive days — suggesting a recurring workflow gap where appointments exit the automated loop without a resolved outcome. The pattern is consistent across two events with no conflicting signals, but the sample size is small (n=2) and neither event shows what the operator actually did in response, only that the terminal state was reached. Confidence is modest because we cannot confirm the consequent action from these signals alone — the causal link is inferred, not observed.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile62%16 eventsrefines a rule
When Operator opens inbox with pending board cards and draft items to review
→ Do Dismiss/clear inbox cards and drafts one-by-one via inbox/dismiss rather than batch-resolving
Why: Inbox reaches zero-unresolved state through a rapid sequence of small, individual dismiss actions rather than a single bulk operation
15 of 16 events share an identical shape (source=inbox/dismiss, small integer counts of cards_cleared/drafts_dismissed, clustered in tight bursts within minutes), indicating a repeated manual triage habit of clearing inbox items individually. Confidence is moderate rather than high because the pattern is really just 'operator uses inbox/dismiss repeatedly' — there's no clear distinguishing antecedent condition (e.g. specific card type or count threshold) that predicts *when* this triage happens versus other resolution paths, and all 16 events come from one clustered session on Jun 29, limiting generalisability across days.
ApproveEditRejectone-tap review lands with the Training Area
outcome-appointment_outcome62%3 eventsrefines a rule
When An appointment outcome loop reaches its terminal state with the outcome still recorded as 'unknown' — meaning the outcome was never resolved before the loop closed
→ Do Flag the appointment for manual operator review to determine and record the actual outcome, or re-open the outcome-collection loop for that appointment
Why: Appointments do not remain permanently unresolved; a known outcome is eventually captured to maintain record integrity
All three events share an identical structure: the outcome-loop reached its terminal state but the outcome value is still 'unknown', across distinct appointment IDs on three separate days. This consistent shape suggests a systemic gap — appointments are closing without outcomes being captured — rather than a one-off edge case. Confidence is moderate rather than high because we only observe 3 events and cannot yet distinguish whether this is an operator-driven corrective action pattern or simply a recurring data quality failure with no established response; the consequent action is inferred from the likely operator intent, not directly observed.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking62%2 eventsrefines a rule
When An operator booking signal is received with signal_kind='record_outcome', indicating a contact has been scheduled for an appointment
→ Do Record the outcome of the contact interaction by logging the scheduled appointment (type, contact type, and scheduled datetime) against the relevant record
Why: A confirmed, logged appointment entry exists for the contact, ready for follow-up or next-step processing
Both events share the same signal_kind ('record_outcome') and both result in a scheduled appointment being logged with a concrete datetime and appointment type, suggesting a consistent operator workflow of capturing booking outcomes. The pattern holds across two different contact types ('lead' and 'unclassified') and two appointment types ('phone_call' and 'intro'), which adds mild breadth but also introduces variability. Confidence is moderate because the sample size is only 2 and the differing contact/appointment types mean the trigger conditions are somewhat broad — more events would be needed to confirm this generalises reliably.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send62%2 events
When A lead contact is active (non-terminal, active journey status, not on DND) and is surfaced in the workboard review queue with no outcome yet recorded
→ Do Send an outbound message to the contact via available messaging channels (SMS and/or WhatsApp) as a team-initiated review send
Why: Contact is reached through at least one channel, progressing the lead journey toward an outcome
Both events share identical context shape — active lead, no outcome, not terminal, not DND, triggered from workboard review — and both result in operator-review sends, just across different channels (SMS and WhatsApp) within 8 seconds of each other, suggesting a multi-channel send pattern for the same contact or cohort. The sample size is only 2 events, which limits confidence, and the channel variation (SMS vs WhatsApp) may reflect a deliberate multi-channel strategy or simply two independent contacts reviewed in sequence — this ambiguity cannot be resolved from the data alone. Pattern is plausible but should be validated against a larger window before automation.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy62%2 eventsrefines a rule
When A walker of kind 'stalled_followup' or 'post_apt_outcome' has been stale for 30 days
→ Do Insert an auto-mute with an expiry of 90 days for the stale walker
Why: Stale walkers are suppressed from triggering further actions for 90 days, reducing noise from unresolved or outdated follow-up sequences
Both events share identical stale_days (30) and expires_in_days (90) values, and both are auto-mutes inserted by the walker-policy decision engine, suggesting a consistent policy rule: mute walkers that have been stale for 30 days for a 90-day window. The two walker_kinds differ (stalled_followup vs post_apt_outcome), which could indicate the rule applies broadly across walker types rather than being kind-specific. Counter-evidence: only 2 events exist within 7 days (orq_row_count differs: 5 vs 1), which is a thin evidence base — confidence is kept modest until more events confirm generality across additional walker kinds.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send62%2 eventsrefines a rule
When A lead contact is active (non-DND, non-terminal, journey_stage=lead, journey_status=active) and appears in the workboard review queue
→ Do Send an outbound message to the contact via available messaging channels (SMS and/or WhatsApp) through operator review
Why: Contact is reached via outbound message to progress them through the lead journey
Both events share an identical shape: active leads with no outcome, no DND, non-terminal status, triggered from workboard_review, with the team as sender — differing only in channel (SMS vs WhatsApp). This suggests the operator sends outbound messages across multiple channels to the same or similar leads when reviewing the workboard. Counter-evidence: only 2 events within 8 seconds makes it plausible these are two channel attempts for a single contact rather than two independent cases, which limits generalisability. Confidence is moderate rather than high due to the small sample size and near-simultaneous timing.
ApproveEditRejectone-tap review lands with the Training Area
outcome-appointment_outcome62%3 eventsrefines a rule
When An appointment outcome loop terminates without a resolved outcome (outcome='unknown'), triggered by the outcome-loop-terminal source
→ Do Flag the appointment for manual operator review or escalation, as the automated outcome loop failed to capture a definitive result
Why: Operator investigates why the outcome loop terminated without resolution and manually records or corrects the appointment outcome
All 3 events share an identical shape: distinct appointment IDs producing outcome='unknown' via 'outcome-loop-terminal', spread across 3 separate days — suggesting a systemic loop-termination failure rather than a one-off. The pattern is consistent with no conflicting signals. Confidence is modest because the event count is low (exactly at threshold), there is no visibility into what the operator actually did in response, and 'unknown' could reflect legitimate no-shows or cancellations rather than a system failure requiring action.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile62%17 eventsrefines a rule
When Inbox contains cards and/or draft suggestions accumulated from board activity, typically clustered in a burst session
→ Do Operator dismisses inbox cards and drafts in rapid succession, one at a time, rather than bulk-resolving
Why: Inbox reaches zero/near-zero backlog; cards and drafts are cleared without conversion to board action
15 of 17 events occurred in a single tight session (Jun 29, 11:24-12:40), each dismissing 1 card and 0-2 drafts, showing a consistent per-item dismissal behavior rather than a bulk clear — this is a real repeated shape. However, the pattern is purely descriptive of operator habit (dismiss small batches serially) rather than a clear trigger-condition causing a distinct decision; there's no evidence of what specifically caused dismissal (e.g. staleness, irrelevance) versus just routine inbox grooming, so confidence is moderate.
ApproveEditRejectone-tap review lands with the Training Area
walker-policy62%16 eventsrefines a rule
When A walker of a given kind (post_apt_outcome, team_handler_idle, member_at_risk_attendance_drop, stalled_followup) has been idle/stale for 30 days with at least 1 queued orq row
→ Do Auto-insert a mute on the walker to suppress further notifications/actions until expiry (90 days) rather than escalating
Why: Reduce noise from stale walkers that have not progressed in 30 days, while preserving a 90-day window before re-evaluation
All 16 events share the identical stale_days=30 and expires_in_days=90 thresholds, consistently triggering the same auto-mute action across four distinct walker_kinds, suggesting a fixed policy rule rather than case-specific judgment. Confidence is moderated because the sample is dominated by a fixed system parameter (stale_days/expires_in_days never vary) with no visible alternative outcome (e.g. no observed cases where staleness didn't trigger mute), making it hard to confirm the trigger threshold is causal versus simply the only value ever logged.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile62%16 eventsrefines a rule
When Inbox contains cards and/or stale drafts pending review during an active reconciliation session
→ Do Dismiss/clear the inbox card and/or associated drafts in a single inbox_resolved action, repeated rapidly across the batch until inbox is empty
Why: Inbox backlog is cleared quickly via repeated small dismiss actions rather than one-by-one deep review
14 of 16 events occurred in a tight burst on Jun 29 (11:24-12:40), all using the same source (inbox/dismiss) and shape (cards_cleared 0-2, drafts_dismissed 0-2), suggesting a repeatable batch-clearing behavior rather than isolated incidents. However, the pattern is essentially 'operator dismisses inbox items' which is somewhat tautological with the event type itself, and there's no clear antecedent signal distinguishing when a card is cleared vs. just drafts dismissed vs. both — the values vary without an obvious external trigger, so confidence is capped as moderate rather than high.
ApproveEditRejectone-tap review lands with the Training Area
journey_transition55%2 eventsrefines a rule
When A closed lead is reactivated
→ Do Transition the reactivated lead to the follow_up stage
Why: Closed leads that get reactivated are consistently moved into follow_up rather than back into lead or another stage
Both observed events show identical from_stage/from_status/to_stage values, suggesting a consistent transition rule. However, with only 2 events occurring within under 2 hours of each other (possibly the same batch or automated process), there's limited evidence this generalises across different times, operators, or lead contexts.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile55%5 eventsrefines a rule
When A contact-closed event fires from the journey source with exactly 1 card cleared and 0 drafts dismissed
→ Do Auto-reconcile the board by closing the single associated contact card without touching drafts
Why: Board stays in sync with journey-driven contact closures, one card cleared per event, no draft side-effects
All 5 events show an identical shape (same source, cards_cleared=1, drafts_dismissed=0), which is consistent evidence of a stable reconciliation behavior. However, 4 of the 5 events are clustered within 4 seconds on the same day, suggesting they may be duplicates or a single batch operation rather than 5 independent generalizable occurrences, so confidence is capped below high certainty.
ApproveEditRejectone-tap review lands with the Training Area
message_drafting55%3 events
When Sent message diverges substantially from canonical instruction (diff_ratio 0.72-0.92, well above the 0.4 threshold) while still following the canonical's intent/directive, on tree=new_lead_flow across multiple branches
→ Do Flag as divergence-detected for operator review rather than auto-block; the model is substituting a shorter, situationally-tailored reply (e.g. off-topic deflection, paraphrased offer, or generic handover line) instead of emitting the long canonical instructional text verbatim
Why: Operator reviews whether the paraphrase/deviation still satisfies the canonical's intent (tone, required facts, routing) or whether it drifts from required exact-text rules (e.g. M2 question, handover phrasing)
All three events share a consistent surface pattern (high diff_ratio, sent_len much shorter than canonical_len, same tree, facts_resolved=false), suggesting canonical texts are long instructional/meta prompts while actual sends are short conversational replies — a structural mismatch rather than true policy violation. However, the underlying causes differ across events (off-topic deflection, exact-text non-compliance, and legitimate paraphrased discovery-answer handling), so the 'why' driving divergence isn't uniform, and only 3 events limits generalisability — this should be reviewed as a detector calibration issue rather than a single actionable operator behavior.
ApproveEditRejectone-tap review lands with the Training Area
board_reconcile55%6 eventsrefines a rule
When A journey contact is closed
→ Do Clear the associated board card (cards_cleared=1) as part of board reconciliation
Why: Board stays in sync with journey contact closures, avoiding stale cards
4 of 6 events show a consistent shape (cards_cleared=1, drafts_dismissed=0) clustered on Jun 28, suggesting contact_closed reliably triggers a card clear. However, 2 more recent events (Jun 29, Jul 03) diverge — one clears nothing but dismisses a draft, breaking the pattern's recency and consistency. This conflicting recent behavior lowers confidence and suggests the rule may be conditional on an untracked factor (e.g., whether a draft vs. card exists).
ApproveEditRejectone-tap review lands with the Training Area
outbound_send55%7 eventsrefines a rule
When A scheduler-triggered tier_signoff outbound SMS event fires for a lead-stage, active-status contact with dnd=false and no terminal outcome
→ Do System automatically sends the tier_signoff SMS via the scheduler without operator intervention
Why: Lead receives consistent tier_signoff messaging at scheduled intervals, keeping journey_status active until a terminal outcome or DND change occurs
All 7 events share an identical shape (same intent, sender, channel, caller_source, snapshot), showing this is a stable, repeatable automated behavior rather than a one-off. However, this is a machine-generated scheduler action, not an operator decision — there's no evidence of operator judgment or a detectable pre-condition an operator set; it may simply reflect a fixed cron/scheduler cadence rather than a causal 'operator does Y when X' pattern, and 4 of the 7 events are near-duplicate timestamps (same day, seconds apart), suggesting possible retry/batching noise rather than distinct decisions.
ApproveEditRejectone-tap review lands with the Training Area
workboard-resolution55%50 eventsrefines a rule
When A workboard entry is processed by the automated stale-card-sweeper (not the aa9 approval flow) and is found to be stale, dormant, contact-deleted, aged-out, or otherwise low-value
→ Do System automatically marks/resolves the workboard entry as stale (no operator judgement or approval involved) — this is fully automated housekeeping, not an operator decision.
Why: Stale/invalid workboard entries are cleared from the board without manual review, keeping the board focused on live, actionable items.
44 of 50 events share the identical shape (signal_kind=auto-stale, aa9_fired=false, source=stale-card-sweeper) across varied stale-reasons, which is a strong repeated signature. However, this is not really an 'operator action' pattern — aa9_fired=false and null entry_source indicate this is a fully automated sweeper process with no human/operator decision point, so framing it as a causal operator behavior pattern is questionable; the only true operator-driven signal in this dataset is the small aa9_fired=true 'approve'/live_lead_handover cluster (5 events), which is too thin and homogeneous (all auto_sent) to establish a conditional operator choice pattern rather than another automation.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send55%6 eventsrefines a rule
When A lead-stage, active-journey contact with DND false reaches the tier_signoff intent checkpoint via the scheduler
→ Do Automatically send the tier_signoff outbound SMS to the lead
Why: Lead receives the tier signoff message as part of scheduled outbound sequencing, with no manual intervention needed
All 6 events share an identical shape (same intent, sender, channel, caller_source, and snapshot state), which supports a consistent automated send pattern. However, this is a homogeneous, low-variance signal set with no contrasting cases (no examples of suppression, DND-true, or non-lead stage) to confirm the trigger is truly discriminating rather than just 'this is what the scheduler always does' — so it's more a confirmation of existing automation than a newly discovered causal rule.
ApproveEditRejectone-tap review lands with the Training Area
outbound_send55%29 eventsrefines a rule
When SMS reply channel reaches outcome=exhausted (message sequence exhausted) while journey_stage=lead and journey_status=active
→ Do System continues sending automated AI replies via reply-recovery/chat_entry flow rather than closing or escalating the lead, despite the sequence being marked exhausted
Why: Operator expected exhausted leads to either be escalated, switched channel, or marked terminal — instead the pattern shows continued non-terminal handling
4 of 29 events show outcome='exhausted' on sms replies (events 7, 21, 25, 26), all with isTerminal=false and journey_status still 'active', suggesting a recognizable trigger state. However, the consequent is ambiguous: there's no clear, consistent follow-up action visible in this data (no subsequent event shows escalation, channel switch, or closure directly tied to these exhausted events), so this is more an observed state pattern than a confirmed action-response pattern. Flagging for operator review rather than asserting a strong causal rule.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking55%2 eventsrefines a rule
When An operator booking signal is recorded with signal_kind='record_outcome' and an appointment is scheduled
→ Do Record the outcome of a contact interaction and log a scheduled future appointment
Why: A confirmed upcoming appointment is created in the system following a contact interaction
Both events share the same signal_kind ('record_outcome') and both include a 'scheduled_for' timestamp pointing to a near-future appointment, suggesting this is the operator's consistent workflow for logging that a booking has been made after a contact. However, the two events differ in contact_type ('unclassified' vs 'lead') and appointment_type ('intro' vs 'phone_call'), meaning the trigger conditions are somewhat varied. With only 2 events the confidence is modest — the shape is consistent but the small sample size means this could be coincidence rather than a generalizable rule.
ApproveEditRejectone-tap review lands with the Training Area
outcome-appointment_outcome55%2 events
When An appointment reaches the outcome-loop terminal state with an 'unknown' outcome (i.e., the outcome loop completes without resolving to a known result)
→ Do Flag the appointment for manual operator review or follow-up, as the automated outcome loop has failed to classify the appointment result
Why: Operator investigates why the outcome remains unknown and either resolves it manually or triggers a re-evaluation loop
Both events share an identical shape: appointments reaching the terminal state of the outcome loop with an unresolved 'unknown' outcome, occurring on consecutive days. This suggests a recurring failure mode rather than a one-off anomaly. However, with only 2 events and no visibility into whether the operator actually took a specific action in response, confidence is modest — the pattern may reflect a systemic data issue rather than a deliberate operator response trigger.
ApproveEditRejectone-tap review lands with the Training Area
organic-operator_booking52%2 eventsrefines a rule
When An operator booking is recorded with signal_kind='record_outcome', regardless of contact_type
→ Do Schedule an appointment for the following day and record the outcome against the contact
Why: A confirmed booking logged in the system with a scheduled_for timestamp set 1 day in advance
Both events share the same signal_kind ('record_outcome') and both result in an appointment being scheduled roughly one day after the booking is captured, suggesting a consistent same-day-booking-for-next-day pattern. However, the contact_type and appointment_type differ between the two events (lead/phone_call vs unclassified/intro), making it unclear whether the trigger is truly generalised or whether these are coincidentally similar outcomes. With only 2 events and notable variation in contact classification, confidence is low — this is plausible noise rather than a robust pattern.
ApproveEditRejectone-tap review lands with the Training Area
System & maintenance (29)
Dev-hygiene + platform tasks the AI and scripts raise (canonical-behaviour, methodology, lint) — homed here, off the lead board, when the legacy v1 workboard was retired. Manual operator to-dos are parked for a future Projects surface.
walker-batching-healthnormal
⚖️ Walker batching: 2 anomalies
Walker batching health — daily anomaly audit (threshold-triggered). FINDINGS: - (3) lead_long_dormant produced 10 N=1 batches in 7d. Consider bumping batch_min OR reverting to granular. - (3) team_han…
three-pillar-audithigh
🏛️ Three-pillar audit: 48 violations
Three-pillar architecture invariants — daily audit. FINDINGS: (a) 24 outbound AI message(s) in last 7d without metadata.skills (bypass of unified send pipeline) (b) 0 operator-attention items without …
auto-close-30d-digestnormal
🌙 30-day auto-close — 1 closed, 1 booked-outcome card(s)
The nightly 30-day sweep ran. Anyone silent both directions for 30+ days is now marked closed, so nothing can message a dead lead by accident. Reversal window 7 days (see contact notes). CLOSED (1): •…
canonical-behaviour-checkhigh
Canonical behaviour regression (1 case)
Semantic-equivalent-rewrite detection caught at least one canonical function's observable behaviour drifting from baseline. - crm/rule-patterns.js :: matchPassiveTrigger("not interested") — output mis…
morning-digesthigh
⚠️ Morning digest 2026-07-06 — 3 anomalies
# Morning digest — 2026-07-06 Generated automatically at 08:00 Europe/London by `crm/morning-digest.js`. ## Summary - Next-Action Engine decisions in last 24h: **20** - Operator-review-queue currently…
inbox-sanity-reviewhigh
📋 Inbox sanity — 2 messages to eyeball
Nightly inbox sanity sweep flagged 2 thing(s) to eyeball (last 26h). Each is a pattern that's previously gone wrong (contradictory sends, premature goodbye, broken template, a send to a no-send contac…
divergence-daily-auditnormal
📊 Divergence telemetry 2026-07-06: 2 divergence event(s)
Pattern A telemetry — canonical-vs-send divergence report (2026-07-06). 24h totals: 2 divergence events across 2 tree(s). Anomalies (2): • [rate-threshold] new_lead_flow — 50.0% of sends diverged (thr…
audit-canaryhigh
🚨 Audit canary 2026-07-06: 7 signal_events anomaly
L4.S audit canary detected anomalies (Smell #1 substrate-level check): • gate-12/booking-hallucination-rewrite [silent-regression]: Source had 1 emit(s) in last 30d but 0 in last 24h. Possible regress…
analyzer-batchnormal
🌳 Analyzer 2026-07-06: 9 new rule proposal(s)
L4.I analyzer batch run 2026-07-06. Cells examined: 19 Lessons created: 9 Skipped: 10 Errors: 0 Duration: 122839ms Review probationary lessons via workboard rule-proposal cards. Approve / edit / rejec…
self-monitor-healthnormal
🩺 Self-monitor health: 2 flag(s) — card_flood, ai_booking_silent
The hourly self-monitor HEALTH sweep raised 2 flag(s) — surfaced so it's seen, not buried in the logs. Self-terminates when the next sweep reads green. • card_flood: low_confidence 17 vs ~6 projected …
roadmap-lintlow
Roadmap lint: 5 contract violation(s)
ROADMAP.md broke its own contract (nightly roadmap-lint): - L30: ## Now item stale (15d > 14d) — refresh, demote to ## Next, or close - L39: bullet 237 chars (max 200) — "- **Task manager — in-app HIT…
booking-chokepoint-digesthigh
📋 Booking chokepoint review — 10 unresolved verdicts
Booking chokepoint — past 7 days unresolved verdicts. SUMMARY: - pass: 42 total, 42 unresolved - blocked: 10 total, 10 unresolved UNRESOLVED VERDICTS (10): [Fri 3 Jul, 20:40] global winner brand — blo…
divergence-daily-auditnormal
📊 Divergence telemetry 2026-07-05: 1 divergence event(s)
Pattern A telemetry — canonical-vs-send divergence report (2026-07-05). 24h totals: 1 divergence events across 1 tree(s). Anomalies (1): • [rate-threshold] new_lead_flow — 100.0% of sends diverged (th…
divergence-daily-auditnormal
📊 Divergence telemetry 2026-07-04: 2 divergence event(s)
Pattern A telemetry — canonical-vs-send divergence report (2026-07-04). 24h totals: 2 divergence events across 1 tree(s). Anomalies (1): • [rate-threshold] new_lead_flow — 50.0% of sends diverged (thr…
doc-freshness-lintlow
Doc freshness: 6 stale dated doc(s) to extract+archive
Dated working-set docs older than 30d, not referenced by any live canonical doc (drift — should have been extract-then-archived per codebase-organisation.md §Ongoing): - COMPETITOR-AD-SCAN-2026-04-29.…
doc-freshness-lintlow
Doc freshness: 5 stale dated doc(s) to extract+archive
Dated working-set docs older than 30d, not referenced by any live canonical doc (drift — should have been extract-then-archived per codebase-organisation.md §Ongoing): - COMPETITOR-AD-SCAN-2026-04-29.…
codebase-lintnormal
Codebase organisation: concept-orphan (14 items)
14 items flagged. First: methodology/concepts/ai-ownership-and-checkpoints.md is not referenced in methodology/README.md concepts list Suggestion: Add a one-line pointer to the Concepts section of REA…
doc-freshness-lintlow
Doc freshness: 4 stale dated doc(s) to extract+archive
Dated working-set docs older than 30d, not referenced by any live canonical doc (drift — should have been extract-then-archived per codebase-organisation.md §Ongoing): - OFFER-PROMPT-PROPOSAL-2026-06-…
walker-auto-mute-cronnormal
🔇 Walker auto-mute 2026-07-01: 8 pair(s) silenced
Walker auto-mute cron muted 8 (contact, walker_kind) pair(s) overnight. Trigger: 30 days of operator no-action on the ORQ rows for these pairs. Mute expires after 90 days (walker silent until then; re…
canonical-quarterly-reviewmedium
Quarterly tier review (FLUID/PROVEN/LOCKED)
Quarterly review per A0.5 stability-tier system. 1. Run `node crm/scripts/promote-candidate.js` — review FLUID→PROVEN + PROVEN→LOCKED candidates. 2. Explicitly promote any eligible files by editing cr…
codebase-lintnormal
Codebase organisation: root-js-sibling (5 items)
5 items flagged. First: automations.js at crm/ root; same basename at: public/js/automations.js (content differs — may be legit module+routes pair or a drifted copy) Suggestion: Diff manually. Module+…
codebase-lintnormal
Codebase organisation: root-js-file (53 items)
53 items flagged. First: action-chains.js sits at crm/ root — should live in a subdirectory matching its responsibility Suggestion: Move into engine/, jobs/, channels/, integrations/, handlers/, or qu…
doc-freshness-lintlow
Doc freshness: 1 stale dated doc(s) to extract+archive
Dated working-set docs older than 30d, not referenced by any live canonical doc (drift — should have been extract-then-archived per codebase-organisation.md §Ongoing): - OFFER-PROMPT-PROPOSAL-2026-06-…
self-monitorhigh
⛔ Auto-send HALTED by self-monitor — no_spam
Self-monitor demoted auto-send to mode='review' (ALL AI auto-send paused) because the no_spam gate tripped — the no-spam structural gate (CLAUDE.md Rule 2): an outbound went to a non-contactable conta…
walker-auto-mute-cronnormal
🔇 Walker auto-mute 2026-06-16: 381 pair(s) silenced
Walker auto-mute cron muted 381 (contact, walker_kind) pair(s) overnight. Trigger: 30 days of operator no-action on the ORQ rows for these pairs. Mute expires after 90 days (walker silent until then; …
card-backlog-sweeplow
20 AI rule proposals — bundled for one review pass
Bundled 20 individual rule-proposal cards (May backlog) into this single review task per the Shortwave-bundling pattern (UI-RUBRIC §2). Each proposal: - [rule-proposal-10] 🌳🔧 Rule proposal · organic…
autonomous-watchhigh
Almerito - engaged lead asked about affordability, AI did not reply
Recovered dead-end-opener lead, now engaged (replied 3x). 19:55 UTC he asked whether we help him pay for training (affordability/payment). System decided hand_back_to_ai but the AI produced no reply (…
canonical-monthly-auditmedium
Monthly LOCKED-file audit — 36 canonical files
Monthly review per A0.5 stability-tier system. For each LOCKED file in crm/docs/CANONICAL-FILES.md: 1. Does the current invariant still match business reality? 2. Any structural friction worth a redes…
methodology-linthigh
Methodology drift: missing-file (14 items)
14 items flagged. First: three-pillar-architecture: touches_files entry "CLAUDE.md" does not exist on disk Suggestion: Either the file was renamed/deleted (update touches_files), or the decision shoul…