Reported issues for tapp
Pod holds 16 of 17 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to tapp.
Most discussed
tapp ci / the GitHub Action reject max-actions: 0 — there is no flows-only gate
tapp ci / the GitHub Action reject max-actions: 0 — there is no flows-only gate
Our app and site talk to the production backend. An autonomous explorer typing into forms
there creates real leads, applications and coach messages, so in CI we only want the
committed Flows replayed. Setting max-actions: "0" in the action (0.17.9) fails the gate
with ❌ --actions must be a positive integer and TAPP_OUTCOME: error.
Workaround in place: max-actions: "1", which still spends one real…
Read the thread · 2026-09-14 · closed · external user · 2 comments
open --wait-for: on timeout the screenshot path is not printed
tapp open <url> --wait-for "Text" prints 📸 Screenshot: …png when the text appears, but when it times out the only output is
❌ Timed out waiting for visible text “Session Package”
with no screenshot path and no visible-text hint — exactly the case where the screenshot matters most (0.17.10, web/headless Chromium; same for iOS open with --wait-for).
In my case the page had rendered an error state ("We couldn't load that coach's packages.") because I'd passed the wrong query…
Read the thread · 2026-09-18 · closed · external user · 1 comment
iOS flow login: surface a simulator keychain fix when Firebase reports 'An error occurred when accessing the keychain'
First run of a flow on a freshly installed simulator build (0.17.10, iPhone 17 Pro simulator, Firebase Auth email/password):
❌ 🔐 sign in — An error occurred when accessing the keychain. The NSLocalizedFailureReasonErrorKey field in the NSError.userInfo dictionary will contain more information about the error encountered
First failure: step 3 (login)
The credentials were fine; the simulator's keychain was in a bad state. Fix was
xcrun simctl keychain <udid|booted> reset
after…
Read the thread · 2026-09-18 · closed · external user · 1 comment
Flow wait_for has a fixed 6s timeout — no per-step or per-flow override
wait_for: fails after 6000 ms with 'X' never appeared within 6000ms and there is no way to give one step (or the flow) a longer budget.
Case (0.17.10, iOS simulator): after login: our coach app shows a splash while it prefetches the dashboard for up to ~8 s, so wait_for: Menu right after login failed on a healthy app. The workaround is a blind wait: 10000 before the wait_for, which either wastes time on fast runs or is still too short on slow ones. Flows on CI macOS runners are…
Read the thread · 2026-09-18 · closed · external user · 1 comment
Web tree --json omits the visible text of custom card buttons (labels, prices)
On a page whose main choices are custom card buttons, tapp tree <url> --json returns the buttons but none of their visible text, so an agent can't assert what the user sees without falling back to a screenshot.
Repro (0.17.10, macOS, headless Chromium):
tapp open "https://montrafit.com/buy-package.html?coach=victor-finjap-boston-ma&intake=off" --wait-for "Session Package"
tapp tree "https://montrafit.com/buy-package.html?coach=victor-finjap-boston-ma&intake=off" --json
- The…
Read the thread · 2026-09-18 · closed · external user · 1 comment
Gate is INCONCLUSIVE (exit 1) even when every Flow passed, because max-actions=1 can't meet the coverage floor
What happened. A workflow_dispatch run of the GitHub Action for iOS (0.17.9, max-actions: "1" because 0 is rejected, #11) replayed all five committed Flows green (9/9, 11/11, 11/11, 11/11, 15/15) and then reported:
**Gate (gate): 🟡 INCONCLUSIVE** — run was inconclusive (coverage floor not met)
##[error]Tapp gate did not pass (outcome: inconclusive).
so the job exits 1. With the exploration budget pinned at one action the coverage floor can never be met, which makes the Action…
Read the thread · 2026-09-18 · closed · external user · 1 comment
Web flow tap failure drops Playwright's 'intercepts pointer events' reason
What happened. Four of our six web Flows failed at their first tap: with only:
First failure: step 2 (tap) — locator.click: Timeout 6000ms exceeded.
The real cause was a full-screen location-consent modal overlaying the page, which intercepted the click. Playwright knows this — its own error text includes the retry log (<div id="location-intake-modal"> intercepts pointer events, "element is visible, enabled and stable", "scrolling into view", …) — but tapp's first-failure line…
Read the thread · 2026-09-18 · closed · external user · 1 comment
CLI flow run needs PyYAML on macOS runners: raw ModuleNotFoundError, no doctor check
What happened. On a GitHub macos-15 runner, tapp flow run FILE --actor client failed every iOS flow instantly with a raw Python traceback:
File ".../node_modules/@aarwitz/tapp/scripts/flow_lib.py", line 21, in load_flow
import yaml
ModuleNotFoundError: No module named 'yaml'
The app had built, the simulator had booted and installed fine. The runner's python3 has no PyYAML. The GitHub Action quietly pip3 installs pyyaml for itself (with a --break-system-packages…
Read the thread · 2026-09-18 · closed · external user · 1 comment
Most recent
CI gate replays web Flows at the gate --url, ignoring each Flow's own url
CI gate replays every web Flow at the gate's --url, ignoring the Flow's own url:
Web gate (action 0.17.9 @70c3527, url: https://montrafit.com, flows: .tapp/flows/web-*.yml).
All six Flows fail at their first step. Every failure screenshot shows the homepage, not
the page the Flow declares:
web-pricing-to-quiz(url: https://montrafit.com/pricing.html?intake=off) → screenshot is the homepage;wait_for: How Pricing Works on MONTRAnever appears. -…
Read the thread · 2026-09-14 · closed · external user · 1 comment
Web gate: the Flow started in a browser state the exploration had already changed
Web gate: the Flow started in a browser state the exploration had already changed
Web gate on 0.17.9 (url: https://montrafit.com, max-actions: 1, one web Flow). Locally the
Flow's first step wait_for: Find coaches closer to you (our location-consent prompt, shown to
every fresh browser context) passes every time. In the gate it failed with
‘Find coaches closer to you’ never appeared, right after the 1-action exploration of the
same origin.
The prompt hides itself after a dismissal…
Read the thread · 2026-09-14 · closed · external user · 1 comment
tapp ci install pins uses: aarwitz/tapp@v0.17.9, but no v0.17.9 tag exists
tapp ci install pins uses: aarwitz/tapp@v0.17.9, but no v0.17.9 tag exists
tapp ci install . --dry-run on 0.17.9 generates jobs with uses: aarwitz/tapp@v0.17.9.
The first CI run failed in "Set up job" with
Unable to resolve action aarwitz/tapp@v0.17.9, unable to find version v0.17.9 — the repo's
tags stop at v0.17.8 even though 0.17.9 is on npm and package.json on main says 0.17.9.
Workaround: pinned to the release commit sha (70c352783074934a09465ef5b804bf1a53a862ae).…
Read the thread · 2026-09-14 · closed · external user · 1 comment
Session back action reports ok without navigating (NavigationStack inside a sheet)
Session back reports ok when nothing navigated
Driving the MONTRA client app (iOS 26.5 sim, tapp 0.17.9, tapp mcp over stdio): on a pushed
screen inside a sheet (Profile → "My Plan & Billing", a NavigationStack push with a visible
Back button in the tree), tapp_session_act {action:"back"} returned
◀️ Went back — ok → now on **No active plans**
four times in a row while the screen title stayed No active plans. Every following tap on a
row of the parent screen then…
Read the thread · 2026-09-14 · closed · external user · 1 comment
Session tap by id on the Save Password system sheet reports ok without dismissing it
F6 · Session: tap by id on a system alert reports ok without effect
On the "Save Password?" springboard sheet, tapp_session_act {action:"tap", id:"Not Now"}
returned "Tapped Not Now — ok" three times while the sheet stayed up (the tree still read
Save Password?). Tapping the same button by x/y dismissed it. The id path is hitting an
element that isn't the alert's button (there's a "Not Now"-ish label under it?) — either way the
result should not be ok when the screen…
Read the thread · 2026-09-14 · closed · external user · 1 comment
Share sheet (UIActivityContentView → Reminders) scored as a high app defect; left_app detector doesn't fire for in-process system surfaces
F4 · The share sheet is still reported as a high-severity app defect (0.17.8 changelog says otherwise)
The explorer opens the client's "share" action → UIActivityContentView → taps the
Reminders extension → reports:
- 🟠
highLimited interaction surface — on Reminders - 🟡
mediumBlank or inaccessible screen — on Reminders - 🟡
mediumBlank or inaccessible screen — on UIActivityContentView
Identical on 0.17.7 and 0.17.8. The 0.17.8 changelog promises left_app…
Read the thread · 2026-09-14 · closed · external user · 1 comment
explore JSON reports credentialsProvided=false on a run that signed in with --email/--password (0.17.9)
F3 · explore JSON says no credentials were supplied on a run that signed in (regression-class honesty bug)
Run: tapp explore <bundle> --actor client --email … --password … on 0.17.8. The run reached
"Good afternoon, Taylor!" (signed-in dashboard) and explored 15 screens behind login. The JSON:
loginEncountered true
credentialsProvided false
credentialsUsed false
and the console footer still prints *"sign-in behavior (login form reached, no test credentials…
Read the thread · 2026-09-14 · closed · external user · 1 comment
Flow step vocabulary undocumented; validate accepts coordinate taps and web click that fail at runtime; assert_screen semantics
F2 · The Flow step vocabulary is undocumented and the validator doesn't enforce it (≈1 hour)
tapp flow example shows login / wait_for / assert_screen. The real vocabulary (read out
of ExplorerTests.swift) is tap, type, login, swipe, back, wait, wait_for,
assert_screen, assert_exists, assert_absent, assert_text, assert_ai. Three traps
followed directly from the gap:
assert_screencompares the detected screen title, not "text is present". The…
Read the thread · 2026-09-14 · closed · external user · 1 comment
The remaining reports are on the project's issue tracker.