[object Object]

← back to Marketing Command Center

prove every Quick Post control across browsers

d5e756d1e74a94ef75d346d7a33ba49ebf5f6c4c · 2026-08-30 09:30:28 -0700 · Steve Abrams

Files touched

Diff

commit d5e756d1e74a94ef75d346d7a33ba49ebf5f6c4c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Aug 30 09:30:28 2026 -0700

    prove every Quick Post control across browsers
---
 cta/CTA-REPORT.md                      |  36 +++-
 screenrecord/quickpost/DEBUG-REPORT.md |  17 +-
 screenrecord/quickpost/debug-log.jsonl | 301 +++++++++++++++++++++++++++++++++
 scripts/cta-quickpost.js               |  17 ++
 scripts/quickpost-test-lib.js          |   4 +-
 scripts/screenrecord-quickpost.js      | 151 +++++++++++++++++
 verification/e2e-proof.json            |   8 +-
 7 files changed, 518 insertions(+), 16 deletions(-)

diff --git a/cta/CTA-REPORT.md b/cta/CTA-REPORT.md
index a926405..fd3e0cb 100644
--- a/cta/CTA-REPORT.md
+++ b/cta/CTA-REPORT.md
@@ -1,52 +1,82 @@
 # CTA Report — Kid-friendly Quick Post
 
-**Verdict:** PASS — 36/36 component-engine checks clean.
+**Verdict:** PASS — 66/66 component-engine checks clean.
 
 **Safety:** Copy generation and publish endpoints were browser-intercepted. No social post, draft write, email, or paid generation occurred.
 
 ## Browser coverage
 
-- Chrome/Chromium recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/chrome/page@739562e661da4907648699a2f24b2e69.webm
-- Safari/WebKit recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/safari/page@1fba19f29feeec101ae10cb9499f401e.webm
+- Chrome/Chromium recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/chrome/page@8ba4519573f0c023284a9ea81a9c0aa7.webm
+- Safari/WebKit recording: /Users/macstudio3/Projects/marketing-command-center/cta/rec/safari/page@8e8606ef327a6b3f1cb8607227552e4e.webm
 - Browserbase: skipped by design because the target is localhost and Browserbase cannot reach the Mac-local service.
 
 ## Components
 
 | Browser | Component | Rendered | Worked | Errors |
 |---|---|---:|---:|---|
+| chrome | All ideas filter | ✓ | ✓ | — |
+| chrome | DW picks filter | ✓ | ✓ | — |
+| chrome | My uploads filter | ✓ | ✓ | — |
+| chrome | Picture search | ✓ | ✓ | — |
 | chrome | Picture asset | ✓ | ✓ | — |
 | chrome | Paste-link details | ✓ | ✓ | — |
 | chrome | Step Music | ✓ | ✓ | — |
+| chrome | Picture step tab | ✓ | ✓ | — |
+| chrome | Return to Music | ✓ | ✓ | — |
 | chrome | Music choice | ✓ | ✓ | — |
 | chrome | Back button | ✓ | ✓ | — |
 | chrome | Next button | ✓ | ✓ | — |
 | chrome | Step Words | ✓ | ✓ | — |
 | chrome | Generate suggestions | ✓ | ✓ | — |
 | chrome | Choose suggestion | ✓ | ✓ | — |
+| chrome | Edit final words | ✓ | ✓ | — |
+| chrome | Music step tab | ✓ | ✓ | — |
+| chrome | Return to Words | ✓ | ✓ | — |
 | chrome | Step Where | ✓ | ✓ | — |
 | chrome | Choose all accounts | ✓ | ✓ | — |
 | chrome | Clear accounts | ✓ | ✓ | — |
 | chrome | Single social account | ✓ | ✓ | — |
 | chrome | Instagram account menu | ✓ | ✓ | — |
+| chrome | Words step tab | ✓ | ✓ | — |
+| chrome | Return to Where | ✓ | ✓ | — |
 | chrome | Step Check | ✓ | ✓ | — |
+| chrome | Where step tab | ✓ | ✓ | — |
+| chrome | Return to Check | ✓ | ✓ | — |
+| chrome | Check step tab | ✓ | ✓ | — |
+| chrome | Review picture rendered | ✓ | ✓ | — |
 | chrome | Confirm checkbox | ✓ | ✓ | — |
 | chrome | Post now mocked | ✓ | ✓ | — |
 | chrome | Save drafts mocked | ✓ | ✓ | — |
+| safari | All ideas filter | ✓ | ✓ | — |
+| safari | DW picks filter | ✓ | ✓ | — |
+| safari | My uploads filter | ✓ | ✓ | — |
+| safari | Picture search | ✓ | ✓ | — |
 | safari | Picture asset | ✓ | ✓ | — |
 | safari | Paste-link details | ✓ | ✓ | — |
 | safari | Step Music | ✓ | ✓ | — |
+| safari | Picture step tab | ✓ | ✓ | — |
+| safari | Return to Music | ✓ | ✓ | — |
 | safari | Music choice | ✓ | ✓ | — |
 | safari | Back button | ✓ | ✓ | — |
 | safari | Next button | ✓ | ✓ | — |
 | safari | Step Words | ✓ | ✓ | — |
 | safari | Generate suggestions | ✓ | ✓ | — |
 | safari | Choose suggestion | ✓ | ✓ | — |
+| safari | Edit final words | ✓ | ✓ | — |
+| safari | Music step tab | ✓ | ✓ | — |
+| safari | Return to Words | ✓ | ✓ | — |
 | safari | Step Where | ✓ | ✓ | — |
 | safari | Choose all accounts | ✓ | ✓ | — |
 | safari | Clear accounts | ✓ | ✓ | — |
 | safari | Single social account | ✓ | ✓ | — |
 | safari | Instagram account menu | ✓ | ✓ | — |
+| safari | Words step tab | ✓ | ✓ | — |
+| safari | Return to Where | ✓ | ✓ | — |
 | safari | Step Check | ✓ | ✓ | — |
+| safari | Where step tab | ✓ | ✓ | — |
+| safari | Return to Check | ✓ | ✓ | — |
+| safari | Check step tab | ✓ | ✓ | — |
+| safari | Review picture rendered | ✓ | ✓ | — |
 | safari | Confirm checkbox | ✓ | ✓ | — |
 | safari | Post now mocked | ✓ | ✓ | — |
 | safari | Save drafts mocked | ✓ | ✓ | — |
diff --git a/screenrecord/quickpost/DEBUG-REPORT.md b/screenrecord/quickpost/DEBUG-REPORT.md
index ac28b9e..e43d43c 100644
--- a/screenrecord/quickpost/DEBUG-REPORT.md
+++ b/screenrecord/quickpost/DEBUG-REPORT.md
@@ -1,23 +1,24 @@
 # Quick Post five-run screen-record report
 
-**Verdict:** PASS — 78/78 recorded actions clean across five distinct combinations.
+**Verdict:** PASS — 153/153 recorded actions clean across five distinct full-control combinations.
 
 **Safety:** Copy generation, live publish, and draft endpoints were intercepted in the browser. No external post, draft write, email, deploy, or spend occurred.
 
 ## Recordings
 
-- Run 0 (combination-0): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run0/page@05baf8ca79eaf1cdef777c417af06282.webm
-- Run 1 (combination-1): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run1/page@b19f0fbdfc4fe8c5954671d13e5189e6.webm
-- Run 2 (combination-2): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run2/page@b82b7b96c2027e6fa4d47b1150a419a9.webm
-- Run 3 (combination-3): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run3/page@cdff33735891eb376b5c756381a052ae.webm
-- Run 4 (combination-4): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run4/page@7dad03b8f10f9db7e3e98d87364aa4c2.webm
+- Run 0 (combination-0): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run0/page@6fa57673e56f6fc95aa091a71bafd8d2.webm
+- Run 1 (combination-1): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run1/page@fc4b65132116a942783153058bfc0c57.webm
+- Run 2 (combination-2): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run2/page@ff4128b1082c5689aec1cc78efe7db06.webm
+- Run 3 (combination-3): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run3/page@8ace230a880199ceeae6dec5b1ca50f3.webm
+- Run 4 (combination-4): /Users/macstudio3/Projects/marketing-command-center/screenrecord/quickpost/rec/run4/page@7b0f2861267a639f77f3969d13cb7d7c.webm
 
 ## Combination coverage
 
+- Every run: all three filters, search, paste-link control, picture choice, music, topic/suggestions, direct caption edit, all five step tabs, Back/Next, channel selectors, account menu, review action.
 - Run 0: DOM-order happy path, asset picker, one account, mocked post.
-- Run 1: paste-link first, choose-all → clear → choose-all, mocked draft.
+- Run 1: reverse filter order, paste-link first, choose-all → clear → choose-all, mocked draft.
 - Run 2: validation error first, asset picker, alternate suggestion, mocked post.
-- Run 3: paste-link first, Back/forward revisit, choose-all, mocked draft.
+- Run 3: reverse filter order, paste-link first, extra Back/forward revisit, mocked draft.
 - Run 4: persisted prior failures first when present, asset path, mocked post.
 
 ## Failures and order-dependent issues
diff --git a/screenrecord/quickpost/debug-log.jsonl b/screenrecord/quickpost/debug-log.jsonl
index 1f09263..e84d65e 100644
--- a/screenrecord/quickpost/debug-log.jsonl
+++ b/screenrecord/quickpost/debug-log.jsonl
@@ -76,3 +76,304 @@
 {"run":4,"ts":"2026-08-30T16:03:50.370Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
 {"run":4,"ts":"2026-08-30T16:03:50.507Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
 {"run":4,"ts":"2026-08-30T16:03:50.507Z","label":"run complete","ok":true,"effect":"combination-4","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:19.656Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:19.833Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:19.966Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.096Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.279Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.437Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.585Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.721Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:20.865Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.006Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.147Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.272Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.411Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.561Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.688Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.841Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:21.990Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.152Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.290Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.419Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.556Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.701Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:22.854Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.010Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.150Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.281Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.413Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.551Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:26:23.551Z","label":"run complete","ok":true,"effect":"combination-0","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:24.431Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:24.588Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:24.734Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:24.930Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.078Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.238Z","label":"paste picture link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.396Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.537Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.677Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.827Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:25.971Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.097Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.240Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.396Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.523Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.663Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.800Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:26.964Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.100Z","label":"choose all accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.240Z","label":"clear accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.372Z","label":"choose all accounts final","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.498Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.637Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.768Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:27.904Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:28.052Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:28.209Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:28.345Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:28.495Z","label":"save drafts mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:26:28.495Z","label":"run complete","ok":true,"effect":"combination-1","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:29.377Z","label":"picture validation","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:29.600Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:29.849Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.010Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.136Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.303Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.433Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.576Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.717Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:30.871Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.004Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.144Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.270Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.415Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.561Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.687Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.825Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:31.963Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.103Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.240Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.366Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.504Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.639Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.783Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:32.931Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:33.085Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:33.224Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:33.355Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:33.487Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:26:33.487Z","label":"run complete","ok":true,"effect":"combination-2","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:34.618Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:34.758Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:34.900Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.051Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.176Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.331Z","label":"paste picture link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.475Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.607Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.750Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:35.885Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.025Z","label":"back button","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.168Z","label":"return to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.303Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.429Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.558Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.709Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.835Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:36.980Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.121Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.281Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.418Z","label":"choose all accounts final","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.543Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.675Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.813Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:37.951Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:38.100Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:38.251Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:38.386Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:38.518Z","label":"save drafts mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:26:38.519Z","label":"run complete","ok":true,"effect":"combination-3","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:39.622Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:39.780Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:39.921Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.047Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.219Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.356Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.496Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.634Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.787Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:40.925Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.063Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.188Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.323Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.479Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.604Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.734Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:41.863Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.026Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.166Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.291Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.425Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.568Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.703Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.851Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:42.976Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:43.106Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:43.248Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:43.394Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:26:43.395Z","label":"run complete","ok":true,"effect":"combination-4","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.220Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.384Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.529Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.660Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.841Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:24.979Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.124Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.264Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.425Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.560Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.704Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.830Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:25.974Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.120Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.246Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.386Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.519Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.673Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.808Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:26.934Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.075Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.230Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.373Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.520Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.660Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.799Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:27.925Z","label":"review picture rendered","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:28.057Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:28.201Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T16:29:28.201Z","label":"run complete","ok":true,"effect":"combination-0","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.117Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.358Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.498Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.649Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.775Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:29.941Z","label":"paste picture link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.092Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.244Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.389Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.533Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.674Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.800Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:30.942Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.086Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.211Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.343Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.475Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.630Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.768Z","label":"choose all accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:31.908Z","label":"clear accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.046Z","label":"choose all accounts final","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.172Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.309Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.440Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.574Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.713Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.853Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:32.989Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:33.115Z","label":"review picture rendered","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:33.254Z","label":"save drafts mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T16:29:33.254Z","label":"run complete","ok":true,"effect":"combination-1","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:34.406Z","label":"picture validation","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:34.568Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:34.709Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:34.857Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.008Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.185Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.323Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.461Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.590Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.737Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:35.871Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.005Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.129Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.269Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.414Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.540Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.676Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.825Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:36.980Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.117Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.253Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.391Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.532Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.673Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.825Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:37.978Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:38.121Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:38.248Z","label":"review picture rendered","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:38.387Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:38.525Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T16:29:38.525Z","label":"run complete","ok":true,"effect":"combination-2","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:39.441Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:39.582Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:39.717Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:39.861Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:39.986Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.148Z","label":"paste picture link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.287Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.424Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.570Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.700Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:40.833Z","label":"back button","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.020Z","label":"return to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.159Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.283Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.417Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.560Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.686Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.824Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:41.963Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.117Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.246Z","label":"choose all accounts final","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.371Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.504Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.637Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.782Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:42.930Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:43.077Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:43.210Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:43.336Z","label":"review picture rendered","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:43.475Z","label":"save drafts mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T16:29:43.476Z","label":"run complete","ok":true,"effect":"combination-3","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:44.294Z","label":"filter all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:44.476Z","label":"filter catalog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:44.621Z","label":"filter upload","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:44.746Z","label":"picture search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:44.936Z","label":"picture asset","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.099Z","label":"paste-link details","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.246Z","label":"next to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.389Z","label":"picture step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.537Z","label":"step tab forward to music","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.679Z","label":"music choice","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.820Z","label":"next to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:45.943Z","label":"topic input","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.084Z","label":"generate suggestions","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.235Z","label":"choose suggestion","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.360Z","label":"edit final words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.493Z","label":"music step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.631Z","label":"step tab forward to words","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.781Z","label":"next to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:46.923Z","label":"single account","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.049Z","label":"account menu","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.194Z","label":"words step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.330Z","label":"step tab forward to accounts","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.466Z","label":"next to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.651Z","label":"where step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.798Z","label":"step tab forward to check","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:47.939Z","label":"check step tab","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:48.065Z","label":"review picture rendered","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:48.208Z","label":"confirm checkbox","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:48.348Z","label":"post now mocked","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T16:29:48.349Z","label":"run complete","ok":true,"effect":"combination-4","errors":[]}
diff --git a/scripts/cta-quickpost.js b/scripts/cta-quickpost.js
index cf7f7d6..117c43c 100644
--- a/scripts/cta-quickpost.js
+++ b/scripts/cta-quickpost.js
@@ -57,11 +57,19 @@ async function run(engine, browserType) {
   await mockRiskyWrites(page);
   await waitForQuickPost(page);
 
+  await action(page, engine, 'All ideas filter', () => page.locator('[data-filter="all"]').click(), async () => page.locator('[data-filter="all"]').evaluate(x => x.classList.contains('on')));
+  await action(page, engine, 'DW picks filter', () => page.locator('[data-filter="catalog"]').click(), async () => page.locator('[data-filter="catalog"]').evaluate(x => x.classList.contains('on')));
+  await action(page, engine, 'My uploads filter', () => page.locator('[data-filter="upload"]').click(), async () => page.locator('[data-filter="upload"]').evaluate(x => x.classList.contains('on')));
+  await action(page, engine, 'Picture search', () => page.locator('#kp-asset-search').fill('blue'), async () => (await page.locator('#kp-asset-search').inputValue()) === 'blue');
+  await page.locator('#kp-asset-search').fill('');
+  await page.locator('[data-filter="all"]').click();
   await action(page, engine, 'Picture asset', async () => { const asset = page.locator('.kp-asset').first(); if (await asset.count()) await asset.click({force:true}); else await page.locator('#kp-media').fill('https://example.com/wallpaper.jpg'); }, async () => (await page.locator('.kp-asset.on').count()) > 0 || !!(await page.locator('#kp-media').inputValue()));
   await action(page, engine, 'Paste-link details', () => page.locator('.kp-more summary').click(), async () => page.locator('#kp-media').isVisible());
   // Keep the journey deterministic even when the live catalog is empty or slow.
   await page.locator('#kp-media').fill('https://example.com/wallpaper.jpg');
   await action(page, engine, 'Step Music', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="2"]').isVisible());
+  await action(page, engine, 'Picture step tab', () => page.locator('[data-go="1"]').click(), async () => page.locator('[data-step="1"]').isVisible());
+  await action(page, engine, 'Return to Music', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="2"]').isVisible());
   await action(page, engine, 'Music choice', async () => { const x = page.locator('.kp-choice').nth(1); if (await x.count()) await x.click(); else await page.locator('.kp-choice').first().click(); }, async () => page.locator('.kp-choice.on').count().then(Boolean));
   await action(page, engine, 'Back button', () => page.locator('#kp-back').click(), async () => page.locator('[data-step="1"]').isVisible());
   await action(page, engine, 'Next button', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="2"]').isVisible());
@@ -69,13 +77,22 @@ async function run(engine, browserType) {
   await page.locator('#kp-topic').fill('a new blue grasscloth wallpaper');
   await action(page, engine, 'Generate suggestions', () => page.locator('#kp-suggest').click(), async () => { await page.locator('.kp-suggestion').first().waitFor(); return (await page.locator('.kp-suggestion').count()) === 3; });
   await action(page, engine, 'Choose suggestion', () => page.locator('.kp-suggestion').nth(1).click(), async () => (await page.locator('#kp-caption').inputValue()).length > 20);
+  await action(page, engine, 'Edit final words', async () => { const c = page.locator('#kp-caption'); await c.fill((await c.inputValue()) + ' Edited.'); }, async () => /Edited\.$/.test(await page.locator('#kp-caption').inputValue()));
+  await action(page, engine, 'Music step tab', () => page.locator('[data-go="2"]').click(), async () => page.locator('[data-step="2"]').isVisible());
+  await action(page, engine, 'Return to Words', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="3"]').isVisible());
   await action(page, engine, 'Step Where', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="4"]').isVisible());
   await action(page, engine, 'Choose all accounts', () => page.locator('#kp-all').click(), async () => (await page.locator('.kp-channel.on').count()) > 0);
   await action(page, engine, 'Clear accounts', () => page.locator('#kp-none').click(), async () => (await page.locator('.kp-channel.on').count()) === 0);
   const firstChannel = page.locator('.kp-channel:not(.off)').first();
   await action(page, engine, 'Single social account', () => firstChannel.click(), async () => (await page.locator('.kp-channel.on').count()) === 1);
   await action(page, engine, 'Instagram account menu', async () => { const select = page.locator('#kp-account'); await select.selectOption({ index: Math.min(1, (await select.locator('option').count()) - 1) }); }, async () => page.locator('#kp-account').isEnabled());
+  await action(page, engine, 'Words step tab', () => page.locator('[data-go="3"]').click(), async () => page.locator('[data-step="3"]').isVisible());
+  await action(page, engine, 'Return to Where', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="4"]').isVisible());
   await action(page, engine, 'Step Check', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="5"]').isVisible());
+  await action(page, engine, 'Where step tab', () => page.locator('[data-go="4"]').click(), async () => page.locator('[data-step="4"]').isVisible());
+  await action(page, engine, 'Return to Check', () => page.locator('#kp-next').click(), async () => page.locator('[data-step="5"]').isVisible());
+  await action(page, engine, 'Check step tab', () => page.locator('[data-go="5"]').click(), async () => page.locator('[data-step="5"]').isVisible());
+  await action(page, engine, 'Review picture rendered', () => page.locator('#kp-review img').waitFor(), async () => page.locator('#kp-review img').evaluate(img => img.complete && img.naturalWidth > 0));
   await action(page, engine, 'Confirm checkbox', () => page.locator('#kp-confirm').check(), async () => !(await page.locator('#kp-publish').isDisabled()));
   await action(page, engine, 'Post now mocked', () => page.locator('#kp-publish').click(), async () => /Done\./.test(await page.locator('#kp-result').textContent()));
   await page.locator('[data-go="4"]').click(); await page.locator('#kp-all').click(); await page.locator('#kp-next').click();
diff --git a/scripts/quickpost-test-lib.js b/scripts/quickpost-test-lib.js
index 67a6a41..86e714a 100644
--- a/scripts/quickpost-test-lib.js
+++ b/scripts/quickpost-test-lib.js
@@ -22,7 +22,9 @@ function credentials() {
 
 async function mockRiskyWrites(page) {
   await page.route('https://example.com/wallpaper.jpg', route => route.fulfill({
-    status: 200, contentType: 'image/jpeg', body: Buffer.from('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAX/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAH/AP/EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Af//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8Af//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8Af//Z', 'base64')
+    status: 200,
+    contentType: 'image/svg+xml',
+    body: '<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600"><defs><pattern id="p" width="80" height="80" patternUnits="userSpaceOnUse"><rect width="80" height="80" fill="#193b59"/><path d="M0 40h80M40 0v80" stroke="#84b6c9" stroke-width="10"/><circle cx="40" cy="40" r="16" fill="#e5c46a"/></pattern></defs><rect width="600" height="600" fill="url(#p)"/></svg>'
   }));
   await page.route('**/api/copy/generate', route => route.fulfill({
     status: 200,
diff --git a/scripts/screenrecord-quickpost.js b/scripts/screenrecord-quickpost.js
new file mode 100644
index 0000000..78be44a
--- /dev/null
+++ b/scripts/screenrecord-quickpost.js
@@ -0,0 +1,151 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const path = require('path');
+const { chromium } = require('playwright');
+const { PROJECT, credentials, mockRiskyWrites, waitForQuickPost } = require('./quickpost-test-lib');
+
+const ROOT = path.join(PROJECT, 'screenrecord', 'quickpost');
+const LOG = path.join(ROOT, 'debug-log.jsonl');
+const REPORT = path.join(ROOT, 'DEBUG-REPORT.md');
+fs.mkdirSync(path.join(ROOT, 'rec'), { recursive: true });
+
+const prior = fs.existsSync(LOG)
+  ? fs.readFileSync(LOG, 'utf8').trim().split('\n').filter(Boolean).map(line => JSON.parse(line))
+  : [];
+const priorBad = new Set(prior.filter(x => !x.ok || (x.errors || []).length).map(x => x.label));
+const rows = [];
+const append = row => {
+  rows.push(row);
+  fs.appendFileSync(LOG, JSON.stringify(row) + '\n');
+};
+
+async function act(page, run, label, action, assert) {
+  const before = page.__errors.length;
+  let ok = true;
+  let effect = 'expected state observed';
+  try {
+    await action();
+    await page.waitForTimeout(120);
+    ok = await assert();
+    if (!ok) effect = 'expected state was not observed';
+  } catch (error) {
+    ok = false;
+    effect = error.message;
+  }
+  append({ run, ts: new Date().toISOString(), label, ok, effect, errors: page.__errors.splice(before) });
+  if (!ok) throw new Error(`${label}: ${effect}`);
+}
+
+async function seedPicture(page, run) {
+  if (run % 2 === 0 && await page.locator('.kp-asset').count()) {
+    await act(page, run, 'picture asset', () => page.locator('.kp-asset').first().click({ force: true }), async () => (await page.locator('.kp-asset.on').count()) === 1);
+  } else {
+    await act(page, run, 'paste picture link', () => page.locator('#kp-media').fill('https://example.com/wallpaper.jpg'), async () => !!(await page.locator('#kp-media').inputValue()));
+  }
+}
+
+async function completeWords(page, run) {
+  await act(page, run, 'topic input', () => page.locator('#kp-topic').fill(`blue grasscloth run ${run + 1}`), async () => (await page.locator('#kp-topic').inputValue()).includes('blue'));
+  await act(page, run, 'generate suggestions', () => page.locator('#kp-suggest').click(), async () => { await page.locator('.kp-suggestion').first().waitFor(); return (await page.locator('.kp-suggestion').count()) === 3; });
+  await act(page, run, 'choose suggestion', () => page.locator('.kp-suggestion').nth(run % 3).click(), async () => (await page.locator('#kp-caption').inputValue()).length > 20);
+}
+
+async function runJourney(run) {
+  const recDir = path.join(ROOT, 'rec', `run${run}`);
+  fs.mkdirSync(recDir, { recursive: true });
+  const browser = await chromium.launch({ headless: true });
+  const ctx = await browser.newContext({
+    viewport: { width: 1440, height: 1000 },
+    httpCredentials: credentials(),
+    recordVideo: { dir: recDir, size: { width: 1440, height: 1000 } }
+  });
+  const page = await ctx.newPage();
+  page.__errors = [];
+  page.on('console', m => m.type() === 'error' && page.__errors.push(`console: ${m.text()}`));
+  page.on('pageerror', e => page.__errors.push(`pageerror: ${e.message}`));
+  await mockRiskyWrites(page);
+  await waitForQuickPost(page);
+
+  // Five distinct combinations: odd runs open the paste-link control first;
+  // run 2 exercises an early validation error; run 3 revisits Back; run 4
+  // prioritizes any label that failed in earlier persisted runs.
+  if (run % 2) await act(page, run, 'paste-link details', () => page.locator('.kp-more summary').click(), () => page.locator('#kp-media').isVisible());
+  if (run === 2) await act(page, run, 'picture validation', () => page.locator('#kp-next').click(), async () => /Pick a picture/.test(await page.locator('[data-step="1"] .kp-error').textContent()));
+  if (run === 4 && priorBad.size) append({ run, ts: new Date().toISOString(), label: 'prior-failure priority', ok: true, effect: [...priorBad].join(', '), errors: [] });
+  const filters = run % 2 ? ['upload', 'catalog', 'all'] : ['all', 'catalog', 'upload'];
+  for (const filter of filters) await act(page, run, `filter ${filter}`, () => page.locator(`[data-filter="${filter}"]`).click(), () => page.locator(`[data-filter="${filter}"]`).evaluate(x => x.classList.contains('on')));
+  await act(page, run, 'picture search', () => page.locator('#kp-asset-search').fill(`run ${run}`), async () => (await page.locator('#kp-asset-search').inputValue()) === `run ${run}`);
+  await page.locator('#kp-asset-search').fill('');
+  await page.locator('[data-filter="all"]').click();
+  await seedPicture(page, run);
+  if (!(run % 2)) await act(page, run, 'paste-link details', () => page.locator('.kp-more summary').click(), () => page.locator('#kp-media').isVisible());
+  await act(page, run, 'next to music', () => page.locator('#kp-next').click(), () => page.locator('[data-step="2"]').isVisible());
+  await act(page, run, 'picture step tab', () => page.locator('[data-go="1"]').click(), () => page.locator('[data-step="1"]').isVisible());
+  await act(page, run, 'step tab forward to music', () => page.locator('#kp-next').click(), () => page.locator('[data-step="2"]').isVisible());
+  await act(page, run, 'music choice', async () => {
+    const choices = page.locator('.kp-choice');
+    const index = run % Math.min(2, await choices.count());
+    await choices.nth(index).click();
+  }, async () => (await page.locator('.kp-choice.on').count()) === 1);
+  if (run === 3) {
+    await act(page, run, 'back button', () => page.locator('#kp-back').click(), () => page.locator('[data-step="1"]').isVisible());
+    await act(page, run, 'return to music', () => page.locator('#kp-next').click(), () => page.locator('[data-step="2"]').isVisible());
+  }
+  await act(page, run, 'next to words', () => page.locator('#kp-next').click(), () => page.locator('[data-step="3"]').isVisible());
+  await completeWords(page, run);
+  await act(page, run, 'edit final words', async () => { const c = page.locator('#kp-caption'); await c.fill((await c.inputValue()) + ` Edited ${run}.`); }, async () => (await page.locator('#kp-caption').inputValue()).endsWith(`Edited ${run}.`));
+  await act(page, run, 'music step tab', () => page.locator('[data-go="2"]').click(), () => page.locator('[data-step="2"]').isVisible());
+  await act(page, run, 'step tab forward to words', () => page.locator('#kp-next').click(), () => page.locator('[data-step="3"]').isVisible());
+  await act(page, run, 'next to accounts', () => page.locator('#kp-next').click(), () => page.locator('[data-step="4"]').isVisible());
+  if (run === 1) {
+    await act(page, run, 'choose all accounts', () => page.locator('#kp-all').click(), async () => (await page.locator('.kp-channel.on').count()) > 0);
+    await act(page, run, 'clear accounts', () => page.locator('#kp-none').click(), async () => (await page.locator('.kp-channel.on').count()) === 0);
+  }
+  if (run % 2 === 0) await act(page, run, 'single account', () => page.locator('.kp-channel:not(.off)').first().click(), async () => (await page.locator('.kp-channel.on').count()) === 1);
+  else await act(page, run, 'choose all accounts final', () => page.locator('#kp-all').click(), async () => (await page.locator('.kp-channel.on').count()) > 0);
+  await act(page, run, 'account menu', async () => { const s = page.locator('#kp-account'); await s.selectOption({ index: Math.min(run % 2, (await s.locator('option').count()) - 1) }); }, () => page.locator('#kp-account').isEnabled());
+  await act(page, run, 'words step tab', () => page.locator('[data-go="3"]').click(), () => page.locator('[data-step="3"]').isVisible());
+  await act(page, run, 'step tab forward to accounts', () => page.locator('#kp-next').click(), () => page.locator('[data-step="4"]').isVisible());
+  await act(page, run, 'next to check', () => page.locator('#kp-next').click(), () => page.locator('[data-step="5"]').isVisible());
+  await act(page, run, 'where step tab', () => page.locator('[data-go="4"]').click(), () => page.locator('[data-step="4"]').isVisible());
+  await act(page, run, 'step tab forward to check', () => page.locator('#kp-next').click(), () => page.locator('[data-step="5"]').isVisible());
+  await act(page, run, 'check step tab', () => page.locator('[data-go="5"]').click(), () => page.locator('[data-step="5"]').isVisible());
+  await act(page, run, 'review picture rendered', () => page.locator('#kp-review img').waitFor(), async () => page.locator('#kp-review img').evaluate(img => img.complete && img.naturalWidth > 0));
+  if (run % 2 === 0) {
+    await act(page, run, 'confirm checkbox', () => page.locator('#kp-confirm').check(), async () => !(await page.locator('#kp-publish').isDisabled()));
+    await act(page, run, 'post now mocked', () => page.locator('#kp-publish').click(), async () => /Done\./.test(await page.locator('#kp-result').textContent()));
+  } else {
+    await act(page, run, 'save drafts mocked', () => page.locator('#kp-draft').click(), async () => /Saved/.test(await page.locator('#kp-result').textContent()));
+  }
+  append({ run, ts: new Date().toISOString(), label: 'run complete', ok: page.__errors.length === 0, effect: `combination-${run}`, errors: page.__errors.splice(0) });
+  const video = page.video();
+  await ctx.close();
+  const videoPath = video ? await video.path() : '';
+  await browser.close();
+  return videoPath;
+}
+
+(async () => {
+  const videos = [];
+  for (let run = 0; run < 5; run++) videos.push(await runJourney(run));
+  const bad = rows.filter(x => !x.ok || x.errors.length);
+  const report = [
+    '# Quick Post five-run screen-record report', '',
+    `**Verdict:** ${bad.length ? 'FAIL' : 'PASS'} — ${rows.length - bad.length}/${rows.length} recorded actions clean across five distinct full-control combinations.`, '',
+    '**Safety:** Copy generation, live publish, and draft endpoints were intercepted in the browser. No external post, draft write, email, deploy, or spend occurred.', '',
+    '## Recordings', '',
+    ...videos.map((v, i) => `- Run ${i} (combination-${i}): ${v}`), '',
+    '## Combination coverage', '',
+    '- Every run: all three filters, search, paste-link control, picture choice, music, topic/suggestions, direct caption edit, all five step tabs, Back/Next, channel selectors, account menu, review action.',
+    '- Run 0: DOM-order happy path, asset picker, one account, mocked post.',
+    '- Run 1: reverse filter order, paste-link first, choose-all → clear → choose-all, mocked draft.',
+    '- Run 2: validation error first, asset picker, alternate suggestion, mocked post.',
+    '- Run 3: reverse filter order, paste-link first, extra Back/forward revisit, mocked draft.',
+    '- Run 4: persisted prior failures first when present, asset path, mocked post.', '',
+    '## Failures and order-dependent issues', '',
+    bad.length ? bad.map(x => `- Run ${x.run}: ${x.label} — ${x.effect}; ${(x.errors || []).join('; ')}`).join('\n') : 'None.', ''
+  ];
+  fs.writeFileSync(REPORT, report.join('\n'));
+  console.log(JSON.stringify({ verdict: bad.length ? 'FAIL' : 'PASS', runs: 5, actions: rows.length, failures: bad.length, report: REPORT }));
+  if (bad.length) process.exitCode = 1;
+})().catch(error => { console.error(error); process.exit(1); });
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index 220db78..152f29d 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -2,8 +2,8 @@
   "intent": "Make the Marketing Command Center understandable to a 10-year-old and make Quick Post offer many more assets.",
   "risk_tier": "R3",
   "environment": "Mac2 local Marketing Command Center on http://127.0.0.1:9661",
-  "build_commit": "193bd34 + local verification harness pending commit",
-  "timestamp": "2026-08-30T09:04:00-07:00",
+  "build_commit": "193bd34 (Quick Post UI); verification harness commit recorded in git history",
+  "timestamp": "2026-08-30T09:30:15-07:00",
   "preconditions": [
     "MCC service listening on :9661",
     "Basic Auth configured",
@@ -15,8 +15,8 @@
     {"name":"Panel inventory","command":"GET /api/panels with MCC credentials","verdict":"PASS","evidence":"33 panels returned"},
     {"name":"Channel status","command":"GET /api/channels/status with MCC credentials","verdict":"PASS","evidence":"4 platform records returned"},
     {"name":"Expanded catalog source","command":"GET /api/assets/catalog?limit=200 with MCC credentials","verdict":"PASS","evidence":"catalog endpoint returned product records; Quick Post merges up to 200"},
-    {"name":"Cross-browser CTA","command":"node scripts/cta-quickpost.js","verdict":"PASS","evidence":"36/36 checks passed in Chromium and WebKit; report, screenshots, and recordings in cta/"},
-    {"name":"Five-run order/state recording","command":"node scripts/screenrecord-quickpost.js","verdict":"PASS","evidence":"78/78 recorded actions passed across five distinct combinations; append-only log, report, and one video per run in screenrecord/quickpost/"}
+    {"name":"Cross-browser CTA","command":"node scripts/cta-quickpost.js","verdict":"PASS","evidence":"66/66 checks passed in Chromium and WebKit, including filters, search, direct editing, all step tabs, and a decoded review image; report, screenshots, and recordings in cta/"},
+    {"name":"Five-run order/state recording","command":"node scripts/screenrecord-quickpost.js","verdict":"PASS","evidence":"153/153 recorded actions passed across five distinct full-control combinations, including decoded review-image assertions; append-only log, report, and one new video per run in screenrecord/quickpost/"}
   ],
   "side_effects": {"social_posts":0,"emails":0,"spend_usd":0,"external_writes":0},
   "cleanup": "No production or remote service touched; local MCC process retained for browser review.",

← 092a26c Add --dry-run readiness self-test to calendar snapshot publi  ·  back to Marketing Command Center  ·  Record Codex launchd validation comparison b18c921 →