Kestrel per-antenna stats: CRC-gate window aggregates + pure physts output param (#355 review) - #356
Conversation
PR Summary by QodoKestrel per-antenna stats: CRC-gated window aggregates + pure physts output
AI Description
Diagram
High-Level Assessment
Files changed (3)
|
Code Review by Qodo
1. Out uncleared on parse failure
|
|
/review |
6e1095a to
4ad46a2
Compare
|
Code review by qodo was updated up to the latest commit 4ad46a2 |
|
/review |
|
Code review by qodo was updated up to the latest commit 2d6199b |
…idence (#358) Follow-up gap found while landing #356: a `/review` summon after a push does **not** submit a new review object — Qodo edits its code-review comment in place and posts a marker comment naming the head sha ("updated up to the latest commit `<oid>`"). The gate's strict review-object/head-oid match therefore blocks forever on the summon path (observed live on #356; #357's summons happened to produce review objects). The gate now accepts either evidence form: 1. a review object tied to the current head oid (unchanged), or 2. a bot-authored comment matching "up to the latest commit" **and** containing the exact head oid (verified against #356's live data). Only the bot's own comments count, so this is not spoofable by other users. Comment edits can't retrigger the check against the PR head (issue_comment runs attach to the default branch), so the retrigger paths stay: thread reply or Checks-tab re-run — documented in the failure message. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…utput param Two correctness follow-ups from the #355 review. The Kestrel RX loop fed _rxq/_rxpaths for every WIFI frame; the Jaguar generations fold window aggregates only for CRC-clean frames, and a garbled frame's cached physts biases the means and the active-chain classification — gate both on !crc_err. And parse_physts_8852 now clears its output struct on entry, so an is_valid=0 stub or an absent IE reads 0 instead of a reused struct's previous blob (selftested). On-air re-validated (tests/rxpath_perantenna_onair.sh, 8852C RX, ch36, ~4.2k frames): PASS with the gate in place. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The pure-output contract must hold on every return: the clear now precedes the null/length validation, so a too-short buffer can no longer leave a reused struct carrying a previous blob's values (Qodo re-review finding). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
/review |
2d6199b to
6f9c879
Compare
|
Code review by qodo was updated up to the latest commit 6f9c879 |
Addresses the two code-review findings on #355 (both confirmed real):
CRC gating — the Kestrel RX loop fed
_rxq/_rxpathsfor every WIFI frame, while Jaguar1/2/3 fold window aggregates only for CRC-clean frames. A garbled frame's cached physts biases the per-chain means and theactive_maskclassification under FCS-error conditions. Both feeds now gate on!crc_err, matching the other generations.Pure output param —
parse_physts_8852updated header RSSI but leftsnr_avg/snr[]/evm[]untouched on anis_valid=0stub or an absent IE, so a caller reusing the struct could observe a previous blob's values. The parser now clearsouton entry; result depends only on the current buffer. (The in-tree caller passes a fresh struct, so no observed misbehavior — this hardens the API contract.) Selftested with a deliberately dirtied struct.Validation: 48/48
ctest; on-air re-run oftests/rxpath_perantenna_onair.sh(8852C RX ← 8822BU TX, ch36, ~4.2k frames) PASS with the gate in place.🤖 Generated with Claude Code