Skip to content

control.reason counts rows but calls them changes ('4 change(s)' beside '2 changes (from 4 rows)') #857

Description

@pengfei-threemoonslab

Observed

This was observed on published v1.1.0 (Action e3c6cb0c7657d9c53d4e29b2061d04dcf99a4e9b, PyPI 1.1.0) in the public synthetic fixture https://github.com/ThreeMoonsLab/agents-shipgate-hosted-fixture. In the same PR comment, the human summary and the agent block count different things under the same word:

PR / run Review question control.reason
PR 1 / 35773922210 "these 2 declared capability changes (from 4 rows)" "4 repository-declared host capability change(s)"
PR 1, second push / 35774315551 4 changes (from 5 rows) 5 change(s)
PR 2 / 35774377665 1 change (from 2 rows) 2 change(s)
PR 8 / 35774401670 3 changes (from 5 rows) 5 change(s)
PR 7, PR 9 (fork, job summary) 2 changes (from 4 rows) 4 change(s)

Only PR 3 is consistent (1 row, 1 change).

Cause (at e3c6cb0c)

src/agents_shipgate/cli/verify/orchestrator.py:6925 builds the reason from len(host_comparison.rows) and labels it "change(s)". The review summary counts paired changes, so a replacement's two rows count as one change.

Expected

control.reason uses the review's change count, or labels its number as rows. One comment never gives two different counts for "changes".

Acceptance

  • control.reason's number agrees with review.summary's change count, or the reason says "rows".
  • The existing vocabulary guard (no engine vocabulary in control.reason) still passes. STABILITY.md records the changed reason text if it is a documented surface.
  • A test covers a replacement pair (2 rows, 1 change) and an unpaired row.

Found in the hosted v1.1.0 run recorded on #780 and #570.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Queued; valuable but not blockingarea:verifyverify / preview orchestration and SHIP-VERIFY-* checksbugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions