gemstack-ai 1.0.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.
- package/.agents/rules/01-gemstack-core.md +51 -0
- package/.agents/rules/02-gemstack-constitution.md +44 -0
- package/.agents/rules/03-gemstack-security.md +49 -0
- package/.agents/rules/04-gemstack-infrastructure.md +28 -0
- package/.agents/skills/gemstack-cso/SKILL.md +50 -0
- package/.agents/skills/gemstack-dashboard/SKILL.md +31 -0
- package/.agents/skills/gemstack-guard/SKILL.md +19 -0
- package/.agents/skills/gemstack-handoff/SKILL.md +21 -0
- package/.agents/skills/gemstack-heal/SKILL.md +19 -0
- package/.agents/skills/gemstack-investigate/SKILL.md +25 -0
- package/.agents/skills/gemstack-learn/SKILL.md +18 -0
- package/.agents/skills/gemstack-office-hours/SKILL.md +18 -0
- package/.agents/skills/gemstack-plan/SKILL.md +20 -0
- package/.agents/skills/gemstack-qa/SKILL.md +17 -0
- package/.agents/skills/gemstack-qa-visual/SKILL.md +17 -0
- package/.agents/skills/gemstack-resume/SKILL.md +18 -0
- package/.agents/skills/gemstack-review/SKILL.md +18 -0
- package/.agents/skills/gemstack-sandbox/SKILL.md +19 -0
- package/.agents/skills/gemstack-ship/SKILL.md +19 -0
- package/.agents/skills/gemstack-spec/SKILL.md +24 -0
- package/.agents/skills/gemstack-swarm/SKILL.md +18 -0
- package/.agents/skills/gemstack-tasks/SKILL.md +18 -0
- package/.gemstack/learnings.md +8 -0
- package/.gemstack/state.json +11 -0
- package/.gitattributes +19 -0
- package/.github/workflows/main-ci.yml +32 -0
- package/.github/workflows/pr-ci.yml +31 -0
- package/.github/workflows/publish.yml +52 -0
- package/.github/workflows/release-readiness.yml +43 -0
- package/CHANGELOG.md +35 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +62 -0
- package/LICENSE +21 -0
- package/MANUAL.md +99 -0
- package/README.md +130 -0
- package/RELEASE_NOTES.md +149 -0
- package/bin/gemstack +31 -0
- package/bin/gemstack-doctor +16 -0
- package/bin/gemstack-doctor.ps1 +38 -0
- package/bin/gemstack.ps1 +49 -0
- package/docs/antigravity.md +6 -0
- package/docs/handoff.md +9 -0
- package/docs/qa/latest-qa.md +25 -0
- package/docs/qa-browser.md +7 -0
- package/docs/quickstart.md +21 -0
- package/docs/release.md +29 -0
- package/docs/reviews/latest-review.md +24 -0
- package/docs/security/latest-security-audit.md +35 -0
- package/docs/security.md +17 -0
- package/docs/skills.md +17 -0
- package/docs/spec-driven-development.md +10 -0
- package/gemstack-ai-1.0.1.tgz +0 -0
- package/handoff.md +45 -0
- package/handoff_archive.md +61 -0
- package/package.json +25 -0
- package/scripts/ci/check-frontmatter.js +54 -0
- package/scripts/ci/check-mojibake.js +44 -0
- package/scripts/ci/check-package-contents.js +32 -0
- package/scripts/ci/check-template-clean.js +46 -0
- package/scripts/ci/smoke-cli.js +30 -0
- package/specs/004-release-automation/plan.md +52 -0
- package/specs/004-release-automation/spec.md +49 -0
- package/specs/004-release-automation/tasks.md +25 -0
- package/specs/005-the-wow-update/plan.md +29 -0
- package/specs/005-the-wow-update/spec.md +32 -0
- package/specs/005-the-wow-update/tasks.md +16 -0
- package/specs/README.md +12 -0
- package/specs/current/plan.md +83 -0
- package/specs/current/spec.md +57 -0
- package/specs/current/tasks.md +98 -0
- package/specs/templates/plan.md +38 -0
- package/specs/templates/spec.md +35 -0
- package/specs/templates/tasks.md +21 -0
- package/specs/v0.2-cli-distribution/plan.md +112 -0
- package/specs/v0.2-cli-distribution/spec.md +27 -0
- package/specs/v0.2-cli-distribution/tasks.md +115 -0
- package/specs/v0.3-ci-cd/plan.md +83 -0
- package/specs/v0.3-ci-cd/spec.md +57 -0
- package/specs/v0.3-ci-cd/tasks.md +98 -0
- package/src/cli.js +64 -0
- package/src/commands/doctor.js +50 -0
- package/src/commands/hooks.js +67 -0
- package/src/commands/init.js +90 -0
- package/src/commands/install.js +72 -0
- package/src/commands/list.js +20 -0
- package/src/commands/show.js +18 -0
- package/src/commands/update.js +88 -0
- package/src/lib/backup.js +29 -0
- package/src/lib/filesystem-safe.js +22 -0
- package/src/lib/gitignore.js +19 -0
- package/src/lib/logger.js +6 -0
- package/src/lib/manifest.js +25 -0
- package/src/lib/parser.js +27 -0
- package/src/mcp-server.js +101 -0
- package/template/.agents/rules/01-gemstack-core.md +51 -0
- package/template/.agents/rules/02-gemstack-constitution.md +44 -0
- package/template/.agents/rules/03-gemstack-security.md +49 -0
- package/template/.agents/rules/04-gemstack-infrastructure.md +28 -0
- package/template/.agents/skills/gemstack-cso/SKILL.md +50 -0
- package/template/.agents/skills/gemstack-dashboard/SKILL.md +31 -0
- package/template/.agents/skills/gemstack-guard/SKILL.md +19 -0
- package/template/.agents/skills/gemstack-handoff/SKILL.md +21 -0
- package/template/.agents/skills/gemstack-heal/SKILL.md +19 -0
- package/template/.agents/skills/gemstack-investigate/SKILL.md +25 -0
- package/template/.agents/skills/gemstack-learn/SKILL.md +18 -0
- package/template/.agents/skills/gemstack-office-hours/SKILL.md +18 -0
- package/template/.agents/skills/gemstack-plan/SKILL.md +20 -0
- package/template/.agents/skills/gemstack-qa/SKILL.md +17 -0
- package/template/.agents/skills/gemstack-qa-visual/SKILL.md +17 -0
- package/template/.agents/skills/gemstack-resume/SKILL.md +18 -0
- package/template/.agents/skills/gemstack-review/SKILL.md +18 -0
- package/template/.agents/skills/gemstack-sandbox/SKILL.md +19 -0
- package/template/.agents/skills/gemstack-ship/SKILL.md +19 -0
- package/template/.agents/skills/gemstack-spec/SKILL.md +24 -0
- package/template/.agents/skills/gemstack-swarm/SKILL.md +18 -0
- package/template/.agents/skills/gemstack-tasks/SKILL.md +18 -0
- package/template/.gemstack/learnings.md +3 -0
- package/template/.gemstack/state.json +4 -0
- package/template/docs/antigravity.md +6 -0
- package/template/docs/handoff.md +9 -0
- package/template/docs/qa/latest-qa.md +25 -0
- package/template/docs/qa-browser.md +7 -0
- package/template/docs/quickstart.md +21 -0
- package/template/docs/release.md +10 -0
- package/template/docs/reviews/latest-review.md +19 -0
- package/template/docs/security/latest-security-audit.md +37 -0
- package/template/docs/security.md +17 -0
- package/template/docs/skills.md +17 -0
- package/template/docs/spec-driven-development.md +10 -0
- package/template/handoff.md +11 -0
- package/template/handoff_archive.md +3 -0
- package/template/specs/current/plan.md +5 -0
- package/template/specs/current/spec.md +7 -0
- package/template/specs/current/tasks.md +3 -0
- package/template/specs/templates/plan.md +38 -0
- package/template/specs/templates/spec.md +35 -0
- package/template/specs/templates/tasks.md +21 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Tareas de Implementación: Gemstack v0.3 (CI/CD & Release Automation)
|
|
2
|
+
|
|
3
|
+
Este documento contiene el plan de ejecución ejectuable (checklist) para el ciclo v0.3.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### Fase 0: Preflight
|
|
8
|
+
- [ ] **T0.1: Asegurar Entorno Limpio**
|
|
9
|
+
- **Descripción:** Verificar con `git status` que no existan implementaciones previas, archivos colgados, etiquetas recién creadas ni subidas a NPM publicadas.
|
|
10
|
+
- **Archivos:** Ninguno
|
|
11
|
+
- **Criterio de Aceptación:** Working tree clean.
|
|
12
|
+
- **Riesgo:** Bajo.
|
|
13
|
+
- **Requiere Aprobación Humana:** No.
|
|
14
|
+
|
|
15
|
+
### Fase 1: `.gitattributes`
|
|
16
|
+
- [ ] **T1.1: Estandarización de Line Endings**
|
|
17
|
+
- **Descripción:** Crear `.gitattributes` conservador para prevenir fallos de SHA-256 cross-platform. Ejecutar `git status` y pausar si se normaliza excesivamente.
|
|
18
|
+
- **Archivos:** `.gitattributes`
|
|
19
|
+
- **Criterio de Aceptación:** Archivo creado. El Churn de EOL no debe romper archivos binarios.
|
|
20
|
+
- **Riesgo:** Alto (Normalización masiva o corrupción de binarios si las reglas son muy globales).
|
|
21
|
+
- **Requiere Aprobación Humana:** **SÍ** (Si `git status` muestra más de 10 archivos modificados únicamente por EOL).
|
|
22
|
+
|
|
23
|
+
### Fase 2: `scripts/ci/`
|
|
24
|
+
- [ ] **T2.1: Validadores Nativos Zero-Deps**
|
|
25
|
+
- **Descripción:** Implementar validadores de calidad.
|
|
26
|
+
1. `check-frontmatter.js`: Revisa formato YAML en `.agents/skills/*/SKILL.md`.
|
|
27
|
+
2. `check-template-clean.js`: Revisa ausencia de contexto privado y secretos en `template/`.
|
|
28
|
+
3. `check-mojibake.js`: Busca caracteres rotos en UTF-8 (ej: `Ã`).
|
|
29
|
+
4. `check-package-contents.js`: Realiza inspección tras `npm pack --dry-run`.
|
|
30
|
+
5. `smoke-cli.js`: Prueba programática (e2e) en directorios temporales de todas las ramas del CLI (`help`, `doctor`, `init`, `update`).
|
|
31
|
+
- **Archivos:** `scripts/ci/*.js`
|
|
32
|
+
- **Criterio de Aceptación:** Cross-platform (Win/Mac/Linux), cero dependencias externas de npm.
|
|
33
|
+
- **Riesgo:** Moderado (Incompatibilidad en spawns de child processes en Windows vs Unix).
|
|
34
|
+
- **Requiere Aprobación Humana:** No.
|
|
35
|
+
|
|
36
|
+
### Fase 3: Package Scripts
|
|
37
|
+
- [ ] **T3.1: Configuración de npm run alias**
|
|
38
|
+
- **Descripción:** Extender el bloque `scripts` en `package.json` insertando `ci:frontmatter`, `ci:template`, `ci:mojibake`, `ci:package`, `ci:smoke` y un atajo `ci:all`.
|
|
39
|
+
- **Archivos:** `package.json`
|
|
40
|
+
- **Criterio de Aceptación:** Ejecutar `npm run ci:all` lanza secuencialmente la batería de checks.
|
|
41
|
+
- **Riesgo:** Bajo.
|
|
42
|
+
- **Requiere Aprobación Humana:** No.
|
|
43
|
+
|
|
44
|
+
### Fase 4: Workflow `pr-ci.yml`
|
|
45
|
+
- [ ] **T4.1: CI Eficiente para Pull Requests**
|
|
46
|
+
- **Descripción:** Workflow rápido basado en Ubuntu con Matrix en Node 18 y 20. Ejecuta las validaciones `ci:all`, `npm test` y el smoke test de la `demo-app`.
|
|
47
|
+
- **Archivos:** `.github/workflows/pr-ci.yml`
|
|
48
|
+
- **Criterio de Aceptación:** El YAML es sintácticamente válido para Actions y optimiza el uso de CPU.
|
|
49
|
+
- **Riesgo:** Bajo.
|
|
50
|
+
- **Requiere Aprobación Humana:** No.
|
|
51
|
+
|
|
52
|
+
### Fase 5: Workflow `main-ci.yml`
|
|
53
|
+
- [ ] **T5.1: CI Exhaustivo para la Rama Principal**
|
|
54
|
+
- **Descripción:** Se lanza tras merges y pushes a `main`. Emplea una Matrix completa (Windows, macOS, Ubuntu) en Node 18 y 20.
|
|
55
|
+
- **Archivos:** `.github/workflows/main-ci.yml`
|
|
56
|
+
- **Criterio de Aceptación:** Todos los tests y utilidades CI se mapean multiplataforma de forma estricta.
|
|
57
|
+
- **Riesgo:** Medio (Desviación en OS, comandos bash que fallen en el runner de Windows).
|
|
58
|
+
- **Requiere Aprobación Humana:** No.
|
|
59
|
+
|
|
60
|
+
### Fase 6: Workflow `release-readiness.yml`
|
|
61
|
+
- [ ] **T6.1: Generación y Validación de Tarball Manual**
|
|
62
|
+
- **Descripción:** Trigger exclusivo `workflow_dispatch`. Realiza un test cross-platform donde genera un `.tgz`, levanta un proyecto vacío en otra carpeta temporal, lo instala con NPM y realiza comprobaciones unitarias `npx gemstack` reales de punta a punta. Sube el `.tgz` como artefacto final.
|
|
63
|
+
- **Archivos:** `.github/workflows/release-readiness.yml`
|
|
64
|
+
- **Criterio de Aceptación:** NO efectúa tags, NPM publish, ni GitHub Releases automáticamente.
|
|
65
|
+
- **Riesgo:** Medio (Estructura de logs pesada o fallo en instalación del paquete local del tarball).
|
|
66
|
+
- **Requiere Aprobación Humana:** No.
|
|
67
|
+
|
|
68
|
+
### Fase 7: Documentación
|
|
69
|
+
- [ ] **T7.1: Badge CI y Notas**
|
|
70
|
+
- **Descripción:** Agregar badge de CI a la cabecera de `README.md`. Preparar borrador de notas en `RELEASE_NOTES.md` o `CHANGELOG.md` describiendo la infraestructura CI.
|
|
71
|
+
- **Archivos:** `README.md`, `CHANGELOG.md`, `docs/release.md`
|
|
72
|
+
- **Criterio de Aceptación:** Información asertiva y documentada.
|
|
73
|
+
- **Riesgo:** Bajo.
|
|
74
|
+
- **Requiere Aprobación Humana:** No.
|
|
75
|
+
|
|
76
|
+
### Fase 8: Validación Local
|
|
77
|
+
- [ ] **T8.1: Prueba del Suite Completo Local**
|
|
78
|
+
- **Descripción:** Correr `npm test`, `npm run ci:all`, comprobar si `demo-app` no sufre regresiones.
|
|
79
|
+
- **Archivos:** Ninguno.
|
|
80
|
+
- **Criterio de Aceptación:** Todos los scripts retornan un exit code `0`. Sin archivos `temp` huérfanos residuales.
|
|
81
|
+
- **Riesgo:** Medio (Tiempos de ejecución o errores no controlados si fallan limpiezas `tmp`).
|
|
82
|
+
- **Requiere Aprobación Humana:** **SÍ** (Aprobación si se detectan anomalías de basura en disco).
|
|
83
|
+
|
|
84
|
+
### Fase 9: Revisión de Seguridad y QA Agentic
|
|
85
|
+
- [ ] **T9.1: Emulación de Audits `/review` y `/cso`**
|
|
86
|
+
- **Descripción:** Evaluar los workflows implementados contra vulnerabilidades (Supply Chain, Secret Leaks, Privilegios del GITHUB_TOKEN). Actualizar los docs.
|
|
87
|
+
- **Archivos:** `docs/reviews/latest-review.md`, `docs/security/latest-security-audit.md`
|
|
88
|
+
- **Criterio de Aceptación:** Análisis honesto registrando deficiencias o limitantes de la CI.
|
|
89
|
+
- **Riesgo:** Bajo.
|
|
90
|
+
- **Requiere Aprobación Humana:** No.
|
|
91
|
+
|
|
92
|
+
### Fase 10: Commit, Push y Handoff
|
|
93
|
+
- [ ] **T10.1: Integración Final**
|
|
94
|
+
- **Descripción:** Confirmar árbol limpio mediante `git status -u`. Efectuar commit, push e incorporar memoria al `handoff.md`. Push final.
|
|
95
|
+
- **Archivos:** `handoff.md`
|
|
96
|
+
- **Criterio de Aceptación:** Sin rastros de builds. Versionado estable listo para activar en GitHub Actions.
|
|
97
|
+
- **Riesgo:** Bajo.
|
|
98
|
+
- **Requiere Aprobación Humana:** **SÍ** (Confirmar antes de commit y push).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Plan de Implementación: [FEATURE]
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `[###-feature-name]` | **Spec**: [ruta al spec.md]
|
|
4
|
+
|
|
5
|
+
## 1. Summary & Technical Context
|
|
6
|
+
- **Lenguaje/Versión**: [Ej. Node 18+ o NEEDS CLARIFICATION]
|
|
7
|
+
- **Dependencias core**: [Ej. Express o NEEDS CLARIFICATION]
|
|
8
|
+
- **Restricciones**: [Ej. Zero-deps en runtime]
|
|
9
|
+
|
|
10
|
+
## 2. Constitution Check (Phase -1 Gates)
|
|
11
|
+
<!-- VERIFICACIÓN DE REGLAS INMUTABLES -->
|
|
12
|
+
### Simplicity Gate (Article VII)
|
|
13
|
+
- [ ] ¿Se usan el mínimo número de carpetas/archivos posibles?
|
|
14
|
+
- [ ] ¿No hay abstracciones prematuras (future-proofing)?
|
|
15
|
+
|
|
16
|
+
### Anti-Abstraction Gate (Article VIII)
|
|
17
|
+
- [ ] ¿Se usan las APIs nativas del framework sin wrappers innecesarios?
|
|
18
|
+
|
|
19
|
+
### Test-First Imperative (Article III)
|
|
20
|
+
- [ ] ¿El plan incluye la creación de tests antes que el código fuente?
|
|
21
|
+
|
|
22
|
+
## 3. Entregables Satélites a Generar
|
|
23
|
+
<!-- Además de este plan y las tareas, se deben documentar los siguientes si aplica: -->
|
|
24
|
+
- `research.md`: [Opcional - Análisis de herramientas]
|
|
25
|
+
- `data-model.md`: [Esquemas de datos y entidades]
|
|
26
|
+
- `contracts/`: [Documentación de APIs y contratos (REST/Interfaces)]
|
|
27
|
+
- `quickstart.md`: [Guía rápida de validación manual]
|
|
28
|
+
|
|
29
|
+
## 4. Estructura de Archivos a Modificar / Crear
|
|
30
|
+
```text
|
|
31
|
+
ruta/archivo: [Razón]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 5. Complexity Tracking
|
|
35
|
+
<!-- Llenar SÓLO si las Gates de la Constitución fallan y se requiere justificar complejidad -->
|
|
36
|
+
| Violación de Regla | Por qué es necesario | Alternativa simple rechazada por |
|
|
37
|
+
|--------------------|----------------------|-----------------------------------|
|
|
38
|
+
| [Ej. Wrapper] | [Razón] | [Razón] |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Especificación de Funcionalidad: [NOMBRE_FEATURE]
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `[###-feature-name]`
|
|
4
|
+
|
|
5
|
+
## 1. User Scenarios & Testing (MVP)
|
|
6
|
+
<!--
|
|
7
|
+
IMPORTANTE: Las historias de usuario deben estar PRIORIZADAS (P1, P2...).
|
|
8
|
+
Cada historia debe ser INDEPENDIENTEMENTE TESTEABLE, aportando un fragmento de valor MVP.
|
|
9
|
+
-->
|
|
10
|
+
### User Story 1 - [Título breve] (Prioridad: P1)
|
|
11
|
+
[Describe el viaje del usuario en lenguaje claro]
|
|
12
|
+
**Por qué esta prioridad:** [Valor que aporta]
|
|
13
|
+
**Test Independiente:** [Cómo se prueba de forma autónoma]
|
|
14
|
+
|
|
15
|
+
**Escenarios de Aceptación:**
|
|
16
|
+
1. **Dado** [estado], **Cuando** [acción], **Entonces** [resultado]
|
|
17
|
+
|
|
18
|
+
## 2. Requerimientos Funcionales
|
|
19
|
+
<!--
|
|
20
|
+
Anota requerimientos explícitos.
|
|
21
|
+
SI HAY AMBIGÜEDAD, NO ADIVINES. Usa: [NEEDS CLARIFICATION: tu pregunta]
|
|
22
|
+
-->
|
|
23
|
+
- **FR-001**: El sistema DEBE [capacidad]
|
|
24
|
+
- **FR-002**: [NEEDS CLARIFICATION: método de implementación no definido]
|
|
25
|
+
|
|
26
|
+
## 3. Criterios de Éxito (Measurable Outcomes)
|
|
27
|
+
<!-- Definir métricas que no dependan de la tecnología -->
|
|
28
|
+
- **SC-001**: [Métrica medible, ej. El proceso termina en < 2 seg]
|
|
29
|
+
|
|
30
|
+
## 4. Casos Extremos (Edge Cases)
|
|
31
|
+
- ¿Qué pasa cuando [condición de borde]?
|
|
32
|
+
|
|
33
|
+
## 5. Entidades Clave (Data / Models)
|
|
34
|
+
- **[Entidad 1]**: [Representación abstracta]
|
|
35
|
+
- **[Entidad 2]**: [Relación]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Tareas de Implementación
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Instrucciones:
|
|
5
|
+
- Marca con `[P]` las tareas que sean seguras de paralelizar (por ej. si usas múltiples subagentes).
|
|
6
|
+
- Incluye la redacción y validación de TESTS ANTES de la implementación real.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
## Fase 1: Tests (Test-First Imperative)
|
|
10
|
+
- [ ] 1.1 Redactar Unit Tests para [Módulo A].
|
|
11
|
+
- [ ] 1.2 [P] Redactar Tests de Contrato/API para [Contrato B].
|
|
12
|
+
- [ ] 1.3 Comprobar que los tests fallen (Fase Roja).
|
|
13
|
+
|
|
14
|
+
## Fase 2: Implementación
|
|
15
|
+
- [ ] 2.1 Implementar [Módulo A] para hacer pasar 1.1.
|
|
16
|
+
- [ ] 2.2 [P] Implementar [Controlador B] para hacer pasar 1.2.
|
|
17
|
+
|
|
18
|
+
## Fase 3: Integración y Validación
|
|
19
|
+
- [ ] 3.1 Integrar módulos.
|
|
20
|
+
- [ ] 3.2 Ejecutar suite de validación completa.
|
|
21
|
+
- [ ] 3.3 Revisión de seguridad y dependencias.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Plan Técnico: Gemstack v0.2 (CLI Distribution)
|
|
2
|
+
|
|
3
|
+
## 1. Arquitectura Propuesta
|
|
4
|
+
Gemstack se convertirá en una herramienta de CLI empaquetable vía NPM. El código se reestructurará aislando la lógica de la herramienta de CLI (`src/`) de los activos del framework (`template/`). Al instalarse e invocarse (`gemstack init`), el CLI usará la carpeta `template/` como fuente de verdad para inyectar los archivos de forma idempotente y segura en el repositorio destino.
|
|
5
|
+
|
|
6
|
+
## 2. Estructura de Carpetas
|
|
7
|
+
El repositorio Gemstack mutará a esta forma:
|
|
8
|
+
```text
|
|
9
|
+
src/
|
|
10
|
+
cli.js
|
|
11
|
+
commands/
|
|
12
|
+
init.js
|
|
13
|
+
update.js
|
|
14
|
+
doctor.js
|
|
15
|
+
list.js
|
|
16
|
+
show.js
|
|
17
|
+
lib/
|
|
18
|
+
copy-template.js
|
|
19
|
+
manifest.js
|
|
20
|
+
backup.js
|
|
21
|
+
filesystem-safe.js
|
|
22
|
+
gitignore.js
|
|
23
|
+
logger.js
|
|
24
|
+
paths.js
|
|
25
|
+
template/
|
|
26
|
+
.agents/
|
|
27
|
+
.gemstack/
|
|
28
|
+
specs/
|
|
29
|
+
docs/
|
|
30
|
+
handoff.md
|
|
31
|
+
handoff_archive.md
|
|
32
|
+
package.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 3. Cambios al package.json
|
|
36
|
+
Se expondrá el ejecutable de forma global/local en NPM agregando:
|
|
37
|
+
```json
|
|
38
|
+
"bin": {
|
|
39
|
+
"gemstack": "src/cli.js"
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 4. Comandos CLI
|
|
44
|
+
- `gemstack init [--dry-run] [--yes] [--target <path>]`: Inyecta la estructura base de Gemstack de forma segura sin borrar archivos custom.
|
|
45
|
+
- `gemstack update [--dry-run] [--yes] [--force]`: Sincroniza los archivos Gemstack-owned con la nueva versión del template local.
|
|
46
|
+
- `gemstack doctor`: Revisa la salud de la instalación actual usando `.gemstack/manifest.json`.
|
|
47
|
+
- `gemstack list`: Muestra los skills detectados en el repo destino.
|
|
48
|
+
- `gemstack show <skill>`: Imprime el contenido de un skill en pantalla.
|
|
49
|
+
|
|
50
|
+
## 5. Estrategia del Template
|
|
51
|
+
Todos los archivos nativos (skills, reglas, docs) se almacenarán internamente en la carpeta `template/`. Durante un comando `init` o `update`, la herramienta usará `fs` recursivo mapeando `template/` -> `<target-dir>/`.
|
|
52
|
+
|
|
53
|
+
## 6. Estrategia de Manifest
|
|
54
|
+
Para rastrear qué pertenece a Gemstack y qué es custom del usuario, existirá un archivo `.gemstack/manifest.json` en el repositorio destino:
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"version": "0.2.0",
|
|
58
|
+
"installedAt": "2026-08-19T12:00:00Z",
|
|
59
|
+
"files": [
|
|
60
|
+
{ "path": ".agents/rules/01-gemstack-core.md", "checksum": "abc123hash" }
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 7. Estrategia de Backups
|
|
66
|
+
Toda operación destructiva o de overwrite sobre un archivo Gemstack-owned generará primero una copia en `.gemstack/backups/<timestamp>/`. Se acompañará con un `manifest.json` interno del backup indicando archivo original, comando que provocó el backup (`update` o `init --force`), fecha y motivo.
|
|
67
|
+
|
|
68
|
+
## 8. Algoritmo de Inicialización (`init`)
|
|
69
|
+
1. Determinar el directorio target (pwd o `--target`).
|
|
70
|
+
2. Iterar sobre los archivos en `template/`.
|
|
71
|
+
3. Si el archivo destino NO existe, copiarlo.
|
|
72
|
+
4. Si el archivo destino SÍ existe:
|
|
73
|
+
- Si es `handoff.md`, `handoff_archive.md`, o `learnings.md`, ignorar (SKIP).
|
|
74
|
+
- Si es un skill `.agents/skills/gemstack-*`, verificar checksums/conflictos. Pedir confirmación o respaldar, según flags.
|
|
75
|
+
5. Inyectar silenciosamente el manifiesto `.gemstack/manifest.json`.
|
|
76
|
+
6. Actualizar `.gitignore` leyendo bloques existentes. Si no está Gemstack, agregar marcador `# Gemstack` y las exclusiones (`.gemstack/state.json`, `.gemstack/backups/`).
|
|
77
|
+
|
|
78
|
+
## 9. Algoritmo de Actualización (`update`)
|
|
79
|
+
1. Leer `.gemstack/manifest.json` destino.
|
|
80
|
+
2. Comparar el checksum local vs el checksum del `template/` interno de Gemstack.
|
|
81
|
+
3. Si difiere:
|
|
82
|
+
- **Gemstack-owned:** Preparar backup. Reemplazar.
|
|
83
|
+
- **No-Gemstack (Modificado por User):** Alertar. Omitir, a menos que se use `--force`.
|
|
84
|
+
4. Mostrar listado pre-aplicación si está en `--dry-run`.
|
|
85
|
+
5. Si no es dry-run, ejecutar los Backups -> Copiar archivos -> Actualizar manifest.
|
|
86
|
+
|
|
87
|
+
## 10. Algoritmo de Doctor
|
|
88
|
+
1. Validar existencia del `manifest.json`.
|
|
89
|
+
2. Validar que los archivos marcados en el manifest existan realmente en disco.
|
|
90
|
+
3. Validar presencia de entradas Gemstack en `.gitignore`.
|
|
91
|
+
4. Emitir reportes `[OK]`, `[WARN]`, `[ERROR]`.
|
|
92
|
+
|
|
93
|
+
## 11. Seguridad y Path Safety
|
|
94
|
+
La función `filesystem-safe.js` usará `path.resolve` y `path.normalize` comparando siempre que el subdirectorio final inicie estrictamente con el `TARGET_DIR`. (Ej. `if (!resolvedPath.startsWith(targetDir)) throw Error("Path Traversal Bloqueado")`). Prohibida la ejecución de comandos externos (`exec`, `spawn` del SO). Todo debe ser `fs` en Node nativo.
|
|
95
|
+
|
|
96
|
+
## 12. Plan de Pruebas (Tests)
|
|
97
|
+
Usaremos el test-runner nativo de Node.js o Jest (si es permitido, sino zero-deps assertions).
|
|
98
|
+
- `init` en vacía y en carpeta con `.agents/` preexistente.
|
|
99
|
+
- `update` con y sin archivos modificados.
|
|
100
|
+
- Confirmación de generación correcta del `manifest.json` y `backups`.
|
|
101
|
+
- Bloqueo explícito de path traversal con payloads maliciosos (`../../`).
|
|
102
|
+
|
|
103
|
+
## 13. Migración v0.1 a v0.2
|
|
104
|
+
Usuarios que clonaron v0.1 pueden recibir v0.2 ejecutando `npx gemstack@latest update --force` que mapeará los archivos anteriores usando el nuevo sistema de manifiesto, sin tocar su `handoff.md`.
|
|
105
|
+
|
|
106
|
+
## 14. Riesgos
|
|
107
|
+
1. Desincronización del Manifest si el usuario modifica los archivos manualmente usando git o su IDE. (Se mitiga comparando checksum actual del archivo contra el checksum registrado en el manifest antes de hacer update).
|
|
108
|
+
2. Complejidad en la resolución de dependencias relativas si se ejecuta el CLI globalmente (`npm install -g gemstack`). Node debe poder encontrar `template/` relativo a `__dirname` del paquete global.
|
|
109
|
+
|
|
110
|
+
## 15. Decisiones Pendientes (Next Steps)
|
|
111
|
+
- Se requiere aprobación de la arquitectura y el algoritmo de overwrite/backup.
|
|
112
|
+
- Definir si se permitirá la adición de librerías de utilidad (ej. `commander` para los flags, `chalk` para colores) o si el CLI debe ser estricto "zero-dependencies".
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Especificación de Funcionalidad: Gemstack v0.2 (Distribución)
|
|
2
|
+
|
|
3
|
+
## 1. Idea / Requerimiento
|
|
4
|
+
Evolucionar Gemstack de un repositorio "copiable" (template) a una herramienta distribuible e instalable de manera sencilla en cualquier proyecto existente. El objetivo principal es proveer un comando (`gemstack init`) que aplique el scaffolding de `.agents`, `specs`, `docs` y CLI helpers sin destruir configuraciones previas del usuario.
|
|
5
|
+
|
|
6
|
+
## 2. Estrategia de Distribución Evaluada
|
|
7
|
+
1. **Paquete NPM (`npx gemstack init`)**: Ideal, ya que el ecosistema Antigravity y gran parte de los usuarios usan Node.js. Permite empaquetar assets fácilmente y manejar el binario de forma nativa en Windows y Unix.
|
|
8
|
+
2. **Scripts Nativos (`curl` / `Invoke-WebRequest`)**: Para proyectos no-Node (ej. Python, Go). Descarga un archivo `.tar.gz` de la release de GitHub y lo extrae.
|
|
9
|
+
*Decisión recomendada:* Priorizar NPM (`npx gemstack@latest init`) como vía principal y mantener un script `install.ps1/sh` como fallback.
|
|
10
|
+
|
|
11
|
+
## 3. Criterios de Aceptación
|
|
12
|
+
- [ ] **Empaquetado Seguro**: El CLI de distribución contiene una carpeta `templates/` con los 13 skills, reglas y docs.
|
|
13
|
+
- [ ] **Comando `init` Inteligente**: Al ejecutar `gemstack init` en un proyecto nuevo, se copia la estructura base.
|
|
14
|
+
- [ ] **Protección de Overwrite (Idempotencia)**: Si el proyecto ya tiene `.agents/`, `handoff.md` o `specs/`:
|
|
15
|
+
- No sobrescribir nunca `handoff.md` o `handoff_archive.md`.
|
|
16
|
+
- Crear backups de archivos colisionantes (ej. `01-gemstack-core.md.bak`) o tener una política de `skip` por defecto con flag `--force`.
|
|
17
|
+
- [ ] **CLI Unificado**: Mantener soporte para Windows (`.ps1`) y Unix (`bash`), gestionado preferiblemente por el engine binario de NPM o instaladores binarios.
|
|
18
|
+
- [ ] **Nuevos Comandos CLI**: Añadir comando `update` para actualizar los skills locales a la última versión del framework.
|
|
19
|
+
|
|
20
|
+
## 4. Tests y QA
|
|
21
|
+
- [ ] **Unit Tests del CLI**: Tests locales usando `fs` (ej. en un entorno virtual) para validar que `init` no borra archivos, crea directorios faltantes, y hace los backups correctos.
|
|
22
|
+
- [ ] **Routing Tests**: Scripts que simulan los prompts de Antigravity para verificar que la regla `01-gemstack-core.md` sigue matcheando los 26 comandos correctamente.
|
|
23
|
+
|
|
24
|
+
## 5. Riesgos y Seguridad
|
|
25
|
+
- **Pérdida de Datos:** Un bug en el comando `init` que sobrescriba el código fuente o los prompts customizados del usuario dentro de `.agents/`.
|
|
26
|
+
- **Supply Chain:** Publicar un paquete en NPM conlleva el riesgo de compromiso de cuenta.
|
|
27
|
+
- **Rutas Relativas:** Bugs en la resolución de directorios (ej. crear los archivos en el global de la máquina en lugar de la raíz del proyecto).
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Tareas de Implementación: Gemstack v0.2 (CLI Distribution)
|
|
2
|
+
|
|
3
|
+
Este documento contiene el plan de ejecución ejecutable (checklist) para el ciclo v0.2.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### Fase 0: Safeguards y Preparación
|
|
8
|
+
- [ ] **T0.1: Asegurar Entorno Base**
|
|
9
|
+
- **Descripción:** Verificar el estado de git (working tree clean), confirmar que Node 18+ está disponible, y configurar el `package.json` con `"engines": { "node": ">=18.18.0" }`. Asegurar estatus No-Publish/No-Tag.
|
|
10
|
+
- **Archivos:** `package.json`
|
|
11
|
+
- **Criterio de Aceptación:** Configurado sin dependencias externas en `dependencies`, versión 0.2.0-draft u omitida.
|
|
12
|
+
- **Riesgo:** Bajo.
|
|
13
|
+
- **Requiere Aprobación Humana:** No.
|
|
14
|
+
|
|
15
|
+
### Fase 1: Estructura `template/`
|
|
16
|
+
- [ ] **T1.1: Crear Carpeta Template**
|
|
17
|
+
- **Descripción:** Crear directorio `template/` y poblarlo con los skills y reglas estándar de `.agents/` del repositorio, omitiendo contenido custom o contexto privado de esta sesión.
|
|
18
|
+
- **Archivos:** `template/.agents/*`
|
|
19
|
+
- **Criterio de Aceptación:** Estructura clonada limpiamente sin borrar los `.agents` de la raíz del repo original.
|
|
20
|
+
- **Riesgo:** Bajo.
|
|
21
|
+
- **Requiere Aprobación Humana:** No.
|
|
22
|
+
- [ ] **T1.2: Inicializar Placeholders**
|
|
23
|
+
- **Descripción:** Crear versiones limpias (placeholders) de `handoff.md`, `handoff_archive.md`, `.gemstack/learnings.md`, `.gemstack/state.json`, `specs/current/` (vacíos o con base) dentro de `template/`.
|
|
24
|
+
- **Archivos:** `template/handoff.md`, etc.
|
|
25
|
+
- **Criterio de Aceptación:** Los archivos reflejan estados "zero" sin historial privado del repo `Gemstack`.
|
|
26
|
+
- **Riesgo:** Moderado (riesgo de fugas de privacidad si se copia el handoff real).
|
|
27
|
+
- **Requiere Aprobación Humana:** No.
|
|
28
|
+
|
|
29
|
+
### Fase 2: CLI Core Zero-Deps
|
|
30
|
+
- [ ] **T2.1: Entrypoint y Parser**
|
|
31
|
+
- **Descripción:** Crear `src/cli.js` y parsear manualmente `process.argv` para soportar flags como `--dry-run`, `--yes`, `--target`, `--force`. Añadir un logger seguro (ASCII, sin moijibakes).
|
|
32
|
+
- **Archivos:** `src/cli.js`, `src/lib/logger.js`, `src/lib/parser.js`
|
|
33
|
+
- **Criterio de Aceptación:** Parser soporta los flags requeridos sin arrojar errores o requerir paquetes externos. Logger imprime `[OK]`, `[INFO]`, `[FAIL]`.
|
|
34
|
+
- **Riesgo:** Moderado (bugs de parsing de CLI manuales son comunes).
|
|
35
|
+
- **Requiere Aprobación Humana:** No.
|
|
36
|
+
|
|
37
|
+
### Fase 3: Filesystem Safety
|
|
38
|
+
- [ ] **T3.1: Path Safety**
|
|
39
|
+
- **Descripción:** Desarrollar librería nativa para prevenir directory traversals y operaciones inseguras (symlinks peligrosos).
|
|
40
|
+
- **Archivos:** `src/lib/filesystem-safe.js`
|
|
41
|
+
- **Criterio de Aceptación:** Toda escritura es analizada usando `path.resolve` e interrumpe con error si sale del target. No hay usos de `child_process.exec` para I/O.
|
|
42
|
+
- **Riesgo:** Crítico (Riesgo de seguridad para el host).
|
|
43
|
+
- **Requiere Aprobación Humana:** No.
|
|
44
|
+
|
|
45
|
+
### Fase 4: Manifest
|
|
46
|
+
- [ ] **T4.1: Mecanismo de Ownership**
|
|
47
|
+
- **Descripción:** Desarrollar generador de `.gemstack/manifest.json`. Rastrear archivos Gemstack-owned y generar un checksum (MD5 o SHA256 usando el módulo nativo `crypto`).
|
|
48
|
+
- **Archivos:** `src/lib/manifest.js`
|
|
49
|
+
- **Criterio de Aceptación:** Puede parsear manifiestos existentes, generar nuevos y evaluar si un archivo mutó desde la última ejecución. Solo marca los propios.
|
|
50
|
+
- **Riesgo:** Alto (Falsa detección de mutaciones puede asustar al usuario).
|
|
51
|
+
- **Requiere Aprobación Humana:** No.
|
|
52
|
+
|
|
53
|
+
### Fase 5: Backup
|
|
54
|
+
- [ ] **T5.1: Gestor de Respaldo Seguro**
|
|
55
|
+
- **Descripción:** Desarrollar creador automático de `.gemstack/backups/<timestamp>/manifest.json` y carpetas de copia física antes de sobrescribir. Evitar logging del contenido en pantalla.
|
|
56
|
+
- **Archivos:** `src/lib/backup.js`
|
|
57
|
+
- **Criterio de Aceptación:** Las colisiones previas a un over-write terminan copiadas intactas aquí. El log en consola solo menciona el PATH.
|
|
58
|
+
- **Riesgo:** Alto (Errores aquí conllevan data loss irrecuperable).
|
|
59
|
+
- **Requiere Aprobación Humana:** No.
|
|
60
|
+
|
|
61
|
+
### Fase 6: Comando `init`
|
|
62
|
+
- [ ] **T6.1: Lógica de Inicialización**
|
|
63
|
+
- **Descripción:** Crear `src/commands/init.js`. Copia el framework desde `template/` usando la safety layer. Responde dinámicamente a `--dry-run` y `--target`. Patch a `.gitignore` sin duplicar.
|
|
64
|
+
- **Archivos:** `src/commands/init.js`, `src/lib/gitignore.js`
|
|
65
|
+
- **Criterio de Aceptación:** No sobrescribe NADA custom. Evita `handoff.md` si ya existe. Marca bloques `# Gemstack` en `gitignore`.
|
|
66
|
+
- **Riesgo:** Alto.
|
|
67
|
+
- **Requiere Aprobación Humana:** No.
|
|
68
|
+
|
|
69
|
+
### Fase 7: Comando `update`
|
|
70
|
+
- [ ] **T7.1: Lógica de Sincronización Segura**
|
|
71
|
+
- **Descripción:** Crear `src/commands/update.js`. Usa el manifest para sincronizar. Fuerza backup antes de reemplazar. Protege `handoff.md` explícitamente. Usa `--force` para saltarse rechazos en archivos drifteados.
|
|
72
|
+
- **Archivos:** `src/commands/update.js`
|
|
73
|
+
- **Criterio de Aceptación:** Nunca reemplaza código ajeno al manifest. Maneja bien `--dry-run`.
|
|
74
|
+
- **Riesgo:** Alto (Destructivo si el safety falla).
|
|
75
|
+
- **Requiere Aprobación Humana:** No.
|
|
76
|
+
|
|
77
|
+
### Fase 8: Comandos Auxiliares
|
|
78
|
+
- [ ] **T8.1: Portar Scripts Bash/PS a Node.js**
|
|
79
|
+
- **Descripción:** Recrear `list.js`, `show.js` y `doctor.js` de la v0.1 leyendo los archivos instalados localmente.
|
|
80
|
+
- **Archivos:** `src/commands/list.js`, `src/commands/show.js`, `src/commands/doctor.js`
|
|
81
|
+
- **Criterio de Aceptación:** Operan de manera cross-platform 100% nativa.
|
|
82
|
+
- **Riesgo:** Bajo.
|
|
83
|
+
- **Requiere Aprobación Humana:** No.
|
|
84
|
+
|
|
85
|
+
### Fase 9: Pruebas `node:test`
|
|
86
|
+
- [ ] **T9.1: Testing Exhaustivo (Zero Deps)**
|
|
87
|
+
- **Descripción:** Implementar suite en `tests/`. Cubrir todos los requerimientos críticos (Path Traversal Bloqueado, Init idempotente, Backup existoso, Dry-Run no muta).
|
|
88
|
+
- **Archivos:** `tests/init.test.js`, `tests/update.test.js`, `tests/safety.test.js`
|
|
89
|
+
- **Criterio de Aceptación:** 100% Passing tests.
|
|
90
|
+
- **Riesgo:** Medio (Asegurar que los mocks de fs temp sean limpios).
|
|
91
|
+
- **Requiere Aprobación Humana:** No.
|
|
92
|
+
|
|
93
|
+
### Fase 10: Documentación
|
|
94
|
+
- [ ] **T10.1: Actualizar Docs de Distribución**
|
|
95
|
+
- **Descripción:** Documentar uso vía NPM (Link/Pack). Escribir Draft de Release Notes para futura v0.2.
|
|
96
|
+
- **Archivos:** `README.md`, `docs/release.md`
|
|
97
|
+
- **Criterio de Aceptación:** Instrucciones claras advirtiendo que `npm publish` no está habilitado todavía, pero puede usarse `npm pack`.
|
|
98
|
+
- **Riesgo:** Bajo.
|
|
99
|
+
- **Requiere Aprobación Humana:** No.
|
|
100
|
+
|
|
101
|
+
### Fase 11: Validation
|
|
102
|
+
- [ ] **T11.1: Verificación End-to-End Local**
|
|
103
|
+
- **Descripción:** Correr `npm test`. Usar `npm pack` y luego instalar ese pack local en una carpeta temporal con un dummy. Validar el CLI desde fuera.
|
|
104
|
+
- **Archivos:** Ninguno
|
|
105
|
+
- **Criterio de Aceptación:** Empaquetado Node funciona sin emitir warnings de symlinks rotos, todos los tests pasan local.
|
|
106
|
+
- **Riesgo:** Bajo.
|
|
107
|
+
- **Requiere Aprobación Humana:** **SÍ (Aprobación del dev sobre el resultado reportado).**
|
|
108
|
+
|
|
109
|
+
### Fase 12: Commit, Push y Handoff
|
|
110
|
+
- [ ] **T12.1: Finalización Segura**
|
|
111
|
+
- **Descripción:** Validar `git status` (no logs, node_modules ni tarballs), hacer Commit, Push y actualizar Handoff Final de Sesión.
|
|
112
|
+
- **Archivos:** `handoff.md`
|
|
113
|
+
- **Criterio de Aceptación:** Working tree limpio, versionado correcto.
|
|
114
|
+
- **Riesgo:** Bajo.
|
|
115
|
+
- **Requiere Aprobación Humana:** **SÍ (Se requiere confirmación para commit y fin).**
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Plan Técnico: Gemstack v0.3 (CI/CD & Release Automation)
|
|
2
|
+
|
|
3
|
+
## 1. Arquitectura de Workflows
|
|
4
|
+
El sistema de CI/CD constará de dos archivos YAML independientes en `.github/workflows/`:
|
|
5
|
+
1. `ci.yml`: Encargado de la validación continua para proteger la rama principal (`main`).
|
|
6
|
+
2. `release.yml`: Encargado del empaquetado, pruebas reales sobre el tarball y preparación de release artifacts (solo manual).
|
|
7
|
+
|
|
8
|
+
## 2. Jobs, Triggers y Matrix Strategy
|
|
9
|
+
|
|
10
|
+
### A. CI Workflow (`ci.yml`)
|
|
11
|
+
- **Triggers:** `push` a ramas (idealmente con target main) y `pull_request`.
|
|
12
|
+
- **Estrategia Matrix Condicional:**
|
|
13
|
+
- **Quick-CI Job:** Se dispara en `pull_request` y `push` normal. Matrix: `ubuntu-latest`, Node `[18.x, 20.x]`.
|
|
14
|
+
- **Full-CI Job:** Se dispara solo en `push` directo a `main`. Matrix: `[ubuntu-latest, windows-latest, macos-latest]`, Node `[18.x, 20.x]`.
|
|
15
|
+
- **Pasos:** Checkout -> Setup Node -> Run CI Scripts -> Run Native Tests -> Run Demo App Smoke.
|
|
16
|
+
|
|
17
|
+
### B. Release Readiness Workflow (`release.yml`)
|
|
18
|
+
- **Trigger:** `workflow_dispatch` (Manual).
|
|
19
|
+
- **Matrix:** `[ubuntu-latest, windows-latest]`, Node `[20.x]`.
|
|
20
|
+
- **Pasos:** Checkout -> Setup Node -> Tests & CI Scripts -> `npm pack` -> Test Dummy Tarball -> Upload Artifact (`gemstack-*.tgz`).
|
|
21
|
+
- **Restricción Estricta:** NO habrá paso de `npm publish` ni tag automation.
|
|
22
|
+
|
|
23
|
+
## 3. Scripts CI Propuestos (`scripts/ci/`)
|
|
24
|
+
Se implementarán 5 scripts Zero-Deps nativos de Node.js que fallarán la ejecución (`process.exit(1)`) si se violan las reglas:
|
|
25
|
+
|
|
26
|
+
1. **`check-frontmatter.js`**: Lee `.agents/skills/*/SKILL.md`. Parsea el bloque YAML superior delimitado por `---`. Valida propiedades requeridas (`name`, `description`, `triggers` como array no vacío) y que el `name` coincida con el nombre del directorio padre.
|
|
27
|
+
2. **`check-template-clean.js`**: Revisa recursivamente `template/`. Valida que `handoff.md` tenga las 5 secciones, `state.json` no tenga flags privadas. Asegura la total ausencia de `node_modules`, `sqlite`, `tgz`, `.gemstack/backups/` o archivos ajenos.
|
|
28
|
+
3. **`check-mojibake.js`**: Analiza todos los textos y scripts en búsqueda exclusiva de cadenas asociadas a error UTF-8 como `Ã`, `Â`, `âœ`, `ðŸ`, y el replacement character ``. Permite acentos normativos en español (`áéíóúñ`).
|
|
29
|
+
4. **`check-package-contents.js`**: Llama a `npm pack --dry-run --json` o parsea la salida de consola, garantizando la inclusión de `src/`, `template/`, `README.md`, `LICENSE`, `CHANGELOG.md`, `package.json`, y la omisión estricta de bases de datos de la demo o configuraciones de github.
|
|
30
|
+
5. **`smoke-cli.js`**: Recrea programáticamente el uso real. Crea un temp dir con `fs.mkdtempSync`, ejecuta llamadas a `node src/cli.js` probando `--help`, `list`, `show`, `doctor`, `init --dry-run`, `init --yes` y `update --dry-run`.
|
|
31
|
+
|
|
32
|
+
## 4. Manejo de Line Endings
|
|
33
|
+
Se añadirá un `.gitattributes` conservador para forzar terminaciones en el checkout y commit, protegiendo los hashes SHA-256 de ser adulterados por Git en Windows:
|
|
34
|
+
```text
|
|
35
|
+
* text=auto
|
|
36
|
+
*.js text eol=lf
|
|
37
|
+
*.json text eol=lf
|
|
38
|
+
*.md text eol=lf
|
|
39
|
+
*.yml text eol=lf
|
|
40
|
+
*.yaml text eol=lf
|
|
41
|
+
*.sh text eol=lf
|
|
42
|
+
*.ps1 text eol=crlf
|
|
43
|
+
*.bat text eol=crlf
|
|
44
|
+
*.cmd text eol=crlf
|
|
45
|
+
|
|
46
|
+
*.png binary
|
|
47
|
+
*.jpg binary
|
|
48
|
+
*.jpeg binary
|
|
49
|
+
*.gif binary
|
|
50
|
+
*.ico binary
|
|
51
|
+
*.sqlite binary
|
|
52
|
+
*.db binary
|
|
53
|
+
*.tgz binary
|
|
54
|
+
*.zip binary
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 5. Tarball Validation (`release.yml`)
|
|
58
|
+
1. Generar `.tgz` con `npm pack`.
|
|
59
|
+
2. Crear un temp dir (fuera del workspace de github).
|
|
60
|
+
3. `cd temp-dir && npm init -y && npm install <path-to-tgz>`.
|
|
61
|
+
4. Ejecutar comandos `npx gemstack` (`--help`, `init`, `doctor`, `update`).
|
|
62
|
+
5. Tras el test exitoso, subir el `.tgz` con la acción `actions/upload-artifact`.
|
|
63
|
+
|
|
64
|
+
## 6. Demo-app Smoke Strategy
|
|
65
|
+
Un job independiente o un step correrá:
|
|
66
|
+
`cd demo-app && npm install && npm run smoke`. Confirmará la salida exitosa del servidor y su bloqueo IDOR, validando que cambios genéricos en el framework no han roto la app de referencia.
|
|
67
|
+
|
|
68
|
+
## 7. README Badge Strategy
|
|
69
|
+
Se ubicará un badge oficial estándar en `README.md`, inmediatamente debajo del título principal, enrutado al action de CI de `main`.
|
|
70
|
+
|
|
71
|
+
## 8. Seguridad, Secrets y Logging
|
|
72
|
+
- Se forzará la asignación de permisos `permissions: contents: read` en los Workflows para prevenir writes accidentales al repositorio por cuenta del GITHUB_TOKEN.
|
|
73
|
+
- Los logs limitarán las salidas de variables de entorno u operacionales. No se invocarán scripts que tiren volcados de memoria masivos.
|
|
74
|
+
|
|
75
|
+
## 9. Test Plan
|
|
76
|
+
- Se creará un branch temporal para probar empíricamente los flujos de GitHub actions (`ci.yml`) insertando fallos intencionales (ej. introducir un mojibake adrede) y observando el bloqueo, para finalmente revertir y subir limpio.
|
|
77
|
+
|
|
78
|
+
## 10. Riesgos Principales
|
|
79
|
+
1. **Conflicto Line Endings Activos:** Instaurar un `.gitattributes` retrospectivo forzará la re-normalización del repo si hay archivos existentes en CRLF. Esto podría generar diffs falsos la próxima vez que se haga checkout.
|
|
80
|
+
2. **Dependencias del Smoke CLI:** El script de humo interactuando con procesos hijos en Windows puede quedar huérfano (zombie) si los subprocesos de Node no se terminan limpiamente tras error.
|
|
81
|
+
|
|
82
|
+
## 11. Decisiones Pendientes antes de /tasks
|
|
83
|
+
- **Implementación Matrix Condicional:** En GitHub Actions no se puede tener un array matricial "dinámico" trivial. Lo más limpio es dividir `ci.yml` en dos flujos/jobs explícitos: un Workflow para PRs (Ubuntu) y otro Workflow para Pushes (Full Matrix). ¿Autorizas crear dos YAMLs (`pr-ci.yml` y `main-ci.yml`) o mantenemos un solo YAML con jobs condicionados mediante `if: github.event_name == 'pull_request'`?
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Spec: Gemstack v0.3 (CI/CD & Release Automation)
|
|
2
|
+
|
|
3
|
+
## 1. Goal
|
|
4
|
+
Diseñar e implementar un sistema robusto de integración y entrega continua (CI/CD) utilizando GitHub Actions para validar y proteger la calidad de Gemstack en cada cambio, asegurando compatibilidad multiplataforma y previniendo el filtrado accidental de secretos o contextos privados, todo esto sin habilitar despliegues automatizados no supervisados (ej. `npm publish`).
|
|
5
|
+
|
|
6
|
+
## 2. Core Requirements
|
|
7
|
+
|
|
8
|
+
### 2.1. Workflows
|
|
9
|
+
Se dividirán las responsabilidades lógicas en, idealmente, dos flujos:
|
|
10
|
+
1. **CI Normal (Push / PR):** Validaciones exhaustivas que bloquean la integración de código roto o contaminado.
|
|
11
|
+
2. **Release Readiness (Workflow Dispatch):** Flujo de preparación manual que empaca el proyecto y potencialmente crea un GitHub Release, pero que bajo ninguna circunstancia ejecuta `npm publish`.
|
|
12
|
+
|
|
13
|
+
### 2.2. Matrix Testing
|
|
14
|
+
- **Sistemas Operativos:** `ubuntu-latest`, `windows-latest`, `macos-latest`.
|
|
15
|
+
- **Node.js Versions:** `18.18.0` (mínimo exigido) y `20.x` (LTS actual) / `22.x` (Latest).
|
|
16
|
+
|
|
17
|
+
### 2.3. CI Validation Steps (Checks)
|
|
18
|
+
- **Unit & Packaging Tests:**
|
|
19
|
+
- `npm test` (pruebas nativas).
|
|
20
|
+
- `npm run pack:dry` (validación del bundle).
|
|
21
|
+
- **CLI Smoke Tests (Cross-platform):**
|
|
22
|
+
- `node src/cli.js --help`
|
|
23
|
+
- `node src/cli.js list`
|
|
24
|
+
- `node src/cli.js show gemstack-handoff`
|
|
25
|
+
- `node src/cli.js init --dry-run --target <temp-dir>`
|
|
26
|
+
- `node src/cli.js init --yes --target <temp-dir>`
|
|
27
|
+
- `node src/cli.js update --dry-run --target <temp-dir>`
|
|
28
|
+
- **Demo App Verification:**
|
|
29
|
+
- `cd demo-app && npm install`
|
|
30
|
+
- `npm run smoke` (valida defensas anti-IDOR).
|
|
31
|
+
- **Cleanliness & Integrity Assertions:**
|
|
32
|
+
- **No Forbidden Files:** Asegurar que el repo (y el paquete) no contengan `node_modules`, `*.sqlite`, `*.tgz`, backups (`.gemstack/backups/`) o archivos temporales no ignorados.
|
|
33
|
+
- **Package Contents:** Analizar la salida del tarball para confirmar ausencia de assets restringidos.
|
|
34
|
+
- **YAML Frontmatter:** Analizar todos los `.agents/skills/*/SKILL.md` asegurando que el YAML inicial es sintácticamente válido.
|
|
35
|
+
- **Template Sandbox:** Comprobar que `template/handoff.md`, `template/handoff_archive.md` y `template/.gemstack/state.json` contengan estados limpios y no el texto real de la memoria de Gemstack.
|
|
36
|
+
- **No Mojibake:** Búsqueda simple de caracteres rotos (ej. `ó`) en docs/scripts que indican falla de encoding.
|
|
37
|
+
|
|
38
|
+
### 2.4. Seguridad y Caching
|
|
39
|
+
- Configurar cachés seguros para Node Modules de la `demo-app` (`actions/cache`).
|
|
40
|
+
- Activar enmascaramiento automático de salidas y uso estricto de secretos (`${{ secrets.GITHUB_TOKEN }}`).
|
|
41
|
+
- Deshabilitar triggers automáticos de publicación en NPM.
|
|
42
|
+
|
|
43
|
+
### 2.5. Artifacts y Badges
|
|
44
|
+
- **Artifacts:** Se subirá el archivo `gemstack-*.tgz` resultante de un `npm pack` como un Build Artifact para ser descargable desde la tab de Actions.
|
|
45
|
+
- **Badges:** Se añadirá el Badge dinámico de GitHub Actions en el `README.md`.
|
|
46
|
+
|
|
47
|
+
## 3. Edge Cases & Risks
|
|
48
|
+
- **Diferencias de File System (Windows vs Unix):** El manejo de rutas relativas y saltos de línea (CRLF vs LF) puede fallar las validaciones de checksum en Git o CI si no están configurados los `.gitattributes`.
|
|
49
|
+
- **Rutas Largas en Windows:** `npm` a veces sufre en Windows con anidamientos profundos, los paths de los tests temporales deben ser cortos.
|
|
50
|
+
- **Falsos Positivos en la Verificación de "Mojibake":** Restringir la validación de encoding a patrones conocidos (`Ã`, ``) sin bloquear caracteres legítimos en UTF-8 o en español.
|
|
51
|
+
|
|
52
|
+
## 4. Acceptance Criteria
|
|
53
|
+
- Todos los Pull Requests hacia `main` disparan el flujo CI.
|
|
54
|
+
- Los tests corren en las 3 plataformas y 2 versiones de Node de forma paralela.
|
|
55
|
+
- Cualquier detección de un archivo `.sqlite` o `handoff.md` sucio en la carpeta `template/` rompe automáticamente el build.
|
|
56
|
+
- Existe un trigger manual que genera un `.tgz` y lo adjunta como Release Draft en GitHub.
|
|
57
|
+
- NPM Publish no está configurado de forma autónoma.
|