@tacuchi/agent-workflow-cli 15.1.0 → 15.2.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/package.json +1 -1
- package/skills/w/SKILL.md +11 -2
- package/skills/w/artifacts/README.md +6 -6
- package/skills/w/artifacts/artifacts-core/SESSION.md +1 -7
- package/skills/w/artifacts/artifacts-exec/TECHNICAL-NOTE.md +9 -54
- package/skills/w/commands/plan-new.md +1 -1
- package/skills/w/commands/spec-new.md +1 -1
- package/skills/w/loops/CHASSIS.md +22 -18
- package/skills/w/loops/plan-exec-loop/SKILL.md +7 -10
- package/skills/w/loops/plan-new-loop/SKILL.md +44 -14
- package/skills/w/loops/plan-refine-loop/SKILL.md +37 -13
- package/skills/w/loops/quick-loop/SKILL.md +16 -16
- package/skills/w/loops/spec-refine-loop/SKILL.md +8 -11
- package/skills/w/roles/git/SKILL.md +3 -3
- package/skills/w/roles/research/SKILL.md +2 -2
- package/skills/w/roles/sql/SKILL.md +1 -1
- package/skills/w/roles/ui-spec/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.2.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
|
@@ -78,7 +78,16 @@ Antes de cualquier loop, la IA resuelve su **contexto operativo** en **cada prom
|
|
|
78
78
|
| **Sí** | **prompt sin comando** (no-relacionado / sin sesión) | **sin flujo**: trabajo directo → escribe en `docs/` por convención + numeración (`aw next-number`) |
|
|
79
79
|
| **No** | cualquiera | **vanilla** — sin workspace ni flujo, la IA es libre (nativo) |
|
|
80
80
|
|
|
81
|
-
**Regla de continuidad
|
|
81
|
+
**Regla de continuidad** (fuente única — el chasis y los loops referencian acá):
|
|
82
|
+
|
|
83
|
+
1. **Comando de flujo** = **nueva línea de trabajo** → sesión nueva.
|
|
84
|
+
2. **Excepción — re-run:** el mismo comando sobre la **misma entrada** (ej. `/w:spec-refine` sobre el mismo spec) **no** abre otra línea: `create_or_resume` localiza la sesión de ese flujo (descriptor + `## Origin`) y la **reanuda o reabre** (quita `.closed`), sin duplicarla.
|
|
85
|
+
3. **Excepción consentida — escalación:** la **escalación aceptada** dentro de un loop (ej. quick → SPEC) abre una **nueva línea de trabajo sin comando**; la señal es el **consentimiento explícito** del usuario en la structured-choice, equivalente a haber invocado el comando del flujo destino.
|
|
86
|
+
4. **Prompt sin comando** = "sigo en la misma" → continúa/reabre la sesión **más reciente** (la *última iniciada*).
|
|
87
|
+
5. Solo si el prompt es claramente **no-relacionado**: ofrecer elegir (`continuar NNN` | `trabajo nuevo`) o caer a "sin flujo".
|
|
88
|
+
6. La **convergencia cierra** la sesión; un prompt relacionado posterior la **reabre** (el resume quita `.closed`).
|
|
89
|
+
|
|
90
|
+
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; caso QUICK: `loops/quick-loop/SKILL.md`).
|
|
82
91
|
|
|
83
92
|
### The commands (`/w:` namespace)
|
|
84
93
|
|
|
@@ -93,7 +102,7 @@ Antes de cualquier loop, la IA resuelve su **contexto operativo** en **cada prom
|
|
|
93
102
|
|
|
94
103
|
### Transversal skills (no flow) — `/w:status` · `/w:fix-git`
|
|
95
104
|
|
|
96
|
-
Skills **invocables independientes de flujo**: se disparan con `/w:` igual que un comando, pero **no** pertenecen a SPEC/PLAN/QUICK, **no** manejan `docs/`, y **no** entran en el conteo **6 comandos de flow / 5 loops**. (En el
|
|
105
|
+
Skills **invocables independientes de flujo**: se disparan con `/w:` igual que un comando, pero **no** pertenecen a SPEC/PLAN/QUICK, **no** manejan `docs/`, y **no** entran en el conteo **6 comandos de flow / 5 loops**. *(En el bundle se empaquetan bajo `commands/` para que `/w:` las invoque; en el diseño son la categoría `workflow-skills/`.)*
|
|
97
106
|
|
|
98
107
|
- `/w:status` — dashboard read-only del workspace (Hecho/Falta/Descartó, con fechas en español). No escribe nada; se apoya en `aw status`.
|
|
99
108
|
- `/w:fix-git` — resuelve conflictos de un merge en curso en cualquier repo (identifica origen↔destino, analiza intención, *structured-choice* ante ambigüedad). No crea session, no toca `docs/`; git-safe; se apoya en `aw merge-state`.
|
|
@@ -19,7 +19,7 @@ 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
|
|
22
|
+
> **Routing by operating context** (canonical rules: [`../SKILL.md`](../SKILL.md) § *Contexto operativo*): inside a flow → the **active/continued** session (a prompt with no command edits the most recent session's artifacts); workspace without flow → `docs/` by convention + numbering; no workspace → vanilla. Session→`docs/` promotion is still **only** via `export-*`.
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
@@ -58,9 +58,9 @@ Sessions are created by the loops as needed — **one session per run**. The ses
|
|
|
58
58
|
|
|
59
59
|
---
|
|
60
60
|
|
|
61
|
-
## Invariants (hard rules —
|
|
61
|
+
## Invariants (hard rules — canonical list: [`../SKILL.md`](../SKILL.md) § *The 6 hard invariants*)
|
|
62
62
|
|
|
63
|
-
1. **No auto-export**:
|
|
64
|
-
2. **Each flow touches only its `docs/` folders**: SPEC→`specs` · PLAN→`plans` · QUICK→none
|
|
65
|
-
3. **Spec and plan are documents
|
|
66
|
-
4. **DB scripts-only**:
|
|
63
|
+
1. **No auto-export**: only `export-*` promotes to `docs/`, explicitly.
|
|
64
|
+
2. **Each flow touches only its `docs/` folders**: SPEC→`specs` · PLAN→`plans` · QUICK→none.
|
|
65
|
+
3. **Spec and plan are documents**, never session artifacts. *(Design SPECs `NNN-SPEC-<SLUG>.md` are a different thing: per-screen UI artifacts of PLAN sessions — [`artifacts-design/`](artifacts-design/).)*
|
|
66
|
+
4. **DB scripts-only**: never execute DML/DDL; migrations (type B) stay in `SCRIPTS.sql` and ship via `export-scripts`; only read-only queries (type A) run via MCP.
|
|
@@ -21,10 +21,4 @@ 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
|
-
The run's **done-condition**, seeded
|
|
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.
|
|
24
|
+
The run's **done-condition**, seeded at session creation: a checklist `[ ]` of **falsifiable** items. Executable deliverable → runnable tests/checks; non-executable → inspection rubric (the human ratifies it if subjective). Spec/plan sessions may **reference** the doc's acceptance criteria instead of duplicating them. Full doctrine: [`../../loops/CHASSIS.md`](../../loops/CHASSIS.md) § *Verification-first*.
|
|
@@ -1,62 +1,24 @@
|
|
|
1
1
|
# TECHNICAL-NOTE.md — technical design note (schema reference)
|
|
2
2
|
|
|
3
|
-
> **Model note:** in PLAN these sections live **inline in the plan-doc** (
|
|
3
|
+
> **Model note:** in PLAN these sections live **inline in the plan-doc** (rich plan — `plan-new-loop` § *Delta 1*); this artifact **is not created** in PLAN sessions. It remains only for a `quick` session that needs scoped technical context without a plan-doc.
|
|
4
4
|
|
|
5
5
|
## Solution
|
|
6
|
-
|
|
6
|
+
How it will be implemented (technical/functional).
|
|
7
7
|
|
|
8
8
|
## Impacted
|
|
9
|
-
|
|
10
|
-
- Frontend
|
|
11
|
-
- Backend
|
|
12
|
-
- Database (schemas/tables/functions)
|
|
13
|
-
- APIs (controllers/endpoints)
|
|
14
|
-
- Integrations with external systems
|
|
9
|
+
Frontend · Backend · Database (schemas/tables/functions) · APIs · external integrations.
|
|
15
10
|
|
|
16
11
|
## Dependencies
|
|
17
|
-
|
|
12
|
+
Sessions / documents / sources / databases.
|
|
18
13
|
|
|
19
14
|
## Current State
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
Example:
|
|
23
|
-
```
|
|
24
|
-
ContratoEfectivoData.demo()
|
|
25
|
-
│
|
|
26
|
-
▼
|
|
27
|
-
ContratoTemplateRenderer
|
|
28
|
-
(iface)
|
|
29
|
-
│ @Service impl
|
|
30
|
-
▼
|
|
31
|
-
ThymeleafContratoTemplateRenderer ──── reads ──> templates/contratos/efectivo.html
|
|
32
|
-
│ (returns String HTML)
|
|
33
|
-
▼
|
|
34
|
-
PreviewController.efectivoHtml() ──> respond TEXT_HTML
|
|
35
|
-
│
|
|
36
|
-
└─> efectivoPdf() ─> PdfRenderer (iface @Qualifier("chromePdfRenderer"))
|
|
37
|
-
│ @Service impl
|
|
38
|
-
▼
|
|
39
|
-
CdpPdfRenderer ──> Chrome headless via CDP
|
|
40
|
-
│
|
|
41
|
-
▼
|
|
42
|
-
respond APPLICATION_PDF
|
|
43
|
-
```
|
|
15
|
+
AS-IS wiring (interfaces and methods), brief.
|
|
44
16
|
|
|
45
17
|
## Target State
|
|
46
|
-
|
|
18
|
+
TO-BE wiring, brief.
|
|
47
19
|
|
|
48
20
|
## Final Behavior
|
|
49
|
-
How the
|
|
50
|
-
|
|
51
|
-
Example:
|
|
52
|
-
The user must be able to recover their password via OTP to their mobile number and the mobile number must be saved in the user's data:
|
|
53
|
-
1. [User] Accesses the login screen
|
|
54
|
-
2. [User] Clicks [Forgot Password]
|
|
55
|
-
3. [System] Shows a window to enter mobile number
|
|
56
|
-
4. [User] Enters mobile number
|
|
57
|
-
5. [System] Sends OTP via SMS
|
|
58
|
-
6. [System] Confirms OTP
|
|
59
|
-
7. [System] Saves the mobile number and associates it with the [User]
|
|
21
|
+
How the flow behaves end-to-end — aligned with the acceptance/success criteria in `SESSION.md`.
|
|
60
22
|
|
|
61
23
|
## Impact / Risks
|
|
62
24
|
Technical impacts and risks.
|
|
@@ -65,17 +27,10 @@ Technical impacts and risks.
|
|
|
65
27
|
Assumptions.
|
|
66
28
|
|
|
67
29
|
## Estimated Time
|
|
68
|
-
|
|
69
|
-
The work week has 5 days (Monday–Friday only).
|
|
70
|
-
Size scale XS/S/M/L/XL:
|
|
71
|
-
- XS -> 1 day or less
|
|
72
|
-
- S -> 1 to 2 days
|
|
73
|
-
- M -> 3 to 5 days
|
|
74
|
-
- L -> 6 to 10 days
|
|
75
|
-
- XL -> More than 10 days
|
|
30
|
+
XS–XL sizing (development + internal testing); scale defined in the plan schema (`plan-new-loop` § *Delta 1*).
|
|
76
31
|
|
|
77
32
|
## Validations
|
|
78
33
|
Validations, constraints, business-specific logic.
|
|
79
34
|
|
|
80
35
|
## Open Questions
|
|
81
|
-
Pending items, doubts
|
|
36
|
+
Pending items, doubts.
|
|
@@ -35,7 +35,7 @@ El skill evalúa `$ARGUMENTS` (los specs viven in place — `docs/specs/NNN-spec
|
|
|
35
35
|
|
|
36
36
|
## Notas de numeración
|
|
37
37
|
|
|
38
|
-
El plan se nombra `docs/plans/PPP-plan-<slug>.md`.
|
|
38
|
+
El plan se nombra `docs/plans/PPP-plan-<slug>.md`. `aw next-number docs/plans` devuelve JSON (campo `next` = `PPP`); el loop arma el nombre completo (slug = kebab-case corto del Requirement: `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars). **No hereda el `NNN` del spec**. El vínculo al spec se establece por referencia (`## Origin` / "Derivado de") en el plan, no por número.
|
|
39
39
|
|
|
40
40
|
## UI → design SPECs
|
|
41
41
|
|
|
@@ -23,7 +23,7 @@ Genera `docs/specs/NNN-spec-<slug>.md` en una sola pasada a partir del prompt en
|
|
|
23
23
|
>
|
|
24
24
|
> La investigación a profundidad (cerrar gaps, mapear código, consultar BD, research autónomo) es trabajo de **`spec-refine`**, no de aquí.
|
|
25
25
|
|
|
26
|
-
1. Ejecutar `aw next-number docs/specs`
|
|
26
|
+
1. Ejecutar `aw next-number docs/specs` (única tool de shell necesaria): devuelve JSON — usá el campo `next` como `NNN`. El slug lo arma este comando.
|
|
27
27
|
2. Derivar el `<slug>`: kebab-case corto del Requirement — solo `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars.
|
|
28
28
|
3. Crear `docs/specs/NNN-spec-<slug>.md` parafraseando `$ARGUMENTS` en el esquema de borrador (ver abajo). Lectura del repo: opcional y mínima (p. ej. un archivo que el usuario citó) — nunca un barrido ni research.
|
|
29
29
|
4. Mostrar el archivo generado y el próximo paso sugerido (`/w:spec-refine docs/specs/NNN-spec-<slug>.md`).
|
|
@@ -16,19 +16,11 @@ Los **5 loops** corren este motor; cada uno agrega solo sus deltas:
|
|
|
16
16
|
|
|
17
17
|
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.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Es **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 hook del arnés — y **deja registro durable** (artifact-first) que sobrevive compactación y resume. *(Racional y análogo con el `/goal` de Claude Code: ver diseño, `workflow-loops/chassis.md`.)*
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|---|---|
|
|
23
|
-
| declarar el objetivo | `SESSION.Objective` |
|
|
24
|
-
| no parar hasta cumplirlo | `repeat:` gap-driven hasta `gaps == ∅` |
|
|
25
|
-
| objetivo cumplido → auto-clear | **convergence gate** pasa → `finalize` |
|
|
26
|
-
| `/goal clear` (abortar antes) | control `flow` `Cerrar` |
|
|
27
|
-
| la directiva sobrevive el contexto | `CHECKPOINT` + resume (compactación **y próximo prompt**) |
|
|
21
|
+
> Cada heir instancia el frame: `spec-refine` persigue el spec; `plan-new`/`plan-refine` el plan hasta su gate; `plan-exec` el plan hasta su validación final; `quick-loop` es la encarnación más directa (el prompt *es* el objetivo).
|
|
28
22
|
|
|
29
|
-
>
|
|
30
|
-
|
|
31
|
-
> **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) — **salvo re-correr el mismo flujo sobre la misma entrada** (mismo spec/plan), que hace `create_or_resume`: reanuda/reabre la session existente en vez de duplicarla (ver *Compact / resume*, caso 3); 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.
|
|
23
|
+
> **Continuidad inter-turno.** El mismo `CHECKPOINT`+resume gobierna también el **próximo prompt**: el objetivo persiste **entre turnos**, no solo dentro del run. Las reglas canónicas (comando = línea nueva · re-run = `create_or_resume` · prompt pelado = continuar la más reciente · reapertura de cerradas · escalación consentida) viven en [`../SKILL.md`](../SKILL.md) § *Contexto operativo* — **única fuente**; este motor las ejecuta vía *Compact / resume* (caso 3).
|
|
32
24
|
|
|
33
25
|
## Verification-first
|
|
34
26
|
|
|
@@ -43,7 +35,9 @@ El objetivo persistente necesita una **condición de término checkable** — si
|
|
|
43
35
|
| spec / plan | **rúbrica** = los acceptance criteria del documento (referenciados, no duplicados) | rúbrica |
|
|
44
36
|
| 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 |
|
|
45
37
|
|
|
46
|
-
**Forma y peso escalan** (
|
|
38
|
+
- **Forma y peso escalan** (ceremonia mínima de quick preservada): chore = "tests/build existentes siguen verdes" (una línea); feature = acceptance tests reales. La regla es "**siempre declarar el check antes**", no "siempre escribir tests nuevos".
|
|
39
|
+
- **Deliverable subjetivo** (análisis/diseño): la IA **propone** la rúbrica y el **humano la ratifica** (structured-choice) antes de perseguirla.
|
|
40
|
+
- **Criterio irresoluble** (sin evidencia, BD no disponible): cierra `inconcluso` y el loop **degrada** (humano, o difiere a `Open questions`/`BACKLOG`) — **nunca itera en falso**.
|
|
47
41
|
|
|
48
42
|
> El **convergence gate** (sección *Convergence / exit*) es, operacionalmente, **"todos los `Success criteria` en verde"**. Los gates por-heir (analyze gate; coherencia del plan — plan-new y plan-refine; validación final; validación puntual proporcional) son **instancias** de esto, con los criterios sembrados al inicio.
|
|
49
43
|
|
|
@@ -68,7 +62,13 @@ El loop trabaja **artifact-first**: el artefacto se **siembra antes** de ejecuta
|
|
|
68
62
|
|
|
69
63
|
## Motor gap-driven convergente
|
|
70
64
|
|
|
71
|
-
El ciclo común
|
|
65
|
+
El ciclo común — cada heir lo instancia en su `## Sequence` con su propia gap taxonomy:
|
|
66
|
+
|
|
67
|
+
1. `detect_gaps(work)`, menos los gaps *agotados* (ver *Research*).
|
|
68
|
+
2. Si `∅` → **convergence gate** (ver *Convergence / exit*).
|
|
69
|
+
3. Si hay gaps: tomar un batch (≤3) y **sembrar** `CHECKPOINT.Pending/Next` (*artifact-first*).
|
|
70
|
+
4. Resolver cada gap con su **resolutor** según la *ask-vs-research rule*: humano (structured-choice) · research inline · una capacidad compuesta (p. ej. `ui-design`).
|
|
71
|
+
5. **Integrar**, actualizar `CHECKPOINT` → repetir.
|
|
72
72
|
|
|
73
73
|
## Internal sessions (managed) — una session por run
|
|
74
74
|
|
|
@@ -116,7 +116,7 @@ La investigación es **inline**: una actividad **dentro de la session actual del
|
|
|
116
116
|
|
|
117
117
|
## Structured-choice (design & batching)
|
|
118
118
|
|
|
119
|
-
*structured-choice*
|
|
119
|
+
**Regla canónica (única fuente — el resto del corpus solo referencia):** *structured-choice* = **≤3 preguntas de contenido + 1 control `flow`**, siempre. Binding por arnés en [`../harness/SKILL.md`](../harness/SKILL.md) (Claude Code: `AskUserQuestion`, máx 4 preguntas/llamada; sin elección estructurada, degrada a **markdown numerado**).
|
|
120
120
|
|
|
121
121
|
- Como el control `flow` va **siempre** → **≤3 preguntas de contenido + 1 control `flow`**.
|
|
122
122
|
- **control `flow`** (ciclo de vida, siempre presente): `Compactar` | `Cerrar`. Responder solo las preguntas de contenido (sin tocar `flow`) = seguir iterando.
|
|
@@ -152,8 +152,12 @@ Un loop escribe en `docs/` **solo** el doc de su propio flujo (spec-refine: `doc
|
|
|
152
152
|
|
|
153
153
|
Los loops que **editan código** (`plan-exec-loop`, `quick-loop`) corren además las políticas de [`CODE-POLICIES.md`](CODE-POLICIES.md) — **git seguro** (rama verificada + commits propuestos) · **BD solo-scripts** · **gate de revisión de cierre** (proporcional en quick). Las mandan leer desde su `## Inherits` **junto con este chasis**; los loops de documento (spec-refine, plan-new, plan-refine) **no** las cargan — por eso viven en un doc aparte.
|
|
154
154
|
|
|
155
|
-
##
|
|
155
|
+
## Resolución de referencias (regla global de layout)
|
|
156
|
+
|
|
157
|
+
Vale para **toda** referencia relativa de la doctrina — no se repite por link:
|
|
158
|
+
|
|
159
|
+
1. **Instalación normal** (árbol `w/`): la ruta relativa resuelve tal cual (`../CHASSIS.md`, `../../commands/spec-new.md`).
|
|
160
|
+
2. **Instalación aplanada** (p. ej. Warp/Oz): los `.md` compartidos (`CHASSIS.md`, `CODE-POLICIES.md`) están **junto al `SKILL.md` del loop**; otro loop es una skill **hermana** `w-<loop>/` (ej. `../spec-refine-loop/SKILL.md` → `../w-spec-refine-loop/SKILL.md`).
|
|
161
|
+
3. Referencia que no resuelva = **profundización opcional** — la doctrina de este motor es autocontenida.
|
|
156
162
|
|
|
157
|
-
|
|
158
|
-
- **No corre solo**: no define flujo, deliverable ni gap taxonomy — eso es de cada heir. Sin un heir, el chasis no hace nada.
|
|
159
|
-
- **Localización**: los heirs lo referencian como `../CHASSIS.md` (instalación normal, árbol `w/loops/`). En instalaciones **aplanadas** (p. ej. Warp/Oz) puede estar como `CHASSIS.md` **junto al `SKILL.md` del loop** (ídem `CODE-POLICIES.md` para los loops que editan código). En esas copias aplanadas los **links salientes** del chasis (`../SKILL.md`, `../harness/`, `../artifacts/`, `../roles/`) pueden no resolver: son **profundización opcional** — la doctrina del motor es autocontenida.
|
|
163
|
+
El chasis **no es una skill** (sin frontmatter; no se invoca ni se bindea vía `.workflow/skills.toml`): entra al contexto solo porque un loop manda leerlo desde su `## Inherits`. No define flujo, deliverable ni gap taxonomy — eso es de cada heir.
|
|
@@ -3,15 +3,12 @@ name: plan-exec-loop
|
|
|
3
3
|
description: >-
|
|
4
4
|
Ejecuta un plan de implementación (docs/plans/PPP-plan-<slug>.md) como
|
|
5
5
|
living doc: lo lee y actualiza fase a fase mientras edita el código real,
|
|
6
|
-
gestiona BD y git. Heir del chasis
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
revisión de cierre pre-commit, y sin auto-export (solo escribe docs/plans).
|
|
13
|
-
Compone git y sql. Lo arranca /w:plan-exec. Invocar para implementar un plan
|
|
14
|
-
ya generado.
|
|
6
|
+
gestiona BD y git. Heir del chasis (loops/CHASSIS.md + CODE-POLICIES.md).
|
|
7
|
+
Deltas: session única reanudable, git seguro (rama verificada, commits
|
|
8
|
+
propuestos por fuente, nunca push/--amend/--no-verify), BD solo-scripts
|
|
9
|
+
(nunca ejecuta DML/DDL), validación por fase y final, gate de revisión de
|
|
10
|
+
cierre pre-commit, sin auto-export. Compone git y sql. Lo arranca
|
|
11
|
+
/w:plan-exec. Invocar para implementar un plan ya generado.
|
|
15
12
|
---
|
|
16
13
|
|
|
17
14
|
# plan-exec-loop
|
|
@@ -41,7 +38,7 @@ Regla completa en el chasis (§ *docs/ boundary — sin auto-export*). Acá: la
|
|
|
41
38
|
|
|
42
39
|
## Inherits
|
|
43
40
|
|
|
44
|
-
Leé **[`../CHASSIS.md`](../CHASSIS.md)**
|
|
41
|
+
Leé **[`../CHASSIS.md`](../CHASSIS.md)** — el **motor completo** del loop — **y** **[`../CODE-POLICIES.md`](../CODE-POLICIES.md)** — las *Políticas de loops que editan código* — **siempre antes** de estos deltas. *(Si `../` no resuelve: mismos nombres junto a este archivo — regla global de layout, chasis § Resolución de referencias.)*
|
|
45
42
|
|
|
46
43
|
## Composes
|
|
47
44
|
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
name: plan-new-loop
|
|
3
3
|
description: >-
|
|
4
4
|
Genera un plan de implementación rico (docs/plans/PPP-plan-<slug>.md) a
|
|
5
|
-
partir de un spec (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
plan incluye UI compone ui-design para autorar design SPECs por pantalla
|
|
12
|
-
(NNN-SPEC-<SLUG>.md). Si el spec no está refinado sugiere spec-refine antes.
|
|
13
|
-
Lo arranca /w:plan-new y es reanudable. Invocar cuando un spec deba
|
|
14
|
-
convertirse en un plan ejecutable antes de implementar.
|
|
5
|
+
partir de un spec. Heir del chasis (loops/CHASSIS.md). Deltas: el plan
|
|
6
|
+
absorbe el nivel TECHNICAL-NOTE + Phases/Tasks con estado vivo, research de
|
|
7
|
+
mapeo código/impacto, gap taxonomy de planificación, y design SPECs por
|
|
8
|
+
pantalla vía ui-design si el plan incluye UI. Si el spec no está refinado
|
|
9
|
+
sugiere spec-refine antes. Lo arranca /w:plan-new; reanudable. Invocar
|
|
10
|
+
cuando un spec deba convertirse en un plan ejecutable.
|
|
15
11
|
---
|
|
16
12
|
|
|
17
13
|
# plan-new-loop
|
|
@@ -33,11 +29,11 @@ PLAN
|
|
|
33
29
|
## Writes
|
|
34
30
|
`docs/plans/PPP-plan-<slug>.md` (`generate`; **sobrescribe con confirmación** si existe). Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export. Si el plan **incluye UI**, además produce **design SPECs** (`NNN-SPEC-<SLUG>.md`) como artefactos **de su sesión** (ver *Delta 4* — no son `docs/`, no hay auto-export).
|
|
35
31
|
|
|
36
|
-
> **slug**: kebab-case corto derivado del Requirement del spec — solo `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars.
|
|
32
|
+
> **slug**: kebab-case corto derivado del Requirement del spec — solo `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars. `aw next-number docs/plans` devuelve JSON (campo `next` = `PPP`); el loop arma el nombre completo. Para localizar planes, glob `docs/plans/PPP-plan-*.md`.
|
|
37
33
|
|
|
38
34
|
## Inherits
|
|
39
35
|
|
|
40
|
-
Leé **[`../CHASSIS.md`](../CHASSIS.md)**
|
|
36
|
+
Leé **[`../CHASSIS.md`](../CHASSIS.md)** — el **motor completo** del loop — **siempre antes** de estos deltas. *(Si `../` no resuelve: `CHASSIS.md` junto a este archivo — regla global de layout, chasis § Resolución de referencias.)*
|
|
41
37
|
|
|
42
38
|
## Internal sessions — instancia PLAN-new
|
|
43
39
|
|
|
@@ -99,10 +95,44 @@ El research **inline** del chasis se especializa: mapear **código/impacto** —
|
|
|
99
95
|
|
|
100
96
|
## Delta 4 — Design SPECs (si el plan incluye UI)
|
|
101
97
|
|
|
102
|
-
El gap **UI sin design SPEC** se resuelve **componiendo** la capacidad **`ui-design`** (default built-in [`ui-spec`](../../roles/ui-spec/SKILL.md); rebindeable vía `.workflow/skills.toml`; `off` → degrada a humano / `Open questions`):
|
|
98
|
+
El gap **UI sin design SPEC** se resuelve **componiendo** la capacidad **`ui-design`** (default built-in [`ui-spec`](../../roles/ui-spec/SKILL.md); rebindeable vía `.workflow/skills.toml`; `off` → degrada a humano / `Open questions`):
|
|
99
|
+
|
|
100
|
+
- Autora **un design SPEC por pantalla** como artefacto de la sesión: `NNN-SPEC-<SLUG>.md` (numeración local a la sesión — ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)).
|
|
101
|
+
- **Deriva** de la sección `## UI spec` del spec si existe (la parte por pantalla y la eleva a detalle ejecutable); si no, autora desde el `Requirement` (design-system/tema/ambigüedades vía *structured-choice*, cuenta en el batch).
|
|
102
|
+
- Las **Tasks UI del plan referencian** la ruta de su SPEC — esa referencia es la **fuente de verdad** — y `plan-exec-loop` los lee como referencia de diseño.
|
|
103
|
+
- Es el mismo tercer modo de resolución de gap del chasis (junto a *research* y *humano*).
|
|
104
|
+
|
|
105
|
+
## Sequence
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
plan-new-loop(spec):
|
|
109
|
+
input = glob(docs/specs/NNN-spec-*.md) | ruta del argumento
|
|
110
|
+
si el spec NO tiene ## Refinement decisions + ## Q&A traceability:
|
|
111
|
+
soft-suggest /w:spec-refine (el usuario puede proceder igual)
|
|
112
|
+
session = create_or_resume("<slug>-plan-new") # CLI antepone NNN global
|
|
113
|
+
seed SESSION.Success criteria = checklist del coherence gate # verification-first, ANTES
|
|
114
|
+
work = esqueleto del plan (Delta 1) derivado del spec (+ avance del checkpoint si reanuda)
|
|
115
|
+
repeat: # motor del chasis
|
|
116
|
+
gaps = detect_gaps(work) (taxonomy Delta 2) menos los agotados
|
|
117
|
+
if gaps == ∅: break
|
|
118
|
+
batch ≤3 → sembrar CHECKPOINT.Pending/Next → resolver cada gap:
|
|
119
|
+
research (mapea código/impacto — Delta 3) · humano (structured-choice) · ui-design (Delta 4)
|
|
120
|
+
integrar + update CHECKPOINT # ciclo artifact-first
|
|
121
|
+
coherence gate (read-only) = Success criteria en verde:
|
|
122
|
+
- cada acceptance criterion del spec traza a una fase/tarea
|
|
123
|
+
- Final behavior cubre los criterios
|
|
124
|
+
- fases XS–S · tareas XS · deps sin ciclos · Impacted consistente con Solution
|
|
125
|
+
- (UI) cada pantalla/tarea UI traza a su design SPEC y no contradice ## UI spec
|
|
126
|
+
lo que falle → vuelve como gap
|
|
127
|
+
structured_choice(contenido: [Guardar plan, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
128
|
+
Guardar → write docs/plans/PPP-plan-<slug>.md (con confirmación si existe)
|
|
129
|
+
finalize: CHECKPOINT persiste (+ BACKLOG solo si difiere) + cerrar session + reportar
|
|
130
|
+
```
|
|
103
131
|
|
|
104
132
|
## Convergence / exit
|
|
105
133
|
|
|
106
|
-
Sin gaps materiales → **coherence gate** (
|
|
134
|
+
- **Sin gaps materiales** → **coherence gate** (checklist del *Sequence*; la instancia PLAN-new del convergence gate del chasis). La trazabilidad criterio→tarea es una **invariante chequeada**, no una sección aparte.
|
|
135
|
+
- Pasa → `Guardar plan` (escribe con confirmación si existe) → `finalize`.
|
|
136
|
+
- `Cerrar` en cualquier momento → `finalize` (persiste `CHECKPOINT`; `BACKLOG` solo si difiere; cierra la session, reporta).
|
|
107
137
|
|
|
108
138
|
> **Después de generar:** el plan puede ir directo a `plan-exec`, o —si surgen cambios antes de ejecutar (nuevos requerimientos, ajustes de alcance)— pasar por [`plan-refine-loop`](../plan-refine-loop/SKILL.md) (`/w:plan-refine`, auxiliar y **no obligatorio**), que lo refina in place.
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
name: plan-refine-loop
|
|
3
3
|
description: >-
|
|
4
4
|
Refina un plan existente (docs/plans/PPP-plan-<slug>.md) editándolo IN
|
|
5
|
-
PLACE
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(traza, sin gating), y si el refine toca UI compone ui-design y
|
|
12
|
-
produce/actualiza design SPECs por pantalla. Lo arranca /w:plan-refine;
|
|
13
|
-
reanudable y re-corrible a demanda. Invocar cuando un plan ya generado deba
|
|
14
|
-
ajustarse antes de ejecutarlo.
|
|
5
|
+
PLACE — paso auxiliar y NO obligatorio antes de plan-exec. Heir del chasis
|
|
6
|
+
(loops/CHASSIS.md). Deltas: reusa la gap taxonomy y el coherence gate de
|
|
7
|
+
plan-new-loop, agrega Refinement decisions / Q&A traceability (traza, sin
|
|
8
|
+
gating), y produce/actualiza design SPECs vía ui-design si el refine toca
|
|
9
|
+
UI. Lo arranca /w:plan-refine; reanudable y re-corrible a demanda. Invocar
|
|
10
|
+
cuando un plan ya generado deba ajustarse antes de ejecutarlo.
|
|
15
11
|
---
|
|
16
12
|
|
|
17
13
|
# plan-refine-loop
|
|
@@ -40,7 +36,7 @@ Actualiza `docs/plans/PPP-plan-<slug>.md` **in place** (cuando el usuario elige
|
|
|
40
36
|
|
|
41
37
|
## Inherits
|
|
42
38
|
|
|
43
|
-
Leé **[`../CHASSIS.md`](../CHASSIS.md)**
|
|
39
|
+
Leé **[`../CHASSIS.md`](../CHASSIS.md)** — el **motor completo** del loop — **siempre antes** de estos deltas. *(Si `../` no resuelve: `CHASSIS.md` junto a este archivo — regla global de layout, chasis § Resolución de referencias.)*
|
|
44
40
|
|
|
45
41
|
## Internal sessions — instancia PLAN-refine
|
|
46
42
|
|
|
@@ -90,10 +86,38 @@ El resume **keya off el `CHECKPOINT`** de la refine session, no de un archivo "r
|
|
|
90
86
|
|
|
91
87
|
1. **En curso** (existe `CHECKPOINT.md` en la refine session) → reanuda desde el avance (gaps resueltos, Q&A, `attempts`, research inline en curso).
|
|
92
88
|
2. **Sin avance** (no hay CHECKPOINT y el plan **no** tiene `Refinement decisions`/`Q&A traceability`) → arranca desde cero leyendo el plan (`PPP-plan-*.md`).
|
|
93
|
-
3. **Ya refinado / re-refine on demand** (
|
|
89
|
+
3. **Ya refinado / re-refine on demand** (sin CHECKPOINT abierto, pero el plan **ya tiene** las 2 secciones) → **operación de primera clase**, cuantas veces haga falta mientras el flujo siga en PLAN:
|
|
90
|
+
- `create_or_resume` detecta la refine session existente (típicamente **cerrada** tras converger) por descriptor + `## Origin` y la **reabre**: `aw session-resume --code <NNN> --reopen` (detección: `aw sessions --state all`).
|
|
91
|
+
- Re-refinamiento incremental leyendo el **plan mismo**; al `Guardar`, edita in place con confirmación.
|
|
94
92
|
|
|
95
93
|
> **Continuidad inter-turno** (chasis, fila 2): un **comando de flujo** abre "nueva línea de trabajo" (sesión nueva) — **salvo re-correr el mismo flujo sobre la misma entrada** (mismo plan), que hace `create_or_resume` (reanuda/reabre en vez de duplicar).
|
|
96
94
|
|
|
95
|
+
## Sequence
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
plan-refine-loop(plan):
|
|
99
|
+
input = glob(docs/plans/PPP-plan-*.md) | ruta del argumento # siempre el plan mismo (in place)
|
|
100
|
+
session = create_or_resume("<slug>-plan-refine") # reabre si existe (ver Compact / resume)
|
|
101
|
+
seed SESSION.Success criteria = checklist del coherence gate # verification-first, ANTES
|
|
102
|
+
work = read(plan) (+ el spec si hay que re-alinear; + avance del checkpoint si reanuda)
|
|
103
|
+
repeat: # motor del chasis
|
|
104
|
+
gaps = detect_gaps(work) (taxonomy de plan-new + deriva plan↔spec) menos los agotados
|
|
105
|
+
if gaps == ∅: break
|
|
106
|
+
batch ≤3 → sembrar CHECKPOINT.Pending/Next → resolver cada gap:
|
|
107
|
+
research (acotado al delta — Delta 3) · humano (structured-choice) ·
|
|
108
|
+
ui-design (Delta 4, solo pantallas nuevas/cambiadas)
|
|
109
|
+
integrar + update CHECKPOINT # ciclo artifact-first
|
|
110
|
+
coherence gate (read-only) = Success criteria en verde:
|
|
111
|
+
- checklist de plan-new (criterio→tarea · Final behavior · XS–S/XS · deps · Impacted↔Solution · UI→SPEC vigente)
|
|
112
|
+
- propio del re-refine: el plan quedó REALINEADO con lo que cambió
|
|
113
|
+
lo que falle → vuelve como gap
|
|
114
|
+
structured_choice(contenido: [Guardar plan refinado, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
115
|
+
Guardar → edit in place (con confirmación) + inserta/actualiza Refinement decisions + Q&A traceability
|
|
116
|
+
finalize: CHECKPOINT persiste (+ BACKLOG solo si difiere) + cerrar session + reportar
|
|
117
|
+
```
|
|
118
|
+
|
|
97
119
|
## Convergence / exit
|
|
98
120
|
|
|
99
|
-
Sin gaps materiales → **coherence gate** (
|
|
121
|
+
- **Sin gaps materiales** → **coherence gate** (checklist del *Sequence*; el mismo gate de plan-new + la realineación propia del re-refine).
|
|
122
|
+
- Pasa → `Guardar plan refinado` (edita in place con confirmación) → `finalize`.
|
|
123
|
+
- `Cerrar` en cualquier momento → `finalize` (persiste `CHECKPOINT`; `BACKLOG` solo si difiere; cierra la session, reporta).
|
|
@@ -2,16 +2,13 @@
|
|
|
2
2
|
name: quick-loop
|
|
3
3
|
description: >-
|
|
4
4
|
El atajo liviano de agent-workflow: resuelve una tarea acotada (fix, ajuste
|
|
5
|
-
chico)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
queda diferida) si el objetivo excede un quick o la tarea crece. NO toca
|
|
13
|
-
docs/. Lo arranca /w:quick y es reanudable. Invocar para cambios pequeños y
|
|
14
|
-
directos que no ameritan spec ni plan formal.
|
|
5
|
+
chico) desde el prompt, con ceremonia mínima y un solo commit. Heir del
|
|
6
|
+
chasis (loops/CHASSIS.md + CODE-POLICIES.md). Deltas: sin plan-doc (el
|
|
7
|
+
prompt ES la tarea), session ligera única <slug>-quick, gate de tamaño a la
|
|
8
|
+
entrada y escalación EN VIVO a SPEC (a PLAN queda diferida) si el objetivo
|
|
9
|
+
excede un quick o la tarea crece. NO toca docs/. Lo arranca /w:quick;
|
|
10
|
+
reanudable. Invocar para cambios pequeños y directos que no ameritan spec
|
|
11
|
+
ni plan formal.
|
|
15
12
|
---
|
|
16
13
|
|
|
17
14
|
# quick-loop
|
|
@@ -41,7 +38,7 @@ QUICK
|
|
|
41
38
|
|
|
42
39
|
## Inherits
|
|
43
40
|
|
|
44
|
-
Leé **[`../CHASSIS.md`](../CHASSIS.md)**
|
|
41
|
+
Leé **[`../CHASSIS.md`](../CHASSIS.md)** — el **motor completo** del loop — **y** **[`../CODE-POLICIES.md`](../CODE-POLICIES.md)** — las *Políticas de loops que editan código* — **siempre antes** de estos deltas. *(Si `../` no resuelve: mismos nombres junto a este archivo — regla global de layout, chasis § Resolución de referencias.)*
|
|
45
42
|
|
|
46
43
|
## Composes
|
|
47
44
|
|
|
@@ -60,12 +57,15 @@ Leé **[`../CHASSIS.md`](../CHASSIS.md)** (instalación normal) **o** `CHASSIS.m
|
|
|
60
57
|
- **Seguir en quick** → continúa normal (`create_or_resume` + loop).
|
|
61
58
|
- **Recortar alcance** → la IA propone la **sub-tarea que SÍ cabe** en un quick; el loop sigue con ella (`SESSION.Objective` = la sub-tarea; el prompt original queda en el `## Origin` de la session) y el resto se difiere al `BACKLOG` ("recortado en el gate — puede ameritar spec aparte, `/w:spec-new`").
|
|
62
59
|
- **Anti-duplicado** (espíritu `create_or_resume`): si ya existe un spec cuyo `## Origin` referencia este mismo objetivo (o una session `*-spec-refine` equivalente), la recomendada pasa a ser **retomar ese spec** (semántica `/w:spec-refine`) — nunca materializar un segundo borrador.
|
|
63
|
-
- **Transición en vivo a SPEC** (compartida por el gate y la escalación mid-loop)
|
|
60
|
+
- **Transición en vivo a SPEC** (compartida por el gate y la escalación mid-loop). Al aceptar, la línea de trabajo **pasa al flujo SPEC**: el consentimiento explícito en la structured-choice **equivale a invocar el comando destino** (*excepción consentida* — regla 3 de la *Regla de continuidad*, [`../../SKILL.md`](../../SKILL.md) § *Contexto operativo*). Ya del lado SPEC:
|
|
61
|
+
1. **Materializar el borrador** por el procedimiento de [`../../commands/spec-new.md`](../../commands/spec-new.md): `aw next-number docs/specs`, slug, esquema, single-pass **SIN investigación**. `## Origin` = "escalado desde `/w:quick`" + el prompt original (+ la session quick de origen si existe).
|
|
62
|
+
2. **Cargar y ejecutar** [`../spec-refine-loop/SKILL.md`](../spec-refine-loop/SKILL.md) — aplanada: `../w-spec-refine-loop/SKILL.md` — sobre ese spec (patrón trampolín).
|
|
63
|
+
3. La session del run es la `NNN-<slug>-spec-refine` **normal** de ese loop (el CLI numera; su `## Origin` registra la escalación). **Invariante 2 intacto**: quick, mientras es quick, no escribe `docs/` — el borrador lo escribe el flujo SPEC, post-consentimiento.
|
|
64
64
|
- **Escalación mid-loop + handoff**: si la tarea crece (mismas señales del gate) → propone subir a **SPEC/PLAN** (structured-choice, recomendación primera). Si el usuario acepta:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
1. El **código ya editado queda** en el working tree (no se revierte) y se **registra** en `CHECKPOINT` + `BACKLOG`: "cambios sin commitear en `<fuente>` — decidir commit/descartar al retomar" (patrón "commit rechazado", [`../CODE-POLICIES.md`](../CODE-POLICIES.md) § *Git seguro*).
|
|
66
|
+
2. La session quick va a `finalize` con el **puntero** en `BACKLOG`: a **PLAN** → "escalado a `docs/plans/PPP` — retomar ahí" (**diferido como hoy**: siembra + puntero, sin entrar en vivo); a **SPEC** → "escalado a `docs/specs/NNN` — **continuado en vivo** (session `NNN-<slug>-spec-refine`)".
|
|
67
|
+
3. Los artefactos (`DECISION`, `SCRIPTS.sql`) **quedan en la session quick** como contexto referenciable por la nueva session (no se migran).
|
|
68
|
+
4. **SPEC entra en vivo**: tras el `finalize` corre la *Transición en vivo a SPEC* (borrador **solo si no existe** spec para este objetivo; luego el loop). **Asimetría** intacta: PLAN puede **absorber** el avance (plan-exec retoma el working tree existente); SPEC **reinicia** el ciclo de diseño y trata el código a medias como contexto/referencia, no como trabajo ya ingerido.
|
|
69
69
|
|
|
70
70
|
## Continuidad entre prompts (contexto operativo)
|
|
71
71
|
|
|
@@ -2,16 +2,13 @@
|
|
|
2
2
|
name: spec-refine-loop
|
|
3
3
|
description: >-
|
|
4
4
|
Refina un spec borrador (docs/specs/NNN-spec-<slug>.md) editándolo IN PLACE
|
|
5
|
-
hasta dejarlo sin ambigüedad. Heir del chasis
|
|
6
|
-
(loops/CHASSIS.md — motor gap-driven convergente: session única con research
|
|
7
|
-
inline, structured-choice ≤3 preguntas + control flow, artefactos como log
|
|
8
|
-
vivo, compact/resume, convergence gate); aquí viven solo sus deltas SPEC:
|
|
5
|
+
hasta dejarlo sin ambigüedad. Heir del chasis (loops/CHASSIS.md). Deltas:
|
|
9
6
|
gap taxonomy de spec, analyze gate, sección ## UI spec vía la capacidad
|
|
10
|
-
ui-design
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
ui-design, y agrega Refinement decisions + Q&A traceability — la marca de
|
|
8
|
+
refinado que plan-new detecta. Lo arranca /w:spec-refine (o la escalación
|
|
9
|
+
en vivo desde quick-loop); reanudable vía CHECKPOINT y re-corrible a
|
|
10
|
+
demanda. Invocar para refinar/desambiguar una especificación antes de
|
|
11
|
+
planificar.
|
|
15
12
|
---
|
|
16
13
|
|
|
17
14
|
# spec-refine-loop
|
|
@@ -20,7 +17,7 @@ description: >-
|
|
|
20
17
|
|
|
21
18
|
## Inherits
|
|
22
19
|
|
|
23
|
-
Leé **[`../CHASSIS.md`](../CHASSIS.md)**
|
|
20
|
+
Leé **[`../CHASSIS.md`](../CHASSIS.md)** — el **motor completo** del loop — **siempre antes** de estos deltas. *(Si `../` no resuelve: `CHASSIS.md` junto a este archivo — regla global de layout, chasis § Resolución de referencias.)*
|
|
24
21
|
|
|
25
22
|
## Flow
|
|
26
23
|
SPEC
|
|
@@ -57,7 +54,7 @@ Doctrina completa en el chasis (§ *Internal sessions* + *Numeración*). La inst
|
|
|
57
54
|
|
|
58
55
|
El gap **UI sin especificar** (cuando el requerimiento involucra UI; ver *Gap taxonomy*) se resuelve **componiendo** la capacidad **`ui-design`** (default built-in `ui-spec`; rebindeable vía `.workflow/skills.toml`): autora el UI spec nativamente (estructura, vocabulario, formato Markdown). Es un tercer modo de resolución de gap (junto a *research* y *humano*): el loop aporta la iteración/Q&A que el viejo servicio no tenía (design-system, tema, variantes, desambiguación) **vía la misma structured-choice**, y lo integra como sección `## UI spec` del spec.
|
|
59
56
|
|
|
60
|
-
> **Dos niveles de la misma capacidad:** aquí (SPEC) produce
|
|
57
|
+
> **Dos niveles de la misma capacidad:** aquí (SPEC) produce `## UI spec` — el *qué* de la UI, grano grueso; en PLAN, los loops de plan producen **design SPECs por pantalla** derivados de esa sección (ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)).
|
|
61
58
|
|
|
62
59
|
Otras capacidades transversales que el motor usa siempre: `research` (research **inline** — chasis § *Research*), `sql` (regla BD en research — chasis). Todas se resuelven por config; `off` → el loop sigue sin la capacidad y, si era necesaria, lo dice o pregunta. La **prosa del spec** sigue las convenciones de redacción **ambientes** (el host auto-aplica una skill de writing instalada si está presente), no un rol compuesto.
|
|
63
60
|
|
|
@@ -46,7 +46,7 @@ Y **siempre** prohibido, aún cuando el usuario pida commit: `--no-verify` (resp
|
|
|
46
46
|
|
|
47
47
|
### Operaciones read-only (siempre permitidas, sin preguntar)
|
|
48
48
|
|
|
49
|
-
`status` · `log` · `diff` · `branch --show-current` · `rev-parse` · `show`. `git checkout` (cambio de rama) **no** es read-only: requiere *structured-choice* (
|
|
49
|
+
`status` · `log` · `diff` · `branch --show-current` · `rev-parse` · `show`. `git checkout` (cambio de rama) **no** es read-only: requiere *structured-choice* (regla canónica: `../../loops/CHASSIS.md` § *Structured-choice*; binding por arnés: `../../harness/SKILL.md`) aunque no sea destructivo (ver verificación de rama).
|
|
50
50
|
|
|
51
51
|
### Verificación de rama (antes de editar)
|
|
52
52
|
|
|
@@ -68,7 +68,7 @@ Casos:
|
|
|
68
68
|
Ante cualquier pedido o disparo de commit (cierre de loop, "commitea esto", "guardá los cambios"):
|
|
69
69
|
|
|
70
70
|
1. Resolver las fuentes y su estado dirty/rama con `aw sources` (inventario con git status enriquecido; fallback: git directo por fuente).
|
|
71
|
-
2. Si hay 1+ fuentes `dirty=true`, invocar **una sola** *structured-choice* con una pregunta de contenido por fuente dirty (
|
|
71
|
+
2. Si hay 1+ fuentes `dirty=true`, invocar **una sola** *structured-choice* con una pregunta de contenido por fuente dirty (≤3 por llamada + control `flow`; si N>3, en tandas):
|
|
72
72
|
- Header de la pregunta: el `alias` de la fuente.
|
|
73
73
|
- Opciones: "Aprobar sugerido (Recomendado)" con el mensaje canónico / "Saltar esta fuente". `Other` = mensaje custom.
|
|
74
74
|
3. Ejecutar `git -C <path> commit -m "<msg>"` solo en las fuentes aprobadas, **una a una**. Respetar hooks (sin `--no-verify`).
|
|
@@ -116,4 +116,4 @@ Ninguno en `docs/`. Produce commits **solo** cuando el usuario aprueba, en los r
|
|
|
116
116
|
|
|
117
117
|
## Source
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Racional e historia: diseño (`docs/referencias/workflow-roles/git.md`).
|
|
@@ -24,7 +24,7 @@ El discriminador clave:
|
|
|
24
24
|
| La pregunta... | Acción |
|
|
25
25
|
|---|---|
|
|
26
26
|
| puede responderse leyendo repo / datos (hechos objetivos del sistema) | **investigar** |
|
|
27
|
-
| depende de preferencias, prioridades o decisiones del usuario | **preguntar al humano** vía *structured-choice* (
|
|
27
|
+
| depende de preferencias, prioridades o decisiones del usuario | **preguntar al humano** vía *structured-choice* (regla canónica: `../../loops/CHASSIS.md` § *Structured-choice*; binding por arnés: `../../harness/SKILL.md`) |
|
|
28
28
|
| está parcialmente en el repo y parcialmente en intención del usuario | investigar primero, luego preguntar solo por la parte incierta |
|
|
29
29
|
|
|
30
30
|
## Composed by
|
|
@@ -118,4 +118,4 @@ No gradua a `docs/` (invariant #1). El loop que compone esta capacidad consume l
|
|
|
118
118
|
|
|
119
119
|
## Source
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
Racional e historia: diseño (`docs/referencias/workflow-roles/research.md`).
|
|
@@ -134,4 +134,4 @@ Nunca escribe a `docs/` desde un loop (invariante 1: solo `export-*` exporta). N
|
|
|
134
134
|
|
|
135
135
|
## Source
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
Reglas autocontenidas (sin dependencia de skills externas). Racional e historia: diseño (`docs/referencias/workflow-roles/sql.md`).
|
|
@@ -32,7 +32,7 @@ Dos niveles, misma capacidad:
|
|
|
32
32
|
|
|
33
33
|
En ambos, el loop aporta lo que el servicio viejo no tenía:
|
|
34
34
|
|
|
35
|
-
- **Pregunta al humano** (design-system, tema, ambigüedades de pantalla) vía *structured-choice* (
|
|
35
|
+
- **Pregunta al humano** (design-system, tema, ambigüedades de pantalla) vía *structured-choice* (regla canónica: `../../loops/CHASSIS.md` § *Structured-choice*; binding por arnés: `../../harness/SKILL.md`).
|
|
36
36
|
- **Itera** gap-driven hasta converger.
|
|
37
37
|
- Ofrece **variantes** y **cura** el resultado.
|
|
38
38
|
|