| title | PRD: Migración de packages/prisma a Effect v4 (Beta) |
|---|---|
| type | Product Requirements Document |
| status | In Progress |
| epic | Effect-ts v4 Monorepo Upgrade |
| target_branch | migration-prisma-v4 |
| base_branch | dev |
El objetivo de este documento es definir los requerimientos para completar la migración del paquete packages/prisma a la versión v4 (Beta) de effect. Este es el último paquete del monorepo pendiente de actualización. La migración abarca el CLI, los servicios subyacentes (específicamente generator-service.ts), y la refactorización de los templates para asegurar que el código generado emita sintaxis válida y moderna de Effect v4.
- Skill de Referencia Activo: El agente de IA puede consultar
.effect-reference/effect, un clon independiente, ignorado y depth-1 dehttps://github.com/Effect-TS/effect.gitramamain, como fuente canónica de Effect v4. Effect v3 corresponde a la ramav3del mismo repositorio. - Referencia de Alchemy:
.effect-reference/alchemyes un clon independiente, ignorado y depth-1 dehttps://github.com/alchemy-run/alchemy.gitramamain, la referencia canónica de Alchemy next/alpha basada en Effect.alchemy-run/alchemy-asynces la implementación async anterior. - Fuentes de Verdad:
MIGRATION.mdinterno de la librería.- Patrones arquitectónicos actuales encontrados directamente en los clones locales de referencia.
- Estado Actual: El CLI y los servicios base están parcialmente migrados. Existe un bloqueante crítico de inyección de dependencias / manejo de errores en el
makede/packages/prisma/src/services/generator-service.ts.
| Rama Objetivo | Versión de Effect | Propósito |
|---|---|---|
main |
v3 (Stable) | Producción. Sin cambios, mantiene soporte legacy hasta el release estable de v4. |
dev |
v4 (Beta) | Integración. Soporte exclusivo para la versión 4 beta; rama base para las features actuales. |
migration-prisma-v4 |
v4 (Beta) | Feature branch actual. Todo el trabajo de este PRD ocurre y se integra aquí contra dev. |
- Diagnóstico: Analizar el historial de git y las diferencias (diff) en la rama actual respecto al estado anterior con Effect v3 para entender el comportamiento original.
- Implementación: Resolver el error actual en el
makedel servicio. Esto implica verificar la provisión de dependencias (Layer.provide,Effect.provide) y la gestión de errores (Effect.catchAll, tipado de errores en el canalE) bajo las nuevas firmas de la v4. - este es el error Type 'Effect<{ generate: Effect<undefined, unknown, unknown>; }, never, FileSystem | Path | RenderService | FormatterService>' is not assignable to type '((...args: never) => Effect<{ readonly generate: Effect<undefined, unknown, GeneratorContext>; }, never, FileSystem | Path | RenderService | FormatterService>) | Effect<...> | undefined'. Type 'Effect<{ generate: Effect<undefined, unknown, unknown>; }, never, FileSystem | Path | RenderService | FormatterService>' is not assignable to type 'Effect<{ readonly generate: Effect<undefined, unknown, GeneratorContext>; }, never, FileSystem | Path | RenderService | FormatterService>'. Type '{ generate: Effect.Effect<undefined, unknown, unknown>; }' is not assignable to type '{ readonly generate: Effect<undefined, unknown, GeneratorContext>; }'. Types of property 'generate' are incompatible. Type 'Effect<undefined, unknown, unknown>' is not assignable to type 'Effect<undefined, unknown, GeneratorContext>'. Type 'unknown' is not assignable to type 'GeneratorContext'.
- Refactorización de AST/Strings: Modificar los templates de generación de código propios del paquete Prisma.
- Output Esperado: El código generado (clientes, repositorios o esquemas) debe ser 100% compatible con Effect v4, requiriendo validación contra la API actual expuesta en el worktree.
- Stack de Pruebas: El paquete contiene un entorno de pruebas y un caso de uso de ejemplo implementado con SQLite.
- Criterio de Éxito: La suite completa de pruebas debe ejecutarse y pasar exitosamente. Esto certifica que tanto la lógica interna del generador como el código resultante son válidos y estables.
Rol: Actuar como un Senior Developer experto en programación funcional y en el ecosistema de Effect.
- Consulta Proactiva: Ante cualquier duda sobre firmas de tipos (ej. constructores de
Layer, manejo delContext), consulta proactivamente el worktree usando el skill configurado antes de adivinar.- Cero Regresiones a v3: El código propuesto no debe utilizar APIs deprecadas o legacy de la versión 3.
- Aislamiento de Entorno: El directorio
.effect-referencees estrictamente de solo lectura y no debe incluirse en ninguna propuesta de commit.