EasyPlatform scan-backend-patterns
[Documentation] Scan project and populate/sync docs/project-reference/backend-patterns-reference.md with repository patterns, CQRS, validation, entities, events, migrations.
git clone https://github.com/duc01226/EasyPlatform
T=$(mktemp -d) && git clone --depth=1 https://github.com/duc01226/EasyPlatform "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/scan-backend-patterns" ~/.claude/skills/duc01226-easyplatform-scan-backend-patterns && rm -rf "$T"
.claude/skills/scan-backend-patterns/SKILL.md<!-- SYNC:critical-thinking-mindset -->[IMPORTANT] Use
to break ALL work into small tasks BEFORE starting — including tasks for each file read. This prevents context loss from long files. For simple tasks, AI MUST ATTENTION ask user whether to skip.TaskCreate
<!-- /SYNC:critical-thinking-mindset --> <!-- SYNC:ai-mistake-prevention -->Critical Thinking Mindset — Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80% to act. Anti-hallucination: Never present guess as fact — cite sources for every claim, admit uncertainty freely, self-check output for errors, cross-reference independently, stay skeptical of own confidence — certainty without evidence root of all hallucination.
<!-- /SYNC:ai-mistake-prevention -->AI Mistake Prevention — Failure modes to avoid on every task:
- Check downstream references before deleting. Deleting components causes documentation and code staleness cascades. Map all referencing files before removal.
- Verify AI-generated content against actual code. AI hallucinates APIs, class names, and method signatures. Always grep to confirm existence before documenting or referencing.
- Trace full dependency chain after edits. Changing a definition misses downstream variables and consumers derived from it. Always trace the full chain.
- Trace ALL code paths when verifying correctness. Confirming code exists is not confirming it executes. Always trace early exits, error branches, and conditional skips — not just happy path.
- When debugging, ask "whose responsibility?" before fixing. Trace whether bug is in caller (wrong data) or callee (wrong handling). Fix at responsible layer — never patch symptom site.
- Assume existing values are intentional — ask WHY before changing. Before changing any constant, limit, flag, or pattern: read comments, check git blame, examine surrounding code.
- Verify ALL affected outputs, not just the first. Changes touching multiple stacks require verifying EVERY output. One green check is not all green checks.
- Holistic-first debugging — resist nearest-attention trap. When investigating any failure, list EVERY precondition first (config, env vars, DB names, endpoints, DI registrations, data preconditions), then verify each against evidence before forming any code-layer hypothesis.
- Surgical changes — apply the diff test. Bug fix: every changed line must trace directly to the bug. Don't restyle or improve adjacent code. Enhancement task: implement improvements AND announce them explicitly.
- Surface ambiguity before coding — don't pick silently. If request has multiple interpretations, present each with effort estimate and ask. Never assume all-records, file-based, or more complex path.
Prerequisites: MUST ATTENTION READ before executing:
<!-- SYNC:scan-and-update-reference-doc --><!-- /SYNC:scan-and-update-reference-doc --> <!-- SYNC:output-quality-principles -->Scan & Update Reference Doc — Surgical updates only, never full rewrite.
- Read existing doc first — understand current structure and manual annotations
- Detect mode: Placeholder (only headings, no content) → Init mode. Has content → Sync mode.
- Scan codebase for current state (grep/glob for patterns, counts, file paths)
- Diff findings vs doc content — identify stale sections only
- Update ONLY sections where code diverged from doc. Preserve manual annotations.
- Update metadata (date, counts, version) in frontmatter or header
- NEVER rewrite entire doc. NEVER remove sections without evidence they're obsolete.
<!-- /SYNC:output-quality-principles -->Output Quality — Token efficiency without sacrificing quality.
- No inventories/counts — AI can
. Counts go stale instantlygrep | wc -l- No directory trees — AI can
/glob. Use 1-line path conventionsls- No TOCs — AI reads linearly. TOC wastes tokens
- No examples that repeat what rules say — one example only if non-obvious
- Lead with answer, not reasoning. Skip filler words and preamble
- Sacrifice grammar for concision in reports
- Unresolved questions at end, if any
Quick Summary
Goal: Scan backend codebase and populate
docs/project-reference/backend-patterns-reference.md with actual repository patterns, CQRS command/query structures, validation patterns, entity conventions, event handlers, and migration approaches. (content auto-injected by hook — check for [Injected: ...] header before reading)
Workflow:
- Read — Load current target doc, detect init vs sync mode
- Scan — Discover backend patterns via parallel sub-agents
- Report — Write findings to external report file
- Generate — Build/update reference doc from report
- Verify — Validate code examples reference real files
Key Rules:
- Generic — works with any backend framework (.NET, Node.js, Java, etc.)
- Detect framework first, then scan for framework-specific patterns
- Every code example must come from actual project files with file:line references
Be skeptical. Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence percentages (Idea should be more than 80%).
Scan Backend Patterns
Phase 0: Read & Assess
- Read
docs/project-reference/backend-patterns-reference.md - Detect mode: init (placeholder) or sync (populated)
- If sync: extract existing sections and note what's already well-documented
Phase 1: Plan Scan Strategy
Detect backend framework:
files → .NET (check for MediatR, CQRS patterns).csproj
with express/fastify/nestjs → Node.jspackage.json
/pom.xml
→ Java/Kotlinbuild.gradle
/requirements.txt
→ Pythonpyproject.toml
Use
docs/project-config.json contextGroups/modules if available for service paths.
Phase 2: Execute Scan (Parallel Sub-Agents)
Launch 3 Explore agents in parallel:
Agent 1: Repository & Entity Patterns
- Grep for repository interfaces (
,interface I*Repository
)extends Repository - Find entity/model classes (base class inheritance, attributes/annotations)
- Find DTO classes and mapping patterns (AutoMapper, manual mapping,
methods)MapTo* - Discover data access patterns (Unit of Work, DbContext, MongoDB collections)
- Look for extension methods on repositories
Agent 2: CQRS & Command/Query Patterns
- Grep for command handlers (
,IRequestHandler
,CommandHandler
)@CommandHandler - Grep for query handlers, query objects
- Find validation patterns (FluentValidation, class-level validators, middleware)
- Discover request/response wrapper patterns (Result<T>, ApiResponse)
- Find authorization attributes/decorators on handlers
Agent 3: Events, Migrations & Infrastructure
- Grep for event handlers, domain events, integration events
- Find message bus consumers/publishers (MassTransit, RabbitMQ, Kafka patterns)
- Discover migration patterns (EF migrations, Flyway, custom migrators)
- Find background job patterns (Hangfire, Quartz, hosted services)
- Grep for middleware, filters, interceptors
Write all findings to:
plans/reports/scan-backend-patterns-{YYMMDD}-{HHMM}-report.md
Phase 3: Analyze & Generate
Read the report. Build these sections:
Target Sections
| Section | Content |
|---|---|
| Repository Pattern | Interface naming, base classes, service-specific repos, extension methods with examples |
| CQRS Patterns | Command structure, query structure, handler patterns, file organization conventions |
| Validation Patterns | Validation approach (fluent API, attributes, etc.), common rules, error response format |
| Entity Patterns | Base classes, property conventions, factory methods, domain logic placement |
| DTO Mapping | Mapping approach, who owns mapping (DTO, handler, or service), examples |
| Event Handlers | Domain events vs integration events, handler discovery, side-effect placement |
| Message Bus | Cross-service communication patterns, consumer conventions, message contracts |
| Migrations | Migration strategy, naming conventions, data migration patterns |
| Background Jobs | Job scheduling, recurring jobs, one-time jobs, conventions |
| Authorization | Auth patterns, permission checks, role-based access |
Content Rules
- Show actual code snippets (5-15 lines) from the project with
referencesfile:line - Include "DO" and "DON'T" examples where anti-patterns are clear
- Use tables for convention summaries (naming, file locations, base classes)
- Group patterns by concern, not by framework feature
Phase 4: Write & Verify
- Write updated doc with
at top<!-- Last scanned: YYYY-MM-DD --> - Verify: 5 code example file paths exist (Glob check)
- Verify: class names in examples match actual class definitions
- Report: sections updated, patterns discovered, coverage gaps
Closing Reminders
- IMPORTANT MUST ATTENTION break work into small todo tasks using
BEFORE startingTaskCreate - IMPORTANT MUST ATTENTION search codebase for 3+ similar patterns before creating new code
- IMPORTANT MUST ATTENTION cite
evidence for every claim (confidence >80% to act)file:line - IMPORTANT MUST ATTENTION add a final review todo task to verify work quality <!-- SYNC:scan-and-update-reference-doc:reminder -->
- IMPORTANT MUST ATTENTION read existing doc first, scan codebase, diff, surgical update only. Never rewrite entire doc. <!-- /SYNC:scan-and-update-reference-doc:reminder --> <!-- SYNC:output-quality-principles:reminder -->
- IMPORTANT MUST ATTENTION follow output quality rules: no counts/trees/TOCs, rules > descriptions, 1 example per pattern, primacy-recency anchoring. <!-- /SYNC:output-quality-principles:reminder --> <!-- SYNC:critical-thinking-mindset:reminder -->
- MUST ATTENTION apply critical thinking — every claim needs traced proof, confidence >80% to act. Anti-hallucination: never present guess as fact. <!-- /SYNC:critical-thinking-mindset:reminder --> <!-- SYNC:ai-mistake-prevention:reminder -->
- MUST ATTENTION apply AI mistake prevention — holistic-first debugging, fix at responsible layer, surface ambiguity before coding, re-read files after compaction. <!-- /SYNC:ai-mistake-prevention:reminder -->