Model review audits
Compare · P25 firmware review

Head to head

Same brief, same rubric, same scale. Every model on the task side by side, or just the ones you pick: dimension scores, how many of their claims held up, and which issues each review raised.

Models 2 of 6
All 6 models 

Every model here ran under the same conditions. How the runs were set up →

From the audits

Right on the front end, wrong on the architecture

Qwen3.8 Flash finds both halves of the filter chain and the microphone evidence, as Grok 4.6 and Muse Spark 1.3 Contributor do, and names the exact register fix. It also makes six wrong claims, more than any other clean-room audit, and like all of them misses the vocoder CPU wall.

From the Qwen3.8 Flash audit, 17 September 2026.

Weighted score

Out of 100, on the grade scale.

Where the points went

Earned and lost, by rubric slot

Each bar is a model’s 100-point grade split into the rubric’s weighted slots; filled is earned, empty is lost. The slots line up, so a gap in one bar against a full slot in another is exactly where the models part ways.

UNIONALPHA
74/ 100
Qwen3.8 Flash
59/ 100
  • 1Accuracy & evidence30 pts
  • 2Coverage of decode problems25 pts
  • 3Root cause & prioritisation15 pts
  • 4Fix plan & acceptance gates15 pts
  • 5Originality & attribution10 pts
  • 6Clarity & calibration5 pts
Dimension profile

Scores on each rubric dimension

One panel per model: its score on each rubric dimension and the weighted total over the grade zones, in its own colour, with every other model on this task as a grey dot for scale. Hover a row for every model’s score and the auditor’s reasoning.

  • The panel’s model, joined down the dimensions
  • Every other model on this task

UNIONALPHA74 C

AccuracyCoverageRoot causeFix planOriginalityClarityTotalFDCBA AccuracyCoverageRoot causeFix planOriginalityClarityTotalFDCBA

Qwen3.8 Flash59 D

AccuracyCoverageRoot causeFix planOriginalityClarityTotalFDCBA AccuracyCoverageRoot causeFix planOriginalityClarityTotalFDCBA
Scores and weighted points
Dimension Weight UNIONALPHAQwen3.8 FlashGrok 4.6Muse Spark 1.3 ContributorDeepSeek V4.1 FlashGLM 5.3 Flash Difference
Accuracy & evidence 30% 90 · 27.0 pts 62 · 18.6 pts 74 · 22.2 pts 74 · 22.2 pts 73 · 21.9 pts 64 · 19.2 pts +28
Coverage of decode problems 25% 65 · 16.3 pts 40 · 10.0 pts 59 · 14.8 pts 54 · 13.5 pts 49 · 12.3 pts 34 · 8.5 pts +25
Root cause & prioritisation 15% 60 · 9.0 pts 68 · 10.2 pts 70 · 10.5 pts 72 · 10.8 pts 66 · 9.9 pts 62 · 9.3 pts −8
Fix plan & acceptance gates 15% 70 · 10.5 pts 70 · 10.5 pts 75 · 11.3 pts 71 · 10.7 pts 70 · 10.5 pts 62 · 9.3 pts ±0
Originality & attribution 10% 76 · 7.6 pts 64 · 6.4 pts 72 · 7.2 pts 70 · 7.0 pts 74 · 7.4 pts 58 · 5.8 pts +12
Clarity & calibration 5% 80 · 4.0 pts 70 · 3.5 pts 78 · 3.9 pts 80 · 4.0 pts 74 · 3.7 pts 68 · 3.4 pts +10
Weighted total 100% 74 · C59 · D70 · C68 · C−66 · C−56 · D +15
Claim check

Every claim, checked

One cell per claim in each audit’s claim table, checked at the lines it cites. Hover a cell for the claim and the auditor’s note. The reviews made different numbers of claims, so the bar under each grid gives the shares.

UNIONALPHA’s claim table · Qwen3.8 Flash’s claim table

  • Holds
  • Qualifiedoverstated, miscounted or doubtful
  • Wrong
UNIONALPHA35 claims checked

33 hold · 2 qualified · 0 wrong · 94% hold

Qwen3.8 Flash33 claims checked

21 hold · 6 qualified · 6 wrong · 64% hold

Issue coverage

What each review raised

UNIONALPHA found 1 of the 4 decode-critical issues; Qwen3.8 Flash found 2 of the 4 decode-critical issues. Every tracked issue below, with the reviews that were already in the repository for reference.

Issue signatures

Each review as a trace across the tracked issues. Where traces part is where the reviews differ; hover a column for every review’s entry. Column numbers match the table below.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Project docs earlier repo review · in the repository UNIONALPHA model · Sep 17 Qwen3.8 Flash model · Sep 17
  • raised
  • partly
  • absent
  • Decode-critical
Issues raised by each review of P25 voice decoding on the DM-1701
# Issue Project docsEarlier repo review · in the repository UNIONALPHAModel · Sep 17 Qwen3.8 FlashModel · Sep 17
1 Capture export stages the wrong I2S halfwords absent raisedF3, fixed and verified raisedP1-2, tests miss the adapter
2 Capture parser certifies an incomplete stream absent absent absent
3 pcm_starve never increments absentdocumented as working raisedF7 raisedP1-7
4 No static RAM margin partlymargins still to measure raisedF6, byte-exact partlycalls the reservation headroom
5 The I2S stream is most likely microphone audio Decode-critical partlyopen, leaning sceptical partlyblocking, but never says microphone raisedP1-4, 0xE0 mic bit
6 HR-C6000 de-emphasis on the capture path Decode-critical absent partlycited, called unmeasured raisedP1-3, 0x34=0x1C
7 AT1846S FM filters, low-frequency bit, 25 kHz Decode-critical partly“require characterization” partlycited, called unmeasured raisedP1-3, DMR 0x58 probe
8 0x10=0x6E hybrid state; 0x36 dual role partlybring-up clock rules partlyF1, 0x6E against 0x80 partly“hybrid I2S state”
9 Manual: I2S frame clock “must be 8KHz” Decode-criticalmissed absent raisedF4 absentquotes the formulas, not the rule
10 One-layer 4FSK test mode as a P25 tap partlystock BER-test block only partlyworth a bounded test absentruled out at “9600 Bd”
11 ±10% health gate versus ±1% timing clamp absent absent absent
12 Fail-closed muting at LDU cadence absent absent partly“keep it”
13 Non-standard MFID mutes clear calls absent absent absent
14 Test waveform shares the receiver’s RRC filter partly“synthetic RRC/AWGN” caveat raisedF5, unquantified absentwould extend that model
15 MCU runs at 72 MHz raised raisedF7 absent
16 Vocoder needs 11–16× the 72 MHz CPU Decode-criticalmissed partlydecode timing unmeasured partlydeadlines “unproven” absent“not the problem”
17 Direct discriminator tap (M17 mod) raised raisedfallback raisedfallback
18 Phase 2 architecture and scope partlynot implemented raisedmost accurate section partlyDMR and X2-TDMA parts
19 Two unverified SPI writes per decoded 20 ms frame absent absent absent
20 Capture sessions lack epochs absent raisedF9, 8 kHz under a 24 kHz header absent
21 Ring and tick real-time budget partlydeadlines unproven raisedF7, 1 ms is a minimum partlyregister stalls against the ring
22 Clock config 3 assumes 12,288 Hz; the codec formula gives 12,000 absent absent raisedP1-6, for a different reason
23 Clock-config writes bypass the verified SPI writer partlySPI retry note raisedF9 absent
24 Stock squelch re-arms FM audio (0x10=0x80) during monitoring absentassumes it can’t re-arm raisedF1, new absent“fixed” by forcing squelch open
25 Stale clear-call state releases a new call’s first frames absent raisedF8, probe absent

From the provenance table in the Qwen3.8 Flash audit (17 Sep 2026), the newest audit on this task. Shaded columns are reviews that were already in the repository.

Run facts

How each run went

Descriptive, not graded, and in grade order rather than ranked: one run per model. Run time is wall-clock, so it includes the provider’s speed, rate-limit waits and retries, and token counts vary with each model’s tokenizer.

Run facts for each compared model, in grade order. Descriptive only: not graded or ranked.
Model Run time Agent steps Tool calls Output tokens Route Launch
UNIONALPHAThird attempt; the first two stopped on provider rate limits 36 min 83 95 63K OpenRouter API one-shot
Qwen3.8 FlashSecond attempt; the first stopped on a provider rate limit 57 min 92 97 147K OpenRouter API one-shot
Every run figure
Model Started (UTC) Output tokens Reasoning tokens Context tokens Messages Sessions Retry budget
UNIONALPHA 17 Sep 2026, 12:57 63,278 not reported 9,988,183 179 1 10
Qwen3.8 Flash 17 Sep 2026, 13:49 146,532 125,802 13,381,380 190 1 10

Context tokens are input plus cache reads and writes: mostly the conversation re-sent at every step, so they grow with steps × context size. The retry budget is how many API retries the harness allowed.