oficina-opencode 0.0.0-stage → 2.0.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.
- package/DESIGN.md +145 -0
- package/LICENSE +21 -0
- package/README.md +670 -2
- package/agents/oficina-architect.md +72 -0
- package/agents/oficina-commander.md +108 -0
- package/agents/oficina-critico.md +148 -0
- package/agents/oficina-director.md +160 -0
- package/agents/oficina-guardian.md +128 -0
- package/agents/oficina-integrator.md +98 -0
- package/agents/oficina-verificador.md +88 -0
- package/commands/oficina.md +36 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +394 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/briefing.d.ts +115 -0
- package/dist/core/briefing.d.ts.map +1 -0
- package/dist/core/briefing.js +410 -0
- package/dist/core/briefing.js.map +1 -0
- package/dist/core/bus.d.ts +132 -0
- package/dist/core/bus.d.ts.map +1 -0
- package/dist/core/bus.js +250 -0
- package/dist/core/bus.js.map +1 -0
- package/dist/core/catalog.d.ts +303 -0
- package/dist/core/catalog.d.ts.map +1 -0
- package/dist/core/catalog.js +816 -0
- package/dist/core/catalog.js.map +1 -0
- package/dist/core/dispatch.d.ts +110 -0
- package/dist/core/dispatch.d.ts.map +1 -0
- package/dist/core/dispatch.js +301 -0
- package/dist/core/dispatch.js.map +1 -0
- package/dist/core/factory.d.ts +74 -0
- package/dist/core/factory.d.ts.map +1 -0
- package/dist/core/factory.js +243 -0
- package/dist/core/factory.js.map +1 -0
- package/dist/core/fsx.d.ts +39 -0
- package/dist/core/fsx.d.ts.map +1 -0
- package/dist/core/fsx.js +113 -0
- package/dist/core/fsx.js.map +1 -0
- package/dist/core/gates.d.ts +97 -0
- package/dist/core/gates.d.ts.map +1 -0
- package/dist/core/gates.js +467 -0
- package/dist/core/gates.js.map +1 -0
- package/dist/core/leases.d.ts +46 -0
- package/dist/core/leases.d.ts.map +1 -0
- package/dist/core/leases.js +94 -0
- package/dist/core/leases.js.map +1 -0
- package/dist/core/log.d.ts +30 -0
- package/dist/core/log.d.ts.map +1 -0
- package/dist/core/log.js +43 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/mesa.d.ts +82 -0
- package/dist/core/mesa.d.ts.map +1 -0
- package/dist/core/mesa.js +178 -0
- package/dist/core/mesa.js.map +1 -0
- package/dist/core/office.d.ts +208 -0
- package/dist/core/office.d.ts.map +1 -0
- package/dist/core/office.js +618 -0
- package/dist/core/office.js.map +1 -0
- package/dist/core/paths.d.ts +67 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +136 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/retry.d.ts +41 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +86 -0
- package/dist/core/retry.js.map +1 -0
- package/dist/core/roster.d.ts +47 -0
- package/dist/core/roster.d.ts.map +1 -0
- package/dist/core/roster.js +146 -0
- package/dist/core/roster.js.map +1 -0
- package/dist/core/router.d.ts +67 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +186 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/state.d.ts +89 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +303 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/types.d.ts +333 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +27 -0
- package/dist/core/types.js.map +1 -0
- package/dist/hooks/compacting.d.ts +18 -0
- package/dist/hooks/compacting.d.ts.map +1 -0
- package/dist/hooks/compacting.js +72 -0
- package/dist/hooks/compacting.js.map +1 -0
- package/dist/hooks/scopeGuard.d.ts +39 -0
- package/dist/hooks/scopeGuard.d.ts.map +1 -0
- package/dist/hooks/scopeGuard.js +114 -0
- package/dist/hooks/scopeGuard.js.map +1 -0
- package/dist/hooks/sessionIdle.d.ts +35 -0
- package/dist/hooks/sessionIdle.d.ts.map +1 -0
- package/dist/hooks/sessionIdle.js +110 -0
- package/dist/hooks/sessionIdle.js.map +1 -0
- package/dist/hooks/systemTransform.d.ts +18 -0
- package/dist/hooks/systemTransform.d.ts.map +1 -0
- package/dist/hooks/systemTransform.js +63 -0
- package/dist/hooks/systemTransform.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +854 -0
- package/dist/tools/index.js.map +1 -0
- package/docs/ARCHITECTURE.md +258 -0
- package/docs/QUE-ES.md +337 -0
- package/examples/opencode.json +7 -0
- package/package.json +81 -4
- package/skills/oficina/README.md +120 -0
- package/skills/oficina/SKILL.md +251 -0
- package/skills/oficina/reference/mesh.md +345 -0
- package/skills/oficina/reference/protocol.md +342 -0
- package/skills/oficina/reference/roles.md +171 -0
- package/skills/oficina/reference/templates.md +278 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Fichas de Rol y Enrutado
|
|
2
|
+
|
|
3
|
+
Cada rol tiene un contrato estrecho. Un agente que hace dos roles no cumple el contrato de ninguno.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Enrutado determinista
|
|
8
|
+
|
|
9
|
+
El Director NO elige agente por intuición. Usa esta tabla:
|
|
10
|
+
|
|
11
|
+
| Tipo de trabajo de la card | Owner asignado | Revisor asignado (siempre distinto) |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Entender código existente, mapear flujos, encontrar deuda | `code-explorer` | `code-architect` |
|
|
14
|
+
| Decidir diseño, elegir approach, definir interfaces | `code-architect` | `oficina-critico` |
|
|
15
|
+
| Escribir o modificar código | `general` | `oficina-critico` |
|
|
16
|
+
| Arreglar bug con causa raíz conocida | `general` | `oficina-critico` |
|
|
17
|
+
| Arreglar bug con causa raíz desconocida | `code-explorer` primero, luego `general` | `oficina-critico` |
|
|
18
|
+
| Refactor sin cambio de comportamiento | `general` | `oficina-critico` |
|
|
19
|
+
| Tests / cobertura | `general` | `oficina-critico` |
|
|
20
|
+
| Performance / profiling | `code-explorer` (medir) → `general` (optimizar) | `oficina-critico` |
|
|
21
|
+
| Documentación / API docs | `general` | `code-explorer` |
|
|
22
|
+
| Seguridad, threat model, secrets | `general` + skill `secure-code-review` | `oficina-critico` |
|
|
23
|
+
| CI/CD / deploy / infra | `general` | `oficina-critico` |
|
|
24
|
+
| Revisión de diff ya hecho | `oficina-critico` | `code-architect` |
|
|
25
|
+
|
|
26
|
+
**Regla de rotación:** si el mismo agente sería owner de 3 cards consecutivas del mismo tipo, la cuarta la toma otro agente aunque el tipo sea el mismo. Esto existe para romper la monotonía.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Ficha: DIRECTOR (`oficina-director`)
|
|
31
|
+
|
|
32
|
+
**Misión:** convertir un objetivo en un plan ejecutable, mantener el loop, decidir, escalar.
|
|
33
|
+
|
|
34
|
+
**Hace:**
|
|
35
|
+
- Descompone el objetivo en cards con acceptance criteria verificables
|
|
36
|
+
- Asigna owner y scope por la tabla de enrutado
|
|
37
|
+
- Elige la siguiente card (la de mayor prioridad con dependencias satisfechas)
|
|
38
|
+
- Detecta estancamiento y re-planifica
|
|
39
|
+
- Escala al usuario cuando el caso lo justifica
|
|
40
|
+
- Genera el informe final de entrega
|
|
41
|
+
|
|
42
|
+
**NO hace:** escribir código, revisar código, verificar técnicamente. Si el Director escribe código, el proceso está roto.
|
|
43
|
+
|
|
44
|
+
**Decide:**
|
|
45
|
+
- Qué card sigue
|
|
46
|
+
- Aprobado / Rework / Replan / Escalar
|
|
47
|
+
- Si el objetivo está cumplido
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Ficha: EXPLORADOR (`code-explorer`)
|
|
52
|
+
|
|
53
|
+
**Misión:** entender el terreno antes de tocarlo.
|
|
54
|
+
|
|
55
|
+
**Entrega:** `.oficina/artifacts/<card>/handoff.md` con:
|
|
56
|
+
- Entry points y flujo de ejecución con `file:line`
|
|
57
|
+
- Capas de abstracción mapeadas
|
|
58
|
+
- Dependencias (internas y externas)
|
|
59
|
+
- Patrones existentes a reusar
|
|
60
|
+
- Deuda técnica y trampas
|
|
61
|
+
- Lista de 5-10 archivos esenciales
|
|
62
|
+
|
|
63
|
+
**Criterio de terminación:** un implementador puede empezar sin volver a preguntar nada.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Ficha: ARQUITECTO (`code-architect`)
|
|
68
|
+
|
|
69
|
+
**Misión:** decidir cómo se construye, no construirlo.
|
|
70
|
+
|
|
71
|
+
**Entrega:** `.oficina/artifacts/<card>/handoff.md` con:
|
|
72
|
+
- Patrones y convenciones encontrados (con `file:line`)
|
|
73
|
+
- Decisión de arquitectura + rationale + trade-offs
|
|
74
|
+
- Diseño por componente: path, responsabilidad, dependencias, interfaces
|
|
75
|
+
- Mapa de implementación: archivos exactos a crear/modificar
|
|
76
|
+
- Flujo de datos completo
|
|
77
|
+
- Secuencia de build en fases
|
|
78
|
+
- Manejo de errores, state, testing, performance, security
|
|
79
|
+
|
|
80
|
+
**Criterio de terminación:** un implementador puede escribir el código sin inventar nada.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Ficha: IMPLEMENTADOR (`general`)
|
|
85
|
+
|
|
86
|
+
**Misión:** escribir el código que el arquitecto diseñó.
|
|
87
|
+
|
|
88
|
+
**Precondición:** existe un `handoff.md` del arquitecto. Si no existe, la card no arranca.
|
|
89
|
+
|
|
90
|
+
**Entrega:**
|
|
91
|
+
- El código, en el scope de la card y nada más
|
|
92
|
+
- `.oficina/artifacts/<card>/handoff.md` con: qué se implementó, archivos tocados, decisiones tomadas, qué quedó afuera
|
|
93
|
+
- `.oficina/artifacts/<card>/evidence.md` con la salida real de los comandos ejecutados
|
|
94
|
+
|
|
95
|
+
**Prohibido:**
|
|
96
|
+
- Tocar archivos fuera del `scope` de la card
|
|
97
|
+
- Refactorizar código adyacente no relacionado
|
|
98
|
+
- Marcar nada como terminado sin evidencia ejecutada
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Ficha: CRÍTICO (`oficina-critico`)
|
|
103
|
+
|
|
104
|
+
**Misión:** juzgar el trabajo de otro. Es el control de calidad de la oficina.
|
|
105
|
+
|
|
106
|
+
**Entrega:** `.oficina/artifacts/<card>/review.md` con:
|
|
107
|
+
- Alcance exacto revisado + procedencia
|
|
108
|
+
- Findings agrupados: Critical → Important
|
|
109
|
+
- Por cada finding: confianza (0-100), path:line, categoría, escenario de reproducción concreto, evidencia de baseline, dirección del fix, dónde va el test de regresión
|
|
110
|
+
- Ledger de scope/lectura: qué se leyó completo, qué callers se leyeron, qué paths compartidos se trazaron
|
|
111
|
+
- Veredicto: `APROBADO` o `RECHAZADO` + razón
|
|
112
|
+
|
|
113
|
+
**Reglas:**
|
|
114
|
+
- Reporta solo findings con confianza ≥ 80
|
|
115
|
+
- Si no hay findings: `APROBADO` — pero solo si el ledger de lectura está completo
|
|
116
|
+
- Si la cobertura es incompleta: `RECHAZADO` por cobertura, no por findings
|
|
117
|
+
- Nunca revises una card que tú implementaste
|
|
118
|
+
|
|
119
|
+
**Dimensiones** (de `multi-reviewer-patterns`): security, performance, architecture, testing, accessibility. Elegí las que apliquen a la card.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Ficha: GUARDIÁN (`oficina-guardian` + skill `secure-code-review`)
|
|
124
|
+
|
|
125
|
+
**Misión:** cazar lo que el Crítico no ve.
|
|
126
|
+
|
|
127
|
+
**Corre en:** toda card que toque código, config, dependencias, auth o datos.
|
|
128
|
+
|
|
129
|
+
**Entrega:** `.oficina/artifacts/<card>/gates.md`, sección Seguridad:
|
|
130
|
+
- Trust boundaries mapeadas
|
|
131
|
+
- Paths de input auditados
|
|
132
|
+
- Auth flows verificados
|
|
133
|
+
- Secretos: escaneo de `.env`, keys, tokens
|
|
134
|
+
- Dependencias: vulnerabilidades nuevas
|
|
135
|
+
- Checklist por clase de vulnerabilidad (OWASP)
|
|
136
|
+
|
|
137
|
+
**Regla:** un hallazgo de seguridad es `Critical` o `High` por defecto. Sin excepción.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Ficha: VERIFICADOR (`general`)
|
|
142
|
+
|
|
143
|
+
**Misión:** ejecutar, no opinar.
|
|
144
|
+
|
|
145
|
+
**Entrega:** `.oficina/artifacts/<card>/gates.md`, sección Técnico — 6 fases de `verification-loop`:
|
|
146
|
+
|
|
147
|
+
| # | Fase | Comando típico | Resultado |
|
|
148
|
+
|---|---|---|---|
|
|
149
|
+
| 1 | Build | `npm run build` / `cargo build` | PASS/FAIL/N/A |
|
|
150
|
+
| 2 | Type check | `tsc --noEmit` / `mypy` | PASS/FAIL/N/A |
|
|
151
|
+
| 3 | Lint | `eslint .` / `ruff` | PASS/FAIL/N/A |
|
|
152
|
+
| 4 | Tests + coverage | `pytest --cov` / `npm test` | PASS/FAIL/N/A |
|
|
153
|
+
| 5 | Security grep | patrón de secretos, `npm audit` | PASS/FAIL/N/A |
|
|
154
|
+
| 6 | Diff review | `git diff` contra baseline | PASS/FAIL/N/A |
|
|
155
|
+
|
|
156
|
+
**Regla:** si una fase aplicable falla, la card va a REWORK. Si el proyecto no tiene la herramienta, `N/A` explícito con el motivo. Nunca `N/A` silencioso.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Prompts de delegación (plantillas)
|
|
161
|
+
|
|
162
|
+
Los subagentes son stateless. Cada delegación incluye contexto completo. Plantillas en `templates.md`, sección "Delegación".
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Rotación y anti-monotonía
|
|
167
|
+
|
|
168
|
+
1. **Revisor ≠ autor**, siempre. La oficina no tiene auto-aprobación.
|
|
169
|
+
2. **Rotación de owner**: 3 cards del mismo tipo seguidos con el mismo owner → el cuarto lo toma otro.
|
|
170
|
+
3. **Dimensionalidad de revisión**: si dos cards del mismo tipo pasan por el mismo revisor, la segunda revisión cambia de dimensión (seguridad en una, performance en la otra).
|
|
171
|
+
4. **Un agent, una card**: no encadenes dos cards al mismo subagente en una sola delegación.
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Templates de OFICINA
|
|
2
|
+
|
|
3
|
+
Todos los templates van en `.oficina/` del proyecto donde se está trabajando.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## `board.md`
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# 🏢 OFICINA — <objetivo>
|
|
11
|
+
|
|
12
|
+
**Creado:** <ISO>
|
|
13
|
+
**Estado:** EN CURSO | ENTREGADO | BLOQUEADO | ESCALADO
|
|
14
|
+
**Presupuesto:** <n>/20 cards, <n>/40 agents
|
|
15
|
+
|
|
16
|
+
## Tablero
|
|
17
|
+
|
|
18
|
+
### TODO
|
|
19
|
+
- [ ] **T-00** — <título> · owner: <agente> · gate: <qué lo aprueba> · scope: <archivos>
|
|
20
|
+
|
|
21
|
+
### IN_PROGRESS
|
|
22
|
+
- [ ] **T-01** — <título> · owner: <agente> · iter: <n>
|
|
23
|
+
|
|
24
|
+
### REVIEW
|
|
25
|
+
- [ ] **T-02** — <título> · owner: <agente> · artifacts: <dir>
|
|
26
|
+
|
|
27
|
+
### DONE
|
|
28
|
+
- [x] **T-03** — <título> · owner: <agente> · gates: ✅ · review: APROBADO
|
|
29
|
+
|
|
30
|
+
### BLOCKED
|
|
31
|
+
- [ ] **T-04** — <título> · razón: <qué falta> · owner: <quién lo resuelve>
|
|
32
|
+
|
|
33
|
+
### ESCALATED
|
|
34
|
+
- [ ] **T-05** — <título> · opciones: <A|B|C> · recomendación: <X>
|
|
35
|
+
|
|
36
|
+
## Dependencias
|
|
37
|
+
```
|
|
38
|
+
T-00 → T-01 → T-02
|
|
39
|
+
T-01 → T-03
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Checkpoints
|
|
43
|
+
- [x] Checkpoint 1 (<n>/<total>) — <fecha> — <resumen>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## `state.json`
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"objective": "<objetivo original del usuario>",
|
|
53
|
+
"created": "<ISO>",
|
|
54
|
+
"updated": "<ISO>",
|
|
55
|
+
"status": "in_progress",
|
|
56
|
+
"iteration": 0,
|
|
57
|
+
"current_card": "T-01",
|
|
58
|
+
"budget": {
|
|
59
|
+
"max_cards": 20,
|
|
60
|
+
"cards_used": 2,
|
|
61
|
+
"max_agent_calls": 40,
|
|
62
|
+
"agent_calls_used": 5
|
|
63
|
+
},
|
|
64
|
+
"cards": [
|
|
65
|
+
{
|
|
66
|
+
"id": "T-00",
|
|
67
|
+
"title": "Mapear sistema de auth existente",
|
|
68
|
+
"type": "exploration",
|
|
69
|
+
"state": "done",
|
|
70
|
+
"owner": "code-explorer",
|
|
71
|
+
"reviewer": "code-architect",
|
|
72
|
+
"scope": ["src/auth/**", "src/middleware/**"],
|
|
73
|
+
"acceptance": [
|
|
74
|
+
"Entry points con file:line mapeados",
|
|
75
|
+
"Dependencias externas listadas",
|
|
76
|
+
"Lista de archivos esenciales de 5-10"
|
|
77
|
+
],
|
|
78
|
+
"gate": "handoff.md existe y lista entry points + archivos esenciales",
|
|
79
|
+
"depends_on": [],
|
|
80
|
+
"attempts": 1,
|
|
81
|
+
"rejections": [],
|
|
82
|
+
"artifacts": ".oficina/artifacts/T-00",
|
|
83
|
+
"result": "APROBADO"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"escalations": [],
|
|
87
|
+
"checkpoints": []
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## `context.md`
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
# Contexto de la corrida — <objetivo>
|
|
97
|
+
|
|
98
|
+
## Decisiones tomadas
|
|
99
|
+
- [T-00] <decisión> — <razón> (decidido por <rol>)
|
|
100
|
+
|
|
101
|
+
## Constraints descubiertos
|
|
102
|
+
- [T-00] <constraint>
|
|
103
|
+
|
|
104
|
+
## Piezas construidas
|
|
105
|
+
- [T-01] `<path>` — <qué es>
|
|
106
|
+
|
|
107
|
+
## Trampas encontradas
|
|
108
|
+
- [T-01] <trampa> — <por qué no tocarla>
|
|
109
|
+
|
|
110
|
+
## Temas abiertos
|
|
111
|
+
- <tema sin resolver>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Delegación: prompts completos
|
|
117
|
+
|
|
118
|
+
Los subagentes son stateless. Cada delegación se arma con contexto completo.
|
|
119
|
+
|
|
120
|
+
### Explorador
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Trabajás en el proyecto <path>. Objetivo de la corrida: <objetivo>.
|
|
124
|
+
|
|
125
|
+
TU CARD: <card-id> — <título>
|
|
126
|
+
SCOPE: <archivos/patrones a mirar>
|
|
127
|
+
|
|
128
|
+
Escribí en `.oficina/artifacts/<card-id>/handoff.md`:
|
|
129
|
+
|
|
130
|
+
- Entry points con `file:line`
|
|
131
|
+
- Flujo de ejecución paso a paso
|
|
132
|
+
- Capas de abstracción (presentación → lógica → datos)
|
|
133
|
+
- Dependencias internas y externas
|
|
134
|
+
- Patrones y convenciones existentes a reusar
|
|
135
|
+
- Deuda técnica y trampas
|
|
136
|
+
- Lista de 5-10 archivos esenciales (o explicación de por qué hay menos)
|
|
137
|
+
|
|
138
|
+
Criterio de terminación: un implementador puede arrancar sin volver a preguntar nada.
|
|
139
|
+
No escribas código. No modifiques archivos del proyecto.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Arquitecto
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Trabajás en el proyecto <path>. Objetivo de la corrida: <objetivo>.
|
|
146
|
+
|
|
147
|
+
CONTEXTO DE TAREAS PREVIAS (leelo antes):
|
|
148
|
+
- <path a artifacts/*/handoff.md>
|
|
149
|
+
|
|
150
|
+
TU CARD: <card-id> — <título>
|
|
151
|
+
|
|
152
|
+
Escribí en `.oficina/artifacts/<card-id>/handoff.md`:
|
|
153
|
+
|
|
154
|
+
- Patrones y convenciones encontrados (con `file:line`)
|
|
155
|
+
- Decisión de arquitectura + rationale + trade-offs (una sola opción, no un menú)
|
|
156
|
+
- Diseño por componente: path, responsabilidad, dependencias, interfaces
|
|
157
|
+
- Mapa de implementación: archivos exactos a crear/modificar
|
|
158
|
+
- Flujo de datos completo
|
|
159
|
+
- Secuencia de build en fases
|
|
160
|
+
- Manejo de errores, state, testing, performance, security
|
|
161
|
+
|
|
162
|
+
Criterio de terminación: un implementador puede escribir el código sin inventar nada.
|
|
163
|
+
No escribas código de implementación.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Implementador
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
Trabajás en el proyecto <path>. Objetivo de la corrida: <objetivo>.
|
|
170
|
+
|
|
171
|
+
DISEÑO (leelo primero, es tu spec):
|
|
172
|
+
`<path a artifacts/<card-id>/handoff.md>`
|
|
173
|
+
|
|
174
|
+
CONTEXTO RELEVANTE:
|
|
175
|
+
<paths a artifacts previos>
|
|
176
|
+
|
|
177
|
+
TU CARD: <card-id> — <título>
|
|
178
|
+
SCOPE ESTRICTO: <archivos que podés tocar>
|
|
179
|
+
|
|
180
|
+
Implementá siguiendo el diseño. Escribí:
|
|
181
|
+
- El código en el scope y nada más
|
|
182
|
+
- `.oficina/artifacts/<card-id>/handoff.md`: qué hiciste, archivos tocados, decisiones, qué quedó afuera
|
|
183
|
+
- `.oficina/artifacts/<card-id>/evidence.md`: salida REAL de los comandos que corriste (tests, build, lint), pegada literal
|
|
184
|
+
|
|
185
|
+
Reglas: no toques archivos fuera del scope, no refactorices código adyacente, no digas que algo está listo sin la salida real del comando.
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Crítico
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
Revisás trabajo ajeno. Objetivo de la corrida: <objetivo>.
|
|
192
|
+
|
|
193
|
+
CARD: <card-id> — <título>
|
|
194
|
+
AUTOR (NO lo revises si sos vos): <owner>
|
|
195
|
+
ARCHIVOS EN SCOPE: <lista>
|
|
196
|
+
|
|
197
|
+
Leé:
|
|
198
|
+
- `.oficina/artifacts/<card-id>/handoff.md`
|
|
199
|
+
- `.oficina/artifacts/<card-id>/evidence.md`
|
|
200
|
+
- Los archivos del código en scope
|
|
201
|
+
|
|
202
|
+
Escribí `.oficina/artifacts/<card-id>/review.md`:
|
|
203
|
+
|
|
204
|
+
- Ledger de scope/lectura: qué leíste completo, qué callers leíste, qué paths compartidos trazaste
|
|
205
|
+
- Findings agrupados Critical → Important, cada uno con: confianza 0-100, path:line, categoría, descripción, escenario de reproducción concreto, evidencia de baseline, dirección del fix, dónde va el test de regresión
|
|
206
|
+
- Solo findings con confianza ≥ 80. Los de abajo, descartalos con la razón anotada.
|
|
207
|
+
- Dimensiones revisadas: security, performance, architecture, testing, accessibility — decí cuáles y por qué
|
|
208
|
+
|
|
209
|
+
VEREDICTO: APROBADO o RECHAZADO.
|
|
210
|
+
Si no hay findings pero el ledger está incompleto → RECHAZADO por cobertura.
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Verificador (gate técnico)
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Verificás una card. Objetivo de la corrida: <objetivo>.
|
|
217
|
+
|
|
218
|
+
CARD: <card-id> — <título>
|
|
219
|
+
ARCHIVOS: <scope>
|
|
220
|
+
|
|
221
|
+
Corré estas fases y pegá la salida real de cada una en `.oficina/artifacts/<card-id>/gates.md`, sección Técnico:
|
|
222
|
+
|
|
223
|
+
1. Build → <comando o N/A + motivo>
|
|
224
|
+
2. Type check → <comando o N/A + motivo>
|
|
225
|
+
3. Lint → <comando o N/A + motivo>
|
|
226
|
+
4. Tests+coverage → <comando o N/A + motivo>
|
|
227
|
+
5. Security grep → <comando o N/A + motivo>
|
|
228
|
+
6. Diff review → <comando o N/A + motivo>
|
|
229
|
+
|
|
230
|
+
Detectá el tooling del proyecto vos (package.json, pyproject.toml, Makefile, etc.) si no te lo doy.
|
|
231
|
+
|
|
232
|
+
Tabla: | # | Fase | Comando | Resultado | Detalle |
|
|
233
|
+
"Gate técnico: PASS" o "Gate técnico: FAIL".
|
|
234
|
+
Nunca pongas PASS en una fase que no corriste. Si no existe la herramienta: N/A con motivo explícito.
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Guardián (gate seguridad)
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
Auditás seguridad de una card. Objetivo de la corrida: <objetivo>.
|
|
241
|
+
|
|
242
|
+
CARD: <card-id> — <título>
|
|
243
|
+
ARCHIVOS: <scope>
|
|
244
|
+
|
|
245
|
+
Usá el checklist de la skill `secure-code-review`. Escribí `.oficina/artifacts/<card-id>/gates.md`, sección Seguridad:
|
|
246
|
+
|
|
247
|
+
- Trust boundaries mapeadas
|
|
248
|
+
- Paths de input auditados (con archivo:línea)
|
|
249
|
+
- Auth flows verificados
|
|
250
|
+
- Escaneo de secretos (env, keys, tokens) — incluí el comando que usaste
|
|
251
|
+
- Dependencias: vulns nuevas
|
|
252
|
+
- Findings por clase de vulnerabilidad (OWASP)
|
|
253
|
+
|
|
254
|
+
Regla: un hallazgo de seguridad explotable por usuarios externos es Critical o High. Sin excepción.
|
|
255
|
+
"Gate seguridad: PASS" o "Gate seguridad: FAIL".
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## `artifacts/<card-id>/` — estructura
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
.oficina/
|
|
264
|
+
├── board.md
|
|
265
|
+
├── state.json
|
|
266
|
+
├── context.md
|
|
267
|
+
└── artifacts/
|
|
268
|
+
├── T-00/
|
|
269
|
+
│ ├── handoff.md
|
|
270
|
+
│ ├── evidence.md
|
|
271
|
+
│ ├── review.md
|
|
272
|
+
│ ├── gates.md
|
|
273
|
+
│ └── decision.md
|
|
274
|
+
└── T-01/
|
|
275
|
+
└── ...
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Crear la carpeta de la card antes de delegar.
|