contract_signed), with each step flagged
live / dormant / retired /
not in backend. English narrative · Hungarian subject lines quoted verbatim ·
verified against the deployed code 2026-06-21. Product/flow changes surfaced by the same Run #1 are kept separate
as 🔧 proposed items (see Run #1 findings) — not deployed.AUTOSEND_ENABLED kill-switch defaults OFF in code but is currently ON in production (go-live
2026-06-19) — armed sequences send inside the 06:12–18:00 Mon–Fri window.GHL_ENABLED defaults OFF). /ghl/event is a 200
inert stub. The dashboard is the sole pipeline source of truth.BOOKING_START_HOUR=7/END=18), 15-min grid, 30-min calls, 4h
min lead. Signed, prefilled, slots-only token link. Booking success emails Matt + raises a "what changed" event. An
off-screen anti-bot honeypot (a hidden company field) silently no-ops bot submissions.noshow_rebook armed via the
preview modal — 6 fixed-copy steps at NOSHOW_WAIT_HOURS=[0, 24, 72, 120, 168, 240] (now / +1d / +3d /
+5d / +7d / +10d), reusing the 3 approved emails in rotation (subjects "Más időpont jobb
lenne?" · "15 perc is elég" · "Még érdekel a díjmentes anyag?"),
each embedding the signed booking link. Replaces the old 5-step AI loop. (A re-booked no-show lead now correctly
auto-moves out of Booking FUP back to Booked — fixed 2026-06-21.)neg_kind ∈ {angry, negative,
soft_objection}: angry → drop/log (existing client → task); clear negative at first touch only →
auto one-liner → Lost; soft_objection → AI draft + Negative-Replies card (human). Classifier =
Gemini 2.5 Flash (classify_email).clientsflow.hu" rule is reversed: known deal/lead → card; everything else → Notion "Logged" (not a Kanban
card). Warmup/Instantly stays invisible..pulse-unread) + always-visible snippet; armed sequences show a marching-ants dashed
border (.autoflow); a "what changed since last open" popup; a manual call scheduler; one unified status
<select> per card for stage moves.Verdict: no product change needed. Verified in code: a manual booking already moves the card, auto-schedules the reminders (REMINDER_OFFSETS_HOURS=[24,2]), creates the sales-prep task, and the card shows a 🔔 reminderbadge ("on an automatic reminder sequence"). There is no copy-editor modal in that path.
Why the run looked wrong: Run #1's step-6 sequence editor was a separate manual action (a rep opening the universal sequence editor at will), not something triggered by booking. The reminder copy is fixed and not editable at booking time, so nothing is missing — the report merely failed to document how step 6 was reached. That's a testing-framework gap (tracked for the vision-e2e skill), not a product fix.
Change: each email card in a sequence gets an X icon in the top-right to delete that email from the cadence, inline.
Why: reps need to drop individual emails from a sequence directly, without rebuilding it.
Change: on the booking-confirmation page, the appointment-date text must be bigger / highlighted.
Why: the confirmed call date is the single most important fact on that screen and currently doesn’t stand out.
Change (bundle), all driven from the post-call form data:
Why: sharper, unambiguous offer — clear price basis, real date-anchored urgency, and visible savings.
Change: add an appendix to the legal part that restates the proposal in legal terms, also filled from the post-call form, so the combined document carries the commercial proposal, the contract, AND a legally-phrased restatement.
Why: makes the offer itself legally binding / aligned with the contract.
Overlap to verify: the deployed DocuSeal doc is already a 3-part combined doc (AI proposal + szerződés + melléklet). Confirm whether the existing melléklet already covers this restatement or B5 is a distinct legal-restatement appendix on top of it.
Change / pipeline: on stage-1 entry → a Gemini agent finds the lead’s website (search if needed) → a scraper pulls text + image URLs → Gemini 2.5 Flash extracts location / services / socials → another Gemini instance looks up legal data → all saved to the CRM → used to auto-fill the contract / proposal.
Why: eliminates manual data entry and makes documents accurate from first contact.
Change: the DocuSeal UI surrounding the Hungarian document renders in English; it should be Hungarian.
Why: consistent Hungarian experience for the prospect. A locale/config issue, not a code bug.
Two orthogonal things are marked on every message: who/what triggers the send and its build status.
The preview-&-arm invariant: no multi-email sequence ever leaves before Matt has seen its full copy + schedule in a stage-entry modal. The 10-no-edit streak only pre-fills the modal as a one-click "Approve & arm" — it never removes the modal or sends silently. A global AUTOSEND_ENABLED (default OFF) gates every auto-send.
The whole deployed overhaul is live as of 2026-06-21 — the only non-live items in §1–§7 are a handful of deliberately dormant emails (handover/review) and two spec-only forms (client-portal RFI, the "we'll reach out" auto-confirmation). Separately, the vision-truthful Run #1 surfaced seven 🔧 proposed product changes (B1–B7), collected in Run #1 findings — those are not deployed.
handle_missive_incoming): drop warm-up/DMARC/Instantly, calendar RSVPs, out-of-office, internal senders, and Layer-0 automated/bulk mail before any AI call. Our own sent mail (_is_ours) still drops. Wise transfer → payment touchpoint.clientsflow.hu inbox runs the full gate, then routes — known deal / genuine new lead (is_lead, conf ≥ 0.55) → card; everything else → Notion "Logged" (a log view, not a Kanban card). Warmup/Instantly stays invisible. (Reverses the 2026-06-18 "ignore main inbox" rule.)email_type, neg_kind ∈ {angry, negative, soft_objection}, is_lead, is_automated, booking_ok, confidence. Parser defaults neg_kind=soft_objection (safe → human) if absent.seq_*) immediately.Everything below begins at step 3's branch on email_type / neg_kind.
Grouped into families A–H by what the lead's reply was. Shared sub-paths (booking → call → proposal) are abbreviated after the first full listing.
matyas@clientsflow.hu + a "what changed" popup event. GHL conf retired 🔧 B3 ✓ B1 proposed: bigger/highlighted appointment date (B3). B1 resolved as a no-op — reminders already auto-schedule and the card shows the reminder badge; no editor modal in this path.REMINDERS_ENABLED ON): 24h "Holnapi megbeszélés", then 2h "Megbeszélés" (body "2 óra múlva"). live — REMINDER_OFFSETS_HOURS=[24,2]DEFAULT_DEPOSIT_PCT=50); PAYMENT_PLANS=[50,100] (70% dropped)new_lead_unreachable; the one-active-sequence guard keeps them mutually exclusive.new_lead_unreachable sequence → preview modal shows every email + schedule. livenoshow_rebook sequence — a 6-step rotation (NOSHOW_WAIT_HOURS=[0,24,72,120,168,240] = now / +1d / +3d / +5d / +7d / +10d, reusing the 3 approved emails NOSHOW_EMAIL_1/2/3_HU in rotation — subjects "Más időpont jobb lenne?" / "15 perc is elég" / "Még érdekel a díjmentes anyag?" — each embedding the signed booking link). Preview/editor shows all steps + schedule. live — replaced the old 5-step AI loopbooking_fup), dashed border.handle_own_booking force-stage + no-show-recovery stop, fixed 2026-06-21) → call → Proposal.noshow_rebook armed & sent across the 6-step rotation (0 / +1d / +3d / +5d / +7d / +10d), no action.proposal_due_date. liveflows.draft_abandoned_cart → draft_reply, internal note ABANDONED_CART_INSTR) → human approves → Lead pays via Stripe → onboarding. NOT an armed sequence — abandoned_cart ∉ SEQUENCE_ARMABLE_TYPES; it is a single human-gated AI draft (corrected vs the prior doc).Conditions on the arrows; each box shows the subject line (or "in-thread" / transactional) + a short summary. Colours follow the send-mode legend; cyan = armed auto-sequence (preview-&-armed first), dashed purple = dormant.
flowchart TD
subgraph Legend ["ℹ️ LEGEND (Send mode)"]
direction LR
L1["🟢 AUTO-SENT
reminders + first-touch goodbye only"]:::auto
L2["✍️→🟡 DRAFT→APPROVE
hand-authored, per-email"]:::gate
L3["🤖⚡ ARMED SEQUENCE
preview-&-arm modal, then auto"]:::seq
L4["🟡 MANUAL ACTION
no message"]:::man
L5["[DORMANT / RETIRED]"]:::dorm
end
subgraph Triage ["1. Inbound Ingest & Triage"]
START(["📨 Inbound Reply"]):::start
MAIN{"Main inbox?
R3 routing"}:::ai
CLS{"🤖 AI Classifier
(Gemini 2.5 Flash)
neg_kind 3-way"}:::ai
LOG["📝 Notion 'Logged'
(no card)"]:::man
START --> MAIN
MAIN -->|"no deal match"| LOG
MAIN -->|"known deal / new lead"| CLS
end
subgraph Booking ["2. Booking & Nudges (own booking app)"]
FR["✍️→🟡 First Reply
own-booking link"]:::gate
NUDGE["✍️→🟡 Nudge Ladder
Day 2 / 5 / 9 (kept)"]:::gate
UNREACH["🤖⚡ new_lead_unreachable
(armed sequence)"]:::seq
CALLSET["🟡 Manual Scheduler
event + conf email"]:::man
CLS -->|"interested / neutral"| FR
FR -->|"no booking"| NUDGE
FR -->|"rep called, no answer"| UNREACH
FR -->|"rep phoned, agreed time"| CALLSET
end
subgraph Meeting ["3. Meeting & Reminders"]
BOOKED["🟢 Own-booking Conf
page + email to Matt"]:::auto
MEET(["🟢 Meet Invite
'Weboldal Bemutató'"]):::auto
REMIND["🟢 Reminders 24h & 2h
(modal-exempt)"]:::auto
NOSHOW["🤖⚡ No-show Rebook
6-step rotation (0/+1d/+3d/+5d/+7d/+10d)"]:::seq
FR -->|"books"| BOOKED
NUDGE -->|"books"| BOOKED
UNREACH -->|"books"| BOOKED
CALLSET --> BOOKED
BOOKED --> MEET --> REMIND
REMIND -->|"attends"| CALL{"🟡 Sales Call"}:::man
REMIND -->|"no-show"| NOSHOW
NOSHOW -->|"rebooks"| BOOKED
end
subgraph Proposal ["4. Proposal & Chasing"]
PROP["🤖⚡ Proposal Email (chase step 0)
in-thread + DocuSeal/Stripe"]:::seq
CHASE["🤖⚡ Proposal Chase
(page-3 authored, armed)"]:::seq
ABANDON["✍️→🟡 Abandoned-cart AI draft
signed, unpaid (NOT armed)"]:::gate
CALL -->|"ready to buy"| PROP
PROP -->|"signs + pays ≤2h"| PREPAY["Stripe Payment"]:::sys
PROP -->|"signed, unpaid"| ABANDON
PROP -->|"sent, unsigned"| CHASE
CHASE -->|"signs"| PREPAY
ABANDON -->|"pays"| PREPAY
end
subgraph Delivery ["5. Onboarding & Delivery"]
ONB["✍️→🟡 Welcome Kit
'Üdv a fedélzeten!'"]:::gate
DEV["🟡 Waiting for Dev
(Dani Slack ping)"]:::man
BAL["✍️→🟡 Balance Due
[NO LIVE COPY]"]:::gate
HANDOVER["Handover Invite
[DORMANT]"]:::dorm
WON([🏆 WON]):::won
PREPAY --> ONB --> DEV
DEV -->|"full prepaid"| HANDOVER
DEV -->|"50% deposit"| BAL
BAL -->|"pays balance"| HANDOVER
HANDOVER --> WON
end
subgraph Negatives ["Negative replies (3-way)"]
ANGRY["🟢 Angry → drop/log
(client → task)"]:::auto
GOODBYE["🟢 First-touch goodbye
one-liner (modal-exempt)"]:::auto
SOFT["✍️→🟡 Soft objection draft
Negative-Replies card"]:::gate
NEGFUP["🤖⚡ Negative-followup
+2-day nudge (armed)"]:::seq
GHOST([👻 Ghosted]):::term
LOST([🪦 Lost — 60d nurture]):::term
REACT["🟢 Reactivation"]:::auto
CLS -->|"angry"| ANGRY
CLS -->|"negative + first touch + conf≥0.80"| GOODBYE
CLS -->|"soft_objection"| SOFT
GOODBYE --> LOST
SOFT -->|"arm follow-up"| NEGFUP
SOFT -->|"reply & mark lost"| LOST
NEGFUP -->|"books"| BOOKED
NEGFUP -->|"1 week silence"| GHOST
GHOST -->|"writes back"| REACT
LOST -->|"writes back"| REACT
REACT --> FR
end
CLS -->|"proposal_followup"| PF["✍️→🟡 Proposal Reply
Q&A, no book link"]:::gate
PF --> PROP
CLS -->|"ongoing client"| ONG["Client Message Task"]:::man
%% GHL retired
GHLX["🔵 GHL booking/stage sync
RETIRED — /ghl/event = inert 200"]:::dorm
classDef start fill:#e8f0fe,stroke:#2563eb,stroke-width:2px,color:#1c2230;
classDef ai fill:#ffffff,stroke:#5c6675,stroke-width:1.5px,color:#1c2230;
classDef auto fill:#e9f7ef,stroke:#1f9d55,color:#13502c;
classDef gate fill:#fdf6e3,stroke:#b7791f,color:#6b4a10;
classDef seq fill:#e0f7fb,stroke:#0e7490,color:#0b4250;
classDef man fill:#eef1f5,stroke:#64748b,color:#33414f;
classDef neg fill:#fdecea,stroke:#c0392b,color:#7d1f15;
classDef term fill:#eef1f5,stroke:#64748b,stroke-dasharray:4 3,color:#33414f;
classDef won fill:#e9f7ef,stroke:#1f9d55,stroke-width:2px,color:#13502c;
classDef dorm fill:#f3ecfa,stroke:#8a4baf,stroke-dasharray:5 3,color:#4d2a66;
classDef sys fill:#e8f0fe,stroke:#2563eb,color:#15336e;
| Message | Subject line (HU) | Source | Send mode | Status |
|---|---|---|---|---|
| Cold email (first touch) | Beszéljünk a weboldaladról, {keresztnév}? | Instantly (read-only) | 🟢 campaign | live |
| First reply | in-thread | AI + FIRST_REPLY_BLOCK_HU (own-booking link) | ✍️→🟡 | live |
| Booking confirmation | page + email to Matt | own booking app (handle_own_booking) | 🟢 | live (own app; GHL conf retired) |
| Meet invite | Weboldal Bemutató — {név} | _create_booking_meet_event | 🟢 | live (GCAL-driven, real Meet link) |
| Reminder 24h | Holnapi megbeszélés | REMINDER_24H_* | 🟢 auto (modal-exempt) | live |
| Reminder 2h | Megbeszélés | REMINDER_1H_* (body "2 óra múlva") | 🟢 auto (modal-exempt) | live — REMINDER_OFFSETS_HOURS=[24,2] |
| Proposal email (step 0 of chase) | in-thread (threads under the cold subject; editable) | post-call step 3 → proposal_chase step 0 (with the client DocuSeal sign link) | 🤖⚡ armed (window-gated) | live |
| Nudge 1/2/3 | in-thread | NUDGE_INSTR_1/2/3 (Day 2/5/9); also armable as the nudge sequence | ✍️→🟡 / 🤖⚡ | live |
| New-lead "couldn't reach" | in-thread | new_lead_unreachable sequence engine | 🤖⚡ armed | live |
| Proposal chase | in-thread | post-call page-3 editor / templates (proposal_chase) | 🤖⚡ armed | live (replaced the cron soft/firm) |
| Abandoned cart | in-thread AI draft | flows.draft_abandoned_cart → draft_reply (ABANDONED_CART_INSTR) | ✍️→🟡 AI draft | live — NOT armed (∉ ARMABLE_TYPES) |
| No-show rebook (6-step rotation) | in-thread "Más időpont jobb lenne?" / "15 perc is elég" / "Még érdekel a díjmentes anyag?" | NOSHOW_EMAIL_1/2/3_HU in rotation across NOSHOW_WAIT_HOURS=[0,24,72,120,168,240] | 🤖⚡ armed | live — replaced the 5-step AI loop |
| First-touch goodbye | in-thread "Köszönöm a visszajelzést, minden jót…" | NEGATIVE_REPLY_DEFAULT_HU | 🟢 auto (modal-exempt) | live (first touch only, conf≥0.80) |
| Soft-objection draft | in-thread | AI objection-handling (neg_kind=soft_objection) | ✍️→🟡 | live |
| Negative +2-day FUP | in-thread "Érdekes lehet a lehetőség?" | NEG_FUP_BODY_HU (negative_followup) | 🤖⚡ armed | live (armed, soft only) |
| Welcome kit / onboarding | Üdv a fedélzeten, {keresztnév}! 🎉 Indulunk | copy:email_welcome_kit | ✍️→🟡 | live |
| Balance due (50/50) | in-thread "Elkészült a weboldalad 🎉…" | BALANCE_DUE_BODY_HU | ✍️→🟡 | live, .md subject differs |
| Contract (megbízási szerződés) | DocuSeal doc — combined AI proposal + szerződés + melléklet | contract-copy.md → build_contract_html | — both parties sign | live (50/50 fee; both-party signing verified 2026-06-21 → contract_signed) 🔧 B5 🔧 B7 |
| Handover / review request | Foglaljunk… / Hogy tetszik… | copy:email_handover_invite / _review_request | — | authored, not auto-sent |
| GHL booking confirmation + stage sync | GHL template / Workflow #1+#2 | GoHighLevel | 🔵 | retired (inert 200 stub) |
Regenerated from the parallel session's plan change-the-incoming-recursive-map.md (WS1–WS12 + Q1–Q13 conflict review) and LEAD_JOURNEYS.html. Rendering: Mermaid flowchart syntax.