|
|
|
@ -33,8 +33,8 @@ Arranque rapido para mañana:
|
|
|
|
o se deja como placeholder documentado. Hoy Avatar es `eidos` scope.
|
|
|
|
o se deja como placeholder documentado. Hoy Avatar es `eidos` scope.
|
|
|
|
Decidido: no hay accion versionable; solo existe un directorio local
|
|
|
|
Decidido: no hay accion versionable; solo existe un directorio local
|
|
|
|
vacio (`components/`) y Git no lo registra. No crear placeholder Soma.
|
|
|
|
vacio (`components/`) y Git no lo registra. No crear placeholder Soma.
|
|
|
|
3. Si se sigue con Sium: abordar P0 de integridad (`isPlainObjectRecord`,
|
|
|
|
3. Sium P0 de integridad queda cerrado: `isPlainObjectRecord`, `email`,
|
|
|
|
`email`, `regex` con flags mutables, doc de `ctx.rootValue`).
|
|
|
|
`regex` con flags mutables y docs de `ctx.rootValue`.
|
|
|
|
4. Mantener fuera de commits los logs sueltos (`.codex-vite-*`,
|
|
|
|
4. Mantener fuera de commits los logs sueltos (`.codex-vite-*`,
|
|
|
|
`debug.log`) salvo que el usuario pida conservarlos.
|
|
|
|
`debug.log`) salvo que el usuario pida conservarlos.
|
|
|
|
|
|
|
|
|
|
|
|
@ -90,19 +90,21 @@ Actualizacion 2026-05-16:
|
|
|
|
parecerse a Zod.
|
|
|
|
parecerse a Zod.
|
|
|
|
- Algunos fixes descritos como "1 linea" no lo son si queremos mantener
|
|
|
|
- Algunos fixes descritos como "1 linea" no lo son si queremos mantener
|
|
|
|
contratos `decodeSync`, `~sium` y `Form.AutoFields` coherentes.
|
|
|
|
contratos `decodeSync`, `~sium` y `Form.AutoFields` coherentes.
|
|
|
|
- Sium P0 recomendado, sin cambios breaking:
|
|
|
|
- Sium P0 cerrado, sin cambios breaking:
|
|
|
|
1. Corregir `isPlainObjectRecord(...)` para aceptar solo objetos planos. No
|
|
|
|
1. `isPlainObjectRecord(...)` acepta solo objetos planos o null-prototype; se
|
|
|
|
usar `value.constructor === Object` como unica regla: preferir
|
|
|
|
rechazan `Date`, `RegExp` e instancias de clase.
|
|
|
|
`Object.getPrototypeOf(value) === Object.prototype || null` para no romper
|
|
|
|
2. `email()` usa una regex conservadora de producto: dominio sin puntos
|
|
|
|
objetos null-prototype y reducir falsos positivos.
|
|
|
|
dobles y TLD practico de 2+ caracteres.
|
|
|
|
2. Mejorar `email()` con una regex conservadora de producto, no RFC completa:
|
|
|
|
3. `regex(pattern)` clona una vez el patron sin flags mutables `g`/`y`, de
|
|
|
|
dominio sin puntos dobles y TLD practico de 2+ caracteres.
|
|
|
|
modo que no toca `lastIndex` del regex recibido.
|
|
|
|
3. Cachear `regex(pattern)` sin mutar `lastIndex`. Si el pattern trae `g` o
|
|
|
|
4. README y tipos de Sium aclaran que `ctx.rootValue` es passthrough opcional;
|
|
|
|
`y`, clonar sin flags mutables o resetear antes de probar.
|
|
|
|
el core no lo sintetiza. Las validaciones cross-field sobre datos
|
|
|
|
4. Alinear README con `ctx.rootValue`: hoy solo es seguro en refines de objeto
|
|
|
|
decodificados deben vivir en un `refine()` del `object()` y usar el valor
|
|
|
|
ya decodificado. Las validaciones cross-field deben vivir en el object
|
|
|
|
decodificado recibido por ese refine.
|
|
|
|
refine, no en field refines.
|
|
|
|
5. Validado: `npx vitest run src/arts/sium/test` -> 18 archivos, 366 tests OK;
|
|
|
|
5. Revisar `optional/nullable/defaulted` con schema interno async. El problema
|
|
|
|
`npm run check` -> 0 errores, 0 warnings; `npm run test` -> 233 archivos,
|
|
|
|
|
|
|
|
2262 tests OK.
|
|
|
|
|
|
|
|
6. Pendiente deliberado: revisar `optional/nullable/defaulted` con schema interno async. El problema
|
|
|
|
es real, pero la solucion no es mover un `if`: `createSchema.decodeSync`
|
|
|
|
es real, pero la solucion no es mover un `if`: `createSchema.decodeSync`
|
|
|
|
lanza por `spec.async === true` antes de entrar en `decodeImpl`. Hace falta
|
|
|
|
lanza por `spec.async === true` antes de entrar en `decodeImpl`. Hace falta
|
|
|
|
una decision de runtime (`syncShortCircuit`, decodeSync custom por wrapper,
|
|
|
|
una decision de runtime (`syncShortCircuit`, decodeSync custom por wrapper,
|
|
|
|
|