specleap-framework 2.0.10 → 2.0.12
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/CLAUDE.md +259 -346
- package/install.sh +7 -145
- package/package.json +1 -2
- package/setup.sh +2 -6
- package/proyectos/_template/.gitkeep +0 -1
- package/proyectos/_template/ANEXOS.md +0 -21
- package/proyectos/_template/CONTRATO.md +0 -26
- package/proyectos/_template/context/.gitkeep +0 -1
package/CLAUDE.md
CHANGED
|
@@ -1,444 +1,357 @@
|
|
|
1
|
-
# SpecLeap
|
|
1
|
+
# SpecLeap — Context for Claude Code & Claude API
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Methodology:** Spec-Driven Development (SDD). Spec first, never code first.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## 🌐
|
|
7
|
+
## 🌐 Default Language: SPANISH
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**CRITICAL:** All feedback, messages, commit messages, and user-facing text MUST be in SPANISH.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
This project is for Spanish-speaking teams. All agents, commands, and responses must use Spanish unless explicitly overridden.
|
|
12
|
+
|
|
13
|
+
**Examples:**
|
|
12
14
|
❌ "Generating plan..."
|
|
13
15
|
✅ "Generando plan..."
|
|
14
16
|
|
|
15
17
|
❌ "Tests passed"
|
|
16
18
|
✅ "Tests pasaron"
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
See individual agent files (`.agents/*.md`) for specific language directives.
|
|
19
21
|
|
|
20
22
|
---
|
|
21
23
|
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
Esto es **SpecLeap**, un framework de desarrollo que combina:
|
|
25
|
-
- **Agentes conversacionales** (roles especializados con comandos)
|
|
26
|
-
- **Spec-Driven Development** (contratos primero, código segundo)
|
|
27
|
-
- **Soporte multi-proyecto** (proyectos independientes con contratos)
|
|
24
|
+
## Project Structure
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
│ ├── frontend.md # React + TypeScript
|
|
34
|
-
│ └── producto.md # Análisis producto + user stories
|
|
35
|
-
├── .commands/ # 10 comandos SpecLeap
|
|
36
|
-
│ ├── ayuda.md
|
|
37
|
-
│ ├── planificar.md
|
|
38
|
-
│ ├── implementar.md
|
|
39
|
-
│ ├── refinar.md
|
|
40
|
-
│ └── ...
|
|
41
|
-
├── .specleap/ # Configuración (creada durante instalación)
|
|
42
|
-
│ ├── config.json # Tokens, idioma, workspace
|
|
43
|
-
│ └── i18n/ # Traducciones ES/EN
|
|
44
|
-
├── proyectos/ # Proyectos del usuario
|
|
45
|
-
│ └── _template/ # Plantilla CONTRATO.md + ANEXOS.md
|
|
46
|
-
├── rules/ # Reglas de desarrollo
|
|
47
|
-
└── scripts/ # Scripts de instalación y generación
|
|
48
|
-
```
|
|
26
|
+
This is **SpecLeap**, a development framework that combines:
|
|
27
|
+
- **Conversational agents** (specialized roles with commands)
|
|
28
|
+
- **Spec-Driven Development** (contracts first, code second)
|
|
29
|
+
- **Multi-project support** (independent projects with contracts)
|
|
49
30
|
|
|
50
31
|
---
|
|
51
32
|
|
|
52
|
-
##
|
|
33
|
+
## Core Principles
|
|
53
34
|
|
|
54
|
-
1. **CONTRATO.md
|
|
55
|
-
2. **
|
|
56
|
-
3. **
|
|
57
|
-
4. **
|
|
58
|
-
5. **
|
|
35
|
+
1. **CONTRATO.md is IMMUTABLE** — Once accepted, never modify. Use ANEXOS.md for improvements.
|
|
36
|
+
2. **Projects are independent** — Each project in `proyectos/` has its own contract and context.
|
|
37
|
+
3. **Commands are in Spanish** — `refinar`, `planificar`, `implementar`, `explicar`, `documentar`
|
|
38
|
+
4. **Agents have roles** — Backend, Frontend, Product Analyst (see `.agents/`)
|
|
39
|
+
5. **Standards are global** — `specs/*.mdc` apply to ALL projects
|
|
59
40
|
|
|
60
41
|
---
|
|
61
42
|
|
|
62
|
-
##
|
|
43
|
+
## Getting Started
|
|
63
44
|
|
|
64
|
-
###
|
|
45
|
+
### Trigger Word: "Hola"
|
|
65
46
|
|
|
66
|
-
**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
📋 Comandos disponibles:
|
|
72
|
-
• ayuda → Lista completa de comandos
|
|
73
|
-
• inicio → Crear proyecto nuevo (cuestionario 59 preguntas)
|
|
74
|
-
• planificar → Generar backlog Asana desde CONTRATO.md
|
|
75
|
-
• implementar <ticket> → Desarrollar feature
|
|
76
|
-
• refinar → Mejorar CONTRATO.md existente
|
|
77
|
-
• documentar → Actualizar documentación
|
|
78
|
-
|
|
79
|
-
🔧 Estado del proyecto:
|
|
80
|
-
[Buscar CONTRATO.md en proyectos/]
|
|
81
|
-
|
|
82
|
-
Si existe:
|
|
83
|
-
✅ CONTRATO.md encontrado: proyectos/mi-proyecto/CONTRATO.md
|
|
84
|
-
|
|
85
|
-
Si NO existe:
|
|
86
|
-
⚠️ No hay CONTRATO.md todavía.
|
|
87
|
-
Para crear uno nuevo:
|
|
88
|
-
./scripts/generate-contrato.sh
|
|
89
|
-
|
|
90
|
-
o escribe: inicio
|
|
91
|
-
|
|
92
|
-
¿En qué puedo ayudarte hoy?
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**NUNCA** dar respuesta genérica como "¿En qué puedo ayudarte?" sin mostrar los comandos disponibles.
|
|
47
|
+
When the user says **"Hola"** (case-insensitive), execute `.commands/inicio.md`:
|
|
48
|
+
1. List available projects in `proyectos/`
|
|
49
|
+
2. Ask which project to work on (or new project)
|
|
50
|
+
3. Load project context (CONTRATO.md + context/)
|
|
51
|
+
4. Ask what type of work (DESARROLLO / DOCUMENTACIÓN)
|
|
96
52
|
|
|
97
53
|
---
|
|
98
54
|
|
|
99
|
-
##
|
|
100
|
-
|
|
101
|
-
### Comandos Principales
|
|
55
|
+
## Slash Command Detection (CRITICAL)
|
|
102
56
|
|
|
103
|
-
|
|
104
|
-
|---------|-------------|---------|--------|
|
|
105
|
-
| `ayuda` | Lista completa de comandos + flujo SDD | `.commands/ayuda.md` | - |
|
|
106
|
-
| `inicio` | Wizard proyecto nuevo (59 preguntas) | `.commands/inicio.md` | - |
|
|
107
|
-
| `planificar` | Lee CONTRATO.md → genera backlog Asana | `.commands/planificar.md` | - |
|
|
108
|
-
| `implementar <ticket>` | Desarrolla según spec del ticket Asana | `.commands/implementar.md` | backend/frontend |
|
|
109
|
-
| `refinar` | Mejora CONTRATO.md existente | `.commands/refinar.md` | producto |
|
|
110
|
-
| `documentar` | Genera/actualiza documentación | `.commands/documentar.md` | - |
|
|
111
|
-
| `adoptar` | Integra SpecLeap en proyecto existente | `.commands/adoptar.md` | - |
|
|
112
|
-
| `explicar <concepto>` | Explica metodología SDD | `.commands/explicar.md` | - |
|
|
57
|
+
**When the user writes a SINGLE slash command** (e.g., just `refinar` or `crear-tickets`), **AUTOMATICALLY**:
|
|
113
58
|
|
|
114
|
-
|
|
59
|
+
1. **Detect the command** from the message
|
|
60
|
+
2. **Read the corresponding `.commands/*.md` file**
|
|
61
|
+
3. **Follow the instructions in that file step-by-step**
|
|
115
62
|
|
|
116
|
-
**
|
|
63
|
+
**Command-to-File Mapping:**
|
|
117
64
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
65
|
+
| User writes | Read this file | Then execute |
|
|
66
|
+
|-------------|----------------|--------------|
|
|
67
|
+
| `/inicio` or `Hola` | `.commands/inicio.md` | Start workflow |
|
|
68
|
+
| `ayuda`, `help`, `comandos` | `.commands/ayuda.md` | List ALL available commands |
|
|
69
|
+
| `refinar` | `.commands/refinar.md` | Refine user story |
|
|
70
|
+
| `planificar` | `.commands/planificar.md` | Generate backlog |
|
|
71
|
+
| `crear-tickets` | `.commands/crear-tickets.md` | Alias of `planificar` |
|
|
72
|
+
| `implementar` | `.commands/implementar.md` | Execute implementation |
|
|
73
|
+
| `explicar` | `.commands/explicar.md` | Explain concept |
|
|
74
|
+
| `documentar` | `.commands/documentar.md` | Update docs |
|
|
75
|
+
| `adoptar` | `.commands/adoptar.md` | Adopt legacy project |
|
|
122
76
|
|
|
123
|
-
**
|
|
124
|
-
-
|
|
125
|
-
- `
|
|
126
|
-
-
|
|
127
|
-
- `implementar` → `.commands/implementar.md`
|
|
128
|
-
- `refinar` → `.commands/refinar.md`
|
|
129
|
-
- `documentar` → `.commands/documentar.md`
|
|
130
|
-
- `adoptar` → `.commands/adoptar.md`
|
|
131
|
-
- `explicar` → `.commands/explicar.md`
|
|
77
|
+
**Rules:**
|
|
78
|
+
- If user writes `/comando` alone → read `.commands/comando.md` immediately
|
|
79
|
+
- If user writes `/comando` + context → read file + use context
|
|
80
|
+
- NEVER ask "should I read the file?" — just read it
|
|
132
81
|
|
|
133
82
|
---
|
|
134
83
|
|
|
135
|
-
##
|
|
136
|
-
|
|
137
|
-
### Paso 1: Crear CONTRATO.md
|
|
138
|
-
|
|
139
|
-
**Opción A: Cuestionario Guiado (Recomendado)**
|
|
140
|
-
```bash
|
|
141
|
-
./scripts/generate-contrato.sh
|
|
142
|
-
```
|
|
143
|
-
→ 59 preguntas interactivas (Stack, Features, Integraciones, etc.)
|
|
144
|
-
→ Genera CONTRATO.md completo automáticamente
|
|
84
|
+
## Commands Available
|
|
145
85
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
86
|
+
| Command | Description | Agente |
|
|
87
|
+
|---------|-------------|--------|
|
|
88
|
+
| `refinar SCRUM-XX` | Refine Jira user story | producto.md |
|
|
89
|
+
| `planificar SCRUM-XX` | Generate implementation plan | backend.md / frontend.md |
|
|
90
|
+
| `implementar @plan.md` | Execute plan: branch + code + tests + PR | backend.md / frontend.md |
|
|
91
|
+
| `explicar [concepto]` | Explain code/architecture/decisions | neutral |
|
|
92
|
+
| `documentar` | Update technical documentation | neutral |
|
|
151
93
|
|
|
152
|
-
|
|
94
|
+
**See:** `.commands/` for detailed command specifications.
|
|
153
95
|
|
|
154
|
-
|
|
155
|
-
Usuario: planificar
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**El asistente debe:**
|
|
159
|
-
1. Leer `CONTRATO.md`
|
|
160
|
-
2. Analizar secciones: Features, Stack, Integraciones, Roles, etc.
|
|
161
|
-
3. Ejecutar `scripts/generate-asana-structure.sh`
|
|
162
|
-
4. Generar épicas + user stories en Asana
|
|
163
|
-
5. Reportar resumen: X épicas, Y stories creadas
|
|
164
|
-
|
|
165
|
-
### Paso 3: Implementar por Tickets
|
|
96
|
+
---
|
|
166
97
|
|
|
167
|
-
|
|
168
|
-
Usuario: implementar PROJ-123
|
|
169
|
-
```
|
|
98
|
+
## Agents
|
|
170
99
|
|
|
171
|
-
|
|
172
|
-
1. Descargar spec del ticket Asana (vía API)
|
|
173
|
-
2. Leer CONTRATO.md para contexto
|
|
174
|
-
3. Adoptar agente apropiado (.agents/backend.md o frontend.md)
|
|
175
|
-
4. Implementar según especificación
|
|
176
|
-
5. Crear tests (coverage >= 80%)
|
|
177
|
-
6. Documentar cambios
|
|
178
|
-
7. Crear branch: `feature/PROJ-123-descripcion`
|
|
179
|
-
8. Commit + Push
|
|
180
|
-
9. Crear PR
|
|
181
|
-
10. Esperar review CodeRabbit
|
|
182
|
-
|
|
183
|
-
### Paso 4: Review Automático
|
|
184
|
-
|
|
185
|
-
→ Push a GitHub
|
|
186
|
-
→ CodeRabbit revisa automáticamente (`.coderabbit.yaml`)
|
|
187
|
-
→ Feedback en español
|
|
188
|
-
→ Aplicar correcciones si necesario
|
|
100
|
+
Adopt these roles when executing commands:
|
|
189
101
|
|
|
190
|
-
|
|
102
|
+
- **`.agents/backend.md`** — Laravel + PHP + API expert
|
|
103
|
+
- **`.agents/frontend.md`** — React + TypeScript + Vite expert
|
|
104
|
+
- **`.agents/producto.md`** — Product analyst + user story enrichment
|
|
191
105
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
**Cuándo:** Implementando APIs, base de datos, lógica de negocio
|
|
198
|
-
**Stack:** Laravel + PHP + Eloquent + PostgreSQL/MySQL
|
|
199
|
-
**Responsabilidades:**
|
|
200
|
-
- Arquitectura backend (DDD, Repository pattern)
|
|
201
|
-
- APIs RESTful
|
|
202
|
-
- Validación server-side
|
|
203
|
-
- Seguridad (OWASP)
|
|
204
|
-
- Tests unitarios + integración
|
|
205
|
-
|
|
206
|
-
### .agents/frontend.md
|
|
207
|
-
**Cuándo:** Implementando UI, componentes, estado
|
|
208
|
-
**Stack:** React + TypeScript + Vite + TailwindCSS
|
|
209
|
-
**Responsabilidades:**
|
|
210
|
-
- Componentes reutilizables
|
|
211
|
-
- Estado global (Context/Zustand)
|
|
212
|
-
- Integración con APIs
|
|
213
|
-
- Diseño responsive
|
|
214
|
-
- Tests componentes
|
|
215
|
-
|
|
216
|
-
### .agents/producto.md
|
|
217
|
-
**Cuándo:** Refinando user stories, decisiones de producto
|
|
218
|
-
**Responsabilidades:**
|
|
219
|
-
- Enriquecer user stories con criterios de aceptación
|
|
220
|
-
- Detectar edge cases
|
|
221
|
-
- Priorización de features
|
|
222
|
-
- UX/UI decisions
|
|
223
|
-
|
|
224
|
-
**Activación automática:**
|
|
225
|
-
- Usuario escribe `refinar` → Cargar `.agents/producto.md`
|
|
226
|
-
- Usuario escribe `implementar` + backend-related → Cargar `.agents/backend.md`
|
|
227
|
-
- Usuario escribe `implementar` + frontend-related → Cargar `.agents/frontend.md`
|
|
106
|
+
**When to adopt:**
|
|
107
|
+
- `refinar` → producto.md
|
|
108
|
+
- `planificar` backend → backend.md
|
|
109
|
+
- `planificar` frontend → frontend.md
|
|
110
|
+
- `implementar` → backend.md or frontend.md (depending on plan)
|
|
228
111
|
|
|
229
112
|
---
|
|
230
113
|
|
|
231
|
-
##
|
|
232
|
-
|
|
233
|
-
Ver carpeta `rules/` para reglas completas:
|
|
114
|
+
## Standards (Always Apply)
|
|
234
115
|
|
|
235
|
-
|
|
236
|
-
- Spec-first SIEMPRE
|
|
237
|
-
- Código en inglés, comentarios en español
|
|
238
|
-
- Tests obligatorios (>= 80% coverage)
|
|
239
|
-
- TypeScript strict mode
|
|
116
|
+
Read and follow these standards for ALL code:
|
|
240
117
|
|
|
241
|
-
###
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
118
|
+
### Global Standards
|
|
119
|
+
1. **`specs/base-standards.mdc`** — Core principles (English only, TDD, small steps)
|
|
120
|
+
2. **`specs/backend-standards.mdc`** — Backend patterns (DDD, testing)
|
|
121
|
+
3. **`specs/frontend-standards.mdc`** — Frontend patterns (components, state)
|
|
122
|
+
4. **`specs/documentation-standards.mdc`** — Documentation structure
|
|
246
123
|
|
|
247
|
-
###
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
- Validar variables de entorno al inicio
|
|
124
|
+
### Technology-Specific Standards
|
|
125
|
+
5. **`specs/laravel-standards.mdc`** — Laravel + PHP + Eloquent
|
|
126
|
+
6. **`specs/react-standards.mdc`** — React + TypeScript + hooks
|
|
251
127
|
|
|
252
|
-
|
|
253
|
-
- Mantener contexto entre sesiones
|
|
254
|
-
- Documentar decisiones importantes
|
|
255
|
-
- Actualizar ANEXOS.md con cambios aprobados
|
|
128
|
+
**Always read relevant standards before implementing.**
|
|
256
129
|
|
|
257
130
|
---
|
|
258
131
|
|
|
259
|
-
##
|
|
260
|
-
|
|
261
|
-
Si están instalados en `~/.skills/`, se activan automáticamente según contexto:
|
|
132
|
+
## Agent Skills (Progressive Disclosure)
|
|
262
133
|
|
|
263
|
-
|
|
264
|
-
- `backend-api-security` — Validación server-side, rate limiting, CSRF
|
|
265
|
-
- `frontend-mobile-security` — XSS, sanitización
|
|
266
|
-
- `sast-configuration` — SAST tools config
|
|
267
|
-
- `stride-analysis-patterns` — Threat modeling
|
|
268
|
-
- `security-requirement-extraction` — Security reqs desde specs
|
|
134
|
+
If **20 Agent Skills TIER 1** are installed (`~/.skills/`), they activate automatically:
|
|
269
135
|
|
|
270
|
-
###
|
|
271
|
-
- `verification-before-completion` — Verificar ANTES de finalizar
|
|
272
|
-
- `code-review-excellence` — Review checklist
|
|
273
|
-
- `systematic-debugging` — Debug metodológico
|
|
136
|
+
### Activation Triggers
|
|
274
137
|
|
|
275
|
-
|
|
276
|
-
- `frontend-design` — Profesional design (Vercel/Linear style)
|
|
277
|
-
- `web-design-guidelines` — UX guidelines
|
|
278
|
-
- `ui-ux-pro-max` — Diseño avanzado + componentes
|
|
279
|
-
- `tailwind-design-system` — TailwindCSS best practices
|
|
280
|
-
- `shadcn-ui` — Shadcn components
|
|
281
|
-
- `responsive-design` — Mobile-first responsive
|
|
138
|
+
Skills load knowledge **only when needed** based on context:
|
|
282
139
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
140
|
+
```
|
|
141
|
+
User: "Crear endpoint POST /api/products con validación"
|
|
142
|
+
|
|
143
|
+
Auto-activates:
|
|
144
|
+
✓ api-design-principles
|
|
145
|
+
✓ backend-api-security
|
|
146
|
+
✓ laravel-specialist
|
|
147
|
+
✓ verification-before-completion
|
|
148
|
+
✓ postgresql-table-design
|
|
149
|
+
```
|
|
290
150
|
|
|
291
|
-
|
|
151
|
+
### Critical Skills
|
|
152
|
+
|
|
153
|
+
#### verification-before-completion ⭐ **MANDATORY**
|
|
154
|
+
|
|
155
|
+
**Before creating ANY function, class, or component:**
|
|
156
|
+
1. **SEARCH** existing code for similar functionality
|
|
157
|
+
2. **READ** conventions.md for naming patterns
|
|
158
|
+
3. **VERIFY** utilities/services don't already exist
|
|
159
|
+
4. **ONLY THEN** create if nothing similar exists
|
|
160
|
+
|
|
161
|
+
**Anti-Pattern (NEVER DO):**
|
|
162
|
+
- ❌ Create `UserHelper` when `UserService` exists
|
|
163
|
+
- ❌ Create `formatPrice()` when `formatCurrency()` exists
|
|
164
|
+
- ❌ Create new HTTP client when axios instance exists
|
|
165
|
+
|
|
166
|
+
#### code-review-excellence
|
|
167
|
+
|
|
168
|
+
Before committing, verify:
|
|
169
|
+
- No duplicated code
|
|
170
|
+
- Follows conventions.md
|
|
171
|
+
- Tests coverage >= 90%
|
|
172
|
+
- Security best practices
|
|
173
|
+
|
|
174
|
+
#### backend-api-security
|
|
175
|
+
|
|
176
|
+
For all endpoints:
|
|
177
|
+
- Server-side validation
|
|
178
|
+
- Rate limiting
|
|
179
|
+
- CSRF protection
|
|
180
|
+
- SQL injection prevention
|
|
181
|
+
- XSS sanitization
|
|
182
|
+
|
|
183
|
+
#### frontend-design + web-design-guidelines
|
|
184
|
+
|
|
185
|
+
For all components:
|
|
186
|
+
- Professional design (Vercel/Linear style)
|
|
187
|
+
- Consistent spacing (4px grid)
|
|
188
|
+
- Responsive mobile-first
|
|
189
|
+
- Micro-interactions
|
|
190
|
+
- Design system coherence
|
|
191
|
+
|
|
192
|
+
### Skill Categories
|
|
193
|
+
|
|
194
|
+
**🔒 Security (5):**
|
|
195
|
+
- sast-configuration
|
|
196
|
+
- stride-analysis-patterns
|
|
197
|
+
- security-requirement-extraction
|
|
198
|
+
- backend-api-security
|
|
199
|
+
- frontend-mobile-security
|
|
200
|
+
|
|
201
|
+
**🔄 Consistency (3):**
|
|
202
|
+
- verification-before-completion ⭐
|
|
203
|
+
- code-review-excellence
|
|
204
|
+
- systematic-debugging
|
|
205
|
+
|
|
206
|
+
**🎨 Design/Frontend (6):**
|
|
207
|
+
- web-design-guidelines
|
|
208
|
+
- frontend-design
|
|
209
|
+
- ui-ux-pro-max
|
|
210
|
+
- tailwind-design-system
|
|
211
|
+
- shadcn-ui
|
|
212
|
+
- responsive-design
|
|
213
|
+
|
|
214
|
+
**🛠️ Backend/Dev (6):**
|
|
215
|
+
- laravel-specialist
|
|
216
|
+
- vercel-react-best-practices
|
|
217
|
+
- test-driven-development
|
|
218
|
+
- api-design-principles
|
|
219
|
+
- postgresql-table-design
|
|
220
|
+
- error-handling-patterns
|
|
221
|
+
|
|
222
|
+
**See:** [SETUP.md](SETUP.md) for installation details.
|
|
292
223
|
|
|
293
224
|
---
|
|
294
225
|
|
|
295
|
-
##
|
|
296
|
-
|
|
297
|
-
### SIEMPRE Verificar:
|
|
226
|
+
## Project Structure
|
|
298
227
|
|
|
299
|
-
**1. ¿Existe CONTRATO.md?**
|
|
300
|
-
```bash
|
|
301
|
-
find proyectos/ -name "CONTRATO.md"
|
|
302
228
|
```
|
|
303
|
-
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
229
|
+
proyectos/[project-name]/
|
|
230
|
+
├── CONTRATO.md # 🔒 IMMUTABLE contract
|
|
231
|
+
├── ANEXOS.md # ✏️ Improvements/modules
|
|
232
|
+
├── context/ # Memory-bank
|
|
233
|
+
│ ├── brief.md
|
|
234
|
+
│ ├── architecture.md
|
|
235
|
+
│ ├── tech-stack.md
|
|
236
|
+
│ ├── conventions.md
|
|
237
|
+
│ └── decisions.md
|
|
238
|
+
└── specs/ # Feature specs
|
|
239
|
+
├── [TICKET-ID]_backend.md
|
|
240
|
+
└── [TICKET-ID]_frontend.md
|
|
241
|
+
```
|
|
313
242
|
|
|
314
|
-
**
|
|
315
|
-
|
|
316
|
-
|
|
243
|
+
**Before working on a project:**
|
|
244
|
+
1. Read `CONTRATO.md` — Understand the contract
|
|
245
|
+
2. Read `context/architecture.md` — Understand architecture
|
|
246
|
+
3. Read `context/conventions.md` — Follow code patterns
|
|
317
247
|
|
|
318
248
|
---
|
|
319
249
|
|
|
320
|
-
##
|
|
250
|
+
## Workflow Example
|
|
321
251
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
252
|
+
```
|
|
253
|
+
User: "Hola"
|
|
254
|
+
AI: [Execute .commands/inicio.md]
|
|
255
|
+
- List projects
|
|
256
|
+
- Ask which project + type of work
|
|
257
|
+
|
|
258
|
+
User: "app-tienda y desarrollo"
|
|
259
|
+
AI: [Load proyectos/app-tienda/CONTRATO.md + context/]
|
|
260
|
+
"✅ Proyecto app-tienda cargado. ¿Qué ticket trabajarás?"
|
|
261
|
+
|
|
262
|
+
User: "SCRUM-23"
|
|
263
|
+
AI: "¿Refinar o planificar directamente?"
|
|
264
|
+
|
|
265
|
+
User: "planificar SCRUM-23"
|
|
266
|
+
AI: [Adopt .agents/backend.md]
|
|
267
|
+
[Read CONTRATO + context + ticket]
|
|
268
|
+
[Generate plan in specs/SCRUM-23_backend.md]
|
|
269
|
+
"📋 Plan creado. Revisar antes de implementar."
|
|
270
|
+
|
|
271
|
+
User: "implementar @SCRUM-23_backend.md"
|
|
272
|
+
AI: [Adopt .agents/backend.md]
|
|
273
|
+
[Execute plan step by step]
|
|
274
|
+
[Tests, commit, push, PR]
|
|
275
|
+
"✅ Implementación completada. PR: [URL]"
|
|
276
|
+
```
|
|
331
277
|
|
|
332
278
|
---
|
|
333
279
|
|
|
334
|
-
##
|
|
335
|
-
|
|
336
|
-
### Asana (OBLIGATORIO)
|
|
280
|
+
## CLI Tools (Optional)
|
|
337
281
|
|
|
338
|
-
|
|
282
|
+
Besides conversational commands, the `openspec` CLI is available:
|
|
339
283
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
284
|
+
```bash
|
|
285
|
+
openspec enrich "user story" # Refine user story
|
|
286
|
+
openspec new --auto "feature" # Create proposal
|
|
287
|
+
openspec verify CHANGE-001 # Verify tests
|
|
288
|
+
openspec status # List proposals
|
|
289
|
+
```
|
|
343
290
|
|
|
344
|
-
|
|
345
|
-
- `scripts/generate-asana-structure.sh` — Genera estructura completa
|
|
346
|
-
- `scripts/create-asana-tasks.sh` — Crea tasks individuales
|
|
347
|
-
- API Asana para leer specs de tickets
|
|
291
|
+
See: `openspec/cli/README.md`
|
|
348
292
|
|
|
349
|
-
|
|
350
|
-
1. Lee CONTRATO.md
|
|
351
|
-
2. Ejecuta `generate-asana-structure.sh`
|
|
352
|
-
3. Crea épicas por feature
|
|
353
|
-
4. Crea user stories por épica
|
|
354
|
-
5. Reporta resumen
|
|
293
|
+
---
|
|
355
294
|
|
|
356
|
-
|
|
295
|
+
## MCP Integrations
|
|
357
296
|
|
|
358
|
-
|
|
297
|
+
### ⚠️ Jira MCP (MANDATORY)
|
|
359
298
|
|
|
360
|
-
**
|
|
299
|
+
**Jira is MANDATORY for SpecLeap workflow.**
|
|
361
300
|
|
|
362
|
-
|
|
363
|
-
-
|
|
364
|
-
-
|
|
365
|
-
-
|
|
366
|
-
-
|
|
367
|
-
-
|
|
301
|
+
MUST use for:
|
|
302
|
+
- `crear-tickets` — Generate all tickets from CONTRATO.md
|
|
303
|
+
- `refinar SCRUM-XX` — Read and enrich ticket
|
|
304
|
+
- `planificar SCRUM-XX` — Read ticket for plan generation
|
|
305
|
+
- `implementar` — Update ticket status during implementation
|
|
306
|
+
- Automatic updates: "To Do" → "In Progress" → "In Review" → "Done"
|
|
368
307
|
|
|
369
|
-
**
|
|
370
|
-
- CodeRabbit approval antes de marcar completo
|
|
371
|
-
- Aplicar feedback si hay correcciones
|
|
308
|
+
**Without Jira MCP, the workflow DOES NOT WORK.**
|
|
372
309
|
|
|
373
|
-
###
|
|
310
|
+
### CodeRabbit (Recommended)
|
|
374
311
|
|
|
375
|
-
**
|
|
312
|
+
**Automatic code review on all PRs.**
|
|
376
313
|
|
|
377
|
-
|
|
378
|
-
- `
|
|
379
|
-
-
|
|
380
|
-
-
|
|
314
|
+
- Install CodeRabbit GitHub App on repos
|
|
315
|
+
- Copy `.coderabbit.yaml` from `proyectos/_template/`
|
|
316
|
+
- Reviews in Spanish
|
|
317
|
+
- Checks: specs compliance, tests >= 90%, security, standards
|
|
318
|
+
- `implementar` waits for CodeRabbit approval before marking complete
|
|
381
319
|
|
|
382
|
-
|
|
320
|
+
### Context7 MCP (Optional)
|
|
383
321
|
|
|
384
|
-
|
|
322
|
+
If configured, use for:
|
|
323
|
+
- Fetching up-to-date library documentation (Laravel, React, etc.)
|
|
324
|
+
- Avoid outdated knowledge
|
|
385
325
|
|
|
386
|
-
|
|
387
|
-
- **Conciso:** Directo al punto, sin relleno
|
|
388
|
-
- **Estructurado:** Usar listas, headings, code blocks
|
|
389
|
-
- **Bilingüe:** Español (default), English si usuario prefiere
|
|
390
|
-
- **Contexto:** Siempre referenciar CONTRATO.md cuando exista
|
|
326
|
+
---
|
|
391
327
|
|
|
392
|
-
|
|
328
|
+
## Critical Rules
|
|
393
329
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
• database/migrations/create_users_table.php — Schema
|
|
401
|
-
• tests/Feature/AuthTest.php — Tests auth
|
|
402
|
-
|
|
403
|
-
🧪 Tests:
|
|
404
|
-
• test_user_can_register: ✅ PASS
|
|
405
|
-
• test_user_can_login: ✅ PASS
|
|
406
|
-
• test_invalid_credentials: ✅ PASS
|
|
407
|
-
• Coverage: 92%
|
|
408
|
-
|
|
409
|
-
📄 Documentación:
|
|
410
|
-
• README.md actualizado (instrucciones login)
|
|
411
|
-
• CONTRATO.md: sin cambios
|
|
412
|
-
|
|
413
|
-
🔗 Próximos pasos:
|
|
414
|
-
1. Review: CodeRabbit revisará automáticamente
|
|
415
|
-
2. Merge: Una vez aprobado, merge a main
|
|
416
|
-
3. Deploy: [según proceso del equipo]
|
|
417
|
-
|
|
418
|
-
🔗 PR: https://github.com/user/repo/pull/123
|
|
419
|
-
```
|
|
330
|
+
1. **NEVER modify CONTRATO.md** after accepted — Only add to ANEXOS.md
|
|
331
|
+
2. **NEVER push to main directly** — Always via PR
|
|
332
|
+
3. **Tests must pass** — >= 90% coverage
|
|
333
|
+
4. **Follow conventions.md** — Each project has specific patterns
|
|
334
|
+
5. **All code in ENGLISH** — Variables, functions, comments, docs
|
|
335
|
+
6. **User-facing text in SPANISH** — Error messages, UI text
|
|
420
336
|
|
|
421
337
|
---
|
|
422
338
|
|
|
423
|
-
##
|
|
339
|
+
## References
|
|
424
340
|
|
|
425
|
-
- **
|
|
426
|
-
- **
|
|
427
|
-
- **
|
|
428
|
-
- **Template:** `proyectos/_template/`
|
|
429
|
-
- **
|
|
341
|
+
- **Commands:** `.commands/*.md`
|
|
342
|
+
- **Agents:** `.agents/*.md`
|
|
343
|
+
- **Standards:** `specs/*.mdc`
|
|
344
|
+
- **Project Template:** `proyectos/_template/`
|
|
345
|
+
- **CLI Reference:** `openspec/cli/COMMAND_REFERENCE.md`
|
|
430
346
|
|
|
431
347
|
---
|
|
432
348
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
4. Preguntar al usuario para clarificación
|
|
439
|
-
|
|
440
|
-
**SIEMPRE priorizar claridad sobre velocidad.**
|
|
349
|
+
**When in doubt:**
|
|
350
|
+
1. Read the relevant `.commands/` file
|
|
351
|
+
2. Adopt the specified `.agents/` role
|
|
352
|
+
3. Follow `specs/` standards
|
|
353
|
+
4. Ask the user for clarification
|
|
441
354
|
|
|
442
355
|
---
|
|
443
356
|
|
|
444
|
-
*
|
|
357
|
+
*Made with ❤️ by the SpecLeap Community*
|
package/install.sh
CHANGED
|
@@ -1,152 +1,14 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# SpecLeap Installer
|
|
3
|
-
#
|
|
3
|
+
# Wrapper that runs the full setup.sh
|
|
4
4
|
|
|
5
5
|
set -e
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
BLUE='\033[0;34m'
|
|
12
|
-
CYAN='\033[0;36m'
|
|
13
|
-
NC='\033[0m'
|
|
14
|
-
|
|
15
|
-
# Detect terminal width
|
|
16
|
-
COLS=$(tput cols 2>/dev/null || echo 80)
|
|
17
|
-
LINE=$(printf '%*s\n' "$COLS" '' | tr ' ' '=')
|
|
18
|
-
|
|
19
|
-
# Clear screen and show banner (only if TTY)
|
|
20
|
-
if [ -t 0 ]; then
|
|
21
|
-
clear
|
|
22
|
-
fi
|
|
23
|
-
echo -e "${CYAN}${LINE}${NC}"
|
|
24
|
-
echo -e "${CYAN}"
|
|
25
|
-
cat << "EOF"
|
|
26
|
-
_____ ____ ___________ __ _________ ____
|
|
27
|
-
/ ___// __ \/ ____/ ____/ / / / ____/ | / __ \
|
|
28
|
-
\__ \/ /_/ / __/ / / / / / __/ / /| | / /_/ /
|
|
29
|
-
___/ / ____/ /___/ /___ / /___/ /___/ ___ |/ ____/
|
|
30
|
-
/____/_/ /_____/\____/ /_____/_____/_/ |_/_/
|
|
31
|
-
|
|
32
|
-
EOF
|
|
33
|
-
echo -e "${NC}${CYAN}${LINE}${NC}"
|
|
34
|
-
echo ""
|
|
35
|
-
echo -e "${GREEN} Spec-Driven Development Framework${NC}"
|
|
36
|
-
echo -e "${YELLOW} v1.0.0${NC}"
|
|
37
|
-
echo ""
|
|
38
|
-
echo -e "${CYAN}${LINE}${NC}"
|
|
39
|
-
echo ""
|
|
40
|
-
|
|
41
|
-
# Language selection
|
|
42
|
-
echo -e "${BLUE}Please select your language / Por favor selecciona tu idioma:${NC}"
|
|
43
|
-
echo ""
|
|
44
|
-
echo " 1) English"
|
|
45
|
-
echo " 2) Español"
|
|
46
|
-
echo ""
|
|
47
|
-
read -p "$(echo -e ${YELLOW}Choose an option [1-2]:${NC} )" lang_choice
|
|
48
|
-
|
|
49
|
-
# Set language
|
|
50
|
-
case $lang_choice in
|
|
51
|
-
1)
|
|
52
|
-
SPECLEAP_LANG="en"
|
|
53
|
-
WELCOME_MSG="Welcome to SpecLeap!"
|
|
54
|
-
SETUP_MSG="Starting installation..."
|
|
55
|
-
CREATING_CONFIG="Creating configuration file..."
|
|
56
|
-
INSTALLING_DEPS="Installing dependencies..."
|
|
57
|
-
SETUP_COMPLETE="✅ Installation complete!"
|
|
58
|
-
NEXT_STEPS="Next steps:"
|
|
59
|
-
STEP_1="1. Read SETUP.md for detailed configuration"
|
|
60
|
-
STEP_2="2. Run: npm install (if using landing/web components)"
|
|
61
|
-
STEP_3="3. Configure your project in proyectos/"
|
|
62
|
-
STEP_4="4. Run: ./scripts/generate-contrato.sh to start"
|
|
63
|
-
ENJOY="Enjoy SpecLeap!"
|
|
64
|
-
;;
|
|
65
|
-
2)
|
|
66
|
-
SPECLEAP_LANG="es"
|
|
67
|
-
WELCOME_MSG="¡Bienvenido a SpecLeap!"
|
|
68
|
-
SETUP_MSG="Iniciando instalación..."
|
|
69
|
-
CREATING_CONFIG="Creando archivo de configuración..."
|
|
70
|
-
INSTALLING_DEPS="Instalando dependencias..."
|
|
71
|
-
SETUP_COMPLETE="✅ Instalación completa!"
|
|
72
|
-
NEXT_STEPS="Próximos pasos:"
|
|
73
|
-
STEP_1="1. Lee SETUP.md para configuración detallada"
|
|
74
|
-
STEP_2="2. Ejecuta: npm install (si usas landing/componentes web)"
|
|
75
|
-
STEP_3="3. Configura tu proyecto en proyectos/"
|
|
76
|
-
STEP_4="4. Ejecuta: ./scripts/generate-contrato.sh para empezar"
|
|
77
|
-
ENJOY="¡Disfruta SpecLeap!"
|
|
78
|
-
;;
|
|
79
|
-
*)
|
|
80
|
-
echo -e "${RED}Invalid option. Defaulting to English.${NC}"
|
|
81
|
-
SPECLEAP_LANG="en"
|
|
82
|
-
WELCOME_MSG="Welcome to SpecLeap!"
|
|
83
|
-
SETUP_MSG="Starting installation..."
|
|
84
|
-
CREATING_CONFIG="Creating configuration file..."
|
|
85
|
-
INSTALLING_DEPS="Installing dependencies..."
|
|
86
|
-
SETUP_COMPLETE="✅ Installation complete!"
|
|
87
|
-
NEXT_STEPS="Next steps:"
|
|
88
|
-
STEP_1="1. Read SETUP.md for detailed configuration"
|
|
89
|
-
STEP_2="2. Run: npm install (if using landing/web components)"
|
|
90
|
-
STEP_3="3. Configure your project in proyectos/"
|
|
91
|
-
STEP_4="4. Run: ./scripts/generate-contrato.sh to start"
|
|
92
|
-
ENJOY="Enjoy SpecLeap!"
|
|
93
|
-
;;
|
|
94
|
-
esac
|
|
95
|
-
|
|
96
|
-
echo ""
|
|
97
|
-
echo -e "${GREEN}${WELCOME_MSG}${NC}"
|
|
98
|
-
echo -e "${YELLOW}${SETUP_MSG}${NC}"
|
|
99
|
-
echo ""
|
|
100
|
-
|
|
101
|
-
# Create config directory
|
|
102
|
-
mkdir -p .specleap
|
|
103
|
-
|
|
104
|
-
# Create proyectos directory (for user projects - NOT tracked in git)
|
|
105
|
-
mkdir -p proyectos
|
|
106
|
-
|
|
107
|
-
# Create config file
|
|
108
|
-
echo -e "${CYAN}${CREATING_CONFIG}${NC}"
|
|
109
|
-
cat > .specleap/config.json <<EOF
|
|
110
|
-
{
|
|
111
|
-
"version": "1.0.0",
|
|
112
|
-
"language": "${SPECLEAP_LANG}",
|
|
113
|
-
"installed_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
|
|
114
|
-
"features": {
|
|
115
|
-
"asana_integration": false,
|
|
116
|
-
"coderabbit_integration": false,
|
|
117
|
-
"agent_skills_installed": false
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
EOF
|
|
121
|
-
|
|
122
|
-
# Create .env file if it doesn't exist
|
|
123
|
-
if [ ! -f .env ]; then
|
|
124
|
-
cat > .env <<EOF
|
|
125
|
-
# SpecLeap Configuration
|
|
126
|
-
SPECLEAP_LANG=${SPECLEAP_LANG}
|
|
127
|
-
|
|
128
|
-
# Asana Integration (optional - for automatic backlog generation)
|
|
129
|
-
ASANA_ACCESS_TOKEN=""
|
|
130
|
-
ASANA_WORKSPACE_ID=""
|
|
131
|
-
EOF
|
|
7
|
+
# Check if setup.sh exists
|
|
8
|
+
if [ ! -f "setup.sh" ]; then
|
|
9
|
+
echo "❌ Error: setup.sh not found"
|
|
10
|
+
exit 1
|
|
132
11
|
fi
|
|
133
12
|
|
|
134
|
-
#
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
echo ""
|
|
138
|
-
echo -e "${GREEN}${SETUP_COMPLETE}${NC}"
|
|
139
|
-
echo ""
|
|
140
|
-
echo -e "${CYAN}${LINE}${NC}"
|
|
141
|
-
echo ""
|
|
142
|
-
echo -e "${YELLOW}${NEXT_STEPS}${NC}"
|
|
143
|
-
echo ""
|
|
144
|
-
echo -e " ${STEP_1}"
|
|
145
|
-
echo -e " ${STEP_2}"
|
|
146
|
-
echo -e " ${STEP_3}"
|
|
147
|
-
echo -e " ${STEP_4}"
|
|
148
|
-
echo ""
|
|
149
|
-
echo -e "${CYAN}${LINE}${NC}"
|
|
150
|
-
echo ""
|
|
151
|
-
echo -e "${GREEN}${ENJOY}${NC}"
|
|
152
|
-
echo ""
|
|
13
|
+
# Run setup.sh (which handles everything: language, tokens, skills, etc.)
|
|
14
|
+
bash setup.sh
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specleap-framework",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"description": "Spec-Driven Development Framework — Transform VSCode, Cursor, JetBrains into spec-first development machines",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spec-driven-development",
|
|
@@ -51,7 +51,6 @@
|
|
|
51
51
|
".github/**",
|
|
52
52
|
".vscode/**",
|
|
53
53
|
"bin/**",
|
|
54
|
-
"proyectos/_template/**",
|
|
55
54
|
"rules/**",
|
|
56
55
|
"scripts/**",
|
|
57
56
|
"setup.sh",
|
package/setup.sh
CHANGED
|
@@ -357,12 +357,8 @@ else
|
|
|
357
357
|
echo ""
|
|
358
358
|
fi
|
|
359
359
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
echo -e "${GREEN}✅ .coderabbit.yaml copiado${NC}"
|
|
363
|
-
else
|
|
364
|
-
echo -e "${YELLOW}⚠️ Template no encontrado, se omite${NC}"
|
|
365
|
-
fi
|
|
360
|
+
# .coderabbit.yaml ya está en la raíz del proyecto
|
|
361
|
+
echo -e "${GREEN}✅ .coderabbit.yaml listo${NC}"
|
|
366
362
|
|
|
367
363
|
echo ""
|
|
368
364
|
sleep 1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Template project structure
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# ANEXOS — [Nombre del Proyecto]
|
|
2
|
-
|
|
3
|
-
> **Cambios y mejoras propuestas fuera del CONTRATO original**
|
|
4
|
-
|
|
5
|
-
Este archivo registra propuestas de cambio que están fuera del alcance del CONTRATO.md inmutable.
|
|
6
|
-
|
|
7
|
-
## Propuestas Pendientes
|
|
8
|
-
|
|
9
|
-
(Vacío)
|
|
10
|
-
|
|
11
|
-
## Propuestas Aprobadas
|
|
12
|
-
|
|
13
|
-
(Vacío)
|
|
14
|
-
|
|
15
|
-
## Propuestas Rechazadas
|
|
16
|
-
|
|
17
|
-
(Vacío)
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
**Nota:** Para proponer cambios usa el comando `refinar` o `openspec new`.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# CONTRATO — [Nombre del Proyecto]
|
|
2
|
-
|
|
3
|
-
> **Estado:** PLANTILLA (ejecutar comando `inicio` para generar)
|
|
4
|
-
|
|
5
|
-
Este archivo será generado automáticamente después de responder el cuestionario de 56 preguntas.
|
|
6
|
-
|
|
7
|
-
## Cómo Empezar
|
|
8
|
-
|
|
9
|
-
1. Abre tu agente IA (Claude, Cursor, Continue)
|
|
10
|
-
2. Escribe: **"Hola"**
|
|
11
|
-
3. Selecciona: **"Proyecto nuevo"**
|
|
12
|
-
4. Responde las preguntas interactivas
|
|
13
|
-
|
|
14
|
-
El agente generará el CONTRATO completo con:
|
|
15
|
-
- Objetivo del proyecto
|
|
16
|
-
- Alcance detallado
|
|
17
|
-
- Casos de uso
|
|
18
|
-
- Módulos y features
|
|
19
|
-
- Stack tecnológico
|
|
20
|
-
- Criterios de aceptación
|
|
21
|
-
- Restricciones y dependencias
|
|
22
|
-
- Estimación de esfuerzo
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
**SpecLeap** — Framework Spec-Driven Development
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# Context files will be generated here
|