Skip to content

feat(security): add packet authenticity policy aligned with Android - #2219

Merged
garthvh merged 2 commits into
mainfrom
claude/apple-android-pr-alignment-c51c07
Aug 4, 2026
Merged

garthvh merged 2 commits into
mainfrom
claude/apple-android-pr-alignment-c51c07

Conversation

@jamesarich

@jamesarich jamesarich commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

What changed?

Adds the device-enforced packet authenticity policy from design#121 to Security settings, implemented against the merged Android/Desktop version (Meshtastic-Android#6178).

Supersedes #2066. That draft, by @RCGV1, did the groundwork this builds on — it drove protobufs#983, coordinated the cross-client contract in design#121, and established the "authenticated" rather than "signed" terminology that both clients now use. It had drifted ~100 commits behind main and conflicted, and its UI had diverged from what Android shipped, so this is a fresh implementation rather than a rebase.

  • Protobufs bumped 9d589c1 → b6ad0e5 (the merge of protobufs#983), Swift sources regenerated with the repo-pinned protoc-gen-swift 1.36.1 via scripts/gen_protos.sh. Wire contract: COMPATIBLE = 0, BALANCED = 1, STRICT = 2 on SecurityConfig.packet_signature_policy (field 9); DeviceMetadata.has_xeddsa (field 14).
  • UI matches Android: a "Protection Level" picker with a per-policy summary in a "Packet Authenticity" section, gated on the tri-state has_xeddsa capability, with a confirmation before Strict.
  • Persistence for the policy (SecurityConfigEntity.packetSignaturePolicy) and the read-only capability (DeviceMetadataEntity.hasXeddsa), including the backup import path. Both entities already live in the unreleased MeshtasticSchemaV1, so these additive properties need no new VersionedSchema/MigrationStage.
  • Copy — all ten user-facing policy labels, summaries and the Strict warning are byte-identical to Android's strings.xml, verified programmatically.

Differences from #2066

#2066 This PR
Bespoke "policy rail": segmented control with SF Symbols, per-policy tints, matchedGeometryEffect, and a drag gesture snapping to the nearest policy A plain Picker + summary, matching Android's DropDownPreference and every other picker in Settings
Its own summary and warning wording Android's exact strings
.UNRECOGNIZED absent from the picker's options Included when a device reports one, so the picker can render the policy actually in force (raised by Copilot on #2066, unaddressed)
Capability assigned inline in MeshPackets Set in DeviceMetadataEntity.update(from:), where main now centralises metadata ingestion

The rail was the main reason to redo rather than rebase: a control type used nowhere else in this app and nowhere on Android, for a setting both clients agreed to present as a dropdown.

Deliberate divergences from Android

  • Title Case for the section header and control label ("Packet Authenticity", "Protection Level"), matching the surrounding Settings sections rather than Android's sentence case.
  • Three strings with no Android counterpart: a note for the capability-not-yet-reported state, plus a label and summary for .UNRECOGNIZED. Wire generates a closed Kotlin enum so Android has no unrecognized case; SwiftProtobuf's open enum does.
  • Android shows a disabled control with no explanation when metadata is absent. This adds a short note — a bare disabled Picker in a Form reads as broken rather than not-yet-available.

Why did it change?

The policy is enforced by firmware and is already merged in protobufs, firmware (firmware#10967) and Android. Without this, iOS users on capable firmware have no way to see or change the receive policy their radio is applying, and the two apps present different contracts for the same device setting.

Compatible is the protobuf zero value, deliberately, so that an absent field means Compatible rather than silently implying a stricter policy than the radio is running. The tests pin that.

How is this tested?

xcodebuild test on iPhone 17 Pro Simulator — 42 tests in 7 suites passed.

  • MeshtasticTests/PacketAuthenticityTests.swift (32 cases): exact field-9 wire bytes per level, Compatible omitted as the zero value, an unknown level surviving a decode/encode round trip, has_xeddsa field 14, the tri-state capability, the persistence round trip through both branches of upsertSecurityConfigPacket, and the selection state machine including the disconnect/capability-loss race.
  • SwiftUIViewSnapshotTests (10 references): each policy plus the unsupported and unknown states, light and dark.
  • scripts/gen_protos.sh b6ad0e5f4e4716f50ec414cf4e28efca289cdce3 — regenerated with the pinned plugin, no generator drift.
  • bash scripts/build-docs.sh --output Meshtastic/Resources/docs — 31 pages rebuilt.
  • jq empty Localizable.xcstrings passes; the 15 new keys are a pure insertion (41 added lines, 0 deletions, no existing entry moved).

Not tested: hardware

No radio verification has been performed. The policy is enforced by firmware, so a read/write/read-back round trip against a capable device is still required before merge — the same gap #2066 carried. Opened for review so the code, wire contract, and cross-client alignment can be assessed in parallel; please treat the hardware round trip as an outstanding merge condition rather than something already covered.

Screenshots/Videos (when applicable)

Committed snapshot references, which are regression tests rather than one-off captures:

State Light Dark
Compatible (default) packetAuthenticity_compatible_light.png packetAuthenticity_compatible_dark.png
Balanced packetAuthenticity_balanced_light.png packetAuthenticity_balanced_dark.png
Strict packetAuthenticity_strict_light.png packetAuthenticity_strict_dark.png
Unsupported firmware packetAuthenticity_unsupported_light.png packetAuthenticity_unsupported_dark.png
Capability not reported packetAuthenticity_unknown_light.png packetAuthenticity_unknown_dark.png

All under MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/. The Strict confirmation is an .alert, which a windowless host does not render, so it is covered by the state-machine tests instead.

Conventions and constitution

Audited against .specify/memory/constitution.md, .github/copilot-instructions.md, the surrounding code, and design standards v1.4:

  • II / V — file placement. The entity accessor is in Extensions/SwiftData/SecurityConfigEntityExtension.swift and the protobuf display accessors in Extensions/Protobufs/Config+PacketSignaturePolicy.swift. (The constitution names Extensions/CoreData/, which the repo has since renamed to SwiftData/; Extensions/Protobufs/ is new, created as the constitution specifies.)
  • VI — lint-clean. SwiftLint reports 0 violations in the four touched Swift files. Adding to SecurityConfig had pushed it from 400 to 410 lines and tripped type_body_length, so its packet-authenticity wiring lives in an extension. The pre-commit hook from scripts/setup-hooks.sh is installed and ran on this commit.
  • VIII / design standards §7.7. The unavailable-capability note uses .orange, which Extensions/Color+Brand.swift shadows to the Meshtastic Warning token #E8A33E, and matches the existing admin-key warning in the same screen.
  • Picker idiom. Binding the protobuf enum directly with id: \.rawValue follows the existing Team / MemberRole pickers in TAKServerConfig.swift. Most config pickers instead wrap the value in a local enum under Meshtastic/Enums/; that pattern cannot represent an unrecognized value, which is the case this setting has to preserve.
  • Testing. Swift Testing only — @Suite, @Test, #expect, #require. No XCTest.
  • Snapshots. Per the workflow rule, the initial recordings were deleted and re-recorded on a clean run; the re-recorded PNGs are byte-identical, so the references are reproducible.
  • Documentation. docs/user/whats-new.md gains a Jul 2026 entry and the bundled HTML was rebuilt.
  • XcodeGen. Meshtastic/Extensions, Meshtastic/Views and MeshtasticTests are syncedFolder targets, so the new files and the new Protobufs/ directory need no project.pbxproj change.

Open question for review

Android shows this control disabled with an explanation when a radio has not reported XEdDSA support, and this PR follows that. The alternative, which design standards v1.4 ("Null Data Suppression") and the neighbouring LockdownSection would both suggest, is to hide the section outright on firmware that cannot use it. I kept the Android behaviour because packet authenticity is a mainstream feature rolling out with new firmware, where "update your firmware" is actionable, whereas lockdown is a niche hardened build. Happy to switch if reviewers prefer suppression.

Incidental protobuf churn

b6ad0e5 is the earliest commit carrying the packet-signature schema, so this is the minimum bump available. It also pulls the commits between it and the old pin: interdevice SD-card commands, the HM330X telemetry sensor, the FAB firmware edition, and an EU_868 deprecation comment. All purely additive — no removed or renamed cases.

Checklist

  • My code adheres to the project's coding and style guidelines.
  • I have conducted a self-review of my code.
  • I have commented my code, particularly in complex areas.
  • I have verified whether these changes require updates to the in-app documentation under docs/user/ or docs/developer/, and updated accordingly — docs/user/settings.md gains a Packet Authenticity section and the bundled docs were rebuilt.
  • I have tested the change to ensure that it works as intended. — automated coverage passes; hardware round trip outstanding, see above.

Closes #2065.

Summary by CodeRabbit

  • New Features
    • Added Security → Packet Authenticity with Compatible, Balanced, and Strict protection levels, including clear messaging for unsupported/unknown capability and policy states.
    • Strict now uses a confirmation step and remains consistent across reloads and restores/backups (radio-enforced).
  • Bug Fixes
    • Packet authenticity protection level is now correctly persisted and updated, including restoring XEdDSA capability.
  • Documentation
    • Updated Settings and “What’s New” pages with firmware/capability requirements and Strict-mode limitations.

Copilot AI review requested due to automatic review settings July 28, 2026 15:20
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e900589-fd15-45ed-9a0e-238230f0d0e5

📥 Commits

Reviewing files that changed from the base of the PR and between c09cb67 and 76a9408.

📒 Files selected for processing (7)
  • Meshtastic/Resources/docs/developer/swiftdata.html
  • Meshtastic/Resources/docs/developer/whats-new.html
  • Meshtastic/Resources/docs/index.json
  • Meshtastic/Resources/docs/markdown/developer/swiftdata.md
  • Meshtastic/Resources/docs/markdown/developer/whats-new.md
  • docs/developer/swiftdata.md
  • docs/developer/whats-new.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • Meshtastic/Resources/docs/developer/whats-new.html
  • Meshtastic/Resources/docs/markdown/developer/whats-new.md
  • Meshtastic/Resources/docs/markdown/developer/swiftdata.md
  • Meshtastic/Resources/docs/developer/swiftdata.html
  • docs/developer/whats-new.md
  • docs/developer/swiftdata.md
  • Meshtastic/Resources/docs/index.json

📝 Walkthrough

Walkthrough

The PR adds packet authenticity policy support across protobufs, persistence, security settings UI, localization, documentation, and tests. It also regenerates interdevice protocol bindings and adds firmware and telemetry enum values.

Changes

Packet authenticity policy

Layer / File(s) Summary
Policy and capability contracts
MeshtasticProtobufs/Sources/meshtastic/config.pb.swift, MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
Adds policy values, XEdDSA capability data, and protobuf serialization support.
Persistence and ingestion
Meshtastic/Model/..., Meshtastic/Extensions/SwiftData/..., Meshtastic/Persistence/...
Stores and restores policy and capability values across ingestion and backups.
Security settings UI
Meshtastic/Extensions/Protobufs/..., Meshtastic/Views/Settings/Config/*, Localizable.xcstrings
Adds localized policy selection, capability gating, and Strict confirmation.
Validation and documentation
MeshtasticTests/..., Meshtastic/Resources/docs/..., docs/...
Adds wire, persistence, state, picker, snapshot, and documentation coverage. Updates navigation metadata.

Generated protocol refresh

Layer / File(s) Summary
Interdevice protocol regeneration
protobufs, MeshtasticProtobufs/Sources/meshtastic/interdevice.pb.swift
Regenerates interdevice types and oneof encoding for I2C, file, SD, ping, pong, and related variants.
Generated enum updates
MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift, MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift
Adds FAB firmware and HM330X telemetry mappings.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

Possibly related PRs

Suggested reviewers: copilot, garthvh

Poem

A rabbit sees three paths in flight,
Compatible, Balanced, Strict in sight.
XEdDSA hops through every node,
While SwiftData guards the load.
“Confirm Strict!” the hare sings bright—
New protocol wings take flight.

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The implementation mostly matches #2065, but it treats the protobuf zero/default as Compatible instead of rendering the default as Balanced. Align the default handling with the issue’s Balanced default requirement, or update the issue if Compatible-as-zero is the intended contract.
Out of Scope Changes check ⚠️ Warning The protobuf bump also adds unrelated interdevice, telemetry, and FAB schema changes that are not required for packet authenticity. Split the unrelated regenerated protobuf/doc churn into a separate PR or justify why each additive schema change is necessary here.
Docstring Coverage ⚠️ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and directly describes the main change: adding packet authenticity policy aligned with Android.
Description check ✅ Passed The description follows the template and covers what changed, why, testing, screenshots, and the checklist with enough detail.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Re-implements the device-enforced packet authenticity policy from design#121
against the merged Android implementation (Meshtastic-Android#6178), replacing
the stale #2066 draft.

Bumps the protobufs submodule 9d589c1 -> b6ad0e5 (the merge of protobufs#983)
and regenerates the Swift sources with the repo-pinned protoc-gen-swift 1.36.1.
b6ad0e5 is the earliest commit carrying the schema, so the incidental additive
churn (interdevice SD-card commands, HM330X sensor, FAB edition, an EU_868
deprecation comment) is the minimum available.

Presents the three levels as a picker with a per-policy summary, gated on the
tri-state DeviceMetadata.has_xeddsa capability, and confirms before Strict.
This drops #2066's bespoke drag-gesture "policy rail" — a control type used
nowhere else in the app and nowhere on Android — in favour of the dropdown both
clients agreed to present. Binding the protobuf enum directly follows the
existing Team/MemberRole pickers in TAKServerConfig. All ten user-facing policy
labels, summaries and the Strict warning are byte-identical to Android's
strings.xml.

Persists the policy and the read-only capability. Both entities already live in
the unreleased MeshtasticSchemaV1, so these additive properties need no new
VersionedSchema or MigrationStage. The policy is always written back on save so
a level set by newer firmware round-trips instead of being reset to Compatible,
and .UNRECOGNIZED is included in the picker's options when a device reports one
so the control can render the policy actually in force.

Per the constitution, the entity accessor lives in Extensions/SwiftData/ and the
protobuf display accessors in Extensions/Protobufs/. The SecurityConfig wiring
sits in an extension because that struct was already at SwiftLint's
type_body_length ceiling.

No hardware verification: the policy is enforced by firmware, so a
read/write/read-back round trip against a capable radio is still required.

Closes #2065.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jamesarich
jamesarich force-pushed the claude/apple-android-pr-alignment-c51c07 branch from 2d4cbac to eba2406 Compare July 28, 2026 15:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Adds a new firmware-enforced Packet Authenticity (“packet signature policy”) setting to iOS Security settings, aligned with the merged Android/Desktop behavior and wire contract.

Changes:

  • Bumps protobufs and regenerates SwiftProtobuf sources to include SecurityConfig.packet_signature_policy and DeviceMetadata.has_xeddsa.
  • Adds SwiftUI UI + state machine for selecting Compatible/Balanced/Strict (with Strict confirmation), gated by tri-state XEdDSA capability.
  • Persists policy + capability in SwiftData and backup import paths; adds unit + snapshot tests and updates bundled docs.

Reviewed changes

Copilot reviewed 23 out of 33 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
protobufs Updates protobuf submodule pin to bring in packet authenticity schema and related additions.
docs/user/whats-new.md Documents the new Packet Authenticity setting in release notes.
docs/user/settings.md Adds user documentation for Protection Level behavior and implications.
MeshtasticTests/SwiftUIViewSnapshotTests.swift Adds snapshot coverage for the Packet Authenticity section across states and themes.
MeshtasticTests/PacketAuthenticityTests.swift Adds wire-contract, persistence, ingestion, and selection state-machine tests.
MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift Regenerated protobuf output (adds telemetry enum case).
MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift Regenerated protobuf output (adds firmware edition + has_xeddsa).
MeshtasticProtobufs/Sources/meshtastic/interdevice.pb.swift Regenerated protobuf output (interdevice protocol expansion).
MeshtasticProtobufs/Sources/meshtastic/config.pb.swift Regenerated protobuf output (adds packet_signature_policy field + enum).
Meshtastic/Views/Settings/Config/SecurityConfig.swift Wires packet authenticity section into Security config UI and write-back.
Meshtastic/Views/Settings/Config/PacketAuthenticity.swift Implements capability tri-state, selection state machine, and the SwiftUI section UI.
Meshtastic/Resources/docs/user/whats-new.html Rebuilt bundled HTML docs including the new release note entry.
Meshtastic/Resources/docs/user/settings.html Rebuilt bundled HTML docs including Packet Authenticity section.
Meshtastic/Resources/docs/markdown/user/whats-new.md Rebuilt bundled markdown docs including the new release note entry.
Meshtastic/Resources/docs/markdown/user/settings.md Rebuilt bundled markdown docs including Packet Authenticity section.
Meshtastic/Resources/docs/index.json Rebuilt docs search index to include new content/keywords.
Meshtastic/Persistence/UpdateSwiftData.swift Persists packet signature policy on SecurityConfig upsert (insert + update paths).
Meshtastic/Persistence/NodeBackupManager+Import.swift Imports the hasXeddsa capability as part of node backup restore.
Meshtastic/Model/DeviceMetadataEntity.swift Persists hasXeddsa and copies it during metadata ingestion.
Meshtastic/Model/ConfigModels.swift Adds SwiftData storage for SecurityConfigEntity.packetSignaturePolicy.
Meshtastic/Extensions/SwiftData/SecurityConfigEntityExtension.swift Adds decoding helper back into the protobuf enum, preserving unknown values.
Meshtastic/Extensions/Protobufs/Config+PacketSignaturePolicy.swift Adds localized titles/descriptions and picker option helpers for the policy enum.
Localizable.xcstrings Adds new localization keys for policy titles/descriptions and Strict confirmation copy.
Comments suppressed due to low confidence (3)

docs/user/settings.md:1

  • The table has an extra leading | on every row (|| ...), which creates an unintended empty first column in standard Markdown renderers (e.g. GitHub). Update the table rows to use a single leading pipe (| Level | Behavior |, etc.) so the docs render consistently.
    Localizable.xcstrings:1
  • These new user-facing strings have no translator comment, unlike the rest of the new Packet Authenticity strings. Add brief comment fields (e.g., “Security section header for packet authenticity policy” / “Label for packet authenticity policy picker”) to improve translation quality and consistency.
    Localizable.xcstrings:1
  • These new user-facing strings have no translator comment, unlike the rest of the new Packet Authenticity strings. Add brief comment fields (e.g., “Security section header for packet authenticity policy” / “Label for packet authenticity policy picker”) to improve translation quality and consistency.

Comment thread Meshtastic/Views/Settings/Config/PacketAuthenticity.swift Outdated
Comment thread Meshtastic/Views/Settings/Config/PacketAuthenticity.swift Outdated
Comment thread Meshtastic/Resources/docs/markdown/user/settings.md
Copilot AI review requested due to automatic review settings July 28, 2026 15:37
@jamesarich
jamesarich marked this pull request as ready for review July 28, 2026 15:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 23 out of 33 changed files in this pull request and generated no new comments.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
Meshtastic/Model/ConfigModels.swift (1)

342-344: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider documenting the new persisted attribute.

SecurityConfigEntity gains a persisted property, but the PR's doc changes appear limited to docs/user/*. Add a note in docs/developer/swiftdata.md (and regenerate bundled HTML) if the schema doc enumerates entity attributes.

As per path instructions: "Update docs/developer/swiftdata.md or docs/developer/architecture.md when model code changes affect persistence or architecture."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Meshtastic/Model/ConfigModels.swift` around lines 342 - 344, Document the new
persisted SecurityConfigEntity attribute packetSignaturePolicy in
docs/developer/swiftdata.md, following the existing entity-attribute format;
regenerate the bundled HTML documentation if that file is generated from the
Markdown source.

Source: Path instructions

Meshtastic/Model/DeviceMetadataEntity.swift (1)

21-23: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Update docs/developer/swiftdata.md for the new persisted field.

hasXeddsa is a new stored property on the DeviceMetadataEntity SwiftData model, gating the Packet Authenticity selector downstream. No update to docs/developer/swiftdata.md (or architecture.md) is included in this PR's file set.

As per coding guidelines, "Meshtastic/Model/**/*.swift: Update docs/developer/swiftdata.md or docs/developer/architecture.md when model code changes affect persistence or architecture."

Also applies to: 40-40

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Meshtastic/Model/DeviceMetadataEntity.swift` around lines 21 - 23, Update the
SwiftData documentation in docs/developer/swiftdata.md to document
DeviceMetadataEntity.hasXeddsa as a persisted read-only capability field and
explain its role in gating the Packet Authenticity policy selector. Follow the
existing model documentation conventions and include the corresponding
architecture documentation only if required by those conventions.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Localizable.xcstrings`:
- Around line 14588-14590: Update the packet-authenticity labels in
Localizable.xcstrings at lines 14588-14590 and 92641-92643: change “Balanced —
Prefer authenticated” to “Balanced — Prefer signed” and “Strict — Require
authenticated” to “Strict — Require signed,” preserving the existing
localization entries.

---

Nitpick comments:
In `@Meshtastic/Model/ConfigModels.swift`:
- Around line 342-344: Document the new persisted SecurityConfigEntity attribute
packetSignaturePolicy in docs/developer/swiftdata.md, following the existing
entity-attribute format; regenerate the bundled HTML documentation if that file
is generated from the Markdown source.

In `@Meshtastic/Model/DeviceMetadataEntity.swift`:
- Around line 21-23: Update the SwiftData documentation in
docs/developer/swiftdata.md to document DeviceMetadataEntity.hasXeddsa as a
persisted read-only capability field and explain its role in gating the Packet
Authenticity policy selector. Follow the existing model documentation
conventions and include the corresponding architecture documentation only if
required by those conventions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 20d2e09e-6d3b-44b6-ab13-8d59b61bb4ba

📥 Commits

Reviewing files that changed from the base of the PR and between de26cc4 and eba2406.

⛔ Files ignored due to path filters (10)
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_balanced_dark.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_balanced_light.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_compatible_dark.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_compatible_light.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_strict_dark.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_strict_light.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_unknown_dark.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_unknown_light.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_unsupported_dark.png is excluded by !**/*.png
  • MeshtasticTests/__Snapshots__/SwiftUIViewSnapshotTests/packetAuthenticity_unsupported_light.png is excluded by !**/*.png
📒 Files selected for processing (23)
  • Localizable.xcstrings
  • Meshtastic/Extensions/Protobufs/Config+PacketSignaturePolicy.swift
  • Meshtastic/Extensions/SwiftData/SecurityConfigEntityExtension.swift
  • Meshtastic/Model/ConfigModels.swift
  • Meshtastic/Model/DeviceMetadataEntity.swift
  • Meshtastic/Persistence/NodeBackupManager+Import.swift
  • Meshtastic/Persistence/UpdateSwiftData.swift
  • Meshtastic/Resources/docs/index.json
  • Meshtastic/Resources/docs/markdown/user/settings.md
  • Meshtastic/Resources/docs/markdown/user/whats-new.md
  • Meshtastic/Resources/docs/user/settings.html
  • Meshtastic/Resources/docs/user/whats-new.html
  • Meshtastic/Views/Settings/Config/PacketAuthenticity.swift
  • Meshtastic/Views/Settings/Config/SecurityConfig.swift
  • MeshtasticProtobufs/Sources/meshtastic/config.pb.swift
  • MeshtasticProtobufs/Sources/meshtastic/interdevice.pb.swift
  • MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
  • MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift
  • MeshtasticTests/PacketAuthenticityTests.swift
  • MeshtasticTests/SwiftUIViewSnapshotTests.swift
  • docs/user/settings.md
  • docs/user/whats-new.md
  • protobufs

Comment thread Localizable.xcstrings
Copilot AI review requested due to automatic review settings July 28, 2026 15:58
The path instructions map Meshtastic/Model/ changes to docs/developer/swiftdata.md
or architecture.md, which the previous commit missed while updating only the user
guide. Documents both additive V1 properties alongside the existing TelemetryEntity
particulate-field example, notes why an added property's default must match what an
absent value means on the wire, and adds the developer What's New entry for the
protobuf bump.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jamesarich
jamesarich force-pushed the claude/apple-android-pr-alignment-c51c07 branch from c09cb67 to 76a9408 Compare July 28, 2026 16:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 39 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 28, 2026 16:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 39 changed files in this pull request and generated no new comments.

@garthvh
garthvh merged commit c9c7143 into main Aug 4, 2026
7 of 8 checks passed
@garthvh
garthvh deleted the claude/apple-android-pr-alignment-c51c07 branch August 4, 2026 05:19
garthvh added a commit to bruschill/Meshtastic-Apple that referenced this pull request Aug 11, 2026
…g title

Exporting omitted SecurityConfig.packet_signature_policy (added on main in
meshtastic#2219 after this branch's last update), so every iOS-exported profile carried
Compatible and importing it back silently downgraded a Balanced/Strict radio.
The verifier compares through the same entity->proto converter, so it also
reported a false mismatch after importing a profile with a non-default policy.
One-line converter fix covers export and verification; imports of foreign
profiles already passed the decoded proto through unchanged. Tests cover the
three known policies and an unrecognized future value.

Also shortens the import warning callout title per review.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[2.8.0] Configure packet authenticity policy

4 participants