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.
Files changed (117) hide show
  1. package/DESIGN.md +145 -0
  2. package/LICENSE +21 -0
  3. package/README.md +670 -2
  4. package/agents/oficina-architect.md +72 -0
  5. package/agents/oficina-commander.md +108 -0
  6. package/agents/oficina-critico.md +148 -0
  7. package/agents/oficina-director.md +160 -0
  8. package/agents/oficina-guardian.md +128 -0
  9. package/agents/oficina-integrator.md +98 -0
  10. package/agents/oficina-verificador.md +88 -0
  11. package/commands/oficina.md +36 -0
  12. package/dist/cli.d.ts +12 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +394 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/core/briefing.d.ts +115 -0
  17. package/dist/core/briefing.d.ts.map +1 -0
  18. package/dist/core/briefing.js +410 -0
  19. package/dist/core/briefing.js.map +1 -0
  20. package/dist/core/bus.d.ts +132 -0
  21. package/dist/core/bus.d.ts.map +1 -0
  22. package/dist/core/bus.js +250 -0
  23. package/dist/core/bus.js.map +1 -0
  24. package/dist/core/catalog.d.ts +303 -0
  25. package/dist/core/catalog.d.ts.map +1 -0
  26. package/dist/core/catalog.js +816 -0
  27. package/dist/core/catalog.js.map +1 -0
  28. package/dist/core/dispatch.d.ts +110 -0
  29. package/dist/core/dispatch.d.ts.map +1 -0
  30. package/dist/core/dispatch.js +301 -0
  31. package/dist/core/dispatch.js.map +1 -0
  32. package/dist/core/factory.d.ts +74 -0
  33. package/dist/core/factory.d.ts.map +1 -0
  34. package/dist/core/factory.js +243 -0
  35. package/dist/core/factory.js.map +1 -0
  36. package/dist/core/fsx.d.ts +39 -0
  37. package/dist/core/fsx.d.ts.map +1 -0
  38. package/dist/core/fsx.js +113 -0
  39. package/dist/core/fsx.js.map +1 -0
  40. package/dist/core/gates.d.ts +97 -0
  41. package/dist/core/gates.d.ts.map +1 -0
  42. package/dist/core/gates.js +467 -0
  43. package/dist/core/gates.js.map +1 -0
  44. package/dist/core/leases.d.ts +46 -0
  45. package/dist/core/leases.d.ts.map +1 -0
  46. package/dist/core/leases.js +94 -0
  47. package/dist/core/leases.js.map +1 -0
  48. package/dist/core/log.d.ts +30 -0
  49. package/dist/core/log.d.ts.map +1 -0
  50. package/dist/core/log.js +43 -0
  51. package/dist/core/log.js.map +1 -0
  52. package/dist/core/mesa.d.ts +82 -0
  53. package/dist/core/mesa.d.ts.map +1 -0
  54. package/dist/core/mesa.js +178 -0
  55. package/dist/core/mesa.js.map +1 -0
  56. package/dist/core/office.d.ts +208 -0
  57. package/dist/core/office.d.ts.map +1 -0
  58. package/dist/core/office.js +618 -0
  59. package/dist/core/office.js.map +1 -0
  60. package/dist/core/paths.d.ts +67 -0
  61. package/dist/core/paths.d.ts.map +1 -0
  62. package/dist/core/paths.js +136 -0
  63. package/dist/core/paths.js.map +1 -0
  64. package/dist/core/retry.d.ts +41 -0
  65. package/dist/core/retry.d.ts.map +1 -0
  66. package/dist/core/retry.js +86 -0
  67. package/dist/core/retry.js.map +1 -0
  68. package/dist/core/roster.d.ts +47 -0
  69. package/dist/core/roster.d.ts.map +1 -0
  70. package/dist/core/roster.js +146 -0
  71. package/dist/core/roster.js.map +1 -0
  72. package/dist/core/router.d.ts +67 -0
  73. package/dist/core/router.d.ts.map +1 -0
  74. package/dist/core/router.js +186 -0
  75. package/dist/core/router.js.map +1 -0
  76. package/dist/core/state.d.ts +89 -0
  77. package/dist/core/state.d.ts.map +1 -0
  78. package/dist/core/state.js +303 -0
  79. package/dist/core/state.js.map +1 -0
  80. package/dist/core/types.d.ts +333 -0
  81. package/dist/core/types.d.ts.map +1 -0
  82. package/dist/core/types.js +27 -0
  83. package/dist/core/types.js.map +1 -0
  84. package/dist/hooks/compacting.d.ts +18 -0
  85. package/dist/hooks/compacting.d.ts.map +1 -0
  86. package/dist/hooks/compacting.js +72 -0
  87. package/dist/hooks/compacting.js.map +1 -0
  88. package/dist/hooks/scopeGuard.d.ts +39 -0
  89. package/dist/hooks/scopeGuard.d.ts.map +1 -0
  90. package/dist/hooks/scopeGuard.js +114 -0
  91. package/dist/hooks/scopeGuard.js.map +1 -0
  92. package/dist/hooks/sessionIdle.d.ts +35 -0
  93. package/dist/hooks/sessionIdle.d.ts.map +1 -0
  94. package/dist/hooks/sessionIdle.js +110 -0
  95. package/dist/hooks/sessionIdle.js.map +1 -0
  96. package/dist/hooks/systemTransform.d.ts +18 -0
  97. package/dist/hooks/systemTransform.d.ts.map +1 -0
  98. package/dist/hooks/systemTransform.js +63 -0
  99. package/dist/hooks/systemTransform.js.map +1 -0
  100. package/dist/index.d.ts +36 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +103 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/tools/index.d.ts +22 -0
  105. package/dist/tools/index.d.ts.map +1 -0
  106. package/dist/tools/index.js +854 -0
  107. package/dist/tools/index.js.map +1 -0
  108. package/docs/ARCHITECTURE.md +258 -0
  109. package/docs/QUE-ES.md +337 -0
  110. package/examples/opencode.json +7 -0
  111. package/package.json +81 -4
  112. package/skills/oficina/README.md +120 -0
  113. package/skills/oficina/SKILL.md +251 -0
  114. package/skills/oficina/reference/mesh.md +345 -0
  115. package/skills/oficina/reference/protocol.md +342 -0
  116. package/skills/oficina/reference/roles.md +171 -0
  117. 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.