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
Count an Open (N) Entry Carrying No Thread Link as Unthreaded - #2570
Fixes a finding Copilot raised on promotion #2568 against #2562's Open (N) reader. Open (N) is not read as a total, so an entry it counts that carries no #discussion_r link, or one spelled in a form the reader does not recognize, dropped out of every count and the digest passed it.
read_overview now also returns each section's linked entry count, the bullets at its margin carrying a link the reader recognizes, outside any block collapsed within it. A second link on one entry, an indented back-reference, or a nested collapsed list does not cancel an unlinked entry.
unthreaded_entries adds each entry an Open (N) section counts beyond those, so FINDINGS WITH NO THREAD names it. The digest says such an entry carries no link this script reads, since it may not be listed at all, or may link a thread in a form the reader does not recognize.
The module docstring and scripts/README.md describe the new count.
Six tests: an unlinked entry, a second link on one entry, an indented back-reference, a nested collapsed list, the zero floor, and the * and + markers. Each fails with its part of the fix reverted.
The other finding on #2568, a KeyError claim against the test fixture, was declined there with evidence.
Eight recorded local strict-review passes ran over three pushes, and the last, over b7d8172, recorded no finding. The findings this body listed for the hosted review on c632fe8 were confirmed by Copilot's second round and are fixed in ccb63d0 and b7d8172. One pre-existing finding is filed as #2569: where the count-first (N) open findings section supplies T, the shortfall subtracts distinct linked ids rather than linked entries.
An `Open (N)` section is not read as a total, so an entry it counts that carries no `#discussion_r` link, or one spelled in a way the reader does not recognize, dropped out of every count and the digest passed it. The section's count beyond the links it carries is now added to the unthreaded entries, so `FINDINGS WITH NO THREAD` names it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An entry can link a thread beside its own, and two links on one entry cancelled an entry carrying none. The section's linked entries are now the lines in it carrying a link. The module docstring states the new count beside the README, and the paragraph's sentences are split under the length gate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A back-reference on its own indented line under an entry is not another entry, and counting every linked line let one cancel an unlinked entry. The digest names the entries its open sections count rather than list, since an entry the count names may not be listed, and the docstrings and README now describe the entry count rather than the link count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 58.84%. Comparing base (0b88caa) to head (b7d8172). ⚠️ Report is 1 commits behind head on develop.
`read_overview`'s docstring bound "its links" to an entry rather than the section, and `unlinked_open_entries` said linked lines where it counts linked entries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The docstring called any margin list item an entry, and the README named only a missing or unrecognized link as what makes an entry unlinked. The code counts a bullet at the margin carrying a recognized link, so a numbered or wrapped entry counts as unlinked too, and both now say so.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An entry whose link the reader does not recognize can still link a real thread, so the digest no longer says it links no thread. `read_overview` names its linked entry count as the bullets at the margin carrying a recognized link, rather than redefining an entry.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
[P2] Do not describe margin bullets as sufficient until nested blocks are excluded. The implementation also scans column-zero bullets inside nested <details> within an entry, so an indented-looking back-reference in such a block can be counted as another linked entry and cancel an unlinked finding. This makes the documented entry-counting rule inaccurate for a body shape the reader can receive.
[P2] Make this contract match the linked value the reader computes. The counter only recognizes a margin bullet carrying a DISCUSSION_LINK, so numbered, wrapped, or full-URL entries are treated as unlinked even when they contain some other link. The current wording is also grammatically ambiguous about whether every linked entry is excluded from the shortfall.
This issue also appears on line 2143 of the same file.
Missing tests for * and + entry markers
scripts/pr_review.py:1950
[P2] Cover the additional list markers this parser accepts. ENTRY_LINE now treats * and + as entries, but all current fixtures and new tests use only -; a regression that narrows the expression would silently classify those forms as unlinked and inflate FINDINGS WITH NO THREAD. Add focused cases for both markers.
A list collapsed inside an entry stayed in the section's text, and a bullet at its margin counted as a linked entry, which could cancel an unlinked one. The count now reads only the section's own text outside nested blocks. Tests now cover the zero floor and the `*` and `+` markers, and the module docstring and README state what a linked entry is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README limited the exclusion to a block inside an entry, and the module docstring left it out, where the code drops every bullet inside any block collapsed within the section.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Answering the three previously-missed findings on c632fe8. (1) Nested details bullets miscounted, README:228: fixed in ccb63d0 and b7d8172, the count skips every block collapsed within the section and the README and module docstring now say so. (2) Entry-link contract, pr_review.py:165 and the unlinked_open_entries docstring: fixed in ccb63d0 and b7d8172, the module docstring now defines linked entries as the bullets at the section's margin carrying a link this script reads, outside any block collapsed within it. (3) Missing tests for the * and + markers: fixed in ccb63d0 by test_every_bullet_marker_reads_as_a_linked_entry, which fails with ENTRY_LINE narrowed to '-'. The same commit adds a test for the zero floor.
A recorded local strict-review pass covers head b7d81720a4e98df6508e58afaf3e0ad64e78053f, the content this pull request carries at that commit against develop, and it recorded 0 findings.
… Recognizer (#2568)
## Summary
Promotes four changes from `develop`.
- [#2562](#2562):
`scripts/pr_review.py` reads Copilot's second overview format through
one recognizer, `read_overview`, whose rows live in one table,
`OVERVIEW_SECTIONS`. It reads the verdict and headline, the count-first
open-findings section in both numbers, both resolved spellings, and the
collapsible `Open (N)` block, matching each open entry against the
head's threads by `fullDatabaseId`. A round whose verdict flags findings
while counting none now exits `50` rather than reading as clean.
`scripts/README.md`, the module docstring, and `pr-review-conduct`
describe the new readings, and the generated skills are rebuilt.
- [#2570](#2570) fixes a
finding this promotion's first Copilot round raised. An `Open (N)`
section is not read as a total, so an entry it counted with no
recognized thread link dropped out of every count. Each entry the
section counts beyond its linked entries now reaches `FINDINGS WITH NO
THREAD`. A linked entry is a bullet at the section's margin carrying a
recognized link, outside any block collapsed within it.
- [#2573](#2573) fixes the
next finding this promotion's Copilot round raised. An open section's
thread ids are now read from the same margin-bullet entries its linked
count reads, so a back-reference inside a collapsed block is no longer
counted as a second missing finding.
- [#2571](#2571), merged
to `develop` by another lane, rides along. Both menus now judge a cached
hub tree fresh against the commit the session's own ref resolves to,
rather than against `origin/main`. It carries no `Closes on promotion`
line, so this promotion closes no issue for it.
Fixes#2480Fixes#2479Fixes#2544Fixes#1723
## Verification
- #2562 took nine recorded local strict-review passes, and the last,
over its final head, recorded no finding. Copilot ran two rounds, and
all five threads were fixed, answered, and resolved.
- Copilot's second-round headline on #2562 also named #2544's
headline-sentence arm, a clean verdict whose headline names a finding.
Decision #2564 shipped #2562 without that arm, and it is filed as #2567.
- #2570 took eight recorded local strict-review passes, the last
recording no finding, and Copilot's two rounds on it were all fixed and
answered. A pre-existing gap it found in the count-first section's
shortfall is filed as #2569.
- On this promotion, the fixture `KeyError` finding was declined with
evidence, the anchorless-entry finding is fixed by #2570, and the
entry-id finding by #2573. #2573's one local pass raised two findings,
an `Open (0)` exit-code change that reports rather than hides and a
mixed-revision shape never seen, both listed in its body, and Copilot
approved it with no open finding.
- #2481 is not included and stays open for its own lane.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes a finding Copilot raised on promotion #2568 against #2562's
Open (N)reader.Open (N)is not read as a total, so an entry it counts that carries no#discussion_rlink, or one spelled in a form the reader does not recognize, dropped out of every count and the digest passed it.read_overviewnow also returns each section's linked entry count, the bullets at its margin carrying a link the reader recognizes, outside any block collapsed within it. A second link on one entry, an indented back-reference, or a nested collapsed list does not cancel an unlinked entry.unthreaded_entriesadds each entry anOpen (N)section counts beyond those, soFINDINGS WITH NO THREADnames it. The digest says such an entry carries no link this script reads, since it may not be listed at all, or may link a thread in a form the reader does not recognize.scripts/README.mddescribe the new count.*and+markers. Each fails with its part of the fix reverted.The other finding on #2568, a
KeyErrorclaim against the test fixture, was declined there with evidence.Closes on promotion: #2480
Local review
Eight recorded local strict-review passes ran over three pushes, and the last, over b7d8172, recorded no finding. The findings this body listed for the hosted review on c632fe8 were confirmed by Copilot's second round and are fixed in ccb63d0 and b7d8172. One pre-existing finding is filed as #2569: where the count-first
(N) open findingssection suppliesT, the shortfall subtracts distinct linked ids rather than linked entries.🤖 Generated with Claude Code