Skip to content

Promote the Incidental Counts Rule and the Count-First Overview Reader to Main - #3175

Merged
ptr727 merged 3 commits into
mainfrom
develop
Oct 17, 2026
Merged

ptr727 merged 3 commits into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

After this merges, comment-and-doc-style changes, so this machine's installed Skills are refreshed at release.

Closes #3160
Closes #3167
Closes #3170

🤖 Generated with Claude Code

ptr727 and others added 2 commits October 16, 2026 17:50
## Summary

Refs #3160.

- Adds `GOVERNANCE.md` "Documentation Style Conventions" > "Incidental
Counts". Text refers to an enumeration ("the following checks", "each
case", "the rows below") rather than stating its size. The rule says
outright that it holds in every fleet repository, for docs, code and
workflow comments, and docstrings. A count stays only where the number
is what the reader needs, such as a limit, a threshold, or a measured
result, and it then names its source. A wrong incidental count is
removed rather than corrected.
- `comment-and-doc-style` carries the subsection whole as a generated
include under "Quantitative claims", and its description gains a trigger
for text that states how many items a list holds.
- `fleet-code-review` gains one line: a finding that a stated count is
wrong suggests removing it where it is incidental.
- Sweeps the incidental counts out of `AGENTS.md`, `GOVERNANCE.md`,
`CODESTYLE.md`, `WORKFLOW.md`, the skill sources, and the hub-only
`scripts/README.md` and `scripts/handoff.py` docstring, which repeated
one of the same sentences.

Deliberately left as they are:

- Counts that are the contribution: caps, timeouts, limits.
- Pairs fixed by construction, such as the workflow models and the
`.editorconfig` and `.gitattributes` pair.
- Counts an ordinal structure later in the paragraph relies on ("the
first two ... the third").
- Counts inside section titles other text links to, which need a heading
rename. The rest of the sweep and those renames go to a follow-up issue.

`CODESTYLE.md` "General" and `pr-review-conduct` are unchanged, since
the `GOVERNANCE.md` section already governs code comments and the rule
itself states how a wrong count is fixed.

## Verification

- `scripts/build_dist.py --check`, `scripts/prose_lint.py --diff`,
`scripts/repo_gate.py --check eol`, `spec/validate.py`: clean.
- markdownlint, cspell, and editorconfig-checker through
`scripts/docker_lint.py`: clean.
- `python3 -m unittest discover -s tests`: 2887 tests OK, 7 skipped.
- The opt-in `sentence-length` check reports only sentences that were
over the cap before this branch and sit on a touched one-line paragraph.
None of them is new wording.
- `local-strict-review` ran three recorded passes. The first raised 14
findings and the second raised 1, almost all antecedents left dangling
by a removed count. All were fixed, and the final pass raised none.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Summary

A later revision of Copilot's second overview format opens each section
summary on its count and names findings issues. `pr_review.py` stopped
on each of these shapes with exit 43. It now reads them:

- `2 previously missed issues` is the previously-missed section, whose
findings open no thread. It is vetted, matched by `PREVIOUSLY_MISSED`,
and counted from its leading count, so `previously_missed=N` names each
finding.
- `1 open issue` and `N open issues` are the open-findings section under
a new noun. They map to the same role, so the section states the round's
total and each entry is checked against the threads.
- `**No open issues**` followed by an emoji is the bare stated zero,
which printed `?` before.

`heading_count` is now the one reader of a section heading's count,
`(N)` or leading, used by `finding_count`, `section_entries`, and
`sibling_heading`. `marker_blocks` accepts a non-heading line only on a
`(N)` and only where the line does not open on a count.

The comment stating the vetted list sizes is removed with the one test
that kept its count in sync, since the count went stale on every new
spelling.

Refs #3167
Refs #3170

## Verification

- `tests/test_pr_review.py`: 850 tests pass. Every new test fails
against the base script, and each later fix's test fails with that fix
reverted.
- ruff format and check, mypy, `prose_lint.py --diff` (default rules and
`--check sentence-length`), and `repo_gate.py --check eol` are clean.
- The shapes were confirmed against the real review bodies before
writing the fixtures. Every title, path, and sentence in the fixtures is
constructed.

## Open Local-Review Findings

The five findings the first push listed here were fixed in 9722c34,
e1d9f26, and b994110, which also answer the three Copilot threads. The
fix push's own final pass raised these, after its edit budget was spent,
each to get an outcome in this pull request's review loop.

1. `introduced`: `unrecognized_in` compares the count of vetted
previously-missed summaries with the count of blocks, while
`marker_blocks` returns at most one block per region. Two
previously-missed sections nested in one `Review details` wrapper then
report an unread shape, exit 43, where `develop` reads one block holding
both. The reverse can mask a miss. Not an observed shape. Outcome: filed
as #3174, by the maintainer's choice.
2. `introduced`: `HEADING_OPENER` reads past a finding entry's severity
badge and may now be followed by a count, so an entry titled `2
previously missed guards are re-added` inside another section reads as a
previously-missed section. An entry with no badge titled with a number
now bounds its section in `sibling_heading`. This is the class #3173
tracks, widened. Not an observed shape. Outcome: added to #3173, by the
maintainer's choice.
3. `introduced`, design: `heading_count` is a third composition of the
badge and emphasis reduction `normal` and `unwrap` also perform, and
`LEADING_COUNT` is a second definition of a leading count beside
`normal`'s. They differ on a form feed after the count. A shared
reduction would close the class. Outcome: filed as #3174, by the
maintainer's choice.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Copilot AI lite review requested due to automatic review settings October 17, 2026 13:39
@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: ptr727/ProjectTemplate/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 74b9e687-1d78-4252-a72c-be7ff8c01c35
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Three unresolved moderate parser findings must be addressed; one additional nit remains.

3 open issues
What changed in this PR

This PR promotes the incidental-count documentation rule and extends pr_review.py for count-first Copilot overview summaries, with synchronized tests and skill copies.

Changes:

  • Removes stale incidental counts from documentation and skills.
  • Adds parsing for previously missed issues, open issues, and stated zero findings.
  • Refreshes generated skill copies and source digests.

Review findings:

  • [P2, nit, 1 vote] .agents/skills/backlog-burndown/SKILL.md:333 uses an incorrect singular noun.
  • [P1, moderate, 2 votes] scripts/pr_review.py:3707 can mismatch nested previously-missed sections and blocks.
  • [P1, moderate, 2 votes] scripts/pr_review.py:2421 does not share heading normalization with count extraction.
  • [P1, moderate, 2 votes] scripts/pr_review.py:456 can treat finding entries as previously-missed markers.
File Description
WORKFLOW.md Removes incidental counts.
tests/​test_pr_review.py Adds parser regression tests.
scripts/​README.md Removes command-count claims.
scripts/​pr_review.py Extends overview parsing and count handling.
scripts/​handoff.py Removes incidental count wording.
CODESTYLE.md Removes incidental counts.
AGENTS.md Removes incidental counts.
.github/​skills/​workflow-ci-contract/​SKILL.md Updates workflow guidance.
.github/​skills/​workflow-ci-contract/​references/​test-methodology.md Updates methodology text.
.github/​skills/​unattended-handoff/​SKILL.md Removes incidental counts.
.github/​skills/​session-handoff/​SKILL.md Removes incidental counts.
.github/​skills/​repo-worktree/​SKILL.md Removes incidental counts.
.github/​skills/​python-codestyle/​references/​code-style.md Removes incidental counts.
.github/​skills/​merge-and-release/​SKILL.md Removes incidental counts.
.github/​skills/​local-strict-review/​SKILL.md Removes incidental counts.
.github/​skills/​git-commit-conventions/​references/​history-rewrite.md Removes incidental counts.
.github/​skills/​fleet-code-review/​SKILL.md Adds review guidance.
.github/​skills/​dotnet-codestyle/​SKILL.md Removes incidental counts.
.github/​skills/​comment-and-doc-style/​SKILL.md Adds the incidental-count rule.
.github/​skills/​comment-and-doc-style/​references/​carried-doc-references.md Removes incidental counts.
.github/​skills/​carried-instruction-file-guard/​SKILL.md Removes incidental counts.
.github/​skills/​branching-and-release-model/​references/​release-publish-mechanics.md Removes incidental counts.
.github/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Removes incidental counts.
.github/​skills/​backlog-burndown/​SKILL.md Removes incidental counts.
.github/​skills/​audit-a-repo/​SKILL.md Removes incidental counts.
.github/​skills/​agent-conduct/​SKILL.md Removes incidental counts.
.claude-plugin/​fleet-skills/​skills/​workflow-ci-contract/​SKILL.md Regenerates workflow guidance.
.claude-plugin/​fleet-skills/​skills/​workflow-ci-contract/​references/​test-methodology.md Regenerates methodology text.
.claude-plugin/​fleet-skills/​skills/​unattended-handoff/​SKILL.md Regenerates handoff guidance.
.claude-plugin/​fleet-skills/​skills/​session-handoff/​SKILL.md Regenerates handoff guidance.
.claude-plugin/​fleet-skills/​skills/​repo-worktree/​SKILL.md Regenerates worktree guidance.
.claude-plugin/​fleet-skills/​skills/​python-codestyle/​references/​code-style.md Regenerates Python guidance.
.claude-plugin/​fleet-skills/​skills/​merge-and-release/​SKILL.md Regenerates release guidance.
.claude-plugin/​fleet-skills/​skills/​local-strict-review/​SKILL.md Regenerates review guidance.
.claude-plugin/​fleet-skills/​skills/​git-commit-conventions/​references/​history-rewrite.md Regenerates Git guidance.
.claude-plugin/​fleet-skills/​skills/​fleet-code-review/​SKILL.md Regenerates review guidance.
.claude-plugin/​fleet-skills/​skills/​dotnet-codestyle/​SKILL.md Regenerates .NET guidance.
.claude-plugin/​fleet-skills/​skills/​comment-and-doc-style/​SKILL.md Regenerates documentation guidance.
.claude-plugin/​fleet-skills/​skills/​comment-and-doc-style/​references/​carried-doc-references.md Regenerates reference guidance.
.claude-plugin/​fleet-skills/​skills/​carried-instruction-file-guard/​SKILL.md Regenerates guard guidance.
.claude-plugin/​fleet-skills/​skills/​branching-and-release-model/​references/​release-publish-mechanics.md Regenerates release guidance.
.claude-plugin/​fleet-skills/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Regenerates promotion guidance.
.claude-plugin/​fleet-skills/​skills/​backlog-burndown/​SKILL.md Regenerates backlog guidance.
.claude-plugin/​fleet-skills/​skills/​audit-a-repo/​SKILL.md Regenerates audit guidance.
.claude-plugin/​fleet-skills/​skills/​agent-conduct/​SKILL.md Regenerates conduct guidance.
.claude-plugin/​fleet-skills/​.source-digests/​workflow-ci-contract Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​unattended-handoff Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​session-handoff Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​repo-worktree Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​python-codestyle Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​merge-and-release Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​local-strict-review Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​git-commit-conventions Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​fleet-code-review Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​dotnet-codestyle Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​comment-and-doc-style Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​carried-instruction-file-guard Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​branching-and-release-model Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​backlog-burndown Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​audit-a-repo Updates source digest.
.claude-plugin/​fleet-skills/​.source-digests/​agent-conduct Updates source digest.
.agents/​skills/​workflow-ci-contract/​SKILL.md Updates workflow guidance.
.agents/​skills/​workflow-ci-contract/​references/​test-methodology.md Updates methodology text.
.agents/​skills/​unattended-handoff/​SKILL.md Updates handoff guidance.
.agents/​skills/​session-handoff/​SKILL.md Updates handoff guidance.
.agents/​skills/​repo-worktree/​SKILL.md Updates worktree guidance.
.agents/​skills/​python-codestyle/​references/​code-style.md Updates Python guidance.
.agents/​skills/​merge-and-release/​SKILL.md Updates release guidance.
.agents/​skills/​local-strict-review/​SKILL.md Updates review guidance.
.agents/​skills/​git-commit-conventions/​references/​history-rewrite.md Updates Git guidance.
.agents/​skills/​fleet-code-review/​SKILL.md Updates review guidance.
.agents/​skills/​dotnet-codestyle/​SKILL.md Updates .NET guidance.
.agents/​skills/​comment-and-doc-style/​SKILL.md Adds the incidental-count rule.
.agents/​skills/​comment-and-doc-style/​references/​carried-doc-references.md Updates reference guidance.
.agents/​skills/​carried-instruction-file-guard/​SKILL.md Updates guard guidance.
.agents/​skills/​branching-and-release-model/​references/​release-publish-mechanics.md Updates release guidance.
.agents/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Updates promotion guidance.
.agents/​skills/​backlog-burndown/​SKILL.md Updates backlog guidance.
.agents/​skills/​audit-a-repo/​SKILL.md Updates audit guidance.
.agents/​skills/​agent-conduct/​SKILL.md Updates conduct guidance.

Review effort: Lite

Comment thread scripts/pr_review.py
Comment thread scripts/pr_review.py
Comment thread scripts/pr_review.py
@codecov

codecov Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.50000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 64.08%. Comparing base (a152f47) to head (8198ee0).
⚠️ Report is 391 commits behind head on main.

Files with missing lines Patch % Lines
scripts/pr_review.py 97.50% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3175      +/-   ##
==========================================
+ Coverage   63.97%   64.08%   +0.11%     
==========================================
  Files          17       17              
  Lines        9151     9183      +32     
==========================================
+ Hits         5854     5885      +31     
- Misses       3297     3298       +1     
Flag Coverage Δ
python-3.13 64.08% <97.50%> (+0.11%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…3177)

## Summary

Removing the incidental count in #3168 left "These kinds of group are
never tiered below `frontier`" in `backlog-burndown`, which Copilot
flagged on the promotion #3175 as an incorrect singular noun. It now
reads "Groups of these kinds are never tiered below `frontier`", which
still introduces the bullets that each open on "One touching" or "One
whose". The generated distributions are regenerated.

## Verification

- `scripts/build_dist.py --check` reports the distributions current.
- `prose_lint.py --diff` (default rules and `--check sentence-length`)
and markdownlint are clean.
- Local strict review: 0 findings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Three unresolved moderate findings require correction before approval.

No open issues 🎉

3 resolved since last review

Review effort: Lite

@ptr727

ptr727 commented Oct 17, 2026

Copy link
Copy Markdown
Owner Author

Answering the 8198ee0 round's headline, "Three unresolved moderate findings require correction before approval": the round states no open issue and lists the same three findings under "3 resolved since last review". Each was answered on its thread as real and deferred by the maintainer's choice on #3172, rather than fixed in a fifth round: "Exclude finding entries from count-first markers" is tracked in #3173, and "Share heading normalization for count extraction" and "Match previously missed sections by identity" in #3174. The fourth finding the previous round listed, the singular noun in backlog-burndown, was fixed by #3177, which this head carries.

@ptr727
ptr727 merged commit b6c53db into main Oct 17, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants