@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "15.1.0",
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:** el **comando** señala "nueva línea de trabajo" (sesión nueva)**salvo re-correr el mismo comando sobre la misma entrada** (ej. `/w:spec-refine` sobre el mismo spec), que **no** abre otra línea: `create_or_resume` localiza la sesión de ese flujo (por descriptor + `## Origin`) y la **reanuda o reabre** (quita `.closed`), sin duplicarla; 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. **Excepción consentida:** la **escalación aceptada** dentro de un loop (ej. quick → SPEC) también 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.
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 diseño son su propia categoría —`workflow-skills/`, aparte de los comandos de flow—; en el bundle se empaquetan bajo `commands/` para que `/w:` las invoque.)
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.** *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-*`.
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 — do not break)
61
+ ## Invariants (hard rules — canonical list: [`../SKILL.md`](../SKILL.md) § *The 6 hard invariants*)
62
62
 
63
- 1. **No auto-export**: loops **never** graduate/export to `docs/`. Only `export-*` does, explicitly.
64
- 2. **Each flow touches only its `docs/` folders**: SPEC→`specs` · PLAN→`plans` · QUICK→none · rest→`export-*`. (`docs/tools` is ambient — `creating-tools`, not a flow.)
65
- 3. **Spec and plan are documents** (`docs/`), not artifacts — they never live inside a session. *(Do not confuse with the **design SPECs** `NNN-SPEC-<SLUG>.md`: per-screen UI design artifacts of PLAN sessions — see [`artifacts-design/`](artifacts-design/) — which are not the requirement-spec.)*
66
- 4. **DB scripts-only**: the AI **never executes DML/DDL**; migrations stay in `SCRIPTS.sql` (type B) and are delivered via `export-scripts`. Only read-only queries (type A) are executed via MCP.
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 when the session is created (**verification-first** — generalized TDD; see [`../../loops/CHASSIS.md`](../../loops/CHASSIS.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.
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** (`docs/plans/PPP-plan.md`, rich plan, in `plan-new-loop`), not as an exec-session artifact. This file is kept as a reference of the technical schema that the plan absorbs — in PLAN **it is not created** as a session artifact (the plan-doc carries it). It remains available only for a `quick` session that needs scoped technical context without a 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
- Technical/functional explanation of how the solution will be implemented.
6
+ How it will be implemented (technical/functional).
7
7
 
8
8
  ## Impacted
9
- Impacted components:
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
- Dependencies: sessions / documents / projects / sources / databases, etc.
12
+ Sessions / documents / sources / databases.
18
13
 
19
14
  ## Current State
20
- Simple representation of the wiring or cabling (interfaces and methods) — AS-IS behavior.
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
- Simple representation of the wiring or cabling (interfaces and methods) — TO-BE behavior.
18
+ TO-BE wiring, brief.
47
19
 
48
20
  ## Final Behavior
49
- How the entire flow should behave at the end (must be aligned with the requirements and acceptance/success criteria in SESSION.md).
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
- Time estimates for [Development] and [Internal Testing].
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, open questions.
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`. El CLI solo devuelve el número `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.
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` para obtener `NNN` (única tool de shell necesaria). El CLI solo devuelve el número; el slug lo arma este comando.
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
- 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.
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
- | Comportamiento de `/goal` (ejemplo) | Análogo agnóstico en el loop |
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
- > Cada heir instancia el frame: `spec-refine` persigue el spec y `plan-new`/`plan-refine` el plan hasta su gate; `plan-exec` persigue el plan hasta su validación final; `quick-loop` es la encarnación más directa (el prompt *es* el objetivo) el "símil a `/goal`" del modelo.
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** (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.
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 (cada heir lo instancia en su `## Sequence`, con su propia gap taxonomy): `detect_gaps(work)` — menos los gaps *agotados* (ver *Research*) — → si `∅`, **convergence gate** (ver *Convergence / exit*); si hay gaps, tomar un batch (≤3), **sembrar** `CHECKPOINT.Pending/Next` (*artifact-first*), resolver cada gap con su **resolutor** — humano (structured-choice) · research inline · una capacidad compuesta (p. ej. `ui-design`) — según la *ask-vs-research rule*, **integrar** y actualizar `CHECKPOINT` → repetir.
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* (capacidad del arnés ver [`../harness/SKILL.md`](../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**.
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
- ## Qué NO es el chasis
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
- - **No es una skill**: no tiene frontmatter, no aparece en el system prompt, no se invoca ni se bindea vía `.workflow/skills.toml`. Es un documento **referenciado**: entra al contexto solo porque un loop manda leerlo.
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 común de los loops (loops/CHASSIS.md
7
- motor gap-driven, research inline, structured-choice, artefactos como log
8
- vivo, y las políticas de loops que editan código); sus deltas viven en el
9
- cuerpo: session única reanudable, git seguro (rama verificada,
10
- commits propuestos por fuente, nunca push/--amend/--no-verify), BD solo-
11
- scripts (la IA nunca ejecuta DML/DDL), validación por fase y final, gate de
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)** (instalación normal) **o** `CHASSIS.md` junto a este archivo (instalación aplanada) — el motor completo del loop (objetivo persistente + verification-first, gap-driven, session única + research inline, structured-choice + control `flow`, compact/resume, artefactos como log vivo, numeración, convergence gate, docs/ boundary) — **y** **[`../CODE-POLICIES.md`](../CODE-POLICIES.md)** (o `CODE-POLICIES.md` junto a este archivo) — las *Políticas de loops que editan código* (git seguro · BD solo-scripts · gate de revisión de cierre) **siempre antes** de estos deltas.
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 (docs/specs/NNN-spec-<slug>.md). Heir del chasis común de
6
- los loops (loops/CHASSIS.md motor gap-driven convergente, session única
7
- con research inline, structured-choice, artefactos como log vivo); sus
8
- deltas viven en el cuerpo:
9
- el plan absorbe el nivel TECHNICAL-NOTE + Phases/Tasks con estado vivo,
10
- research de mapeo código/impacto, gap taxonomy de planificación, y si el
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. El CLI solo devuelve el número `PPP`; el loop arma el nombre completo. Para localizar planes, glob `docs/plans/PPP-plan-*.md`.
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)** (instalación normal) **o** `CHASSIS.md` junto a este archivo (instalación aplanada) — el motor completo del loop (objetivo persistente + verification-first, gap-driven, session única + research inline, structured-choice + control `flow`, compact/resume, artefactos como log vivo, numeración, convergence gate), **siempre antes** de estos deltas.
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`): autora **un design SPEC por pantalla** como artefacto de la sesión — `NNN-SPEC-<SLUG>.md` (`001-SPEC-MODAL-EXPORT.md`, `002-SPEC-ADMIN-DASHBOARD.md`; numeración local a la sesión, ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)). **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). 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. Es el mismo tercer modo de resolución de gap del chasis (junto a *research* y *humano*).
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** (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`; y si el plan incluye UI: cada pantalla/tarea UI **traza a su design SPEC** (`NNN-SPEC-*.md`) y los SPECs no contradicen el `## UI spec` del spec (si existe). 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.
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, como paso auxiliar y NO obligatorio del flujo PLAN antes de plan-
6
- exec. Es a plan-new lo que spec-refine es a spec-new. Heir del chasis común
7
- de los loops (loops/CHASSIS.md motor gap-driven, session única con
8
- research inline, structured-choice, artefactos como log vivo); reusa la gap
9
- taxonomy y el coherence gate de plan-new-loop, agrega Refinement
10
- decisions/Q&A traceability al plan
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)** (instalación normal) **o** `CHASSIS.md` junto a este archivo (instalación aplanada) — el motor completo del loop (objetivo persistente + verification-first, gap-driven, session única + research inline, structured-choice + control `flow`, compact/resume, artefactos como log vivo, numeración, convergence gate), **siempre antes** de estos deltas.
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** (no hay CHECKPOINT abierto pero el plan **ya tiene** `Refinement decisions`/`Q&A traceability`) → **operación de primera clase**: mientras el flujo siga en PLAN, re-correr `/w:plan-refine` sobre el mismo plan **cuantas veces haga falta** está soportado. `create_or_resume` detecta la refine session existente —típicamente **cerrada** tras converger— por descriptor + `## Origin` y la **reabre** (ver chasis § *Internal sessions*: detección con `aw sessions --state all` / `aw resume-summary --include-recent-closed`, reapertura con `aw session-resume --code <NNN> --reopen`); re-refinamiento incremental leyendo el **plan mismo**; al `Guardar`, edita in place con confirmación.
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** (read-only) = **`Success criteria` en verde** (*verification-first*; el "convergence gate" del chasis para PLAN, mismo que 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`, si hay UI cada pantalla/tarea UI **traza a su design SPEC vigente**, y —propio del re-refine— **el plan quedó realineado** con lo que cambió. Lo que falle **vuelve como gap**. Si pasa → *structured-choice* (contenido: `Guardar plan refinado` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, edita `docs/plans/PPP-plan-<slug>.md` in place (con confirmación) + inserta `Refinement decisions`/`Q&A traceability` → `finalize` (persiste `CHECKPOINT`; `BACKLOG` solo si difiere; cierra la session, reporta). `Cerrar` en cualquier momento → `finalize` igual.
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) directamente desde el prompt, editando código con ceremonia mínima.
6
- Heir del chasis común de los loops (loops/CHASSIS.md motor gap-driven con
7
- las políticas de loops que editan código: git seguro, BD solo-scripts, gate
8
- de revisión de cierre proporcional, sin auto-export); sus deltas viven en
9
- el cuerpo: sin fases ni plan-doc (el prompt ES la tarea),
10
- session ligera única (<slug>-quick), un solo commit, gate de tamaño a la
11
- entrada y escalación EN VIVO a SPEC (handoff + spec-refine directo; a PLAN
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)** (instalación normal) **o** `CHASSIS.md` junto a este archivo (instalación aplanada) — el motor completo del loop (objetivo persistente + verification-first, gap-driven, session única + research inline, structured-choice + control `flow`, compact/resume, artefactos como log vivo, numeración, convergence gate, docs/ boundary) — **y** **[`../CODE-POLICIES.md`](../CODE-POLICIES.md)** (o `CODE-POLICIES.md` junto a este archivo) — las *Políticas de loops que editan código* (git seguro · BD solo-scripts · gate de revisión de cierre **proporcional**)**siempre antes** de estos deltas.
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): al aceptar, la línea de trabajo **deja de ser QUICK y pasa a ser flujo SPEC** el consentimiento explícito en la structured-choice **equivale a invocar el comando** del flujo destino (excepción consentida a la regla de continuidad; ver [`../../SKILL.md`](../../SKILL.md) § *Contexto operativo*). Ya **del lado SPEC**: (1) materializar el **borrador** siguiendo el procedimiento de [`../../commands/spec-new.md`](../../commands/spec-new.md) — o `commands/spec-new.md` dentro de la skill `w` instalada (instalación aplanada) — `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); (2) **cargar y ejecutar** [`../spec-refine-loop/SKILL.md`](../spec-refine-loop/SKILL.md) — o `../w-spec-refine-loop/SKILL.md` (instalación aplanada, skill hermana) — sobre ese spec, mismo patrón "cargalo y ejecutalo" de los comandos trampolín. La session del run es la `NNN-<slug>-spec-refine` **normal** de ese loop (el CLI numera; su `## Origin` registra la escalación). El **invariante 2 queda intacto**: quick, mientras es quick, no escribe `docs/` — el borrador lo escribe el flujo SPEC, post-consentimiento.
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
- - 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" ([`../CODE-POLICIES.md`](../CODE-POLICIES.md) § *Git seguro*: no revertir **y** registrar lo sin commitear). Crítico en la rama **SPEC**, que no retoma el working tree;
66
- - la session quick va a `finalize`, persistiendo `CHECKPOINT` + `BACKLOG` con el **puntero**: 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
- - los artefactos (`DECISION`, `SCRIPTS.sql`) **quedan en la session quick** como contexto referenciable por la nueva session (no se migran);
68
- - **SPEC entra en vivo**: tras el `finalize`, corre la *Transición en vivo a SPEC* (borrador vía procedimiento spec-new **solo si no existe** spec para este objetivo; luego el loop). **Asimetría** intacta: 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.
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 común de los loops
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 cuando el requerimiento involucra UI, y agrega Refinement
11
- decisions + Q&A traceability al spec la marca de refinado que plan-new
12
- detecta. Lo arranca /w:spec-refine (o la escalación en vivo desde
13
- quick-loop); reanudable vía CHECKPOINT y re-corrible a demanda. Invocar cuando haya que refinar/desambiguar una especificación
14
- antes de planificar.
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)** (instalación normal) **o** `CHASSIS.md` junto a este archivo (instalación aplanada) — el motor completo del loop (objetivo persistente + verification-first, gap-driven, session única + research inline, structured-choice + control `flow`, compact/resume, artefactos como log vivo, numeración, convergence gate), **siempre antes** de estos deltas.
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 la sección `## UI spec` del spec — el *qué* de la UI, grano grueso. En PLAN, `plan-new-loop`/`plan-refine-loop` componen la **misma** capacidad para producir **design SPECs por pantalla** (`NNN-SPEC-<SLUG>.md`, artefactos de su sesión ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)), derivados de esta sección si existe.
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* (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`**; sin elección estructurada degrada a **markdown numerado**) aunque no sea destructivo (ver verificación de rama).
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 (máx 4 simultáneas → **≤3 preguntas de contenido + 1 control `flow`**; si N>3, en tandas):
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
- Reciclada de la doctrina vieja: `doctrine/session/references/commits-policy.md` (Reglas 1-5: propose-then-execute, formato canónico, bypass) + `doctrine/session/references/branch-verification.md` (Casos A/B/C, cross-fuente hard gate). La verificación delega lo mecánico al CLI (`aw check-branch`, `aw sources`) — computarlo a mano en cada task pagaba tokens por trabajo que el runtime ya expone; el git read-only directo queda como fallback para repos sin workspace.
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* (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**. |
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
- Reciclado de `analyze-investigate`, `analyze-synthesize` y `analyze-conclude` del bundle viejo. Se conserva: el modelo de investigacion divergente → sintesis → conclusiones; las reglas read-only; el cost guard de queries; la discriminacion de gaps. Se descarta: la terminología de `flow=analyze`, `EVIDENCE.md`/`FINDINGS.md` como nombres canónicos (ahora `ANALYSIS-FILE.md`/`CONCLUSIONS.md`), el lifecycle de sesiones legacy (la research ahora es **inline**, sin sesión propia), y la modulacion por modalidad (technical/incident/data) — la skill de research es de propósito general.
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
- Reciclada de `standards/sql-script-organizer/` (staging `SCRIPTS.sql`, markers, 4 categorías, estilo) + `standards/sql-rollback-generator/` (derivación de rollback, irreversibles, Fase 5) + reglas de estilo de `standards/coding-standards/references/database-conventions.md` (esa familia hoy es **ambiente** —extraída del workflow—; las reglas quedan **inlined** arriba, sin dependencia externa). Se moderniza al modelo nuevo: el bundle lo arma `export-scripts`, no la skill; el "release/graduate" viejo se reemplaza por `export-scripts`.
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* (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**.
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