@cristiancorreau/forge 2.9.5 → 2.9.6

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.
@@ -1,11 +1,16 @@
1
1
  # new-feature
2
2
 
3
+ > **Atajo de orquestación.** Este comando NO es un flujo competidor: es un wrapper que delega
4
+ > en el pipeline SDD canónico `/plan` → `/work` → `/review` → `/ship`. Usa el mismo template de
5
+ > spec (`core/templates/spec-template.md`) y la misma máquina de estados
6
+ > (`DRAFT` → `REVIEW` → `APPROVED` → `IMPLEMENTED`). No dupliques aquí lógica de esos comandos:
7
+ > invocá cada uno en su etapa.
8
+
3
9
  Inicia la implementación de una nueva feature siguiendo SDD (Spec-Driven Development).
4
10
 
5
11
  Argumentos: $ARGUMENTS — nombre de la feature o ruta a la spec existente.
6
12
 
7
- 1. Si no existe spec para "$ARGUMENTS" en docs/specs/, crearla primero antes de escribir código.
8
- 2. Leer la spec antes de proponer cualquier implementación.
9
- 3. Proponer el plan de implementación y esperar aprobación explícita.
10
- 4. Implementar con tests junto a la implementación, no al final.
11
- 5. Al terminar, actualizar la spec con las decisiones tomadas durante la implementación.
13
+ 1. **Spec** — Si no existe spec para "$ARGUMENTS" en `docs/specs/`, ejecutar `/plan <fase> "$ARGUMENTS"` para crearla (queda en `APPROVED`). Si ya existe, leerla.
14
+ 2. **Implementación** — Ejecutar `/work` para implementar la spec aprobada. Propone el team, espera aprobación e implementa con tests junto a la implementación, no al final. `/work` marca la spec como `IMPLEMENTED` y completa "Notas de implementación".
15
+ 3. **Review** Ejecutar `/review` para obtener el veredicto vinculante (persiste en `.claude/review-status.json`).
16
+ 4. **Ship** Si el review resultó `APPROVED` y el usuario lo pide, ejecutar `/ship` para el deploy.
@@ -16,44 +16,66 @@ Construir el nombre del archivo:
16
16
  - Tomar el título, convertirlo a minúsculas, reemplazar espacios por guiones, eliminar caracteres especiales → `<slug>`
17
17
  - Nombre final: `docs/specs/<fase>-<slug>.md`
18
18
 
19
- Crear el archivo con este template exacto:
19
+ Crear el archivo con el template canónico de `core/templates/spec-template.md` (misma fuente única de verdad que el skill `spec`):
20
20
 
21
21
  ```markdown
22
- # Spec: <título>
23
- **Fase:** <fase> | **Estado:** draft | **Fecha:** YYYY-MM-DD
22
+ # <fase> Título de la Feature
24
23
 
25
- ## Problem statement
26
- [¿Qué problema resuelve? ¿Por qué ahora?]
24
+ > Estado: DRAFT | REVIEW | APPROVED | IMPLEMENTED
25
+ > Responsable: [nombre o rol]
26
+ > Creada: YYYY-MM-DD | Actualizada: YYYY-MM-DD
27
27
 
28
- ## Non-goals
29
- [Qué NO cubre esta spec]
28
+ ## Contexto
30
29
 
31
- ## Acceptance criteria
32
- - [ ] Criterio 1 (verificable, testeable)
33
- - [ ] Criterio 2
30
+ Por qué existe esta feature. Qué problema resuelve. Qué pasa si no la hacemos.
34
31
 
35
- ## Compliance mapping
36
- [Si el proyecto tiene frameworks de compliance en project.yaml, mapear qué artículos aplican. Si no aplica, escribir "N/A".]
32
+ ## Decisión
37
33
 
38
- ## Edge cases
39
- [Casos límite que la implementación debe manejar]
34
+ Qué vamos a implementar exactamente. Ser específico: endpoints, tablas, componentes.
40
35
 
41
- ## Implementation notes
42
- [Se llena durante la implementación]
36
+ ## Alternativas consideradas
43
37
 
44
- ## Decisiones tomadas
45
- [Se llena durante la implementación]
38
+ | Opción | Pros | Contras | Descartada por |
39
+ |--------|------|---------|----------------|
40
+ | Opción A | ... | ... | ... |
41
+ | Opción B | ... | ... | ... |
42
+
43
+ ## Criterios de aceptación
44
+
45
+ - [ ] Criterio verificable 1
46
+ - [ ] Criterio verificable 2
47
+ - [ ] Criterio verificable N
48
+
49
+ ## Impacto de compliance
50
+
51
+ Si el proyecto tiene `compliance.frameworks` configurado, completar:
52
+
53
+ - **Ley 21.719**: art. X → [descripción del impacto]
54
+ - **GDPR**: Art. Y → [descripción del impacto]
55
+ - No aplica (si no hay impacto de compliance)
56
+
57
+ ## Dependencias
58
+
59
+ - Requiere que [otra spec ID] esté implementada
60
+ - Bloqueada por [issue/ticket]
61
+
62
+ ## Notas de implementación
63
+
64
+ Cualquier decisión tomada durante la implementación que no estaba en la spec original.
46
65
  ```
47
66
 
67
+ Marcar el estado inicial como `DRAFT` (la primera línea del bloque de metadata: `> Estado: DRAFT`).
68
+
48
69
  ### Paso 3 — Guiar al usuario por cada sección
49
70
 
50
71
  Preguntar una sección a la vez, en orden:
51
72
 
52
- 1. "¿Qué problema concreto resuelve esta feature? ¿Por qué ahora y no más adelante?"
53
- 2. "¿Qué queda explícitamente fuera del scope de esta spec?"
54
- 3. "¿Cuáles son los criterios de aceptación verificables? (cada uno debe ser testeable de forma objetiva)"
55
- 4. Si `project.yaml` tiene frameworks de compliance: "¿Qué artículos o controles de compliance aplican a esta feature?"
56
- 5. "¿Qué casos límite debe manejar la implementación? (ej: usuario sin permisos, datos vacíos, concurrencia)"
73
+ 1. **Contexto**: "¿Qué problema concreto resuelve esta feature? ¿Por qué ahora y no más adelante? ¿Qué pasa si no la hacemos?"
74
+ 2. **Decisión**: "¿Qué vamos a implementar exactamente? Ser específico: endpoints, tablas, componentes."
75
+ 3. **Alternativas consideradas**: "¿Qué otras opciones se evaluaron y por qué se descartaron?"
76
+ 4. **Criterios de aceptación**: "¿Cuáles son los criterios de aceptación verificables? (cada uno debe ser testeable de forma objetiva)"
77
+ 5. Si `project.yaml` tiene frameworks de compliance: "¿Qué artículos o controles de compliance aplican a esta feature?"
78
+ 6. **Dependencias**: "¿De qué otras specs o tickets depende esta feature?"
57
79
 
58
80
  Completar el archivo con las respuestas del usuario a medida que avanza.
59
81
 
@@ -68,28 +90,31 @@ Leer `project.yaml` → `project.mode`:
68
90
  **Cómo aplicar el Planner-Critic:**
69
91
 
70
92
  Adoptar el rol de "Critic" y revisar la spec completa buscando:
71
- - ¿Hay acceptance criteria que no son objetivamente verificables?
93
+ - ¿Hay criterios de aceptación que no son objetivamente verificables?
72
94
  - ¿Hay términos ambiguos que diferentes personas podrían interpretar distinto?
73
- - ¿Hay edge cases no cubiertos que podrían romper la implementación?
74
- - ¿Los non-goals son suficientemente explícitos para evitar scope creep?
95
+ - ¿El contexto y la decisión son suficientemente específicos para evitar scope creep?
96
+ - ¿Faltan dependencias o alternativas relevantes que deberían documentarse?
75
97
 
76
- Mostrar las críticas como bullet points. Preguntar: "¿Ajustamos la spec antes de marcarla como ready?"
98
+ Mostrar las críticas como bullet points. Preguntar: "¿Ajustamos la spec antes de pasarla a REVIEW?"
77
99
 
78
100
  Si el usuario ajusta: actualizar el archivo y repetir el Critic una vez más.
79
101
 
80
- ### Paso 5 — Marcar como ready
102
+ ### Paso 5 — Marcar como APPROVED
81
103
 
82
104
  Cuando el usuario aprueba la spec (o decide no aplicar el Critic):
83
- - Cambiar `**Estado:** draft` → `**Estado:** ready` en el archivo
84
- - Confirmar: "Spec lista: `docs/specs/<archivo>.md`. Ahora podés ejecutar `/work` para implementarla."
105
+ - Cambiar `> Estado: DRAFT` → `> Estado: APPROVED` en el archivo
106
+ - Actualizar la fecha de `Actualizada:` a la fecha de hoy
107
+ - Confirmar: "Spec aprobada: `docs/specs/<archivo>.md`. Ahora podés ejecutar `/work` para implementarla."
108
+
109
+ > Estados de spec (alineados con `core/templates/spec-template.md`): `DRAFT` → `REVIEW` → `APPROVED` → `IMPLEMENTED`. `/plan` crea en `DRAFT` y aprueba a `APPROVED`; `/work` la marca `IMPLEMENTED`.
85
110
 
86
111
  ---
87
112
 
88
113
  ## Modo listar (`/plan` sin argumentos)
89
114
 
90
- Buscar todos los archivos `.md` en `docs/specs/` que contengan `**Estado:** draft` o `**Estado:** in-review`.
115
+ Buscar todos los archivos `.md` en `docs/specs/` que contengan `> Estado: DRAFT` o `> Estado: REVIEW`.
91
116
 
92
- Si no hay ninguno: "No hay specs en estado draft o in-review. Ejecutá `/plan <fase> \"<título>\"` para crear una."
117
+ Si no hay ninguno: "No hay specs en estado DRAFT o REVIEW. Ejecutá `/plan <fase> \"<título>\"` para crear una."
93
118
 
94
119
  Si hay alguno: mostrarlos como lista numerada con título, fase y fecha. Ejemplo:
95
120
  ```
@@ -106,10 +131,10 @@ Preguntar: "¿Cuál continuamos?"
106
131
  Leer el archivo de spec indicado.
107
132
 
108
133
  Aplicar el Planner-Critic completo:
109
- - ¿Los acceptance criteria son objetivamente testeables?
110
- - ¿Hay ambigüedades en el problem statement o en los criterios?
111
- - ¿Hay edge cases no cubiertos?
112
- - ¿Los non-goals son suficientemente explícitos?
134
+ - ¿Los criterios de aceptación son objetivamente testeables?
135
+ - ¿Hay ambigüedades en el contexto, la decisión o los criterios?
136
+ - ¿Las alternativas consideradas justifican la decisión tomada?
137
+ - ¿Las dependencias están completas y son explícitas?
113
138
 
114
139
  Mostrar sugerencias de mejora como bullet points con la sección específica que afectan.
115
140
 
@@ -15,7 +15,7 @@ Ejecutar los siguientes comandos y guardar sus resultados:
15
15
  ## Paso 2 — Leer configuración del proyecto
16
16
 
17
17
  - Si existe `project.yaml` en el directorio actual, leerlo para obtener: `project.mode`, `project.name`, `stack.*`, `agents.active`
18
- - Si existe `docs/wiki/index.md`, leerlo para obtener contexto del proyecto
18
+ - Si existe `wiki/index.md`, leerlo para obtener contexto del proyecto
19
19
  - Si ninguno existe, continuar con defaults: mode=startup, sin checks de compliance
20
20
 
21
21
  ## Paso 3 — Evaluar escenario y actuar
@@ -10,10 +10,12 @@ Leer `project.yaml`. Si no existe sección `deploy`: "deploy no configurado en p
10
10
 
11
11
  ## Paso 1 — Verificar review
12
12
 
13
- Buscar en el contexto de la sesión si se ejecutó `/review` y resultó en APPROVED.
13
+ Leer `.claude/review-status.json` (es el archivo que persiste `/review` en su Paso 6).
14
14
 
15
- - Si hay evidencia de review aprobado: continuar.
16
- - Si no hay evidencia: "¿Confirmás que el código fue revisado y aprobado? (s/n)"
15
+ - **Si el archivo existe**: parsear su contenido y validar el campo `verdict`.
16
+ - `verdict == "APPROVED"`: continuar. (Opcional: si el `timestamp` del review es anterior al último commit relevante, advertir que el review podría estar desactualizado y pedir confirmación.)
17
+ - `verdict == "CHANGES_REQUESTED"` o `verdict == "BLOCKED"`: "El último review resultó en `<verdict>`. Resolvé los puntos y volvé a ejecutar `/review` antes de hacer deploy." y detener.
18
+ - **Si el archivo NO existe** (fallback): "No se encontró `.claude/review-status.json`. ¿Confirmás que el código fue revisado y aprobado? (s/n)"
17
19
  - Si n: "Ejecutá `/review` antes de hacer deploy." y detener.
18
20
 
19
21
  ## Paso 2 — Verificar git status
@@ -31,7 +33,7 @@ Preguntar: "¿Querés mergear el PR actual a main antes del deploy? (s/n)"
31
33
  Si sí:
32
34
  - Ejecutar `gh pr checks` para verificar que todos los checks pasan
33
35
  - Si algún check falla: "El PR tiene checks fallando. Resolvelos antes de mergear." y detener.
34
- - Si todos pasan: ejecutar `gh pr merge --merge` (o la estrategia configurada en `project.yaml` → `deploy.merge_strategy`)
36
+ - Si todos pasan: ejecutar `gh pr merge --merge`
35
37
 
36
38
  Si no: continuar sin mergear.
37
39
 
@@ -6,11 +6,11 @@ Scope: $ARGUMENTS (ej: `--serial`, `--autorun`, o vacío para modo paralelo est
6
6
 
7
7
  ## Paso 1 — Identificar la spec
8
8
 
9
- Buscar archivos `.md` en `docs/specs/` que contengan `**Estado:** ready`.
9
+ Buscar archivos `.md` en `docs/specs/` que contengan `> Estado: APPROVED`.
10
10
 
11
11
  - Si hay exactamente una: mostrarla y confirmar "Implementando: `<archivo>`."
12
12
  - Si hay varias: mostrarlas como lista numerada y pedir que el usuario elija.
13
- - Si no hay ninguna: "No hay spec en estado ready. Ejecutá `/plan` primero." y detener.
13
+ - Si no hay ninguna: "No hay spec en estado APPROVED. Ejecutá `/plan` primero." y detener.
14
14
 
15
15
  Leer la spec seleccionada completa antes de continuar.
16
16
 
@@ -94,8 +94,10 @@ Si hay errores o conflictos: reportar claramente y preguntar cómo proceder. No
94
94
 
95
95
  ## Paso 7 — Actualizar la spec
96
96
 
97
- - Al iniciar la implementación: cambiar `**Estado:** ready` → `**Estado:** in-progress`
98
- - Al completar exitosamente: cambiar `**Estado:** in-progress` → `**Estado:** implemented`
99
- - Completar las secciones "Implementation notes" y "Decisiones tomadas" con lo que se hizo
97
+ Estados de spec (alineados con `core/templates/spec-template.md`): `DRAFT` `REVIEW``APPROVED` `IMPLEMENTED`.
100
98
 
101
- Confirmar: "Implementación completa. Spec actualizada a `implemented`. Podés ejecutar `/review` y luego `/ship`."
99
+ - Al completar exitosamente: cambiar `> Estado: APPROVED` `> Estado: IMPLEMENTED`
100
+ - Actualizar la fecha de `Actualizada:` a la fecha de hoy
101
+ - Completar la sección "Notas de implementación" con lo que se hizo y las decisiones tomadas
102
+
103
+ Confirmar: "Implementación completa. Spec actualizada a `IMPLEMENTED`. Podés ejecutar `/review` y luego `/ship`."
@@ -31,7 +31,7 @@ wiki-lint → health check + auto-reparación
31
31
  | `security-audit` | Universal | No | new-feature, security-auditor |
32
32
  | `db-migrate` | Universal | No (solo el ORM del proyecto) | new-feature |
33
33
  | `browser-test` | Universal | `agent-browser` CLI (npm i -g) | new-feature, usuario directo |
34
- | `wiki-ingest` | Wiki | No | usuario directo, docs-writer |
34
+ | `wiki-ingest` | Wiki | No | usuario directo, agente docs-writer |
35
35
  | `wiki-query` | Wiki | No | usuario directo, new-feature |
36
36
  | `wiki-lint` | Wiki | No | usuario directo |
37
37
  | `local2prod` | Universal | CLI del provider de deploy | new-feature |
@@ -53,7 +53,7 @@ Configurar en `project.yaml` bajo `skills.active`:
53
53
  - **`new-feature`**: checklist completo de implementación (orquesta los otros)
54
54
 
55
55
  ### Wiki — knowledge base del proyecto
56
- Configurar en `project.yaml` bajo `skills.active`. Generan slash commands `/wiki-ingest`, `/wiki-query`, `/wiki-lint` en Claude Code. La estructura `docs/wiki/` se inicializa con `forge-init.py`:
56
+ Configurar en `project.yaml` bajo `skills`. Generan slash commands `/wiki-ingest`, `/wiki-query`, `/wiki-lint` en Claude Code. La estructura `wiki/` se inicializa con `forge wiki ingest <archivo>`:
57
57
  - **`wiki-ingest`**: ingesta fuentes (URL, archivo, texto) → actualiza `raw/` + páginas wiki + index + log
58
58
  - **`wiki-query`**: responde preguntas usando el wiki como base, con citas a páginas
59
59
  - **`wiki-lint`**: verifica integridad del wiki: links, huérfanos, frontmatter, log
@@ -1,8 +1,7 @@
1
1
  # Skill: aitmpl-search
2
2
 
3
3
  Busca en el catálogo curado de forge: frameworks de agentes IA, MCP servers instalables,
4
- profiles de stack y herramientas. La búsqueda es offline (catálogo local); opcionalmente
5
- puede extenderse a GitHub con `--github`.
4
+ profiles de stack y herramientas. La búsqueda es offline (catálogo local).
6
5
 
7
6
  Triggers: /aitmpl-search, "buscar templates", "buscar en catálogo", "templates de AI",
8
7
  "buscar template", "buscar MCP", "buscar profile".
@@ -24,33 +23,22 @@ Triggers: /aitmpl-search, "buscar templates", "buscar en catálogo", "templates
24
23
 
25
24
  Búsqueda por texto en el catálogo local:
26
25
  ```bash
27
- python3 .agentic/scripts/aitmpl-search.py "<query>" --limit 10
26
+ forge aitmpl-search "<query>" --limit 10
28
27
  ```
29
28
 
30
- Filtrar por categoría (`framework`, `mcp-server`, `profile`, `tool`, `resource`):
29
+ Filtrar por categoría (`mcp-server`, `framework`, `profile`):
31
30
  ```bash
32
- python3 .agentic/scripts/aitmpl-search.py "<query>" --category mcp-server
31
+ forge aitmpl-search --category mcp-server
33
32
  ```
34
33
 
35
34
  Ver todas las categorías disponibles:
36
35
  ```bash
37
- python3 .agentic/scripts/aitmpl-search.py --list-categories
36
+ forge aitmpl-search --list-categories
38
37
  ```
39
38
 
40
39
  Salida JSON (para integración o análisis):
41
40
  ```bash
42
- python3 .agentic/scripts/aitmpl-search.py "<query>" --json
43
- ```
44
-
45
- Extender con búsqueda en GitHub (requiere red; límite 60 req/h sin token):
46
- ```bash
47
- python3 .agentic/scripts/aitmpl-search.py "<query>" --github
48
- export GITHUB_TOKEN=ghp_... # aumenta a 5000 req/h
49
- ```
50
-
51
- Desde el CLI interactivo:
52
- ```bash
53
- python3 .agentic/forge.py # → "Buscar templates" → buscar o filtrar por categoría
41
+ forge aitmpl-search "<query>" --json
54
42
  ```
55
43
 
56
44
  ### Paso 2 — Analizar resultados
@@ -71,4 +59,4 @@ Para profiles, ofrece agregar el profile a `project.yaml` directamente.
71
59
 
72
60
  - No asumir que un resultado del catálogo está actualizado — verificar el repositorio antes de recomendar
73
61
  - No crear agentes Tier 2 sin revisar si el stack ya tiene un profile en `profiles/`
74
- - No instalar MCP servers sin verificar que el usuario tiene Python 3.9+ y las dependencias requeridas
62
+ - No instalar MCP servers sin verificar que el usuario tiene las dependencias requeridas
@@ -27,7 +27,7 @@ git status # confirmar qué va al commit
27
27
 
28
28
  git commit -m "tipo(scope): descripción en imperativo
29
29
 
30
- Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
30
+ Co-Authored-By: <modelo> <noreply@anthropic.com>"
31
31
  ```
32
32
 
33
33
  Si ya hay un commit listo, ir directo al Paso 2.
@@ -117,7 +117,7 @@ Invocar el skill `/security-audit` como checklist mental antes de escribir cualq
117
117
  # > Estado: IMPLEMENTED
118
118
  ```
119
119
 
120
- 5. **Actualizar CLAUDE.md** — mover el ID de spec de "En curso" a "Completadas"
120
+ 6. **Actualizar CLAUDE.md** — mover el ID de spec de "En curso" a "Completadas"
121
121
 
122
122
  ---
123
123
 
@@ -3,6 +3,8 @@
3
3
  Protocolo para iniciar una nueva fase de desarrollo en un proyecto forge.
4
4
  Activar al comienzo de cada sprint o fase nueva.
5
5
 
6
+ Triggers: /phase-kickoff, "iniciar sprint", "kickoff de fase", "empezar fase"
7
+
6
8
  ---
7
9
 
8
10
  ## Cuándo usar este skill
@@ -3,6 +3,8 @@
3
3
  Redactar specs de features siguiendo la plantilla del framework forge.
4
4
  Activar antes de escribir cualquier spec nueva.
5
5
 
6
+ Triggers: /spec, "crear spec", "redactar spec", "nueva spec"
7
+
6
8
  ---
7
9
 
8
10
  ## Cuándo usar este skill
@@ -33,7 +33,7 @@ Si es texto → usar el texto tal como está
33
33
  ### Paso 2 — Almacenar en raw/ (inmutable)
34
34
 
35
35
  ```
36
- Path: docs/wiki/raw/<tema>/<YYYY-MM-DD>-<slug-del-titulo>.md
36
+ Path: wiki/raw/<tema>/<YYYY-MM-DD>-<slug-del-titulo>.md
37
37
 
38
38
  Formato del archivo raw:
39
39
  ---
@@ -59,14 +59,14 @@ Leer el contenido y identificar:
59
59
  ### Paso 4 — Actualizar páginas wiki
60
60
 
61
61
  Para cada concepto identificado:
62
- - Si `docs/wiki/concepts/<nombre>.md` existe → agregar sección con nueva info + citar fuente
62
+ - Si `wiki/concepts/<nombre>.md` existe → agregar sección con nueva info + citar fuente
63
63
  - Si no existe → crear la página desde la plantilla
64
64
 
65
65
  Para cada entidad identificada:
66
- - Si `docs/wiki/entities/<nombre>.md` existe → actualizar con nueva info
66
+ - Si `wiki/entities/<nombre>.md` existe → actualizar con nueva info
67
67
  - Si no existe → crear la página desde la plantilla
68
68
 
69
- Crear siempre `docs/wiki/sources/<slug>.md` con resumen de la fuente:
69
+ Crear siempre `wiki/sources/<slug>.md` con resumen de la fuente:
70
70
 
71
71
  ```markdown
72
72
  ---
@@ -95,11 +95,11 @@ tags: [tag1, tag2]
95
95
 
96
96
  ### Paso 5 — Actualizar index.md y log.md
97
97
 
98
- En `docs/wiki/index.md`:
98
+ En `wiki/index.md`:
99
99
  - Agregar filas nuevas en las tablas correspondientes (concepts, entities, sources)
100
100
  - Si la categoría no existe, crearla
101
101
 
102
- En `docs/wiki/log.md` (append-only — NUNCA editar entradas anteriores):
102
+ En `wiki/log.md` (append-only — NUNCA editar entradas anteriores):
103
103
 
104
104
  ```markdown
105
105
  ## [<YYYY-MM-DD>] ingest | <título de la fuente>
@@ -180,4 +180,4 @@ Si la nueva fuente contradice algo en el wiki:
180
180
 
181
181
  - `wiki-query` consume las páginas que este skill crea
182
182
  - `wiki-lint` verifica la integridad después de un ingest
183
- - `docs-writer` puede invocar wiki-ingest al documentar una decisión nueva
183
+ - el agente `docs-writer` (no es un skill) puede invocar wiki-ingest al documentar una decisión nueva
@@ -20,7 +20,7 @@ wiki", "wiki health", "wiki check".
20
20
 
21
21
  ### 1. Integridad del índice
22
22
 
23
- Leer `docs/wiki/index.md` y verificar:
23
+ Leer `wiki/index.md` y verificar:
24
24
 
25
25
  ```
26
26
  ✓ Cada [[link]] del índice apunta a un archivo que existe
@@ -32,10 +32,10 @@ Auto-reparar: agregar al índice los archivos que faltan (con descripción vací
32
32
  ### 2. Wikilinks rotos
33
33
 
34
34
  Buscar en todas las páginas wiki referencias `[[ruta/nombre]]` y verificar que
35
- el archivo `docs/wiki/ruta/nombre.md` existe.
35
+ el archivo `wiki/ruta/nombre.md` existe.
36
36
 
37
37
  ```bash
38
- grep -rn "\[\[" docs/wiki/ --include="*.md" | grep -v "raw/"
38
+ grep -rn "\[\[" wiki/ --include="*.md" | grep -v "raw/"
39
39
  ```
40
40
 
41
41
  Reportar: lista de links rotos con el archivo donde aparecen.
@@ -53,7 +53,7 @@ Reportar: lista de huérfanas. No auto-borrar — requiere decisión humana.
53
53
 
54
54
  ### 4. Integridad del log
55
55
 
56
- Verificar que `docs/wiki/log.md` existe y tiene al menos una entrada.
56
+ Verificar que `wiki/log.md` existe y tiene al menos una entrada.
57
57
  El log es append-only — nunca modificar entradas pasadas.
58
58
 
59
59
  Reportar si el log no ha sido actualizado en los últimos 30 días (wiki posiblemente abandonado).
@@ -22,9 +22,9 @@ sabemos de", "wiki:", "query:", "consultar wiki", "what does the wiki say about"
22
22
 
23
23
  ### Paso 1 — Leer el índice
24
24
 
25
- Leer `docs/wiki/index.md` para identificar qué páginas son relevantes a la pregunta.
25
+ Leer `wiki/index.md` para identificar qué páginas son relevantes a la pregunta.
26
26
 
27
- Si no hay wiki (`docs/wiki/` no existe o está vacío): indicar que el wiki está vacío
27
+ Si no hay wiki (`wiki/` no existe o está vacío): indicar que el wiki está vacío
28
28
  y sugerir usar `/wiki-ingest` para agregar conocimiento.
29
29
 
30
30
  ### Paso 2 — Leer páginas relevantes
@@ -60,7 +60,7 @@ qué fuentes ingestar para cubrir el gap.
60
60
  Si la pregunta produjo una síntesis nueva (no trivial, reutilizable), archivarla:
61
61
 
62
62
  ```
63
- docs/wiki/synthesis/<tema>.md
63
+ wiki/synthesis/<tema>.md
64
64
  ```
65
65
 
66
66
  Formato:
@@ -410,7 +410,7 @@ export async function init(args) {
410
410
  ...allAgents.map(a => `.claude/agents/${a}.md`),
411
411
  ];
412
412
  const ts = new Date().toISOString();
413
- saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.5', ts));
413
+ saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.6', ts));
414
414
  },
415
415
  },
416
416
  ]);
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export declare const VERSION = "2.9.5";
2
+ export declare const VERSION = "2.9.6";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export const VERSION = '2.9.5';
2
+ export const VERSION = '2.9.6';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cristiancorreau/forge",
3
- "version": "2.9.5",
3
+ "version": "2.9.6",
4
4
  "description": "Agentic development framework — multi-runtime support for Claude Code, OpenCode, Codex and Kiro",
5
5
  "author": "Cristian Correa <cristian@socialweb.cl>",
6
6
  "license": "Apache-2.0",
@@ -28,7 +28,7 @@
28
28
  "build:all": "npm run build:assets && npm run build",
29
29
  "dev": "tsc --watch",
30
30
  "prepublishOnly": "npm run build:all",
31
- "test": "node --test test/commands.test.mjs"
31
+ "test": "node --test test/commands.test.mjs test/assets.test.mjs"
32
32
  },
33
33
  "files": [
34
34
  "dist",