refacil-sdd-ai 1.0.0
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/README.md +145 -0
- package/bin/cli.js +207 -0
- package/config/openspec-config.yaml +8 -0
- package/package.json +36 -0
- package/skills/apply/SKILL.md +48 -0
- package/skills/archive/SKILL.md +72 -0
- package/skills/bug/SKILL.md +128 -0
- package/skills/explore/SKILL.md +42 -0
- package/skills/guide/SKILL.md +141 -0
- package/skills/propose/SKILL.md +63 -0
- package/skills/review/SKILL.md +104 -0
- package/skills/review/checklist.md +62 -0
- package/skills/setup/SKILL.md +145 -0
- package/skills/test/SKILL.md +113 -0
- package/skills/test/testing-patterns.md +150 -0
- package/skills/verify/SKILL.md +65 -0
- package/templates/claude-md.md +23 -0
- package/templates/cursorrules.md +21 -0
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# refacil-sdd-ai
|
|
2
|
+
|
|
3
|
+
Metodologia **SDD-AI** (Specification-Driven Development with AI) empaquetada como herramienta CLI.
|
|
4
|
+
|
|
5
|
+
Instala skills para **Claude Code** y **Cursor** que guian al desarrollador por un flujo estructurado de desarrollo usando **OpenSpec** como base de especificaciones.
|
|
6
|
+
|
|
7
|
+
## Requisitos
|
|
8
|
+
|
|
9
|
+
- **Node.js >= 20.19.0** (requerido por OpenSpec)
|
|
10
|
+
- **Claude Code** o **Cursor** instalado
|
|
11
|
+
|
|
12
|
+
## Instalacion y Setup
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 1. Instalar el paquete
|
|
16
|
+
npm install --save-dev refacil-sdd-ai
|
|
17
|
+
|
|
18
|
+
# 2. Inicializar (copia skills a .claude/ y .cursor/, crea CLAUDE.md y .cursorrules)
|
|
19
|
+
npx refacil-sdd-ai init
|
|
20
|
+
|
|
21
|
+
# 3. IMPORTANTE: Reiniciar la sesion de Claude Code o Cursor
|
|
22
|
+
# (las skills nuevas no se detectan hasta reiniciar)
|
|
23
|
+
|
|
24
|
+
# 4. En Claude Code o Cursor, ejecutar:
|
|
25
|
+
/refacil:setup
|
|
26
|
+
# Esto hace:
|
|
27
|
+
# - Verifica Node.js y OpenSpec
|
|
28
|
+
# - Instala OpenSpec si no esta (npm install -g @fission-ai/openspec@latest)
|
|
29
|
+
# - Inicializa openspec/ en el repo (openspec init --tools claude,cursor)
|
|
30
|
+
# - Crea openspec/config.yaml con idioma espanol
|
|
31
|
+
# - Genera AGENTS.md automaticamente analizando el repo
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
> **Nota**: `openspec init` tambien instala sus propios comandos (`opsx:*`) en `.claude/` y `.cursor/`. Esto es normal. Los `refacil:*` y `opsx:*` coexisten sin conflicto. El equipo debe usar `refacil:*` como interfaz principal.
|
|
35
|
+
|
|
36
|
+
## Comandos del CLI
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx refacil-sdd-ai init # Instalar skills y crear configs
|
|
40
|
+
npx refacil-sdd-ai update # Actualizar skills a la ultima version
|
|
41
|
+
npx refacil-sdd-ai clean # Eliminar skills del repo
|
|
42
|
+
npx refacil-sdd-ai help # Ver ayuda
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Skills disponibles
|
|
46
|
+
|
|
47
|
+
Una vez instalado, estos comandos estan disponibles en Claude Code y Cursor:
|
|
48
|
+
|
|
49
|
+
| Comando | Descripcion |
|
|
50
|
+
|---------|-------------|
|
|
51
|
+
| `/refacil:setup` | Instalar OpenSpec y generar AGENTS.md para el repo |
|
|
52
|
+
| `/refacil:guide` | Guia interactiva — que comando usar segun lo que necesites |
|
|
53
|
+
| `/refacil:explore` | Explorar el codebase sin hacer cambios |
|
|
54
|
+
| `/refacil:propose` | Crear propuesta de cambio (proposal + specs + design + tasks) |
|
|
55
|
+
| `/refacil:apply` | Implementar las tasks del cambio propuesto |
|
|
56
|
+
| `/refacil:test` | Generar tests unitarios desde los artefactos |
|
|
57
|
+
| `/refacil:verify` | Validar implementacion vs specs |
|
|
58
|
+
| `/refacil:review` | Review con checklist de calidad del equipo |
|
|
59
|
+
| `/refacil:archive` | Archivar cambio completado |
|
|
60
|
+
| `/refacil:bug` | Flujo guiado completo para investigar y corregir bugs |
|
|
61
|
+
|
|
62
|
+
## Flujos de trabajo
|
|
63
|
+
|
|
64
|
+
### Feature nuevo
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
/refacil:propose "descripcion del feature"
|
|
68
|
+
/refacil:apply
|
|
69
|
+
/refacil:test
|
|
70
|
+
/refacil:verify
|
|
71
|
+
/refacil:review
|
|
72
|
+
/refacil:archive
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Bug fix
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
/refacil:bug "descripcion del error"
|
|
79
|
+
/refacil:review
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Explorar codigo
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
/refacil:explore "que quiero entender"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Como funciona
|
|
89
|
+
|
|
90
|
+
1. **`npx refacil-sdd-ai init`** copia las skills a `.claude/skills/` y `.cursor/skills/`, y crea `CLAUDE.md` + `.cursorrules`
|
|
91
|
+
2. **`/refacil:setup`** (en Claude Code o Cursor) instala OpenSpec, analiza el repo y genera un `AGENTS.md` personalizado
|
|
92
|
+
3. Las demas skills (`propose`, `apply`, `test`, etc.) leen `AGENTS.md` para entender las convenciones del proyecto
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
npx refacil-sdd-ai init → Skills en .claude/ y .cursor/
|
|
96
|
+
CLAUDE.md y .cursorrules creados
|
|
97
|
+
|
|
98
|
+
/refacil:setup → OpenSpec instalado
|
|
99
|
+
AGENTS.md generado (analisis automatico del repo)
|
|
100
|
+
|
|
101
|
+
/refacil:propose → Artefactos en openspec/changes/
|
|
102
|
+
/refacil:apply → Codigo implementado
|
|
103
|
+
/refacil:test → Tests generados
|
|
104
|
+
/refacil:verify → Validacion PASS/FAIL
|
|
105
|
+
/refacil:review → Review con checklist
|
|
106
|
+
/refacil:archive → Cambio archivado
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Que se instala en tu repo
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
.claude/skills/refacil-*/ # Skills para Claude Code
|
|
113
|
+
.cursor/skills/refacil-*/ # Skills para Cursor
|
|
114
|
+
CLAUDE.md # Config para Claude Code (apunta a AGENTS.md)
|
|
115
|
+
.cursorrules # Config para Cursor (apunta a AGENTS.md)
|
|
116
|
+
AGENTS.md # Generado por /refacil:setup (NO por el CLI)
|
|
117
|
+
openspec/ # Generado por /refacil:setup via OpenSpec
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Actualizar
|
|
121
|
+
|
|
122
|
+
Cuando se publique una nueva version del paquete:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm update refacil-sdd-ai
|
|
126
|
+
npx refacil-sdd-ai update # Re-copia skills sin tocar AGENTS.md ni configs
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Desinstalar
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npx refacil-sdd-ai clean # Elimina skills de .claude/ y .cursor/
|
|
133
|
+
npm uninstall refacil-sdd-ai
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Tecnologias
|
|
137
|
+
|
|
138
|
+
- [OpenSpec](https://github.com/Fission-AI/OpenSpec) — Framework de especificaciones
|
|
139
|
+
- [AGENTS.md](https://agents.md/) — Estandar universal de instrucciones para IA
|
|
140
|
+
- [Claude Code](https://claude.ai/code) — CLI de Anthropic
|
|
141
|
+
- [Cursor](https://cursor.sh) — IDE con IA
|
|
142
|
+
|
|
143
|
+
## Licencia
|
|
144
|
+
|
|
145
|
+
MIT
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const SKILLS = [
|
|
7
|
+
'setup',
|
|
8
|
+
'guide',
|
|
9
|
+
'explore',
|
|
10
|
+
'propose',
|
|
11
|
+
'apply',
|
|
12
|
+
'test',
|
|
13
|
+
'verify',
|
|
14
|
+
'review',
|
|
15
|
+
'archive',
|
|
16
|
+
'bug',
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const packageRoot = path.resolve(__dirname, '..');
|
|
20
|
+
const projectRoot = process.cwd();
|
|
21
|
+
|
|
22
|
+
function copyDir(src, dest) {
|
|
23
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
24
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
const srcPath = path.join(src, entry.name);
|
|
27
|
+
const destPath = path.join(dest, entry.name);
|
|
28
|
+
if (entry.isDirectory()) {
|
|
29
|
+
copyDir(srcPath, destPath);
|
|
30
|
+
} else {
|
|
31
|
+
fs.copyFileSync(srcPath, destPath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function installSkills() {
|
|
37
|
+
let installed = 0;
|
|
38
|
+
|
|
39
|
+
for (const skill of SKILLS) {
|
|
40
|
+
const srcDir = path.join(packageRoot, 'skills', skill);
|
|
41
|
+
if (!fs.existsSync(srcDir)) continue;
|
|
42
|
+
|
|
43
|
+
// Copy to .claude/skills/
|
|
44
|
+
const claudeDest = path.join(projectRoot, '.claude', 'skills', `refacil-${skill}`);
|
|
45
|
+
copyDir(srcDir, claudeDest);
|
|
46
|
+
|
|
47
|
+
// Copy to .cursor/skills/
|
|
48
|
+
const cursorDest = path.join(projectRoot, '.cursor', 'skills', `refacil-${skill}`);
|
|
49
|
+
copyDir(srcDir, cursorDest);
|
|
50
|
+
|
|
51
|
+
installed++;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return installed;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function createClaudeMd() {
|
|
58
|
+
const dest = path.join(projectRoot, 'CLAUDE.md');
|
|
59
|
+
if (fs.existsSync(dest)) {
|
|
60
|
+
console.log(' CLAUDE.md ya existe, no se sobreescribe.');
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const template = fs.readFileSync(path.join(packageRoot, 'templates', 'claude-md.md'), 'utf8');
|
|
64
|
+
fs.writeFileSync(dest, template);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function createCursorRules() {
|
|
69
|
+
const dest = path.join(projectRoot, '.cursorrules');
|
|
70
|
+
if (fs.existsSync(dest)) {
|
|
71
|
+
console.log(' .cursorrules ya existe, no se sobreescribe.');
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
const template = fs.readFileSync(path.join(packageRoot, 'templates', 'cursorrules.md'), 'utf8');
|
|
75
|
+
fs.writeFileSync(dest, template);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function removeSkills() {
|
|
80
|
+
let removed = 0;
|
|
81
|
+
for (const skill of SKILLS) {
|
|
82
|
+
const claudeDir = path.join(projectRoot, '.claude', 'skills', `refacil-${skill}`);
|
|
83
|
+
const cursorDir = path.join(projectRoot, '.cursor', 'skills', `refacil-${skill}`);
|
|
84
|
+
|
|
85
|
+
if (fs.existsSync(claudeDir)) {
|
|
86
|
+
fs.rmSync(claudeDir, { recursive: true });
|
|
87
|
+
removed++;
|
|
88
|
+
}
|
|
89
|
+
if (fs.existsSync(cursorDir)) {
|
|
90
|
+
fs.rmSync(cursorDir, { recursive: true });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return removed;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function checkNodeVersion() {
|
|
97
|
+
const version = process.version; // e.g. v20.19.5
|
|
98
|
+
const major = parseInt(version.split('.')[0].replace('v', ''));
|
|
99
|
+
const minor = parseInt(version.split('.')[1]);
|
|
100
|
+
|
|
101
|
+
if (major < 20 || (major === 20 && minor < 19)) {
|
|
102
|
+
console.log(`\n ADVERTENCIA: Node.js ${version} detectado.`);
|
|
103
|
+
console.log(' OpenSpec requiere Node.js >= 20.19.0.');
|
|
104
|
+
console.log(' Las skills se instalaran pero /refacil:setup podria fallar al instalar OpenSpec.\n');
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// --- Commands ---
|
|
111
|
+
|
|
112
|
+
function init() {
|
|
113
|
+
console.log('\n refacil-sdd-ai: Inicializando metodologia SDD-AI...\n');
|
|
114
|
+
|
|
115
|
+
// Check Node version
|
|
116
|
+
const nodeOk = checkNodeVersion();
|
|
117
|
+
if (nodeOk) {
|
|
118
|
+
console.log(` Node.js ${process.version} OK`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Install skills
|
|
122
|
+
const count = installSkills();
|
|
123
|
+
console.log(` ${count} skills instaladas en .claude/skills/ y .cursor/skills/`);
|
|
124
|
+
|
|
125
|
+
// Create CLAUDE.md
|
|
126
|
+
if (createClaudeMd()) {
|
|
127
|
+
console.log(' CLAUDE.md creado');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Create .cursorrules
|
|
131
|
+
if (createCursorRules()) {
|
|
132
|
+
console.log(' .cursorrules creado');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
console.log('\n Siguientes pasos:\n');
|
|
136
|
+
console.log(' 1. REINICIA tu sesion de Claude Code o Cursor');
|
|
137
|
+
console.log(' (las skills nuevas no se detectan hasta reiniciar)\n');
|
|
138
|
+
console.log(' 2. Ejecuta: /refacil:setup');
|
|
139
|
+
console.log(' (instala OpenSpec y genera AGENTS.md para tu proyecto)\n');
|
|
140
|
+
console.log(' Nota: /refacil:setup tambien instalara los comandos de OpenSpec (opsx:*).');
|
|
141
|
+
console.log(' Los comandos refacil:* y opsx:* coexisten sin conflicto.');
|
|
142
|
+
console.log(' El equipo debe usar los refacil:* como interfaz principal.\n');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function update() {
|
|
146
|
+
console.log('\n refacil-sdd-ai: Actualizando skills...\n');
|
|
147
|
+
const count = installSkills();
|
|
148
|
+
console.log(` ${count} skills actualizadas en .claude/skills/ y .cursor/skills/`);
|
|
149
|
+
console.log(' AGENTS.md y configuraciones no fueron modificados.');
|
|
150
|
+
console.log('\n REINICIA tu sesion de Claude Code o Cursor para aplicar los cambios.\n');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function clean() {
|
|
154
|
+
console.log('\n refacil-sdd-ai: Eliminando skills...\n');
|
|
155
|
+
const count = removeSkills();
|
|
156
|
+
console.log(` ${count} skills eliminadas de .claude/skills/ y .cursor/skills/`);
|
|
157
|
+
console.log(' AGENTS.md, CLAUDE.md y .cursorrules no fueron eliminados.');
|
|
158
|
+
console.log('\n Nota: Los comandos opsx:* de OpenSpec no se eliminan.');
|
|
159
|
+
console.log(' Para eliminar OpenSpec: rm -rf openspec/ .claude/commands/opsx .cursor/commands/opsx\n');
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function help() {
|
|
163
|
+
console.log(`
|
|
164
|
+
refacil-sdd-ai — Metodologia SDD-AI con OpenSpec
|
|
165
|
+
|
|
166
|
+
Comandos:
|
|
167
|
+
init Instala skills en .claude/ y .cursor/, crea CLAUDE.md y .cursorrules
|
|
168
|
+
update Re-copia skills (para actualizar a nueva version del paquete)
|
|
169
|
+
clean Elimina skills de .claude/ y .cursor/
|
|
170
|
+
help Muestra esta ayuda
|
|
171
|
+
|
|
172
|
+
Flujo completo:
|
|
173
|
+
1. npm install --save-dev refacil-sdd-ai
|
|
174
|
+
2. npx refacil-sdd-ai init
|
|
175
|
+
3. REINICIAR sesion de Claude Code o Cursor
|
|
176
|
+
4. Ejecutar: /refacil:setup (instala OpenSpec + genera AGENTS.md)
|
|
177
|
+
|
|
178
|
+
Requisitos:
|
|
179
|
+
- Node.js >= 20.19.0 (requerido por OpenSpec)
|
|
180
|
+
- Claude Code o Cursor instalado
|
|
181
|
+
`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// --- Main ---
|
|
185
|
+
|
|
186
|
+
const command = process.argv[2] || 'help';
|
|
187
|
+
|
|
188
|
+
switch (command) {
|
|
189
|
+
case 'init':
|
|
190
|
+
init();
|
|
191
|
+
break;
|
|
192
|
+
case 'update':
|
|
193
|
+
update();
|
|
194
|
+
break;
|
|
195
|
+
case 'clean':
|
|
196
|
+
clean();
|
|
197
|
+
break;
|
|
198
|
+
case 'help':
|
|
199
|
+
case '--help':
|
|
200
|
+
case '-h':
|
|
201
|
+
help();
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
console.error(` Comando desconocido: ${command}`);
|
|
205
|
+
help();
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# OpenSpec Configuration Template — Equipo Refacil
|
|
2
|
+
# Copiar a openspec/config.yaml despues de ejecutar openspec init
|
|
3
|
+
|
|
4
|
+
# Idioma: español para artefactos, terminos tecnicos en ingles
|
|
5
|
+
language: spanish
|
|
6
|
+
|
|
7
|
+
# Las skills refacil:* usan la estructura de OpenSpec por debajo
|
|
8
|
+
# No es necesario modificar el schema default (spec-driven)
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "refacil-sdd-ai",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SDD-AI: Specification-Driven Development with AI — metodologia de desarrollo con IA usando OpenSpec, Claude Code y Cursor",
|
|
5
|
+
"bin": {
|
|
6
|
+
"refacil-sdd-ai": "./bin/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin/",
|
|
10
|
+
"skills/",
|
|
11
|
+
"templates/",
|
|
12
|
+
"config/",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"ai",
|
|
17
|
+
"development",
|
|
18
|
+
"methodology",
|
|
19
|
+
"openspec",
|
|
20
|
+
"claude-code",
|
|
21
|
+
"cursor",
|
|
22
|
+
"sdd",
|
|
23
|
+
"specification-driven",
|
|
24
|
+
"testing",
|
|
25
|
+
"code-review"
|
|
26
|
+
],
|
|
27
|
+
"author": "Refacil",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": ""
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=18.0.0"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:apply
|
|
3
|
+
description: Implementar las tasks de un cambio propuesto — escribe codigo siguiendo el plan aprobado en los artefactos de OpenSpec
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:apply — Implementacion
|
|
8
|
+
|
|
9
|
+
Este comando envuelve la funcionalidad de OpenSpec apply y agrega las convenciones del equipo.
|
|
10
|
+
|
|
11
|
+
## Antes de empezar
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
|
|
16
|
+
## Instrucciones
|
|
17
|
+
|
|
18
|
+
### Paso 1: Delegar a OpenSpec apply
|
|
19
|
+
|
|
20
|
+
Ejecuta internamente las instrucciones de la skill `openspec-apply-change` que esta instalada en `.claude/skills/openspec-apply-change/SKILL.md` (o `.cursor/skills/openspec-apply-change/SKILL.md`).
|
|
21
|
+
|
|
22
|
+
Lee esa skill y sigue sus instrucciones pasandole el argumento del usuario: **$ARGUMENTS**
|
|
23
|
+
|
|
24
|
+
**Indicaciones adicionales durante la implementacion:**
|
|
25
|
+
- Respetar estrictamente las convenciones de `AGENTS.md`
|
|
26
|
+
- No agregar funcionalidad fuera del alcance de las specs
|
|
27
|
+
- No hacer refactors no solicitados en codigo existente
|
|
28
|
+
- Si una task es ambigua, preguntar antes de implementar
|
|
29
|
+
|
|
30
|
+
### Paso 2: Resumen y siguiente paso (aporte Refacil)
|
|
31
|
+
|
|
32
|
+
Al terminar la implementacion de OpenSpec, agrega este resumen:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
=== Implementacion completada ===
|
|
36
|
+
Archivos creados: [lista]
|
|
37
|
+
Archivos modificados: [lista]
|
|
38
|
+
Tasks completadas: [X/Y]
|
|
39
|
+
|
|
40
|
+
Siguientes pasos:
|
|
41
|
+
1. /refacil:test — Generar tests unitarios
|
|
42
|
+
2. /refacil:verify — Validar implementacion vs specs
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Reglas
|
|
46
|
+
|
|
47
|
+
- SIEMPRE leer los artefactos completos antes de escribir codigo
|
|
48
|
+
- Si `openspec/changes/` no tiene cambios activos, informar y sugerir `/refacil:propose`
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:archive
|
|
3
|
+
description: Archivar un cambio completado — mueve artefactos a archive y sincroniza specs
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:archive — Archivar Cambio Completado
|
|
8
|
+
|
|
9
|
+
Este comando envuelve la funcionalidad de OpenSpec archive (que internamente llama a sync-specs) y agrega verificaciones previas del equipo.
|
|
10
|
+
|
|
11
|
+
## Antes de empezar
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
|
|
16
|
+
## Instrucciones
|
|
17
|
+
|
|
18
|
+
### Paso 1: Verificaciones previas (aporte Refacil)
|
|
19
|
+
|
|
20
|
+
Antes de archivar, verifica que el cambio esta realmente completo:
|
|
21
|
+
|
|
22
|
+
1. **Tasks completadas**: Busca el `tasks.md` del cambio y verifica que todas las tasks tienen checkbox marcado (`[x]`). Si hay tasks sin completar, informa al usuario y pregunta si quiere continuar de todas formas.
|
|
23
|
+
|
|
24
|
+
2. **Tests pasan**: Ejecuta `npm test` y verifica que pasan. Si hay tests que fallan, informa y pregunta si quiere continuar.
|
|
25
|
+
|
|
26
|
+
3. **Sin archivos pendientes**: Ejecuta `git status` y verifica si hay cambios sin commitear relacionados al feature. Si los hay, sugiere hacer commit antes de archivar.
|
|
27
|
+
|
|
28
|
+
Si alguna verificacion falla, informa al usuario pero permite que decida si continuar.
|
|
29
|
+
|
|
30
|
+
### Paso 2: Delegar a OpenSpec archive
|
|
31
|
+
|
|
32
|
+
Ejecuta internamente las instrucciones de la skill `openspec-archive-change` que esta instalada en `.claude/skills/openspec-archive-change/SKILL.md` (o `.cursor/skills/openspec-archive-change/SKILL.md`).
|
|
33
|
+
|
|
34
|
+
Lee esa skill y sigue sus instrucciones pasandole el argumento del usuario: **$ARGUMENTS**
|
|
35
|
+
|
|
36
|
+
OpenSpec archive internamente:
|
|
37
|
+
- Verifica el estado de los artefactos
|
|
38
|
+
- Ofrece sincronizar delta specs a `openspec/specs/` (via `openspec-sync-specs`)
|
|
39
|
+
- Mueve la carpeta del cambio a `openspec/changes/archive/` (con prefijo de fecha)
|
|
40
|
+
|
|
41
|
+
**IMPORTANTE**: Cuando OpenSpec pregunte si sincronizar specs, responde **SI**. La sincronizacion de specs es obligatoria en la metodologia Refacil — `openspec/specs/` debe reflejar siempre el estado actual del sistema.
|
|
42
|
+
|
|
43
|
+
### Paso 3: Verificar sincronizacion (aporte Refacil)
|
|
44
|
+
|
|
45
|
+
Despues de que OpenSpec archive, verifica que `openspec/specs/` fue actualizada:
|
|
46
|
+
|
|
47
|
+
1. Revisa si hay archivos nuevos o modificados en `openspec/specs/`
|
|
48
|
+
2. Si la sincronizacion no ocurrio (OpenSpec la salto o fallo), ejecuta manualmente la sincronizacion:
|
|
49
|
+
- Lee el `specs.md` del cambio archivado
|
|
50
|
+
- Busca el spec principal relevante en `openspec/specs/`
|
|
51
|
+
- Si existe, integra los cambios (ADDED → agregar, MODIFIED → actualizar, REMOVED → eliminar)
|
|
52
|
+
- Si NO existe, crea un spec principal nuevo con nombre descriptivo
|
|
53
|
+
|
|
54
|
+
El objetivo es que `openspec/specs/` documente como funciona el sistema HOY.
|
|
55
|
+
|
|
56
|
+
### Paso 4: Confirmar
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
=== Cambio archivado ===
|
|
60
|
+
Cambio: [nombre]
|
|
61
|
+
Ubicacion: openspec/changes/archive/[fecha]-[nombre]/
|
|
62
|
+
Specs sincronizadas: SI
|
|
63
|
+
Tests: PASS
|
|
64
|
+
|
|
65
|
+
El cambio ha sido completado y archivado exitosamente.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Reglas
|
|
69
|
+
|
|
70
|
+
- Siempre verificar completitud antes de archivar
|
|
71
|
+
- La sincronizacion de specs es OBLIGATORIA en la metodologia Refacil
|
|
72
|
+
- No eliminar artefactos, solo moverlos a archive/ para trazabilidad
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:bug
|
|
3
|
+
description: Flujo guiado completo para investigar y corregir bugs — desde la descripcion hasta los tests de regresion
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:bug — Flujo de Bug Fix
|
|
8
|
+
|
|
9
|
+
Eres un asistente especializado en investigacion y correccion de bugs. Guias al desarrollador por un flujo estructurado paso a paso.
|
|
10
|
+
|
|
11
|
+
## Contexto
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
|
|
16
|
+
## Instrucciones
|
|
17
|
+
|
|
18
|
+
### Paso 1: Describir el bug
|
|
19
|
+
|
|
20
|
+
Preguntale al usuario (si no lo proporciono en $ARGUMENTS):
|
|
21
|
+
|
|
22
|
+
1. **Que esta pasando?** — Comportamiento actual (el error)
|
|
23
|
+
2. **Que deberia pasar?** — Comportamiento esperado
|
|
24
|
+
3. **Pasos para reproducir** — Como llegar al error
|
|
25
|
+
4. **Evidencia** — Logs, screenshots, stack traces (pedir que los peguen)
|
|
26
|
+
5. **Desde cuando ocurre?** — Siempre, desde un deploy, desde un cambio especifico
|
|
27
|
+
6. **Severidad** — Critico (bloquea produccion), Alto, Medio, Bajo
|
|
28
|
+
|
|
29
|
+
### Paso 2: Investigar la causa raiz
|
|
30
|
+
|
|
31
|
+
Con la informacion del paso 1:
|
|
32
|
+
|
|
33
|
+
1. **Buscar en el codebase**:
|
|
34
|
+
- Busca las funciones/archivos mencionados en los logs o stack traces
|
|
35
|
+
- Busca el flujo de datos del escenario que falla
|
|
36
|
+
- Revisa commits recientes si el bug es nuevo (`git log --oneline -20`)
|
|
37
|
+
|
|
38
|
+
2. **Trazar el flujo**:
|
|
39
|
+
- Desde el punto de entrada (controller/endpoint) hasta donde falla
|
|
40
|
+
- Identifica cada componente en la cadena
|
|
41
|
+
- Busca donde se rompe la cadena
|
|
42
|
+
|
|
43
|
+
3. **Formular hipotesis**:
|
|
44
|
+
- Presenta al usuario 1-3 hipotesis de causa raiz
|
|
45
|
+
- Para cada una, muestra el archivo y linea sospechosa
|
|
46
|
+
- Pide al usuario que confirme o descarte
|
|
47
|
+
|
|
48
|
+
### Paso 3: Diagnosticar
|
|
49
|
+
|
|
50
|
+
Una vez confirmada la hipotesis:
|
|
51
|
+
|
|
52
|
+
1. **Confirmar la causa raiz**: Muestra el codigo exacto que causa el bug
|
|
53
|
+
2. **Explicar por que falla**: Que condicion o caso no esta manejado
|
|
54
|
+
3. **Evaluar impacto**: Que mas podria estar afectado
|
|
55
|
+
|
|
56
|
+
### Paso 4: Proponer correccion
|
|
57
|
+
|
|
58
|
+
Presenta la correccion propuesta:
|
|
59
|
+
|
|
60
|
+
1. **Cambio minimo**: La correccion mas pequeña posible que resuelve el bug
|
|
61
|
+
2. **Archivos a modificar**: Lista con descripcion del cambio
|
|
62
|
+
3. **Riesgos**: Que podria romperse con el fix
|
|
63
|
+
4. **Alternativas**: Si hay mas de una forma de corregirlo
|
|
64
|
+
|
|
65
|
+
Espera aprobacion del usuario antes de implementar.
|
|
66
|
+
|
|
67
|
+
### Paso 5: Implementar el fix
|
|
68
|
+
|
|
69
|
+
Con aprobacion del usuario:
|
|
70
|
+
|
|
71
|
+
1. Aplica la correccion
|
|
72
|
+
2. Verifica que el cambio es minimo y enfocado
|
|
73
|
+
3. No hacer refactors adicionales
|
|
74
|
+
|
|
75
|
+
### Paso 6: Tests de regresion
|
|
76
|
+
|
|
77
|
+
Genera tests que:
|
|
78
|
+
|
|
79
|
+
1. **Reproducen el bug**: Un test que falla SIN el fix (verifica que el test es valido)
|
|
80
|
+
2. **Verifican el fix**: El mismo test pasa CON el fix
|
|
81
|
+
3. **Verifican no regresion**: Tests del flujo normal siguen pasando
|
|
82
|
+
|
|
83
|
+
Estructura:
|
|
84
|
+
```typescript
|
|
85
|
+
describe('Bug Fix: [descripcion corta]', () => {
|
|
86
|
+
it('should [comportamiento correcto] when [condicion que antes fallaba]', () => {
|
|
87
|
+
// Este test hubiera fallado antes del fix
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should still [comportamiento normal] when [condicion normal]', () => {
|
|
91
|
+
// Este test verifica que no se rompio nada
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Paso 7: Verificar
|
|
97
|
+
|
|
98
|
+
1. Ejecuta `npm test` — todos los tests deben pasar
|
|
99
|
+
2. Muestra resumen del fix
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
=== Bug Fix Completado ===
|
|
103
|
+
Bug: [descripcion corta]
|
|
104
|
+
Causa raiz: [explicacion]
|
|
105
|
+
Fix: [que se cambio]
|
|
106
|
+
Archivos modificados: [lista]
|
|
107
|
+
Tests de regresion: [N] tests agregados
|
|
108
|
+
npm test: PASS
|
|
109
|
+
|
|
110
|
+
Siguientes pasos:
|
|
111
|
+
1. /refacil:review — Review del fix (recomendado para bugs criticos)
|
|
112
|
+
2. Commit y deploy
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Paso 8 (opcional): Crear artefactos OpenSpec
|
|
116
|
+
|
|
117
|
+
Si el bug es significativo, preguntar al usuario si quiere documentarlo en OpenSpec:
|
|
118
|
+
- Crear carpeta en `openspec/changes/fix-[nombre]/`
|
|
119
|
+
- Generar proposal.md y specs.md con los detalles del bug y fix
|
|
120
|
+
|
|
121
|
+
## Reglas
|
|
122
|
+
|
|
123
|
+
- SIEMPRE investigar antes de proponer una correccion
|
|
124
|
+
- NUNCA implementar sin aprobacion del usuario
|
|
125
|
+
- El fix debe ser MINIMO — no aprovechar para refactorizar
|
|
126
|
+
- Los tests de regresion son OBLIGATORIOS
|
|
127
|
+
- Si el bug es en produccion (critico), priorizar velocidad pero sin saltarse tests
|
|
128
|
+
- Responder en español con terminos tecnicos en ingles
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:explore
|
|
3
|
+
description: Explorar e investigar el codebase antes de hacer cambios — analiza arquitectura, flujos y dependencias sin modificar nada
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:explore — Exploracion del Codebase
|
|
8
|
+
|
|
9
|
+
Este comando envuelve la funcionalidad de OpenSpec explore y agrega contexto del proyecto.
|
|
10
|
+
|
|
11
|
+
## Antes de empezar
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones del repositorio. Usa esa informacion como contexto durante la exploracion.
|
|
14
|
+
|
|
15
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
16
|
+
|
|
17
|
+
## Instrucciones
|
|
18
|
+
|
|
19
|
+
### Paso 1: Delegar a OpenSpec explore
|
|
20
|
+
|
|
21
|
+
Ejecuta internamente las instrucciones de la skill `openspec-explore` que esta instalada en `.claude/skills/openspec-explore/SKILL.md` (o `.cursor/skills/openspec-explore/SKILL.md`).
|
|
22
|
+
|
|
23
|
+
Lee esa skill y sigue sus instrucciones pasandole el argumento del usuario: **$ARGUMENTS**
|
|
24
|
+
|
|
25
|
+
### Paso 2: Enriquecer con contexto de AGENTS.md
|
|
26
|
+
|
|
27
|
+
Ademas de lo que OpenSpec explore reporta, agrega:
|
|
28
|
+
- Patrones especificos del proyecto que encontraste en AGENTS.md relevantes a la exploracion
|
|
29
|
+
- Convenciones que el usuario deberia tener en cuenta si planea hacer cambios en esa area
|
|
30
|
+
|
|
31
|
+
### Paso 3: Recomendar siguiente paso
|
|
32
|
+
|
|
33
|
+
Al final del reporte, sugiere:
|
|
34
|
+
- Si el usuario quiere hacer un cambio: "Ejecuta `/refacil:propose <descripcion>` para crear una propuesta"
|
|
35
|
+
- Si el usuario quiere investigar mas: "Ejecuta `/refacil:explore <otra pregunta>` para seguir explorando"
|
|
36
|
+
|
|
37
|
+
## Reglas
|
|
38
|
+
|
|
39
|
+
- NO modifiques ningun archivo
|
|
40
|
+
- NO generes codigo nuevo
|
|
41
|
+
- Solo lectura e investigacion
|
|
42
|
+
- Responde en español con terminos tecnicos en ingles
|