Conversation
|
Thanks for opening this, but we'd appreciate a little more information. Could you update it with more details? |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (3)
📝 WalkthroughWalkthroughAdds 44 .claude skill documentation files and implements modern push-sound mapping: new PushSoundTypes and PushSoundFile mapping, provider changes, department setting and UI/controller wiring, DepartmentSettingsService support, push service sound selection, and CLAUDE/.gitignore updates. ChangesClaude .NET Skills Documentation Library
Push Sound File Modernization & Department Settings
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Actionable comments posted: 2
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🟡 Minor comments (29)
.claude/skills/ci-cd/SKILL.md-211-211 (1)
211-211:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse hyphenated compound adjective in table entry.
At Line 211, change “Open source project” to “Open-source project” for correct compound-adjective usage.
🤖 Prompt for 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. In @.claude/skills/ci-cd/SKILL.md at line 211, Update the table entry string "Open source project" to the hyphenated compound adjective form "Open-source project" in the SKILL.md table row (replace the exact text "Open source project" with "Open-source project")..claude/skills/aspire/SKILL.md-116-127 (1)
116-127:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winLabel the solution-structure code fence language.
The fenced block is missing a language identifier (MD040). Use something like
textfor the tree example.🤖 Prompt for 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. In @.claude/skills/aspire/SKILL.md around lines 116 - 127, The fenced code block that shows the solution tree (the block starting with "MyApp.slnx" and containing entries like "MyApp.AppHost/" and "MyApp.Api/") is missing a language identifier; update the triple-backtick fence to include a language (for example use ```text) so the example satisfies MD040 and renders as plain text..claude/skills/architecture-advisor/SKILL.md-100-109 (1)
100-109:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify language for fenced examples.
These code fences are missing language tags and trigger markdownlint MD040. Add fence languages (
text,csharp, etc.) to keep documentation lint-clean.Also applies to: 117-124, 132-139, 147-155, 175-187, 190-205, 208-223, 226-236
🤖 Prompt for 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. In @.claude/skills/architecture-advisor/SKILL.md around lines 100 - 109, Update the fenced code blocks in SKILL.md to include explicit language tags (e.g., use ```text or ```csharp) so Markdown lint MD040 is satisfied; locate the example blocks such as the project tree snippet and other fenced examples (around the shown block that lists src/MyApp.Api/... and the other ranges noted) and add the appropriate language identifier for each fenced fence so they render and lint correctly..claude/skills/80-20-review/SKILL.md-31-75 (1)
31-75:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd language identifiers to fenced code blocks.
Several fenced blocks are unlabeled, which triggers markdownlint MD040 and keeps docs lint-noisy. Please add explicit fence languages (for example
text,bash,csharp) for these sections.Also applies to: 81-114, 120-148, 154-186, 192-204, 210-220, 224-233, 237-247, 251-261
🤖 Prompt for 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. In @.claude/skills/80-20-review/SKILL.md around lines 31 - 75, Several fenced code blocks in SKILL.md lack language identifiers, causing markdownlint MD040 failures; update each unlabeled triple-backtick block (e.g., the fenced examples under CHECKPOINT 1, CHECKPOINT 2, CHECKPOINT 3, CHECKPOINT 4 and the other noted ranges) to include an appropriate language tag such as text, bash, or csharp. Search for the fenced blocks in the file (look for lines starting with ``` near the CHECKPOINT headings and the ranges 81-114, 120-148, 154-186, 192-204, 210-220, 224-233, 237-247, 251-261) and replace the opening ``` with ```text, ```bash, or ```csharp as appropriate for the snippet content so markdownlint MD040 is satisfied. Ensure you only change the opening fence, keep the block contents intact, and run the linter to verify the warnings are resolved..claude/skills/autonomous-loops/SKILL.md-33-69 (1)
33-69:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd explicit languages on all fenced blocks.
This file has many unlabeled fences, which triggers markdownlint MD040 repeatedly. Please tag each block (
text,bash,csharp, etc.) to eliminate lint warnings.Also applies to: 73-85, 91-129, 133-145, 151-189, 195-228, 234-251, 257-280, 286-297, 303-313, 316-328, 332-343, 346-363, 366-377
🤖 Prompt for 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. In @.claude/skills/autonomous-loops/SKILL.md around lines 33 - 69, The unlabeled fenced code blocks (notably the "BUILD-FIX LOOP" block) are triggering markdownlint MD040; update every triple-backtick fence in the file to include an explicit language tag (e.g., ```bash, ```text, ```csharp) so the linter recognizes them; scan the file for all unlabeled fences (including the other similar blocks referenced in the review) and replace each opening fence with the appropriate language identifier consistent with the block content..claude/skills/context-discipline/SKILL.md-34-34 (1)
34-34:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd explicit language tags to unlabeled fenced blocks.
These fences should include a language (
text,bash,markdown, etc.) to satisfy MD040 and keep rendering/lint behavior consistent.Also applies to: 59-59, 76-76, 95-95, 107-107, 129-129, 148-148, 160-160, 175-175, 188-188
🤖 Prompt for 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. In @.claude/skills/context-discipline/SKILL.md at line 34, Several fenced code blocks in SKILL.md are unlabeled and violate MD040; update each backtick-fenced block (e.g., the fences currently around the examples at the noted locations) to include an explicit language tag such as "text", "bash", or "markdown" as appropriate. Locate the unlabeled triple-backtick blocks in .claude/skills/context-discipline/SKILL.md (including the occurrences called out) and change ``` to something like ```text or ```bash depending on the block content so each fenced block has an explicit language tag to satisfy the linter..claude/skills/de-sloppify/SKILL.md-52-52 (1)
52-52:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd language specifiers to fenced code blocks.
These unlabeled fences should include explicit language tags to pass MD040 and improve editor rendering.
Also applies to: 66-66, 71-71, 102-102, 143-143, 197-197, 210-210, 226-226, 239-239, 253-253
🤖 Prompt for 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. In @.claude/skills/de-sloppify/SKILL.md at line 52, Update the unlabeled fenced code blocks in SKILL.md by adding explicit language specifiers (e.g., ```bash, ```json, ```python, etc.) so they pass MD040 and render correctly; specifically update the fences at the reported locations (around lines 52, 66, 71, 102, 143, 197, 210, 226, 239, 253) to use the appropriate language tag matching the snippet content (choose the tag that matches the code sample in each fenced block)..claude/skills/convention-learner/SKILL.md-28-28 (1)
28-28:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winLabel fenced code blocks with languages.
Please add language identifiers to these code fences to resolve markdownlint MD040 warnings.
Also applies to: 38-38, 58-58, 124-124, 146-146, 155-155, 173-173, 179-179, 187-187, 193-193, 201-201, 207-207, 215-215, 220-220
🤖 Prompt for 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. In @.claude/skills/convention-learner/SKILL.md at line 28, Add language identifiers to the fenced code blocks in SKILL.md where unlabeled fences appear (e.g., the fence at the snippet around line 28 and the other occurrences listed) so markdownlint MD040 warnings are resolved; locate each triple-backtick block (``` ... ```) in .claude/skills/convention-learner/SKILL.md and append the appropriate language token (e.g., ```js, ```ts, ```json, ```bash, etc.) that matches the block content for the fences at the reported positions (28, 38, 58, 124, 146, 155, 173, 179, 187, 193, 201, 207, 215, 220)..claude/skills/code-review-workflow/SKILL.md-35-35 (1)
35-35:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify languages for all fenced code blocks missing one.
Several fenced blocks omit a language tag; adding
text,bash, ormarkdownas appropriate will resolve MD040 lint warnings.Also applies to: 48-48, 54-54, 61-61, 142-142, 149-149, 161-161, 167-167, 176-176, 183-183, 192-192, 198-198, 209-209, 214-214
🤖 Prompt for 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. In @.claude/skills/code-review-workflow/SKILL.md at line 35, Multiple fenced code blocks in SKILL.md are missing language tags causing MD040 lint warnings; edit each unnamed triple-backtick block and add an appropriate language identifier (e.g., "text", "bash", or "markdown") so the linter recognizes the block type. Locate the unnamed fenced blocks in the document (the examples and inline snippets) and update their opening ``` to ```text, ```bash, or ```markdown as appropriate to the content, then run the markdown lint to confirm the MD040 warnings are resolved..claude/skills/clean-architecture/SKILL.md-26-26 (1)
26-26:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd a language identifier to the fenced code block.
The fence should specify a language (e.g.,
text) to satisfy markdown linting and keep docs tooling consistent.🤖 Prompt for 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. In @.claude/skills/clean-architecture/SKILL.md at line 26, Add a language identifier to the fenced code block in SKILL.md: locate the triple-backtick fence shown in the diff (the fenced code block around line 26) and change the opening fence from ``` to include a language (for example ```text or ```md), keeping the closing ``` unchanged so markdown linters and docs tooling recognize the block language..claude/skills/docker/SKILL.md-63-72 (1)
63-72:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd fenced code language for
.dockerignoreexample.This block is missing a language identifier (
```textis sufficient) and will trip markdownlint (MD040).🤖 Prompt for 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. In @.claude/skills/docker/SKILL.md around lines 63 - 72, The fenced code block showing the .dockerignore example lacks a language identifier and trips markdownlint MD040; update the triple-backtick fence around that block (the .dockerignore example containing entries like **/.git, **/.vs, **/node_modules, **/Dockerfile*, etc.) to include a language tag such as ```text so the block is properly marked and the linter passes..claude/skills/instinct-system/SKILL.md-33-56 (1)
33-56:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify languages on fenced blocks to satisfy markdownlint.
These fenced blocks are missing language identifiers (MD040). Add
text/markdownwhere code language is not applicable.Also applies to: 82-103, 107-113, 121-139, 145-170, 180-187, 193-206, 210-218, 222-231, 235-246
🤖 Prompt for 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. In @.claude/skills/instinct-system/SKILL.md around lines 33 - 56, Fenced code blocks in SKILL.md (for example the block beginning with "1. OBSERVE" and the other blocks at the ranges referenced: 82-103, 107-113, 121-139, 145-170, 180-187, 193-206, 210-218, 222-231, 235-246) are missing language identifiers (MD040); update each triple-backtick fence to include an appropriate identifier such as ```text or ```markdown (use `text` when no specific language applies) so every fenced block has a language tag, then re-run markdownlint to verify MD040 is resolved..claude/skills/learning-log/SKILL.md-53-77 (1)
53-77:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd fenced code block languages (MD040).
Multiple fenced blocks are unlabeled; please add language tags (
text,markdown, etc.) to keep markdownlint passing.Also applies to: 83-90, 96-108, 114-132, 138-150, 154-164, 168-179, 183-191
🤖 Prompt for 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. In @.claude/skills/learning-log/SKILL.md around lines 53 - 77, The fenced code blocks that list TRIGGER items are missing language labels (MD040); update each fenced block in the document (e.g., the multi-line block containing "TRIGGER 1: Non-Obvious Bug Root Cause" through "TRIGGER 6: Non-Obvious Configuration") to include an appropriate language tag (for example use "text" or "markdown" after the opening ```), and apply the same change to the other unlabeled fenced blocks referenced in the review so markdownlint MD040 no longer flags them. Ensure each opening fence becomes ```text or ```markdown consistently and run markdownlint to verify the warnings are resolved..claude/skills/health-check/SKILL.md-34-37 (1)
34-37:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd language identifiers to fenced code blocks.
Several fenced blocks are missing language annotations and will fail markdownlint MD040. Please tag them (
text,bash, ormarkdownas appropriate).Also applies to: 48-51, 65-69, 80-83, 97-100, 113-116, 133-137, 148-151, 219-231, 254-265, 269-277, 281-290, 294-305
🤖 Prompt for 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. In @.claude/skills/health-check/SKILL.md around lines 34 - 37, Several fenced code blocks in SKILL.md are missing language identifiers (e.g., the block containing "Tool: dotnet build --no-restore" and the other blocks mentioned), which triggers markdownlint MD040; update each triple-backtick fence to include the appropriate language tag (for example mark command lines like "Tool: dotnet build --no-restore" as bash, plain output-only blocks as text, and any Markdown snippets as markdown). Locate the offending fences in .claude/skills/health-check/SKILL.md by searching for triple-backtick blocks and add the correct language identifier after the opening ``` for each block (e.g., ```bash, ```text, or ```markdown) so all listed blocks and remaining fences validate..claude/skills/opentelemetry/SKILL.md-57-60 (1)
57-60:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify fence languages for environment-variable blocks.
Both fenced blocks are missing language tags (MD040). Mark them as
bashortextto satisfy markdownlint.Suggested fix
-``` +```bash OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 OTEL_SERVICE_NAME=MyApp.Api...
-+bash
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317Also applies to: 171-173
🤖 Prompt for 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. In @.claude/skills/opentelemetry/SKILL.md around lines 57 - 60, Add a language tag to the markdown fenced code blocks that contain the environment variables (the blocks showing "OTEL_EXPORTER_OTLP_ENDPOINT=..." and "OTEL_SERVICE_NAME=MyApp.Api" and the later block with "OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317") to satisfy MD040; change the opening fences from ``` to ```bash (or ```text) so the blocks are tagged as shell/environment content..claude/skills/model-selection/SKILL.md-33-60 (1)
33-60:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd language identifiers to plain fenced blocks.
These fenced blocks are missing language tags (MD040). Please label them (e.g.,
text) to prevent markdownlint warnings.Suggested pattern
-``` +```text ROUTINE TASKS → Sonnet 4.6 ...</details> Also applies to: 66-87, 91-99, 105-125, 131-140, 144-154, 158-174 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/skills/model-selection/SKILL.md around lines 33 - 60, Add explicit
language identifiers to all plain fenced code blocks in SKILL.md (the blocks
under the ROUTINE TASKS / COMPLEX TASKS / SIMPLE TASKS sections) to satisfy
MD040; change each openingtotext (or ```md if you prefer markdown
highlighting) so each fenced block is labeled, and re-run markdownlint to
confirm the warnings are resolved.</details> </blockquote></details> <details> <summary>.claude/skills/migration-workflow/SKILL.md-152-156 (1)</summary><blockquote> `152-156`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_ **Add a language tag to the fenced block at Line 152.** The block is missing a fence language (MD040). Use `text` (or a specific language) to keep markdownlint clean. <details> <summary>Suggested fix</summary> ```diff -``` +```text → get_project_graph List all projects and their target frameworks. Flag: mixed TFMs, test projects on different versions. ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/skills/migration-workflow/SKILL.md around lines 152 - 156, The
fenced code block that starts with "→ get_project_graph" is missing a language
tag (MD040); update the triple-backtick fence to include a language identifier
such as text (e.g., changetotext) so the block becomes a labeled text
block and markdownlint passes, ensuring the content lines "→ get_project_graph",
"List all projects and their target frameworks.", and "Flag: mixed TFMs, test
projects on different versions." remain unchanged.</details> </blockquote></details> <details> <summary>.claude/skills/scalar/SKILL.md-57-60 (1)</summary><blockquote> `57-60`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_ **Use one spelling consistently for “prefill/pre-fill”.** The document mixes both variants; pick one for consistency. Also applies to: 173-174 <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/skills/scalar/SKILL.md around lines 57 - 60, The file uses both "prefill" and "pre-fill"; pick one spelling and make it consistent across the document (e.g., change all occurrences to "prefill" or all to "pre-fill"). Update the heading "Authentication Prefill (Development Only)" and the other occurrences referenced (around lines with the same phrase, e.g., the block at 57-60 and the occurrences around 173-174) so all instances of the term match exactly. ``` </details> </blockquote></details> <details> <summary>.claude/skills/self-correction-loop/SKILL.md-32-56 (1)</summary><blockquote> `32-56`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_ **Label unlabeled fences with a language (MD040).** Several fenced blocks are missing language identifiers. <details> <summary>Suggested fix</summary> ```diff -``` +```text 1. DETECT — User says something like: ... ``` -``` +```text SPECIFIC CORRECTION: ... ``` -``` +```text AUDIT CHECKLIST: ... ``` -``` +```text // BAD — user corrects, Claude fixes but doesn't capture ... ``` -``` +```text // BAD — rule is too narrow to be useful ... ``` -``` +```text // BAD — 50 rules captured, none ever reviewed ... ``` -``` +```text // BAD — temporary state saved as permanent memory ... ``` ``` </details> Also applies to: 86-99, 105-112, 122-133, 137-143, 147-155, 159-165 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/skills/self-correction-loop/SKILL.md around lines 32 - 56, The
fenced code blocks in SKILL.md (sections like the DETECT / ACKNOWLEDGE /
GENERALIZE / CHECK / STORE / CONFIRM steps and the example BAD blocks) are
missing language identifiers which triggers MD040; update each triple-backtick
fence to include a language token (use "text" or "md" as appropriate) so the
blocks are labeled (e.g., changetotext for the
DETECT/ACKNOWLEDGE/GENERALIZE lists and the SPECIFIC CORRECTION / AUDIT
CHECKLIST and BAD examples), and apply the same change to the other listed
ranges (86-99, 105-112, 122-133, 137-143, 147-155, 159-165) to ensure all fenced
blocks are consistently labeled.</details> </blockquote></details> <details> <summary>.claude/skills/security-scan/SKILL.md-61-79 (1)</summary><blockquote> `61-79`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_ **Add missing language tags to fenced blocks (MD040).** Multiple blocks are unlabeled; adding tags will satisfy lint and improve readability. <details> <summary>Suggested fix</summary> ```diff -``` +```text HIGH-CONFIDENCE PATTERNS ... ``` -``` +```text A03:2021 — Injection ... ``` -``` +```text CHECKLIST: ... ``` -``` +```text CHECKS: ... ``` -``` +```text # BAD — NuGet packages are clean, declare victory ... ``` -``` +```text # BAD — alert fatigue from over-classification ... ``` -``` +```text # BAD — flagging test fixtures as security issues ... ``` -``` +```text # BAD — finding without a fix ... ``` ``` </details> Also applies to: 97-126, 132-154, 235-253, 310-324, 328-338, 342-350, 354-365 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/skills/security-scan/SKILL.md around lines 61 - 79, The markdown
contains unlabeled fenced code blocks (e.g., the blocks starting with
"HIGH-CONFIDENCE PATTERNS", "A03:2021 — Injection", "CHECKLIST", "CHECKS", and
the several "# BAD — ..." examples) which trigger MD040; update each unlabeled
triple-backtick block in .claude/skills/security-scan/SKILL.md to include an
appropriate language tag (usetextfor plain prose/code-like lists or a
specific language if one fits) so the fences become e.g.text ..., and
apply the same change to the other unlabeled blocks referenced in the comment
ranges (97-126, 132-154, 235-253, 310-324, 328-338, 342-350, 354-365).</details> </blockquote></details> <details> <summary>.claude/skills/project-structure/SKILL.md-26-46 (1)</summary><blockquote> `26-46`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_ **Specify languages for unlabeled fenced blocks (MD040).** Two code fences are missing language identifiers. <details> <summary>Suggested fix</summary> ```diff -``` +```text MyApp/ ... ``` -``` +```text # BAD — tests mixed with source ... ``` ``` </details> Also applies to: 181-192 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/skills/project-structure/SKILL.md around lines 26 - 46, The markdown
has two fenced code blocks missing language identifiers — the directory tree
example (the MyApp/ tree block) and the "BAD — tests mixed with source" example
— so update each opening triple-backtick to include a language label (e.g.,closing backticks remain unchanged..claude/skills/project-setup/SKILL.md-86-89 (1)
86-89:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd fence languages to unresolved code blocks (MD040).
Several fenced blocks omit a language tag, which triggers markdownlint and reduces rendering clarity.
Suggested fix
-``` +```text → get_project_graph Analyze: project count, dependency direction, target frameworks, naming consistency-
+text
→ detect_antipatterns (scope: solution)
Count and categorize: async void, sync-over-async, DateTime.Now, new HttpClient(), etc.-``` +```text → get_diagnostics (severity: warning, scope: solution) Count warnings by category: CS8600 (nullability), CS0219 (unused vars), etc.-
+text
→ find_dead_code (scope: solution)
Identify unused types, methods, and properties that can be removed.-``` +```text → get_test_coverage_map Check: test project exists, percentage of types with corresponding tests.-
+markdownCodebase Health Report
...
-``` +```text # BAD — Generating CLAUDE.md without asking about the project "Here's your CLAUDE.md with VSA architecture..."-
+textGOOD — Running the full questionnaire first
...
-``` +```text # BAD — Reading random files and guessing at quality "I read Program.cs and it looks fine..."-
+textGOOD — Systematic analysis with MCP tools
...
Also applies to: 92-95, 98-101, 104-107, 110-113, 119-137, 154-157, 159-164, 186-189, 191-199
🤖 Prompt for 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. In @.claude/skills/project-setup/SKILL.md around lines 86 - 89, Several fenced code blocks (e.g., the blocks containing "→ get_project_graph", "→ detect_antipatterns (scope: solution)", "→ get_diagnostics (severity: warning, scope: solution)", "→ find_dead_code (scope: solution)", "→ get_test_coverage_map", and the "## Codebase Health Report" and BAD/GOOD examples) lack a language tag; update each triple-backtick fence to include an appropriate language (for example use ```text for plain lists and ```markdown for the "## Codebase Health Report" heading) so markdownlint MD040 is satisfied and rendering is correct; search for the shown snippet texts to locate each fence and add the language tag consistently across the other ranges noted (92-95, 98-101, 104-107, 110-113, 119-137, 154-157, 159-164, 186-189, 191-199)..claude/skills/vertical-slice/SKILL.md-25-25 (1)
25-25:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd missing fenced-block language tags.
These two structural example blocks are missing language specifiers; using
textis sufficient and removes MD040.Also applies to: 187-187
🤖 Prompt for 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. In @.claude/skills/vertical-slice/SKILL.md at line 25, Two fenced code blocks are missing language specifiers (triple backticks currently just "```") which triggers MD040; update each of the two structural example blocks by changing the opening fence from "```" to "```text" (use the literal fence marker "```text" for both occurrences so the blocks are explicitly labeled as text)..claude/skills/workflow-mastery/SKILL.md-109-109 (1)
109-109:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix markdownlint MD040 by typing fenced blocks.
Several prompt/procedure fences are missing language labels. Please add
text(or the specific language where applicable) for consistency and lint compliance.Also applies to: 119-119, 139-139, 146-146, 152-152, 158-158, 193-193, 202-202, 215-215, 232-232
🤖 Prompt for 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. In @.claude/skills/workflow-mastery/SKILL.md at line 109, Several fenced code blocks in SKILL.md are missing language labels and trigger markdownlint MD040; locate the triple-backtick blocks (` ``` `) used for prompts/procedures (the ones called out in the review) and add a language identifier such as text (e.g., change ``` to ```text) so each fenced block is typed consistently, ensuring you update each prompt/procedure fence noted in the review to include the language label..claude/skills/session-management/SKILL.md-33-33 (1)
33-33:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd language identifiers to fenced code blocks.
Multiple fenced blocks are missing language tags, which triggers markdownlint MD040 and reduces readability/tooling support.
Suggested pattern
-``` +```text STEP 1: Load Handoff ... -``` +```Also applies to: 71-71, 107-107, 129-129, 180-180, 197-197, 214-214, 237-237, 254-254, 269-269, 286-286, 301-301, 315-315
🤖 Prompt for 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. In @.claude/skills/session-management/SKILL.md at line 33, Several fenced code blocks in SKILL.md lack language identifiers (e.g., the block containing "STEP 1: Load Handoff"), which triggers markdownlint MD040; update each fence to include an appropriate language tag such as ```text or ```bash to improve linting and tooling support. Search for the unlabeled fenced blocks (notably the one with "STEP 1: Load Handoff" and the other occurrences noted) and replace the opening triple-backticks with a language-tagged variant, keeping the block contents unchanged and ensuring consistency across all listed instances..claude/skills/wrap-up-ritual/SKILL.md-72-72 (1)
72-72:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDeclare languages on the remaining fenced blocks.
These untyped fences trigger MD040; adding
text/markdownwhere appropriate will make the doc pass lint cleanly.Also applies to: 98-98, 121-121, 136-136, 156-156, 172-172
🤖 Prompt for 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. In @.claude/skills/wrap-up-ritual/SKILL.md at line 72, Several fenced code blocks in SKILL.md are missing language declarations (triggering MD040); update the fences at the affected locations (the blocks at/around the markers corresponding to lines 72, 98, 121, 136, 156, 172) to include an explicit language like "text" or "markdown" as appropriate so the linter stops flagging MD040—e.g., replace triple-backtick fences with ```text or ```markdown for each untyped block..claude/skills/verification-loop/SKILL.md-33-33 (1)
33-33:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAnnotate untyped fenced blocks with a language.
The verification command/protocol blocks should declare a language (likely
bashortext) to satisfy MD040 and keep formatting consistent across skill docs.Also applies to: 41-41, 50-50, 58-58, 66-66, 74-74, 81-81, 119-119, 137-137, 153-153, 170-170, 184-184, 197-197, 212-212, 227-227, 240-240
🤖 Prompt for 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. In @.claude/skills/verification-loop/SKILL.md at line 33, Several fenced code blocks in the SKILL.md verification loop are untyped; annotate each verification command/protocol block with an explicit language (e.g., add ```bash or ```text) to satisfy MD040 and keep formatting consistent. Locate the verification command/protocol fenced blocks (the verification examples and command snippets in the verification-loop SKILL.md) and update their opening fences to include the appropriate language identifier (use bash for shell commands and text where no shell syntax applies). Ensure every untyped ``` is converted so all the listed untyped blocks are annotated consistently..claude/skills/session-management/SKILL.md-195-195 (1)
195-195:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winHyphenate compound modifier for readability.
Use “first-Claude session” (or rephrase) to avoid grammar lint noise in this sentence.
🤖 Prompt for 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. In @.claude/skills/session-management/SKILL.md at line 195, Update the sentence "When no context files exist (brand new project or first Claude session):" in SKILL.md to hyphenate the compound modifier; change it to "When no context files exist (brand new project or first-Claude session):" or rephrase to something equivalent that uses a hyphenated compound modifier (e.g., "first-Claude session") to satisfy grammar/linting; locate the sentence by searching for the exact phrase "When no context files exist (brand new project or first Claude session):" and replace accordingly..claude/skills/split-memory/SKILL.md-33-33 (1)
33-33:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify languages for fenced blocks to satisfy markdownlint.
These code fences are untyped (
```). Adding explicit languages (for exampletext,bash,markdown) will clear MD040 and improve syntax rendering.Also applies to: 54-54, 91-91, 141-141, 166-166, 185-185, 208-208
🤖 Prompt for 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. In @.claude/skills/split-memory/SKILL.md at line 33, Update the untyped fenced code blocks in SKILL.md (the blocks referenced at lines 33, 54, 91, 141, 166, 185, 208) to include explicit language identifiers (e.g., ```text, ```bash, or ```markdown) so markdownlint rule MD040 is satisfied and syntax rendering improves; choose the most appropriate language for each block based on its contents and replace the opening ``` with ```<language> for each occurrence.
🤖 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 @.claude/skills/dependency-injection/SKILL.md:
- Around line 16-19: Update the DI guidance to mandate using the repository's
service locator pattern instead of constructor injection: replace statements
advocating constructor injection and "no service locator" with examples and
wording that use Bootstrapper.GetKernel().Resolve<T>() for resolving
dependencies (in constructors and methods) and show Resolve<IOrderService>() in
sample registrations/usage; also remove or revise the lifetime advice that
implies constructor injection is preferred so it aligns with using
Bootstrapper.GetKernel().Resolve<T>() throughout the examples and guidance.
In @.claude/skills/error-handling/SKILL.md:
- Around line 94-98: Replace the non-standard ILogger usage
(context.RequestServices.GetRequiredService<ILogger<Program>>() and
logger.LogError(exception, "Unhandled exception for {Method} {Path}",
context.Request.Method, context.Request.Path)) with the repo-standard
Resgrid.Framework.Logging calls; specifically call
Resgrid.Framework.Logging.LogException (or LogError if appropriate) in the
catch/unhandled-exception path and include the exception plus the Method and
Path values in the log message so the same context is preserved using the static
API.
---
Minor comments:
In @.claude/skills/80-20-review/SKILL.md:
- Around line 31-75: Several fenced code blocks in SKILL.md lack language
identifiers, causing markdownlint MD040 failures; update each unlabeled
triple-backtick block (e.g., the fenced examples under CHECKPOINT 1, CHECKPOINT
2, CHECKPOINT 3, CHECKPOINT 4 and the other noted ranges) to include an
appropriate language tag such as text, bash, or csharp. Search for the fenced
blocks in the file (look for lines starting with ``` near the CHECKPOINT
headings and the ranges 81-114, 120-148, 154-186, 192-204, 210-220, 224-233,
237-247, 251-261) and replace the opening ``` with ```text, ```bash, or
```csharp as appropriate for the snippet content so markdownlint MD040 is
satisfied. Ensure you only change the opening fence, keep the block contents
intact, and run the linter to verify the warnings are resolved.
In @.claude/skills/architecture-advisor/SKILL.md:
- Around line 100-109: Update the fenced code blocks in SKILL.md to include
explicit language tags (e.g., use ```text or ```csharp) so Markdown lint MD040
is satisfied; locate the example blocks such as the project tree snippet and
other fenced examples (around the shown block that lists src/MyApp.Api/... and
the other ranges noted) and add the appropriate language identifier for each
fenced fence so they render and lint correctly.
In @.claude/skills/aspire/SKILL.md:
- Around line 116-127: The fenced code block that shows the solution tree (the
block starting with "MyApp.slnx" and containing entries like "MyApp.AppHost/"
and "MyApp.Api/") is missing a language identifier; update the triple-backtick
fence to include a language (for example use ```text) so the example satisfies
MD040 and renders as plain text.
In @.claude/skills/autonomous-loops/SKILL.md:
- Around line 33-69: The unlabeled fenced code blocks (notably the "BUILD-FIX
LOOP" block) are triggering markdownlint MD040; update every triple-backtick
fence in the file to include an explicit language tag (e.g., ```bash, ```text,
```csharp) so the linter recognizes them; scan the file for all unlabeled fences
(including the other similar blocks referenced in the review) and replace each
opening fence with the appropriate language identifier consistent with the block
content.
In @.claude/skills/ci-cd/SKILL.md:
- Line 211: Update the table entry string "Open source project" to the
hyphenated compound adjective form "Open-source project" in the SKILL.md table
row (replace the exact text "Open source project" with "Open-source project").
In @.claude/skills/clean-architecture/SKILL.md:
- Line 26: Add a language identifier to the fenced code block in SKILL.md:
locate the triple-backtick fence shown in the diff (the fenced code block around
line 26) and change the opening fence from ``` to include a language (for
example ```text or ```md), keeping the closing ``` unchanged so markdown linters
and docs tooling recognize the block language.
In @.claude/skills/code-review-workflow/SKILL.md:
- Line 35: Multiple fenced code blocks in SKILL.md are missing language tags
causing MD040 lint warnings; edit each unnamed triple-backtick block and add an
appropriate language identifier (e.g., "text", "bash", or "markdown") so the
linter recognizes the block type. Locate the unnamed fenced blocks in the
document (the examples and inline snippets) and update their opening ``` to
```text, ```bash, or ```markdown as appropriate to the content, then run the
markdown lint to confirm the MD040 warnings are resolved.
In @.claude/skills/context-discipline/SKILL.md:
- Line 34: Several fenced code blocks in SKILL.md are unlabeled and violate
MD040; update each backtick-fenced block (e.g., the fences currently around the
examples at the noted locations) to include an explicit language tag such as
"text", "bash", or "markdown" as appropriate. Locate the unlabeled
triple-backtick blocks in .claude/skills/context-discipline/SKILL.md (including
the occurrences called out) and change ``` to something like ```text or ```bash
depending on the block content so each fenced block has an explicit language tag
to satisfy the linter.
In @.claude/skills/convention-learner/SKILL.md:
- Line 28: Add language identifiers to the fenced code blocks in SKILL.md where
unlabeled fences appear (e.g., the fence at the snippet around line 28 and the
other occurrences listed) so markdownlint MD040 warnings are resolved; locate
each triple-backtick block (``` ... ```) in
.claude/skills/convention-learner/SKILL.md and append the appropriate language
token (e.g., ```js, ```ts, ```json, ```bash, etc.) that matches the block
content for the fences at the reported positions (28, 38, 58, 124, 146, 155,
173, 179, 187, 193, 201, 207, 215, 220).
In @.claude/skills/de-sloppify/SKILL.md:
- Line 52: Update the unlabeled fenced code blocks in SKILL.md by adding
explicit language specifiers (e.g., ```bash, ```json, ```python, etc.) so they
pass MD040 and render correctly; specifically update the fences at the reported
locations (around lines 52, 66, 71, 102, 143, 197, 210, 226, 239, 253) to use
the appropriate language tag matching the snippet content (choose the tag that
matches the code sample in each fenced block).
In @.claude/skills/docker/SKILL.md:
- Around line 63-72: The fenced code block showing the .dockerignore example
lacks a language identifier and trips markdownlint MD040; update the
triple-backtick fence around that block (the .dockerignore example containing
entries like **/.git, **/.vs, **/node_modules, **/Dockerfile*, etc.) to include
a language tag such as ```text so the block is properly marked and the linter
passes.
In @.claude/skills/health-check/SKILL.md:
- Around line 34-37: Several fenced code blocks in SKILL.md are missing language
identifiers (e.g., the block containing "Tool: dotnet build --no-restore" and
the other blocks mentioned), which triggers markdownlint MD040; update each
triple-backtick fence to include the appropriate language tag (for example mark
command lines like "Tool: dotnet build --no-restore" as bash, plain output-only
blocks as text, and any Markdown snippets as markdown). Locate the offending
fences in .claude/skills/health-check/SKILL.md by searching for triple-backtick
blocks and add the correct language identifier after the opening ``` for each
block (e.g., ```bash, ```text, or ```markdown) so all listed blocks and
remaining fences validate.
In @.claude/skills/instinct-system/SKILL.md:
- Around line 33-56: Fenced code blocks in SKILL.md (for example the block
beginning with "1. OBSERVE" and the other blocks at the ranges referenced:
82-103, 107-113, 121-139, 145-170, 180-187, 193-206, 210-218, 222-231, 235-246)
are missing language identifiers (MD040); update each triple-backtick fence to
include an appropriate identifier such as ```text or ```markdown (use `text`
when no specific language applies) so every fenced block has a language tag,
then re-run markdownlint to verify MD040 is resolved.
In @.claude/skills/learning-log/SKILL.md:
- Around line 53-77: The fenced code blocks that list TRIGGER items are missing
language labels (MD040); update each fenced block in the document (e.g., the
multi-line block containing "TRIGGER 1: Non-Obvious Bug Root Cause" through
"TRIGGER 6: Non-Obvious Configuration") to include an appropriate language tag
(for example use "text" or "markdown" after the opening ```), and apply the same
change to the other unlabeled fenced blocks referenced in the review so
markdownlint MD040 no longer flags them. Ensure each opening fence becomes
```text or ```markdown consistently and run markdownlint to verify the warnings
are resolved.
In @.claude/skills/migration-workflow/SKILL.md:
- Around line 152-156: The fenced code block that starts with "→
get_project_graph" is missing a language tag (MD040); update the triple-backtick
fence to include a language identifier such as text (e.g., change ``` to
```text) so the block becomes a labeled text block and markdownlint passes,
ensuring the content lines "→ get_project_graph", "List all projects and their
target frameworks.", and "Flag: mixed TFMs, test projects on different
versions." remain unchanged.
In @.claude/skills/model-selection/SKILL.md:
- Around line 33-60: Add explicit language identifiers to all plain fenced code
blocks in SKILL.md (the blocks under the ROUTINE TASKS / COMPLEX TASKS / SIMPLE
TASKS sections) to satisfy MD040; change each opening ``` to ```text (or ```md
if you prefer markdown highlighting) so each fenced block is labeled, and re-run
markdownlint to confirm the warnings are resolved.
In @.claude/skills/opentelemetry/SKILL.md:
- Around line 57-60: Add a language tag to the markdown fenced code blocks that
contain the environment variables (the blocks showing
"OTEL_EXPORTER_OTLP_ENDPOINT=..." and "OTEL_SERVICE_NAME=MyApp.Api" and the
later block with "OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317") to satisfy
MD040; change the opening fences from ``` to ```bash (or ```text) so the blocks
are tagged as shell/environment content.
In @.claude/skills/project-setup/SKILL.md:
- Around line 86-89: Several fenced code blocks (e.g., the blocks containing "→
get_project_graph", "→ detect_antipatterns (scope: solution)", "→
get_diagnostics (severity: warning, scope: solution)", "→ find_dead_code (scope:
solution)", "→ get_test_coverage_map", and the "## Codebase Health Report" and
BAD/GOOD examples) lack a language tag; update each triple-backtick fence to
include an appropriate language (for example use ```text for plain lists and
```markdown for the "## Codebase Health Report" heading) so markdownlint MD040
is satisfied and rendering is correct; search for the shown snippet texts to
locate each fence and add the language tag consistently across the other ranges
noted (92-95, 98-101, 104-107, 110-113, 119-137, 154-157, 159-164, 186-189,
191-199).
In @.claude/skills/project-structure/SKILL.md:
- Around line 26-46: The markdown has two fenced code blocks missing language
identifiers — the directory tree example (the MyApp/ tree block) and the "BAD —
tests mixed with source" example — so update each opening triple-backtick to
include a language label (e.g., ```text) to satisfy MD040; ensure both fenced
blocks use the same label and that closing backticks remain unchanged.
In @.claude/skills/scalar/SKILL.md:
- Around line 57-60: The file uses both "prefill" and "pre-fill"; pick one
spelling and make it consistent across the document (e.g., change all
occurrences to "prefill" or all to "pre-fill"). Update the heading
"Authentication Prefill (Development Only)" and the other occurrences referenced
(around lines with the same phrase, e.g., the block at 57-60 and the occurrences
around 173-174) so all instances of the term match exactly.
In @.claude/skills/security-scan/SKILL.md:
- Around line 61-79: The markdown contains unlabeled fenced code blocks (e.g.,
the blocks starting with "HIGH-CONFIDENCE PATTERNS", "A03:2021 — Injection",
"CHECKLIST", "CHECKS", and the several "# BAD — ..." examples) which trigger
MD040; update each unlabeled triple-backtick block in
.claude/skills/security-scan/SKILL.md to include an appropriate language tag
(use `text` for plain prose/code-like lists or a specific language if one fits)
so the fences become e.g. ```text ... ```, and apply the same change to the
other unlabeled blocks referenced in the comment ranges (97-126, 132-154,
235-253, 310-324, 328-338, 342-350, 354-365).
In @.claude/skills/self-correction-loop/SKILL.md:
- Around line 32-56: The fenced code blocks in SKILL.md (sections like the
DETECT / ACKNOWLEDGE / GENERALIZE / CHECK / STORE / CONFIRM steps and the
example BAD blocks) are missing language identifiers which triggers MD040;
update each triple-backtick fence to include a language token (use "text" or
"md" as appropriate) so the blocks are labeled (e.g., change ``` to ```text for
the DETECT/ACKNOWLEDGE/GENERALIZE lists and the SPECIFIC CORRECTION / AUDIT
CHECKLIST and BAD examples), and apply the same change to the other listed
ranges (86-99, 105-112, 122-133, 137-143, 147-155, 159-165) to ensure all fenced
blocks are consistently labeled.
In @.claude/skills/session-management/SKILL.md:
- Line 33: Several fenced code blocks in SKILL.md lack language identifiers
(e.g., the block containing "STEP 1: Load Handoff"), which triggers markdownlint
MD040; update each fence to include an appropriate language tag such as ```text
or ```bash to improve linting and tooling support. Search for the unlabeled
fenced blocks (notably the one with "STEP 1: Load Handoff" and the other
occurrences noted) and replace the opening triple-backticks with a
language-tagged variant, keeping the block contents unchanged and ensuring
consistency across all listed instances.
- Line 195: Update the sentence "When no context files exist (brand new project
or first Claude session):" in SKILL.md to hyphenate the compound modifier;
change it to "When no context files exist (brand new project or first-Claude
session):" or rephrase to something equivalent that uses a hyphenated compound
modifier (e.g., "first-Claude session") to satisfy grammar/linting; locate the
sentence by searching for the exact phrase "When no context files exist (brand
new project or first Claude session):" and replace accordingly.
In @.claude/skills/split-memory/SKILL.md:
- Line 33: Update the untyped fenced code blocks in SKILL.md (the blocks
referenced at lines 33, 54, 91, 141, 166, 185, 208) to include explicit language
identifiers (e.g., ```text, ```bash, or ```markdown) so markdownlint rule MD040
is satisfied and syntax rendering improves; choose the most appropriate language
for each block based on its contents and replace the opening ``` with
```<language> for each occurrence.
In @.claude/skills/verification-loop/SKILL.md:
- Line 33: Several fenced code blocks in the SKILL.md verification loop are
untyped; annotate each verification command/protocol block with an explicit
language (e.g., add ```bash or ```text) to satisfy MD040 and keep formatting
consistent. Locate the verification command/protocol fenced blocks (the
verification examples and command snippets in the verification-loop SKILL.md)
and update their opening fences to include the appropriate language identifier
(use bash for shell commands and text where no shell syntax applies). Ensure
every untyped ``` is converted so all the listed untyped blocks are annotated
consistently.
In @.claude/skills/vertical-slice/SKILL.md:
- Line 25: Two fenced code blocks are missing language specifiers (triple
backticks currently just "```") which triggers MD040; update each of the two
structural example blocks by changing the opening fence from "```" to "```text"
(use the literal fence marker "```text" for both occurrences so the blocks are
explicitly labeled as text).
In @.claude/skills/workflow-mastery/SKILL.md:
- Line 109: Several fenced code blocks in SKILL.md are missing language labels
and trigger markdownlint MD040; locate the triple-backtick blocks (` ``` `) used
for prompts/procedures (the ones called out in the review) and add a language
identifier such as text (e.g., change ``` to ```text) so each fenced block is
typed consistently, ensuring you update each prompt/procedure fence noted in the
review to include the language label.
In @.claude/skills/wrap-up-ritual/SKILL.md:
- Line 72: Several fenced code blocks in SKILL.md are missing language
declarations (triggering MD040); update the fences at the affected locations
(the blocks at/around the markers corresponding to lines 72, 98, 121, 136, 156,
172) to include an explicit language like "text" or "markdown" as appropriate so
the linter stops flagging MD040—e.g., replace triple-backtick fences with
```text or ```markdown for each untyped block.
🪄 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
Run ID: 50ebcfef-7531-4b4f-bec8-0ec1f8ce0c74
⛔ Files ignored due to path filters (40)
Web/Resgrid.Web/wwwroot/audio/Modern Availability Alert.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Calendar Event.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Call Closed.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Call Updated.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Chat.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Emergency call.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern High call.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Low call.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Medium call.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Message.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Notification.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Personnel Status.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Resource Order.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Shift.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Staffing Update.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Training.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Trouble Alert.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Unit Notice.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Unit Status.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/Modern Weather Alert.mp3is excluded by!**/*.mp3Web/Resgrid.Web/wwwroot/audio/wav/Modern_Availability_Alert.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Calendar_Event.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Call_Closed.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Call_Updated.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Chat.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Emergency_call.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_High_call.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Low_call.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Medium_call.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Message.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Notification.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Personnel_Status.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Resource_Order.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Shift.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Staffing_Update.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Training.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Trouble_Alert.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Unit_Notice.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Unit_Status.wavis excluded by!**/*.wavWeb/Resgrid.Web/wwwroot/audio/wav/Modern_Weather_Alert.wavis excluded by!**/*.wav
📒 Files selected for processing (72)
.claude/skills/80-20-review/SKILL.md.claude/skills/api-versioning/SKILL.md.claude/skills/architecture-advisor/SKILL.md.claude/skills/aspire/SKILL.md.claude/skills/authentication/SKILL.md.claude/skills/autonomous-loops/SKILL.md.claude/skills/caching/SKILL.md.claude/skills/ci-cd/SKILL.md.claude/skills/clean-architecture/SKILL.md.claude/skills/code-review-workflow/SKILL.md.claude/skills/configuration/SKILL.md.claude/skills/container-publish/SKILL.md.claude/skills/context-discipline/SKILL.md.claude/skills/convention-learner/SKILL.md.claude/skills/ddd/SKILL.md.claude/skills/de-sloppify/SKILL.md.claude/skills/dependency-injection/SKILL.md.claude/skills/docker/SKILL.md.claude/skills/ef-core/SKILL.md.claude/skills/error-handling/SKILL.md.claude/skills/health-check/SKILL.md.claude/skills/httpclient-factory/SKILL.md.claude/skills/instinct-system/SKILL.md.claude/skills/learning-log/SKILL.md.claude/skills/logging/SKILL.md.claude/skills/messaging/SKILL.md.claude/skills/migration-workflow/SKILL.md.claude/skills/minimal-api/SKILL.md.claude/skills/model-selection/SKILL.md.claude/skills/modern-csharp/SKILL.md.claude/skills/openapi/SKILL.md.claude/skills/opentelemetry/SKILL.md.claude/skills/project-setup/SKILL.md.claude/skills/project-structure/SKILL.md.claude/skills/resilience/SKILL.md.claude/skills/scaffolding/SKILL.md.claude/skills/scalar/SKILL.md.claude/skills/security-scan/SKILL.md.claude/skills/self-correction-loop/SKILL.md.claude/skills/serilog/SKILL.md.claude/skills/session-management/SKILL.md.claude/skills/split-memory/SKILL.md.claude/skills/testing/SKILL.md.claude/skills/verification-loop/SKILL.md.claude/skills/vertical-slice/SKILL.md.claude/skills/workflow-mastery/SKILL.md.claude/skills/wrap-up-ritual/SKILL.mdCore/Resgrid.Model/PushSoundFile.csCore/Resgrid.Model/PushSoundTypes.csProviders/Resgrid.Providers.Bus/NotificationProvider.csProviders/Resgrid.Providers.Bus/UnitNotificationProvider.csProviders/Resgrid.Providers.Messaging/NovuProvider.csWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Availability_Alert.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Calendar_Event.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Call_Closed.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Call_Updated.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Chat.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Emergency_call.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_High_call.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Low_call.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Medium_call.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Message.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Notification.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Personnel_Status.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Resource_Order.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Shift.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Staffing_Update.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Training.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Trouble_Alert.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Unit_Notice.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Unit_Status.cafWeb/Resgrid.Web/wwwroot/audio/caf/Modern_Weather_Alert.caf
| 1. **Constructor injection is the default** — Inject dependencies through the constructor (primary constructors make this clean). No service locator, no property injection. | ||
| 2. **Match lifetimes carefully** — A singleton must never depend on a scoped or transient service. This is the most common DI bug. | ||
| 3. **Register interfaces, resolve interfaces** — Register `services.AddScoped<IOrderService, OrderService>()`, not the concrete type. | ||
| 4. **Keyed services for strategy pattern** — .NET 8+ keyed services replace manual factory patterns for selecting between implementations. |
There was a problem hiding this comment.
Repository DI convention is inverted in this skill.
This section promotes constructor injection and “no service locator,” which conflicts with this repo’s required dependency resolution approach. Please rewrite DI guidance/examples to use Bootstrapper.GetKernel().Resolve<T>() so generated code stays compliant.
As per coding guidelines, "Use Service Locator pattern via Bootstrapper.GetKernel().Resolve() for dependency resolution in constructors and methods, not constructor injection".
🤖 Prompt for 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.
In @.claude/skills/dependency-injection/SKILL.md around lines 16 - 19, Update
the DI guidance to mandate using the repository's service locator pattern
instead of constructor injection: replace statements advocating constructor
injection and "no service locator" with examples and wording that use
Bootstrapper.GetKernel().Resolve<T>() for resolving dependencies (in
constructors and methods) and show Resolve<IOrderService>() in sample
registrations/usage; also remove or revise the lifetime advice that implies
constructor injection is preferred so it aligns with using
Bootstrapper.GetKernel().Resolve<T>() throughout the examples and guidance.
| var logger = context.RequestServices.GetRequiredService<ILogger<Program>>(); | ||
|
|
||
| logger.LogError(exception, "Unhandled exception for {Method} {Path}", | ||
| context.Request.Method, context.Request.Path); | ||
|
|
There was a problem hiding this comment.
Logging example conflicts with repo-standard logging API.
The example uses ILogger, but repo conventions require Resgrid.Framework.Logging static methods (and LogException in catch paths). Please align snippet guidance to prevent non-standard logging usage from being generated.
As per coding guidelines, "Use Resgrid.Framework.Logging static methods (LogException, LogError, LogInfo, LogDebug) for all logging throughout the codebase".
🤖 Prompt for 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.
In @.claude/skills/error-handling/SKILL.md around lines 94 - 98, Replace the
non-standard ILogger usage
(context.RequestServices.GetRequiredService<ILogger<Program>>() and
logger.LogError(exception, "Unhandled exception for {Method} {Path}",
context.Request.Method, context.Request.Path)) with the repo-standard
Resgrid.Framework.Logging calls; specifically call
Resgrid.Framework.Logging.LogException (or LogError if appropriate) in the
catch/unhandled-exception path and include the exception plus the Method and
Path values in the log message so the same context is preserved using the static
API.
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 `@Core/Resgrid.Services/DepartmentSettingsService.cs`:
- Around line 927-935: GetModernNotificationsEnabledAsync currently reads
settings directly; change its signature to include a bool bypassCache = false
and implement cache-aside by calling
_cacheProvider.RetrieveAsync<bool?>(cacheKey, bypassCache, async () => { /*
fetch/parsing logic from GetSettingByDepartmentIdType */ }); return the resolved
bool (default false). Use DepartmentSettingTypes.EnableModernNotifications to
build the cache key consistently. Also update SaveOrUpdateSettingAsync so when
saving the EnableModernNotifications setting it invalidates that cache key via
_cacheProvider.Remove or appropriate invalidate method to ensure subsequent
reads reflect updates.
In `@Core/Resgrid.Services/PushService.cs`:
- Around line 191-192: Replace the direct call to
_departmentSettingsService.GetModernNotificationsEnabledAsync(...) inside
PushCall with a safe async helper (e.g., GetCallSoundTypeAsync) that wraps the
settings lookup in a try/catch, logs exceptions (Framework.Logging.LogException)
and defaults useModern to false on error, then calls
ConvertCallPriorityToSound(priority, callPriority, useModern); update both
occurrences (around lines referenced) so the settings failure cannot throw and
cause a dropped push or unnecessary I/O when profile.SendPush is false.
- Around line 19-30: The constructor on PushService now takes an
IDepartmentSettingsService which violates the repo DI convention; remove the
IDepartmentSettingsService parameter from the PushService constructor signature
and instead resolve and assign it inside the constructor using the
service-locator pattern (call
Bootstrapper.GetKernel().Resolve<IDepartmentSettingsService>() and assign to the
_departmentSettingsService field). Update the PushService constructor
implementation (constructor method on class PushService) to perform this Resolve
and remove the parameter from any callers/registrations so the public surface is
not widened.
🪄 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
Run ID: 6f347aea-e749-4d02-a074-9b8d05632d3f
⛔ Files ignored due to path filters (10)
Core/Resgrid.Localization/Areas/User/Department/Department.ar.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.de.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.en.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.es.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.fr.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.it.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.pl.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.sv.resxis excluded by!**/*.resxCore/Resgrid.Localization/Areas/User/Department/Department.uk.resxis excluded by!**/*.resx
📒 Files selected for processing (11)
.gitignoreCLAUDE.mdCore/Resgrid.Model/DepartmentSettingTypes.csCore/Resgrid.Model/Messages/StandardPushMessage.csCore/Resgrid.Model/Services/IDepartmentSettingsService.csCore/Resgrid.Services/CommunicationService.csCore/Resgrid.Services/DepartmentSettingsService.csCore/Resgrid.Services/PushService.csWeb/Resgrid.Web/Areas/User/Controllers/DepartmentController.csWeb/Resgrid.Web/Areas/User/Models/DepartmentSettingsModel.csWeb/Resgrid.Web/Areas/User/Views/Department/Settings.cshtml
✅ Files skipped from review due to trivial changes (2)
- CLAUDE.md
- .gitignore
| private readonly IDepartmentSettingsService _departmentSettingsService; | ||
|
|
||
| public PushService(IPushLogsService pushLogsService, INotificationProvider notificationProvider, | ||
| IUserProfileService userProfileService, IUnitNotificationProvider unitNotificationProvider, | ||
| INovuProvider novuProvider) | ||
| INovuProvider novuProvider, IDepartmentSettingsService departmentSettingsService) | ||
| { | ||
| _pushLogsService = pushLogsService; | ||
| _notificationProvider = notificationProvider; | ||
| _userProfileService = userProfileService; | ||
| _unitNotificationProvider = unitNotificationProvider; | ||
| _novuProvider = novuProvider; | ||
| _departmentSettingsService = departmentSettingsService; |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win
Resolve IDepartmentSettingsService via the repo’s service-locator pattern.
This new constructor parameter widens PushService's public surface and goes against the DI convention for C# services in this repo. Resolve the dependency inside the constructor instead of injecting it here.
As per coding guidelines, "Use Service Locator pattern via Bootstrapper.GetKernel().Resolve<T>() for dependency injection instead of constructor injection".
🤖 Prompt for 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.
In `@Core/Resgrid.Services/PushService.cs` around lines 19 - 30, The constructor
on PushService now takes an IDepartmentSettingsService which violates the repo
DI convention; remove the IDepartmentSettingsService parameter from the
PushService constructor signature and instead resolve and assign it inside the
constructor using the service-locator pattern (call
Bootstrapper.GetKernel().Resolve<IDepartmentSettingsService>() and assign to the
_departmentSettingsService field). Update the PushService constructor
implementation (constructor method on class PushService) to perform this Resolve
and remove the parameter from any callers/registrations so the public surface is
not widened.
|
Approve |
Summary by CodeRabbit
New Features
Chores