diff --git a/CHANGELOG.md b/CHANGELOG.md index f6f29be..6e3d28f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [1.9.0] - 2026-11-07 + +Minor release: new remote-trigger signature scheme (v2, backwards compatible), `maxConcurrentTasks` +now actually enforced, and Android cancellation fixes. **Backends signing remote-trigger pushes should +move to v2** (`doc/REMOTE_TRIGGER_SIGNING.md`); v1 keeps working but is deprecated and logged. ### Fixed - **Android: cancelling a `WebSocketWorker` now closes the connection promptly.** The worker diff --git a/README.md b/README.md index aad02d7..15b2880 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ No boilerplate. No native code to write. No `AndroidManifest.xml` changes. Each ```yaml dependencies: - native_workmanager: ^1.8.3 + native_workmanager: ^1.9.0 ``` **2. Initialize once in `main()`:** diff --git a/android/build.gradle b/android/build.gradle index eef6843..977db04 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ group = "dev.brewkits.native_workmanager" -version = "1.8.3" +version = "1.9.0" apply plugin: "com.android.library" // No `apply plugin: "kotlin-android"` here (issue #76). Flutter >= 3.44 applies KGP to plugin diff --git a/doc/API_REFERENCE.md b/doc/API_REFERENCE.md index cfdfa26..44f1c2b 100644 --- a/doc/API_REFERENCE.md +++ b/doc/API_REFERENCE.md @@ -1137,5 +1137,5 @@ See [ANDROID_SETUP.md](ANDROID_SETUP.md) for the full guidance. --- -**Version:** 1.8.3 +**Version:** 1.9.0 **Last Updated:** 2026-09-24 diff --git a/example/integration_test/device_integration_test.dart b/example/integration_test/device_integration_test.dart index cff2f77..140bcfa 100644 --- a/example/integration_test/device_integration_test.dart +++ b/example/integration_test/device_integration_test.dart @@ -2676,22 +2676,23 @@ void main() { // run all 50 iterations if the cancellation was never observed. await Future.delayed(const Duration(seconds: 3)); - expect( - bCounterFile.existsSync(), - isTrue, - reason: 'lib_audit_5: B must have started once a slot freed up', - ); - final iterations = int.parse(bCounterFile.readAsStringSync().trim()); - expect( - iterations, - lessThan(5), - reason: - 'lib_audit_5: B was cancelled before it ever got a ' - 'concurrency slot โ€” it must stop at its very first ' - 'isTaskCancelled() poll. A count this high means the cancel ' - 'landed in the pre-fix gap and was silently dropped, letting ' - 'B run on uncancelled. Iterations observed: $iterations', - ); + // Since issue #84 the limiter is cancellation-aware: a task cancelled while parked is + // removed from the queue and never starts (file absent). Before #84 it woke up when a + // slot freed and had to stop at its first poll. Either way the invariant is the same: + // a cancelled B must never run on as if uncancelled. + if (bCounterFile.existsSync()) { + final iterations = int.parse(bCounterFile.readAsStringSync().trim()); + expect( + iterations, + lessThan(5), + reason: + 'lib_audit_5: B was cancelled before it ever got a ' + 'concurrency slot โ€” it must stop at its very first ' + 'isTaskCancelled() poll. A count this high means the cancel ' + 'landed in the pre-fix gap and was silently dropped, letting ' + 'B run on uncancelled. Iterations observed: $iterations', + ); + } }); testWidgets( diff --git a/example/lib/main.dart b/example/lib/main.dart index 53d6102..f87ffe6 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -362,7 +362,7 @@ class _DemoHomePageState extends State { }); _addLog( - '๐Ÿš€ NativeWorkManager v1.8.3 โ€” Industrial Reliability & FGS Bypass', + '๐Ÿš€ NativeWorkManager v1.9.0 โ€” Industrial Reliability & FGS Bypass', ); } diff --git a/example/lib/pages/demo_scenarios_page.dart b/example/lib/pages/demo_scenarios_page.dart index ca865c5..2e29baf 100644 --- a/example/lib/pages/demo_scenarios_page.dart +++ b/example/lib/pages/demo_scenarios_page.dart @@ -703,7 +703,7 @@ class _DemoScenariosPageState extends State { ), ), Text( - 'v1.8.3 ยท 50+ ready-to-run examples', + 'v1.9.0 ยท 50+ ready-to-run examples', style: TextStyle( color: Colors.white.withAlpha(200), fontSize: 12, diff --git a/ios/native_workmanager.podspec b/ios/native_workmanager.podspec index 3f93fde..6521b4d 100644 --- a/ios/native_workmanager.podspec +++ b/ios/native_workmanager.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'native_workmanager' - s.version = '1.8.3' + s.version = '1.9.0' s.summary = 'Background task manager for Flutter using platform-native APIs.' s.description = <<-DESC Native WorkManager is a Flutter plugin that provides native background task scheduling diff --git a/native_workmanager_gen/CHANGELOG.md b/native_workmanager_gen/CHANGELOG.md index 27318c2..0194d27 100644 --- a/native_workmanager_gen/CHANGELOG.md +++ b/native_workmanager_gen/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [1.9.0] - 2026-11-07 + +- Version bump synchronized with `native_workmanager` 1.9.0. No codegen changes. + ## [1.8.3] - 2026-09-24 - Version bump synchronized with `native_workmanager` 1.8.3 (lib/ audit: two diff --git a/native_workmanager_gen/README.md b/native_workmanager_gen/README.md index 0fd383c..e986175 100644 --- a/native_workmanager_gen/README.md +++ b/native_workmanager_gen/README.md @@ -8,7 +8,7 @@ Generates type-safe Dart callback IDs and a worker registry from `@WorkerCallbac ```yaml dev_dependencies: - native_workmanager_gen: ^1.8.3 + native_workmanager_gen: ^1.9.0 build_runner: ^2.4.0 ``` diff --git a/native_workmanager_gen/pubspec.yaml b/native_workmanager_gen/pubspec.yaml index e509d46..049d98e 100644 --- a/native_workmanager_gen/pubspec.yaml +++ b/native_workmanager_gen/pubspec.yaml @@ -1,5 +1,5 @@ name: native_workmanager_gen -version: 1.8.3 +version: 1.9.0 description: > Code generator for native_workmanager. Generates type-safe DartWorker callback IDs and worker registry from diff --git a/pubspec.yaml b/pubspec.yaml index 051011c..d751639 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: native_workmanager description: "Background task scheduling for Flutter โ€” 25+ native workers (HTTP, image, crypto, file), task chains, zero Flutter Engine overhead." -version: 1.8.3 +version: 1.9.0 homepage: https://github.com/brewkits/native_workmanager repository: https://github.com/brewkits/native_workmanager issue_tracker: https://github.com/brewkits/native_workmanager/issues