Skip to content

pr_review.py Reads a Copilot File-Table Cell Naming Two Paths as One, Exiting 45 on Full Coverage #2251

Closed

Description

@ptr727

What

scripts/pr_review.py exits 45 (COVERAGE_IS_UNSTATED) on a Copilot round whose file table names every changed file, when one row lists two files in a single cell.

Copilot sometimes groups related files into one row, each path in its own backticks, separated by a comma:

| File | Description |
| ---- | ----------- |
| `src/app.sh` | Adds the guard. |
| `docs/a.md`, `docs/b.example` | Document the new read. |

With src/app.sh, docs/a.md and docs/b.example as the changed files, the digest reads the second row as one path, docs/a.md`, `docs/b.example with the backticks inside it. It then reports the table as leaving out both real files and naming a file the diff does not carry:

NO FILE TABLE STANDS IN: the table leaves out docs/a.md, docs/b.example, and names docs/a.md`, `docs/b.example, which the diff does not carry

So a round that read the whole diff blocks the gate. Re-requesting the review does not help, because the table's shape is Copilot's.

Copilot also writes each / in a cell with a zero-width space after it (docs/​a.md), which the parser already handles for one path per cell.

Expected

A cell holding several backticked paths separated by commas counts as naming each of them. With that, the table above stands in for coverage of exactly the three changed files.

Related

#2167 handles a wildcard row in the same table, a different shape.

Seen on the promotion pull request ptr727/HomeAutomation-Config#660, merged on the maintainer's explicit go-ahead after the table was checked by hand.

Activity

  1. ptr727 commented on Oct 1, 2026

    @ptr727
    OwnerAuthor

    A sibling shape of the same class: a row whose cell is one path followed by a parenthesized annotation, written as a second row for a file another row already names.

    | File | Description |
    | ---- | ----------- |
    | src/app.sh | Adds the guard. |
    | docs/a.md | Documents the new read. |
    | docs/a.md (cleanup) | Rewords the cleanup step. |
    

    With src/app.sh and docs/a.md as the changed files, the digest reads the third row as the path docs/a.md (cleanup) and refuses the table:

    NO FILE TABLE STANDS IN: the table names docs/a.md (cleanup), which the diff does not carry
    

    The table names every changed file exactly, so the round read the whole diff and the gate still exits 45. A second requested round on the same head stated no coverage and carried no table, so re-requesting did not clear it, and the maintainer merged on the evidence of a manual diff of the table against the changed files.

    Expected: a cell whose text is a changed path followed by a parenthesized annotation counts as naming that path, so the table above stands in for coverage of exactly the two changed files.

    Seen on ptr727/Blog#358, a resync of hub main at 0378c78.

    🤖 Generated with Claude Code

  2. added a commit that references this issue on Oct 9, 2026
    915182a
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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions