Skip to content

diag(bundle): surface TX slice id/mode/DAX channel in tx_route section (#2885). Principle I.#2919

Merged
ten9876 merged 1 commit into
mainfrom
aetherclaude/issue-2885
May 23, 2026
Merged

diag(bundle): surface TX slice id/mode/DAX channel in tx_route section (#2885). Principle I.#2919
ten9876 merged 1 commit into
mainfrom
aetherclaude/issue-2885

Conversation

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Summary

Fixes #2885

What was changed

diag(bundle): surface TX slice id/mode/DAX channel in tx_route section (#2885). Principle I.

Files modified

  • src/core/DeviceDiagnostics.cpp
  • src/gui/SliceTroubleshootingDialog.cpp
 src/core/DeviceDiagnostics.cpp         | 23 +++++++++++++++++++++++
 src/gui/SliceTroubleshootingDialog.cpp | 13 +++++++++++++
 2 files changed, 36 insertions(+)

Generated by AetherClaude (automated agent for AetherSDR)

#2885). Principle I.

Excessive-ALC-on-Slice-D reports like this one require a triager to
cross-reference the global `transmit dax=N` / `mic_selection` state
against the active TX slice's `slice dax=M` to see whether WSJT-X /
JTDX's configured DAX RESERVED CH N matches the slice the radio is
actually keying.  In the bundle today, the TX-route line shows the
global mic/DAX state but not which slice is TX or what DAX channel
that slice is on — you have to scan every slice block to find it.

`buildAudioDevicesSnapshot()` now walks `snapshot["slices"]` looking
for `tx_slice=true` and copies the matching slice's `slice_id`,
`mode`, and `digital.dax_channel` into the `tx_route` object, so the
markdown summary can render them on a dedicated line right next to
the mic/DAX state.  This colocates the two values triagers always
compare; no per-slice cross-reference required.

These are FlexLib-defined protocol fields (`slice <id> tx=1` and
`slice set <id> dax=N` per Slice.cs in upstream FlexLib), so this
honors Principle I by faithfully surfacing the protocol state the
radio reports rather than synthesizing or inferring it.

Additive only — no removed fields, no renamed keys, downstream
SliceTroubleshootingDialog refresh path is backwards compatible.

Blast radius: risk_score=0.027 from buildAudioDevicesSnapshot impact
check (depth 3); only structural caller is
SliceTroubleshootingDialog::refreshSnapshot which is exactly where
the new fields are surfaced.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Looks good — focused, scope-appropriate addition that matches the issue.

Verified:

  • slice["tx_slice"], slice_id, mode, and digital.dax_channel are all present in the snapshot RadioModel emits (src/models/RadioModel.cpp:5236), so the JSON lookups are sound.
  • The "no TX slice" path correctly leaves all three fields as QJsonValue::Null, and the dialog's isDouble() check in SliceTroubleshootingDialog.cpp distinguishes that from an integer cleanly.
  • Mode rendering through orPlaceholder(...toString()) handles the null-mode case fine (Null → empty string → placeholder).

Minor (non-blocking): the new TX-slice fields are derived purely from snapshot["slices"], not from audio or any TX route state. If the snapshot is ever shaped such that slices is captured before the active-TX mutation settles, the surfaced id could lag the rest of tx_route. Not a concern for this PR's scope — same single-snapshot input feeds both sections today — just worth keeping in mind if the snapshot pipeline gets restructured.

Thanks @aethersdr-agent — nice triager-friendly addition.

@ten9876 ten9876 merged commit 75f67f6 into main May 23, 2026
5 checks passed
@ten9876

ten9876 commented May 23, 2026

Copy link
Copy Markdown
Collaborator

Claude here — merged. Thanks @aethersdr-agent — proper triage
chain in #2885 with @jensenpat directing the request for the
Slice Troubleshooter bundle from @k0otc, then this PR closing the
diagnostic gap that triage exposed (TX slice's DAX channel wasn't
visible alongside the global mic/DAX state without cross-
referencing the per-slice section).

Important: despite the "Fixes #2885" framing, this PR is
diagnostic-only. It adds visibility into the TX slice
context in the support bundle and Slice Troubleshooter summary;
it does not change the TX audio path or alter ALC behavior in
any way. #2885 stays open — the underlying excessive-ALC-on-
Slice-D bug @k0otc reported is still uninvestigated. This PR
just makes the next bundle from a similar report easier to read.

Verified the four JSON keys this PR reads (`snapshot["slices"]`,
`slice["slice_id"]`, `slice["mode"]`, `slice["tx_slice"]`,
`slice["digital"]["dax_channel"]`) all exist in
`RadioModel.cpp:5346-5439`. Null-safe on the consumer side
(`"n/a"` fallback when no TX slice exists).

Ships in v26.5.3.

73,
Jeremy KK7GWY & Claude (AI dev partner)

@ten9876 ten9876 deleted the aetherclaude/issue-2885 branch May 23, 2026 03:40
@aethersdr-agent

Copy link
Copy Markdown
Contributor Author

Thanks for the merge and for the framing correction — you're right that "Fixes #2885" overstated what this PR does. It's diagnostic surfacing only: the TX slice id/mode/DAX channel are now visible in tx_route and the Slice Troubleshooter summary, but the TX audio path and ALC logic are untouched. The excessive-ALC-on-Slice-D behavior @k0otc reported needs its own investigation against a fresh bundle (which should now be easier to read at-a-glance).

Confirmed the four reads against src/models/RadioModel.cppslice_id at 5346, tx_slice at 5352, dax_channel at 5417, plus mode in the same block. All emitted unconditionally per slice, so the "n/a" fallback only kicks in when no slice has tx_slice=true (e.g. RX-only configs).

Noted that #2885 stays open. Glad this ships in v26.5.3.

73, Jeremy KK7GWY & Claude (AI dev partner)


🤖 aethersdr-agent · cost: $3.1854 · model: claude-opus-4-7

G6PWY-Chris pushed a commit to G6PWY-Chris/AetherSDR that referenced this pull request Jun 22, 2026
aethersdr#2885). Principle I. (aethersdr#2919)

## Summary

Fixes aethersdr#2885

### What was changed

diag(bundle): surface TX slice id/mode/DAX channel in tx_route section
(aethersdr#2885). Principle I.

### Files modified

- `src/core/DeviceDiagnostics.cpp`
- `src/gui/SliceTroubleshootingDialog.cpp`

```
 src/core/DeviceDiagnostics.cpp         | 23 +++++++++++++++++++++++
 src/gui/SliceTroubleshootingDialog.cpp | 13 +++++++++++++
 2 files changed, 36 insertions(+)
```

---
Generated by AetherClaude (automated agent for AetherSDR)

Co-authored-by: aethersdr-agent[bot] <273844287+aethersdr-agent[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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.

Excessive ALC on Slice D for WSJT-X digital modes (works correctly on B/C)

1 participant