Files
clienthub/.planning/phases/14-crm-attio-style-fix/deferred-items.md
T
simone 7d98b27e75 feat(14-01): add updateLeadField and lead tag CRUD server actions
- requireAdmin() guard (mirrors catalog/actions.ts pattern), throws
  "Non autorizzato" before any DB access
- updateLeadField: EDITABLE_FIELDS allowlist, name/status validated
  server-side (LEAD_STAGES.includes), nullable fields cleared on empty
- addLeadTag/removeLeadTag/renameLeadTag: polymorphic tags table scoped
  to entity_type="leads" (LEADS_TAG_ENTITY), never touches
  entity_type="services" rows
- All four actions call revalidatePath for /admin/leads (+ detail page
  where a single leadId applies)
- Log pre-existing lint issues (unrelated to this task) to
  deferred-items.md per scope-boundary rule
2026-06-14 12:41:36 +02:00

21 lines
1.1 KiB
Markdown

# Deferred Items — Phase 14
Items discovered during execution that are out of scope for the current task
(per Scope Boundary rule — pre-existing issues in unrelated code paths).
## 14-01
- **`src/app/admin/leads/actions.ts:54`** — pre-existing `@typescript-eslint/no-explicit-any`
error on `const updateData: Record<string, any> = { updated_at: new Date() };` inside
`updateLead()`. This function predates Phase 14 and is unchanged by 14-01 (Task 2 only
appends `updateLeadField`/`addLeadTag`/`removeLeadTag`/`renameLeadTag` after it).
`npx eslint src/app/admin/leads/actions.ts` exits 1 solely due to this pre-existing line;
the four new actions added in 14-01 introduce zero new lint errors/warnings.
Fix: replace `Record<string, any>` with a properly typed partial update object
(e.g. `Partial<typeof leads.$inferInsert>` or an explicit interface).
- **`src/lib/admin-queries.ts`** — pre-existing `@typescript-eslint/no-unused-vars` warnings
(4x) for imports `settings`, `ServiceCatalog`, `ProjectOffer`, `OfferPhaseService` — these
predate Phase 14 and are unrelated to the `getLeadsWithTags`/`getLeadFieldOptions` additions
in Task 1.