Background
The review summary always renders a "Description vs. Implementation" section, including when the check found nothing:
### Description vs. Implementation
No mismatch found between the PR description and the change.
That state came from #637, where the section was silently absent on three of twelve dogfood pull requests and a reader could not tell "checked, matched" from "never checked". Stating the clean result fixed that, but it costs a heading and a sentence on every clean review, which is most of them, and it pushes the findings further down. A section that says nothing happened is noise once the reader trusts that the check always runs.
Omit the section when the check ran and found no mismatch. The two informative states stay exactly as they are: gaps listed under the ⚠️ heading, and the collapsed state (#588, #718) that says every mismatch is reported as a finding below.
Change required
In PrSummaryGenerator.appendDescriptionGaps, drop the final branch that renders NO_GAPS_HEADING + NO_GAPS_FOUND, and remove both constants if nothing else uses them.
#637's concern still has to be answered, because absence becomes ambiguous again. Decide, and write the reasoning into the javadoc:
- A summary that came back at all means the check ran;
aiSummary == null is the only state where it did not, and the summary-degradation banners already disclose that. If that holds, absence is unambiguous for anyone who knows the rule, and the rule belongs in the README's description of the summary rather than in every review.
- A pull request with an empty body reaches the clean state too, since the model reports no gaps for a description it never received. Today the line is vacuous there; with the section gone, that case disappears quietly, which is the better outcome.
Check whether the counts-only summary fallback and the delta comment reference the section, and keep them consistent.
Constraints
Acceptance criteria
References
Background
The review summary always renders a "Description vs. Implementation" section, including when the check found nothing:
That state came from #637, where the section was silently absent on three of twelve dogfood pull requests and a reader could not tell "checked, matched" from "never checked". Stating the clean result fixed that, but it costs a heading and a sentence on every clean review, which is most of them, and it pushes the findings further down. A section that says nothing happened is noise once the reader trusts that the check always runs.
Omit the section when the check ran and found no mismatch. The two informative states stay exactly as they are: gaps listed under the⚠️ heading, and the collapsed state (#588, #718) that says every mismatch is reported as a finding below.
Change required
In
PrSummaryGenerator.appendDescriptionGaps, drop the final branch that rendersNO_GAPS_HEADING+NO_GAPS_FOUND, and remove both constants if nothing else uses them.#637's concern still has to be answered, because absence becomes ambiguous again. Decide, and write the reasoning into the javadoc:
aiSummary == nullis the only state where it did not, and the summary-degradation banners already disclose that. If that holds, absence is unambiguous for anyone who knows the rule, and the rule belongs in the README's description of the summary rather than in every review.Check whether the counts-only summary fallback and the delta comment reference the section, and keep them consistent.
Constraints
Acceptance criteria
NO_GAPS_FOUNDtoday../mvnw -B clean compile spotbugs:check spotless:checkclean (BugInstance size is 0) and the full suite green.References
src/main/java/dev/thiagogonzaga/thrillhousebot/review/PrSummaryGenerator.java(appendDescriptionGaps,NO_GAPS_HEADING,NO_GAPS_FOUND)