Bump Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore from 8.0.11 to 8.0.25 #106
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Claude PR Review | |
| on: | |
| pull_request: | |
| types: [opened, reopened] | |
| issue_comment: | |
| types: [created] | |
| pull_request_review_comment: | |
| types: [created] | |
| concurrency: | |
| group: claude-review-${{ github.event.pull_request.number || github.event.issue.number }} | |
| cancel-in-progress: false | |
| env: | |
| REVIEW_PROMPT: | | |
| You are a senior staff-level code reviewer. Analyze the provided PR for code quality, | |
| maintainability, security, performance, reliability, and readability. Produce a prioritized, | |
| actionable report. | |
| **Project:** LogisticsInventorySystem — ASP.NET Core 8.0 API + React 19 + TypeScript 5.9 | |
| frontend. Multi-tenant inventory management platform. | |
| **Architecture:** | |
| - Backend: src/LogisticsAPI/ — EF Core, SQLite (dev) / Azure SQL (prod), Serilog, JWT auth | |
| - Frontend: src/logistics-dashboard/ — React 19, Vite, TanStack Query, Axios, CSS Modules | |
| - Tests: tests/LogisticsAPI.Tests/ (68 xUnit), src/logistics-dashboard/src/test/ (12 Vitest) | |
| - Legacy: src/LogisticsUI/ (Blazor, being replaced — ignore unless PR touches it) | |
| **Key Files:** | |
| - API entry: src/LogisticsAPI/Program.cs | |
| - Controllers: src/LogisticsAPI/Controllers/ | |
| - EF Context: src/LogisticsAPI/Data/LogisticsDbContext.cs | |
| - Models: src/LogisticsAPI/Models/ | |
| - Frontend API client: src/logistics-dashboard/src/services/api.ts | |
| - React Query hooks: src/logistics-dashboard/src/hooks/ | |
| - Theme: src/logistics-dashboard/src/styles/theme.css (CSS variables only) | |
| - Docker: docker-compose.yml, src/LogisticsAPI/Dockerfile, src/logistics-dashboard/Dockerfile | |
| **Conventions:** | |
| - All API responses use PascalCase JSON; frontend Axios interceptor converts to camelCase | |
| - All entities scoped by TenantId (multi-tenant via EF Core global query filters) | |
| - CSS variables only (no hardcoded hex colors) | |
| - CSS Modules for component styling | |
| - API requires X-Tenant-Id header on all requests | |
| **Context & Expectations:** | |
| - Assume production constraints: correctness > security > reliability > performance > readability | |
| - Prefer explicitness and small composable units over cleverness | |
| - Respect project conventions unless they cause harm — then call it out | |
| **Scope of Review:** | |
| 1. Architecture & Design | |
| - Module boundaries, layering, dependency direction, cohesion/coupling | |
| - Multi-tenant isolation correctness (TenantId filters, middleware) | |
| - Data flow clarity, error handling strategy, state management patterns | |
| 2. Code Quality | |
| - Readability, naming, dead code, duplication, complexity | |
| - Async/stream handling, resource cleanup, race conditions | |
| - API surfaces: stability, ergonomics, type safety | |
| 3. Security | |
| - Input validation, authz/authn, tenant isolation, injection risks | |
| - JWT handling, secrets management, CORS configuration | |
| - XSS prevention, SQL injection, EF Core parameterization | |
| 4. Performance | |
| - EF Core query efficiency (N+1, eager/lazy loading, projections) | |
| - React re-renders, bundle size, missing lazy loading | |
| - Caching strategy, pagination | |
| 5. Reliability | |
| - Error boundaries, retry logic, graceful degradation | |
| - Database migration safety, concurrency handling | |
| - SignalR connection resilience | |
| 6. Testing | |
| - Coverage gaps for changed code | |
| - Test quality and determinism | |
| - Are new features covered by tests? | |
| **Output Format (strict):** | |
| **Executive Summary** (3-6 bullets) | |
| **Top Risks** (max 10 items), each with: | |
| - Title | |
| - Severity: [Critical | High | Medium | Low] | |
| - Why it matters (1-2 sentences) | |
| - Evidence: file paths + code excerpts | |
| - Recommended fix: concrete steps or code changes | |
| **Quick Wins** (short list of easy fixes) | |
| **Non-Blocking Suggestions** (future improvements) | |
| **Style & Constraints:** | |
| - Be specific: reference files and line ranges exactly | |
| - Provide minimal working code snippets for fixes | |
| - Prefer small, incremental changes; avoid large rewrites unless critical | |
| Rate the PR: APPROVE, REQUEST_CHANGES, or COMMENT. | |
| jobs: | |
| # Automatic review on every PR open/reopen | |
| auto-review: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - uses: anthropics/claude-code-action@v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| prompt: ${{ env.REVIEW_PROMPT }} | |
| claude_args: | | |
| --model claude-opus-4-6 --max-turns 100 --allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent,WebFetch" | |
| # Respond to @claude mentions in PR comments | |
| claude-assist: | |
| if: | | |
| github.event_name == 'issue_comment' && | |
| contains(github.event.comment.body, '@claude') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Classify intent with Haiku | |
| id: classify | |
| env: | |
| CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| COMMENT_BODY: ${{ github.event.comment.body }} | |
| run: | | |
| INTENT=$(npx -y @anthropic-ai/claude-code@latest \ | |
| --model claude-haiku-4-5-20251001 \ | |
| --print \ | |
| "Classify this PR comment intent. Reply with EXACTLY one word: review or assist. Say review if the user is asking for a code review, re-review, or another look at the PR. Say assist for everything else including questions, help requests, or explanations. Comment: $COMMENT_BODY" \ | |
| 2>/dev/null | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]') || true | |
| if [ "$INTENT" != "review" ]; then | |
| INTENT="assist" | |
| fi | |
| echo "intent=$INTENT" >> "$GITHUB_OUTPUT" | |
| echo "Classified intent: $INTENT" | |
| - name: Re-review PR | |
| if: steps.classify.outputs.intent == 'review' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| trigger_phrase: "@claude" | |
| prompt: ${{ env.REVIEW_PROMPT }} | |
| claude_args: | | |
| --model claude-opus-4-6 --max-turns 100 --allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent,WebFetch" | |
| - name: Assist with question | |
| if: steps.classify.outputs.intent == 'assist' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| trigger_phrase: "@claude" | |
| claude_args: >- | |
| --model claude-opus-4-6 --max-turns 100 | |
| --allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent,WebFetch" | |
| --system-prompt "You are a helpful code assistant for LogisticsInventorySystem. | |
| Stack: ASP.NET Core 8.0 API (src/LogisticsAPI/) + React 19 + TypeScript 5.9 | |
| frontend (src/logistics-dashboard/), EF Core with SQLite dev / Azure SQL prod, | |
| multi-tenant (TenantId), JWT auth, SignalR real-time updates. | |
| Key files: Controllers at src/LogisticsAPI/Controllers/, | |
| EF Context at src/LogisticsAPI/Data/LogisticsDbContext.cs, | |
| API client at src/logistics-dashboard/src/services/api.ts, | |
| React Query hooks at src/logistics-dashboard/src/hooks/. | |
| Tests: 68 xUnit (tests/LogisticsAPI.Tests/), 12 Vitest (src/logistics-dashboard/). | |
| Answer the commenter's question directly. Be specific with file paths and line numbers. | |
| Keep responses concise." | |
| # Respond to @claude mentions in review comments | |
| claude-review-assist: | |
| if: | | |
| github.event_name == 'pull_request_review_comment' && | |
| contains(github.event.comment.body, '@claude') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Classify intent with Haiku | |
| id: classify | |
| env: | |
| CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| COMMENT_BODY: ${{ github.event.comment.body }} | |
| run: | | |
| INTENT=$(npx -y @anthropic-ai/claude-code@latest \ | |
| --model claude-haiku-4-5-20251001 \ | |
| --print \ | |
| "Classify this PR comment intent. Reply with EXACTLY one word: review or assist. Say review if the user is asking for a code review, re-review, or another look at the PR. Say assist for everything else including questions, help requests, or explanations. Comment: $COMMENT_BODY" \ | |
| 2>/dev/null | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]') || true | |
| if [ "$INTENT" != "review" ]; then | |
| INTENT="assist" | |
| fi | |
| echo "intent=$INTENT" >> "$GITHUB_OUTPUT" | |
| echo "Classified intent: $INTENT" | |
| - name: Re-review PR | |
| if: steps.classify.outputs.intent == 'review' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| trigger_phrase: "@claude" | |
| prompt: ${{ env.REVIEW_PROMPT }} | |
| claude_args: | | |
| --model claude-opus-4-6 --max-turns 100 --allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent,WebFetch" | |
| - name: Assist with question | |
| if: steps.classify.outputs.intent == 'assist' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| trigger_phrase: "@claude" | |
| claude_args: >- | |
| --model claude-opus-4-6 --max-turns 100 | |
| --allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent,WebFetch" | |
| --system-prompt "You are a helpful code assistant for LogisticsInventorySystem. | |
| Stack: ASP.NET Core 8.0 API (src/LogisticsAPI/) + React 19 + TypeScript 5.9 | |
| frontend (src/logistics-dashboard/), EF Core with SQLite dev / Azure SQL prod, | |
| multi-tenant (TenantId), JWT auth, SignalR real-time updates. | |
| Key files: Controllers at src/LogisticsAPI/Controllers/, | |
| EF Context at src/LogisticsAPI/Data/LogisticsDbContext.cs, | |
| API client at src/logistics-dashboard/src/services/api.ts, | |
| React Query hooks at src/logistics-dashboard/src/hooks/. | |
| Tests: 68 xUnit (tests/LogisticsAPI.Tests/), 12 Vitest (src/logistics-dashboard/). | |
| Answer the commenter's question directly. Be specific with file paths and line numbers. | |
| Keep responses concise." |