Skip to content

Release: develop -> main#21

Merged
TaprootFreak merged 1 commit into
mainfrom
develop
May 18, 2026
Merged

Release: develop -> main#21
TaprootFreak merged 1 commit into
mainfrom
develop

Conversation

@github-actions

Copy link
Copy Markdown

Automatic Release PR

This PR was automatically created after changes were pushed to develop.

Commits: 1 new commit(s)

Checklist

  • Review all changes
  • Verify CI passes
  • Approve and merge when ready for production

* test: add generic BitBox hardware simulation coverage

* test: add reusable BitBox Flutter testkit

* test: align full BitBox test gate

* maintainer-edit: keep BLE packet dedup, narrow regression test to timeout

This branch originally removed the iOS BLE per-packet dedup (Bluetooth.swift
seenPackets set + contains-before-reset ordering) and replaced the protection
with a comment-level contract that "the BLE bridge must keep request
boundaries clean". The change reverses PR #15 (merged 2026-05-15, same day)
which itself was a targeted fix to the dedup ordering.

No rationale was provided in the PR description for why dedup is now
unsafe/unnecessary, and the maintainer review pointed out that:

  * BLE/CoreBluetooth can deliver indications twice under poor RF conditions
  * U2FHID readFrame() has no SEQ validation
  * TestReadFrame_DuplicateContFrame_DesyncsFollowingMessage already
    demonstrates that a duplicated cont frame desyncs the next message
  * Buffer-clear between requests doesn't protect against duplicates
    arriving inside a single request-response cycle (which is the realistic
    failure mode under weak BLE)

Pending an explicit rationale, keep the dedup. Maintainer-edit applied
because the upstream author is unavailable.

Reverted to develop state:
  - ios/Classes/Bluetooth.swift (dedup logic restored)
  - go/u2fhid/dedup_logic_test.go (algorithm regression test restored)
  - go/u2fhid/u2fhid_dedup_test.go (comments restored)

Narrowed:
  - go/api/ios_bluetooth_regression_test.go now only guards the 60s read
    timeout (the uncontroversial fix), no longer forbids dedup patterns.

The rest of the PR (Flutter testkit, Go fake-device harness, interface
refactor, TESTING.md) is kept intact — that's all additive testing
infrastructure and the actual value of this PR.

* docs(testing): align "Fast PR gate" with actual CI workflow

TESTING.md listed only `flutter analyze` + `flutter test` + `go test ./...`
as the fast gate. The PR-checks workflow also runs `dart format
--set-exit-if-changed` over lib + test + example and `go vet` + `go test
-race -timeout 60s`. Without those, contributors run a green local check
and still hit CI failures.

Reproduce-CI-locally now reads exactly what `pull-request.yaml` runs.

---------

Co-authored-by: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com>
@TaprootFreak TaprootFreak merged commit ebe0fb0 into main May 18, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants