Repository navigation
Validate the structured Copilot review marker on live reviews #798
Description
Summary
Validate the structured Copilot review marker introduced by #793 against live GitHub reviews, then make pr_review.py enforce every field that proves useful.
Context
#793 instructs Copilot code review to end each review body with:
<!-- fleet-review: reviewed=N changed=N findings=N -->
scripts/pr_review.py reads reviewed and changed as a stable alternative to Copilot's changing coverage prose. It retains the legacy prose readers for reviews created before the marker ships. An absent coverage statement blocks with exit 45.
The implementation deliberately does not treat one local parser test as evidence that GitHub-hosted Copilot follows the instruction. It also parses the findings field as part of the marker shape but does not yet compare that value with inline or body-only findings.
Measurement
After #793 is available on a pull request head:
- Request Copilot review on at least one clean change and one change expected to produce a finding.
- Record whether the review body carries exactly one marker and whether GitHub preserves the HTML comment.
- Record whether
reviewedandchangedmatch the pull request file set. - Record how
findingsrelates to inline threads, review-body findings, and any suppressed block. - Repeat after one fix push to verify the marker describes the current round rather than an earlier round.
- Capture any alternate output shape verbatim in fixtures before changing the parser.
Implementation Scope
- Add corpus-derived fixtures for every observed marker shape.
- Fail closed on duplicate, malformed, impossible, or conflicting markers.
- Decide whether
findings=Ncan be reconciled reliably with GitHub's review objects. - If it can, report the declared and observed counts in
statusand block on disagreement. - If it cannot, remove
findingsfrom the contract rather than retaining a field that appears enforced but is ignored. - Confirm that the no-suppression instruction prevents hidden findings. Keep the existing suppressed-block reader as backward-compatible defense.
- Update the
code-reviewskill, Copilot bootstrap, parser help, and tests together when the measured format differs.
Acceptance Criteria
- Evidence links identify the live review rounds used for validation.
- Tests reproduce the clean, finding, and post-fix rounds from sanitized review bodies.
- The documented marker exactly matches the parser's accepted shape.
- Every retained marker field affects a reported or blocking decision.
- Missing or malformed structured coverage cannot exit successfully.
- Legacy pre-marker coverage bodies remain readable until an explicit retirement decision is recorded.
Relationship to Existing Issues
#788 identified the unstated-coverage ambiguity. #793 introduces the structured marker and exit 45. This issue validates the external reviewer behavior that neither local unit tests nor CI can exercise.
Activity
ptr727 commentedon Aug 17, 2026
Live evidence from PR #799 review 4955381803:
Copilot reviewed 12 out of 12 changed files ....<!-- fleet-review: reviewed=N changed=N findings=N -->marker.Suppressed comments (1)block despite the explicit instruction to publish every supported finding and never suppress one..agents/skills/code-reviewskill and instead suggested adding.github/skills/code-review/SKILL.md.This is the clean baseline showing that the bootstrap text alone does not enforce the schema or no-suppression contract. Re-run the same PR shape after #797 supplies a Copilot-discoverable skill.
ptr727 commentedon Aug 17, 2026
Second-round evidence from PR #799 review 4955414705, after fixing both first-round findings:
f1c24d7head and reported 12 of 12 files using legacy prose.fleet-reviewmarker..agents/skills/code-reviewloaded.This removes findings as a possible reason the first marker was absent. The structured contract is not being followed on either a finding-bearing round or a clean round.
ptr727 commentedon Aug 18, 2026
Live evidence from PR #799 after
.github/skills/was generated on the head branch:da7249freview: legacy full coverage, no structured marker, two suppressed findings.c3738e5review: legacy full coverage, no structured marker, one suppressed finding.04f4bf7review: legacy full coverage, no structured marker, one suppressed finding.ced266creview: legacy full coverage, no structured marker, no findings.All four rounds reviewed 53 of 53 changed files. None emitted the required
fleet-reviewmarker or visible skill attribution. Three rounds continued to use hidden suppressed-finding blocks despite thecode-reviewskill and always-on instructions explicitly forbidding suppression.The findings demonstrate that Copilot inspected the generated skill files as changed content, but they do not prove that Copilot invoked the
code-reviewskill. The missing attribution and marker leave skill activation unverified.Keep this issue open as a behavior and observability tracker. The feature is generally available, but the live implementation still does not reliably honor or attest to the requested schema and no-suppression contract.
Refactor Copilot Review Instructions and Skills (#799)
ptr727 commentedon Aug 21, 2026
Current audit against
developat1832702: partial. Live rounds recorded here establish that Copilot omits the structured marker and can still suppress findings. The currentcode-reviewskill continues to require the marker, whilepr_review.pyretains legacy coverage parsing. No retainedfindingsreconciliation or replacement contract resolves the observed external behavior.ptr727 commentedon Nov 1, 2026
Decision needed (decision triage, 2026-11-01)
Question: Copilot has never emitted the
fleet-review: reviewed=N changed=N findings=NHTML-comment marker. Should the marker contract in.github/copilot-instructions.mditem 5 andfleet-code-reviewSKILL.md be retired, or kept and enforced, and shouldfindings=Nbe dropped?Options, recommended first:
findingsfrom the regex, and keep the existing reviewed/changed reader as a harmless tested form. Coverage now comes from prose and the file table (coverage=table). Carried content, so downstream follows on resync. No work in flight.findings=N, which Bind a Local Review Record to the Reviewer's Actual Report #3699 option 1 could derive its count from. Couples this to Bind a Local Review Record to the Reviewer's Actual Report #3699. No work in flight.Evidence: Six live Copilot rounds on #799 with no marker, and 11 Copilot reviews across the last six promotions into main (#3736, #3715, #3703, #3693, #3681, #3678) carry 0 markers. pr_review_copilot.py:68-70 parses three groups but lines 399-402 use only reviewed/changed, so
findingsaffects no decision. The marker is still required at .github/copilot-instructions.md:27 and fleet-code-review SKILL.md:108-118. The issue's acceptance criteria: "Every retained marker field affects a reported or blocking decision".Blocks: none
ptr727 commentedon Nov 1, 2026
Maintainer answer (decision triage, 2026-11-01): Option 1: retire the Copilot marker ask (copilot-instructions.md item 5 and the fleet-code-review marker paragraph) and drop findings= from the regex, keeping the existing reviewed/changed reader. This is now work for the next burndown round.