ClientsFlow Pipeline · Merged Whole-Journey EBO + Live Visual-QA Evidence

Merged EBO — spec ⟷ live test, side by side

One running document: each scenario opens into the signed oracle (left — what it should do) next to the live visual-QA feed (right — what it actually did, screenshot + interleaved model reasoning per step). UX-critique column dropped. Each scenario is a toggle.

▥ LAYOUT B — Two-pane cards · the expectation spec and the live test feed run alongside each other, step for step
Mockup preview. Showing the first 3 real scenarios (S1–S3, Studio↔Pipeline) with sample test evidence + one merge-conflict example. Once you pick a layout, every scenario from all 6 prior EBOs (55 deduped rows) gets filled in this shape.
PENDING_REVIEW run-trust 0.62 · 2 of 3 scenarios verified LIVE · 1 pending re-shoot · 55 scenarios total when fully merged · trust is in the asserted invariants, not "the system works"
◀ Left pane = the oracle: You do · should see · element · underneath · must NOT · 🕓 touchpoint Right pane = live feed ▶ : honesty tag (LIVE ✅ / RENDERED ⚠️ / BLOCKED ⛔) + verdict + screenshot + ① Gemini + ② Claude + error-arc
S1 Enrichment guarantees a website URL; missing → red ❗ badge guardrail / upstream studio-S1bnf-r3-S8duo2-S14 LIVE ✅ PASS · trust 0.9

Who: System (lead enrichment) + Mátyás  ·  When: A new lead is enriched; enrichment must save a website_url. Runs upstream of Studio and gates everything downstream.

⚠ Merge conflict — 3 source EBOs disagreed on the missing-URL signal
studio-S1Raises a red ❗ badge pinned top-right; it is the only thing that blocks the Studio auto-kick.
bnf-r3-S8Shows an amber ⚠️ "enrich pending" chip and silently retries enrichment 3× before flagging.
duo2-S14Fills legal/CRM fields on ingestion but is silent when no website is found (no card signal).
✔ Resolved (signed EBO wins): studio-S1 governs the card face (red ❗); bnf-r3 retry logic kept underneath; the duo2 silent path becomes the bug this scenario forbids.

📋 Expected behaviour — the oracle

Step 1
You doEnrichment runs on a new lead and finds + saves the prospect's website.
Should seeCard shows the website (favicon/domain) and NO red ❗ — readiness implicitly met.
ElementDomain "beridoor.hu" on the card meta row, optional 🌐 favicon.
Underneathdeal.website_url persisted; Studio-readiness = true.
Must NOTExist long-term with an empty website silently; assume readiness without a saved URL.
🕓 TouchpointSYSTEM · 🔎 "Weboldal megtalálva" · "{domain} mentve".
Step 2
You doEnrichment finds NO usable website at all.
Should seeA prominent red ❗ badge on the card face — the only thing that later blocks the Studio auto-kick.
ElementRED ❗ badge pinned top-right; tooltip "Nincs weboldal — add meg a Studio dizájnhoz".
Underneathwebsite_url empty → readiness=false; ❗ raised after the bnf-r3 retry budget.
Must NOTHide the ❗ in a panel; let a no-URL deal pass as Studio-ready (the duo2 silent path).
🕓 TouchpointSYSTEM · ❗ "Nincs weboldal" · "kézi megadás szükséges".

🧪 Live test feed — what actually happened

Step 1LIVE ✅PASSGemini: OK · conf high21:18:04
Details panel filled
frames/s1-01-details.png · 1280×800
🖱 Decision — where I looked & why

Target: CRM Details panel of a zero-state ZZ lead. Reasoning: S1 asserts enrichment persists a URL before any booking, so I read the saved field in Details rather than the board.

① Gemini — 5-sentence pixel report

The Details panel shows a populated contact block with a "Weboldal" row reading a real domain. No red/amber badge on the card header. Legal-info fields below are filled. No empty-field placeholders. Confidence: high.

② Claude — verify against pixels

See: Weboldal row = "beridoor.hu", no warning badge — matches the happy branch. Verdict: PASS pixels ∧ state agree. Next: the no-URL branch.

Step 2LIVE ✅PASSGemini: OK · conf high21:18:41
Card with red badge
frames/s1-02-noURL.png · 1280×800
① Gemini — 5-sentence pixel report

The board card carries a bright red ❗ ribbon top-right, clearly above the fold. The card greys slightly to draw the eye. Hover reveals the "add a URL" tooltip. No design chip present, confirming the Studio kick is held. Confidence: high.

② Claude — verify against pixels

See: red ❗ pinned top-right, unmissable; no Studio chip — matches studio-S1, not the duo2 silent path. Verdict: PASS the conflict resolution holds in pixels. Next: S3 (booking on a red-❗ deal).

S2 Sales call booked + URL present → auto-create project + auto-kick the Lab (Phase ①) happy path studio-S2 RENDERED ⚠️ PARTIAL · trust 0.5

Who: System (triggered by booking) + Mátyás  ·  When: A deal with a saved website URL has its sales call booked. The Phase-① "sell with it" kickoff.

📋 Expected behaviour — the oracle

Step 1
You doThe sales call is booked on a URL-present deal.
Should seeA Studio project auto-created and bound to this deal; chip "🎨 Dizájn készül" appears.
ElementIndigo chip "🎨 Dizájn készül" in the card status-chip slot.
UnderneathPOST /api/projects {source_url, crm_ref=deal_id}; project id stored.
Must NOTCreate a 2nd project (idempotent); block the booking if Studio is slow (fail-open).
🕓 TouchpointNEW · 🎨 "Studio projekt létrehozva".
Step 2
You do(Automatic) the Lab is kicked to generate the Phase-① draft.
Should seeStudio generates homepage design + SEO audit + suggested structure from the saved URL.
ElementChip stays "🎨 Dizájn készül" with a progress shimmer.
UnderneathLab run (scrape → SEO → structure → homepage); Gemini/DataForSEO spend.
Must NOTAuto-send anything to the prospect; add a new Modal cron.
🕓 TouchpointNEW · ⚙️ "Dizájn generálás elindítva".

🧪 Live test feed — what actually happened

Step 1LIVE ✅PASSGemini: OK · conf high21:22:10
Card with design chip
frames/s2-01-chip.png · 1480×1000 · ZZ Studio Walk
🖱 Decision — where I clicked & why

Target: POST qa/book on the ZZ sentinel, then read the board card. Reasoning: booking is the trigger; drove the real endpoint (freebusy skipped via the QA hook) so auto-create fires on the genuine path.

② Claude — verify against pixels

See: one indigo "🎨 Dizájn készül" chip; DOM confirms studio_project_id set; no duplicate on re-POST. Verdict: PASS pixels ∧ state ∧ idempotency. Next: watch generation (likely RENDERED).

Step 2RENDERED ⚠️UNVERIFIEDGemini: conf med21:22:48
Generating shimmer
frames/s2-02-generating.png · RENDERED (not driven to completion)
① Gemini — 5-sentence pixel report

The chip reads "🎨 Dizájn készül" with a subtle shimmer suggesting work in progress. No completed-design affordance yet. The card otherwise looks healthy with no error state. Confidence: medium — shimmer present but completion not visible.

② Claude — verify against pixels

See: the "készül" chip + shimmer render, but the Lab spend / artifact production is back-end, not pixel-visible. Verdict: UNVERIFIED — RENDERED can't be GREEN without a Studio run-state assertion. Next: re-shoot at "ready" + assert run-state via API.

S3 Booked on a red-❗ deal → NO auto-kick; saving a URL resumes the flow failure / deferred studio-S3 LIVE ✅ PASS · after fix

Who: System + Mátyás  ·  When: A red-❗ deal (no website) gets its sales call booked. The Studio kickoff must be held back, not silently skipped or fake-run.

📋 Expected behaviour — the oracle

Step 1
You doThe sales call is booked while the card still shows the red ❗.
Should seeNO Studio project, NO Lab kick; card prompts "Add meg a weboldalt a Studio dizájnhoz".
Element❗ stays + inline "Weboldal megadása" field in the card body.
UnderneathStudio create/kick suppressed; deal flagged studio_deferred=true.
Must NOTAuto-create a blank project; silently skip; fake-run a design on a missing URL.
🕓 TouchpointSYSTEM · ⏸️ "Studio dizájn elhalasztva".
Step 2
You doMátyás pastes a valid website URL into the inline field and saves.
Should seeThe ❗ clears and the normal S2 flow resumes automatically: project created + Lab kicked.
ElementRed badge → indigo "🎨 Dizájn készül" chip.
Underneathwebsite_url saved; studio_deferred cleared; same create+kick as S2.
Must NOTRequire re-booking; the save alone must resume it.
🕓 TouchpointNEW · 🎨 "Studio projekt létrehozva" · "Weboldal megadva" · by operator.

🧪 Live test feed — what actually happened

Step 1LIVE ✅PASSGemini: OK21:26:33
Deferred card
frames/s3-01-deferred.png · 1280×800
② Claude — verify against pixels

Expected: no design chip; inline URL field; studio_deferred=true. See: red ❗ persists, inline "Weboldal megadása" field rendered, no "Dizájn készül" chip — the kick was suppressed. Verdict: PASS deferral held, no fake run. Next: paste a URL, confirm S2 resumes.

Step 2LIVE ✅PASS(after fix)21:28:12
Resumed
frames/s3-02-resumed-retry2.png · 1280×800
② Claude — verify against pixels

Expected: ❗ clears, chip flips to "Dizájn készül", project created — without re-booking. See: after pasting the URL, the badge cleared and the indigo chip appeared; DOM confirms one new project bound to the deal. Verdict: PASS on retry 2 — resume now fires on save alone.

error-arc — full history kept
BUGRetry 1: pasting the URL cleared the ❗ but did NOT re-fire create+kick — operator had to re-book. Violated "save alone resumes it".
FIXWired the URL-save handler to the same ensure_studio_project() the booking trigger uses; cleared studio_deferred in one transaction.
PASSRetry 2: save alone resumed; one project, chip flipped, no re-booking. Verified LIVE.