merge: issue/0019-docs-desglose — documentar desglose multi-issue

Documenta el desglose de 0019 en sub-issues en el propio issue,
y añade la regla de hacerlo en fix_issue.md.
This commit is contained in:
2026-03-07 19:19:56 +00:00
2 changed files with 62 additions and 0 deletions
+6
View File
@@ -75,6 +75,12 @@ En TBD no existen ramas largas. Para features que no caben en un solo issue/rama
- Issue autocontenido que se completa en una rama → mergear directo, sin flag
- Bug fix, refactor, docs → no necesitan flag
**Al desglosar un issue en sub-issues**, documentar el desglose en el propio archivo del issue:
1. Añadir una seccion `## Desglose multi-issue` en el documento del issue (antes de `## Ejemplo de uso` o al final)
2. Incluir tabla con: sub-issue, rama, alcance, fases cubiertas, estado
3. Incluir checklist de progreso por tarea (marcar `[x]` las completadas, indicar en que sub-issue se hizo)
4. Actualizar el progreso cada vez que se completa una sub-issue
Si aplica, actualizar `dev/feature_flags.json`:
```json
@@ -101,6 +101,62 @@ agents/*/config.yaml MOD — storage.base_path fuera del proyecto
---
## Desglose multi-issue
Este issue es demasiado grande para una sola rama. Se desglosa en sub-issues con feature flag `prompt-injection-hardening` (OFF hasta completar todo).
| Sub-issue | Rama | Alcance | Fases | Estado |
|-----------|------|---------|-------|--------|
| **0019a** | `issue/0019a-tool-hardening` | Deny-by-default en tools, path traversal, SSRF, SSH allowlist + syntax, Matrix room auth | 1 (parcial), 5, 6 (parcial) | **completado** |
| **0019b** | `issue/0019b-input-sanitization` | `pkg/sanitize/` + integracion en runtime.go | 2, 6 (parcial) | pendiente |
| **0019c** | `issue/0019c-rate-limiting` | Rate limiting de tools por agente+room en registry | 4, 6 (parcial) | pendiente |
| **0019d** | `issue/0019d-prompt-hardening-docs` | Hardening de system prompts + docs + activar flag | 1 (restante: base_path), 3, 7 | pendiente |
### Progreso por tarea
#### Fase 1 — completado parcial (0019a)
- [x] **1.3** `tools/file.go`: deny-by-default (AllowedPaths vacio = todo denegado)
- [x] **1.4** `tools/file.go`: path traversal con EvalSymlinks, proteccion contra `../` y prefix confusion
- [x] **1.5** `tools/ssh.go`: AllowedCommands allowlist + validacion de sintaxis shell
- [ ] **1.1** Mover `storage.base_path` default (pendiente 0019d)
- [ ] **1.2** Actualizar schema con nuevo default (pendiente 0019d)
#### Fase 2 — pendiente (0019b)
- [ ] **2.1** `pkg/sanitize/patterns.go`
- [ ] **2.2** `pkg/sanitize/sanitize.go`
- [ ] **2.3** Integracion en `agents/runtime.go`
#### Fase 3 — pendiente (0019d)
- [ ] **3.1** Template anti-injection para system prompts
- [ ] **3.2** Aplicar a assistant-bot
- [ ] **3.3** Aplicar a asistente-2
- [ ] **3.4** Documentar en regla create_agent.md
#### Fase 4 — pendiente (0019c)
- [ ] **4.1** Rate limiter por agente+room en registry
- [ ] **4.2** Config via `security.tool_rate_limit`
- [ ] **4.3** Loguear al alcanzar limite
#### Fase 5 — completado (0019a)
- [x] **5.1** SSH: validacion de pipes, subshells, redirects, chains
- [x] **5.2** HTTP: SSRF protection (bloqueo de IPs privadas, loopback, link-local, metadata)
- [x] **5.3** Matrix: AllowedRooms para restringir rooms destino
#### Fase 6 — completado parcial
- [x] **6.2** Tests path traversal en file.go (0019a)
- [x] **6.3** Tests SSH allowlist/blocklist (0019a)
- [x] **6.4** Tests SSRF en http.go (0019a)
- [ ] **6.1** Tests para `pkg/sanitize/` (0019b)
- [ ] **6.5** Tests para rate limiting (0019c)
#### Fase 7 — pendiente (0019d)
- [ ] Actualizar CLAUDE.md
- [ ] Actualizar create_tool.md
- [ ] Actualizar create_agent.md
- [ ] Documentar en docs/security.md
---
## Ejemplo de uso
```