Model review audits
Leaderboard / P25 firmware review

UNIONALPHA

Stealth model Rank 2 of 2 Graded 16 Sep 2026 DM-1701 · HR-C6000 · AT1846S · STM32F405 · P25
Overall grade
F D C B A C− 65 / 100

Accurate to the line number. Silent on what stops the radio decoding.

Everything UNIONALPHA checked, it checked well. Its line references, test results, byte counts and reproductions all hold up. The problem is what it chose to check. Its four “confirmed findings” cover a diagnostic export, a Python parser, a telemetry counter and the linker map, and all four already sat, in the same order, in the repository’s Sep 10 review. None of them explains why the radio would fail to decode P25.

The configuration that most plausibly does is never mentioned. For a P25 session the monitor switches the receiver into analog FM mode: the AT1846S high- and low-pass filters on, low-frequency audio blocked, 25 kHz channel bandwidth, and HR-C6000 de-emphasis enabled. Modelled through the firmware’s demodulator, any audio high-pass at 75 Hz or above leaves zero decodable voice frames. And even with a perfect signal, emulated instruction counts show the IMBE vocoder needs 11 to 16 times the radio’s 72 MHz CPU.

Claims that check out
21 / 23
2 overstated · 0 false
Confirmed findings already on record
4 / 4
F1–F4 of the Sep 10 review, uncited
Decode-critical issues missed
4
plus 2 moderate issues
Voice frames with a ≥ 75 Hz high-pass
0 / 180
firmware demodulator, noise-free model

ConditionsBlind. The model’s identity was withheld from the auditor; the repository’s earlier reviews were in the working tree.

Scorecard

How the 65 breaks down

Weights reflect the question asked: find what stops P25 decoding and say how to fix it. Accuracy carries the most weight because a wrong review does harm; coverage and root cause together outweigh it because an accurate review of the wrong things does not help.

Where the points went

The 100-point grade split into the rubric’s weighted slots: filled is earned, empty is lost, with the other models on this task for scale.

DeepSeek V4.1 Flash
68/ 100
UNIONALPHA
65/ 100
  • 1Accuracy & evidence30 pts
  • 2Coverage of decode problems25 pts
  • 3Root cause & prioritisation15 pts
  • 4Fix plan & acceptance gates15 pts
  • 5Originality & attribution10 pts
  • 6Clarity & calibration5 pts
Accuracy & evidence30% of the grade
9027.0 pts

Every checked line reference, test result and byte count holds; the evidence bundle reproduces. Two overstatements: RRC test vectors called “C4FM channel vectors”, trellis coverage described as independently referenced.

Coverage of decode problems25% of the grade
4511.2 pts

Misses the analog-FM receive chain, the microphone evidence, the manual’s 8 kHz frame-clock limit and the circular RRC test oracle, and never quantifies that the IMBE vocoder needs 11–16× the 72 MHz CPU. Its confirmed findings are about tooling, telemetry and the linker map.

Root cause & prioritisation15% of the grade
558.2 pts

Fixing the instruments first is sound, but two software-fixable blockers (the analog-FM settings and a vocoder an order of magnitude over budget) are absent, and the RF-route question is framed as unproven “either direction” despite evidence that leans to the microphone.

Fix plan & acceptance gates15% of the grade
7411.1 pts

Clear phases with measurable gates. Missing the cheapest high-value step (a flat receive configuration before any RF test), a concrete receive-filter change, and the tap precedent the repo already documents.

Originality & attribution10% of the grade
404.0 pts

F1–F4 match F1–F4 of the repo’s Sep 10 review in order and substance, C3 matches its F5, with the same parser fixture; none of it is cited. Genuinely new: the gate-versus-clamp mismatch, the Golay check, a fuller Phase 2 section.

Clarity & calibration5% of the grade
763.8 pts

Scrupulous about what it does not claim. Over-hedged where evidence leans one way, and dense enough to slow a decision-maker.

Weighted total 65, grade C−. Grade scale: A ≥ 90 · B 80–89 · C+ 75–79 · C 70–74 · C− 65–69 · D 50–64 · F < 50
Headline findings

Six things to know about this review

Holds up

What it checked is correct

The host suite passes with byte-identical output (104 lines). The capture-parser defect reproduces exactly. SRAM reservations end on 0x20020000 with CCM 1,160 bytes short of full. The Golay Gray-code argument and the mismatch between a ±10% health gate and a ±1% timing clamp are both right.

tests/p25/run.py · tools/p25_capture.py · build/MDUV380_FW.elf · p25_fec.c:65–70 · p25_4fsk.c:240–241

Critical miss

It never mentions the analog-FM receive chain

p25mon.c:724 calls trxSetModeAndBandwidth(RADIO_MODE_ANALOG, true). That loads the AT1846S FM set: filters on (0x58=0xBC85), the “low freq audio” bit cleared (0x40=0x0030), AF gain 80%, 25 kHz. HR-C6000 de-emphasis and a 3 kHz filter come on too. OpenGD77’s DMR set, built for the same 4800-baud 4FSK, does the opposite.

AT1846S.c:191–199 vs 204–217 · HR-C6000.c:2846–2854 · manual §6.2

Major gap

It treats the microphone as a coin flip

It calls the RF route unproven “either direction”, but the evidence leans. OpenGD77 reads the identical I2S slot for transmit audio and labels it “Mic Audio”. Bit 6 of 0xE0, set in 0xC9, enables mic → LineIn1. The manual says the I2S frame clock “must be 8KHz”, yet the monitor runs it at 24 kHz.

sound.c:444 · HR-C6000.c:2849, 2872, 2964 · manual line 1218

Not original

Its four confirmed findings were already in the repo

F1 capture stride, F2 parser, F3 starvation counter and F4 memory map match F1–F4 of P25-PROJECT-REVIEW-2026-09-10.md in order and substance, down to the samples=66 fixture. Its C3 is that review’s F5. None of it is cited, while that review’s analog-filter, test-oracle and 72 MHz points were dropped.

P25-PROJECT-REVIEW-2026-09-10.md §4 · file dated 10 Sep, six days earlier

Moderate

It accepted a circular test oracle

It cites “C4FM channel vectors”, but the generator uses the same RRC filter as the receiver. Against a standard C4FM waveform (raised cosine × inverse sinc), the noise-free eye closes from 0.93 to 0.37, costing about 2 dB. A band-limited integrate-and-dump FIR restores it to 0.98.

p25_4fsk.c:84–124 · p25_selftest.c:258 · TIA-102.BAAA C4FM shaping

Critical miss

The vocoder cannot run in real time, and it never says so

Its tick arithmetic stops at the sample ring. This port clocks the STM32F405 at 72 MHz (PLLN=72). In an emulated Cortex-M4F with the firmware’s own compiler and newlib, the demodulator uses about 40% of that core, but mbelib’s IMBE synthesis needs 11–16 times all of it. A loud 20 ms frame costs roughly 430 ms of CPU, because unwrapped harmonic phases push cosf onto newlib’s slow large-argument path.

mbelib.c:306, 333–388 · libm cosf → __kernel_rem_pio2f (linked in MDUV380_FW.elf) · Core/Src/main.c:271–273

Claim check

23 claims, checked one by one

21 hold, 2 overstated, 0 false. Each claim was checked at the lines it cites.

Every claim and its verdict 
  • Holds
  • Qualifiedoverstated, miscounted or doubtful
  • Wrong
UNIONALPHA23 claims checked

21 hold · 2 qualified · 0 wrong · 91% hold

Decode-critical issues

Found 0 of 4

The audits track 4 issues that stop this radio decoding P25. This review: all four missed, plus 2 moderate issues. How the review treated each, from the provenance table:

IssueUNIONALPHA
The I2S stream is most likely microphone audio partly“either direction”
HR-C6000 de-emphasis on the capture path absent
AT1846S FM filters, low-frequency bit, 25 kHz absent
Manual: I2S frame clock “must be 8KHz” absent
Vocoder needs 11–16× the 72 MHz CPU partly“to measure”
Who wrote it?

A hunch, from the prose alone

The model’s name was hidden. I didn’t open any session logs, so this is a reading of the document’s style, not a lookup.

Best guess: an OpenAI GPT-5 family model, probably a Codex variant

Subjective probabilities, not a classifier score.

GPT-5 family 55%
Claude 25%
Gemini 10%
Other 10%
  • Negation as rigour. Non-claims appear throughout: No actual stack overflow is asserted, No pin prescription is offered here, with more than a dozen “X, not Y” antitheses. That anti-overclaiming register is characteristic of recent GPT-5 models.
  • Telegraphic compression. Noun-phrase fragments (Tagged lower priority next to F1/F2.), semicolon chains and a line reference in nearly every sentence. No tables and no first person in 2,200 words.
  • Workspace boilerplate. A dirty-tree preamble, “Scope: documentation only”, and a bold closing statement listing everything left untouched. That is the house style of Codex CLI runs.
  • Orchestration fingerprints. “Parallel source reviews”, “disputed findings were checked”, and an evidence index mentioning a brief and a tracker. A verifier loop that keeps only host-reproducible claims would also explain why hardware-configuration issues vanished.
  • Against the alternatives. Heavy em-dash use (38) is the one Claude-like trait. A Claude review of this length would usually carry summary tables and more explanatory prose, and a Gemini review would usually propose code patches; this one proposes none.