zugzbot-sdd 1.5.30 → 1.5.31
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.
|
@@ -186,14 +186,36 @@ export default tool({
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
// 6. Archivar la carpeta físicamente (ANTES del commit para que quede registrado de forma atómica)
|
|
189
|
-
|
|
189
|
+
// Calcular el siguiente prefijo de secuencia cronológica (ej: 0001_2026-05-30_143015)
|
|
190
|
+
let seqPrefix = "0001";
|
|
191
|
+
const archiveRoot = path.join(projectRoot, ".openspec/changes/archive");
|
|
192
|
+
if (fs.existsSync(archiveRoot)) {
|
|
193
|
+
try {
|
|
194
|
+
const dirs = fs.readdirSync(archiveRoot).filter(f => fs.statSync(path.join(archiveRoot, f)).isDirectory());
|
|
195
|
+
let maxSeq = 0;
|
|
196
|
+
dirs.forEach(d => {
|
|
197
|
+
const match = d.match(/^(\d{4})_/);
|
|
198
|
+
if (match) {
|
|
199
|
+
const seq = parseInt(match[1], 10);
|
|
200
|
+
if (seq > maxSeq)
|
|
201
|
+
maxSeq = seq;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
seqPrefix = String(maxSeq + 1).padStart(4, "0");
|
|
205
|
+
}
|
|
206
|
+
catch (e) { }
|
|
207
|
+
}
|
|
208
|
+
const now = new Date();
|
|
209
|
+
const timeStr = now.toTimeString().split(" ")[0].replace(/:/g, ""); // e.g. "143015"
|
|
210
|
+
const archiveFolderName = `${seqPrefix}_${dateStr}_${timeStr}-${args.changeName}`;
|
|
211
|
+
const archiveDir = path.join(archiveRoot, archiveFolderName);
|
|
190
212
|
try {
|
|
191
213
|
if (fs.existsSync(archiveDir)) {
|
|
192
214
|
fs.rmSync(archiveDir, { recursive: true, force: true });
|
|
193
215
|
}
|
|
194
216
|
fs.mkdirSync(path.dirname(archiveDir), { recursive: true });
|
|
195
217
|
moveRecursive(changeDir, archiveDir);
|
|
196
|
-
report.push(`✓ Carpeta archivada en: .openspec/changes/archive/${
|
|
218
|
+
report.push(`✓ Carpeta archivada en: .openspec/changes/archive/${archiveFolderName}/`);
|
|
197
219
|
}
|
|
198
220
|
catch (e) {
|
|
199
221
|
return `[SDD Archive Error] Error crítico archivando carpetas: ${e.message}`;
|
package/AGENTS.md
CHANGED
|
@@ -15,6 +15,7 @@ Queda terminantemente prohibido para cualquier agente del swarm (incluyendo al O
|
|
|
15
15
|
- **No Trabajo en Caliente**: Está prohibido proponer código fuente, diseños HTML/CSS o parches técnicos directamente al usuario en el chat principal sin antes haber completado la **Fase 1 (Planificación e Interrogación)** y obtenido su visto bueno explícito.
|
|
16
16
|
- **Rol del Orquestador**: `@zugzbot` debe educar siempre al usuario sobre el flujo de SDD cuando se solicite una nueva característica o cambio. Debe generar un **Roadmap de las 6 Fases de SDD de una línea por fase** y delegar la Fase 1 de inmediato.
|
|
17
17
|
- **Flujo de Trabajo Estricto**: Todo cambio lógico debe iniciarse a través de la delegación estructurada hacia `@sdd-planner`.
|
|
18
|
+
- **Slug Semántico del Cambio (kebab-case) [CRÍTICO]**: Al iniciar un ciclo (transición a Fase 1), el orquestador `@zugzbot` o `@sdd-planner` debe generar obligatoriamente un nombre de cambio (`changeName` o `change_name`) en kebab-case que describa de manera precisa el requerimiento del usuario (ej: `crear-modulo-auth` o `setup-clasp-mocker`). Queda terminantemente prohibido utilizar el valor genérico 'nuevo-cambio' o nombres sin relación semántica.
|
|
18
19
|
|
|
19
20
|
---
|
|
20
21
|
|
package/package.json
CHANGED
|
@@ -185,14 +185,36 @@ export default tool({
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
// 6. Archivar la carpeta físicamente (ANTES del commit para que quede registrado de forma atómica)
|
|
188
|
-
|
|
188
|
+
// Calcular el siguiente prefijo de secuencia cronológica (ej: 0001_2026-05-30_143015)
|
|
189
|
+
let seqPrefix = "0001";
|
|
190
|
+
const archiveRoot = path.join(projectRoot, ".openspec/changes/archive");
|
|
191
|
+
if (fs.existsSync(archiveRoot)) {
|
|
192
|
+
try {
|
|
193
|
+
const dirs = fs.readdirSync(archiveRoot).filter(f => fs.statSync(path.join(archiveRoot, f)).isDirectory());
|
|
194
|
+
let maxSeq = 0;
|
|
195
|
+
dirs.forEach(d => {
|
|
196
|
+
const match = d.match(/^(\d{4})_/);
|
|
197
|
+
if (match) {
|
|
198
|
+
const seq = parseInt(match[1], 10);
|
|
199
|
+
if (seq > maxSeq) maxSeq = seq;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
seqPrefix = String(maxSeq + 1).padStart(4, "0");
|
|
203
|
+
} catch (e) {}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const now = new Date();
|
|
207
|
+
const timeStr = now.toTimeString().split(" ")[0].replace(/:/g, ""); // e.g. "143015"
|
|
208
|
+
const archiveFolderName = `${seqPrefix}_${dateStr}_${timeStr}-${args.changeName}`;
|
|
209
|
+
const archiveDir = path.join(archiveRoot, archiveFolderName);
|
|
210
|
+
|
|
189
211
|
try {
|
|
190
212
|
if (fs.existsSync(archiveDir)) {
|
|
191
213
|
fs.rmSync(archiveDir, { recursive: true, force: true })
|
|
192
214
|
}
|
|
193
215
|
fs.mkdirSync(path.dirname(archiveDir), { recursive: true })
|
|
194
216
|
moveRecursive(changeDir, archiveDir)
|
|
195
|
-
report.push(`✓ Carpeta archivada en: .openspec/changes/archive/${
|
|
217
|
+
report.push(`✓ Carpeta archivada en: .openspec/changes/archive/${archiveFolderName}/`)
|
|
196
218
|
} catch (e: any) {
|
|
197
219
|
return `[SDD Archive Error] Error crítico archivando carpetas: ${e.message}`
|
|
198
220
|
}
|