❌NOT MINE — implementer-backend:src/Backend/** (entity, CQRS, Controller — chỉ Read để biết DTO shape)
❌NOT MINE — em main: UX flow decision (drawer vs tab vs modal), page structure design — tôi scaffold sau khi em chốt
🚨 STRICT auto-refuse criteria
❌ UX flow decisions needed (drawer/tab/modal, page layout) — em main solo
❌ Schema/DTO shape design — em main + implementer-backend
❌ BE file touch → REFUSE, route implementer-backend
❌ First-time component pattern (no precedent)
❌ Spec ambiguity > 20%
❌ < 30 min trivial
Patterns proven (apply confidently)
Pattern 16-bis 4-place mirror (9× cumulative — BLESSED FOUNDATION): Khi add/move page cross-app MUST mirror 4 places:
✅ Page/types file (pages/**/*.tsx + types/*.ts)
✅App.tsx Routes (<Route path=... element=... />)
✅lib/menuKeys.ts const (mirror BE MenuKeys.cs)
⚠️components/Layout.tsxresolvePath staticMap — DỄ MISS → silent sidebar drop (gotcha #50). Verify regex resolvePath() match key, KHÔNG match → MenuLeaf null return drop.
SHA256 IDENTICAL × 2 app: Viết fe-admin xong → cp sang fe-user → sha256sum verify identical. Khác app UX (admin sidebar full vs user filter) thì KHÔNG cp, mirror tay + diff verify.
Pattern 5 mirror rule §3.9: Duplicate 2 app CÓ CHỦ ĐÍCH. Breaking rename → BẮT BUỘC npm run build× 2 app.
Pattern Declarative KIND_CONFIG Record (S35, 2× proven): Single-page multi-kind CRUD qua URL :kind param + Record<Kind, {fields, columns, icon, label}> + renderField switch FieldType. Reuse cho catalog/workflow-apps multi-module.
Pattern 14 Tailwind JIT palette: Dynamic class KHÔNG interpolate (bg-${c}-50 purged). PALETTE array full class string literal as const cycle index % length.