Skip to content

Skip a Blockquoted List Marker in the Prose Gate's Semicolon Rule - #2128

Merged
ptr727 merged 1 commit into
developfrom
feature/auto-2101
Sep 30, 2026
Merged

ptr727 merged 1 commit into
developfrom
feature/auto-2101

Conversation

@ptr727

@ptr727 ptr727 commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Summary

The prose gate's semicolon rule read a blockquoted bullet's **Label**: opener as a colon announcing a list, so a spliced semicolon on that bullet passed. LABEL_COLON is anchored at the line start and does not see a list marker after a > prefix, the root cause the dash rule's QUOTE_PREFIX blanking already handles.

  • check_file now blanks the quote prefix once, before both Markdown prose rules, and the semicolon rule's list_spans reads that unquoted line. The dash rule reads the same value it did before.
  • A blockquoted table row is split into cells the same way an unquoted one is, since the table check in list_spans reads the same unquoted line.
  • Tests cover each row of the issue's reproduction table, nested and ordered quoted bullets, a quoted list that keeps its exemption, and a quoted table row.

Closes on promotion: #2101

Verification

  • python3 -m unittest discover -s tests: 1859 tests pass.
  • With the fix reverted, the new label-bullet and table-row tests fail (5 subtests), and pass with it restored.
  • Semicolon findings over every tracked Markdown file are identical at the merge base and at this head, so no existing file changes result.
  • ruff format and check, mypy, prose gate (diff-scoped), eol gate, spec/validate.py: pass.
  • local-strict-review: one pass over the full diff, 0 findings.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Improved prose checks in blockquoted Markdown: label-colon bullets are flagged appropriately, existing list exemptions are preserved, and table cells are checked independently.
    • Semicolon and dash checks now evaluate the relevant unquoted text and list content, helping produce more consistent documentation validation results.

The semicolon rule read a blockquoted bullet's `**Label**:` opener as a
colon announcing a list, since LABEL_COLON is anchored at the line start
and does not see a marker after `>`. The quote prefix is now blanked
once, before both prose rules, so a quoted line is judged as the same
line unquoted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings September 30, 2026 06:51
@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: ptr727/ProjectTemplate/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 1ed59e75-5465-4eeb-817b-eb221477d1ed

📥 Commits

Reviewing files that changed from the base of the PR and between 1a23b37 and 615686f.

📒 Files selected for processing (2)
  • .github/actions/prose-gate/prose_lint.py
  • tests/test_prose_lint.py

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The prose linter now removes blockquote prefixes before semicolon and dash checks. Added tests cover label-colon constructs, comma-separated list exemptions, and semicolon handling in blockquoted table cells.

Changes

Prose lint behavior

Layer / File(s) Summary
Normalize prose and check semicolons
.github/actions/prose-gate/prose_lint.py, tests/test_prose_lint.py
The semicolon check receives unquoted prose and evaluates list spans from that text. The dash check uses the same unquoted text. Tests cover blockquoted and unquoted label-colon constructs, a comma-separated list exemption, and independent checks of blockquoted table cells.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~8 minutes

Merge Risk: ⚪ Minimal · up to 61568

The change narrowly adjusts prose checks for blockquotes, with tests covering the stated semicolon cases. No merge-blocking behavior or integration risk is evident.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: updating the prose gate semicolon rule to handle blockquoted list markers correctly.
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 2 files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

@codecov

codecov Bot commented Sep 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (develop@1a23b37). Learn more about missing BASE report.

Additional details and impacted files
@@            Coverage Diff             @@
##             develop    #2128   +/-   ##
==========================================
  Coverage           ?   56.47%           
==========================================
  Files              ?       16           
  Lines              ?     7455           
  Branches           ?        0           
==========================================
  Hits               ?     4210           
  Misses             ?     3245           
  Partials           ?        0           
Flag Coverage Δ
python-3.13 56.47% <ø> (?)

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.

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.

Copilot review overview

🟢 Approval recommended

The two-line behavioral change is narrowly scoped, leaves the dash rule provably identical, and is fully covered by new tests whose expected outcomes I independently verified.

Review effort: Balanced
Findings: None

What changed in this PR

This PR fixes a false negative in the prose gate's semicolon rule (.github/actions/prose-gate/prose_lint.py). The rule previously read a blockquoted bullet's **Label**: opener as announcing a list, so a spliced semicolon on a > - **Label**: ... line was wrongly excused. The root cause is the same one the dash rule already handles: LABEL_COLON (and the table-cell split in list_spans) is anchored at line start and cannot see a list marker that follows a > blockquote prefix. The fix hoists the existing QUOTE_PREFIX blanking so it runs once before both Markdown prose rules, and feeds the blanked line into list_spans for the semicolon rule.

Changes:

  • Compute unquoted (blockquote prefix blanked) once before both the semicolon and dash rules, and pass it to list_spans in the semicolon path so blockquoted bullets and table rows are judged as if unquoted.
  • Leave the dash rule reading the identical unquoted value it computed before, so its behavior is unchanged.
  • Add tests covering each reproduction row, nested/ordered quoted bullets, a quoted list that keeps its exemption, and quoted vs unquoted table rows.
File Description
.github/​actions/​prose-gate/​prose_lint.py Moves QUOTE_PREFIX blanking ahead of both prose rules and switches the semicolon rule's list_spans input from prose to unquoted, fixing the blockquoted-label false negative without changing the dash rule.
tests/​test_prose_lint.py Adds three test methods asserting blockquoted label bullets are flagged, blockquoted non-list lines keep their exemptions, and blockquoted table rows are judged per cell.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727

ptr727 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@ptr727
ptr727 merged commit 9f1c07a into develop Sep 30, 2026
11 checks passed
@ptr727
ptr727 deleted the feature/auto-2101 branch September 30, 2026 07:02
ptr727 added a commit that referenced this pull request Sep 30, 2026
… a Second Site's Verify Token Pair, With Fifteen More (#2175)

## Summary

Promotes develop to main, carrying these pull requests:

- [#2172](#2172) Accept
Letters in Recorded Names in the Charset Rule and Prose Gate
- [#2173](#2173) Forward a
Second Site's Token Pair to the Deploy-Site Verify Hook
- [#2169](#2169) Record
HomeAutomation-Config's Merge-Bot and Gate Adoption in the Rollout
Tracking
- [#2164](#2164) Pass
--no-project to the Pre-Commit Snippet's uv run Hooks
- [#2161](#2161) Stop
Crediting an until read Loop as Bounded in the Guard
- [#2158](#2158) Drop the
Path Argument From the Pre-Commit Snippet's Mypy Swap
- [#2155](#2155) Reword
the Canonical CRLF-Exception Comments for a Carrier's Own Pin
- [#2153](#2153) End the
Guard's Stdin Redirect Scan at a Reserved Word
- [#2150](#2150) Describe
the Pip Form Consistently Across python-codestyle
- [#2144](#2144) Read the
Run Id From the Runner's Environment in the Artifact-Cleanup Steps
- [#2142](#2142) Diff a
Merge Commit's Prose Against Its Merged-In Parent in the Pre-Commit Hook
- [#2136](#2136) Qualify
the Local Review Skill's Merge-Base Command to Match the Engine
- [#2134](#2134) Quote the
Bare Placeholder in skills_install.py's Usage Block
- [#2132](#2132) Write the
Hub-Checkout Reach Into the session-handoff Chain Commands
- [#2130](#2130) Name the
Missing build-system Condition in the Lint-Only Profile Bullet
- [#2128](#2128) Skip a
Blockquoted List Marker in the Prose Gate's Semicolon Rule
- [#2119](#2119) State the
Three Gaps D4.7's Supersede-and-Dispatch Step Leaves Open

## Closes

Closes #2100
Closes #2031
Closes #1779
Closes #2148
Closes #1633
Closes #1188
Closes #1992
Closes #2032
Closes #2052
Closes #1481
Closes #2116
Closes #2107
Closes #2097
Closes #1512
Closes #2026
Closes #2101
Closes #2009

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


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Deployment verification can now check a second site using its own
optional authentication token.
* **Documentation**
* Updated writing guidance to preserve the spelling and diacritics of
recorded names.
* Clarified Python project setup, formatting and testing guidance, and
line-ending rules.
* Expanded deployment and publishing guidance, including scenarios where
publishing runs overlap.
* **Bug Fixes**
* Prose checks now handle quoted lists and tables more accurately, and
merge checks avoid flagging comments brought in from the merged branch.
  * Improved checks for shell loops that read redirected input.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants