test(demo): full-text regex matches so the demo E2E flow passes (#110)

* test(demo): use full-text regex matches in demo Maestro flow

The demo flow (added in #108, non-blocking lane) rendered correctly in CI
but failed its own assertions: it matched bare substrings ('login button',
'Tests passed') against Maestro's full-text regex matcher, which needs .*…*
to match a phrase inside a longer message. A CI run confirmed the demo
screen renders (S2 screenshot shows the user message, assistant reasoning,
and tool card) — only the assertions were wrong. Exact i18n labels
(Thinking / Permission Required / Allow) already matched. Flow-only; the
app and demo feature are unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T12AhSnQVrSxNnvwfCx2z6

* test(demo): scroll to diff after expanding the tool card

CI got further with the regex fix but then failed asserting diff-view-scroll:
the confirmed cause (failure screenshot) is that the Edit card is scrolled to
the bottom of the viewport to be tapped, so its expanded diff opens below the
fold, and assertVisible does not auto-scroll. Add a scrollUntilVisible for
diff-view-scroll before the assert. Flow-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T12AhSnQVrSxNnvwfCx2z6

* test(demo): scroll to completion message before asserting it

Same below-the-fold pattern as the diff step: after approving the permission
at the bottom of the viewport, the 'Tests passed' completion renders further
down. Scroll to it before asserting. Preemptive, to avoid another CI cycle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T12AhSnQVrSxNnvwfCx2z6

---------

Co-authored-by: engineer <engineer@macbookpro.lan>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Den
2026-07-17 20:09:50 -07:00
committed by GitHub
parent 20806d41ba
commit 263ef9c4b6

View File

@@ -43,10 +43,14 @@ name: Demo mode - offline scripted walkthrough (no server, zero-server activatio
- takeScreenshot: demo-S2_demo_screen_opened
# Scripted conversation renders through the real chat components.
# Maestro `text` matches the element's FULL text as a regex, so a phrase
# taken from a longer message must be wrapped in `.*…*` (the user message is
# a full sentence, not the bare phrase). Verified against a CI run where the
# demo screen rendered correctly but this bare-substring assert failed.
- assertVisible:
id: "chat-bubble-user"
- assertVisible:
text: "login button"
text: ".*login button.*"
- assertVisible:
id: "chat-bubble-assistant"
- assertVisible:
@@ -54,14 +58,24 @@ name: Demo mode - offline scripted walkthrough (no server, zero-server activatio
- takeScreenshot: demo-S3_conversation
# Tool call card is collapsed by default (same behavior as a real session) —
# expand it to reveal the diff.
# tapping it expands the card, which renders the diff DOWNWARD below the
# header. Because the card is scrolled to near the bottom of the viewport to
# tap it, the expanded diff opens off-screen — so scroll again to bring the
# diff into view before asserting (assertVisible does not auto-scroll).
# Verified from a CI failure screenshot where the demo rendered correctly but
# diff-view-scroll sat below the fold.
- scrollUntilVisible:
element:
text: "Edit src/components/LoginButton.tsx"
text: ".*Edit src/components/LoginButton.tsx.*"
direction: DOWN
timeout: 10000
- tapOn:
text: "Edit src/components/LoginButton.tsx"
text: ".*Edit src/components/LoginButton.tsx.*"
- scrollUntilVisible:
element:
id: "diff-view-scroll"
direction: DOWN
timeout: 10000
- assertVisible:
id: "diff-view-scroll"
- takeScreenshot: demo-S4_diff_view
@@ -76,8 +90,16 @@ name: Demo mode - offline scripted walkthrough (no server, zero-server activatio
- takeScreenshot: demo-S5_permission_prompt
- tapOn:
text: "Allow"
# Approving swaps the prompt for a completion message that renders below the
# fold; scroll to it (full sentence begins "Tests passed — …", matched as a
# substring regex).
- scrollUntilVisible:
element:
text: ".*Tests passed.*"
direction: DOWN
timeout: 10000
- assertVisible:
text: "Tests passed"
text: ".*Tests passed.*"
- takeScreenshot: demo-S6_permission_approved
# Closing CTA routes to the REAL connect form, not a dead link.