<!-- CODEX:PROJECT-REFERENCE-LOADING:START -->Codex compatibility note:
- Invoke repository skills with
$skill-namein Codex; this mirrored copy rewrites legacy Claude/skill-namereferences.- Prefer the
plan-hardskill for planning guidance in this Codex mirror.- Task tracker mandate: BEFORE executing any workflow or skill step, create/update task tracking for all steps and keep it synchronized as progress changes.
- User-question prompts mean to ask the user directly in Codex.
- Ignore Claude-specific mode-switch instructions when they appear.
- Strict execution contract: when a user explicitly invokes a skill, execute that skill protocol as written.
- Subagent authorization: when a skill is user-invoked or AI-detected and its protocol requires subagents, that skill activation authorizes use of the required
spawn_agentsubagent(s) for that task.- Do not skip, reorder, or merge protocol steps unless the user explicitly approves the deviation first.
- For workflow skills, execute each listed child-skill step explicitly and report step-by-step evidence.
- If a required step/tool cannot run in this environment, stop and ask the user before adapting.
Codex Project-Reference Loading (No Hooks)
Codex does not receive Claude hook-based doc injection. When coding, planning, debugging, testing, or reviewing, open project docs explicitly using this routing.
Always read:
docs/project-config.json(project-specific paths, commands, modules, and workflow/test settings)docs/project-reference/docs-index-reference.md(routes to the fulldocs/project-reference/*catalog)docs/project-reference/lessons.md(always-on guardrails and anti-patterns)
Situation-based docs:
- Backend/CQRS/API/domain/entity changes:
backend-patterns-reference.md,domain-entities-reference.md,project-structure-reference.md - Frontend/UI/styling/design-system:
frontend-patterns-reference.md,scss-styling-guide.md,design-system/README.md - Spec/test-case planning or TC mapping:
feature-docs-reference.md - Integration test implementation/review:
integration-test-reference.md - E2E test implementation/review:
e2e-test-reference.md - Code review/audit work:
code-review-rules.mdplus domain docs above based on changed files
Do not read all docs blindly. Start from docs-index-reference.md, then open only relevant files for the task.
<!-- PROMPT-ENHANCE:STEP-TASK-ANCHOR:END -->[BLOCKING] Execute skill steps in declared order. NEVER skip, reorder, or merge steps without explicit user approval. [BLOCKING] Before each step or sub-skill call, update task tracking: set
in_progresswhen step starts, setcompletedwhen step ends. [BLOCKING] Every completed/skipped step MUST include brief evidence or explicit skip reason. [BLOCKING] If Task tools are unavailable, create and maintain an equivalent step-by-step plan tracker with the same status transitions.
Quick Summary
Goal: Analyze + optimize perf bottlenecks — DB queries, API endpoints, frontend rendering.
Workflow:
- Detect — Classify bottleneck type (DB/API/frontend/memory/N+1/distributed)
- Profile — Identify hot paths via profiling data/metrics
- Analyze — Trace execution path + measure impact with
file:lineevidence - Optimize — Apply targeted fixes with before/after measurements
- Verify — Re-measure + confirm improvement, present plan for user approval
Key Rules:
- Measure before AND after — NEVER optimize blindly
- Every claim requires profiling data +
file:lineproof - Row-count reduction before projection — higher OOM ROI
<target>$ARGUMENTS</target>
Phase 0: Detect Bottleneck Type
MANDATORY IMPORTANT MUST ATTENTION — classify BEFORE analyzing. Detection drives: which dimensions apply, which tools to use, which sub-agent to route to.
| Type | Signals | Primary Investigation |
| --------------- | -------------------------------------------- | ------------------------------------ |
| DB query | slow SELECT, missing index, full scan | Query plan + index analysis |
| API latency | slow endpoint, timeout, high p95 | Profiler + call chain trace |
| N+1 queries | loop + DB call, lazy load in serialization | graph trace --direction downstream |
| Memory/OOM | unbounded collections, no paging, blob loads | Row count + memory profiler |
| Frontend render | slow paint, excessive change detection | DevTools perf tab + bundle analysis |
| Distributed | cross-service latency, message bus delays | trace for MESSAGE_BUS edges |
Anti-pattern: same analysis applied regardless of bottleneck type.
Performance Dimensions
For each dimension: state role → derive failure modes → apply to bottleneck with file:line evidence.
1. Query Efficiency
Think: What data volume loads? Are filters pushed to DB? Do indexes cover all WHERE/JOIN/ORDER BY columns?
- Paging REQUIRED — NEVER unbounded
GetAll()/ToList()/Find()withoutSkip/Takeor cursor - Index REQUIRED — every filter field, FK, sort column needs DB index; verify field order matches query
- OOM triage order: (1) missing DB-level filter → push to DB (eliminates OOM absolutely); (2) unbounded arrays/blobs → apply projection (reduces severity proportionally). Row reduction higher ROI than projection.
2. Hot Path Frequency
Think: How often does this code execute? What triggers it? Is there call fan-out?
python .claude/scripts/code_graph query callers_of <function> --json— call frequency + trigger chainpython .claude/scripts/code_graph trace <file> --direction downstream --json— N+1 cascade, excessive event handlers- MESSAGE_BUS edges in trace output = distributed perf bottleneck signals
3. Memory Pressure
Think: What loads into memory? Is data bounded? Are projections applied before materialization?
- Diagnose unbounded row count BEFORE document size — always row-count first
- Identify: no pagination, full entity loads, blob fields in list queries
- Verify projections applied at DB layer, not after
ToList()
4. Concurrency & Parallelism
Think: Are parallel ops sharing non-thread-safe resources? Are sequential ops blocking hot path unnecessarily?
- Parallel + repo/UoW → ALWAYS
ExecuteInjectScopedAsync(new DI scope per iteration), NEVERExecuteUowTask(shared DbContext = silent corruption) - Sequential DB calls in loops → batch or
Include() - Unnecessary sequential awaits → identify parallelizable chains
5. Frontend Performance
Think: What triggers change detection? Is data fetched eagerly when lazy suffices? Is bundle size bounded?
OnPushchange detection +asyncpipe for observable streams- Lazy-loaded modules for feature routes
trackByon*ngFor— prevents full DOM re-renders- Profile observable chains for unnecessary emissions
⚠️ Confidence & Evidence Gate
MANDATORY IMPORTANT MUST ATTENTION declare Confidence: X% + profiling data + file:line for EVERY claim.
| Confidence | Action | | ---------- | --------------------------- | | ≥95% | Recommend freely | | 80-94% | Recommend with caveats | | 60-79% | List unknowns first | | <60% | STOP — gather more evidence |
Sub-Agent Routing
Route based on detected bottleneck type:
| Bottleneck | Sub-agent |
| ----------------------------------------------- | ------------------------------------------------------ |
| DB queries / OOM / backend hot path | performance-optimizer (backend) |
| Security-adjacent (auth queries, PII fields) | security-auditor first, then performance-optimizer |
| Cross-service / caching strategy / architecture | activate arch-performance-optimization skill |
| Frontend bundle / change detection / rendering | performance-optimizer (frontend focus) |
Activate arch-performance-optimization skill for architectural-level decisions.
CRITICAL: Present findings + optimization plan. Wait for explicit user approval before making changes.
Sub-Agent Type Override
MANDATORY: Performance analysis spawns
performance-optimizersub-agent as the Round 1 proactive lead, not just a Round 2 challenger. Rationale:performance-optimizerspecializes in N+1 patterns, query plans, bundle analysis, and memory profiling for both backend (.NET/MongoDB/SQL) and frontend (Angular/RxJS). Main agent synthesizes findings — it does not lead analysis alone.
Recursive Quality Loop
- Round 1 (Proactive): Spawn
performance-optimizersub-agent (agent_type: "performance-optimizer") as the analysis lead. Main agent provides scope context; sub-agent drives all dimension analysis and produces the draft optimization plan. - Round 2 (Challenge): Spawn NEW fresh
performance-optimizersub-agent — ZERO memory of Round 1. Challenges Round 1 findings: missed bottlenecks, wrong root cause, premature optimization. - Issues found → fix → Round 3 with NEW fresh
performance-optimizersub-agent - Max 3 rounds → escalate to user via a direct user question
- Clean Round 1 ENDS the review. When issues are found, fix and spawn a fresh sub-agent for Round 2 — main agent rationalizes own work, fresh eyes catch what was dismissed.
Workflow Recommendation
MANDATORY IMPORTANT MUST ATTENTION — NO EXCEPTIONS: Not already in workflow → use a direct user question:
- Activate
quality-auditworkflow (Recommended) — performance → sre-review → test- Execute
$performancedirectly — standalone
Phase 1: Why-Review Self-Validation Gate (MANDATORY when findings exist)
Purpose: Adversarial validation of own findings BEFORE handoff. Catches over-flagged Highs, false positives, and severity inflation at the source rather than letting them propagate downstream.
Trigger: Any finding produced (Critical, High, Medium, OR Low). Skip ONLY when the report's verdict is unconditional PASS with literally zero findings.
Protocol:
- Read own finalized report from
plans/reports/{skill}-{date}-{slug}.md - Invoke
$why-reviewskill with arg:validate findings in plans/reports/{skill}-{date}-{slug}.md — verify each finding has file:line proof, steel-man each rejected interpretation, and stress-test severity classifications - Read why-review output from
plans/reports/why-review-{date}.md - If why-review demotes/removes any finding: UPDATE own finalized report with revised severities, remove false positives, and add a
## Why-Review Validation Notessection citing what changed and why - If why-review confirms all findings: Append
## Why-Review Validationline to own report stating "All N findings re-validated against actual code; no severity changes."
Skip conditions (record explicit reason if skipping):
- Verdict is unconditional PASS with zero findings → log "Skipped — no findings to validate"
- Why-review skill itself is the active context (avoid recursion)
Why this exists: AI sub-agent reports inherit confirmation bias — the orchestrator absorbs severity claims as ground truth. The 2026-05-09 review incident produced 5 Highs; adversarial validation demoted 3 of them. Codify this as standard practice.
Next Steps
MANDATORY IMPORTANT MUST ATTENTION after completing, use a direct user question:
- "$sre-review (Recommended)" — production readiness after optimization
- "$changelog" — document perf changes
- "Skip, continue manually" — user decides
[IMPORTANT] Use task tracking to break ALL work into small tasks BEFORE starting. For simple tasks, ask user whether to skip.
docs/project-reference/domain-entities-reference.md— Domain entity catalog, cross-service sync (read directly when relevant; do not rely on hook-injected conversation text)
<!-- SYNC:graph-assisted-investigation -->External Memory: Write intermediate findings + results to
plans/reports/— prevents context loss, serves as deliverable.
<!-- /SYNC:graph-assisted-investigation --> <!-- SYNC:incremental-persistence -->Graph-Assisted Investigation — MANDATORY when
.code-graph/graph.dbexists.HARD-GATE: MUST ATTENTION run at least ONE graph command on key files before concluding any investigation.
Pattern: Grep finds files →
trace --direction bothreveals full system flow → Grep verifies details| Task | Minimum Graph Action | | ------------------- | -------------------------------------------- | | Investigation/Scout |
trace --direction bothon 2-3 entry files | | Fix/Debug |callers_ofon buggy function +tests_for| | Feature/Enhancement |connectionson files to be modified | | Code Review |tests_foron changed functions | | Blast Radius |trace --direction downstream|CLI:
python .claude/scripts/code_graph {command} --json. Use--node-mode filefirst (10-30x less noise), then--node-mode functionfor detail.
<!-- /SYNC:incremental-persistence --> <!-- SYNC:subagent-return-contract -->Incremental Result Persistence — MANDATORY for all sub-agents or heavy inline steps processing >3 files.
- Before starting: Create report file
plans/reports/{skill}-{date}-{slug}.md- After each file/section reviewed: Append findings to report immediately — never hold in memory
- Return to main agent: Summary only (per SYNC:subagent-return-contract) with
Full report:path- Main agent: Reads report file only when resolving specific blockers
Why: Context cutoff mid-execution loses ALL in-memory findings. Each disk write survives compaction. Partial results are better than no results.
Report naming:
plans/reports/{skill-name}-{YYMMDD}-{HHmm}-{slug}.md
<!-- /SYNC:subagent-return-contract --> <!-- SYNC:sub-agent-selection -->Sub-Agent Return Contract — When this skill spawns a sub-agent, the sub-agent MUST return ONLY this structure. Main agent reads only this summary — NEVER requests full sub-agent output inline.
## Sub-Agent Result: [skill-name] Status: ✅ PASS | ⚠️ PARTIAL | ❌ FAIL Confidence: [0-100]% ### Findings (Critical/High only — max 10 bullets) - [severity] [file:line] [finding] ### Actions Taken - [file changed] [what changed] ### Blockers (if any) - [blocker description] Full report: plans/reports/[skill-name]-[date]-[slug].mdMain agent reads
Full reportfile ONLY when: (a) resolving a specific blocker, or (b) building a fix plan. Sub-agent writes full report incrementally (per SYNC:incremental-persistence) — not held in memory.
<!-- /SYNC:sub-agent-selection --> <!-- SYNC:ai-mistake-prevention -->Sub-Agent Selection — Full routing contract:
.claude/skills/shared/sub-agent-selection-guide.mdRule: NEVER usecode-reviewerfor specialized domains (architecture, security, performance, DB, E2E, integration-test, git).
<!-- /SYNC:ai-mistake-prevention --> <!-- SYNC:critical-thinking-mindset -->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.
<!-- /SYNC:critical-thinking-mindset --> <!-- SYNC:sequential-thinking-protocol -->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:sequential-thinking-protocol --> <!-- SYNC:understand-code-first -->Sequential Thinking Protocol — Structured multi-step reasoning for complex/ambiguous work. Use when planning, reviewing, debugging, or refining ideas where one-shot reasoning is unsafe.
Trigger when: complex problem decomposition · adaptive plans needing revision · analysis with course correction · unclear/emerging scope · multi-step solutions · hypothesis-driven debugging · cross-cutting trade-off evaluation.
Format (explicit mode — visible thought trail):
Thought N/M: [aspect]— one aspect per thought, state assumptions/uncertaintyThought N/M [REVISION of Thought K]: ...— when prior reasoning invalidated; state Original / Why revised / ImpactThought N/M [BRANCH A from Thought K]: ...— explore alternative; converge with decision rationaleThought N/M [HYPOTHESIS]: ...then[VERIFICATION]: ...— test before actingThought N/N [FINAL]— only when verified, all critical aspects addressed, confidence >80%Mandatory closers: Confidence % stated · Assumptions listed · Open questions surfaced · Next action concrete.
Stop conditions: confidence <80% on any critical decision → escalate via ask the user directly · ≥3 revisions on same thought → re-frame the problem · branch count >3 → split into sub-task.
Implicit mode: apply methodology internally without visible markers when adding markers would clutter the response (routine work where reasoning aids accuracy).
Deep-dive: see
$sequential-thinkingskill (.claude/skills/sequential-thinking/SKILL.md) for worked examples (api-design, debug, architecture), advanced techniques (spiral refinement, hypothesis testing, convergence), and meta-strategies (uncertainty handling, revision cascades).
<!-- /SYNC:understand-code-first --> <!-- SYNC:evidence-based-reasoning -->Understand Code First — HARD-GATE: Do NOT write, plan, or fix until you READ existing code.
- Search 3+ similar patterns (
grep/glob) — citefile:lineevidence- Read existing files in target area — understand structure, base classes, conventions
- Run
python .claude/scripts/code_graph trace <file> --direction both --jsonwhen.code-graph/graph.dbexists- Map dependencies via
connectionsorcallers_of— know what depends on your target- Write investigation to
.ai/workspace/analysis/for non-trivial tasks (3+ files)- Re-read analysis file before implementing — never work from memory alone
- NEVER invent new patterns when existing ones work — match exactly or document deviation
BLOCKED until:
- [ ]Read target files- [ ]Grep 3+ patterns- [ ]Graph trace (if graph.db exists)- [ ]Assumptions verified with evidence
<!-- /SYNC:evidence-based-reasoning --> <!-- SYNC:critical-thinking-mindset:reminder -->Evidence-Based Reasoning — Speculation is FORBIDDEN. Every claim needs proof.
- Cite
file:line, grep results, or framework docs for EVERY claim- Declare confidence: >80% act freely, 60-80% verify first, <60% DO NOT recommend
- Cross-service validation required for architectural changes
- "I don't have enough evidence" is valid and expected output
BLOCKED until:
- [ ]Evidence file path (file:line)- [ ]Grep search performed- [ ]3+ similar patterns found- [ ]Confidence level statedForbidden without proof: "obviously", "I think", "should be", "probably", "this is because" If incomplete → output:
"Insufficient evidence. Verified: [...]. Not verified: [...]."
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:sequential-thinking-protocol:reminder -->MUST ATTENTION apply sequential-thinking — multi-step Thought N/M, REVISION/BRANCH/HYPOTHESIS markers, confidence % closer; see $sequential-thinking skill.
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 --> <!-- PROMPT-ENHANCE:STEP-TASK-CLOSING:START -->Prompt-Enhance Closing Anchors
IMPORTANT MUST ATTENTION follow declared step order for this skill; NEVER skip, reorder, or merge steps without explicit user approval
IMPORTANT MUST ATTENTION for every step/sub-skill call: set in_progress before execution, set completed after execution
IMPORTANT MUST ATTENTION every skipped step MUST include explicit reason; every completed step MUST include concise evidence
IMPORTANT MUST ATTENTION if Task tools unavailable, maintain an equivalent step-by-step plan tracker with synchronized statuses
Closing Reminders
- MANDATORY IMPORTANT MUST ATTENTION classify bottleneck type (Phase 0) BEFORE analyzing — detection drives dimension selection and sub-agent routing
- MANDATORY IMPORTANT MUST ATTENTION measure before AND after every change — NEVER "should improve performance" without proof
- MANDATORY IMPORTANT MUST ATTENTION row-count reduction before projection — push DB filters first (eliminates OOM absolutely)
- MANDATORY IMPORTANT MUST ATTENTION break work into small tasks via task tracking BEFORE starting
- MANDATORY IMPORTANT MUST ATTENTION cite
file:line+ profiling data for EVERY claim —Confidence: X%required - MANDATORY IMPORTANT MUST ATTENTION run graph trace before concluding —
callers_of+trace --direction downstreamfor hot paths - MANDATORY IMPORTANT MUST ATTENTION wait for explicit user approval before applying changes
- MANDATORY IMPORTANT MUST ATTENTION recursive quality loop — review → if issues → fix → fresh sub-agent re-review. Clean round ENDS the loop.
Anti-Rationalization:
| Evasion | Rebuttal | | --------------------------------------------- | ---------------------------------------------------------------- | | "Bottleneck is obvious, skip profiling" | Assumption without measurement = guess. Always measure. | | "Already checked code, no N+1" | Show graph trace output. No proof = no check. | | "Simple optimization, skip user approval" | User decides complexity. Always present plan first. | | "Round 2 redundant, Round 1 found everything" | Main agent rationalizes own work. Fresh eyes catch blind spots. | | "Performance type is clear, skip Phase 0" | Wrong type = wrong dimensions = wasted analysis. Classify first. |
[TASK-PLANNING] Break task into small todo tasks via task tracking BEFORE starting.
<!-- CODEX:SYNC-PROMPT-PROTOCOLS:START -->Hookless Prompt Protocol Mirror (Auto-Synced)
Source: .claude/hooks/lib/prompt-injections.cjs + .claude/.ck.json
[WORKFLOW-EXECUTION-PROTOCOL] [BLOCKING] Workflow Execution Protocol — MANDATORY IMPORTANT MUST CRITICAL. Do not skip for any reason.
- DETECT: Match prompt against workflow catalog
- ANALYZE: Find best-match workflow AND evaluate if a custom step combination would fit better
- ASK (REQUIRED FORMAT): Use a direct user question with this structure:
- Question: "Which workflow do you want to activate?"
- Option 1: "Activate [BestMatch Workflow] (Recommended)"
- Option 2: "Activate custom workflow: [step1 → step2 → ...]" (include one-line rationale)
- ACTIVATE (if confirmed): Call
$workflow-start <workflowId>for standard; sequence custom steps manually - CREATE TASKS: task tracking for ALL workflow steps
- EXECUTE: Follow each step in sequence [CRITICAL-THINKING-MINDSET] Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80% to act. Anti-hallucination principle: 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. AI Attention principle (Primacy-Recency): Put the 3 most critical rules at both top and bottom of long prompts/protocols so instruction adherence survives long context windows.
Learned Lessons
Lessons Learned
[CRITICAL] Hard-won project debugging/architecture rules. MUST ATTENTION apply BEFORE forming hypothesis or writing code.
Quick Summary
Goal: Prevent recurrence of known failure patterns — debugging, architecture, naming, AI orchestration, environment.
Top Rules (apply always):
- MUST ATTENTION verify ALL preconditions (config, env, DB names, DI regs) BEFORE code-layer hypothesis
- MUST ATTENTION fix responsible layer — NEVER patch symptom sites with caller-specific defensive code
- MUST ATTENTION use
ExecuteInjectScopedAsyncfor parallel async + repo/UoW — NEVERExecuteUowTask - MUST ATTENTION name by PURPOSE not CONTENT — adding member forces rename = abstraction broken
- MUST ATTENTION persist sub-agent findings incrementally after each file — NEVER batch at end
- MUST ATTENTION Windows bash: verify Python alias (
where python/where py) — NEVER assumepython/python3resolves
Debugging & Root Cause Reasoning
- [2026-04-11] Holistic-first: verify environment before code. Failure → list ALL preconditions (config, env vars, DB names, endpoints, DI regs, credentials, permissions, data prerequisites) → verify each via evidence (grep/cat/query) BEFORE code-layer hypothesis. Worst rabbit holes: diving nearest layer while bug sits elsewhere — e.g., hours debugging "sync timeout", real cause: test appsettings pointing wrong DB. ALWAYS cheapest check first.
- [2026-04-01] Ask "whose responsibility?" before fixing. Trace: bug caller (wrong data) or callee (wrong handling)? Fix responsible layer — NEVER patch symptom site masking real issue.
- [2026-04-01] Trace data lifecycle, not error site. Follow data: creation → transformation → consumption. Bug usually where data created wrong, not consumed.
- [2026-04-01] Code caller-agnostic. Functions/handlers/consumers don't know who invokes them. Comments/guards/messages describe business intent — NEVER reference specific callers (tests, seeders, scripts).
Architecture Invariants
- [2026-05-09] User name materialization MUST ATTENTION go through
User.UpdateName(firstName, middleName, lastName). Domain method (src/Services/bravoTALENTS/Employee.Domain/AggregatesModel/User.cs:202-209) recomputesFullNameas single source of truth. Three sites still manually patchuser.FullName = user.GetFullName()after assigning name fields —src/Services/bravoTALENTS/Employee.Application/Factories/UserFactory.cs:50,src/Services/bravoSURVEYS/LearningPlatform.Application/ApplyPlatform/MessageBus/Consumers/AccountUserDeletedEventBusConsumer.cs:102,src/Services/bravoINSIGHTS/Analyze/Analyze.Application/MessageBus/Consumers/AccountUserDeletedEventBusConsumer.cs:66. Next time touching any: replace manual patch withuser.UpdateName(...)to maintain invariant. - [2026-03-31] ParallelAsync + repo/UoW MUST ATTENTION use
ExecuteInjectScopedAsync, NEVERExecuteUowTask.ExecuteUowTaskcreates new UoW but reuses outer DI scope (same DbContext) — parallel iterations sharing non-thread-safe DbContext silently corrupt data.ExecuteInjectScopedAsynccreates new UoW + new DI scope (fresh repo per iteration). - [2026-03-31] Bus message naming MUST ATTENTION include service name prefix — core services NEVER consume feature events. Prefix declares schema ownership (
AccountUserEntityEventBusMessage= Accounts owns). Core services (Accounts, Communication) leaders. Feature services (Growth, Talents) sending to core MUST ATTENTION use{CoreServiceName}...RequestBusMessage— NEVER define own event for core to consume.
Naming & Abstraction
- [2026-04-12] Name PURPOSE not CONTENT — "OrXxx" anti-pattern.
HrManagerOrHrOrPayrollHrOperationsPolicynames set members, not what guards. Add role → rename = broken abstraction. Rule: names express DOES/GUARDS, not CONTAINS. Test: adding/removing member forces rename? YES = content-driven = bad → rename to purpose (e.g.,HrOperationsAccessPolicy). Nuance: "Or" fine behavioral idioms (FirstOrDefault,SuccessOrThrow) — expresses HAPPENS, not membership.
Environment & Tooling
- [2026-04-20] Windows bash: NEVER assume
python/python3resolves — verify alias first. Python may not be bash PATH under those names. Check:where python/where py. ALWAYS preferpy(Windows Python Launcher) one-liners,nodeif JS alternative exists.
Test-specific lessons →
docs/project-reference/integration-test-reference.mdLessons Learned section. Production-code anti-patterns →docs/project-reference/backend-patterns-reference.mdAnti-Patterns section. Generic debugging/refactoring reminders → System Lessons.claude/hooks/lib/prompt-injections.cjs.
Closing Reminders
- IMPORTANT MUST ATTENTION holistic-first: verify ALL preconditions (config, env, DB names, endpoints, DI regs) BEFORE code-layer hypothesis — cheapest check first
- IMPORTANT MUST ATTENTION fix responsible layer — NEVER patch symptom site; trace caller (wrong data) vs callee (wrong handling), fix root owner
- IMPORTANT MUST ATTENTION parallel async + repo/UoW → ALWAYS
ExecuteInjectScopedAsync, NEVERExecuteUowTask(shared DbContext = silent data corruption) - IMPORTANT MUST ATTENTION bus message prefix = schema ownership; feature services NEVER define events for core services — use
{CoreServiceName}...RequestBusMessage - IMPORTANT MUST ATTENTION name by PURPOSE — adding/removing member forces rename = broken abstraction
- IMPORTANT MUST ATTENTION sub-agents MUST write findings after each file/section — NEVER batch all findings into one final write
- IMPORTANT MUST ATTENTION Windows bash: NEVER assume
python/python3resolves — runwhere python/where pyfirst, usepylauncher ornode - IMPORTANT MUST ATTENTION every claim needs
file:lineevidence — confidence >80% to act, NEVER speculate
[LESSON-LEARNED-REMINDER] [BLOCKING] Task Planning & Continuous Improvement — MANDATORY. Do not skip.
Break work into small tasks (task tracking) before starting. Add final task: "Analyze AI mistakes & lessons learned".
Extract lessons — ROOT CAUSE ONLY, not symptom fixes:
- Name the FAILURE MODE (reasoning/assumption failure), not symptom — "assumed API existed without reading source" not "used wrong enum value".
- Generality test: does this failure mode apply to ≥3 contexts/codebases? If not, abstract one level up.
- Write as a universal rule — strip project-specific names/paths/classes. Useful on any codebase.
- Consolidate: multiple mistakes sharing one failure mode → ONE lesson.
- Recurrence gate: "Would this recur in future session WITHOUT this reminder?" — No → skip
$learn. - Auto-fix gate: "Could
$code-review/$code-simplifier/$security/$lintcatch this?" — Yes → improve review skill instead. - BOTH gates pass → ask user to run
$learn. [TASK-PLANNING] [MANDATORY] BEFORE executing any workflow or skill step, create/update task tracking for all planned steps, then keep it synchronized as each step starts/completes.