Skip to content
This repository was archived by the owner on Oct 11, 2026. It is now read-only.

fix(web): resolve web stack review findings - #187

Merged
enaboapps merged 3 commits into
codex/web-service-discovery-182from
codex/web-review-fixes-186
Oct 9, 2026
Merged

enaboapps merged 3 commits into
codex/web-service-discovery-182from
codex/web-review-fixes-186

Conversation

@enaboapps

Copy link
Copy Markdown
Contributor

Closes #186

Summary

  • Preserve connection operation ownership across initial cleanup, so cancellation/replacement cannot reopen a picker.
  • Expose selector values and selected, disabled and busy state through browser DOM semantics without changing native state props.
  • Initialize browser device identity under a cross-tab Web Lock with bounded acquisition; retain encrypted storage format and existing identities.

Stack

Follows #185 -> #181 -> #183. This PR targets #183's branch.

Validation

  • Targeted transport, storage and actual React Native Web DOM regressions pass.
  • npm run validate running; eight existing Expo SDK patch mismatches remain a known validation blocker.
  • Independent latest-head review requested.
  • Automated tests use fake adapters, not real Bluetooth/input. No additional physical-device test claimed for this head.

No merge, release, dependency, permission or protocol changes.

@enaboapps

Copy link
Copy Markdown
Contributor Author

Validation on37ab503: version check, lint, TypeScript and all668 tests across74 suites pass. Expo Doctor20/21 fails only the eight existing SDK patch mismatches. Independent latest-head review found no actionable findings and separately ran62 focused tests successfully. CI pending; green-CI requirement not yet satisfied. Untracked capture/attachment directories preserved. No merge.

chore(deps): update Expo SDK 57 patches
@enaboapps
enaboapps marked this pull request as ready for review October 9, 2026 07:49
@enaboapps
enaboapps merged commit 95aebc8 into codex/web-service-discovery-182 Oct 9, 2026
2 checks passed
@greptile-apps

greptile-apps Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[High impact] No merge-blocking issue was identified in the reviewed changes; connection-race, rendered accessibility, and cross-tab persistence checks support merging within the exercised scope.

T-Rex evidence

Evidence from the check

  • Loads the actual transport source from the supplied commit and executes 11 fake-adapter races, testing picker cancellation and replacement-session preservation.

Evidence from the check

  • Runs the existing transport suite and the same authored harness against base and head, capturing commands, exit codes, and observed output.

Command output from the check

  • Ran the targeted WebBluetoothTransport Jest suite on head and captured 35 passing tests, showing existing transport coverage remains green.

Command output from the check

  • Executed all 11 focused races against base and captured 10 failures, showing the harness detects picker reopening and interference with replacement connections.

Command output from the check

  • Executed the identical 11 races against head and captured all passing checks, showing stale attempts cannot reopen the picker or disrupt the tested replacement flows.

▶ pr187-controls-01-before.webm

  • The flow T-Rex ran, recorded end to end.

▶ pr187-controls-02-after.webm

  • The flow T-Rex ran, recorded end to end.

Before: Pr187 Controls 01 Poster

  • What the screen looked like at this point in the check.

After: Pr187 Controls 02 Poster

  • What the screen looked like at this point in the check.

Evidence from the check

  • The executable harness invokes actual base or head identity code across browser tabs and asserts concurrency, persistence-failure, timeout, and fallback outcomes, making the checks reproducible.

Evidence from the check

  • The runner executes the same harness against both exact revisions and saves observed output with command, working directory, and exit status, preserving comparable evidence.

Command output from the check

  • Seven scenarios executed against base with exit code 0, reproducing eight divergent concurrent IDs while showing that persistence failures already rejected.

Command output from the check

  • Seven scenarios executed against head with exit code 0, showing one shared persisted ID, safe rejection of failed writes, and queued-lock rejection after 5,003 ms.

Evidence from the check

  • Executed this script to build exact base/head component versions with an isolated fixture layout and restore tracked files afterward, making the accessibility comparison reproducible.

Evidence from the check

  • Built and rendered this fixture with real application controls and delayed saved-PC data, exercising the requested semantics without hardware.

Evidence from the check

  • Executed this script against both builds to interact with controls, assert DOM semantics, capture accessibility snapshots, and record matched videos, providing reproducible observed evidence.

Command output from the check

  • Ran the authored build script for both scoped component revisions; both Expo exports completed with exit code 0.

▶ Recording of the check

  • Recorded Chromium interactions with base-version controls and live DOM attribute overlays, showing missing full accessible names and explicit selection/busy states before the change.

Base controls with observed ordinary-action and busy-state attributes

  • Captured the rendered base fixture with a live DOM overlay, showing ordinary buttons are not toggles while the busy action lacks aria-busy.

Command output from the check

  • Executed the browser verification against base components and captured attributes, accessibility snapshots, and the shared announcement limitation; the scoped run exited 0.

▶ Recording of the check

  • Recorded the same Chromium interactions with head-version controls, emphasizing full values, pressed/selected states, and PC loading semantics while ordinary actions remain non-toggles.

Head controls with observed ordinary-action and busy-state attributes

  • Captured the rendered head fixture with a live DOM overlay, showing aria-busy=true on the disabled busy action and no toggle attributes on ordinary buttons.

Command output from the check

  • Executed the browser verification against head components and captured full names, state transitions, and disabled activation checks; all scoped assertions passed with exit code 0.

Command output from the check

  • Ran the two existing targeted suites while recording Chromium; the DOM suite passed and one switcher test exceeded its 5-second timeout, prompting a bounded retry.

Command output from the check

  • Reran the same targeted suites with a 20-second test timeout; both suites and all 18 tests passed with exit code 0.

View artifacts

Summary

This PR fixes connection cancellation during initial cleanup and improves browser accessibility. It also makes first-time browser identity creation share one saved identity across tabs.

  • A cancelled connection no longer opens the Bluetooth picker.
  • Browser controls announce their current values and states.
  • Browser tabs share one saved device identity.
  • Expo packages move to newer patch versions.

No actionable issues were found in the scoped checks. The reviewed changes are safe to merge within this scope. Bluetooth checks used fake adapters; no physical-device validation is claimed.

Acknowledgment: enaboapps described eight existing Expo patch mismatches as a known validation blocker.

Reviews (1) · Last reviewed commit: "Merge pull request #189 from switchifyap..." · Reviewed by Greptile

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants