Skip to content

docs(reliability): state the recovery-tap and WebDriver route rules, drop a deleted retry from a guarantee - #3090

Merged
thymikee merged 2 commits into
mainfrom
docs/reliability-contract-gaps
Oct 1, 2026
Merged

thymikee merged 2 commits into
mainfrom
docs/reliability-contract-gaps

Conversation

@thymikee

@thymikee thymikee commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

Summary

Three reader-facing statements the reliability arc (#3069) left unsaid or stale, each checked against the code on main 8c0edab4c7:

  • commands.md, under error.details.dispatched: an Android command that first dismissed a blocking system dialog or an ANR prompt reports as if that dismissal had not happened (a read stays no, a mutation keeps its own verdict); the dismissal is not a dispatched step. Source: ADR 0011 ("Android ANR and blocking-dialog recovery is outside the ledger") and RUNTIME_OPERATION_EFFECTS, which the recovery taps do not pass through.
  • commands.md, same section: on a WebDriver device cloud, a driver that does not implement a route fails with error.details.reason: webdriver_route_unsupported and dispatched: no, and only a request that reads and changes nothing is ever resent. Source: webdriver-transport.ts (isUnsupportedRouteAnswer, IDEMPOTENT_METHODS, idempotent override) from fix(provider-webdriver): never resend a mutating WebDriver request #3070.
  • interaction-guarantees.ts: the TAP_OUTCOME_NOT_OBSERVED_GAP waiver still named "the no-change tap retry when the request sets interactionOutcome.retryOnNoChange", a path fix(daemon): delete the no-change interaction retry path #3083 deleted (git grep retryOnNoChange on main finds only this sentence). The clause is removed; the two remaining deferred marks are unchanged.

Part of #3069. No behavior change.

Validation

pnpm typecheck, oxfmt --check on both files, command-doc-coverage.test.ts, interaction-guarantees.test.ts and interaction-contract-coverage.test.ts pass. docs/agents stays at 39,881 bytes (the budget is 40,000; this PR does not touch it).

Review in cubic

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-10-01 11:01 UTC

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
Installed (including dependencies) 4.91 MB 4.91 MB 0 B
Package (unpacked) 4.91 MB 4.91 MB 0 B
Package (download) 1.47 MB 1.47 MB +2 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 21.0 ms 21.8 ms +0.8 ms
CLI --help 64.2 ms 65.8 ms +1.5 ms

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 2 files

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread website/docs/docs/commands.md Outdated
@thymikee

thymikee commented Oct 1, 2026

Copy link
Copy Markdown
Member Author

This PR is ready at 7901a98. CI is green with 21 checks and none failing, and there are no conflicts. The diff is docs plus one string literal in a waiver reason, so I did not run tests or trace every writer to the dispatch ledger to prove the recovery-tap path never increments it. I also did not read the exact dispatched value set on the webdriver_route_unsupported error. Not blocking: the new sentence at https://github.com/callstack/agent-device/blob/7901a98/website/docs/docs/commands.md#L501 says a sibling-route refusal carries dispatched: no, but the final COMMAND_FAILED that orientation throws when both routes are refused has no reason and no dispatched, so the router stamps it unknown. The sentence is scoped to a single request's refusal, so the docs and code agree for that case. Landing the producer fix in its own PR is fine, and you can take or leave this note here.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Oct 1, 2026
@thymikee
thymikee merged commit 7ae4c86 into main Oct 1, 2026
21 checks passed
@thymikee
thymikee deleted the docs/reliability-contract-gaps branch October 1, 2026 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant