ostacky 0.7.4 → 0.8.1

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.
@@ -36,29 +36,29 @@ Do NOT invoke any implementation skill, write any code, or scaffold any project
36
36
 
37
37
  ### Process
38
38
 
39
- 1. **Check Engram** — `engram_mem_search` with keywords from the user's idea. Surface any prior design decisions or similar proposals.
40
- 2. **Explore via CodeGraph** — `codegraph_codegraph_explore` on the affected area. Only `Read` files CodeGraph didn't cover.
41
- 3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
39
+ 1. **Check discovery-cache first** — `src/discovery-cache.ts` `getDiscoverySnapshot(query)` + `getEngramDedup(query, requestId)`. Si hit válido (TTL+gitDiffHash), **reusar** sin llamar tools. Solo si miss → `engram_mem_search` + `codegraph_codegraph_explore` y **SHALL `putDiscoverySnapshot`** antes de avanzar. No re-llamar si área difiere <30% del snapshot.
40
+ 2. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
42
41
  4. **Propose 2-3 approaches (hardening-v2 — SHALL)** — con tabla trade-offs (coste|riesgo|complejidad) + evidencia CodeGraph+Engram (+Context7 si librería) sin alucinar, YAGNI, y recomendación con razón; cada approach cita symbols existentes y mem_search hits verificables
43
42
  5. **Present design** — in sections scaled to complexity, get user approval after each section. **Gate post-brainstorming (hardening-v2):** tras presentar diseño, preguntar "¿Procedo con este diseño o querés ajustar algo?" y esperar confirmación explícita antes de `record_discovery`, `openspec-propose` o implementación directa
44
- 6. **Write design doc** save to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` and commit
43
+ 6. **Write design doc (output path condicional router exclusivo):**
44
+ - Si trigger + `level 1+` no-downgradeable (`estLines>30` o `fileCount>2` o API pública) y change activo → escribir `openspec/changes/<id>/design.md` sección `## Alternatives Considered` con 2-3 approaches (tabla coste|riesgo|complejidad + evidencia CodeGraph+Engram), no `docs/`. No invocar `openspec-propose` separado — este es el diseño.
45
+ - Si trigger + `0/0+1` o `1+` downgradeable (`estLines<30`&&`fileCount==1`&&sin API) → solo `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` + gate único `¿Procedo?` → DIRECT sin change. SHALL sugerir downgrade: `"Esto parece 0+1 (~X líneas, 1 archivo). ¿Lo tratamos sin spec?"` y esperar.
46
+ - Gate post-brainstorming es **único**; no hay segundo `¿Procedo con spec?`. `get_audit` `WARN:duplicate_design_generated` si ambos artefactos mismo `requestId`.
45
47
  7. **Spec self-review** — check for placeholders, contradictions, ambiguity, scope
46
48
  8. **User reviews spec** — ask user to review before proceeding
47
49
  9. **Save to Engram** — `engram_mem_save` with the design decision and tradeoffs
48
50
  10. **Transition** — based on routing decision (see Transition Rules below)
49
51
 
50
- ### Transition Rules
52
+ ### Transition Rules (router exclusivo — reemplaza SHALL secuencial)
51
53
 
52
- The next step depends on how the change was routed by Ostacky:
54
+ | Trigger + Nivel | Output path | Next Step | Gate |
55
+ |---|---|---|---|
56
+ | `mejor forma\|tradeoff\|...` + `1+` no-downgradeable | `openspec/changes/<id>/design.md` `## Alternatives` | Fin brainstorming → `spec_complete` vía change | Único `¿Procedo?` |
57
+ | `mejor forma\|tradeoff\|...` + `0/0+1` o `1+` downgradeable | `docs/superpowers/specs/...` solo | DIRECT | Único `¿Procedo?` + sugerencia downgrade explícita |
58
+ | Sin trigger + claros | — | `openspec-propose` directo (no brainstorming) | — |
59
+ | Sin trigger + vagos | — | Pregunta `¿brainstorming o spec?` | — |
53
60
 
54
- | Routing | Next Step | When |
55
- |---------|-----------|------|
56
- | **DIRECT** (Level 0/0+1) | **Implementación directa** (con gate de confirmación del usuario) | Small changes, no OpenSpec |
57
- | **SPEC** (Level 1+) | `openspec-propose` | Complex changes requiring OpenSpec artifacts |
58
-
59
- If you're unsure about routing, ask Ostacky or check the controller state.
60
-
61
- **Terminal state:** For DIRECT, present the design and get user approval before proceeding to implementation. For SPEC, invoke `openspec-propose`. Do NOT invoke implementation skills directly.
61
+ `WARN:skipped_brainstorming` solo si trigger presente y se omite sin downgrade. `WARN:duplicate_design_generated` si ambos paths mismo `requestId`.
62
62
 
63
63
  ### Design Principles
64
64
 
@@ -25,13 +25,13 @@ Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven**
25
25
 
26
26
  ## Procedimiento
27
27
 
28
- ### Paso 0: Verificar datos existentes en contexto
28
+ ### Paso 0: Verificar discovery-cache primero (ÚNICO entrypoint)
29
29
 
30
- Si ya tenés output de `codegraph_codegraph_explore` para el área del cambio **Y** ese output distingue archivos por task **saltá al Paso 0.5**. Si no, ejecutá el Paso 1.
30
+ **SHALL** llamar `src/discovery-cache.ts` `getDiscoverySnapshot(query)` y `getEngramDedup(query, requestId)` antes de cualquier `codegraph_codegraph_explore` o `engram_mem_search`. Si hit válido (TTL+gitDiffHash) → **reusar** `codegraph+engramHits` para construir `sharedFiles/fileClusters`; solo `codegraph_impact` para símbolos no cubiertos. Si miss o área difiere >30% → fetch fresco y `putDiscoverySnapshot`. Segunda llamada misma query en mismo `requestId` SHALL ser dedup (no `redundantCallCount`).
31
31
 
32
- ### Paso 0.1: Consultar Engram por decisiones previas
32
+ ### Paso 0.1: Consultar Engram por decisiones previas (solo si no hay dedup hit)
33
33
 
34
- `engram_mem_search` con keywords del cambio (nombre del módulo, área afectada). Si existe una decisión de modo de ejecución anterior para un cambio similar, considerarla como referencia no como vinculante. Las condiciones pueden haber cambiado.
34
+ Si `getEngramDedup` fue miss, `engram_mem_search` con keywords del cambio. Si existe decisión previa, usar como referencia no vinculante.
35
35
 
36
36
  ### Paso 0.5: Early exit para cambios pequeños
37
37
 
@@ -48,14 +48,14 @@ Si el change tiene **≤2 tasks** Y **no comparten archivos entre sí** → devo
48
48
  }
49
49
  ```
50
50
 
51
- ### Paso 1: Obtener datos de CodeGraph
51
+ ### Paso 1: Obtener datos de CodeGraph (solo si discovery-cache miss)
52
52
 
53
+ Si Paso 0 fue hit → **SKIP este paso**, derivar `fileClusters/sharedFiles` del snapshot (`state.snapshots.codegraph` + `tasks.md`). Snapshot resultante SHALL usar `codegraphUsed:["discovery-cache"]` (válido, no genera `WARN:execution_without_codegraph` si `snapshots.codegraph` existe) y `reuseDiscovery:true`.
54
+ Si miss:
53
55
  ```
54
56
  codegraph_codegraph_explore con query: "<área del cambio>"
55
57
  ```
56
-
57
- Si el output es muy general → `codegraph_impact` sobre símbolos centrales para blast radius preciso.
58
- Si CodeGraph no está inicializado → devolver `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
58
+ Si muy general → `codegraph_impact` para blast radius. Si CodeGraph no inicializado → `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
59
59
 
60
60
  ### Paso 2: Construir mapa de dependencias
61
61
 
@@ -174,7 +174,7 @@ Para cada fase de `tasks.md`, evaluar intra-fase:
174
174
  | `expectedTaskIds` | **Obligatorio** cuando `taskCount>0` — gate del controller |
175
175
  | `taskCount` | Total tasks, debe coincidir con `expectedTaskIds.length` |
176
176
 
177
- **⚠️ Este skill provee ANÁLISIS, no autorización.** El coordinador muestra el snapshot al usuario y pide confirmación en lenguaje natural, luego espera la respuesta.
177
+ **⚠️ Este skill provee ANÁLISIS, no autorización. Gate ANTES de persistir:** SHALL correr **en memoria primero**, derivar snapshot y **mostrar al usuario** `"Recomendación: INLINE/SUBAGENT por [razón], ~X líneas, clusters [...] ¿Procedo con este plan?"` y esperar. Solo si responde sí → `record_execution_analysis({snapshot, reuseDiscovery:true})` `EXECUTION_DECISION_PENDING` → `consume_execution_decision`. Si responde no → `block({reason:"usuario rechazó plan"})` sin persistir. Si re-llamó `codegraph_explore` pudiendo reusar → `WARN:redundant_codegraph_call`.
178
178
 
179
179
  ## Ejemplo compacto
180
180