El plugin soporta varias lineas de trabajo. Todas comparten una idea: el estado persistido vive en OpenSpec y el orquestador decide la siguiente fase segura.
El siguiente diagrama detalla la orquestación completa de todos los flujos de trabajo admitidos, los entregables de cada fase, las guardas y la interacción del orquestador con agentes especializados (como sdd-clarify):
Antes de la primera ejecucion, el orquestador pregunta el modo:
| Modo | Comportamiento |
|---|---|
| Interactive (default) | Muestra resumen tras cada fase y pregunta si continuar, detener o ajustar. |
| Automatic | Ejecuta todas las fases seguidas sin pausar. |
Estrategia de entrega (se elige una vez y se cachea):
| Estrategia | Comportamiento |
|---|---|
ask-on-risk (default) |
Pregunta solo si hay riesgo de PR grande. |
auto-chain |
Divide automaticamente en PRs encadenadas. |
single-pr |
Intenta una sola PR, exige excepcion si supera presupuesto. |
exception-ok |
Permite PR grande con excepcion explicita. |
Usa esta linea cuando el repo ya tiene codigo, tests o arquitectura detectable.
/sdd-init
/sdd-new add-user-session-timeout
/sdd-continue add-user-session-timeout
/sdd-apply add-user-session-timeout
/sdd-verify add-user-session-timeout
/sdd-archive add-user-session-timeout
Que pasa:
sdd-initprepara contexto y testing. Solo se autoejecuta si el usuario pidio trabajo SDD persistido de forma explicita; para preguntas vagas debe pedir permiso antes de crearopenspec/.sdd-newnormalmente produce exploracion y propuesta.sdd-continueavanza por specs, design y tasks segun dependencias.sdd-applyimplementa una tanda de tareas.sdd-verifycomprueba cumplimiento real.sdd-archiveactualiza specs principales y cierra.
Usa esta linea cuando no hay producto, stack o arquitectura definidos.
/sdd-init
/sdd-foundation
/sdd-new scaffold-project
/sdd-ff first-capability
El guard de foundation se activa si openspec/config.yaml indica repo vacio, arquitectura no detectada, stacks vacios o el usuario pide construir desde cero.
sdd-foundation pregunta una sola cosa bloqueante cada vez. Esto es intencionado. Cuando no sabemos producto, usuarios, stack o testing, inventar una app completa es velocidad falsa. Primero hay que fijar cimientos.
Usa esta linea cuando el cambio esta claro y quieres llegar rapido hasta tareas.
/sdd-ff add-export-csv
Equivale a avanzar por:
proposal -> specs -> design -> tasks
No salta implementacion ni verificacion. Solo compacta la planificacion. Si aparece un bloqueo, el orquestador debe parar.
Usa esta linea cuando el cambio es pequeno y no necesita specs/diseno completos.
/sdd-lite tweak-doc-linking
El flujo reducido es:
proposal-lite -> tasks -> apply -> verify
Reglas:
proposal-lite.mdes valido solo en lite mode.- Si durante planning o apply el cambio deja de ser
trivialosmall, se bloquea y se escala al workflow estandar. - En lite mode,
proposal-lite.mdhace de contrato de comportamiento paratasks,applyyverify.
Usa esta linea cuando ya hay artefactos en openspec/changes/{change-name}/ y no recuerdas donde quedo el trabajo.
/sdd-continue add-export-csv
El orquestador recupera estado desde:
openspec/changes/{change-name}/state.yaml
openspec/changes/{change-name}/proposal.md o proposal-lite.md
openspec/changes/{change-name}/specs/**
openspec/changes/{change-name}/design.md
openspec/changes/{change-name}/tasks.md
openspec/changes/{change-name}/apply-progress.md
Esta es una de las razones fuertes para usar OpenSpec: la conversacion puede perder contexto, pero el repo no. Y eso depende de que cada fase actualice state.yaml; sin ese merge, la recuperacion queda coja.
Usa esta linea cuando el cambio tiene varias fases o debe dividirse por review.
/sdd-apply add-export-csv
/sdd-apply add-export-csv
/sdd-verify add-export-csv
sdd-apply debe leer apply-progress.md si existe y fusionar progreso previo. El protocolo actual es append-first: conserva historial y agrega la nueva tanda en vez de regenerar el archivo entero.
tasks.md usa estados de ciclo de vida, no solo binario:
[ ]no empezado[~]implementado pero con verificacion local pendiente[x]implementado y verificado localmente
Si la spec esta mal, se contradice o no se puede verificar, sdd-apply debe parar con spec-change-required; no corrige specs en caliente. Si el trabajo real se dispara mas de un 50% sobre el forecast o va a romper el presupuesto antes del siguiente corte sano, persiste el parcial y devuelve workload-escalation.
Si tasks.md marca riesgo alto de review, el orquestador debe resolver antes:
| Estrategia | Uso |
|---|---|
ask-on-risk |
Pregunta al usuario si dividir o aceptar excepcion. |
auto-chain |
Aplica solo el siguiente slice autonomo. |
single-pr |
Requiere size:exception si supera presupuesto. |
exception-ok |
Continua con excepcion aceptada. |
Automatico no significa "sin guardas". Si hay riesgo de review, el guard manda.
Cuando el forecast supera el presupuesto de 400 lineas, hay dos estrategias sanas:
| Estrategia | Cuando usarla |
|---|---|
stacked-to-main |
Slices independientes que pueden ir entrando en main en orden. |
feature-branch-chain |
Trabajo que necesita integrarse antes de tocar main. |
Tambien existe size:exception, pero debe ser una decision consciente. Para generated code, migraciones o cambios indivisibles puede tener sentido. Para "me da pereza partirlo", no. Ahi hay que subir el nivel.
La linea de cierre es:
/sdd-verify add-export-csv
/sdd-archive add-export-csv
sdd-verify puede terminar en:
| Veredicto | Significado |
|---|---|
PASS |
Specs, diseno, tareas y tests estan cubiertos. |
PASS WITH WARNINGS |
Hay riesgos no criticos que deben conocerse. |
FAIL |
Hay CRITICAL, tests fallan o faltan pruebas obligatorias. |
sdd-verify ya no colapsa toda la evidencia a "tested/untested". Clasifica por niveles runtime-test, static-proof, inspection-proof, manual-proof y no-proof, y devuelve pistas de origen (code-bug, tasks-gap, design-gap, spec-gap) para rutear el fix.
sdd-archive bloquea FAIL por completo. Con PASS WITH WARNINGS, solo puede seguir si esos riesgos quedan aceptados explicitamente o convertidos en follow-up. Al archivar, las delta specs pasan a openspec/specs/ solo en esa fase y el cambio se mueve a openspec/changes/archive/.
Usa esta linea para aprender la metodologia sobre un caso real:
/sdd-onboard
El agente busca una mejora pequena, la propone y guia el ciclo completo. Si el repo esta vacio, debe mandar a sdd-foundation.
Para /sdd-new, /sdd-ff y /sdd-continue, el orquestador puede trabajar en dos modos:
| Modo | Comportamiento |
|---|---|
interactive |
Resume cada fase y pide confirmacion antes de continuar. |
auto |
Ejecuta fases encadenadas y muestra resultado final, salvo que un guard bloquee. |
El modo interactivo es mas lento, pero mejor para aprender y tomar decisiones. El automatico sirve cuando el equipo ya confia en el workflow y el cambio esta acotado.
Cuando una sesión se compacta o se cierra, la recuperación se hace en este orden:
openspec/changes/{change-name}/state.yaml- artefactos de fase existentes;
.ospec/session/session-summary.md, si existe;- cache de skills, si fingerprint sigue válido;
- conversación solo como contexto auxiliar no canónico.
Usa esta linea cuando el repo tiene codigo existente pero openspec/specs/ esta vacio y necesitas establecer una linea base de comportamiento actual.
/sdd-init
# Advisory aparece → consentir o saltar
/sdd-baseline # batch 0: mapa de dominios
/sdd-baseline # batch 1: primer dominio
/sdd-baseline # batch 2: segundo dominio
# ... un batch por dominio hasta que devuelva success
El primer /sdd-baseline detecta que no existe openspec/specs/_baseline/manifest.md y:
- Escanea el repo y agrupa archivos en clusters de capacidad (NO listados de directorios).
- Devuelve
blockedconquestion_gateque incluye el mapa de dominios propuesto. - El orquestador presenta el mapa al usuario via
vscode/askQuestions. - Con el mapa aprobado, el ejecutor escribe
openspec/specs/_baseline/manifest.md(seccion Domain Map) eopenspec/specs/_baseline/index.md, actualizaopenspec/config.yamlcondomains_pendingy devuelvepartial.
Cada batch posterior:
- Lee el manifest para identificar que dominios ya tienen entrada
done. - Toma el primer dominio pendiente de
domains_pendingque no tengaspec.mdexistente (skip rule). - Explora las fuentes del dominio y escribe
openspec/specs/{domain}/spec.md. - Captura
git rev-parse --short HEADcomo hash de commit. - APPENDA una fila en la tabla Entries de
openspec/specs/_baseline/manifest.md(domain | done | N | hash | UTC). - APPENDA una linea en
openspec/specs/_baseline/index.md. - Mueve el dominio de
domains_pendingadomains_doneenopenspec/config.yaml. - Devuelve
partialsi quedan dominios pendientes, osuccesssi todos estan listos.
Si una sesion muere a mitad de un batch, el manifest no tendra entrada para ese dominio (las entradas se escriben SOLO en completion). En el siguiente /sdd-baseline:
- Manifest sin entrada
donepara ese dominio → se trata como pendiente. - El executor re-especifica el dominio desde cero, sobreescribiendo el
spec.mdhuerfano si existiera. - El historial del manifest nunca se edita; solo se appendean filas nuevas.
Esta propiedad se garantiza escribiendo entradas solo al completar el dominio, nunca al empezar.
Cuando sdd-status detecta que archivos de un dominio cambiaron desde el hash registrado en el manifest, escribe stale_domains y last_checked en openspec/config.yaml. El hook session-start.js lee ese cache y emite un hint sin ejecutar git.
Para refrescar:
/sdd-baseline
El ejecutor re-especifica solo los dominios en stale_domains o con status: pending, appendeando filas refreshed con el nuevo hash. Los dominios done y no-stale no se tocan.
sdd-baseline NUNCA escribe donde ya existe openspec/specs/{domain}/spec.md, sin importar quien lo creo. Los dominios con spec preexistente se registran como skipped en el manifest.
sdd-archive owns los specs que evolucionan. Una vez que un cambio se archiva y su spec se promueve a openspec/specs/, ese dominio queda fuera del alcance de baseline para siempre.
Cuando baseline.status es pending o partial, el orquestador muestra el Baseline Advisory antes del primer /sdd-new o /sdd-explore de la sesion. El advisory cubre: que es, ganancias, costos, y la advertencia de skip-rule loss. Es informativo; no bloquea otros comandos. Ver la seccion Baseline Advisory en agents/sdd-orchestrator.agent.md.
