feat(episode): TRAZA_desglose-29-hooks-con-fill-residual_S20260519.R40_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting Summary: EPISODIO 40 — embed_validator: Desglose 29 hooks con FILL residual
This commit is contained in:
parent
70960047c4
commit
a937283391
1 changed files with 66 additions and 0 deletions
|
|
@ -0,0 +1,66 @@
|
||||||
|
---
|
||||||
|
episode_id: "55ea9767-49af-4f2b-9050-56fdb22f378e"
|
||||||
|
puente_flat: "TRAZA_desglose-29-hooks-con-fill-residual_S20260519.R40_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||||
|
session_code: "S20260519.COMMIT_MASIVO_PRESERVACION"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "multi_actor"
|
||||||
|
criticidad_aegis: "low"
|
||||||
|
skill_dominante: "NONE"
|
||||||
|
fase_proyecto: "operations"
|
||||||
|
tipo_semantico: "troubleshooting"
|
||||||
|
summary_one_line: "EPISODIO 40 — embed_validator: Desglose 29 hooks con FILL residual"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-05-20T06:11:59.908993+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
**Estado empírico CONTRACT hooks registrados** (medido R27 vía grep cross-paralelo):
|
||||||
|
|
||||||
|
| Métrica | Valor | Δ vs sesión origen R9 |
|
||||||
|
|---------|-------|------------------------|
|
||||||
|
| Total hooks `.py` registrados (top-level, sin `test_*.py` ni `lib/`) | **70** | – |
|
||||||
|
| Con bloque `# CONTRACT:` | **70 (100%)** | ✅ Cobertura total |
|
||||||
|
| Sin bloque `# CONTRACT:` | **0** | ✅ Sin gap |
|
||||||
|
| Con `[FILL` residual | **29 (41%)** | -5 vs antes (4 arreglados R26 T-NEW1 + 1 R9 nomenclatura-injector) |
|
||||||
|
| Con `# CONTRACT:` duplicado ×5 HARDED | **0** | ✅ Hallazgo Casbin §5.2 100% RESUELTO via commit `fa0cfc7` |
|
||||||
|
|
||||||
|
## Desglose 29 hooks con FILL residual
|
||||||
|
|
||||||
|
Los 29 hooks listados:
|
||||||
|
|
||||||
|
`*` = falso positivo confirmado (template strings funcionales que el hook genera DENTRO de archivos nuevos, no son placeholders del propio CONTRACT). En T-NEW1 R26 identificé que passport-injector tiene FILL intencional (templates de PURPOSE que inyecta a otros archivos). Mismo patrón aplica a `mega-hook-nomenclatura-injector` y posiblemente `passport-gate` + `passport-tracker`.
|
||||||
|
|
||||||
|
## Clasificación estimada (requeriría grep granular para confirmar)
|
||||||
|
|
||||||
|
| Tipo FILL | Estimación | Acción recomendada |
|
||||||
|
|-----------|-----------:|---------------------|
|
||||||
|
| Template string funcional (intencional, hook inyecta a otros) | ~4-5 hooks (passport-* + nomenclatura-injector) | ✅ NO action — deuda falsa |
|
||||||
|
| CONTRACT `inputs=[FILL: parametros principales segun signatures]` (auto-retrofit) | ~20 hooks | Sprint dedicado retrofit (T-NEW1 expandido) |
|
||||||
|
| CONTRACT `purpose=[FILL: proposito de X.py]` (auto-retrofit) | ~10-15 hooks (overlap con inputs) | Igual sprint retrofit |
|
||||||
|
| FILE_PASSPORT `[FILL: low/medium/high]` o `Author=[FILL]` | ~3-5 hooks | Edits triviales 1 línea |
|
||||||
|
|
||||||
|
## Deuda histórica vs progreso sesión
|
||||||
|
|
||||||
|
| Hito | Estado |
|
||||||
|
|------|--------|
|
||||||
|
| Sesión origen R9 dedupe CONTRACT ×5 HARDED (5 hooks) | ✅ COMPLETADO commit `fa0cfc7` |
|
||||||
|
| Sesión actual R26 dedupe FILL real CONTRACT (4 hooks) | ✅ COMPLETADO commit `8b84b71` |
|
||||||
|
| Sprint dedicado T-NEW1 expandido (~20-24 hooks restantes) | ⏸ Pendiente sprint dedicado |
|
||||||
|
|
||||||
|
**PROCEDENCIA:**
|
||||||
|
- Cifra 70 hooks: `ls .claude/hooks/*.py | grep -v "/test_" | wc -l` (R27)
|
||||||
|
- Cifra 70 con CONTRACT: `grep -l "^# CONTRACT:" .claude/hooks/*.py | grep -v "/test_" | wc -l` (R27)
|
||||||
|
- Cifra 29 con FILL: `grep -l "\[FILL" .claude/hooks/*.py | grep -v "/test_" | wc -l` (R27)
|
||||||
|
- Cifra 0 HARDED ×5: loop `for f in ... ; do count=$(grep -c "^# CONTRACT:" "$f") ; if [ "$count" -ge 5 ]` (R27 — vacío)
|
||||||
|
|
||||||
|
## Recomendación operativa
|
||||||
|
|
||||||
|
**Estado general**: 🟢 SANO. Cobertura CONTRACT al 100%. Sin HARDED ×5. Deuda residual concentrada en **un solo tipo de placeholder** (`inputs=[FILL: parametros principales segun signatures]` auto-retrofiteado por `add_contract_block_S20260513`).
|
||||||
|
|
||||||
|
**Camino zero-deuda más eficiente**: Sprint dedicado de **1 sesión** (~100K tokens) editando los ~20-24 hooks con FILL real, **NO uno por uno** sino con script Python que detecta signature real via `ast.parse` y reemplaza el placeholder masivamente con dry-run + diff visible + atomic backup. Esto es exactamente lo que `add_contract_block` debía haber hecho con idempotencia. Un sprint T-NEW1-MASS-RETROFIT lo cierra todo de una.
|
||||||
|
|
||||||
|
¿Avanzo ese sprint ahora (GAUGE ~140K, cabe ajustado) o lo dejo para sprint dedicado próximo? Si quieres ahora, opero el script + verificación empírica + commit. Si querés cerrar, queda en PILA con plan concreto.
|
||||||
|
|
||||||
|
## 📌 PILA-PENDIENTES (R27) — formato PP-9 COMPACT
|
||||||
Loading…
Reference in a new issue