fix(seidroid-review): read the finding counts where the driver writes them - #74
Conversation
… them
check.json carries `counts: {blocking, non_blocking, placeable, pre_existing}`
beside a top-level `conclusion`. The step read the three counts at the root,
where they are always null:
$ jq -r '[(.blocking // "?"), (.non_blocking // "?"), (.pre_existing // "?"),
(.conclusion // "?")] | @TSV' check.json
? ? ? success
$ jq -r '[(.counts.blocking // "?"), ...] | @TSV' check.json
0 2 1 success
Three consequences, all silent. The findings line never printed a number. The
notice announced that the driver "predates check.json's blocking and
non_blocking fields" against a driver that has them. And both disagreement
warnings are guarded by `is_count "$blocking"`, so neither could ever fire --
the only automated cross-check between this comment and the check run was dead
code, which matters most now that a clean conclusion can post an approval.
The sentinel still does its job for a genuinely older driver: absent counts
answer null at the new path too.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR SummaryLow Risk Overview That mismatch silently broke the verdict comment’s Findings line (counts never passed Reviewed by Cursor Bugbot for commit 9a80f36. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Corrects the jq path for the driver's finding counts from the root to .counts, which is where check.json writes them; the fix is complete (this was the only such read), keeps .conclusion at the root consistent with the workflow's other two consumers of the file, and preserves the sentinel fallback so an older driver still publishes the shorter findings line.
Findings: 0 blocking | 0 non-blocking | 0 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- None at the file/PR level.
The bug
check.jsoncarries the counts nested undercounts, beside a top-levelconclusion. The step read the three counts at the root.The real shape, rendered by running
BuildCheckRunon a verdict with twonon-blockers and one pre-existing suggestion:
{"conclusion":"success","title":"2 findings, 1 pre-existing issue","summary":"…", "counts":{"blocking":0,"non_blocking":2,"placeable":0,"pre_existing":1}}Three consequences, all silent
is_count "?"is false, so theN blocking | M non-blockingterms were always omitted — which is the wholefeature feat(seidroid-review): fail soft when the verdict cannot post, and state the finding counts #71 added and sei-load#97
was opened to pilot.
"predates check.json's blocking and non_blocking fields" against
v0.11.0,which was cut specifically to add them.
is_count "$blocking", so neither could fire. That is the only automatedcross-check between the verdict comment and the check run — and it was dark
exactly as a clean conclusion becomes able to post an approval.
Scope
Four characters of path, plus a comment recording why the root read was wrong
so nobody re-derives it.
.conclusionwas already correct and is untouched.The sentinel still works for a genuinely older driver: absent counts answer
nullat the nested path too, sois_countrejects them and the shorter linestill prints.
Verification
Both jq invocations above were run against the driver's real output.
actionlintreports the same 5 pre-existing findings as the base(lines 326/1001/1183); none from this change. YAML parses.
Found by a platform review of the pipeline; the driver-side companion is
sei-internal-skills#399.
🤖 Generated with Claude Code