You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
An Incomplete Copilot File Table Displaces an Attested Local Pass on a Develop Pull Request #3955
On a pull request into develop, a Copilot round whose file table names only some of the changed files displaces the head's attested local pass. pr_review.py status then reads coverage=none. That leaves Merge Gate item 2 unmet, although the round states no partial coverage and the head carries a valid attestation.
pr-review-conduct Merge Gate item 2 says an attested local pass covers such a head "where the whole review history is in view and no round on record states partial coverage". A Lite-effort table that leaves files out is not a statement of partial coverage. Read literally, the rule keeps coverage=local here.
This is the table-carrying sibling of #2739, which fixed the same displacement for a round carrying no table at all.
Observed On
ptr727/NxWitness#665, a develop-based pull request that re-vendors the carried .github/skills tree (42 changed files, including one added and one deleted skill).
local-strict-review was recorded on head fa116de0, and pr_review.py attest succeeded. status then read review_on_head=local coverage=local.
Copilot then auto-reviewed the same head at Lite effort (effort=lite effort_source=explicit), with no coverage statement and a file table naming 30 paths.
status now reads review_on_head=yes coverage=none with NO COVERAGE IS SHOWN: no round covering the head states coverage, and the table on fa116de0 names 30 path(s) where the pull request changes 42 file(s), and the two sets differ. It also prints no statement, file table, or attested local pass shows full coverage of this head.
The repository's .github/agent-policy.json lists Copilot with bases: ["@default"], so its review policy hands develop heads to the local pass. Copilot reviewed anyway because the repository's own Copilot auto-review setting fires on every base.
Expected
On a pull request whose review policy hands the head to a local pass, an attested local pass covering the head holds coverage=local whatever a table-carrying Copilot round names. A round that actually states partial coverage remains the only thing that withdraws it, as item 2 says.
Actual
The incomplete table wins over the attestation, and nothing the loop can do clears the gate short of the maintainer waiving item 2.
Audit context: hub c175d557, audit run 2026-11-09T16:22:15Z.
Two more instances, from the Utilities resync against hub c175d557 (audit run 2026-11-09T16:22:11Z | hub c175d557). Both are develop-based pull requests whose .github/agent-policy.json gates Copilot on @default only, each with a recorded local pass and a successful attest on the head.
Resync the Instruction Set With the Hub Utilities#581, an instruction-set resync: 5 changed files, and a Lite round whose table names 4 (it leaves out GOVERNANCE.md, the file with the largest diff). status reads coverage=none, although the round's verdict is Approval recommended.
The displacement comes from the final branch of coverage() in scripts/pr_review_rounds.py: local_cover(pr) and not any(reading(n).table is not None for n in rounds). Any table on a head round therefore suppresses local, including one table_cover has just rejected as not matching. That is stricter than both pr-review-conduct Merge Gate item 2 and the coverage= description in pr_review.py's own help, which name only a stated partial round, a truncated history, or a refusal as what blocks the local reading.
Another instance during a resync: audit run 2026-11-11T00:45:57Z | hub 1397e30, ptr727/HomeAssistant-Config PR 85 into develop. An attested local pass on the head read as coverage=local until a Copilot Lite round landed on the same head with a table naming 31 of the 44 changed files. The digest then read coverage=none, even though no round stated partial coverage. The carried tree there is byte-identical to the hub, so the attested pass is the stronger evidence. Expected: coverage=local to stand, as Merge Gate item 2 describes.
Activity
ptr727 commentedon Nov 9, 2026
Two more instances, from the Utilities resync against hub
c175d557(audit run 2026-11-09T16:22:11Z | hub c175d557). Both aredevelop-based pull requests whose.github/agent-policy.jsongates Copilot on@defaultonly, each with a recorded local pass and a successfulatteston the head..github/skillsre-vendor shape as NxWitness#665: 42 changed files, and a Lite round whose table names 30.statusreadscoverage=none.GOVERNANCE.md, the file with the largest diff).statusreadscoverage=none, although the round's verdict isApproval recommended.The displacement comes from the final branch of
coverage()inscripts/pr_review_rounds.py:local_cover(pr) and not any(reading(n).table is not None for n in rounds). Any table on a head round therefore suppresseslocal, including onetable_coverhas just rejected as not matching. That is stricter than bothpr-review-conductMerge Gate item 2 and thecoverage=description inpr_review.py's own help, which name only a stated partial round, a truncated history, or a refusal as what blocks the local reading.Promote the Hub Resync to Main (#582)
ptr727 commentedon Nov 11, 2026
Backlog burndown claim, round 1 (2026-11-10). Branch
feature/merge-gate-coverage-item2, group: #3955, #3909, #3901, #3905.Predicted files:
scripts/pr_review_rounds.pyscripts/pr_review_copilot.pyscripts/pr_review.pyscripts/pr_review_promotion.pyscripts/pr_review_digest.pyscripts/pr_review_answers.pytests/test_pr_review.pytests/test_pr_review_copilot.pytests/test_pr_review_promotion.pytests/test_pr_review_size.pyGOVERNANCE.md.github/copilot-instructions.mdscripts/README.md.agents/skills/pr-review-conduct/SKILL.md.github/skills/pr-review-conduct/SKILL.md.claude-plugin/fleet-skills/skills/pr-review-conduct/SKILL.md.claude-plugin/fleet-skills/.source-digests/pr-review-conduct.agents/skills/merge-and-release/SKILL.md.github/skills/merge-and-release/SKILL.md.claude-plugin/fleet-skills/skills/merge-and-release/SKILL.md.claude-plugin/fleet-skills/.source-digests/merge-and-release.agents/skills/drive-pr/SKILL.md.github/skills/drive-pr/SKILL.md.claude-plugin/fleet-skills/skills/drive-pr/SKILL.md.claude-plugin/fleet-skills/.source-digests/drive-prptr727 commentedon Nov 11, 2026
Another instance during a resync: audit run 2026-11-11T00:45:57Z | hub 1397e30, ptr727/HomeAssistant-Config PR 85 into
develop. An attested local pass on the head read ascoverage=localuntil a Copilot Lite round landed on the same head with a table naming 31 of the 44 changed files. The digest then readcoverage=none, even though no round stated partial coverage. The carried tree there is byte-identical to the hub, so the attested pass is the stronger evidence. Expected:coverage=localto stand, as Merge Gate item 2 describes.Hold Local Coverage Against File Tables and Count Green Dependabot Bu…