3.3 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | ||
|---|---|---|---|---|---|---|---|---|
| 04-verify-actionable-error-links | Verify actionable error links | done | 4 |
|
plan.md | ../../specs/agents/requirements/agent-stall-recovery.md |
Task 04: Verify Actionable Error Links
Acceptance
- Backend tests prove the observed OpenCode route is preserved only as
remediation_url, and all rejected URL classes are omitted. - Seeded desktop E2E proves the recovery link, short sanitized message, and existing recovery actions; the no-link short-ACP fallback is covered.
- Seeded
mobile-chromeE2E proves keyboard/touch reachability, 44px controls, bounded details, and no horizontal overflow. - Tests never invoke a real quota failure, read a developer's OpenCode logs, or add a production-only test hook.
Verification
cd apps/backend && go test ./internal/agentctl/server/adapter/transport/acp ./internal/agentctl/server/api ./internal/agent/runtime/lifecycle ./internal/orchestrator -run 'Test(OpenCode|ProviderError|RecoverableFailure|RecoveryStatus)' -count=1
cd apps/web && pnpm e2e:run --no-build tests/session/provider-remediation-link.spec.ts
cd apps/web && pnpm e2e:run --no-build --project mobile-chrome tests/session/mobile-provider-remediation-link.spec.ts
cd apps/web && pnpm e2e:run --no-build tests/office/provider-remediation-link.spec.ts
Inspect the phone viewport in addition to assertions and record exact results in the plan's Verification Results section.
Files likely touched
apps/web/e2e/tests/session/provider-remediation-link.spec.tsapps/web/e2e/tests/session/mobile-provider-remediation-link.spec.ts- existing E2E page/fixture helpers only if a reusable seeded metadata path is required
- backend lifecycle/orchestrator regression tests
Dependencies and risks
Tasks 02 and 03. Seed the safe contract with a non-sensitive test workspace identifier; assert no invalid URL reaches the DOM. A seeded UI test proves rendering, not OpenCode upstream emission, so preserve the explicit external dependency in the final report.
Results
Implemented 2026-08-07.
- Desktop
tests/session/provider-remediation-link.spec.ts(3 tests): link href/target/rel + keyboard focus, sanitized message and technical details stay URL/identifier-free, existing recovery actions intact, no horizontal overflow; short-error fallback renders no link; persistent last-agent-error notice renders the link. - Mobile
tests/session/mobile-provider-remediation-link.spec.ts(mobile-chrome): 44px touch target, focus reachability, URL-free details, in-viewport actions, no horizontal overflow. - Office
tests/office/provider-remediation-link.spec.ts(2 tests): RunErrorEntry renders the link from seededlast_agent_errormetadata; invalid or absent metadata renders no link. - All seeds inject only safe
remediation_urlmetadata; no real provider, quota exhaustion, or OpenCode log access.
Verification: cd apps/backend && go test ... -run 'Test(OpenCode|ProviderError|RecoverableFailure|RecoveryStatus)' -count=1 — passed; desktop + mobile-chrome + office E2E — all passed (run via pnpm e2e:run --no-build).
External dependency preserved: OpenCode must emit action_url for the live
1.18.5 failure to show its TUI URL; Kandev shows the short error until then.