AntFleet

Disagreement · 5a1afff9-anthropic-2

State write proceeds with empty $state_parent and silently no-ops, but success summary still claims success

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

Primary finding

State write proceeds with empty $state_parent and silently no-ops, but success summary still claims success

mediumdata-losshigh
  • scripts/postprocess-admanage-create.sh:177-195
When state_parent is empty, the warning prints and a SKIPPED summary line is appended, BUT the code then still runs jq with --arg parent "" which silently no-ops (matches no campaign), and then ALSO appends a second summary line 'adset → ID (under '')' and increments adset_success. The user sees two summary lines for the same ad set (one SKIPPED, one success) which is confusing/misleading. The state-file no-op was even called out in the comment as the thing they're guarding against, yet they then still execute the no-op jq write.

Recommendation

When state_parent is empty, `continue` after recording the warning (after writing the result JSON and moving the input file) instead of falling through to the jq state write and the additional success summary. Alternatively guard the jq invocation with `if [ -n "$state_parent" ]`.

Counterpart finding

Ad-set state update still attempted when parent campaign is unknown (warning says state not updated)

mediumbughigh
  • scripts/postprocess-admanage-create.sh:186-189
  • scripts/postprocess-admanage-create.sh:191-196
When state_parent is empty, the script warns that it will not update state, but then executes a jq update using an empty parent, likely a no-op. This is inconsistent and brittle; future jq changes or data shapes could cause errors instead of no-op.

Recommendation

Short-circuit when state_parent is empty: skip the jq update block (and optionally write a separate results file note). E.g., add `if [ -z "$state_parent" ]; then continue; fi` before the state update.

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 →