ClientsFlow Pipeline · autonomous bugfix/feature factory
Consolidated to ONE branch main · live 412ebe4+v097 · PENDING_REVIEW (local-only, not pushed) · 2026-06-24
Every ask from your bug-fix-roud-3.md + the meeting transcript (incl. 4 transcript-only asks you hadn't written down: I11, I12, I13, I14). Full oracle: the EBO journeys page · Notion EBO.
| # | Ask | Status | Evidence / note |
|---|---|---|---|
| I1 | Lead de-dup matches only on exact email/phone, never website/company | 🟡 | Removed the name+domain fallbacks in find_crm_fuzzy; new strong seam test asserts a separate deal when only the website matches. |
| I3 | Reschedule/cancel emails use a "kattints ide" link; cancel link actually works | 🟢 | Anchor text not raw URL; new /cancel route live (returns 403 with a bad token = exists; was 404). |
| I4+I6 | Self-book disarms the booking-follow-up sequence + flushes scheduled emails; dim until day-before | 🟡 | Self-book path now reuses the manual-booking teardown; dim un-dims at 00:00 of the day before. Seam-tested. |
| I5 | Booking availability: weekday 08:30–18:30, 30-min slots, 15-min post-call buffer, gcal busy | 🟢🔵 | Window/grid LIVE (slots start 08:30, 30-min). Live gcal-busy + buffer time out → residual (see below). |
| I7 | Auto-record Google Meet when ≥2 people present | 🔵 | New app/transcription.py + 11 unit tests; decision = Fireflies notetaker bot (bot-free rejected on real criteria). Live wiring needs a Workspace Events subscription + a real Meet call. |
| I8 | Sales-call "done + duration" tag + transcript-status tag (loading/missing/done) | 🟡 | board_view emits the fields; dash renders both pills. Seam-tested; render code confirmed live. |
| I9 | Fresh lead triggers scraper + legal/CRM extraction → contract autofill | 🟡🔵 | Root cause fixed: the manual add-lead path now triggers enrichment. Full live E2E needs a real fresh lead. |
| I10 | Proposal → card moves to Sign-Follow-Up instantly (no ~1-min lag) | 🟡 | Optimistic move in pcFinalize() before the async write. Seam-tested. |
| I11 | Sign-Follow-Up card shows offer-validity + reminder-index ("N/M") tags | 🟡 | board_view emits offerValidUntil + reminderIdx; dash renders pills. Seam-tested. |
| I12+I13 | Payment sequence self-arms on both-signed; Stripe link pre-filled | 🟡🔵 | Self-arm is the ONLY sanctioned ARM-gate bypass; email#1 carries Stripe link + transfer details + exact amount; stops on payment; Stripe session prefilled. AUTOSEND is OFF in prod → email#1 DRAFTS for review (see decision below). Live needs a real Stripe charge. |
| I14 | DocuSeal auto-emails the signed PDF after both-signed | 🟡🔵 | Pull-and-send via the existing Missive path on both-signed; DOCUSEAL_AUTOSEND.md documents the alternative native setting. Live needs a real signing. |
| I2 | Contacted dim overlay renders fast (you deprioritized this) | 🟡 | Optimistic armed=true on the same render → no flash. Kept as the low-priority polish you flagged. |
A dedicated Opus agent drove the live merged build against the whole oracle. It found 3 bugs + I found 1 perf bug; all re-verified live.
| Bug | What was wrong | Fix | Live re-check |
|---|---|---|---|
| B2 | Live booking slots were 07:45/08:00 on a 15-min grid (the new 08:30/30-min code wasn't live) | The booking page is a separate Modal app — deployed it | 🟢 08:30 start, 30-min grid |
| B3 | The new cancel link returned 404 live (same un-deployed booking app) | Deployed the booking app | 🟢 /cancel → 403 (route exists) |
| B1 | /dash/api/thread returned HTTP 500 when a Missive thread couldn't be fetched | Degrade to an empty, flagged thread (TDD) | 🟢 HTTP 200 {unavailable:true} |
| B-perf | /book/slots hung ~72s on a slow gcal freebusy — the booking page was unusable | Bound the whole availability lookup to 8s, fail open to the template (TDD) | 🟢 ~8.5s warm |
These are built + unit-tested, but their live verification needs a real external event or an infra/config step I won't fake-green or do autonomously.
| Item | Why it's residual | Your step |
|---|---|---|
| I5 live busy | The matyas@clientsflow.hu freebusy is slow/unreliable (~72s) → bounded to 8s + fails open to the template, so live gcal busy-subtraction + the 15-min buffer don't apply yet. The hours/grid ARE correct live. | Verify the calendar's domain-wide delegation / free-busy sharing so freebusy is fast + correct. |
| I12 send | The payment sequence self-arms, but AUTOSEND is OFF in prod → email#1 drafts for review instead of firing. I did not flip a live switch autonomously. | If you want it to truly auto-send on signing, flip AUTOSEND_ENABLED (one decision). |
| I7 Meet | The notetaker trigger module is built; the live path needs a Google Workspace Events push subscription + a real ≥2-person Meet call. Endpoint wiring deferred (the builder guessed a store API that doesn't exist here). | Create the Workspace Events subscription; set the Fireflies bot name to "Note Taker". See TRANSCRIPTION_WIRING.md. |
| I9 / I14 live | Enrichment-on-fresh-lead and DocuSeal auto-email are code-complete + seam-tested; full live E2E needs a real new lead and a real both-signed event. | Walk one real lead end-to-end when convenient. |
| UI rows | I8/I10/I11/I4 card states are render-confirmed live + strong-seam-tested, but full click-drive needs staged board fixtures via send/arm paths (safety-blocked for ZZ). | Eyeball them on the board in the morning (a quick visual pass). |
Beyond the 14 bug/feature asks, your meeting transcript + the gemini-processed notes + the parallel session (b3e1c1f8, which ended at a proposal you never picked from) contain softer ideas. None of these are built yet — they're the honest backlog so nothing is lost.
| Idea / step | Source | What it is | Status |
|---|---|---|---|
| Categorization AI fine-tune | gemini notes · Kocsy ("Előszűrő modell… fine tuning") | The lead-classifier flags some positive leads as negative → mislabels lose real leads. Fine-tune it. | ⬜ not built — highest business risk |
| Board UX bundle | gemini §3 · Matt | Per-column sort toggle ("last edited" / "closest deadline", column-local) + a "Move to" stage dropdown on every card + new leads pinned to top. | ⬜ not built |
| Cancellation success page polish | gemini §3 · Kocsy | Rebuild the cancel success screen: central checkmark + "Successful cancellation" + your phone & email, no forms, and log the cancel in touchpoint history. | 🟡 partial — round-3 made the cancel link WORK + a basic confirmation page; the polished screen + history-log remain |
| Hungarian name parser | gemini §3 · Matt | Invisible lightweight AI step on ingestion that fixes the first-name / last-name mapping silently. | ⬜ not built |
| Proposal discount copy | transcript ~L856 | A fixed promo line in the generated proposal: "order the development within 5 days → a mini CRM with auto e-mail notification, 100 000 Ft value, included". Editable in the proposal-gen prompt. | ⬜ not built |
| Copy-review workflow ("review the copies") | transcript ~L1170–1174 | Review the auto-sent e-mail copies + the proposal copy once live, and SAVE the winning versions — via the Sablonok tab + the Eval-Lab / AI-Reliability-Trainer (human-gated promotion). A process, not a build. | ▶ do when live (tooling already exists) |
| Post-signing onboarding / data-intake | transcript ~L1102–1134 | After signing: show the proposed homepage + competitor analysis, let the client comment, then AI generates the rest of the pages per the agreed sitemap (the Sales-School sitemap step). | ⬜ future feature |
Open the dash with the token (a bare /dash 403s — that's why your earlier link "didn't work"). Use a test e-mail you control (e.g. your gergelykocsi20@…) — never a real client.
| # | Test | Do this | Expect ✓ |
|---|---|---|---|
| 0 | Open the board | dash (with token) | Board loads, all columns render, no error. |
| I5 | Booking window | Open the booking page | Slots are weekday 08:30–18:30, 30-min, none before 08:30. (Page may take ~8s to load slots — bounded; live gcal busy-blocking is a residual, see above.) |
| I3 | E-mail links + cancel | Book a slot as your test lead → open the confirmation/reschedule/cancel e-mails → click the cancel link | Links read "kattints ide" (not a raw URL); the cancel link actually cancels + frees the slot. |
| I4+I6 | Self-book cleans up | Test lead in Contacted with an armed sequence → book via the link → open the card history | Card moves to Booked, stays dimmed (until day-before), and the scheduled emails are GONE from history. |
| I10 | Instant column move | On a Sales-Call card, generate the proposal + schedule emails | Card jumps to Sign-Follow-Up immediately (no ~1-min wait). |
| I8 / I11 | Card tags | Look at a sales-call card (after a call) and a sign-follow-up card | "Sales call megvolt · N perc" + transcript-status tag; and "Ajánlat érvényes: …" + "Emlékeztető N/M". |
| I1 | De-dup | Send 2 inbound mails from different emails + phones but the same website | Two SEPARATE cards (not merged onto one). |
| I12 | Payment on signing | Complete a test DocuSeal both-signed (or wait for a real one) | A payment e-mail drafts for review (AUTOSEND off) with the Stripe link + transfer details + exact amount; Stripe link has the email pre-filled. |
| I9 / I14 | Fresh-lead + signed PDF | Walk one real fresh lead end-to-end; complete a real signing | Scraper + legal enrich → contract autofills; the signed PDF auto-emails. |
d5179c3+v096)bnf-2026-06-24-r3/integration (21 commits on top of bnf-duo2/integration). Say the word and I'll merge it forward + push. Main stays your explicit trigger.cp -r .tmp/snapshots/v095/app/* app/ then redeploy (or git checkout bnf-duo2/integration + redeploy). Full backup bundle in .tmp/backups/pre-merge-*/.