refacil-sdd-ai 4.2.4 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +239 -214
  2. package/agents/auditor.md +189 -184
  3. package/agents/debugger.md +201 -204
  4. package/agents/implementer.md +150 -149
  5. package/agents/investigator.md +80 -89
  6. package/agents/proposer.md +219 -124
  7. package/agents/tester.md +140 -144
  8. package/agents/validator.md +153 -145
  9. package/bin/cli.js +158 -116
  10. package/lib/bus/askFulfillment.js +17 -17
  11. package/lib/bus/broker.js +599 -599
  12. package/lib/bus/ui/app.js +318 -318
  13. package/lib/commands/sdd.js +447 -0
  14. package/lib/hooks.js +236 -236
  15. package/lib/installer.js +58 -2
  16. package/lib/methodology-migration-pending.js +101 -136
  17. package/package.json +4 -6
  18. package/skills/apply/SKILL.md +139 -120
  19. package/skills/archive/SKILL.md +105 -107
  20. package/skills/ask/SKILL.md +78 -78
  21. package/skills/attend/SKILL.md +70 -70
  22. package/skills/bug/SKILL.md +121 -128
  23. package/skills/explore/SKILL.md +73 -63
  24. package/skills/guide/SKILL.md +79 -79
  25. package/skills/inbox/SKILL.md +43 -43
  26. package/skills/join/SKILL.md +82 -82
  27. package/skills/prereqs/BUS-CROSS-REPO.md +55 -55
  28. package/skills/prereqs/METHODOLOGY-CONTRACT.md +122 -115
  29. package/skills/prereqs/SKILL.md +30 -37
  30. package/skills/propose/SKILL.md +103 -102
  31. package/skills/reply/SKILL.md +44 -44
  32. package/skills/review/SKILL.md +163 -126
  33. package/skills/review/checklist-back.md +92 -92
  34. package/skills/review/checklist-front.md +72 -72
  35. package/skills/review/checklist.md +114 -114
  36. package/skills/say/SKILL.md +38 -38
  37. package/skills/setup/SKILL.md +85 -141
  38. package/skills/setup/troubleshooting.md +38 -35
  39. package/skills/test/SKILL.md +104 -94
  40. package/skills/test/testing-patterns.md +63 -63
  41. package/skills/up-code/SKILL.md +108 -108
  42. package/skills/update/SKILL.md +109 -132
  43. package/skills/verify/SKILL.md +159 -132
  44. package/templates/compact-guidance.md +45 -45
  45. package/templates/methodology-guide.md +46 -42
  46. package/config/openspec-config.yaml +0 -8
  47. package/skills/prereqs/OPENSPEC-DELTAS.md +0 -51
@@ -1,92 +1,92 @@
1
- # Checklist Backend Equipo Refacil
2
-
3
- > Complementa el [checklist general](checklist.md). Aplica a repositorios **backend** (APIs, microservicios, workers, colas).
4
- > Detectar tipo: si el proyecto tiene frameworks de servidor (HTTP, gRPC, mensajeria), estructura de microservicios, o acceso a base de datos, aplica este checklist.
5
- > Marcar N/A en secciones que no apliquen al cambio revisado (ej. colas si el cambio no toca mensajeria).
6
-
7
- ## B1. Validacion de entrada
8
- - Los DTOs/objetos de entrada de endpoints usan el mecanismo de validacion automatica del framework
9
- - Cada campo declara tipo y restricciones (obligatorio, formato, rango)
10
- - Endpoints nombrados en kebab-case (`get-user-info`, `create-payment`)
11
- - No se confian datos del cliente sin validar (query params, headers, body)
12
-
13
- ## B2. Contratos de API
14
- - Las respuestas usan una estructura consistente (no retornar formatos distintos segun el caso)
15
- - Los codigos HTTP son correctos y especificos (no todo es 200 o 500)
16
- - Los DTOs de respuesta no exponen campos internos (IDs de BD, campos de auditoria, relaciones internas)
17
- - Si el endpoint es consumido por otro servicio: verificar que no se introduzcan breaking changes en el contrato (campos renombrados, eliminados o con tipo diferente)
18
- - Los errores retornan un formato estandar con mensaje entendible para el consumidor
19
-
20
- ## B3. Manejo de errores (estandar Refacil)
21
- - No hay bloques try/catch anidados o multiples en un mismo hilo de peticion
22
- - Los errores se capturan, loggean y devuelven respuestas formateadas
23
- - Modulos/servicios nuevos usan el filtro o middleware global de excepciones del proyecto (si existe)
24
- - Se distingue entre errores del cliente (4xx) y errores del servidor (5xx)
25
- - Los errores de dependencias externas (APIs, BD, colas) se manejan con mensajes propios, no se propagan tal cual al consumidor
26
-
27
- ## B4. Arquitectura y patrones
28
- - **Responsabilidad por capas**: no hay logica de negocio en la capa de transporte (controllers/handlers) ni en la capa de infraestructura (repositorios/adaptadores)
29
- - Los DTOs estan en la capa correcta (entrada en transporte, salida en aplicacion)
30
- - Repository Pattern para acceso a datos (si el proyecto tiene un repositorio base, los nuevos lo extienden)
31
- - Si es un microservicio nuevo, sigue la estructura definida en AGENTS.md (hexagonal, clean architecture, etc.)
32
- - Las dependencias fluyen en la direccion correcta segun la arquitectura del proyecto
33
-
34
- ## B5. Concurrencia y atomicidad
35
- - Las operaciones que modifican multiples registros o tablas usan transacciones de BD (todo o nada)
36
- - Los endpoints de escritura criticos (pagos, transferencias, creacion de ordenes) son **idempotentes**: si se reintentan, no duplican el efecto
37
- ```
38
- // Patron: verificar si la operacion ya se ejecuto antes de procesarla
39
- SI existeOperacion(idempotencyKey) ENTONCES retornar resultado_existente
40
- SINO ejecutar operacion Y guardar resultado con idempotencyKey
41
- ```
42
- - Si multiples procesos pueden modificar el mismo recurso al mismo tiempo, se usan locks distribuidos o versionado optimista para evitar race conditions
43
- - Las operaciones de lectura-modificacion-escritura son atomicas (no leer, procesar en memoria y escribir sin proteccion)
44
-
45
- ## B6. Consultas a BD
46
- - No hay bucles para traer informacion de distintas fuentes de datos
47
- - Si se necesitan datos cruzados, crear una funcion que use JOINs o consultas optimizadas internamente
48
- - Las consultas usan indices apropiados
49
- - No hay queries N+1
50
- - No hay inyeccion SQL/NoSQL posible (queries parametrizadas con el ORM/driver del proyecto)
51
- - **Esquema (DDL)**: por defecto, no usar el sistema de migraciones de TypeORM ni `synchronize` para aplicar o versionar cambios de BD (ni `MigrationInterface`, ni depender de `migration:run` / `migration:generate` en el flujo de despliegue de la app). Los cambios de esquema se entregan como **scripts explícitos** (p. ej. `.sql` versionados bajo convención del repo) para que **quien opera el motor** los ejecute **manualmente y aparte** en cada entorno (Postgres, MySQL, etc.). **Excepción**: si `AGENTS.md` define **explicitamente** como regla de **ese** repositorio otro mecanismo (p. ej. migraciones TypeORM u otro pipeline acordado), marca esta viñeta como **N/A** y revisa solo que el cambio cumple lo documentado allí (sin exigir scripts manuales).
52
- - Si aplica la politica por defecto (scripts manuales): los scripts de esquema entregados documentan orden de ejecución, son reversibles o describen rollback, y no destruyen datos existentes sin plan explícito. Si aplica la excepción por `AGENTS.md`, marca **N/A** o evalua segun lo que ese archivo exija para migraciones.
53
-
54
- ## B7. Caching
55
- - Consultas repetitivas a BD usan cache **distribuido** (no cache local en memoria del proceso evitar reinicios por falta de RAM)
56
- - El patron es: verificar cache -> si no hay, consultar BD -> guardar en cache con TTL
57
- - Las claves de cache son especificas y predecibles (incluyen los parametros que hacen unica la consulta)
58
- - Se invalida el cache cuando los datos subyacentes cambian (si aplica)
59
- - El TTL es apropiado para el tipo de dato (configuracion: largo, datos transaccionales: corto o sin cache)
60
-
61
- ## B8. Resiliencia y conexiones
62
- - Todas las llamadas externas (HTTP, gRPC, BD, colas) tienen **timeout configurado** (no esperar indefinidamente)
63
- - Si una dependencia externa falla, la respuesta degrada de forma controlada (fallback, mensaje de error claro, reintento)
64
- - Connection pooling en BD y clientes HTTP (no abrir/cerrar conexion por cada peticion)
65
- - Las conexiones se liberan correctamente (en bloques finally o equivalente)
66
- - Si el proyecto usa circuit breaker, las llamadas a servicios inestables lo implementan
67
-
68
- ## B9. Colas y mensajeria (si aplica)
69
- - Los consumers son **idempotentes**: procesar el mismo mensaje dos veces no duplica el efecto
70
- - Se confirma el procesamiento (ack) **despues** de completar la operacion, no antes
71
- - Los mensajes que fallan repetidamente van a una dead letter queue (no se pierden ni bloquean la cola)
72
- - Los producers no pierden mensajes si la cola no esta disponible (retry o persistencia local)
73
- - Los payloads de mensajes contienen la informacion suficiente para procesarse sin consultas adicionales innecesarias
74
-
75
- ## B10. Performance
76
- - Las operaciones pesadas o de larga duracion son asincronas (colas, workers, background jobs)
77
- - No hay memory leaks obvios (subscriptions sin unsubscribe, listeners sin cleanup, conexiones sin cerrar, timers sin cancelar)
78
- - Los endpoints con respuesta pesada usan paginacion
79
- - No se cargan relaciones completas de BD si solo se necesitan campos puntuales (select especifico)
80
-
81
- ## B11. Logging (estandar Refacil)
82
- - Se usa el logger centralizado del proyecto (no prints directos a consola), si ya se tiene en el repositorio
83
- - Procesos criticos en la operacion (ventas, transacciones, pagos) tienen logs
84
- - Se loggean propiedades especificas y necesariasnunca objetos complejos ni entidades con relaciones completas
85
- - Los logs en catch contienen informacion suficiente para diagnosticar el error (que fallo, con que datos, en que contexto)
86
- - Los logs tienen nivel apropiado: error para fallos, warn para situaciones inesperadas recuperables, info para flujos criticos de negocio
87
-
88
- ## B12. Testing backend
89
- - Tests de integracion con BD real para repositorios y queries complejas (no solo mocks)
90
- - Tests de los contratos de API (request valido retorna estructura esperada, request invalido retorna error formateado)
91
- - Tests de casos de error (dependencia caida, timeout, datos invalidos)
92
- - Si hay concurrencia critica: tests que validen idempotencia o atomicidad
1
+ # Backend Checklist — Refacil Team
2
+
3
+ > Complements the [general checklist](checklist.md). Applies to **backend** repositories (APIs, microservices, workers, queues).
4
+ > Detection: if the project has server frameworks (HTTP, gRPC, messaging), microservice structure, or database access, apply this checklist.
5
+ > Mark N/A in sections that do not apply to the change being reviewed (e.g. queues if the change does not touch messaging).
6
+
7
+ ## B1. Input validation
8
+ - Endpoint DTOs/input objects use the framework's automatic validation mechanism
9
+ - Each field declares its type and constraints (required, format, range)
10
+ - Endpoints named in kebab-case (`get-user-info`, `create-payment`)
11
+ - Client data is not trusted without validation (query params, headers, body)
12
+
13
+ ## B2. API contracts
14
+ - Responses use a consistent structure (do not return different formats depending on the case)
15
+ - HTTP codes are correct and specific (not everything is 200 or 500)
16
+ - Response DTOs do not expose internal fields (DB IDs, audit fields, internal relationships)
17
+ - If the endpoint is consumed by another service: verify that no breaking changes are introduced in the contract (renamed, removed, or differently-typed fields)
18
+ - Errors return a standard format with a message understandable to the consumer
19
+
20
+ ## B3. Error handling (Refacil standard)
21
+ - No nested or multiple try/catch blocks in the same request thread
22
+ - Errors are captured, logged, and formatted responses are returned
23
+ - New modules/services use the project's global exception filter or middleware (if it exists)
24
+ - Client errors (4xx) are distinguished from server errors (5xx)
25
+ - External dependency errors (APIs, DB, queues) are handled with their own messages, not propagated as-is to the consumer
26
+
27
+ ## B4. Architecture and patterns
28
+ - **Layer responsibility**: no business logic in the transport layer (controllers/handlers) or in the infrastructure layer (repositories/adapters)
29
+ - DTOs are in the correct layer (input in transport, output in application)
30
+ - Repository Pattern for data access (if the project has a base repository, new ones extend it)
31
+ - If it is a new microservice, follows the structure defined in AGENTS.md (hexagonal, clean architecture, etc.)
32
+ - Dependencies flow in the correct direction according to the project architecture
33
+
34
+ ## B5. Concurrency and atomicity
35
+ - Operations that modify multiple records or tables use DB transactions (all or nothing)
36
+ - Critical write endpoints (payments, transfers, order creation) are **idempotent**: if retried, they do not duplicate the effect
37
+ ```
38
+ // Pattern: check if the operation was already executed before processing it
39
+ IF operationExists(idempotencyKey) THEN return existing_result
40
+ ELSE execute operation AND save result with idempotencyKey
41
+ ```
42
+ - If multiple processes can modify the same resource simultaneously, distributed locks or optimistic versioning are used to avoid race conditions
43
+ - Read-modify-write operations are atomic (not read, process in memory and write without protection)
44
+
45
+ ## B6. DB queries
46
+ - No loops to fetch information from different data sources
47
+ - If cross-data is needed, create a function that uses JOINs or internally optimized queries
48
+ - Queries use appropriate indexes
49
+ - No N+1 queries
50
+ - No SQL/NoSQL injection possible (parameterized queries with the project's ORM/driver)
51
+ - **Schema (DDL)**: by default, do not use TypeORM's migration system or `synchronize` to apply or version DB changes (neither `MigrationInterface`, nor relying on `migration:run` / `migration:generate` in the app deployment flow). Schema changes are delivered as **explicit scripts** (e.g. versioned `.sql` files under the repo convention) so **whoever operates the engine** executes them **manually and separately** in each environment (Postgres, MySQL, etc.). **Exception**: if `AGENTS.md` **explicitly** defines another mechanism as a rule for **that** repository (e.g. TypeORM migrations or another agreed pipeline), mark this bullet as **N/A** and only verify the change complies with what is documented there (without requiring manual scripts).
52
+ - If the default policy applies (manual scripts): the delivered schema scripts document execution order, are reversible or describe rollback, and do not destroy existing data without an explicit plan. If the exception applies via `AGENTS.md`, mark **N/A** or evaluate according to what that file requires for migrations.
53
+
54
+ ## B7. Caching
55
+ - Repetitive DB queries use **distributed** cache (not in-process memory cacheavoid restarts due to RAM exhaustion)
56
+ - The pattern is: check cache -> if not found, query DB -> save to cache with TTL
57
+ - Cache keys are specific and predictable (include the parameters that make the query unique)
58
+ - Cache is invalidated when underlying data changes (if applicable)
59
+ - TTL is appropriate for the data type (configuration: long, transactional data: short or no cache)
60
+
61
+ ## B8. Resilience and connections
62
+ - All external calls (HTTP, gRPC, DB, queues) have **configured timeout** (do not wait indefinitely)
63
+ - If an external dependency fails, the response degrades gracefully (fallback, clear error message, retry)
64
+ - Connection pooling in DB and HTTP clients (do not open/close a connection per request)
65
+ - Connections are properly released (in finally blocks or equivalent)
66
+ - If the project uses circuit breaker, calls to unstable services implement it
67
+
68
+ ## B9. Queues and messaging (if applicable)
69
+ - Consumers are **idempotent**: processing the same message twice does not duplicate the effect
70
+ - Processing is acknowledged (ack) **after** completing the operation, not before
71
+ - Messages that fail repeatedly go to a dead letter queue (they are not lost or stuck in the queue)
72
+ - Producers do not lose messages if the queue is unavailable (retry or local persistence)
73
+ - Message payloads contain enough information to be processed without unnecessary additional queries
74
+
75
+ ## B10. Performance
76
+ - Heavy or long-running operations are asynchronous (queues, workers, background jobs)
77
+ - No obvious memory leaks (subscriptions without unsubscribe, listeners without cleanup, unclosed connections, uncanceled timers)
78
+ - Endpoints with heavy responses use pagination
79
+ - Complete DB relationships are not loaded if only specific fields are needed (specific select)
80
+
81
+ ## B11. Logging (Refacil standard)
82
+ - The project's centralized logger is used (not direct console prints), if already present in the repository
83
+ - Critical business operations (sales, transactions, payments) have logs
84
+ - Specific and necessary properties are loggednever complex objects or entities with full relationships
85
+ - Catch logs contain enough information to diagnose the error (what failed, with what data, in what context)
86
+ - Logs have appropriate level: error for failures, warn for recoverable unexpected situations, info for critical business flows
87
+
88
+ ## B12. Backend testing
89
+ - Integration tests with a real DB for repositories and complex queries (not just mocks)
90
+ - API contract tests (valid request returns expected structure, invalid request returns formatted error)
91
+ - Error case tests (dependency down, timeout, invalid data)
92
+ - If there is critical concurrency: tests that validate idempotency or atomicity
@@ -1,72 +1,72 @@
1
- # Checklist Frontend Equipo Refacil
2
-
3
- > Complementa el [checklist general](checklist.md). Aplica a repositorios **frontend** (aplicaciones web, mobile, desktop con UI).
4
- > Detectar tipo: si el proyecto tiene estructura de componentes UI, manejo de estado en cliente, rutas/vistas, o consume APIs para renderizar interfaces, aplica este checklist.
5
-
6
- ## F1. Componentes y estructura
7
- - Los componentes tienen una sola responsabilidad (no mezclan logica de negocio con presentacion)
8
- - La logica compleja esta separada en funciones auxiliares, servicios o el patron de reutilizacion del framework
9
- - Los componentes reutilizables estan en la carpeta compartida del proyecto (consultar AGENTS.md)
10
- - No hay componentes excesivamente grandes (> 200 lineas como guiaconsiderar extraer)
11
-
12
- ## F2. Estado y datos
13
- - El estado se maneja en el nivel mas cercano a donde se necesita (evitar pasar datos innecesariamente por multiples niveles)
14
- - No hay estado duplicado o derivable que pueda calcularse
15
- - Las llamadas a APIs usan el patron establecido en el proyecto (consultar AGENTS.md)
16
- - Se manejan los 4 estados de cada vista que consume datos: carga, error, vacio y con datos
17
-
18
- ## F3. Manejo de errores en UI
19
- - Existe manejo de errores a nivel de componente o seccion (que la app no se caiga entera por un error en un widget)
20
- - Las pantallas de error muestran feedback visual claro al usuario (nunca pantallas en blanco o rotas)
21
- - Los errores inesperados se capturan y loggean (si el proyecto tiene servicio de monitoreo)
22
- - Sin errores ni warnings en consola del navegador en flujos normales
23
-
24
- ## F4. Integracion con APIs
25
- - Se manejan los estados de red: reintentos, timeout, desconexion
26
- - Las peticiones se cancelan al desmontar el componente o navegar fuera (evitar actualizaciones de estado en componentes ya destruidos)
27
- - Listas largas usan paginacion o scroll infinito con carga incremental
28
- - Se evitan llamadas duplicadas o innecesarias al mismo endpoint
29
-
30
- ## F5. Validacion de formularios
31
- - Los formularios validan entrada del usuario antes de enviar
32
- - Los mensajes de error son claros y en el idioma del usuario
33
- - Se previene el doble envio (deshabilitar boton, estado de carga)
34
-
35
- ## F6. Ruteo y navegacion
36
- - Las rutas protegidas validan autenticacion/autorizacion antes de renderizar
37
- - Existe manejo de rutas no encontradas (pantalla 404 o redireccion)
38
- - Deep linking funciona correctamente (acceder directo a una URL interna)
39
- - Las redirecciones post-login/logout son correctas
40
-
41
- ## F7. Consistencia visual
42
- - Se usan los componentes y tokens del sistema de diseno del proyecto (consultar AGENTS.md)
43
- - Se respeta la escala de espaciado y tipografia definida
44
- - No hay estilos inline innecesarios si el proyecto tiene un sistema de estilos definido
45
- - Iconos e imagenes optimizados (formatos adecuados, tamanos correctos)
46
- - No hay texto hardcodeado si el proyecto usa internacionalizacion (i18n)
47
- - La UI es responsive si aplica al proyecto
48
-
49
- ## F8. Performance frontend
50
- - No hay re-renderizados innecesarios (usar las tecnicas de memoizacion/optimizacion del framework)
51
- - Code splitting / carga diferida de rutas o modulos pesados
52
- - Las imagenes usan carga diferida (lazy loading)
53
- - Fuentes optimizadas (precarga, fallback definido)
54
- - No se cargan dependencias pesadas sin necesidad (evaluar tamano del bundle)
55
- - Sin dependencias duplicadas en el bundle
56
- - Las listas largas usan virtualizacion si aplica
57
-
58
- ## F9. Accesibilidad (a11y)
59
- - Los elementos interactivos tienen etiquetas accesibles (labels, textos alternativos, roles ARIA)
60
- - La navegacion por teclado funciona correctamente
61
- - El contraste de colores es adecuado
62
- - Los targets tactiles tienen tamano minimo adecuado (44x44px como guia)
63
-
64
- ## F10. Seguridad frontend
65
- - No hay datos sensibles expuestos en el cliente (tokens, secrets, API keys en codigo fuente)
66
- - Los inputs estan sanitizados para prevenir XSS
67
- - No se almacenan tokens o datos sensibles en almacenamiento del cliente sin proteccion adecuada
68
-
69
- ## F11. Testing frontend
70
- - Tests de interaccion de usuario (clicks, formularios, navegacion)
71
- - Tests de los 4 estados visuales (carga, error, vacio, con datos)
72
- - Los tests verifican comportamiento del usuario, no detalles de implementacion
1
+ # Frontend Checklist — Refacil Team
2
+
3
+ > Complements the [general checklist](checklist.md). Applies to **frontend** repositories (web, mobile, desktop applications with UI).
4
+ > Detection: if the project has UI component structure, client-side state management, routes/views, or consumes APIs to render interfaces, apply this checklist.
5
+
6
+ ## F1. Components and structure
7
+ - Components have a single responsibility (do not mix business logic with presentation)
8
+ - Complex logic is separated into helper functions, services, or the framework's reuse pattern
9
+ - Reusable components are in the project's shared folder (consult AGENTS.md)
10
+ - No excessively large components (> 200 lines as a guideline consider extracting)
11
+
12
+ ## F2. State and data
13
+ - State is managed at the closest level to where it is needed (avoid passing data unnecessarily through multiple levels)
14
+ - No duplicated or derivable state that can be calculated
15
+ - API calls use the pattern established in the project (consult AGENTS.md)
16
+ - All 4 states of each data-consuming view are handled: loading, error, empty, and with data
17
+
18
+ ## F3. Error handling in UI
19
+ - Error handling exists at the component or section level (so the entire app does not crash due to a widget error)
20
+ - Error screens show clear visual feedback to the user (never blank or broken screens)
21
+ - Unexpected errors are captured and logged (if the project has a monitoring service)
22
+ - No errors or warnings in the browser console during normal flows
23
+
24
+ ## F4. API integration
25
+ - Network states are handled: retries, timeout, disconnection
26
+ - Requests are cancelled when unmounting the component or navigating away (avoid state updates in already-destroyed components)
27
+ - Long lists use pagination or infinite scroll with incremental loading
28
+ - Duplicate or unnecessary calls to the same endpoint are avoided
29
+
30
+ ## F5. Form validation
31
+ - Forms validate user input before submitting
32
+ - Error messages are clear and in the user's language
33
+ - Double submission is prevented (disable button, loading state)
34
+
35
+ ## F6. Routing and navigation
36
+ - Protected routes validate authentication/authorization before rendering
37
+ - Handling of not-found routes exists (404 screen or redirect)
38
+ - Deep linking works correctly (accessing an internal URL directly)
39
+ - Post-login/logout redirects are correct
40
+
41
+ ## F7. Visual consistency
42
+ - The project's design system components and tokens are used (consult AGENTS.md)
43
+ - The defined spacing and typography scale is respected
44
+ - No unnecessary inline styles if the project has a defined style system
45
+ - Icons and images are optimized (appropriate formats, correct sizes)
46
+ - No hardcoded text if the project uses internationalization (i18n)
47
+ - The UI is responsive if applicable to the project
48
+
49
+ ## F8. Frontend performance
50
+ - No unnecessary re-renders (use the framework's memoization/optimization techniques)
51
+ - Code splitting / lazy loading of heavy routes or modules
52
+ - Images use lazy loading
53
+ - Optimized fonts (preload, fallback defined)
54
+ - No heavy dependencies loaded unnecessarily (evaluate bundle size)
55
+ - No duplicate dependencies in the bundle
56
+ - Long lists use virtualization if applicable
57
+
58
+ ## F9. Accessibility (a11y)
59
+ - Interactive elements have accessible labels (labels, alternative texts, ARIA roles)
60
+ - Keyboard navigation works correctly
61
+ - Color contrast is adequate
62
+ - Touch targets have an adequate minimum size (44x44px as a guideline)
63
+
64
+ ## F10. Frontend security
65
+ - No sensitive data exposed on the client (tokens, secrets, API keys in source code)
66
+ - Inputs are sanitized to prevent XSS
67
+ - Tokens or sensitive data are not stored in client storage without adequate protection
68
+
69
+ ## F11. Frontend testing
70
+ - User interaction tests (clicks, forms, navigation)
71
+ - Tests for all 4 visual states (loading, error, empty, with data)
72
+ - Tests verify user behavior, not implementation details