Pod

Available as Markdown and JSON. Pod is also available over MCP.

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

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:

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:

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:

Read the thread · 2026-09-14 · closed · external user · 1 comment

The remaining reports are on the project's issue tracker.