This commit landed on main outside the PR process and pins takpacket-sdk 0.5.1, which is not yet published to Maven Central — breaking the build. Reverting to restore a green main; the fix is being re-submitted as a pull request that will merge once 0.5.1 is available on Central.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reconstructed contact endpoint (0.0.0.0:4242:tcp) made ATAK treat mesh peers as directly reachable, so directed messages (TAK-Talk <marti>, GeoChat to a callsign) were delivered to a dead address instead of the Meshtastic server stream and never hit the mesh — broadcast PLI was unaffected. Use the TAK 'reply via this server' endpoint *:-1:stcp (DEFAULT_TAK_ENDPOINT) and bump TAKPacket-SDK to 0.5.1, which fixes the same default in the SDK's CotXmlBuilder.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add Capabilities.supportsLockdown (atLeast V2_8_0) and gate the security-screen
lockdown toggle visibility on it, consistent with the other firmware-version
capability flags. SecurityConfigScreen computes Capabilities from the connected
node's firmware_version; LockdownModeSetting takes a `supported` flag.
- Reword the enable-lockdown warning: it's reversible (disable with passphrase, or
a full erase), so drop the inaccurate "permanent/irreversible" framing and the
red error styling; rename strings lockdown_irreversible_* -> lockdown_enable_*.
- Update CapabilitiesTest for the V2_8_0 floor.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The CI shard-core allTests job compiles commonTest for the iosSimulatorArm64
target, which surfaced issues the JVM-only local run missed:
- Update stale test fakes to the current interfaces: FakePassphraseStore
(maxSessionSeconds on savePassphrase) and core/takserver's FakeCommandSender /
FakeServiceRepository (lockdown send + state members). These predate this
change but only the Native test compile catches them.
- Rename the DISABLED test: Kotlin/Native rejects commas in backtick names.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Make lockdown a runtime, user-toggleable setting rather than a one-way lock:
- Thread a `disable` flag through the lockdown send path (CommandSender,
LockdownCoordinator, MeshActionHandler, RadioController, AIDL, UIViewModel)
so the app can send LockdownAuth{passphrase, disable=true} to decrypt
storage and leave lockdown.
- Add LockdownState.Disabled and map LockdownStatus.State.DISABLED; clear the
stored passphrase and session authorization when a device reports DISABLED
(or when the user disables it), so we never auto-unlock a disabled device.
- Add a "Lockdown mode" switch to the security settings screen
(LockdownModeSetting): enable from DISABLED via a set-passphrase dialog with
a one-time irreversible-SWD warning + explicit confirm; disable from UNLOCKED
via a passphrase prompt; "Lock now" and session info while unlocked. The
setting is hidden when the device never reports lockdown_status (non-capable).
- Tests for the disable round-trip and DISABLED mapping; refresh fakes/strings.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Moves core/proto to PR #927 head (c834f6b), which adds LockdownAuth.disable
and LockdownStatus.State.DISABLED on top of develop. That tree has no
meshtastic.Marti message, so the Marti prune left over from the master merge
was unused and broke generateCommonMainProtos; remove it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>