Acquisitions Lifecycle Hub
This is the navigation hub for the full acquisitions pipeline — from initial deal ingestion through Stage 4 re-engagement. It provides an ordered map to every stage hub, compliance gate, agent, and skill involved. Do not duplicate logic here — follow the wikilinks to the stage-specific hubs for implementation detail. Read this hub when orienting to the acquisitions flow or identifying which stage a deal is in.
Quick reference
| Field | Value |
|---|---|
| Stages | Stage 1 (Initial Outreach) → Stage 2 (NO_REPLY_4H) → Stage 3 (PRICE_DROP) → Stage 4 (Re-engage) |
| Primary agent | _summary |
| Supporting agents | _summary, _summary |
| Agent handoff chain | deal-ingestion → acquisitions (Stage 1) → acquisitions (Stages 2-3) → aurora (inbound classify) → dispo (Stage 4 hand-off) |
| Compliance gates list | defer to compliance-gates |
| Skills invoked | acquisitions-outreach, acquisitions-followup, hubspot-deal-ingest |
| Success metrics | Stage-5 qualification rate; deal-to-dispo handoff count; avg touches to reply |
| Cost per stage | Stage 1: ~0.01 SMS per send; Stage 2-3: same; Stage 4: ~$0.005 LLM |
| Throughput | ~50-200 deals/day active; follow-up-scheduler runs every 30 min |
| Last run result | See openphone_events table (Supabase CCP) for live audit trail |
| Failure modes | Gate fail (quiet hours), red-zone approval block, quo-note lineId fail-closed, 10DLC blocking |
Stage map — navigation index
Stage 1 — Initial Outreach
Hub: outreach-stage1
Triggered when a deal moves to qualification_status='approved' in acquisition_deals. The B7 three-zone approval gate (Green/Yellow/Red) fires before any send.
Key components:
workspace/scripts/workers/unified-outreach-engine.js— canonical coordinatorworkspace/scripts/workers/deal-outreach-worker.js— single-deal triggerworkspace/scripts/lib/gate-computer.js— 5-gate qualification progressionworkspace/scripts/lib/compliance-gate.js— quiet hours + TCPAworkspace/scripts/lib/mentor-voice.js— touch→mentor cadence (Ferry→Damji→Norton→Cardone→Terry)- Skill: acquisitions-outreach
Exit criteria: SMS delivered, openphone_events row written, Quo internal note posted.
Transition trigger: No reply in 4h → Stage 2 (NO_REPLY_4H).
Stage 2 — NO_REPLY_4H Cadence
The follow-up scheduler fires every 30 min and evaluates all eligible deals. NO_REPLY_4H is the first escalation trigger.
Key components:
workspace/scripts/workers/follow-up-scheduler.js— cron worker (every 30 min)workspace/scripts/lib/follow-up-engine.js— trigger evaluation- Triggers handled:
NO_REPLY_4H,NO_REPLY_24H,NO_REPLY_72H - Skill: acquisitions-followup
HubSpot stage transition: → "Reviewing Deal" (on NO_REPLY_4H trigger).
Transition trigger: Price drop ≥5% detected OR Day-7+ stall → Stage 3.
Stage 3 — PRICE_DROP / Detail Re-engagement
Re-engagement triggered by CH price drop (≥5%) or new public record detail (occupancy change, condition update).
Key components:
follow-up-engine.jstriggers:PRICE_DROP,NEW_DETAIL- Template:
deal-qualification/templates/sms/price-drop-engage.json,re-qualify.json stage-sync.js— updates HubSpot→ "Re-engaged"- Skill: acquisitions-followup
Transition trigger: CH replies → inbound classification → Stage 4 (if F: Buyer interest) or continue cadence.
Stage 4 — Re-engage / Inbound Reply Handling
Inbound SMS arrives via OpenPhone (port 18792) or SalesMsg (port 18793). The conversation classifier (A-G categories) routes each reply.
Key components:
webhooks/quo-handler-enhanced.js(port 18792) — OpenPhone inboundwebhooks/salesmessage-handler-v4-complete.js(port 18793) — SalesMsg inboundworkspace/scripts/lib/conversation-classifier.js— A-G categorizerworkspace/scripts/lib/response-generator.js— v3 Dispo Conversion Agent (5,138-msg trained)workspace/scripts/lib/stage-sync.js— acq ↔ dispo HubSpot sync- Skill: acquisitions-followup
A-G category routing:
| Category | Pattern | Action |
|---|---|---|
| A | Price negotiation | continue thread via response-generator |
| B | Detail provision | parse → update acquisition_deals |
| C | Showing request | escalate to dispo handler |
| D | STOP / opt-out | suppression list; no further sends |
| E | Off-topic | flag for human review |
| F | Buyer interest | route to dispo-blast |
| G | Multi-property | thread-context aggregate, smart-reply |
Hand-off to dispo: Category F inbound → deal moves to dispo pipeline 816046 → dispo-lifecycle.
Agent identity anchors
The acquisitions agent MUST have its SOUL.md read before any behavioral change is proposed. Current identity: relentless CH qualification machine; 5 gates; mentor cadence strictly enforced; never bypass compliance.
Supporting agents:
- _summary — handles inbound A-C classify + escalation
- _summary — data enrichment (ARV, comps, occupancy lookup)
Compliance gates are centralized — defer all gate logic to compliance-gates.
Compliance gates reference
DO NOT implement gates here. Navigate to the compliance hub:
→ compliance-gates — 5 pre-send gates (gate-computer, compliance-gate, blast-safety, thread-context, response-generator)
Key gate rules (summary only):
- Quiet hours: 8am-9pm local to CH’s state TZ
- Max 1 send per CH per 24h
- Dup content: don’t resend same template if last send <72h
- 10DLC compliance — BLOCKING: see twilio for A2P 10DLC repeat-denial status
Cross-links
Agents that touch this
- _summary — primary executor (all stages)
- _summary — inbound classification + escalation
- _summary — ARV comps + data enrichment
- _summary — alternate cadence (less aggressive follow-up)
Skills that invoke this
- acquisitions-outreach — Stage 1 initial outreach
- acquisitions-followup — Stages 2-4 cadence + inbound
- hubspot-deal-ingest — deal creation prerequisite
Plans that govern this
- openclaw-fragmentation-fix-2026-05-01 — G-BLOCKER-SURFACING enforcement
- openclaw-self-improvement-layer-2026-05-03 — OSIL optimization layer (DSPy/GEPA over acq agents)
Feedback rules
- feedback_acq_mentor_voice_cadence — touch→mentor mapping; do not alter
- feedback_acq_no_pass_and_pivot — banned: pass+pivot; probe first
- feedback_acq_thread_history_aware_gates — skip satisfied gates (thread-aware)
- feedback_never_send_without_auth — explicit auth required for any live send
- feedback_aurora_outbound_guardrails — outbound rules per dispatch
- feedback_quo_lineid_required — fail-closed if lineId not resolved
KB / source docs
- OUTREACH-RULES — 10 compliance rules
- MENTORS — mentor voice + anti-patterns
- CONVERSATION-PATTERNS — A-G category examples
System maps
- vm-acquisitions-flow — acquisitions data flow diagram
- vm-sms-carrier-compliance — SMS compliance layer
Related cluster — SMS/Carrier compliance
- openphone-quo — primary SMS transport
- salesmsg — secondary SMS transport
- twilio — voice + SMS fallback; 10DLC gate
- compliance-gates — all pre-send gate logic
- dispo-lifecycle — downstream hand-off (Category F)
Open issues / TODOs
- 10DLC A2P repeat-denial is BLOCKING all OSIL SMS tiers until resolved. See osil-twilio-10dlc-resubmission-2026-05-03 B14.
acquisitions.sqlitehas only 1 chunk (Phase 7.5 investigation per openclaw-fragmentation-fix-2026-05-01 §A2.3) — memory recall for acq agent severely degraded.- Stage 4 inbound: Category E (off-topic) escalation to human review needs defined Discord channel routing.
Recent activity
- 2026-05-03: hub created by W1-S9
- 2026-05-03: 4-stage lifecycle map authored with forward-refs to stage detail hubs