fix(ax-bridge): report inactive Flutter semantics#765
Conversation
Promote exhausted DEVICE_CONTENT_ROOT_EMPTY recovery for Flutter bundle targets to FLUTTER_SEMANTICS_INACTIVE when semantics reactivation returns false, giving callers a deterministic diagnostic instead of another generic empty-tree failure. Constraint: Issue #693 still needs live release-build Flutter evidence for a true activation fix, so this PR stays within deterministic repo-testable diagnostics. Rejected: Adding speculative SpringBoard or Flutter VM-service activation changes | current issue evidence says live verification is required before changing that behavior. Confidence: high Scope-risk: narrow Directive: Only promote bundle-scoped failures; native-app empty trees without bundleId must preserve their original AX error code. Tested: npx jest --runTestsByPath tests/unit/ax-bridge-recovery.test.ts --runInBand; npx eslint --max-warnings=0 src/native/ax-bridge-recovery.ts tests/unit/ax-bridge-recovery.test.ts; npx tsc --noEmit --pretty false Not-tested: live iPhone 17 Pro release-mode Flutter app semantics activation
PR Review SummaryVerdictApprove Scope Reviewed
Blocking IssuesNone. WarningsNone. Mutation-Test Thinking
Complexity / CRAP-style Risk
Test Quality Assessment (6/7)
Security / Operational RiskNone. Diagnostic message contains bundle id already supplied by caller; no secret or external command behavior changes. Looks Good
Final RecommendationApprove. |
Ready to merge — approve summaryAll required CI checks are green on the latest commit What this PR isA deterministic, repo-testable slice of the unresolved part of #693. Issue #693 still contains one live-gated failure mode — release-build Flutter targets whose native accessibility tree never rematerialises after coordinate-space and post-tap improvements — and the issue thread explicitly cautions against speculative SpringBoard/Flutter activation changes without live release-build evidence. This PR therefore lands only the typed-diagnostic half of that scope: callers now get a stable
When any of those preconditions is missing, the original error is preserved unchanged, so native-app and non-bundle paths are completely unaffected. Scope / direction review
Why merge is OK
Verification on
|
PR #765: fix(ax-bridge): report inactive Flutter semantics
P0 — Blockers (must fix before merge)None. P1 — Must Fix (should fix in this PR)None. P2 — Improve (can be follow-up)None at the >= 60/100 confidence threshold. Per-axis findings
Test coverage delta
VerificationGitHub CI on Summary
VerdictAPPROVE. Rationale, in order of weight:
Merge NotesNo file overlap with PR #764 ( — |
Summary
FLUTTER_SEMANTICS_INACTIVEas a typed final recovery failure for Flutter bundle targets.DEVICE_CONTENT_ROOT_EMPTYrecovery only when a bundle-scoped reactivation attempt returnedfalse.Issue analysis / scope
Issue #693 still contains one unresolved, live-gated slice: release-build Flutter semantics can remain inaccessible after coordinate-space and post-tap improvements. The issue thread explicitly cautions against speculative SpringBoard/Flutter activation changes without live release-build evidence.
This PR therefore implements the deterministic, repo-testable part of that remaining scope: callers now get a stable typed diagnostic (
FLUTTER_SEMANTICS_INACTIVE) when the wrapper can prove that:false.This makes downstream handling and telemetry reliable while leaving live activation behavior for a separately evidenced follow-up.
Validation
npx jest --runTestsByPath tests/unit/ax-bridge-recovery.test.ts --runInBandnpx eslint --max-warnings=0 src/native/ax-bridge-recovery.ts tests/unit/ax-bridge-recovery.test.tsnpx tsc --noEmit --pretty falseRefs #693