AntFleet

Disagreement · 1939cc1e-openai-2

jq pipeline for SPOTLIGHT_PICK fails when history is empty

mismatch
repo 6f7fc663·PR #32·reviewed 1 week ago

Primary finding

jq pipeline for SPOTLIGHT_PICK fails when history is empty

highbughigh
  • skills/fleet-state/SKILL.md:113-117
If contributor-spotlight history is empty, SPOTLIGHT_PICK becomes an empty string. Piping empty input to jq (without -n) causes a parse error and a non-zero exit, aborting the run. This violates the "degrade gracefully" intent.

Recommendation

Avoid echo | jq on possibly empty input. Either extract both fields directly from the file with a single jq call (e.g., jq -r '(.history | sort_by(.featured_at) | .[-1]) // {} | [.fork, .featured_at] | @tsv' ...) or guard: if [ -n "$SPOTLIGHT_PICK" ]; then ... fi. Alternatively, use jq -n with inputs or structured fallback.

Counterpart finding

Spotlight history sort key mismatch with persisted field name (`featured_at` vs `fork`)

mediumbugmedium
  • skills/fleet-state/SKILL.md:118-122
The skill assumes `contributor-spotlight-history.json` entries carry `featured_at` and `fork` fields, but this is never cross-referenced with the producing skill's schema in this PR. If the constituent contributor-spotlight skill writes a different key (e.g., `featured_date`, `fork_full_name`, `picked_at`), `sort_by` will silently sort by nulls and `SPOTLIGHT_FORK`/`SPOTLIGHT_DATE` will be empty, causing the spotlight section to render as missing without any error. The bullet `pick whichever is newest` would then be wrong without any FLEET_STATE_PARTIAL signal.

Recommendation

Either (a) cite the exact schema produced by `contributor-spotlight/SKILL.md` and assert it here, or (b) tolerate alternative key names with `.fork // .fork_full_name`, `.featured_at // .picked_at // .ts`, and log `FLEET_STATE_SPOTLIGHT_SCHEMA_UNKNOWN` if neither resolves.

Why this didn't post

This finding didn't meet AntFleet's unanimous agreement threshold. Both frontier models review every PR independently; only findings they both flag with the same severity and category are posted to the PR. This one fell through.

read the methodology →

From the same review

These findings passed the unanimous gate on the same PR review. The disagreement above was filtered out; the findings below were posted.