NexaFlow v3.77.0
Added
- Capability-Adaptive Execution layer (Phase A) — a single semantic decision
point for device-state operations, replacing per-handler privilege guessing:
OperationRegistrydeclares typedOperationSpeccontracts and
CapabilityRouterselects the best available strategy per device.- 24 paired semantic operations across connectivity, display and audio
interruption (WIFI_GET_STATE/WIFI_SET_STATE,BLUETOOTH_*,
MOBILE_DATA_*,HOTSPOT_*,NFC_*,LOCATION_*,AIRPLANE_MODE_*,
ROTATION_*,BRIGHTNESS_GET/BRIGHTNESS_SET,SCREEN_TIMEOUT_*,
DND_*,DATA_SAVER_*), each with typed parameter schemas, risk,
idempotency, retry-safety, verification and compensation contracts. CapabilityRouterpicks the least-privileged available strategy using
explainable candidates — live availability, verified per-device evidence,
strategy health with bounded cooldowns, and explicit user policy — rather
than static privilege scores. Root is never chosen merely because it is
available.CapabilityEvidenceStoreandStrategyHealthTrackerrecord
verified successes, failures, latency and cooldowns per (operation,
strategy, device fingerprint).EnvironmentInvalidatorapplies targeted
invalidation from environment events: a Shizuku binder death invalidates
only Shizuku evidence, never a full rescan.- Honest
UNKNOWNoutcome: a transport timeout after a possible side
effect is reconciled by reading the actual device state through the
operation's paired GET instead of being reported as a definite failure or
retried blindly. Exactly one execution, then observation. - Strategies shipped:
AndroidApiStateStrategy(public framework APIs
only, with correct API-level guards),RootTypedStrategy(exclusively
through two new closedPrivilegedOperationshapes,SetServiceStateand
ReadSettingState— no workflow-supplied shell text), and
SettingsUserActionStrategy(truthfulPENDING_USER_ACTION, never fake
success). Shizuku typed, device-owner and OEM strategies are declared in
the contract but not selected until implemented. - Routing migration:
SYSTEM_WIFI,SYSTEM_BLUETOOTH,SYSTEM_LOCATION,
SYSTEM_AIRPLANE_MODE,SYSTEM_SCREEN_ROTATION,SYSTEM_BRIGHTNESS,
SYSTEM_SCREEN_TIMEOUT,SYSTEM_DND,SYSTEM_NFC,SYSTEM_HOTSPOT,
SYSTEM_MOBILE_DATAandSYSTEM_DATA_SAVERnow route through the unified
path first and fall back to their reviewed legacy handlers when the
operation is unsupported, so existing automations keep working unchanged. - Registry parity gates: every operation must name at least one shipped
strategy, every write operation must have a readable counterpart, writes
require verification, and no operation may be reachable only through
privileged strategies.
- 24 paired semantic operations across connectivity, display and audio
- Typed
PrivilegedOperationadditions (append-only wire contract):
SetServiceState(closedsvcradio services) andReadSettingState
(allowlisted reconciliation reads) keep the AIDL boundary free of free-form
shell input. - Documentation: new capability-adaptive-execution contract; README,
ARCHITECTURE and CAPABILITY_CATALOG updated to describe the unified decision
path truthfully.
Tests
CapabilityRouterTest(11 cases): least-privilege preference, privileged
opt-in gating, transport-only fallback,UNKNOWNreconciliation for both
matching and contradicting read-back, evidence recording, health-cooldown
deprioritization, unregistered-operation and missing-parameter rejection.SemanticActionMapperTest(7 cases): strict typed parsing — legacy toggles
keep their documented default only for pre-configVersionautomations,
unparseable booleans are rejected instead of defaulted, and every migrated
action type maps to its semantic operation.OperationRegistryParityTest(5 cases): the registry gates listed above.- Full module suites pass: 807 unit tests across
domain,core:execution
andcore:rom-integrationwith zero failures; Detekt, Lint and
assembleDebugare green.
Changed
CapabilityActionMapperprivileged-backend resolution and the legacy
handler paths remain in place for unmigrated actions;SystemControlleris
no longer on the execution path of migrated device-state operations.
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.