NexaFlow v3.83.0
Fixed
- Edited trigger removals now persist reliably. The automation builder waits for
its ViewModel-owned save job to finish before leaving the navigation stack.
Previously the screen could pop immediately after Save, clear the destination
ViewModel, and cancel the in-flight Room write; removed triggers could then
reappear when the task was opened again. A regression test now guards the
post-save ordering. Fixes #7.
Changed
- Trigger-match ALL mode is now a full evaluation policy, not just a
multi-trigger gate. The dedicatedTriggerMatchPolicycentralizes the
ANY/ALL combination (truth table: ANY requires at least one verifiably
satisfied condition; ALL requires every condition verifiably satisfied;
an empty condition list can never start a run under either mode), and the
execution engine routes every trigger evaluation through it. A task with a
single condition in ALL mode is now live-evaluated like any other —
the firing monitor only starts the evaluation and is never treated as
proof that its condition still holds. - Honest typed condition results for state-read adapters.
CHARGERand
AIRPLANE_MODEare classified as definitive-false-when-false state reads
(likeTIMEandDEVICE): a false answer is a verified current state and
an unreadable state surfaces asUnknown, so the ALL gate and the manual
run gate no longer over-report unverifiable conditions.
Added
- Builder advisory for event-only triggers in ALL mode. When a task set
to "all conditions" contains a momentary trigger that can never be
re-verified from device state (notification, boot, NFC tag scan, SMS,
webhook, sensor, plugin, geofence, ...), the builder shows an explicit
warning that such a condition will keep the task from running in ALL mode,
instead of failing silently at runtime. Localized across all 10 supported
languages.
Tests
- Complete ANY/ALL truth-table policy suite (17 cases) including 3-condition
combinations, the empty-condition guard, and event-only advisory
classification. - Cross-midnight time-range matrix:
22:00–07:00is satisfied at 22:30,
01:00 and 06:59 and unsatisfied at 12:00, 18:00 and 07:01, plus the
charging-at-night acceptance scenario. - Engine gate tests for ALL mode with a single condition (both the skip and
the run path) proving a firing monitor is not current truth.
Quality evidence
The tag workflow gates publication on the following automated checks. Consult the exact tag run and validation record for results; these checks do not establish physical-device coverage:
- Android Lint (zero-tolerance: UnusedResources, MissingTranslation, ExtraTranslation,
UnusedIds, CheckResult, HardcodedText, TypographyDashes) and Detekt static analysis. - Catalog parity gates: every
TriggerTypeandActionTypeenum value must exist
exactly once in the builder picker (restricted entries are pinned explicitly). - Full unit-test suite, including Room migration, scheduler, lifecycle, and recovery
regression coverage. - Release build with R8 full shrinking, APK signature verification (v2/v3 schemes and
certificate-fingerprint match against the production keystore), 16 KB page-size
alignment check, zipalign verification, bundletool AAB validation, and Gradle
dependency verification (SHA-256 checksums for every artifact). - Tag hygiene: the tag must match the newest
CHANGELOG.mdentry, so the notes below
are the actual, reviewed change record for this release.
Install
- Download
NexaFlow-<version>.apkfrom the assets below and install it. - Android updates require a compatible version code and the same signing certificate.
Back up important tasks before upgrading. - Pre-release tags (
alpha/beta/rc) are marked as pre-releases automatically.