docs: close #221, reconcile status notes with shipped #227-229 and #238/#240#242
Conversation
Parent issue #221 (self-owned-source exemption too narrow) is closed: all three child shapes shipped and merged (#227/PR#237, #228/PR#232, #229/PR#239), verified against live GitHub state and the extractor source rather than trusted from prior task summaries. field-notes-patterns.md entry 15's status line only listed shapes (a) and (c) as shipped, silently omitting the already-merged (b) — corrected to list all three with their PRs. entry 19 (issue #225's empty-Dispose exemption) never recorded the #238 soundness regression (source-empty Dispose != runtime no-op under Janitor.Fody weaving) or the #240 fix that narrowed the gate to IEnumerator-implementing types — added as an explicitly-marked superseding addendum, keeping the original #225 writeup intact per the notebook's historical-record convention. precision-remeasure-2026-07-11.md's "still open" claim about #219 and its ClosedXML follow-up items are now stale (#219 shipped via PR #236; the two follow-ups became #238/PR#240) — marked as superseded in place, original analysis untouched.
|
Warning Review limit reached
Next review available in: 59 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughDocumentation updates record additional shipped source coverage, a narrowed empty-dispose exemption after a soundness regression, expanded detection cases, and follow-up resolution references across the field-notes and precision-remeasurement notes. ChangesDocumentation precision updates
Estimated code review effort: 1 (Trivial) | ~3 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/notes/field-notes-patterns.md`:
- Around line 721-724: Update the documentation around HasEmptyDisposeBody to
state that its exemption applies only to types implementing
System.Collections.Generic.IEnumerator<T>, excluding plain
System.Collections.IEnumerator; apply the same precise wording to the matching
phrase in precision-remeasure-2026-07-11.md.
- Around line 729-730: Update the documentation around the qualifying enumerator
coverage statement to remove `DisposeAsync()` from the empty-body exemption and
accurately state that async disposable implementations, including declared or
explicit `DisposeAsync()`, reject the exemption; retain the documented
recognition of explicit-interface synchronous `Dispose()`.
In `@docs/notes/precision-remeasure-2026-07-11.md`:
- Around line 225-226: Update the wording in the precision remeasurement note to
state that the exemption is limited to types implementing
System.Collections.Generic.IEnumerator<T>, not all types implementing
non-generic IEnumerator; keep the terminology consistent with entry 19 in
field-notes-patterns.md.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 4a35c5d9-ee2b-4193-aabe-e10f23ef21df
📒 Files selected for processing (2)
docs/notes/field-notes-patterns.mddocs/notes/precision-remeasure-2026-07-11.md
Two wording inaccuracies flagged on PR #242, both verified against frontend/roslyn/OwnSharp.Extractor/Program.cs HasEmptyDisposeBody: - The #240 gate matches only the generic System.Collections.Generic. IEnumerator<T> (checked by name + TypeArguments.Length == 1 + namespace), not the non-generic System.Collections.IEnumerator. Fixed in both docs/notes/field-notes-patterns.md entry 19 and docs/notes/precision-remeasure-2026-07-11.md's resolution addendum. - DisposeAsync() is not "recognized as empty" — any IAsyncDisposable or bare DisposeAsync (declared, explicit-impl, or inherited) disqualifies the exemption outright. Only explicit-interface synchronous Dispose() is recognized as empty (the actual #238 coverage-gap fix).
|
Fixed both wording inaccuracies flagged in review (9d39b8c), verified against
Generated by Claude Code |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Что и зачем
Phase 1 of a repository-state cleanup: reconciles live GitHub issue state with repo documentation after the recently-merged precision batch (#227/#228/#229 under parent #221) and the #238/#240 soundness hotfix.
Verified live state first (not trusted from prior task summaries):
Doc corrections (append-only, no history rewritten):
docs/notes/field-notes-patterns.mdentry 15 status line listed only shapes (a) and (c) as shipped, silently omitting the already-merged (b) (Self-owned source (b): Application-derived subscriber with a curated app-scoped source (careful clsIsApp loosening) #228/PR fix(extractor): curated app-scoped source exemption for the Application subscriber (Closes #228) #232) — corrected to list all three with PR references.docs/notes/field-notes-patterns.mdentry 19 (issue Precision gap: no-op Dispose() exemption limited to named BCL types, doesn't cover user-defined empty Dispose bodies #225's empty-Dispose exemption) had no record anywhere in the notebook of the Soundness regression from #225: empty-Dispose exemption trusts source emptiness, but IL weaving (Janitor.Fody) adds real cleanup — 263 silent exemptions in ClosedXML (+ explicit-interface Dispose coverage gap) #238 soundness regression (source-emptyDispose()isn't a runtime no-op under Janitor.Fody IL weaving) or the fix(extractor): confine the empty-Dispose exemption to enumerators — source emptiness ≠ runtime no-op (Closes #238) #240 fix that narrowed the gate toIEnumerator-implementing types — added as an explicitly-marked superseding addendum; the original Precision gap: no-op Dispose() exemption limited to named BCL types, doesn't cover user-defined empty Dispose bodies #225 writeup is untouched.docs/notes/precision-remeasure-2026-07-11.md: the "Precision gap: WinForms Controls/ToolStripItemCollection membership and IContainer registration not recognized as disposal channels #219 ... still open" claim and the ClosedXML follow-up action items are now stale (Precision gap: WinForms Controls/ToolStripItemCollection membership and IContainer registration not recognized as disposal channels #219 shipped via PR fix(extractor): recognize WinForms Controls/IContainer disposal channels (Closes #219) #236; the follow-ups became Soundness regression from #225: empty-Dispose exemption trusts source emptiness, but IL weaving (Janitor.Fody) adds real cleanup — 263 silent exemptions in ClosedXML (+ explicit-interface Dispose coverage gap) #238/PR fix(extractor): confine the empty-Dispose exemption to enumerators — source emptiness ≠ runtime no-op (Closes #238) #240) — marked superseded in place with pointers forward, original analysis untouched.No analyzer behavior changes. No broad documentation refactor — only the specific stale claims found by cross-checking live issue/PR state against
docs/notes/.Тип изменения
Как проверено
python tests/run_tests.py— 276/276, all suites greenruff check .— all checks passedmypy— no issues in 20 source filesСвязанные issue
Closes #221. Refs #219, #227, #228, #229, #235, #238, #240.
Чеклист
Program.cs) that the documented shapes are actually implementeddocs:)Generated by Claude Code
Summary by CodeRabbit