Skip to content

feat(node): show traceroute request states and mark MQTT hops - #7969

Merged
jamesarich merged 2 commits into
mainfrom
feat/traceroute-request-states
Nov 8, 2026
Merged

jamesarich merged 2 commits into
mainfrom
feat/traceroute-request-states

Conversation

@jamesarich

Copy link
Copy Markdown
Collaborator

A refused traceroute read the same as an unanswered one, and the radio's 30 s limit showed only as a disabled control, so the operator met it as a failure. This covers the two Android gaps in meshtastic/design#165: requirement 10 (request states, the limit surfaced before it is hit) and requirement 12 (MQTT hops marked).

✨ Features

  • Each traceroute this app sent reads Waiting for response, its route, No Response, or Rate limited. A request with no answer after two minutes reads No Response. A routing NAK settles the state at once: RATE_LIMIT_EXCEEDED reads Rate limited, anything else No Response.
  • The cooldown ring on the traceroute buttons shows the seconds left, and the long-press menu item reads "Trace Route in N s" while the radio would refuse one.
  • A hop whose node was last heard over MQTT is marked (MQTT) in the log and in the result alert, once, even with a local display name.

🧪 Testing Performed

  • TracerouteRequestStateTest covers each state, a NAK for another request and an answer that arrives after a refusal.
  • CommonNodeRequestActionsTest checks that a rate-limit NAK is recorded against its request id.
  • RouteDiscoveryTest checks the MQTT mark, including when the long name already carries it and for an unknown hop.
  • spotlessCheck, detekt, :core:model, :core:data and :feature:node allTests, and kmpSmokeCompile pass locally with -PwarningsAsErrors=true.

Requirement 13 already holds: a hop with no reported SNR renders ?. Telling an MQTT or UDP hop's placeholder SNR from a real one needs the firmware signal in design#165's open question.

Before/After screenshots to follow.

A refused traceroute read the same as an unanswered one, and the 30 s
limit showed only as a disabled control. Requests now read waiting,
answered, no response or rate limited, the cooldown shows its seconds,
and a hop last heard over MQTT is marked (meshtastic/design#165).
@coderabbitai

coderabbitai Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 19 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 3a7198a and ab9740f.

Files selected for processing: 18

  • .skills/compose-ui/strings-index.txt
  • core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/TracerouteHandlerImpl.kt
  • core/model/src/commonMain/kotlin/org/meshtastic/core/model/RouteDiscovery.kt
  • core/model/src/commonTest/kotlin/org/meshtastic/core/model/RouteDiscoveryTest.kt
  • core/resources/src/commonMain/composeResources/values/strings.xml
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/CooldownOutlinedIconButton.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeContextMenu.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/CommonNodeRequestActions.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeRequestActions.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/RequestNakWatcher.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/MetricsViewModel.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/TracerouteChart.kt
  • feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/TracerouteLog.kt
  • feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/detail/CommonNodeRequestActionsTest.kt
  • feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/metrics/MetricsViewModelTest.kt
  • feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/metrics/TracerouteRequestStateTest.kt
  • feature/node/src/jvmTest/kotlin/org/meshtastic/feature/node/metrics/DetailDialogScrollTest.kt
  • feature/node/src/jvmTest/kotlin/org/meshtastic/feature/node/navigation/TracerouteMapRouteTest.kt
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@github-actions github-actions Bot added the enhancement New feature or request label Nov 8, 2026
@jamesarich
jamesarich marked this pull request as ready for review November 8, 2026 22:47
@jamesarich
jamesarich enabled auto-merge November 8, 2026 22:47
@jamesarich
jamesarich added this pull request to the merge queue Nov 8, 2026
Merged via the queue into main with commit dbe777b Nov 8, 2026
14 checks passed
@jamesarich
jamesarich deleted the feat/traceroute-request-states branch November 8, 2026 23:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant