fix/1140-apple-app-names
main
dev
feat/1109-macos-signing
feat/2069-indicator-tags
fix/1128-channel-key-history
feat/1129-sponsor-prompt
fix/1118-factory-reset-delete-on-send
fix/1122-notify-logging
fix/1896-client-slot0-public
feat/1054-factory-reset
fix/1111-osm-identity
feat/523-land-indicators
feat/1108-macos-artifact
feat/1014-ios-app-review
feat/1013-ios-signed-lane
feat/1068-radio-channel-notify
docs/1091-epic-chain
docs/1053-play-automation
fix/1065-vercode-floors
feat/1012-ios-signing-toolchain
docs/958-ios-appstore-plan
fix/1033-scan-location-message
feat/693-offline-app-settings
fix/1009-release-linux-2404
release/1.7.0
epic/870-console-gating
feat/759-fake-radio-integration
feat/758-fake-radio-ci
feat/757-fake-radio-behaviors
feat/756-fake-radio-core
epic/870-remote-cli-permission
feat/842-sync-is-truth
feat/975-settings-restructure
feat/966-clear-stale-history
feat/965-stale-blob-sweep
docs/962-epic-chain
docs/962-reclamation-plan
fix/943-952-storage-migration
feat/940-isolation-integration
feat/939-scope-key-lifecycle
feat/938-blocked-per-radio
feat/937-storage-service-migration
feat/936-scoping-harness
docs/853-isolation-plan
fix/754-discovery-per-radio
feat/920-message-rows
chore/904-docs-proof
feat/919-blob-isolate
fix/927-ci-spike-flag
feat/917-storage-save-path
chore/904-docs-only-ci
docs/857-interop-plan
feat/844-per-radio-notify
fix/812-land-814-815-on-dev
epic/816-integration
epic/814-discover-regions
epic/813-region-protocol
epic/815-channel-scope
docs/812-region-scoping-plan
release/1.6.0
fix/793-log-composer-budget
feat/703-forced-resync
docs/755-plan-flash-fix
docs/755-fake-radio-plan
docs/750-contact-naming-plan
feat/702-lossless-serial
feat/668-contact-sync-guard
feat/610-contact-card-receive
fix/717-linux-web-mtu
feat/638-top-toast
fix/589-late-reply-log-only
fix/663-triage-internal-actors
fix/652-release-prerelease-flag
feat/619-contact-identity-uri
fix/581-ack-adoption
epic/568-export-import
fix/580-caplog-partial
release/1.5.0-beta.1
task/501-deviceui-logging
chore/542-assets2
chore/542-assets
docs/519-claudemd-web
release/1.4.0
feat/483-button-buzzer-ui
fix/497-mention-verbatim
fix/279-send-width
docs/478-docs-home-research
release/1.3.0
fix/443-battery-optimization-warning
fix/447-close-labeler
fix/445-windows-sqlite3-native-assets
feat/429-companion-sync
fix/395-dm-channel-send-wedge
feat/427-localize-log-share
feat/393-app-log-share
fix/share-icon-android
fix/389-back-nav
feat/385-storage-health
release/1.2.2
feat/367-store-consolidation
chore/365-cut-1.2.1
fix/363-pin-db-path
feat/351-contact-settings-menu
feat/349-window-geometry
feat/355-migration-merge
integration/290-306-335
release/1.1.2-rc.3-allplatforms
fix/309-path-len-decode
chore/298-path-logging
fix/285-ingest-timelog
fix/252-block-outgoing-dm
feat/64-observer-config
feat/batch1-ux
chore/offband-rebrand
v1.8.0
v1.7.0
v1.6.0
v1.5.0-beta.1
v1.4.0
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.2-rc.3-allplatforms
v1.1.2-rc.3
v1.1.2-rc.2
v1.0.0
observer-g2-rc3
observer-g2-rc4
observer-g2-rc5
observer-g2-rc6
observer-g2-rc7
observer-g2-rc8
observer-g2-rc9
preview-1.8.0-1
v1.1.0-rc.1
v1.1.0-rc.2
v1.1.0-rc.3
v1.1.2-beta.1
v1.1.2-beta.2
v1.1.2-beta.3
v1.1.2-ble-test
v1.1.2-queuediag
v1.1.2-rc.1
v1.1.2-rc.1-b45-nearbyrep
v1.1.2-rc.1-b46-pathhash
v1.1.2-rc.1-b47-tracewidth
v1.1.2-rc.1-b48-repeatertrace
v1.1.2-rc.1-b49-maptrace
v1.1.2-rc.1-b50-tracefix
v1.1.2-rc.1-b51-originstrip
v1.1.2-rc.1-b52-channelqr
v1.1.2-rc.1-b53-viarepeater
v1.1.2-rc.1-b54-rxfed
v1.1.2-rc.1-b55-topology
v1.1.2-rc.1-b57-routeux
v1.1.2-rc.1-b58-toporeadout
v1.1.2-rc.3-b59-pathlen
${ noResults }
4 Commits (43ec4d2fa3aaa36d8ea786d145268b8a2bf3f070)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
a04db40b8a |
fix(#717): apply pre-PR review, rebuild MTU subscriptions once services resolve
Gemini gate found a real defect that would have shipped: the Linux MTU stream would have attached to nothing and reported an MTU for a device never. `devicesChanged` fires only on deviceAdded / deviceRemoved. At the moment a device is added BlueZ has not finished service discovery, so `gattServices` is still empty; this plugin waits on `while (!device.servicesResolved)` elsewhere for exactly that reason. The original patch built its per-characteristic subscriptions inside that one event, found no characteristics, and had nothing to re-trigger it when discovery later completed. Verified in the vendored source, not taken on the reviewer's word. Now nested: for each device, rebuild the characteristic subscriptions on every `device.propertiesChanged`, which includes ServicesResolved flipping true. Same shape the plugin's own `_initFlutterBluePlus` already uses for its logging, so this is the file's existing idiom rather than a new one. Also emits once per rebuild (`startWith(device)`), so an MTU already negotiated before we were listening is reported rather than waiting on a change that may never arrive. Safe when unknown: 0 is filtered downstream. Two other findings reviewed and accepted as clean, recorded so they are not re-litigated: "max across characteristics" is right because the ATT MTU is per-connection, not per-characteristic; and the web exemption is sound because the browser owns fragmentation and 172 is far inside the spec's 512-byte writeValue limit. analyze clean, format clean, 981 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
1 month ago |
|
|
ce11da8295 |
fix(#717): report the negotiated MTU on Linux so the composer is usable
Upstream flutter_blue_plus_linux returns `Stream.empty()` from onMtuChanged, so no MTU ever reaches Dart on Linux. FlutterBluePlus._mtuValues stays empty, mtuNow falls back to its 23-byte ATT default forever, effectiveMaxFrameSize returns the 20-byte floor, and maxChannelMessageBytes clamps to 0. Every keystroke is then rejected by the length limiter while the field still focuses and blinks: the #592 symptom, reported on Linux as locked entry fields. BlueZ does expose the negotiated MTU, as a property on org.bluez.GattCharacteristic1, surfaced by the bluez package this plugin already depends on (BlueZGattCharacteristic.mtu). The value was one layer down the whole time and simply never read. The patch watches characteristic property changes for 'MTU' and emits a BmMtuChangedResponse carrying the largest value across the device's characteristics. They describe one ATT link so they should agree; the max stops a characteristic that has not been exercised yet, and so reports nothing, from dragging the figure down. Zero is filtered out, because FlutterBluePlus would cache it and hand callers something worse than its own default, and identical consecutive values are suppressed. Nothing downstream needed changing: the device.mtu subscription added for Windows in #686 is platform-agnostic, so Linux now gets the same live budget recovery through the same path. Also points dependency_overrides at the vendored copy. Third vendored BLE backend, alongside android (#694) and winrt (#686). Verified: analyze clean, format clean, 962 tests pass. NOT verified on Linux hardware; nobody here runs Linux BLE, which is why the gap survived this long. #717's acceptance requires a real Linux BLE connect showing a non-default `MTU now:` in the app log. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
1 month ago |
|
|
dede4d6a6a |
chore(#717): dart format the vendored Linux plugin Dart file for CI
CI runs `dart format --output=none --set-exit-if-changed .` across the whole
repo, vendored packages included, so the upstream file's own formatting fails
the analyze check. Third time: #694 hit it on the Android plugin (
|
1 month ago |
|
|
754dca86f6 |
chore(#717): vendor pristine flutter_blue_plus_linux 8.2.2
Pristine import of pub.dev flutter_blue_plus_linux-8.2.2 into packages/, mirroring the WinRT vendor from #686 and the Android vendor from #695. The patch rides on top as its own commit so the upstream baseline stays diffable. Verified against the pub cache with `diff -r --strip-trailing-cr`: all 8 files identical. FlutterBluePlus License v1.4 and the BSD NOTICE retained unchanged. No wiring yet: dependency_overrides is not pointed at this copy until the patch lands, so this commit is inert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
1 month ago |