Files
solution-erp/.claude/agent-memory/implementer/MEMORY.md
pqhuy1987 ae1814cdba [CLAUDE] Skill: Setup multi-agent infrastructure (Investigator + Implementer + Reviewer)
Session 20 turn 12: User paste self-contained template setup multi-agent từ
NAMGROUP s41-s43 trial (empirical-grounded Anthropic Building Effective
Agents + Cognition "writes single-threaded"). Pre-flight decision gate 6/6
pass → proceed setup.

### Phase 0 — Pre-flight  6/6

- Codebase > 10K LOC  (59 tables · 27 mig · ~142 endpoints · 34 FE pages)
- Project > 6 months  (roadmap T1-T13)
- Heavy multi-file features regular  (per-chunk 5-6 commit/session)
- User extend ngáo threshold  (S20 đã 12+ turn, deep context)
- 25+ gotchas/patterns  (44 gotchas · 14 memory · 6 skills)
- Critical changes adversarial review  (UAT live 3 prod domain)

### Phase 1-4 setup

.claude/
├── agents/
│   ├── README.md          (master coordination guide ~9.7KB)
│   ├── investigator.md    (READ — research + audit + WebFetch ~7.3KB)
│   ├── implementer.md     (WRITE conditional Case 1+2+3+5 ~8.4KB)
│   └── reviewer.md        (READ adversarial pre-commit + live curl ~9.6KB)
└── agent-memory/
    ├── investigator/MEMORY.md  (seed ~5.9KB)
    ├── implementer/MEMORY.md   (seed ~6.9KB)
    └── reviewer/MEMORY.md      (seed ~6.5KB)

### Customizations per SOLUTION_ERP

- Stack: .NET 10 Clean Arch + 2 React 19 FE + SQL Server + Gitea + IIS
- Skills preload mỗi agent (reuse 6 skills hiện có):
  - Investigator: contract-workflow + permission-matrix + ef-core-migration
  - Implementer: ef-core-migration + permission-matrix + form-engine
  - Reviewer: dependency-audit-erp + iis-deploy-runbook + contract-workflow
- DB: SolutionErp_Dev (LocalDB runtime) + _Design (ef tooling distinct)
- Test bearer: admin@solutions.com.vn / Admin@123456 (full) +
  nv.test@solutions.com.vn / TestUser@123456 (Drafter UAT scope)
- Prod UAT: api/admin/eoffice.solutions.com.vn

### Windows MAX_PATH pitfall handled

Project path D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\ = 51 chars + nested
Dropbox-managed → `isolation: worktree` DROPPED khỏi implementer.md frontmatter
per template Pitfall 1. Em main reviews diff before commit (compensate).

### Memory baseline seeded

3 MEMORY.md có:
- Patterns proven cross-session (5-chunk discipline, 3-file Mig rule, audit-reuse,
  service hook derived, FE mirror 2 app, VND format helpers)
- 44 gotcha cross-ref
- Phase 9 UAT iteration mode (skip test per chunk theo memory feedback_uat_skip_verify)
- 5-category Reviewer checklist tinh chỉnh theo SOLUTION_ERP gotcha cluster
  (#44 silent 403 + #43 Step.Order + #42 V1/V2 dual schema + Wire BE claim)
- Tests baseline 81/81 PASS preserve

### Trial workflow

Week 1 candidate: Contract V2 wire (Mig 28+29) mirror PE pattern S17-S19 —
audit-reuse pattern proven 1×. ~600+ LOC, 2 mig + Service + Controller + FE
× 2 app. Investigator pre-flight + Implementer A→E chunks + Reviewer
pre-commit verify gotcha #42 dual schema.

Em main spawn first time qua /agents command. Pattern tracking ROI 4 tuần
trial (week 4 evaluate keep / tune / archive).

### Acceptance criteria 7/7 

- 4 agent .md với valid YAML frontmatter (name/description/model/effort/tools/
  skills/memory/color/maxTurns)
- 3 MEMORY.md seeds populated SOLUTION_ERP context
- All template placeholders {XXX} replaced
- Skills 3 đầu agent point tồn tại .claude/skills/ (6 skills sẵn)
- File structure đúng template
- Implementer isolation worktree dropped (Windows MAX_PATH)
- Trial 1 ready (em main /agents spawn dispatch)

References: Anthropic Building Effective Agents + Cognition "writes
single-threaded" + NAMGROUP s41-s43 empirical curve (+83% → +27% → ~0%
overhead). Setup time ~3-5h estimate (đã làm trong S20 turn 12 ~30min do
template self-contained + project context đã accumulate).

Path filter CI sẽ skip (.claude/skills/** trong paths-ignore, mirror cho
.claude/agents/** + .claude/agent-memory/** thực tế cũng docs-class).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 21:09:46 +07:00

6.8 KiB
Raw Blame History

Implementer Agent — Persistent Memory

Persistent diary cross-session. Auto-injected first 200 lines / 25KB at spawn. Update BEFORE every stop. Curate when > 25KB.


🎯 Role baseline

Code execution specialist for SOLUTION_ERP. Conditional WRITE (Case 1+2+3+5 ONLY). Tools: Read, Edit, Write, Bash, Skill, Grep, Glob. Output: commits + verification report.

🚨 STRICT scope auto-refuse criteria

REFUSE if ANY:

  1. Schema design decisions needed (FK strategy / nullable / discriminator)
  2. UX flow decisions needed (drawer vs tab vs modal)
  3. Cross-stack > 2 layers tight coupling
  4. Bug fix involving reasoning chain
  5. Integration testing involving multiple components
  6. < 30 min trivial task
  7. First time pattern (no prior precedent)
  8. Spec ambiguity > 20%

📋 Patterns proven (cross-session) — apply confidently

Pattern 1: Per-chunk discipline 5-chunk A-E (Anthropic Case 2 orchestrator-workers)

Memory feedback_per_chunk_commit chốt:

  • Chunk A: Domain entities + Migration (3-file rule)
  • Chunk B: Application handlers (CQRS Commands + Queries + Validators)
  • Chunk C: Service layer (workflow logic, business rules)
  • Chunk D: API controllers + endpoints
  • Chunk E: FE update (cả 2 app mirror) + Tests + Docs + commit final

Build + test pass mỗi chunk. Commit message format:

[CLAUDE] <scope>: Chunk <X> — <one-line summary>
<body>
Verify:
- Build pass (X warning, 0 error)
- N test pass (...)
Pending Chunk <Y+1>: <next>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Pattern 2: 3-file rule EF migration (BẮT BUỘC commit đủ)

Memory + gotcha #17:

  • Migrations/{TS}_{Name}.cs (Up + Down)
  • Migrations/{TS}_{Name}.Designer.cs (snapshot at migration time)
  • Migrations/ApplicationDbContextModelSnapshot.cs (current snapshot)
dotnet ef migrations add <Name> \
  --project src/Backend/SolutionErp.Infrastructure \
  --startup-project src/Backend/SolutionErp.Api

# Apply lên DB Dev:
dotnet ef database update --project src/Backend/SolutionErp.Infrastructure \
  --startup-project src/Backend/SolutionErp.Api \
  --connection "Server=(localdb)\MSSQLLocalDB;Database=SolutionErp_Dev;Trusted_Connection=True;TrustServerCertificate=true"

# Apply lên DB Design (catchup nếu thiếu):
dotnet ef database update --project src/Backend/SolutionErp.Infrastructure \
  --startup-project src/Backend/SolutionErp.Api

Pattern 3: Audit reuse trước khi clone (memory feedback_audit_reuse_before_clone)

Khi user nói "clone X sang Y":

  1. Grep discriminator field (ApplicableType, Type, Kind enum)
  2. Check Service / Handler / Controller có hardcode type cụ thể không
  3. Check FE pages có route dynamic typeCode hay hardcode
  4. Check menu key (BE const + FE menuKeys.ts) — thường thiếu chính ở đây
  5. Default reuse 80%, chỉ thêm menu key + sample seed (3 file ~60 LOC)

Bài học S17+ Clone B: 1 commit 937eb24, deploy 1 phát chạy.

Pattern 4: Service hook vs CRUD endpoint cho derived state (memory feedback_service_hook_vs_endpoint)

State X = derived của action Y → UPSERT trong handler Y, KHÔNG endpoint /X riêng.

Bài học S19 Mig 26 PE LevelOpinions: Service ApproveV2Async UPSERT row qua match ApproverUserId == actorUserId (fallback first khi Admin override). 0 endpoint mới.

Pattern 5: FE mirror 2 app rule §3.9

Duplicate fe-admin/ + fe-user/ CÓ CHỦ ĐÍCH:

  • Sửa fe-admin xong → mirror fe-user (tay)
  • Khi breaking change rename prop → BẮT BUỘC npm run build × 2 app (memory feedback_uat_skip_verify exception)

Pattern 6: VND format helpers + Phone/Email validate (S20 turn 4)

Inline mỗi file FE PE:

const parseVnd = (s: string): number => Number(s.replace(/[^\d]/g, '')) || 0
const formatVndInput = (n: number): string => (n > 0 ? n.toLocaleString('vi-VN') : '')
const PHONE_RE = /^0\d{9,10}$/
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
const isValidPhone = (s: string) => !s || PHONE_RE.test(s.replace(/[\s\-.]/g, ''))
const isValidEmail = (s: string) => !s || EMAIL_RE.test(s)

⚠️ Anti-patterns observed (DO NOT)

  1. Skip MEMORY.md update — knowledge tài sản
  2. Bypass pre-commit hooks --no-verify (forbidden absolute)
  3. git add -A hoặc git add . — specific files only
  4. Touch files outside spec scope — anti-fiddle rule
  5. Push remote autonomously cho heavy change — em main pushes (UAT iteration: confirm với em trước push)
  6. Modify SolutionErp.slnx autonomously — em main updates khi thêm .cs/.csproj
  7. Lower bar to match em main quality — Smart Friend Cognition anti-pattern
  8. Proceed when spec ambiguous > 20% — return REFUSE với reason

🧠 SOLUTION_ERP conventions (auto-load via skills)

  • BE .NET 10: PascalCase tiếng Anh entities + DTO records + command names. CQRS + MediatR + FluentValidation + AutoMapper. Repository qua IApplicationDbContext. GlobalExceptionMiddleware map exception → ProblemDetails (NO try-catch trong controllers).
  • FE React 19 + Vite 8 + TS 6: Named export only (trừ App). TanStack Query. shadcn/ui copy-paste. TS6 erasableSyntaxOnly cấm enum → const-object pattern. UI 100% tiếng Việt. Mirror 2 app rule §3.9.
  • Test: baseline 81/81 PASS (58 Domain + 23 Infra). Phase 9 UAT skip per chunk theo memory feedback_uat_skip_verify. Stack xUnit + FluentAssertions 7.2 + EF SQLite 10 TestApplicationDbContext override nvarchar(max) → TEXT.
  • Build: dotnet build SolutionErp.slnx clean 0 err + npm run build × 2 app pass.
  • Commit: [CLAUDE] <scope>: <message> + Co-Authored-By Claude Opus 4.7 (1M context).

Scopes (pick 1)

Contract · PurchaseEvaluation · Budget · Form · Workflow · Supplier · Auth · Admin · Api · App · Domain · Infra · FE-Admin · FE-User · Tests · Docs · CICD · Scripts · Skill


🔑 Pin versions (package pinning §2.8)

KHÔNG * / latest. Critical pins:

  • MediatR 12.4.1 (14 fail DI)
  • Swashbuckle 6.9.0 (10 conflict OpenApi 2)
  • Node engines >= 20 + CI pin 20.x (bài học NamGroup, memory feedback_node_cicd)
  • LibreOffice 25.8.6
  • @microsoft/signalr 8.0.7

📅 Recent activity (last 10 FIFO)

  • 2026-05-11 (setup): Implementer agent initialized. Baseline knowledge load complete (5 patterns proven cumulative S1-S20: per-chunk 5 chunk, 3-file rule Mig, audit-reuse clone, service hook derived state, FE mirror 2 app, VND format helpers). No implementations performed yet. Awaiting first SendMessage from em main. Strict scope auto-refuse criteria active.

🔄 Curate trigger

  • Memory size > 25KB → archive recent entries to archive/<period>.md
  • Duplicate entries detected → merge
  • Stale > 3 months → remove

Last curate: 2026-05-11 (initial seed)