chore(forms): remove unused vee-validate; formalize ref+validators+Zod as canonical pattern
Strict-regex sweep of apps/app/src/ confirms zero VeeValidate usage: no `from 'vee-validate'` imports, no <Field|Form|ErrorMessage>, no defineRule(), no useForm(). The 15 prior fuzzy matches were false positives where /useForm/ matched useFormDraft/useFormSteps/ useFormSchemas/useFormFailures. Changes: - Remove `vee-validate` and `@vee-validate/zod` from apps/app/package.json - Regenerate pnpm-lock.yaml (no other deps shifted) - CLAUDE.md "Forms": replace VeeValidate prescription with the actual ref + @core/utils/validators + Zod-payload-schema pattern that the codebase already uses everywhere - VUEXY_COMPONENTS.md: correct the stale "Registration uses VeeValidate" claim (the page actually uses useFormDraft + validators); update the "Form validation" reference row - BACKLOG.md: close VEE-001 with the audit trail All 319 existing tests still pass; vue-tsc clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
18
CLAUDE.md
18
CLAUDE.md
@@ -236,10 +236,24 @@ you are using available components rather than building custom ones.
|
||||
|
||||
### Forms
|
||||
|
||||
- VeeValidate for form state + Zod for schema validation — always together
|
||||
- Zod schemas must mirror the backend Form Request rules (field names, required/optional, types)
|
||||
Canonical form pattern (used everywhere in the SPA):
|
||||
|
||||
- `ref({ field: ... })` for form state
|
||||
- `VForm` ref + per-field rules drawn from `@core/utils/validators`
|
||||
(`requiredValidator`, `emailValidator`, etc.)
|
||||
- A separate `errors: Ref<Record<string, string>>` for server-validation
|
||||
feedback (mapped from 422 responses)
|
||||
- **Zod** for runtime validation of API payloads/responses (in
|
||||
`apps/app/src/schemas/*.ts`) — Zod schemas mirror backend Form Requests
|
||||
(field names, required/optional, types) and are the canonical contract
|
||||
- No inline validation logic in components
|
||||
|
||||
VeeValidate is **NOT** the form library here. It was previously listed
|
||||
but never actually adopted in any page; it was removed in commit
|
||||
`<sha>` (Session 4 follow-up). Reference forms: `apps/app/src/components/sections/CreateShiftDialog.vue`,
|
||||
`apps/app/src/components/timetable/AddPerformanceDialog.vue`,
|
||||
`apps/app/src/pages/register/[public_token].vue`.
|
||||
|
||||
### Naming
|
||||
|
||||
- DB columns: `snake_case`
|
||||
|
||||
Reference in New Issue
Block a user