- buildZodSchema derives z.object() from BACKEND_REGISTRY field definitions - required fields map to z.string().min(1, label) — optional to z.string().optional() - BACKEND_SCHEMAS exported with entries for azureblob, s3, s3-compatible - BackendFormValues<T> utility type infers TypeScript type from schema - No hardcoded field names — all shapes derived from registry loop - All 8 tests in index.test.ts pass (GREEN)