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 (dev)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
762b60dc96 |
fix(#710): init flserial mutexes before the reader thread can use them
fl_open started SerialThread and only then called mtx_init. Upstream's thread locked a mutex only after its first read returned data, so the gap rarely mattered; #710's room check locks inFifo_mutex on the thread's first pass, which made the race reachable on every connect. The mutexes are now initialised right after the FlSerial is allocated, before open() can throw, so _fl_close_slot also never destroys an uninitialised mutex after a failed open. Both copies stay identical. Found by the pre-PR Gemini review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
1 month ago |
|
|
03266e709e |
fix(#710): flserial never overwrites incoming serial bytes
flserial's reader thread copied every byte into an 8 KB ring that overwrote the oldest bytes when full, and told Dart about data only once the port went idle. The RK4 sends its 350-contact list (about 52 KB) in about 0.17 s, so most of it was overwritten before the app read it: the app saw 106-154 contacts and #660's contacts were lost. The thread now reads only as much as the ring has room for. When the ring is full it leaves the bytes in the OS driver, and USB flow control holds the radio, so nothing is dropped. The ring is 256 KB (the size the header already declared as MAX_PORT_FIFO_LEN, and a power of two as the ring's mask needs); the per-read chunk stays 8 KB on the thread stack. Dart is called back during a burst (4 KB waiting or 10 ms) and whenever the ring fills, not only when the port goes idle. Same change in the macOS copy of the source (macos/Classes), which was identical. (std::min) is parenthesised because the Windows headers define a min macro. Verified on the owner's RK4 (read-only harness driving the DLL): new DLL 350/350 in every mode, including a reader 2 s late, zero bytes skipped; the old DLL, as the control, got 345 app-like and 54 (8191 bytes, the old ring's capacity) when 300 ms or 2 s late. Epic #702. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
1 month ago |
|
|
3f4bd23f08 |
chore(#709): dart format the vendored flserial Dart files for CI
Whitespace only, from dart format, so CI's repo-wide format check passes. Same step #696 took for the vendored Android BLE plugin. Epic #702. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
1 month ago |
|
|
c1ffa3302b |
chore(#709): vendor pristine flserial 4821631 into packages/flserial
Pristine import of MeshEnvy/flserial at 48216310061efc8d5d217cc18014fc2cb501646e (MIT, Grzegorz Lesniak), the exact commit the app already pinned, into packages/flserial, with the dependency switched from git to a path. Mirrors the #695/#686 vendor pattern. Vendored with git itself (fetch of that commit, read-tree --prefix), so every file is the upstream blob: all 70 files verified blob-for-blob against the commit. Left out, as #695 did: example/, .github/ and .vscode/. No behaviour change. The Windows release build compiles the plugin from the vendored path and produces a flserial.dll of the same size as the installed one. pubspec.lock also picks up flutter_blue_plus_android 8.2.2+offband.1, the version dev's own vendored package already declares. The fix for the 8 KB ring that overwrote contact-sync bytes (#704) follows in #710. Epic #702. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
1 month ago |