Lineamientos y procesos de IA — CumplePLD
-
Lineamientos y procesos de IA — CumplePLD
- 1. Contexto y restricciones
- 2. Economía de tokens (principio transversal)
- 3. Proceso de creación de tickets
- 4. Flujo de ramas y PRs (sin tablero, sin CI)
- 5. OpenSpec — especificación dirigida por IA
- 6. Graphify — grafo de conocimiento del repo
- 7. Superpowers y skills
- 8. Sin CI: qué implica y cómo lo compensamos
- 9. Reglas que le metimos a Claude
- 10. Cómo sería esto con tokens y presupuesto infinitos en construcción
1. Contexto y restricciones
| Restricción | Implicancia en cómo trabajamos |
|---|---|
| Plan Claude Pro (no API / no Max) | Presupuesto de tokens limitado por ventana de 5 h. Toda herramienta que "queme" contexto sin aportar se elimina. |
| Dos personas compartiendo el flujo | El proceso tiene que ser legible por humanos y por Claude sin reuniones: todo vive en archivos versionados. |
| No tenemos Jira / ClickUp | Los tickets son archivos Markdown en el repo + issues de GitHub. Sin tablero externo. |
| No usamos MCP de ClickUp ni de GitHub | Esos MCP inyectan esquemas y respuestas enormes en cada llamada. Usamos gh CLI, que devuelve solo lo que pedimos. |
| No tenemos CI | La verificación corre localmente (Docker + git hooks). Sin CI, la disciplina pre-commit y los fixtures son la red de seguridad. Ver §8. |
2. Economía de tokens (principio transversal)
Cada decisión de tooling se evalúa por una pregunta: ¿cuántos tokens consume por unidad de valor?
- Sin MCPs verbosos. El MCP de ClickUp/GitHub trae payloads grandes en cada turno.
gh issue create/gh pr createhacen lo mismo gastando una fracción. - Grafo antes que grep. Un
graphify querydevuelve un subgrafo acotado en lugar de volcar archivos enteros al contexto (§6). - Carga bajo demanda.
plan/INDEX.mdy las reglas deCLAUDE.mdindican no cargar la base de conocimiento completa por defecto; solo el archivo que la tarea concreta necesita. - Modelo según fase. Subagentes de solo lectura (Explore) corren en
haiku; el diseño de propuestas openspec recomienda Opus. Se elige el modelo más barato que sirva. - Compactar entre fases de OpenSpec. Concretamente entre
opsx:proposeyopsx:applycorremos/compact: la fase de propuesta acumula mucho contexto de diseño que la fase de implementación no necesita arrastrar. Compactar ahí evita el costo de >150k tokens de contexto. - Tickets chicos directos. Un ticket S/XS con spec completa se implementa directo, sin subagente de planificación; el peso pesado se reserva para features L/XL con arquitectura genuinamente incierta.
3. Proceso de creación de tickets
3.1 De dónde salen los tickets
No inventamos trabajo. Cada ticket se deriva de dos fuentes:
- El PRD del cliente — qué necesita el negocio.
- Los steps del MVP que armó nuestro manager (Pablo) — el orden y los hitos de entrega.
Cruzar ambos nos dio un flujo para priorizar y dividir tareas importantes que dependen unas de otras. El número de ticket es el orden de construcción (número menor = se hace primero), alineado a la secuencia de plan/knowledge/v10-gaps.md y al ROADMAP.
3.2 Dos tracks con dependencia explícita
Cada feature se parte en dos tickets:
| Track | Carpeta | Prefijo | Qué cubre |
|---|---|---|---|
| API (backend) | plan/tickets/api/ | API-NN | Endpoints / capacidades del backend |
| UI (frontend) | plan/tickets/ui/ | UI-NN | Cablear cada pantalla a la API |
El ticket de UI depende de su ticket de API: primero se hace el API. Esto evita construir contra "endpoints fantasma" que todavía no existen.
3.3 Anatomía de un ticket
Cada ticket es un archivo Markdown con metadata fija. Ejemplo real (API-46):
# API-46 — screening auto-close: doc fix + audit-assertion test
**Status:**
done
**GitHub issue:** [#189](https://github.com/Clarolab-Junin/cumplepld/issues/189)
**Size:** XS
**Type:** Bug (doc) + Test gap
**Spotted during:** QA validation of API-44
**Parent:** API-44
## Problem ← qué está mal / qué falta, con refs a file:línea
## Scope ← qué se va a tocar, acotado
## Acceptance criteria ← checklist verificable (incluye `make test` green)
## References ← rutas exactas a código, contratos, specs, QA reportLa regla clave: las referencias apuntan a archivo:línea. Eso le permite a Claude ir directo al punto sin explorar a ciegas (otra vez, economía de tokens).
3.4 Ticket ↔ GitHub issue (al mismo tiempo)
El procedimiento, solo con gh CLI (sin MCP):
gh issue create --title "API-46: screening auto-close doc fix" --body "..."- Crear el issue con contexto, criterios de aceptación y link al archivo del ticket.
- Agregar
- **GitHub issue:** #NNal archivo del ticket. - Agregar el número de issue a la fila del
README.mddel índice correspondiente.
Al empezar a trabajar un ticket, se autoasigna el issue: gh issue edit <N> --add-assignee @me.
4. Flujo de ramas y PRs (sin tablero, sin CI)
- Nunca commit/push directo a
devnimain— ni siquiera para docs. Siempre rama desdedev. - Los PR apuntan a
dev(--base dev);mainse promueve aparte. - Cada PR linkea su issue con
Closes #N/Refs #N. Ojo: como mergeamos adev(no a la branch default), GitHub no autocierra el issue — se cierra a mano después del merge confirmado. - Nunca cerrar un issue antes de que su PR esté mergeado.
5. OpenSpec — especificación dirigida por IA
Usamos OpenSpec para que los cambios pasen por un flujo de artefactos antes de tocar código. Vive en openspec/.
5.1 Configuración
| Pieza | Rol |
|---|---|
openspec/config.yaml | Apunta al schema clarolab-workflow (nuestro fork del schema base). |
openspec/schemas/clarolab-workflow/ | El schema forkeado: define los artefactos proposal → specs → design → tasks y sus templates. |
openspec/specs/ | Specs vivas por capacidad (ej. screening-alert-auto-close, action-center-queue). |
openspec/changes/ | Cambios en curso; changes/archive/ guarda los ya aplicados (12 archivados a la fecha). |
5.2 Flujo de trabajo
Skills dedicadas manejan cada fase: opsx:propose → opsx:apply → opsx:archive (y opsx:explore / opsx:sync de apoyo).
- Propose: genera propuesta + specs delta + design + tasks de una. El schema recomienda Opus para la fase de propuesta (más capaz para diseño).
- Apply: implementa las tasks del change.
- Archive: finaliza y mueve el change a
archive/.
ExitPlanMode en una sesión opsx, Claude se detiene — no escribe código hasta que corramos /opsx:apply. Separar "proponer" de "aplicar" evita gastar tokens implementando algo que todavía no aprobamos.5.3 Loop benéfico: el plan genera tickets nuevos
5.4 Mantener el fork al día: /update-openspec
Nuestro schema clarolab-workflow es un fork del workflow base de OpenSpec (@fission-ai/openspec, antes spec-driven). Como cualquier fork, el upstream sigue mejorando después de que lo bifurcamos. La skill /update-openspec es la herramienta para mantener ese fork sincronizado — no es una skill de "consulta de conocimiento", es de mantenimiento de infraestructura.
Qué hace, paso a paso:
openspec update— regenera los archivos de instrucciones del paquete para la versión instalada.- Ubica el commit del fork (snapshot del upstream al momento de bifurcar) y la ruta del upstream actual en el store de pnpm.
- Diff de mejoras upstream: compara el upstream-al-forkear contra el upstream-de-hoy → qué mejoró el paquete desde que lo forkeamos.
- Diff de nuestra divergencia: compara el baseline del fork contra nuestro schema actual → qué customizamos nosotros.
- Merge guiado: muestra los dos diffs lado a lado para incorporar las mejoras upstream sin pisar nuestras customizaciones.
El resultado: el fork se beneficia de las nuevas versiones de OpenSpec de forma controlada, manteniendo nuestras reglas propias (ej. la recomendación de Opus para la fase de propuesta).
6. Graphify — grafo de conocimiento del repo
El repo tiene un grafo de conocimiento persistente en graphify-out/ (god nodes, detección de comunidades, relaciones cross-file). Sirve para responder preguntas de arquitectura devolviendo un subgrafo acotado en lugar de volcar archivos enteros al contexto.
6.1 Costo inicial vs. mantenimiento
cost.json), el mantenimiento es gratis: make graph corre graphify update en modo solo-AST, sin costo de LLM. Se paga una vez el armado; después solo se refresca.6.2 Cómo lo usamos
- Para preguntas de código: primero
graphify query "<pregunta>";graphify path "<A>" "<B>"para relaciones;graphify explain "<concepto>"para algo puntual. - Para navegación amplia:
graphify-out/wiki/index.mden vez de browsear el código crudo. GRAPH_REPORT.mdsolo para revisión de arquitectura amplia.- Tras modificar código:
make graphy commiteargraph.json+GRAPH_REPORT.md.
graphify hook install — reinstala el auto-rebuild que genera conflictos para el equipo. El refresh es manual y deliberado.6.3 Forzado por hooks
En .claude/settings.json hay hooks PreToolUse que, cuando existe graph.json, obligan a orientar con graphify antes de hacer grep o leer archivos de código. Si Claude intenta grepear o leer un .py/.ts directo, el hook inyecta un recordatorio mandatorio de usar graphify primero. Esto baja el consumo de tokens de exploración de forma automática, incluso en subagentes.
7. Superpowers y skills
Usamos Superpowers (framework de skills) más skills propias del proyecto. La regla: si una skill aplica, se usa antes de responder.
| Categoría | Ejemplos |
|---|---|
| Proceso (Superpowers) | brainstorming, systematic-debugging, test-driven-development, writing-plans, verification-before-completion |
| OpenSpec | opsx:propose, opsx:apply, opsx:archive, opsx:explore, opsx:sync |
| Migraciones (propias) | create-migration, apply-migration, squash-migrations |
| Calidad / QA (propias) | safe-fix, ui-ticket-validator, review / code-review |
| Conocimiento | graphify |
| Mantenimiento de infraestructura | update-openspec (sincroniza nuestro fork del schema con el upstream — ver §5.4) |
Las skills "rígidas" (TDD, debugging sistemático) se siguen al pie de la letra; las "flexibles" se adaptan. La prioridad: skills del usuario/proyecto > skills de Superpowers > comportamiento por defecto.
8. Sin CI: qué implica y cómo lo compensamos
Lo que la suple:
- Todo corre en Docker vía
make(make test,make migrate,make simulate...). Postgres únicamente — no existe fallback a SQLite y no se agrega.
- Git hooks locales (Husky), que actúan como mini-CI:
Hook Cuándo Qué hace .husky/pre-commitcada commit UI: pnpm lint-staged+typecheck.husky/pre-pushcada push Backend: make test-push(levanta el stack, corre pytest, lo baja) - Gate pre-PR (en orden, no se saltea): capturar aprendizajes en docs → checklist de docs → checklist de fixtures → code review del diff → recién ahí commit/push/PR.
- Fixtures como verificación de capacidad: cualquier cambio de capacidad de la API actualiza
make simulate/make populateen el mismo commit. Sin CI, los fixtures son la prueba viva de que el endpoint funciona end-to-end. - Docs en el mismo commit que el comportamiento: los contratos en
plan/api/contracts/son la única fuente de verdad de la API implementada. Sirven para sincronizar la API con el frontend: cuando Claude cablea una pantalla de UI, lee el contrato en vez del código del backend — más barato en tokens y más estable que parsear los controllers. Por eso el contrato tiene que reflejar el código en cada commit.
9. Reglas que le metimos a Claude
Las reglas viven en archivos versionados y se cargan automáticamente:
| Archivo | Qué fija |
|---|---|
.claude/CLAUDE.md | Reglas base: todo en Docker vía make; Postgres-only; nunca commit directo a dev/main; contratos = fuente de verdad; docs+fixtures en el mismo commit. |
.claude/AXIOMS.md | Principios de diseño (Ousterhout / "Philosophy of Software Design"): minimizar dependencias, módulos profundos, ocultar información, etc. Guían diseño y code review. |
.claude/docs/*.md | Guías puntuales cargadas según la tarea: git-workflow, migrations, docker, docs-maintenance. |
.claude/settings.json | Hooks que fuerzan graphify antes de grep/lectura de código (§6.3). |
api/CLAUDE.md / ui/CLAUDE.md | Reglas de backend y de frontend, autocargadas al tocar esos directorios. Además, cada track tiene sus propias skills: no comparten un único set — API y UI cuentan con skills específicas de su dominio (migraciones, validación de tickets UI, etc.) que se activan según en qué parte del repo se trabaja. |
Qué NO tocar / qué evitar
- No agregar fallback a SQLite — Postgres only.
- No commitear/pushear a
devnimain. - No construir contra endpoints de specs/tickets sin verificarlos en los contratos.
- No correr
graphify hook install(rompe al equipo). - No cargar la base de conocimiento completa por defecto.
- No cerrar issues antes del merge.
10. Cómo sería esto con tokens y presupuesto infinitos en construcción
| Hoy (Pro, tokens escasos, sin CI) | Con presupuesto infinito (hipótesis a debatir) |
|---|---|
Tickets como archivos + gh CLI, sin MCP | ¿MCP de GitHub/ClickUp para sincronización bidireccional automática? A evaluar si el costo en contexto se justifica. |
| Sin CI; hooks locales + fixtures como red | CI real (GitHub Actions): tests, lint, typecheck y make simulate en cada PR; quizás un agente de review automático por PR. |
graphify refresh manual (make graph, AST-only) | Rebuild semántico continuo del grafo + re-extracción profunda; grafo siempre fresco sin pensar en costo. |
| Modelo según fase (haiku para lectura, Opus para diseño) | ¿Opus en todo? — a debatir: ¿conviene Opus para cada paso o el modelo barato sigue siendo mejor en lectura/exploración aunque sobre presupuesto? Lo que sí: subagentes paralelos para explorar varias hipótesis a la vez. |
/compact entre fases; carga de docs bajo demanda | Contexto amplio sin compactar; cargar toda la base de conocimiento relevante de entrada. |
| Tickets S/XS directos, planning pesado solo para L/XL | Planning + grilling formal para todo cambio, con validación adversarial previa a cada edit. |
Qué conservaríamos igual (no es deuda — es así por elección)
Qué mejoraríamos
openspec archive y make graph al último paso del CI, disparados automáticamente después de iniciar el proceso de merge. Hoy esos dos pasos (archivar el change de OpenSpec y refrescar el grafo) los corremos a mano antes de commitear; con CI serían el cierre automático del pipeline, garantizando que graph.json y el archivo de OpenSpec queden siempre sincronizados con lo mergeado, sin depender de que nos acordemos.Preguntas abiertas para llenar entre los dos:
• ¿Cuánto de la calidad actual viene justamente de que los tokens escasos nos obligan a ser precisos?
• ¿Qué automatizaríamos primero si pudiéramos: CI, sync de issues, o rebuild del grafo?

Comments