@tacuchi/agent-workflow-cli 12.7.1 → 12.9.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/dist/application/self/mcp-config.d.ts +1 -0
- package/dist/application/self/mcp-config.d.ts.map +1 -1
- package/dist/application/self/mcp-config.js +1 -1
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/session-resume-service.d.ts +8 -0
- package/dist/application/session-resume-service.d.ts.map +1 -1
- package/dist/application/session-resume-service.js +11 -2
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/templates/session.d.ts +10 -6
- package/dist/application/templates/session.d.ts.map +1 -1
- package/dist/application/templates/session.js +19 -17
- package/dist/application/templates/session.js.map +1 -1
- package/dist/application/workspace-init-service.d.ts.map +1 -1
- package/dist/application/workspace-init-service.js +62 -35
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/session-resume.js +6 -2
- package/dist/cli/commands/session-resume.js.map +1 -1
- package/dist/cli/commands/workspace-init.js +3 -3
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/parsers/fuentes.d.ts.map +1 -1
- package/dist/cli/parsers/fuentes.js +48 -35
- package/dist/cli/parsers/fuentes.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +3 -3
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.d.ts +21 -0
- package/dist/cli/tui/tabs/mcp-tab-helpers.d.ts.map +1 -0
- package/dist/cli/tui/tabs/mcp-tab-helpers.js +43 -0
- package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -0
- package/dist/cli/tui/tabs/mcp-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +152 -33
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +22 -6
- package/skills/w/artifacts/README.md +3 -1
- package/skills/w/artifacts/artifacts-core/SESSION.md +7 -3
- package/skills/w/loops/README.md +6 -5
- package/skills/w/loops/plan-exec-loop/SKILL.md +2 -2
- package/skills/w/loops/plan-new-loop/SKILL.md +2 -2
- package/skills/w/loops/quick-loop/SKILL.md +31 -18
- package/skills/w/loops/spec-refine-loop/SKILL.md +39 -2
|
@@ -31,6 +31,6 @@ export function WorkflowTab({ isActive }) {
|
|
|
31
31
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(PageHead, { title: "Workflow", count: {
|
|
32
32
|
label: `${w.slashCommands.length} commands · ${w.commandFamilies.length} families · ${w.hooks.length} hooks`,
|
|
33
33
|
tone: "accent",
|
|
34
|
-
}, action: _jsx(Text, { color: colors.mute, children: "stages + loops + artifacts harness" }) }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingRight: 2, children: [_jsx(SectionHead, { label: "Flows", rightAction: "spec \u00B7 plan \u00B7 quick" }), _jsx(Box, { marginTop: 0, flexDirection: "column", children: w.phases.map((p) => (_jsx(PhaseCard, { phase: p }, p.id))) })] }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingLeft: 1, children: [_jsx(SectionHead, { label: "Command families", count: w.commandFamilies.length, rightAction: "\u21B5 to expand" }), _jsxs(Box, { marginTop: 0, flexDirection: "column", children: [w.commandFamilies.map((f, i) => (_jsx(FamilyCard, { family: f, active: i === cursor, expanded: expandedId === f.id }, f.id))), w.commandFamilies.length > 8 ? (_jsxs(Text, { color: colors.faint, children: ["\u2026+", w.commandFamilies.length - 8, " more families"] })) : null] }), _jsx(SectionHead, { label: "Slash \u00B7 Hooks", rightAction: "claude \u00B7 codex", marginTop: 1 }), _jsxs(Box, { marginLeft: 2, marginTop: 0, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: colors.bright, bold: true, children: w.slashCommands.length }), _jsx(Text, { color: colors.dim, children: " slash commands \u00B7 " }), _jsx(Text, { color: colors.accent, children: "/w:<name>" })] }), _jsxs(Box, { flexWrap: "wrap", children: [_jsx(Text, { color: colors.bright, bold: true, children: w.hooks.length }), _jsx(Text, { color: colors.dim, children: " hooks \u00B7 " }), w.hooks.map((h, i) => (_jsxs(Box, { children: [i > 0 ? _jsx(Text, { color: colors.dim, children: ", " }) : null, _jsx(Text, { color: colors.ok, children: h.name })] }, h.name)))] })] })] })] })] }));
|
|
34
|
+
}, action: _jsx(Text, { color: colors.mute, children: "stages + loops + artifacts harness" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.dim, wrap: "wrap", children: w.overview }) }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingRight: 2, children: [_jsx(SectionHead, { label: "Flows", rightAction: "spec \u00B7 plan \u00B7 quick" }), _jsx(Box, { marginTop: 0, flexDirection: "column", children: w.phases.map((p) => (_jsx(PhaseCard, { phase: p }, p.id))) })] }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingLeft: 1, children: [_jsx(SectionHead, { label: "Command families", count: w.commandFamilies.length, rightAction: "\u21B5 to expand" }), _jsxs(Box, { marginTop: 0, flexDirection: "column", children: [w.commandFamilies.map((f, i) => (_jsx(FamilyCard, { family: f, active: i === cursor, expanded: expandedId === f.id }, f.id))), w.commandFamilies.length > 8 ? (_jsxs(Text, { color: colors.faint, children: ["\u2026+", w.commandFamilies.length - 8, " more families"] })) : null] }), _jsx(SectionHead, { label: "Slash \u00B7 Hooks", rightAction: "claude \u00B7 codex", marginTop: 1 }), _jsxs(Box, { marginLeft: 2, marginTop: 0, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: colors.bright, bold: true, children: w.slashCommands.length }), _jsx(Text, { color: colors.dim, children: " slash commands \u00B7 " }), _jsx(Text, { color: colors.accent, children: "/w:<name>" })] }), _jsxs(Box, { flexWrap: "wrap", children: [_jsx(Text, { color: colors.bright, bold: true, children: w.hooks.length }), _jsx(Text, { color: colors.dim, children: " hooks \u00B7 " }), w.hooks.map((h, i) => (_jsxs(Box, { children: [i > 0 ? _jsx(Text, { color: colors.dim, children: ", " }) : null, _jsx(Text, { color: colors.ok, children: h.name })] }, h.name)))] })] })] })] })] }));
|
|
35
35
|
}
|
|
36
36
|
//# sourceMappingURL=workflow-tab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tab.js","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/workflow-tab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,MAAM,CAAC,GAAG,gBAAgB,CAAC;IAE3B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;IAE9F,QAAQ,CACN,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACd,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG;gBAAE,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,QAAQ,IACP,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE;oBACL,KAAK,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,eAAe,CAAC,CAAC,eAAe,CAAC,MAAM,eAAe,CAAC,CAAC,KAAK,CAAC,MAAM,QAAQ;oBAC5G,IAAI,EAAE,QAAQ;iBACf,EACD,MAAM,EAAE,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mDAA2C,GAC3E,
|
|
1
|
+
{"version":3,"file":"workflow-tab.js","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/workflow-tab.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.9.0",
|
|
4
4
|
"description": "Agnostic runtime CLI for AI development workflows — a stages + loops + artifacts harness. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/skills/w/SKILL.md
CHANGED
|
@@ -65,6 +65,19 @@ USUARIO invoca
|
|
|
65
65
|
|
|
66
66
|
Cadena típica: prompt → `spec-new` genera `docs/specs/NNN-spec-<slug>.md` → `spec-refine` corre el loop y refina **ese mismo spec in place** → `plan-new` → `docs/plans/PPP-plan-<slug>.md` → `plan-exec` ejecuta y actualiza el plan (living doc) + artefactos en sesiones. La promoción del resto a `docs/` es **siempre** un paso aparte vía `export-*`.
|
|
67
67
|
|
|
68
|
+
### Contexto operativo — dónde aterriza cada cosa
|
|
69
|
+
|
|
70
|
+
Antes de cualquier loop, la IA resuelve su **contexto operativo** en **cada prompt** con dos detecciones: **¿workspace?** (existe `.<ns>/sessions/`) + **¿sesión a continuar?** (una activa, o una reciente que este prompt continúa). Eso decide el comportamiento y **dónde aterrizan los artefactos** (SQL, scripts, decisiones, …):
|
|
71
|
+
|
|
72
|
+
| ¿Workspace? | Trigger | → Comportamiento + ruteo |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| **Sí** | **comando de flujo** (`quick`·`spec-*`·`plan-*`) | crea sesión **nueva**, arranca el loop → artefactos a **esa** sesión (`SCRIPTS.sql`, …) |
|
|
75
|
+
| **Sí** | **prompt sin comando** (relacionado) | **continúa/reabre la sesión más reciente** → los scripts editan **su** `SCRIPTS.sql` (no crea otra) |
|
|
76
|
+
| **Sí** | **prompt sin comando** (no-relacionado / sin sesión) | **sin flujo**: trabajo directo → escribe en `docs/` por convención + numeración (`aw next-number`) |
|
|
77
|
+
| **No** | cualquiera | **vanilla** — sin workspace ni flujo, la IA es libre (nativo) |
|
|
78
|
+
|
|
79
|
+
**Regla de continuidad:** el **comando** señala "nueva línea de trabajo" (sesión nueva); un **prompt sin comando** es "sigo en la misma" → por default continúa/reabre la más reciente (la *última iniciada*); solo si es claramente no-relacionado ofrece elegir (`continuar NNN` | `trabajo nuevo`) o cae a "sin flujo". Convergencia cierra la sesión; un prompt relacionado posterior la **reabre** (el resume quita `.closed`). Es la cara **inter-turno** del *objetivo persistente* (mismo `CHECKPOINT`+resume, aplicado al próximo prompt) — **doctrina agnóstica**, no un hook del host. Aplica a **todo artefacto** (`SCRIPTS.sql` es el ejemplo trabajado); ver `loops/quick-loop/SKILL.md` para el caso QUICK.
|
|
80
|
+
|
|
68
81
|
### The commands (`/w:` namespace)
|
|
69
82
|
|
|
70
83
|
- `/w:workspace-init` — inicializa el workspace.
|
|
@@ -86,16 +99,17 @@ Skills **invocables independientes de flujo**: se disparan con `/w:` igual que u
|
|
|
86
99
|
|
|
87
100
|
Un loop es una skill que enseña a la IA **cómo iterar** hasta un entregable. Propiedades comunes (el chasis, en `spec-refine-loop`, lo heredan los demás):
|
|
88
101
|
|
|
89
|
-
1. **
|
|
90
|
-
2. **
|
|
91
|
-
3. **
|
|
102
|
+
1. **Objetivo persistente + verification-first** — el loop persigue su `SESSION.Objective` y solo finaliza cuando sus `SESSION.Success criteria` (sembrados al inicio, *verification-first* / TDD generalizado: tests para código, rúbrica falsable para análisis/diseño) están **en verde**. Modelado en el `/goal` de Claude Code pero **agnóstico** (no depende de ningún host) y con registro durable.
|
|
103
|
+
2. **Gap-driven convergente** — el *cómo*: cada ciclo detecta huecos → resuelve (pregunta al humano o investiga) → integra → repite hasta converger.
|
|
104
|
+
3. **Una sola session por run + research inline** — el loop crea **una** session (la dueña del run) y maneja sus artefactos en `.workflow/sessions/`. La **investigación es inline**: una actividad dentro de esa misma session (escribe `ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only si consulta BD), no una session aparte. El usuario nunca crea sessions. Los artefactos son el **registro vivo** del run, **ciclo artifact-first** (sembrar `Pending`/`Next` antes de ejecutar, llevar a `Completed` después); la base guía es el spec/plan.
|
|
105
|
+
4. **Structured-choice con dos tipos de pregunta** — *structured-choice* (capacidad del arnés — ver `harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada → **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
|
|
92
106
|
- **pregunta(s) de contenido** — la pregunta real del momento.
|
|
93
107
|
- **control `flow`** — control de ciclo de vida, **siempre presente**: `Compactar` / `Cerrar`. Responder la pregunta de contenido sin tocar `flow` = seguir iterando.
|
|
94
|
-
|
|
108
|
+
5. **Escribe solo en su carpeta `docs/`** — y nunca exporta el resto (eso es de `export-*`).
|
|
95
109
|
|
|
96
110
|
`flow → Compactar` = checkpoint + la **compactación** del arnés (en Claude Code: `/compact`; ver `harness/SKILL.md`) y reanuda. `flow → Cerrar` = persiste `CHECKPOINT` (siempre) + `BACKLOG` (solo si difiere), cierra la session, termina.
|
|
97
111
|
|
|
98
|
-
Cada loop tiene un **convergence gate** read-only antes de ofrecer `Guardar`/`done
|
|
112
|
+
Cada loop tiene un **convergence gate** read-only antes de ofrecer `Guardar`/`done`, que es operacionalmente **"todos los `SESSION.Success criteria` en verde"** (*verification-first*): chequea invariantes propios del entregable y lo que falle vuelve como gap (en `spec-refine-loop` es el *analyze gate*; en `plan-new-loop`, la coherencia del plan; en `plan-exec-loop`, la validación final; en `quick-loop`, una validación puntual proporcional). El detalle vive en cada loop.
|
|
99
113
|
|
|
100
114
|
`spec-new` no tiene loop (single-pass): **5 comandos / 4 loops**.
|
|
101
115
|
|
|
@@ -163,7 +177,9 @@ Las únicas `must` para el ciclo de un loop son **structured-choice** y **compac
|
|
|
163
177
|
3. **El spec y el plan son documentos** (`docs/`), no artefactos de sesión.
|
|
164
178
|
4. **BD solo-scripts** — la IA nunca ejecuta DML/DDL; las migraciones quedan en `SCRIPTS.sql` y las aplica el usuario. Solo lecturas read-only vía MCP.
|
|
165
179
|
5. **Git seguro** — rama esperada verificada antes de editar; commits propuestos por fuente; nunca `push`/`--amend`/`--no-verify`.
|
|
166
|
-
6. **Chasis de loops** — gap-driven convergente · una sola session por run (research inline) · **structured-choice** con ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre · compactación/resume ·
|
|
180
|
+
6. **Chasis de loops** — **objetivo persistente + verification-first** (persigue `SESSION.Objective` hasta que sus `SESSION.Success criteria` —sembrados al inicio, TDD generalizado— están en verde) · gap-driven convergente · una sola session por run (research inline) · **structured-choice** con ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre · compactación/resume · artefactos como log vivo **artifact-first** (sembrar `Pending`/`Next` antes, `Completed` después; `CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
181
|
+
|
|
182
|
+
> **Alcance de #1/#2:** gobiernan el plano **sesión → `docs/`** (solo `export-*` lo cruza). El *authoring directo sin flujo* (ver § *Contexto operativo*) es **otro plano**: sin sesión activa, `docs/` es la única superficie gestionada → la IA escribe ahí por convención + numeración. No es auto-export (no hay sesión de la cual graduar).
|
|
167
183
|
|
|
168
184
|
## Output
|
|
169
185
|
|
|
@@ -19,6 +19,8 @@ Central distinction of the model:
|
|
|
19
19
|
|
|
20
20
|
> An artifact may be **promoted** to a `docs/` document (e.g. `SCRIPTS.sql` → `docs/scripts/`) — but **only via dedicated `export-*` skills**, **never** automatically by the loops. The spec and the plan **are not** artifacts: they are documents.
|
|
21
21
|
|
|
22
|
+
> **Routing by operating context.** *Where* an artifact is written is decided by the operating context (see [`../SKILL.md`](../SKILL.md) § *Contexto operativo*): **inside a flow** → the **active/continued** session — a prompt with no command edits the `SCRIPTS.sql` (or `DECISION`, …) of the **most recent** session, it does not spawn a new one; **in a workspace but with no flow** → directly into `docs/` by convention + numbering (`aw next-number`), since there is no session to hold it (and it is **not** auto-export); **no workspace** → the AI is free (vanilla). Session→`docs/` promotion is still **only** via `export-*`.
|
|
23
|
+
|
|
22
24
|
---
|
|
23
25
|
|
|
24
26
|
## Sessions & their artifacts
|
|
@@ -39,7 +41,7 @@ Sessions are created by the loops as needed — **one session per run**. The ses
|
|
|
39
41
|
|
|
40
42
|
## Common artifacts (any session)
|
|
41
43
|
|
|
42
|
-
`SESSION` (descriptor: Objective / Origin / Type
|
|
44
|
+
`SESSION` (descriptor: Objective / Origin / Type / **Success criteria** = verification-first done-condition, formerly research-only) · `CHECKPOINT` (resume) · `SCRIPTS.sql` (read-only queries **executable** + DDL/DML migrations **deliverable**, not executed) · `TASKS` · `BACKLOG` (only when there's something to defer).
|
|
43
45
|
|
|
44
46
|
---
|
|
45
47
|
|
|
@@ -21,6 +21,10 @@ Session type, **set by the parent loop** (not the user). Authoritative catalog:
|
|
|
21
21
|
> `research` is **not** a session type the loops create. Research is an **inline** activity: ANALYSIS-FILE / CONCLUSIONS are written into whatever session is active (`refine`/`exec`/`quick`) when it does investigation.
|
|
22
22
|
|
|
23
23
|
## Success criteria
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
The run's **done-condition**, seeded when the session is created (**verification-first** — generalized TDD; see [`../../loops/spec-refine-loop/SKILL.md`](../../loops/spec-refine-loop/SKILL.md) § Verification-first): a checklist `[ ]` of **falsifiable** items (that *can* fail) defining "done". The loop **persists until they are all green** (it is the *persistent-objective* condition); `CHECKPOINT.Pending/Completed` tracks the **red→green** progress. Two forms:
|
|
25
|
+
|
|
26
|
+
- **Executable** (code/script/fix): **runnable** tests/checks (unit, build, lint, bug repro) — literal TDD. May **reference** the repo's tests rather than copy them.
|
|
27
|
+
- **Rubric** (analysis/design and other non-executable deliverables): items checked by **inspection** (e.g. "identifies every affected site with `file:line`"; "each decision: rationale + ≥1 alternative"). For **subjective** deliverables the AI **proposes** the rubric and the **human ratifies** it before pursuing it.
|
|
28
|
+
|
|
29
|
+
> **Spec/plan** may **reference** the document's acceptance criteria instead of duplicating them. **Research** is the original particular case: its checklist marks the research concluded.
|
|
30
|
+
> **If an item cannot be met** (no evidence, DB unavailable, irresolvable): it closes as `inconcluso` with a reason and the loop **degrades** (asks the human or defers to `Open questions`/`BACKLOG`) — never spinning in place.
|
package/skills/w/loops/README.md
CHANGED
|
@@ -12,12 +12,13 @@ Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un
|
|
|
12
12
|
|
|
13
13
|
Propiedades comunes a **los 4 loops**:
|
|
14
14
|
|
|
15
|
-
1. **
|
|
16
|
-
2. **
|
|
17
|
-
3. **
|
|
15
|
+
1. **Objetivo persistente + verification-first** — el loop persigue su `SESSION.Objective` y solo finaliza cuando sus `SESSION.Success criteria` están **en verde** (o el humano aborta vía `flow` `Cerrar`). Esos criterios —la condición de término— se **siembran al inicio** (*verification-first*, TDD generalizado: tests ejecutables para código, rúbrica falsable para análisis/diseño), no se improvisan al final. Modelado en el `/goal` de Claude Code pero como **doctrina agnóstica** (sin depender de ningún host) y con registro durable. El "no parar hasta converger" es del loop, no del arnés. **Entre turnos**, el mismo `CHECKPOINT`+resume hace que un prompt **sin comando** **continúe/reabra la sesión más reciente** en vez de arrancar trabajo suelto — la cara *inter-turno* del objetivo persistente (ver [`../SKILL.md`](../SKILL.md) § *Contexto operativo*).
|
|
16
|
+
2. **Gap-driven convergente** — el *cómo* del objetivo persistente: cada ciclo `detect_gaps` → resolver (humano o research) → integrar → repetir hasta que no queden gaps materiales. Los gaps "agotados" (límite `MAX` de intentos) no se re-disparan → garantiza convergencia.
|
|
17
|
+
3. **Una sola session por run + research inline** — el loop crea **una** session en `.workflow/sessions/` (la dueña del run) y maneja **sus** artefactos. La **investigación es inline**: una actividad dentro de esa misma session que escribe `ANALYSIS-FILE`/`CONCLUSIONS` (+ `SCRIPTS.sql` read-only si consulta BD) en su propia carpeta — ya no es una session aparte. **El usuario nunca crea sessions.** Los artefactos son el **registro vivo** del run — **ciclo artifact-first**: sembrar `CHECKPOINT.Pending/Next` (la intención) antes de ejecutar, llevar a `Completed`/DECISION después; CHECKPOINT actualizado en cada límite de gap/fase, BACKLOG solo si difiere. El spec/plan es la base guía.
|
|
18
|
+
4. **Structured-choice con dos planos** (capacidad del arnés — ver [`../harness/SKILL.md`](../harness/SKILL.md); en **Claude Code** es `AskUserQuestion`, máx 4 preguntas/llamada → **≤3 + 1 control `flow`**; sin elección estructurada degrada a markdown numerado):
|
|
18
19
|
- **pregunta(s) de contenido** (≤3) — la(s) pregunta(s) real(es) del momento (resolver una duda, elegir MCP, o en convergencia: `Guardar` / `Preguntar algo más`).
|
|
19
20
|
- **control `flow`** (1, SIEMPRE presente) — control de ciclo de vida por un canal lateral. Así el contenido lo maneja la IA y el ciclo de vida lo dirige el humano.
|
|
20
|
-
|
|
21
|
+
5. **Escribe solo en su propia carpeta `docs/`** — y **nunca** gradúa/exporta otros artefactos a `docs/`. Esa promoción la hacen las skills `export-*`, aparte y explícita.
|
|
21
22
|
|
|
22
23
|
## flow control — options
|
|
23
24
|
|
|
@@ -80,7 +81,7 @@ Los **heirs** (`plan-new-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherit
|
|
|
80
81
|
## Chassis / heirs
|
|
81
82
|
|
|
82
83
|
```
|
|
83
|
-
spec-refine-loop ── CHASIS (patrón de referencia:
|
|
84
|
+
spec-refine-loop ── CHASIS (patrón de referencia: objetivo persistente + verification-first, gap-driven, sesión única,
|
|
84
85
|
│ structured-choice + control flow, research autónomo INLINE + regla BD,
|
|
85
86
|
│ compact/resume, artefactos como log vivo: CHECKPOINT siempre,
|
|
86
87
|
│ BACKLOG solo si difiere)
|
|
@@ -48,7 +48,7 @@ Este loop **nunca gradúa/promueve artefactos** a `docs/`. Las únicas carpetas
|
|
|
48
48
|
|
|
49
49
|
Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
50
50
|
|
|
51
|
-
-
|
|
51
|
+
- **Objetivo persistente + verification-first** del chasis: persigue su `SESSION.Objective` hasta que sus `SESSION.Success criteria` están **en verde** (sembrados al inicio; acá = los tests/validaciones del plan pasan — TDD literal cuando hay código, rúbrica para migraciones BD no ejecutables). El motor es **gap-driven** (aplica *dentro de una tarea* ante una decisión/duda no obvia: research inline ó structured-choice).
|
|
52
52
|
- **Structured-choice**: ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`).
|
|
53
53
|
- **Research INLINE** + **regla BD** read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only) + research **inconclusa** (degrada/difiere, límite `MAX`).
|
|
54
54
|
- **Compact/resume**; **artefactos como log vivo** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
@@ -95,7 +95,7 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
|
|
|
95
95
|
- Validación que **corre y falla** → vuelve a la tarea (gap); no avanza.
|
|
96
96
|
- **Validación dependiente de una migración no aplicada**: como la IA no ejecuta el DML, **no puede correr read-only** → se **difiere** (handoff a DBA), **no bloquea el avance**. Se registra en `Open questions` del plan + `BACKLOG`, marcando "verificación pendiente tras aplicar SQL". (Reusa el patrón degradar/diferir + límite `MAX` del chasis → evita el bucle "vuelve a la tarea".)
|
|
97
97
|
|
|
98
|
-
> La **validación final** es el **convergence gate** de PLAN-exec (análogo al *analyze gate* de SPEC y al *coherence gate* de `plan-new`): el plan no se marca *done* hasta que pasa o queda explícitamente diferida (handoff de SQL).
|
|
98
|
+
> La **validación final** es el **convergence gate** de PLAN-exec = **`Success criteria` en verde** (*verification-first*; análogo al *analyze gate* de SPEC y al *coherence gate* de `plan-new`): el plan no se marca *done* hasta que pasa o queda explícitamente diferida (handoff de SQL). Para código son **tests ejecutables** (TDD); para migraciones BD no ejecutables, **rúbrica** (SCRIPTS.sql válido + revisado).
|
|
99
99
|
|
|
100
100
|
## Delta 5 — Completitud / cierre
|
|
101
101
|
|
|
@@ -42,7 +42,7 @@ PLAN
|
|
|
42
42
|
|
|
43
43
|
Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
44
44
|
|
|
45
|
-
-
|
|
45
|
+
- **Objetivo persistente + verification-first** del chasis: persigue su `SESSION.Objective` hasta que sus `SESSION.Success criteria` están **en verde** (sembrados al inicio; acá la rúbrica = **coherencia del plan**: cada Task traza a un acceptance criterion del spec). El motor es **gap-driven convergente** + **ciclo artifact-first** (sembrar `CHECKPOINT.Pending/Next` ANTES → `detect_gaps` → resolver → integrar → actualizar `Pending→Completed` DESPUÉS; gaps agotados con límite `MAX` no se re-disparan).
|
|
46
46
|
- **Una sola session por run**: descriptor `plan-new` → `NNN-plan-new` (Type = `refine`): `SESSION` + `CHECKPOINT` (+ `BACKLOG` solo si difiere). La **investigación es inline** dentro de esta session (produce `ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only en su propia carpeta), no una session aparte.
|
|
47
47
|
- **Structured-choice**: ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`).
|
|
48
48
|
- **Ask-vs-research rule** + **research autónomo inline** + **regla BD** (pregunta MCP si >1 sin default → queries a `SCRIPTS.sql` → ejecuta read-only, `sql-mutation-guard`) + manejo de research **inconclusa** (degrada a humano / difiere a `Open questions` + límite `MAX`).
|
|
@@ -100,4 +100,4 @@ El research **inline** del chasis se especializa: mapear **código/impacto** —
|
|
|
100
100
|
|
|
101
101
|
## Convergence / exit
|
|
102
102
|
|
|
103
|
-
Sin gaps materiales → **coherence gate** (read-only
|
|
103
|
+
Sin gaps materiales → **coherence gate** (read-only) = **`Success criteria` en verde** (*verification-first*; es el "convergence gate" del chasis para PLAN-new): cada `acceptance criterion` del spec **traza** a una fase/tarea, `Final behavior` los cubre, fases XS–S / tareas XS, `deps` sin ciclos, `Impacted` consistente con `Solution`. Lo que falle **vuelve como gap** — la trazabilidad criterio→tarea es una **invariante chequeada**, no una sección aparte. Si pasa → *structured-choice* (contenido: `Guardar plan` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, escribe `docs/plans/PPP-plan-<slug>.md` (con confirmación si existe) → `finalize` (persiste `CHECKPOINT`, y `BACKLOG` solo si difiere; cierra la session, reporta). `Cerrar` en cualquier momento → `finalize` igual.
|
|
@@ -33,9 +33,9 @@ QUICK
|
|
|
33
33
|
— (el prompt del usuario; no hay documento de entrada).
|
|
34
34
|
|
|
35
35
|
## Writes
|
|
36
|
-
-
|
|
36
|
+
- **Deliverable según la tarea:** edita código en las fuentes (cambio mínimo) **o** produce un **análisis/diseño** acotado (deliverable no-código, vive en los artefactos de la session — no en `docs/`).
|
|
37
37
|
- Artefactos de la session en `.workflow/sessions/`.
|
|
38
|
-
- **NO toca `docs/`** (sin doc, sin auto-export).
|
|
38
|
+
- **NO toca `docs/`** (sin doc, sin auto-export). Un análisis/diseño que amerite preservarse se promueve aparte (`export-*`) o se escala a SPEC/PLAN.
|
|
39
39
|
|
|
40
40
|
## Internal session
|
|
41
41
|
|
|
@@ -43,63 +43,76 @@ QUICK
|
|
|
43
43
|
|
|
44
44
|
## Inherits
|
|
45
45
|
|
|
46
|
-
- del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): gap-driven (mínimo), *structured-choice* ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`), `research` **inline** + regla BD read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only), compact/resume, **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
46
|
+
- del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): **objetivo persistente** (acá el más directo: el prompt *es* el objetivo) + **verification-first** (`SESSION.Success criteria` proporcional), gap-driven (mínimo), *structured-choice* ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`), `research` **inline** + regla BD read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only), compact/resume, **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
47
47
|
- de [`plan-exec-loop`](../plan-exec-loop/SKILL.md): **git** (rama segura antes de editar + commit propuesto; nunca `push`/`--amend`/`--no-verify`), **BD** (la IA nunca ejecuta DML; migraciones → `SCRIPTS.sql` de la session), **sin auto-export** (no toca otras carpetas `docs/`).
|
|
48
48
|
|
|
49
49
|
## Composes
|
|
50
50
|
|
|
51
|
-
`git` · `coding-standards` · `testing` (
|
|
51
|
+
`git` · `coding-standards` · `testing` (verification-first) · `sql` (regla BD) · `writing` · `research` (inline). Resueltas por `.workflow/skills.toml`.
|
|
52
52
|
|
|
53
53
|
## Delta QUICK — minimal ceremony
|
|
54
54
|
|
|
55
55
|
- **Sin fases, sin plan-doc**: el prompt **es** la tarea (una sola unidad). No hay roadmap.
|
|
56
|
-
- **
|
|
56
|
+
- **Verification-first proporcional** (ceremonia mínima): aun acá se **siembra el check antes**, del tamaño de la tarea. Código: un test (repro del bug → fix) o "build/lint/tests existentes siguen verdes" (chore). **Análisis/diseño**: una **rúbrica falsable corta**, *ratificada por el usuario* antes de perseguirla. Es el `SESSION.Success criteria` del run (ver [chasis § Verification-first](../spec-refine-loop/SKILL.md)).
|
|
57
|
+
- **Una sola session**. **Un solo commit** propuesto al final (solo si hubo cambios de código).
|
|
57
58
|
- **Escalación + handoff**: si la tarea crece (muchos archivos / ≥2 fuentes / necesita arquitectura) → propone subir a **SPEC/PLAN**. Si el usuario acepta:
|
|
58
59
|
- el **código ya editado queda** en el working tree (no se revierte) **y se registra** en `CHECKPOINT` + `BACKLOG` ("cambios sin commitear en `<fuente>` — código a medias; decidir commit/descartar al retomar") — reusando **ambas** mitades del patrón "commit rechazado" de plan-exec (no revertir **y** registrar lo sin commitear). Crítico en la rama **SPEC**, que no retoma el working tree;
|
|
59
60
|
- la session quick va a `finalize`, persistiendo `CHECKPOINT` + `BACKLOG` con un **puntero** al spec/plan sembrado (Followups: "escalado a `docs/specs/NNN` o `docs/plans/PPP` — retomar ahí");
|
|
60
61
|
- los artefactos (`DECISION`, `SCRIPTS.sql`) **quedan en la session quick** como contexto referenciable por la nueva session (no se migran);
|
|
61
62
|
- **asimetría**: escalar a **PLAN** puede **absorber** el avance (plan-exec retoma el working tree existente); escalar a **SPEC** **reinicia** el ciclo de diseño y trata el código a medias como **contexto/referencia**, no como trabajo ya ingerido.
|
|
62
63
|
|
|
64
|
+
## Continuidad entre prompts (contexto operativo)
|
|
65
|
+
|
|
66
|
+
`quick` es donde la **regla de continuidad** (ver [`../../SKILL.md`](../../SKILL.md) § *Contexto operativo*) se ve más claro. Dentro de un workspace:
|
|
67
|
+
|
|
68
|
+
1. `/w:quick "primer prompt"` (**comando**) → crea la session `NNN-<slug>-quick`, arranca el loop. Los scripts van a **su** `SCRIPTS.sql`.
|
|
69
|
+
2. `"segundo prompt"` (**sin comando**, trabajo relacionado) → **no** crea otra session: **continúa/reabre la más reciente** (la del paso 1) y agrega los nuevos scripts a **esa misma** `SCRIPTS.sql`.
|
|
70
|
+
3. `/w:quick "tercer prompt"` (**comando** otra vez) → **nueva** session, nuevo loop.
|
|
71
|
+
|
|
72
|
+
> El **comando** señala "nueva línea de trabajo"; un **prompt pelado** es "sigo en la misma" → por default continúa/reabre la más reciente (la *última iniciada*). Si es claramente no-relacionado, ofrece elegir (`continuar NNN` | `trabajo nuevo`) o cae a la rama **sin flujo** (escribe en `docs/` por convención + numeración). Sin workspace → comportamiento **vanilla**.
|
|
73
|
+
|
|
63
74
|
## Sequence
|
|
64
75
|
|
|
65
76
|
```
|
|
66
77
|
quick-loop(prompt):
|
|
67
78
|
s = create_or_resume("<slug>-quick") # CLI antepone NNN global; siempre session ligera
|
|
68
|
-
seed
|
|
79
|
+
seed SESSION.Objective = el prompt
|
|
80
|
+
seed SESSION.Success criteria = check del deliverable # verification-first, ANTES: test(s) si código · rúbrica corta RATIFICADA si análisis/diseño
|
|
81
|
+
seed CHECKPOINT.Pending/Next = la tarea (s) # ANTES: sembrar intención (artifact-first)
|
|
69
82
|
trabajar la tarea (loop mínimo):
|
|
70
|
-
verificar rama esperada por fuente (branch-check); si no → pausar + resolver
|
|
71
|
-
editar código (cambio mínimo)
|
|
83
|
+
si edita código → verificar rama esperada por fuente (branch-check); si no → pausar + resolver
|
|
84
|
+
producir el deliverable: editar código (cambio mínimo) Ó autorar el análisis/diseño
|
|
72
85
|
si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
|
|
73
86
|
si cambio BD (DDL/DML) → SCRIPTS.sql (artefacto session, NO ejecutar)
|
|
74
87
|
si decisión no obvia → DECISION
|
|
75
88
|
si duda/gap → research inline ó structured-choice # chasis
|
|
76
89
|
si la tarea CRECE → proponer escalar a SPEC/PLAN
|
|
77
|
-
si acepta → handoff (
|
|
78
|
-
|
|
79
|
-
proponer commit (aprobar antes)
|
|
90
|
+
si acepta → handoff (avance queda; BACKLOG→spec/plan sembrado) → goto finalize
|
|
91
|
+
convergence gate: Success criteria en verde # tests verdes si código · rúbrica satisfecha si análisis/diseño
|
|
92
|
+
si hubo cambios de código → proponer commit (aprobar antes) # nunca push/amend/--no-verify
|
|
80
93
|
structured_choice(contenido: [Cerrar tarea, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
81
94
|
finalize: CHECKPOINT (DESPUÉS: Pending→Completed) + BACKLOG (solo si queda algo diferido) + cerrar session + reportar
|
|
82
95
|
```
|
|
83
96
|
|
|
84
97
|
```mermaid
|
|
85
98
|
flowchart TD
|
|
86
|
-
S["create_or_resume
|
|
87
|
-
G -->|ok| DO["
|
|
99
|
+
S["create_or_resume NNN-<slug>-quick<br/>seed Objective + Success criteria (verification-first)"] --> G["branch-check (si edita código)"]
|
|
100
|
+
G -->|ok| DO["producir deliverable: código Ó análisis/diseño<br/>BD→SCRIPTS.sql · DECISION · (duda→research/structured-choice)"]
|
|
88
101
|
G -->|rama ≠| PA["pausar + resolver"]
|
|
89
102
|
PA --> G
|
|
90
103
|
DO --> GROW{"¿la tarea creció?"}
|
|
91
|
-
GROW -->|sí| ESC["escalar a SPEC/PLAN<br/>
|
|
104
|
+
GROW -->|sí| ESC["escalar a SPEC/PLAN<br/>avance queda · BACKLOG→spec/plan sembrado"]
|
|
92
105
|
ESC --> FIN
|
|
93
|
-
GROW -->|no| V["
|
|
94
|
-
V --> CM["proponer commit (aprobar)"]
|
|
106
|
+
GROW -->|no| V["convergence gate:<br/>Success criteria en verde"]
|
|
107
|
+
V --> CM["si hubo código → proponer commit (aprobar)"]
|
|
95
108
|
CM --> Q["structured-choice[Cerrar · Preguntar más]<br/>flow[Compactar · Cerrar]"]
|
|
96
109
|
Q --> FIN["finalize: CHECKPOINT + BACKLOG + cerrar"]
|
|
97
110
|
```
|
|
98
111
|
|
|
99
112
|
## Convergence / exit
|
|
100
113
|
|
|
101
|
-
-
|
|
114
|
+
- **Success criteria en verde** (proporcional) + commit propuesto si hubo código (o aprobado saltarlo) → `Cerrar`.
|
|
102
115
|
- `Cerrar`/`Compactar` (control `flow`) → persiste `CHECKPOINT` + `BACKLOG` (reanudable).
|
|
103
116
|
- **Sin export**: nada va a `docs/`. Si algo amerita preservarse → se promueve aparte vía `export-*`, o se escala a SPEC/PLAN.
|
|
104
117
|
|
|
105
|
-
>
|
|
118
|
+
> El *convergence gate* de QUICK es **verification-first proporcional**: un `Success criteria` **corto** sembrado al inicio (no la *ausencia* de checklist, sino su versión mínima) — para código, "el cambio hace lo que pedía el prompt + tests/build verdes"; para análisis/diseño, una rúbrica corta ratificada. Mínima ceremonia por diseño, pero **siempre con el check declarado antes**.
|
|
@@ -37,6 +37,41 @@ Actualiza `docs/specs/NNN-spec-<slug>.md` **in place** (cuando el usuario elige
|
|
|
37
37
|
|
|
38
38
|
> **Invariante de boundary:** este loop escribe **solo** en `docs/specs`. Nunca gradúa/exporta otros artefactos a `docs/` — eso es trabajo de `export-*`, aparte.
|
|
39
39
|
|
|
40
|
+
## Objetivo persistente (chasis — heredado por todos los loops)
|
|
41
|
+
|
|
42
|
+
Un loop **es un objetivo persistente**: existe para cumplir el `SESSION.Objective` declarado al arrancar, y **no se considera terminado hasta que el convergence gate confirma que el objetivo se cumplió**. La iteración gap-driven es el *método*; los artefactos son el *registro*; el objetivo persistente es el *frame* que los gobierna.
|
|
43
|
+
|
|
44
|
+
Está **modelado en cómo se comporta el `/goal` de Claude Code** (declarás un objetivo, el agente no para hasta cumplirlo, auto-completa al cumplirse, con corte explícito para abortar antes) pero como **doctrina agnóstica, no una dependencia del host**: el "no parar hasta converger" lo sostiene el propio loop (su `repeat:` + el convergence gate), no un Stop hook del arnés — ningún host necesita `/goal`. Y, a diferencia del `/goal` pelado, **deja registro durable** (artifact-first) que sobrevive compactación y resume.
|
|
45
|
+
|
|
46
|
+
| Comportamiento de `/goal` (ejemplo) | Análogo agnóstico en el loop |
|
|
47
|
+
|---|---|
|
|
48
|
+
| declarar el objetivo | `SESSION.Objective` |
|
|
49
|
+
| no parar hasta cumplirlo | `repeat:` gap-driven hasta `gaps == ∅` |
|
|
50
|
+
| objetivo cumplido → auto-clear | **convergence gate** pasa → `finalize` |
|
|
51
|
+
| `/goal clear` (abortar antes) | control `flow` `Cerrar` |
|
|
52
|
+
| la directiva sobrevive el contexto | `CHECKPOINT` + resume (compactación **y próximo prompt**) |
|
|
53
|
+
|
|
54
|
+
> Los heirs heredan el frame: `plan-new`/`plan-exec` persiguen el plan hasta su gate; `quick-loop` es la encarnación más directa (el prompt *es* el objetivo) — el "símil a `/goal`" del modelo.
|
|
55
|
+
|
|
56
|
+
> **Continuidad inter-turno (contexto operativo).** El mismo `CHECKPOINT`+resume que sobrevive la compactación gobierna también el **próximo prompt**: dentro de un workspace, un prompt **sin comando** **continúa/reabre la sesión más reciente** (la *última iniciada*) en vez de arrancar trabajo suelto — el objetivo persiste **entre turnos**, no solo dentro del run. Un **comando de flujo** señala "nueva línea de trabajo" (sesión nueva); la convergencia cierra la sesión y un prompt relacionado posterior la **reabre** (resume quita `.closed`). Es la fila 2 de la matriz de contexto operativo (ver [`../../SKILL.md`](../../SKILL.md) § *Contexto operativo*) — doctrina agnóstica que la IA evalúa en cada turno, no un Stop hook del host.
|
|
57
|
+
|
|
58
|
+
## Verification-first (chasis — heredado por todos los loops)
|
|
59
|
+
|
|
60
|
+
El objetivo persistente necesita una **condición de término checkable** — si no, el loop no sabe cuándo cumplió (o persigue un blanco que inventó). Esa condición se **siembra ANTES de ejecutar**, no se improvisa al final: es **TDD generalizado**. Junto con artifact-first (sección siguiente) son los **dos sembrados** de cada gap/fase: *cómo sabré que funcionó* + *qué voy a hacer*.
|
|
61
|
+
|
|
62
|
+
**Dónde vive:** en `SESSION.Success criteria` (ver [`../../artifacts/artifacts-core/SESSION.md`](../../artifacts/artifacts-core/SESSION.md)) — checklist `[ ]` de criterios **falsables** (que *pueden* fallar). `CHECKPOINT.Pending/Completed` trackea el avance **red→green**. Dos formas según el deliverable:
|
|
63
|
+
|
|
64
|
+
| Deliverable | Criterio = | Ciclo |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| código / script / fix / feature | **tests ejecutables** (unit, build, lint, repro del bug) | TDD literal: red → green → refactor |
|
|
67
|
+
| migración BD (no ejecutable; invariante 4) | **rúbrica**: `SCRIPTS.sql` válido + revisado (no se ejecuta) | rúbrica |
|
|
68
|
+
| spec / plan | **rúbrica** = los acceptance criteria del documento (referenciados, no duplicados) | rúbrica |
|
|
69
|
+
| análisis / diseño | **rúbrica falsable por inspección** (ej. "todos los afectados con `file:line`"; "cada decisión: rationale + ≥1 alternativa") | rúbrica |
|
|
70
|
+
|
|
71
|
+
**Forma y peso escalan** (preserva la *ceremonia mínima* de quick): un chore es "tests/build existentes siguen verdes" (una línea); un feature, acceptance tests reales. No es "siempre escribir tests nuevos" — es "**siempre declarar el check antes**". Para deliverables **subjetivos** (análisis/diseño) la IA **propone** la rúbrica y el **humano la ratifica** (structured-choice) antes de perseguirla. **Criterio irresoluble** (sin evidencia, BD no disponible) → cierra `inconcluso` + el loop **degrada** (humano, o difiere a `Open questions`/`BACKLOG`); nunca itera en falso.
|
|
72
|
+
|
|
73
|
+
> El **convergence gate** (sección *Convergence / exit*) es, operacionalmente, **"todos los `Success criteria` en verde"**. Los gates por-heir (analyze gate, coherencia del plan, validación final, validación puntual proporcional) son **instancias** de esto, con los criterios sembrados al inicio.
|
|
74
|
+
|
|
40
75
|
## Artifacts as a live log — ciclo artifact-first (chasis — heredado por todos los loops)
|
|
41
76
|
|
|
42
77
|
El loop trabaja **artifact-first**: el artefacto se **siembra antes** de ejecutar y se **actualiza después**, no solo al cerrar. Cada gap/fase/tarea corre el ciclo de **3 tiempos**:
|
|
@@ -73,6 +108,7 @@ El **CLI es dueño del número**: `aw session-create` antepone un `NNN` **global
|
|
|
73
108
|
- `aw session-create --type refine --name spec-refine` → crea `NNN-spec-refine` / `aw session-resume --code <…>` (detecta `CHECKPOINT`).
|
|
74
109
|
- `aw checkpoint-write` / `aw checkpoint-read` para el resume.
|
|
75
110
|
- `aw session-close` al cerrar (con razón); `aw session-artifacts` para inspeccionar.
|
|
111
|
+
- **Reabrir para continuar** (contexto operativo, fila 2): `aw session-resume --code <NNN> --reopen` reactiva una sesión **cerrada** (quita `.closed` → activa) para seguir trabajando en ella; sin `--reopen`, el resume es read-only. Para detectar cuál es la más reciente cerrada: `aw resume-summary --include-recent-closed` (o `aw sessions --state all`).
|
|
76
112
|
|
|
77
113
|
## Composes
|
|
78
114
|
|
|
@@ -168,6 +204,7 @@ La investigación es **inline**: una actividad **dentro de la session actual del
|
|
|
168
204
|
spec-refine-loop(spec):
|
|
169
205
|
input = glob(NNN-spec*.md) | argumento (ruta) # siempre el spec mismo (in place)
|
|
170
206
|
refine_session = create_or_resume("spec-refine") # CLI antepone NNN global; resume localiza por descriptor/origin
|
|
207
|
+
seed SESSION.Success criteria = acceptance criteria + checklist del analyze gate # verification-first: ANTES de iterar
|
|
171
208
|
work = read(input) (+ aplicar avance del checkpoint si reanuda)
|
|
172
209
|
attempts = {} # anti-relanzamiento por gap
|
|
173
210
|
repeat:
|
|
@@ -193,7 +230,7 @@ spec-refine-loop(spec):
|
|
|
193
230
|
Compactar → write CHECKPOINT (refine_session) ; compactar(arnés) ; continue
|
|
194
231
|
Cerrar → goto finalize
|
|
195
232
|
work = integrate(work, ans) # → Q&A traceability / Open questions
|
|
196
|
-
# sin gaps materiales → analyze gate (read-only) antes de ofrecer Guardar:
|
|
233
|
+
# sin gaps materiales → analyze gate = Success criteria en verde (read-only) antes de ofrecer Guardar:
|
|
197
234
|
issues = analyze(work) # criterios trazan al Requirement · sin contradicciones · Scope coherente · Open questions cerradas/diferidas
|
|
198
235
|
si issues: gaps += issues ; continue # los hallazgos vuelven al loop como gaps
|
|
199
236
|
ans = structured_choice(contenido: [Guardar refinada, Preguntar algo más],
|
|
@@ -244,7 +281,7 @@ El resume **keya off el `CHECKPOINT`** de la refine session, no de la existencia
|
|
|
244
281
|
|
|
245
282
|
## Convergence / exit
|
|
246
283
|
|
|
247
|
-
- **Sin gaps materiales** → **analyze gate** (read-only): cada acceptance criterion traza al `Requirement`, sin contradicciones internas, `Scope` In/Out coherente, `Open questions` cerradas o explícitamente diferidas. Lo que falle **vuelve como gap**; si pasa → ofrece `Guardar especificación refinada`. *(Es el "convergence gate" del chasis; heirs: plan-new = coherencia del plan, plan-exec = validación final, quick = validación puntual
|
|
284
|
+
- **Sin gaps materiales** → **analyze gate** (read-only) = **`Success criteria` en verde** (*verification-first*): cada acceptance criterion traza al `Requirement`, sin contradicciones internas, `Scope` In/Out coherente, `Open questions` cerradas o explícitamente diferidas. Lo que falle **vuelve como gap**; si pasa → ofrece `Guardar especificación refinada`. *(Es el "convergence gate" del chasis; los heirs son instancias: plan-new = coherencia del plan, plan-exec = validación final, quick = validación puntual proporcional.)*
|
|
248
285
|
- `Guardar` → `edit_in_place_with_confirm(spec)` y `finalize`.
|
|
249
286
|
- `Cerrar` (control `flow`, en cualquier momento) → `finalize`. **`finalize` persiste siempre el `CHECKPOINT.md`** (reanudable) y, **solo si hay algo diferido/followup**, escribe `BACKLOG.md` (motivo de cierre + `Open questions` diferidas); cierra la session y reporta. Así sobrevive el avance aunque no se haya `Compactar` antes.
|
|
250
287
|
|