QA Report · ClientsFlow Pipeline · PENDING REVIEW

Studio ↔ Pipeline Integration — Whole-Journey QA

Build under test: pipeline 17c5269+v111 (freebusy-skip merged) · Studio target: -rebuild · 2026-06-25 21:30 (post-compaction resume — Studio walk DRIVEN LIVE)

🟢 PASS / PASS-API — proven live (pixels ∧ state ∧ interaction, or real endpoint + downstream state) 🟡 Partial / Not-driven — seam & unit-test covered 🟣 Note — owner decision 🔴 Blocked — residual human / external infra

Headline

The session's core deliverable — the two-repo Studio integration — is now proven live end-to-end against the deployed pipeline (v111) and the live Studio -rebuild API, driven with a single ZZ sentinel, with the six real client deals untouched throughout.

Status: PENDING REVIEW. Nothing pushed to remote (local main ahead of origin). Studio not promoted to -prod. Human gate intact (Studio send-to-client never fired). One ZZ fixture remains to sweep at session end.

The integration journey — proven live

Create & surface
ZZ booking deferred save URL Studio project chip + links
Real project created on -rebuild (id 8e490d6b…); card renders 🎨 chip + Open-in-Studio.
Send & archive
AI draft human gate mark lost Studio archive
Draft prefilled live; empty send refused; lost → -rebuild archived (lookup 404, GET shows archived).

Studio walk — verdicts 7 rows

Each row driven through the real deployed endpoints; downstream state confirmed on the live Studio -rebuild instance.

RowWhat it coversVerdictEvidence
WJ-41booking(deferred)→save-URL→studio_create_and_kick🟢 PASS-APIZZ qa/book created deal_edcd0c3de166 (studio_deferred=True); POST /dash/api/studio/save-website-url → studio_resume_on_url_save → studio_create_and_kick created a REAL Studio project on -rebuild: id=8e490d6b76354febb1973c0c62cd726a, crm_ref matches. Pipeline deal now carries studio_project_id + present/review URLs.
WJ-42Studio stage chip on the card🟢 PASSPlaywright element screenshot of the ZZ card (.tmp/qa-shots/zz-card-booked.png): chip '🎨 DIZÁJN KÉSZÜL' rendered (studio_stage_label from STUDIO_STAGE_MAP, stage=intake).
WJ-43Open-in-Studio link🟢 PASSSame screenshot: 'Open in Studio' button rendered; deal studio_present_url=.../present/pJ2VL0Vf8lQl5ns0TZcJuw + studio_review_url=.../p/Z2dp60GHyeeokK1-IlQQUA.
WJ-44Send-to-client AI draft + human gate🟢 PASS-APIPOST /dash/api/studio/draft-send → real HU AI draft + the -rebuild review URL prefilled (no send). Human gate: POST /dash/api/studio/send-to-client with empty message → {ok:false,'message_text is required — never auto-send (human gate)'}. Küldés never clicked. (The on-card send BUTTON shows at a sendable stage; the project is at intake because the -rebuild Lab generated no pages for example.com.)
WJ-45Lost → Studio archive (S10, archive-not-delete)🟢 PASS-APIPOST /dash/api/move {stage:off} (hook-firing Move path) → _sync_stage('off') → trigger_lost → -rebuild project archived: lookup by crm_ref now 404 not_found (invisible), GET-by-id shows stage='archived' (still exists). Pipeline deal: stage=off, studio_stage=archived.
WJ-46Approval overlay (pulsing green) when Studio reports approved🟡 NOT_DRIVENNeeds the -rebuild project approved=true (client approves in the Studio present/review UI — there is no approve API endpoint, by design). Seam unit-tested (tests/test_studio_dash_rows.py renders the overlay from studio_approved). Residual: Studio Lab generation + human client approval.
WJ-47won → live-URL reflection + no separate waiting_dev column🟡 PASS-partialSoft-removal half PASS (no separate waiting_dev/Dev-handoff column in the board, prior pass). won→cloudflare_url half NOT_DRIVEN-live (needs a real won deal + Cloudflare deploy; seam unit-tested).

Board & render cluster 5 rows

Verified live (screenshots / DOM) on the deployed board.

RowVerdictEvidence
WJ-05🟢 PASSCard render: name+company, website link, email copy-chip, plain-text last message, action row; pulse-red ring on unread top lead.
WJ-08🟢 PASSEvery card has a MOVE TO combobox listing all 11 stages (re-confirmed on the ZZ card screenshot this pass).
WJ-board-sort(F2)🟢 PASSPer-column sort toggles ('Legutóbb szerkesztett felül' / 'Legközelebbi határidő felül').
WJ-34🟢 PASSSign-FUP card three pills (next-call, AJÁNLAT ÉRVÉNYES, EMLÉKEZTETŐ 1/3 + Auto chase).
WJ-09🟣 NOTENegative-Replies card shows a RICHER action set (Suggested-reply box + Send+Booking-FUP + Reply&Mark-Lost + Archive) than the older master's 'Log Call + Send Emails only'. Owner to confirm this newer panel is intended (it looks like the correct current design).

Infra fix that unblocked the walk

freebusy-skip (TDD, merged + deployed): app/flows_calls.py handle_own_booking gained a keyword-only _skip_freebusy (default False = prod unchanged); the ZZ-gated POST /dash/api/qa/book passes skip_freebusy=true. Built by a bounded TDD subagent (4 new tests), merged --no-ff to main 17c5269 (900 green), deployed v111. Root cause confirmed: the live own-booking path is SLOW (~60-90s; freebusy + Meet-create), not hung — it completes server-side after the HTTP client times out. PRODUCTION IMPLICATION worth a follow-up: real own-bookings may be slow live for the same reason (the Meet-create step), even though DWD reports OK in preflight.

Remaining journey rows — seam / residual

Not re-driven this Studio-focused pass; covered by the 900-green pytest suite + prior live passes, or genuinely residual.

VerdictRows & basis
🟡 NOT_DRIVENCovered by the 900-green pytest suite + prior bnf live passes; not re-driven this Studio-focused pass. Drive next with ZZ sentinels (qa/book now freebusy-skipped, so the booking UI rows are unblocked).
🔴 BLOCKEDResidual human/external infra — not drivable with a ZZ sentinel.

Safety & invariants confirmed

InvariantState after this pass
Real dealsNONE — 6 real client deals (reorgbau/revotec/k-xconsulting/analit/szhvill/alovasember) verified present + untouched before and after every step.
Human gateintact — Studio send-to-client never sent (empty-message gate verified); no lead/client sends performed.
AUTOSENDnot flipped
Owner-requested deletionFriend's data (Kocsy/scatter9920) deleted on owner instruction: 14 store keys deleted (3 deals + 4 booking markers + 7 indexes) + 46 Notion pages ARCHIVED (3 CRM + 42 activity-log + 1 call recording, archive-not-delete). Board verified 0 friend cards remain. External remnants flagged to owner (Fireflies transcript, GHL contacts) — not auto-deleted.
ZZ cleanup1 ZZ fixture remains (matyas.sarudi00+zzstudiowalk@gmail.com, now off/archived) — sweep at session end via the ZZ-gated _delete path.

Owner decisions needed

WJ-09 (Negative-Replies card): the live card shows a richer action set (suggested-reply box + Send+Booking-FUP + Reply&Mark-Lost + Archive) than the older master EBO's "Log Call + Send Emails only". It looks like the correct current design — please confirm it's intended.
External friend-data remnants: the Fireflies transcript (meeting 01KVX7D2…) and any GHL contacts for the Kocsy accounts were not auto-deleted (outward-facing/external). Say the word to purge them.

Next steps

Option
V1Accept & promote: I sweep the last ZZ fixture, then on your trigger push main + promote Studio to -prod.
V2Drive the remaining non-Studio journey rows live (booking UI / proposal / cancellation) now that qa/book is freebusy-skipped, for a full-journey green.
V3Live-sim WJ-46/47: progress the -rebuild project to approved/won (Studio UI) so the approval overlay + won live-URL render on the card.