@tacuchi/agent-workflow-cli 14.6.0 → 14.8.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/README.md CHANGED
@@ -16,11 +16,11 @@ The harness has three layers plus a permanent `docs/` zone:
16
16
 
17
17
  - **Layer 1 · Commands** (`/w:*`) — the only thing the user invokes:
18
18
  - **SPEC** — `/w:spec-new` (single-pass draft) → `/w:spec-refine` (gap-driven loop) → `docs/specs/`.
19
- - **PLAN** — `/w:plan-new` → `/w:plan-exec` → `docs/plans/`.
19
+ - **PLAN** — `/w:plan-new` → (`/w:plan-refine` — aux, optional) → `/w:plan-exec` → `docs/plans/`.
20
20
  - **QUICK** — `/w:quick` — lightweight shortcut.
21
21
  - **EXPORTS** — `/w:export-scripts` · `export-manuals` · `export-diagrams` · `export-reports` (the only path that promotes artifacts to `docs/`).
22
22
  - **Bootstrap** — `/w:workspace-init` turns any folder into a workspace (1+ sources; no project/hub distinction).
23
- - **Layer 2 · Loops** — the AI runs them whole: `spec-refine-loop` (chassis) · `plan-new-loop` · `plan-exec-loop` · `quick-loop`. Each loop is a **persistent goal** that runs until its success criteria are green (verification-first); gap-driven, with **structured-choice** lifecycle control (compact/close — `AskUserQuestion` on Claude Code, numbered markdown elsewhere) and resumable `CHECKPOINT`.
23
+ - **Layer 2 · Loops** — the AI runs them whole: `spec-refine-loop` (chassis) · `plan-new-loop` · `plan-refine-loop` · `plan-exec-loop` · `quick-loop`. Each loop is a **persistent goal** that runs until its success criteria are green (verification-first); gap-driven, with **structured-choice** lifecycle control (compact/close — `AskUserQuestion` on Claude Code, numbered markdown elsewhere) and resumable `CHECKPOINT`.
24
24
  - **Layer 3 · Sessions + artifacts** — internal, ephemeral process state under `.workflow/sessions/` (`SESSION` · `CHECKPOINT` · `BACKLOG` · `SCRIPTS.sql` · `ANALYSIS-FILE` · `CONCLUSIONS` · `DECISION` · …). Sessions are slug-named folders, created by loops, never by the user.
25
25
 
26
26
  **Pluggable capabilities.** Loops compose capability **roles** (`ui-design`, `sql`, `git`, `research`, `diagrams`, `overview`); the concrete skill bound to each role is resolved via `.workflow/skills.toml` (cascade: built-in default → `~/.workflow/skills.toml` → workspace). Inspect bindings with `aw skills` (advisory: it also warns when a bound skill is not installed in the standard skill roots — the binding itself is not auto-validated). Code/testing/writing conventions **and tool authoring** (`creating-tools`) are **not** roles — they're ambient skills the host auto-applies when present, independent of the workflow. Per-source launch scripts live under `.workflow/launch/` (machine-specific, gitignored); created tools live under `docs/tools/`.
@@ -32,7 +32,7 @@ The harness has three layers plus a permanent `docs/` zone:
32
32
  The published tarball bundles the universal skill set under `skills/w/`. Install it into your host with `--target` (required):
33
33
 
34
34
  ```bash
35
- agent-workflow self install --target claude # or: codex · warp · oz · agents
35
+ agent-workflow self install --target claude # or: codex · warp · oz · agents · gemini · opencode · crush
36
36
  agent-workflow self install --target all --confirm-all
37
37
  agent-workflow self detect-hosts # which hosts are present + already have it
38
38
  agent-workflow self install --target claude --dry-run
@@ -51,6 +51,9 @@ By default the CLI clears the target host's plugin cache before installing (opt
51
51
  | `warp` | `~/.warp/skills/w/` | skipped (uses rules/notebooks) | skipped (no hook system) |
52
52
  | `oz` | `~/.agents/skills/w/` | skipped | skipped |
53
53
  | `agents` | `~/.agents/skills/w/` | skipped | skipped |
54
+ | `gemini` | `~/.gemini/skills/w/` | skipped (native `.toml` commands deferred) | skipped |
55
+ | `opencode` | `~/.opencode/skills/w/` | skipped (deferred) | skipped |
56
+ | `crush` | `~/.crush/skills/w/` | skipped (deferred) | skipped |
54
57
 
55
58
  For hosts where a layer is skipped, the SKILL is sufficient — the AI reads it and invokes `agent-workflow <subcommand>` directly.
56
59
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "14.6.0",
3
+ "version": "14.8.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": {
@@ -58,7 +58,7 @@ Run [`/w:workspace-init`](commands/workspace-init.md) once to turn a folder into
58
58
 
59
59
  1. **No auto-export** — loops never promote artifacts to `docs/`; only `export-*` does, explicitly.
60
60
  2. **Folder ownership** — SPEC→`specs`; PLAN→`plans`; QUICK→none; the rest→`export-*`. (`docs/tools` is ambient — written by the `creating-tools` skill, not a flow.)
61
- 3. **spec & plan are documents** (`docs/`), not artifacts.
61
+ 3. **spec & plan are documents** (`docs/`), not artifacts. *(Not to be confused with the **design SPECs** `NNN-SPEC-<SLUG>.md`: per-screen UI design artifacts of PLAN sessions — see [`artifacts/artifacts-design/`](artifacts/artifacts-design/).)*
62
62
  4. **DB scripts-only** — the AI never executes DML/DDL; migrations land in `SCRIPTS.sql` and ship via `export-scripts`; reads are read-only via MCP.
63
63
  5. **Git-safe** — verify the expected branch before editing; propose commits per source; never `push`/`--amend`/`--no-verify`.
64
64
  6. **All loops** — gap-driven convergent; one session per run (research inline); **structured-choice** (capability — see [`harness/`](harness/SKILL.md); on Claude Code: `AskUserQuestion`) with ≤3 content questions + 1 always-present `flow` control (`Compactar`/`Cerrar`); a **convergence gate** before saving; compact/resume; artifacts as a live log (`CHECKPOINT` always; `BACKLOG` only when deferring).
package/skills/w/SKILL.md CHANGED
@@ -112,6 +112,8 @@ Un loop es una skill que enseña a la IA **cómo iterar** hasta un entregable. P
112
112
 
113
113
  Cada loop tiene un **convergence gate** read-only antes de ofrecer `Guardar`/`done`, que es operacionalmente **"todos los `SESSION.Success criteria` en verde"** (*verification-first*): chequea invariantes propios del entregable y lo que falle vuelve como gap (en `spec-refine-loop` es el *analyze gate*; en `plan-new-loop` —y en `plan-refine-loop`— la coherencia del plan; en `plan-exec-loop`, la validación final; en `quick-loop`, una validación puntual proporcional). El detalle vive en cada loop.
114
114
 
115
+ Los loops que **editan código** (`plan-exec-loop` por fase, `quick-loop` proporcional) corren además un **gate de revisión de cierre** ANTES de proponer cada commit: re-lectura **independiente** del diff aplicando las **convenciones ambientes instaladas** (el host las auto-descubre; el workflow crea el momento, no las bindea — no es un rol); los hallazgos se corrigen (re-validando) o se difieren justificados. Nada llega a un commit propuesto sin revisar. Ver `loops/plan-exec-loop/SKILL.md` § *Delta 5*.
116
+
115
117
  `spec-new` no tiene loop (single-pass): **6 comandos / 5 loops**.
116
118
 
117
119
  ### The `export-*` family (única vía artefacto → `docs/`)
@@ -145,7 +147,7 @@ Catálogo de roles y su default:
145
147
 
146
148
  | Role | Default | Tier | Composed by |
147
149
  |---|---|---|---|
148
- | `ui-design` | `ui-spec` | must | `spec-refine-loop` (UI) |
150
+ | `ui-design` | `ui-spec` | must | `spec-refine-loop` (UI) · `plan-new-loop` / `plan-refine-loop` (design SPECs) |
149
151
  | `sql` | `sql` | must | research · `plan-exec-loop` · `quick-loop` · `export-scripts` |
150
152
  | `git` | `git` | must | `plan-exec-loop` · `quick-loop` |
151
153
  | `research` | `research` | should | todos los loops (capacidad inline) |
@@ -172,7 +174,7 @@ Las únicas `must` para el ciclo de un loop son **structured-choice** y **compac
172
174
 
173
175
  1. **Sin auto-export** — los loops nunca graduan/exportan a `docs/`. Solo `export-*` lo hace, explícito.
174
176
  2. **Cada flujo toca solo sus carpetas `docs/`** — SPEC→`specs` · PLAN→`plans` · QUICK→ninguna · resto→`export-*`. (`docs/tools` no es de un flujo: lo escribe la skill ambiente `creating-tools`.)
175
- 3. **El spec y el plan son documentos** (`docs/`), no artefactos de sesión.
177
+ 3. **El spec y el plan son documentos** (`docs/`), no artefactos de sesión. *(No confundir con los **design SPECs** `NNN-SPEC-<SLUG>.md`: artefactos de diseño de UI **por pantalla** que las sesiones de PLAN producen vía la capacidad `ui-design` cuando el plan incluye UI — ver `artifacts/artifacts-design/` — no son el requirement-spec.)*
176
178
  4. **BD solo-scripts** — la IA nunca ejecuta DML/DDL; las migraciones quedan en `SCRIPTS.sql` y las aplica el usuario. Solo lecturas read-only vía MCP.
177
179
  5. **Git seguro** — rama esperada verificada antes de editar; commits propuestos por fuente; nunca `push`/`--amend`/`--no-verify`.
178
180
  6. **Chasis de loops** — **objetivo persistente + verification-first** (persigue `SESSION.Objective` hasta que sus `SESSION.Success criteria` —sembrados al inicio, TDD generalizado— están en verde) · gap-driven convergente · una sola session por run (research inline) · **structured-choice** con ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre · compactación/resume · artefactos como log vivo **artifact-first** (sembrar `Pending`/`Next` antes, `Completed` después; `CHECKPOINT` siempre; `BACKLOG` solo si difiere).
@@ -15,7 +15,7 @@ Central distinction of the model:
15
15
  | Location | `.workflow/sessions/NNN-…/` | `docs/<category>/` |
16
16
  | Who manages it | a **loop**, through a **session** | produced by a loop/command at "save" time |
17
17
  | User-facing | No (internal) | Yes |
18
- | Examples | `CHECKPOINT`, `ANALYSIS-FILE`, `CONCLUSIONS`, `SCRIPTS.sql`, `TASKS`, `DECISION` | `specs`, `plans`, `manuals`, `scripts`, `diagrams`, `reports` |
18
+ | Examples | `CHECKPOINT`, `ANALYSIS-FILE`, `CONCLUSIONS`, `SCRIPTS.sql`, `TASKS`, `DECISION`, `NNN-SPEC-<SLUG>.md` | `specs`, `plans`, `manuals`, `scripts`, `diagrams`, `reports` |
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
 
@@ -29,12 +29,14 @@ Sessions are created by the loops as needed — **one session per run**. The ses
29
29
 
30
30
  | Session type | Created by | Artifacts | Notes |
31
31
  |---|---|---|---|
32
- | **refine** | `spec-refine-loop` · `plan-new-loop` | `SESSION` · `CHECKPOINT` · `BACKLOG` (on close, if any) | Owns the loop run (spec-refine, plan-new). |
32
+ | **refine** | `spec-refine-loop` · `plan-new-loop` · `plan-refine-loop` | `SESSION` · `CHECKPOINT` · `BACKLOG` (on close, if any) · `NNN-SPEC-<SLUG>.md` (PLAN sessions with UI) | Owns the loop run (spec-refine, plan-new, plan-refine). |
33
33
  | **exec** | `plan-exec-loop` | `SESSION` · `CHECKPOINT` · `BACKLOG` (on close, if any) · `DECISION` · `SCRIPTS.sql` | A single per-run exec session (**not** one per phase). No `TECHNICAL-NOTE` or own `TASKS` — detail lives in the plan-doc (living). `TASKS` is optional for internal breakdown. |
34
34
  | **quick** | `quick-loop` | `SESSION` · `CHECKPOINT` · `BACKLOG` (on close, if any) · `DECISION` · `SCRIPTS.sql` | Single session, single commit. |
35
35
 
36
36
  > **Inline research (any session):** research is **not** a session type. When any session (`refine`/`exec`/`quick`) needs to investigate, it produces research artifacts **inline**: `ANALYSIS-FILE` (optional scratchpad), `CONCLUSIONS`, and read-only `SCRIPTS.sql` (if DB). These are written into the active session — there is no separate research session.
37
37
 
38
+ > **Inline design (PLAN sessions):** when the plan **includes UI**, `plan-new-loop`/`plan-refine-loop` compose the **`ui-design`** capability and produce **design SPECs** — `NNN-SPEC-<SLUG>.md`, one **per screen** (`001-SPEC-MODAL-EXPORT.md`, `002-SPEC-ADMIN-DASHBOARD.md`), numbering local to the session — inside their own session. The plan-doc **references** them (UI Tasks) and `plan-exec-loop` reads them as the design reference. They are **not** the requirement-spec (invariant 3): they are process artifacts. See [`artifacts-design/`](artifacts-design/).
39
+
38
40
  > **PLAN note (rich plan):** the plan-doc (`docs/plans/PPP-plan.md`) absorbs inline the `TECHNICAL-NOTE` level (Solution/Impacted/AS-IS/TO-BE/Validations…) **and** the `Phases`/`Tasks`. Therefore exec sessions do **not** carry a `TECHNICAL-NOTE` or own `TASKS` artifact: the technical detail and progress live in the plan-doc (living). `TASKS` remains as an optional artifact for sessions that need their own internal breakdown.
39
41
 
40
42
  ---
@@ -51,6 +53,7 @@ Sessions are created by the loops as needed — **one session per run**. The ses
51
53
  |---|---|---|
52
54
  | [`artifacts-core/`](artifacts-core/) | common to any session | `SESSION` · `TASKS` · `CHECKPOINT` · `BACKLOG` · `SCRIPTS.sql` |
53
55
  | [`artifacts-research/`](artifacts-research/) | inline research (any session) | `ANALYSIS-FILE` · `CONCLUSIONS` |
56
+ | [`artifacts-design/`](artifacts-design/) | inline design (PLAN sessions with UI) | `NNN-SPEC-<SLUG>.md` (design SPEC, one per screen) |
54
57
  | [`artifacts-exec/`](artifacts-exec/) | `exec` / `quick` session | `DECISION` · `TECHNICAL-NOTE` (schema reference; absorbed by the plan-doc) |
55
58
 
56
59
  ---
@@ -59,5 +62,5 @@ Sessions are created by the loops as needed — **one session per run**. The ses
59
62
 
60
63
  1. **No auto-export**: loops **never** graduate/export to `docs/`. Only `export-*` does, explicitly.
61
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.)
62
- 3. **Spec and plan are documents** (`docs/`), not artifacts — they never live inside a session.
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.)*
63
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.
@@ -14,7 +14,7 @@ Who created it and from where:
14
14
 
15
15
  ## Type
16
16
  Session type, **set by the parent loop** (not the user). Authoritative catalog: `../README.md`.
17
- - `refine` — owns a spec-refine / plan-new loop run (SESSION + CHECKPOINT; + BACKLOG on close)
17
+ - `refine` — owns a spec-refine / plan-new / plan-refine loop run (SESSION + CHECKPOINT; + BACKLOG on close; + `NNN-SPEC-<SLUG>.md` in PLAN sessions with UI — see [`../artifacts-design/`](../artifacts-design/))
18
18
  - `exec` — execute work; a single per-run session (PLAN), not one per phase
19
19
  - `quick` — lightweight execution (≈ `exec`: single session, single commit) (QUICK)
20
20
 
@@ -0,0 +1,42 @@
1
+ # NNN-SPEC-<SLUG>.md — design SPEC (UI)
2
+
3
+ > What it is: the **design specification of ONE screen** (modal, dashboard, form, …), produced by composing the **`ui-design`** capability (built-in default [`ui-spec`](../../roles/ui-spec/SKILL.md)) when the **plan includes UI**. It is a **session artifact** of the PLAN loops (`plan-new-loop` · `plan-refine-loop`) — process-facing, internal — and `plan-exec-loop` reads it as the **design reference** when implementing the UI tasks.
4
+ >
5
+ > **It is NOT the spec.** The requirement-spec (`docs/specs/NNN-spec-<slug>.md`) and the plan remain **documents** (invariant 3). The design SPEC is a different thing: the per-screen UI design detail, ephemeral and process-facing, living inside the session. Spelling disambiguates: `SPEC` (UPPERCASE, artifact) vs `spec` (lowercase, document).
6
+
7
+ ## Naming
8
+
9
+ `NNN-SPEC-<SLUG>.md`, all UPPERCASE (session-artifact convention):
10
+
11
+ - `NNN` — sequence **local to the session** (001, 002, … in creation order). Numbered by **the loop**; the CLI is not involved (do not confuse with the global session `NNN` from `aw session-create`, nor with `aw next-number` for `docs/`).
12
+ - `SLUG` — short screen name in UPPER-KEBAB (`[A-Z0-9-]`, ≤ ~4 words).
13
+ - **One screen per file.** Several screens = several SPECs.
14
+
15
+ Examples: `001-SPEC-MODAL-EXPORT.md` · `002-SPEC-ADMIN-DASHBOARD.md`.
16
+
17
+ ## Schema
18
+
19
+ Trace header (blockquote) + the [`ui-spec`](../../roles/ui-spec/SKILL.md) Markdown render (same structure, vocabulary and exact render rules; **a single screen**):
20
+
21
+ ```markdown
22
+ > Design SPEC · generated via the ui-design capability
23
+ > Origin: docs/plans/PPP-plan-<slug>.md (· docs/specs/NNN-spec-<slug>.md § UI spec, if present)
24
+ > Design options: material3 · light · es
25
+ > Tasks: T3.2 · T3.3
26
+
27
+ # Modal Export
28
+ **Tipo**: modal | **Plataforma**: web
29
+
30
+ ## Componentes
31
+ - **Formato** (select)
32
+ - **Rango de fechas** (datePicker)
33
+ - **Exportar** (button)
34
+ - **Cancelar** (link)
35
+ ```
36
+
37
+ ## Rules
38
+
39
+ 1. Authored by the **`ui-design`** capability (rebindable via `.workflow/skills.toml`; `off` → the UI gap degrades to human / `Open questions`, like any disabled capability).
40
+ 2. The **plan-doc references** the path of the governing SPEC (in its UI Tasks / `Solution`): that reference is the **source of truth** for which SPEC governs each screen. A re-refine that changes a screen produces the updated SPEC **in its own session** (each loop manages the artifacts of ITS session) and re-points the plan reference.
41
+ 3. **Derives** from the spec's `## UI spec` section when present: splits it per screen and elevates it to executable detail; a SPEC↔`## UI spec` contradiction is a **gap** (plan↔spec drift). If the spec has no `## UI spec`, it is authored from the `Requirement` via structured-choice (design system, theme, screen ambiguities).
42
+ 4. Ephemeral and internal like every artifact: promotion to `docs/` happens **only** via `export-*` (never automatically by the loop).
@@ -28,7 +28,7 @@
28
28
 
29
29
  ┌─ LAYER 3 · SESSIONS + ARTIFACTS (.workflow/sessions/) ─────────────────┐
30
30
  │ Ephemeral, internal. No one invokes this by hand. Process-only. │
31
- │ (schema in ../workflow-artifacts/)
31
+ │ (schema in ../artifacts/)
32
32
  └────────────────────────────────────────────────────────────────────────┘
33
33
 
34
34
  ╔═ docs/ ZONE — PERMANENT documents, user-facing ════════════════════════╗
@@ -28,6 +28,7 @@ Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase po
28
28
  - Lee y actualiza `docs/plans/PPP-plan-<slug>.md` (living doc: estado de fases/tareas).
29
29
  - Edita código en las fuentes del workspace (una sola sesión de ejecución para el run; la ejecución sigue siendo fase por fase, solo que no hay sesión por fase).
30
30
  - Si crea una herramienta/utilidad, la documenta la skill ambiente `creating-tools` en `docs/tools/` (auto-descubierta; el workflow no la bindea).
31
+ - **Gate de revisión de cierre** en cada límite de fase, **antes de proponer los commits**: re-lee el diff (pasada independiente) aplicando las **convenciones ambientes instaladas** y corrige o difiere hallazgos — nada llega a un commit sin revisar (ver `../loops/plan-exec-loop/SKILL.md` § *Delta 5*).
31
32
  - Propone commits por fuente (git-safe: verifica rama, propone, nunca push/--amend/--no-verify).
32
33
  - Genera artefactos de sesión (`DECISION`, `SCRIPTS.sql`) en `.workflow/sessions/`.
33
34
  - **No exporta** a `docs/scripts`, `docs/manuals`, `docs/diagrams`, `docs/reports` — eso lo hacen los `export-*` como paso aparte.
@@ -37,6 +37,10 @@ El skill evalúa `$ARGUMENTS` (los specs viven in place — `docs/specs/NNN-spec
37
37
 
38
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.
39
39
 
40
+ ## UI → design SPECs
41
+
42
+ Si el plan **incluye UI**, el loop compone la capacidad `ui-design` y produce **design SPECs** por pantalla (`NNN-SPEC-<SLUG>.md`) como artefactos de su sesión — las Tasks UI del plan los referencian (ver `../loops/plan-new-loop/SKILL.md` § *Delta 4* y `../artifacts/artifacts-design/SPEC.md`).
43
+
40
44
  ## Plan mode
41
45
 
42
46
  El skill resuelve el input según las 3 reglas de arriba y describe las acciones del loop que ejecutaría, sin arrancar la iteración.
@@ -43,6 +43,10 @@ El skill detecta el estado previo antes de arrancar, **keyando off el `CHECKPOIN
43
43
  3. **Sin avance** (sin CHECKPOINT y el plan **no** tiene `## Refinement decisions`/`## Q&A traceability`) → arranca desde cero leyendo el plan (`PPP-plan-*.md`).
44
44
  4. **Ya refinado / re-refine a demanda** (sin CHECKPOINT abierto pero el plan **ya tiene** `## Refinement decisions`/`## Q&A traceability`) → **soportado de primera clase**: mientras el flujo siga en PLAN podés re-correr `/w:plan-refine` sobre el mismo plan **las veces que haga falta** (nuevos requerimientos, cambios de scope, re-lectura). El loop hace `create_or_resume` — localiza la refine session existente (aunque esté cerrada) y la **reabre** en vez de duplicarla — y re-refina leyendo el **plan mismo**; al `Guardar`, edita in place con confirmación.
45
45
 
46
+ ## UI → design SPECs
47
+
48
+ Si el refine **toca UI**, el loop compone `ui-design` y produce/actualiza **design SPECs** (`NNN-SPEC-<SLUG>.md`) en su propia sesión — acotado a las pantallas nuevas/cambiadas — y re-apunta las referencias del plan (ver `../loops/plan-refine-loop/SKILL.md` § *Delta 4*).
49
+
46
50
  ## Plan mode
47
51
 
48
52
  El skill resuelve el estado y describe las acciones que ejecutaría el loop (gaps que cerraría, preguntas que haría), sin arrancar la iteración.
@@ -27,6 +27,7 @@ Para tareas acotadas y directas que no justifican pasar por SPEC ni PLAN. Siempr
27
27
 
28
28
  - Edita código en las fuentes del workspace.
29
29
  - Artefactos mínimos en la sesión (DECISION lazy, commit propuesto).
30
+ - **Gate de revisión de cierre proporcional** antes de proponer el único commit: re-lee el diff aplicando las convenciones ambientes instaladas y corrige o difiere (ver `../loops/quick-loop/SKILL.md` § *Sequence*).
30
31
  - **No toca `docs/`** ni exporta nada.
31
32
  - **Escala** a SPEC/PLAN si emerge complejidad (muchos archivos, ≥2 fuentes, necesita arquitectura, o el cambio es feature/refactor).
32
33
 
@@ -35,5 +35,5 @@ Resuelve las fuentes y describe el scaffolding que crearía, sin escribir archiv
35
35
 
36
36
  ## Resources
37
37
 
38
- - Design reference: `docs/referencias/workflow-commands/workspace-init.md` (design spec)
38
+ - Design reference: `docs/referencias/workflow-commands/workspace-init.md`
39
39
  - Skills config: `docs/referencias/workflow-roles/` (capacidades/roles disponibles y cascada de binding)
@@ -91,7 +91,8 @@ spec-refine-loop ── CHASIS (patrón de referencia: objetivo persistente + v
91
91
  ├── plan-refine-loop (heir) → deltas: refina el plan in place (aux, opcional);
92
92
  │ reusa gap taxonomy + coherence gate de plan-new
93
93
  ├── plan-exec-loop (heir) → deltas: ejecución real (código/BD/git),
94
- │ una sola session por run, sin auto-export
94
+ │ una sola session por run, gate de revisión
95
+ │ de cierre pre-commit, sin auto-export
95
96
  └── quick-loop (heir) → deltas: ceremonia mínima, 1 session,
96
97
  hereda git/BD/no-export de plan-exec
97
98
  ```
@@ -104,7 +105,7 @@ Los loops componen **capacidades por su rol**, no skills concretas; la skill que
104
105
 
105
106
  | Role | Default built-in | Composed by |
106
107
  |---|---|---|
107
- | `ui-design` | `ui-spec` | `spec-refine-loop` (cuando hay UI) |
108
+ | `ui-design` | `ui-spec` | `spec-refine-loop` (cuando hay UI) · `plan-new-loop` / `plan-refine-loop` (design SPECs `NNN-SPEC-<SLUG>.md`) |
108
109
  | `sql` | `sql` | research · `plan-exec-loop` · `quick-loop` |
109
110
  | `git` | `git` | `plan-exec-loop` · `quick-loop` |
110
111
  | `research` | `research` | todos los loops (research inline) |
@@ -10,7 +10,10 @@ description: >-
10
10
  + CHECKPOINT); git seguro (verifica la rama antes de editar, propone commits por
11
11
  fuente, nunca push/--amend/--no-verify); la IA NUNCA ejecuta DML/DDL (las
12
12
  migraciones se redactan en SCRIPTS.sql, solo read-only se ejecuta); validación
13
- por fase y final (lo dependiente de migración no aplicada se difiere a DBA); y
13
+ por fase y final (lo dependiente de migración no aplicada se difiere a DBA);
14
+ gate de revisión de cierre por fase ANTES de proponer commits (re-lectura
15
+ independiente del diff aplicando las convenciones ambientes instaladas —
16
+ corrige o difiere; nada llega a un commit sin revisar); y
14
17
  SIN auto-export (escribe solo docs/plans; el resto queda como artefacto para
15
18
  export-*). Compone git y sql. Lo arranca /w:plan-exec, es reanudable. Invocar
16
19
  para implementar un plan ya generado.
@@ -30,7 +33,7 @@ PLAN
30
33
  `/w:plan-exec` — **reanudable** (mismo mecanismo del chasis; aquí el resume keya off el checkbox del plan-doc + CHECKPOINT, ver Delta 1).
31
34
 
32
35
  ## Reads
33
- `docs/plans/PPP-plan-<slug>.md` (localizar vía glob `docs/plans/PPP-plan-*.md` o la ruta exacta del argumento del comando). Corre **cualquier** plan, haya pasado o no por [`plan-refine-loop`](../plan-refine-loop/SKILL.md) — plan-refine es auxiliar y no obligatorio; no hay gate que lo exija.
36
+ `docs/plans/PPP-plan-<slug>.md` (localizar vía glob `docs/plans/PPP-plan-*.md` o la ruta exacta del argumento del comando). Corre **cualquier** plan, haya pasado o no por [`plan-refine-loop`](../plan-refine-loop/SKILL.md) — plan-refine es auxiliar y no obligatorio; no hay gate que lo exija. Si el plan incluye UI, también los **design SPECs** (`NNN-SPEC-<SLUG>.md`) que sus Tasks referencian — artefactos de la sesión de plan-new/plan-refine, leídos **read-only** como referencia de diseño al implementar (ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)).
34
37
 
35
38
  ## Writes
36
39
  - `docs/plans/PPP-plan-<slug>.md` (**read/update**, living doc: estado de fases/tareas, `Open questions`).
@@ -69,13 +72,13 @@ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
69
72
  - Recorre las `Phases` del plan en orden (respeta deps) **dentro de la única session del run** (no hay session-por-fase).
70
73
  - El **avance por fase vive en el plan-doc** (`- [x]`) y en el `CHECKPOINT` único (Completed/Pending/Next): **artifact-first** — `CHECKPOINT.Next` se fija a la fase inminente **antes** de iniciarla; el checkbox `- [x]` del plan-doc se voltea **después** de completar la tarea.
71
74
  - Ejecuta las `Tasks` de la fase; **salta** las ya marcadas `- [x]` en el plan (el plan-doc es la fuente de verdad por tarea). Marca `- [x]` + estado **en el plan** (living doc; no en un `TASKS` aparte).
72
- - En **cada límite de fase**: actualiza el `CHECKPOINT` (Completed += Phase N, Next = Phase N+1) y propone commits.
75
+ - En **cada límite de fase**: valida, corre el **gate de revisión de cierre** (Delta 5), actualiza el `CHECKPOINT` (Completed += Phase N, Next = Phase N+1) y propone commits.
73
76
  - Registra `DECISION` solo lo **no obvio**, **a medida que se toma** (los `DECISION` por fase se acumulan en el ÚNICO `DECISION`, etiquetados por fase/tarea — ej. `Origin: T2 (F1)`).
74
77
 
75
78
  ## Delta 2 — Git policy: **rama segura + commits propuestos**
76
79
 
77
80
  - **Antes de editar** archivos de una fuente: verifica rama actual = rama esperada de esa fuente (estilo `branch-check`). Si no coincide → **pausa y resuelve con el humano**; nunca `stash`/`reset --hard`/`checkout -- .`/`clean` sin confirmación por fuente.
78
- - **Al cerrar una fase** (o al `Cerrar`): **propone commits por fuente** (propose-then-execute, aprobar antes); nunca `push`/`--amend`/`--no-verify`.
81
+ - **Al cerrar una fase** (o al `Cerrar`): **tras pasar el gate de revisión de cierre** (Delta 5), **propone commits por fuente** (propose-then-execute, aprobar antes); nunca `push`/`--amend`/`--no-verify`. Nada llega a un commit propuesto sin revisar.
79
82
  - **Commit rechazado**: los cambios **quedan en el working tree** (no se revierten). Se permite reproponer / editar mensaje. Se registra en `CHECKPOINT` + `BACKLOG` que la fase quedó **sin commitear** (reanudable).
80
83
  - **Precondición entre fases**: `branch-check` valida *identidad* de rama, **no** *limpieza* del working tree. Antes de iniciar la siguiente fase, el working tree de cada fuente debe estar **limpio** (committeado) o explícitamente **reconocido** como "cambios sin commitear de la fase N" — para no co-mezclar dos fases en un mismo commit.
81
84
 
@@ -96,7 +99,18 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
96
99
 
97
100
  > La **validación final** es el **convergence gate** de PLAN-exec = **`Success criteria` en verde** (*verification-first*; análogo al *analyze gate* de SPEC y al *coherence gate* de `plan-new`): el plan no se marca *done* hasta que pasa o queda explícitamente diferida (handoff de SQL). Para código son **tests ejecutables** (TDD); para migraciones BD no ejecutables, **rúbrica** (SCRIPTS.sql válido + revisado).
98
101
 
99
- ## Delta 5 — Completitud / cierre
102
+ ## Delta 5 — Gate de revisión de cierre (convenciones, pre-commit)
103
+
104
+ Tras la validación de la fase y **antes de proponer sus commits** (también en un `Cerrar` anticipado, antes de proponer los commits pendientes), el diff de la fase pasa un **gate de revisión de cierre**:
105
+
106
+ - **Re-lectura independiente** del diff (subagente o re-lectura limpia — la *verificación independiente* del chasis: no asume correcta la implementación; *only command output counts*).
107
+ - **Aplica las convenciones ambientes instaladas** relevantes al stack tocado (estándares de código/stack, seguridad, revisión de diffs, familias propias del workspace) — el host las **auto-descubre por su `description`**. El workflow **no nombra ni bindea** skills concretas: **crea el momento; las skills instaladas lo llenan** (por eso la revisión **no es un rol** — ver [`../../roles/README.md`](../../roles/README.md)). Sin skills de convenciones instaladas → checklist genérico mínimo: SOLID/early-return, nombres claros, DRY, errores no silenciados, sin secrets/PII, SQL parametrizado, sin código muerto, + las `Validations` del plan.
108
+ - **Hallazgos**: se **corrigen** en el working tree y se **re-corre la validación de la fase** (el gate no reemplaza los tests: los re-verifica tras corregir), o se **difieren justificados** (→ `Open questions` del plan + `BACKLOG`); lo no obvio → `DECISION`. Integridad del gate (chasis): nunca se debilita un check ni se baja una convención para pasar.
109
+ - **Artifact-first + verification-first**: `CHECKPOINT.Next = "review fase N"` antes de la pasada; `SESSION.Success criteria` incluye desde el inicio "cada fase pasó el gate de revisión antes de sus commits".
110
+
111
+ Recién con el gate en verde se proponen los commits de la fase (Delta 2).
112
+
113
+ ## Delta 6 — Completitud / cierre
100
114
 
101
115
  - Una fase cierra **done** cuando sus tareas están `- [x]` y su validación pasó **o** quedó diferida (handoff de SQL). Estado posible: **"done — SQL pendiente de aplicar"**.
102
116
  - Todas las fases done → *structured-choice* final (contenido: `Marcar plan done` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`).
@@ -126,8 +140,11 @@ plan-exec-loop(PPP-plan-<slug>.md):
126
140
  validación de la fase:
127
141
  la que corre y falla → volver a la tarea
128
142
  la dependiente de migración no aplicada → diferir (Open questions + BACKLOG)
143
+ gate de revisión de cierre (pre-commit): # Delta 5: CHECKPOINT.Next = "review fase N"
144
+ re-lectura INDEPENDIENTE del diff de la fase + convenciones ambientes instaladas
145
+ hallazgos → corregir (y re-validar la fase) ó diferir justificado (Open questions + BACKLOG)
129
146
  update CHECKPOINT (Completed += Phase N, Next = Phase N+1) # DESPUÉS: Pending→Completed + Next = fase siguiente (ver ciclo artifact-first)
130
- proponer commit(s) por fuente (aprobar antes) # nunca push/amend/--no-verify
147
+ proponer commit(s) por fuente (aprobar antes) # nunca push/amend/--no-verify; solo tras el gate en verde
131
148
  si rechazado → cambios quedan; registrar "fase sin commitear"
132
149
  precondición siguiente fase: working tree limpio o reconocido
133
150
  validación final (lo que se pueda; lo dependiente de SQL queda como handoff)
@@ -149,7 +166,8 @@ flowchart TD
149
166
  DO --> MK["marcar Task - [x] en el PLAN"]
150
167
  MK --> T
151
168
  T -->|no| VP["validación de fase<br/>(falla→tarea · dep. SQL→diferir)"]
152
- VP --> CK["update CHECKPOINT (Completed/Next)"]
169
+ VP --> RV["gate de revisión de cierre<br/>(diff + convenciones ambientes → corregir/diferir)"]
170
+ RV --> CK["update CHECKPOINT (Completed/Next)"]
153
171
  CK --> CM["proponer commits por fuente"]
154
172
  CM -->|aprobado| P
155
173
  CM -->|rechazado| RJ["cambios quedan · registrar 'sin commitear'"]
@@ -159,6 +177,6 @@ flowchart TD
159
177
 
160
178
  ## Convergence / exit
161
179
 
162
- - Plan completo + validación OK (o diferida con handoff) → `Marcar plan done`.
180
+ - Plan completo + validación OK (o diferida con handoff) + **cada fase pasó su gate de revisión de cierre** antes de commitear → `Marcar plan done`.
163
181
  - `Cerrar` (control `flow`, en cualquier momento) → `finalize` persiste `CHECKPOINT` (y `BACKLOG` solo si quedó algo sin ejecutar / sin commitear / sin aplicar), cierra la session, reporta.
164
182
  - La promoción de artefactos a `docs/` (vía `export-*`) es **siempre** un paso posterior y explícito, fuera de este loop.
@@ -10,7 +10,9 @@ description: >-
10
10
  deltas: el plan absorbe inline el nivel TECHNICAL-NOTE
11
11
  (Solution/Impacted/AS-IS/TO-BE/Validations…) + Phases/Tasks con estado vivo;
12
12
  el research aquí mapea código/impacto (componentes FE/BE/BD, wiring AS-IS,
13
- dependencias); y una gap taxonomy propia de planificación. Distingue spec
13
+ dependencias); una gap taxonomy propia de planificación; y si el plan incluye
14
+ UI compone la capacidad ui-design para autorar design SPECs por pantalla
15
+ (NNN-SPEC-<SLUG>.md) como artefactos de su sesión. Distingue spec
14
16
  refinado de borrador por la presencia de Refinement decisions/Q&A traceability
15
17
  (si faltan → soft-suggest correr spec-refine antes). Lo arranca el comando
16
18
  /w:plan-new y es reanudable. Invocar cuando un spec deba convertirse en un plan
@@ -34,7 +36,7 @@ PLAN
34
36
  `docs/specs/NNN-spec-*.md` (glob — localiza el spec por número; o la ruta exacta del argumento del comando). **Refinado vs borrador** se distingue por la **presencia** de `## Refinement decisions` / `## Q&A traceability` en el spec: si faltan → **soft-suggest** correr `/w:spec-refine` primero (planificar sobre un spec sólido produce mejores planes), pero el usuario puede proceder.
35
37
 
36
38
  ## Writes
37
- `docs/plans/PPP-plan-<slug>.md` (`generate`; **sobrescribe con confirmación** si existe). Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export.
39
+ `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).
38
40
 
39
41
  > **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`.
40
42
 
@@ -93,13 +95,18 @@ Reemplaza la gap taxonomy de spec por una orientada a planificación:
93
95
  | Deps faltantes | orden no claro | research / humano |
94
96
  | Criterios del spec sin cubrir | tareas no trazan a acceptance criteria | la IA deriva + humano confirma |
95
97
  | Riesgos sin atender | riesgos técnicos sin mitigar/declarar | humano |
98
+ | UI sin design SPEC *(si aplica)* | el plan incluye UI (FE/pantallas en `Impacted`, `## UI spec` en el spec, o tareas UI) sin `NNN-SPEC-*.md` en la sesión | **capacidad `ui-design`** |
96
99
 
97
100
  ## Delta 3 — What research investigates here
98
101
 
99
102
  El research **inline** del chasis se especializa: mapear **código/impacto** — componentes FE/BE/BD afectados, wiring AS-IS, dependencias. Alimenta las secciones `Solution`, `Impacted`, `Current state (AS-IS)`. La regla BD del chasis aplica igual (queries read-only a `SCRIPTS.sql`, MCP elegido vía pregunta de contenido si >1 sin default).
100
103
 
104
+ ## Delta 4 — Design SPECs (si el plan incluye UI)
105
+
106
+ 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*).
107
+
101
108
  ## Convergence / exit
102
109
 
103
- Sin gaps materiales → **coherence gate** (read-only) = **`Success criteria` en verde** (*verification-first*; es el "convergence gate" del chasis para PLAN-new): cada `acceptance criterion` del spec **traza** a una fase/tarea, `Final behavior` los cubre, fases XS–S / tareas XS, `deps` sin ciclos, `Impacted` consistente con `Solution`. Lo que falle **vuelve como gap** — la trazabilidad criterio→tarea es una **invariante chequeada**, no una sección aparte. Si pasa → *structured-choice* (contenido: `Guardar plan` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, escribe `docs/plans/PPP-plan-<slug>.md` (con confirmación si existe) → `finalize` (persiste `CHECKPOINT`, y `BACKLOG` solo si difiere; cierra la session, reporta). `Cerrar` en cualquier momento → `finalize` igual.
110
+ 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.
104
111
 
105
112
  > **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.
@@ -10,7 +10,9 @@ description: >-
10
10
  difiere). Es a plan-new lo que spec-refine es a spec-new: edita el plan-doc in
11
11
  place (no genera uno nuevo). Reusa la gap taxonomy y el coherence gate de
12
12
  plan-new-loop; agrega Refinement decisions/Q&A traceability al plan (traza, sin
13
- contrato de gating: plan-exec corre cualquier plan). Lo arranca /w:plan-refine y
13
+ contrato de gating: plan-exec corre cualquier plan). Si el refine toca UI,
14
+ compone la capacidad ui-design y produce/actualiza design SPECs por pantalla
15
+ (NNN-SPEC-<SLUG>.md) en su propia sesión. Lo arranca /w:plan-refine y
14
16
  es reanudable + re-corrible a demanda. Invocar cuando un plan ya generado deba
15
17
  ajustarse antes de ejecutarlo.
16
18
  ---
@@ -37,7 +39,7 @@ PLAN
37
39
  `docs/plans/PPP-plan-*.md` (glob — localiza el plan por número; o la ruta exacta del argumento del comando). **Siempre el plan mismo**: este loop lo edita in place, no hay un archivo "refined" aparte.
38
40
 
39
41
  ## Writes
40
- Actualiza `docs/plans/PPP-plan-<slug>.md` **in place** (cuando el usuario elige `Guardar plan refinado`): completa/ajusta secciones y **agrega** `## Refinement decisions` + `## Q&A traceability`. Como sobrescribe un doc existente, **con confirmación** del usuario. Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export.
42
+ Actualiza `docs/plans/PPP-plan-<slug>.md` **in place** (cuando el usuario elige `Guardar plan refinado`): completa/ajusta secciones y **agrega** `## Refinement decisions` + `## Q&A traceability`. Como sobrescribe un doc existente, **con confirmación** del usuario. Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export. Si el refine **toca UI**, además produce/actualiza **design SPECs** (`NNN-SPEC-<SLUG>.md`) como artefactos **de su propia sesión** (ver *Delta 4* — no son `docs/`, no hay auto-export).
41
43
 
42
44
  ## Inherits
43
45
 
@@ -69,7 +71,7 @@ Cada duda preguntada al humano + la respuesta elegida.
69
71
 
70
72
  ## Delta 2 — Gap taxonomy (de "plan")
71
73
 
72
- Reusa **íntegra** la gap taxonomy de [`plan-new-loop`](../plan-new-loop/SKILL.md) (§ *Delta 2*): Approach/Solution vago, componentes sin identificar, wiring AS-IS desconocido, fase muy grande, tarea no atómica, deps faltantes, criterios del spec sin cubrir, riesgos sin atender. **Diferencia de foco:** plan-new **construye** el plan desde cero; plan-refine **detecta qué cambió** respecto del plan ya escrito (o respecto del spec, si el spec se re-refinó) y cierra **esos** gaps — típicamente menos y más localizados. Un gap extra propio del re-refine:
74
+ Reusa **íntegra** la gap taxonomy de [`plan-new-loop`](../plan-new-loop/SKILL.md) (§ *Delta 2*): Approach/Solution vago, componentes sin identificar, wiring AS-IS desconocido, fase muy grande, tarea no atómica, deps faltantes, criterios del spec sin cubrir, riesgos sin atender, UI sin design SPEC. **Diferencia de foco:** plan-new **construye** el plan desde cero; plan-refine **detecta qué cambió** respecto del plan ya escrito (o respecto del spec, si el spec se re-refinó) y cierra **esos** gaps — típicamente menos y más localizados. Un gap extra propio del re-refine:
73
75
 
74
76
  | Gap | Signal | Resolved by |
75
77
  |---|---|---|
@@ -79,6 +81,10 @@ Reusa **íntegra** la gap taxonomy de [`plan-new-loop`](../plan-new-loop/SKILL.m
79
81
 
80
82
  Igual que plan-new (mapea código/impacto: componentes FE/BE/BD, wiring AS-IS, deps), pero **acotado al delta**: re-verifica solo lo que el cambio toca (no re-mapea todo el plan). Regla BD del chasis igual (read-only a `SCRIPTS.sql`, MCP vía pregunta si >1 sin default).
81
83
 
84
+ ## Delta 4 — Design SPECs (si el refine toca UI)
85
+
86
+ Mismo mecanismo que [`plan-new-loop`](../plan-new-loop/SKILL.md) (§ *Delta 4*: capacidad **`ui-design`** → `NNN-SPEC-<SLUG>.md` por pantalla, ver [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)), **acotado al delta**: solo las pantallas **nuevas o cambiadas** por el refine reciben design SPEC. El SPEC actualizado se escribe en **la sesión propia** del plan-refine (cada loop maneja los artefactos de SU sesión — no edita los de la sesión de plan-new) y el plan **re-apunta** la referencia de la Task UI al SPEC vigente. Pantallas no tocadas conservan su SPEC original.
87
+
82
88
  ## Compact / resume
83
89
 
84
90
  El resume **keya off el `CHECKPOINT`** de la refine session, no de un archivo "refined". Tres casos al ejecutar `/w:plan-refine` sobre un plan:
@@ -91,4 +97,4 @@ El resume **keya off el `CHECKPOINT`** de la refine session, no de un archivo "r
91
97
 
92
98
  ## Convergence / exit
93
99
 
94
- 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`, 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.
100
+ 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.
@@ -9,7 +9,9 @@ description: >-
9
9
  como log vivo: CHECKPOINT siempre, BACKLOG solo si difiere) y de plan-exec-loop
10
10
  (git seguro: rama esperada antes de editar + commit propuesto, nunca
11
11
  push/--amend/--no-verify; la IA nunca ejecuta DML, migraciones a SCRIPTS.sql;
12
- sin auto-export). Sus deltas: sin fases ni plan-doc (el prompt ES la tarea),
12
+ sin auto-export; gate de revisión de cierre proporcional: re-lee el diff con
13
+ las convenciones ambientes instaladas y corrige antes de proponer el commit).
14
+ Sus deltas: sin fases ni plan-doc (el prompt ES la tarea),
13
15
  una sola session ligera (<slug>-quick), un solo commit; y escalación con
14
16
  handoff si la tarea crece (propone subir a SPEC/PLAN dejando el código a
15
17
  medias como contexto). NO toca docs/. Lo arranca /w:quick y es reanudable.
@@ -44,7 +46,7 @@ QUICK
44
46
  ## Inherits
45
47
 
46
48
  - del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): **objetivo persistente** (acá el más directo: el prompt *es* el objetivo) + **verification-first** (`SESSION.Success criteria` proporcional), gap-driven (mínimo), *structured-choice* ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`), `research` **inline** + regla BD read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only), compact/resume, **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
47
- - de [`plan-exec-loop`](../plan-exec-loop/SKILL.md): **git** (rama segura antes de editar + commit propuesto; nunca `push`/`--amend`/`--no-verify`), **BD** (la IA nunca ejecuta DML; migraciones → `SCRIPTS.sql` de la session), **sin auto-export** (no toca otras carpetas `docs/`).
49
+ - de [`plan-exec-loop`](../plan-exec-loop/SKILL.md): **git** (rama segura antes de editar + commit propuesto; nunca `push`/`--amend`/`--no-verify`), **BD** (la IA nunca ejecuta DML; migraciones → `SCRIPTS.sql` de la session), **sin auto-export** (no toca otras carpetas `docs/`), y el **gate de revisión de cierre** (§ *Delta 5* de plan-exec) en versión **proporcional**: antes de proponer el único commit, re-lectura del diff aplicando las convenciones ambientes instaladas → corregir o diferir justificado.
48
50
 
49
51
  ## Composes
50
52
 
@@ -56,7 +58,7 @@ QUICK
56
58
 
57
59
  - **Sin fases, sin plan-doc**: el prompt **es** la tarea (una sola unidad). No hay roadmap.
58
60
  - **Verification-first proporcional** (ceremonia mínima): aun acá se **siembra el check antes**, del tamaño de la tarea. Código: un test (repro del bug → fix) o "build/lint/tests existentes siguen verdes" (chore). **Análisis/diseño**: una **rúbrica falsable corta**, *ratificada por el usuario* antes de perseguirla. Es el `SESSION.Success criteria` del run (ver [chasis § Verification-first](../spec-refine-loop/SKILL.md)).
59
- - **Una sola session**. **Un solo commit** propuesto al final (solo si hubo cambios de código).
61
+ - **Una sola session**. **Un solo commit** propuesto al final (solo si hubo cambios de código), **tras el gate de revisión de cierre proporcional** (heredado de plan-exec § *Delta 5*): re-lectura del diff + convenciones ambientes; corregir o diferir; nada llega al commit sin revisar.
60
62
  - **Escalación + handoff**: si la tarea crece (muchos archivos / ≥2 fuentes / necesita arquitectura) → propone subir a **SPEC/PLAN**. Si el usuario acepta:
61
63
  - el **código ya editado queda** en el working tree (no se revierte) **y se registra** en `CHECKPOINT` + `BACKLOG` ("cambios sin commitear en `<fuente>` — código a medias; decidir commit/descartar al retomar") — reusando **ambas** mitades del patrón "commit rechazado" de plan-exec (no revertir **y** registrar lo sin commitear). Crítico en la rama **SPEC**, que no retoma el working tree;
62
64
  - la session quick va a `finalize`, persistiendo `CHECKPOINT` + `BACKLOG` con un **puntero** al spec/plan sembrado (Followups: "escalado a `docs/specs/NNN` o `docs/plans/PPP` — retomar ahí");
@@ -91,7 +93,10 @@ quick-loop(prompt):
91
93
  si la tarea CRECE → proponer escalar a SPEC/PLAN
92
94
  si acepta → handoff (avance queda; BACKLOG→spec/plan sembrado) → goto finalize
93
95
  convergence gate: Success criteria en verde # tests verdes si código · rúbrica satisfecha si análisis/diseño
94
- si hubo cambios de código → proponer commit (aprobar antes) # nunca push/amend/--no-verify
96
+ si hubo cambios de código:
97
+ gate de revisión de cierre (proporcional): # re-lectura del diff + convenciones ambientes instaladas
98
+ hallazgos → corregir (re-validar) ó diferir justificado (BACKLOG)
99
+ proponer commit (aprobar antes) # nunca push/amend/--no-verify; solo tras el gate
95
100
  structured_choice(contenido: [Cerrar tarea, Preguntar algo más], flow: [Compactar, Cerrar])
96
101
  finalize: CHECKPOINT (DESPUÉS: Pending→Completed) + BACKLOG (solo si queda algo diferido) + cerrar session + reportar
97
102
  ```
@@ -106,14 +111,15 @@ flowchart TD
106
111
  GROW -->|sí| ESC["escalar a SPEC/PLAN<br/>avance queda · BACKLOG→spec/plan sembrado"]
107
112
  ESC --> FIN
108
113
  GROW -->|no| V["convergence gate:<br/>Success criteria en verde"]
109
- V --> CM["si hubo código → proponer commit (aprobar)"]
114
+ V --> RV["si hubo código → gate de revisión de cierre<br/>(diff + convenciones ambientes → corregir/diferir)"]
115
+ RV --> CM["proponer commit (aprobar)"]
110
116
  CM --> Q["structured-choice[Cerrar · Preguntar más]<br/>flow[Compactar · Cerrar]"]
111
117
  Q --> FIN["finalize: CHECKPOINT + BACKLOG + cerrar"]
112
118
  ```
113
119
 
114
120
  ## Convergence / exit
115
121
 
116
- - **Success criteria en verde** (proporcional) + commit propuesto si hubo código (o aprobado saltarlo) → `Cerrar`.
122
+ - **Success criteria en verde** (proporcional) + gate de revisión de cierre pasado y commit propuesto si hubo código (o aprobado saltarlo) → `Cerrar`.
117
123
  - `Cerrar`/`Compactar` (control `flow`) → persiste `CHECKPOINT` + `BACKLOG` (reanudable).
118
124
  - **Sin export**: nada va a `docs/`. Si algo amerita preservarse → se promueve aparte vía `export-*`, o se escala a SPEC/PLAN.
119
125
 
@@ -123,6 +123,8 @@ El **CLI es dueño del número**: `aw session-create` antepone un `NNN` **global
123
123
 
124
124
  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.
125
125
 
126
+ > **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.
127
+
126
128
  Otras capacidades transversales que el chasis usa siempre: `research` (research **inline**, ver abajo), `sql` (regla BD en research). 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.
127
129
 
128
130
  > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
@@ -12,7 +12,7 @@ All 6 roles, their built-in defaults, their tier, and which loops/exports compos
12
12
 
13
13
  | Role | Default built-in | Tier | Composed by |
14
14
  |---|---|---|---|
15
- | `ui-design` | [`ui-spec`](ui-spec/SKILL.md) | must | `spec-refine-loop` (when requirement involves UI) |
15
+ | `ui-design` | [`ui-spec`](ui-spec/SKILL.md) | must | `spec-refine-loop` (when requirement involves UI) · `plan-new-loop` / `plan-refine-loop` (per-screen design SPECs) |
16
16
  | `sql` | `sql` | must | inline research · `plan-exec-loop` · `quick-loop` · `export-scripts` |
17
17
  | `git` | `git` | must | `plan-exec-loop` · `quick-loop` |
18
18
  | `research` | [`research`](research/SKILL.md) | should | all loops (on-demand investigation) |
@@ -24,6 +24,8 @@ All 6 roles, their built-in defaults, their tier, and which loops/exports compos
24
24
  - `should` — loaded on-demand; active by default but lower priority to override.
25
25
 
26
26
  > **Convenciones ambientes (no roles).** Los estándares de código, testing, redacción **y la creación de herramientas** (`creating-tools`) **no son roles** del workflow ni se bindean: son **skills standalone que el host auto-descubre por su `description`** y aplica cuando son relevantes. El workflow es **indiferente** (no las lee ni las busca). Familias útiles viven en plugins del marketplace (`dev-conventions`, `tool-builder`), pero el workflow **no depende** de ellos.
27
+ >
28
+ > **La revisión de cierre tampoco es un rol** (decisión deliberada — se evaluó y descartó un rol `conventions`/`rules`/`review`): el **gate de revisión de cierre** de `plan-exec-loop`/`quick-loop` (pre-commit) es un **paso del loop**; el loop crea el **momento** y las convenciones ambientes instaladas lo llenan. Un rol que "señale las skills del marketplace" re-acoplaría lo que esta extracción desacopló.
27
29
 
28
30
  ---
29
31
 
@@ -5,9 +5,12 @@ description: >-
5
5
  requirement, author a structured, framework-agnostic screen specification as
6
6
  **Markdown** (single output format). Knows the conceptual screen structure, the
7
7
  kind/region vocabulary, the authoring rules, design-system / theme / variant
8
- handling, and the exact Markdown render format. Use when a loop is refining a spec
9
- that involves screens, forms, dashboards, modals or any UI surface primarily
10
- `spec-refine-loop`. Recycled from the `ui-spec-generator` service.
8
+ handling, and the exact Markdown render format. Two landing zones, same render:
9
+ in SPEC (`spec-refine-loop`) it authors the `## UI spec` section of the spec doc;
10
+ in PLAN (`plan-new-loop`/`plan-refine-loop`) it authors per-screen **design
11
+ SPECs** (`NNN-SPEC-<SLUG>.md`) as session artifacts. Use when a loop is refining
12
+ a spec or building/refining a plan that involves screens, forms, dashboards,
13
+ modals or any UI surface. Recycled from the `ui-spec-generator` service.
11
14
  ---
12
15
 
13
16
  # ui-spec — UI spec authoring
@@ -22,13 +25,18 @@ Dado un requerimiento de UI, autorar una **descripción estructurada en Markdown
22
25
 
23
26
  ## Composed by
24
27
 
25
- La carga el **`spec-refine-loop`** (ver `../../loops/spec-refine-loop/SKILL.md`) al resolver el gap **UI sin especificar** (cuando el requerimiento involucra UI). El loop aporta lo que el servicio viejo no tenía:
28
+ Dos niveles, misma capacidad:
29
+
30
+ - **`spec-refine-loop`** (ver `../../loops/spec-refine-loop/SKILL.md`) — al resolver el gap **UI sin especificar** (cuando el requerimiento involucra UI): autora la sección `## UI spec` **del spec** (el *qué* de la UI, pantallas a grano grueso).
31
+ - **`plan-new-loop` · `plan-refine-loop`** (ver `../../loops/plan-new-loop/SKILL.md` § *Delta 4*) — al resolver el gap **UI sin design SPEC** (cuando el **plan incluye UI**): autora **design SPECs** por pantalla (`NNN-SPEC-<SLUG>.md`) como **artefactos de la sesión de PLAN** (ver `../../artifacts/artifacts-design/SPEC.md`); derivan de `## UI spec` si existe.
32
+
33
+ En ambos, el loop aporta lo que el servicio viejo no tenía:
26
34
 
27
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**.
28
36
  - **Itera** gap-driven hasta converger.
29
37
  - Ofrece **variantes** y **cura** el resultado.
30
38
 
31
- Cualquier loop podría componerla; el caso primario es SPEC. La descripción Markdown aterriza como una sección dentro del documento spec (`docs/specs/NNN-spec-<slug>.md`) — nunca como artefacto suelto (invariante 3: el spec es un documento).
39
+ Cualquier loop podría componerla; los casos primarios son SPEC y PLAN. En SPEC, la descripción aterriza como sección del documento spec (`docs/specs/NNN-spec-<slug>.md`) — el spec sigue siendo un documento (invariante 3). En PLAN aterriza como **design SPECs** (artefactos de sesión) — que **no** son el requirement-spec: son el detalle de diseño por pantalla, de proceso.
32
40
 
33
41
  ## Knowledge
34
42
 
@@ -114,9 +122,16 @@ Si el humano no responde, asumir el caso más simple coherente con la descripci
114
122
  - **Registros** (table)
115
123
  ```
116
124
 
117
- ## Output — sección `## UI spec` dentro del spec (`docs/specs/NNN-spec-<slug>.md`)
125
+ ## Output — dos aterrizajes, un solo formato (Markdown)
126
+
127
+ **Salida en un solo formato: Markdown.** La escribe el loop (no esta skill por sí sola). El **render es el mismo** en ambos niveles; cambia dónde aterriza, según el loop que compone:
128
+
129
+ | Loop que compone | Aterriza en | Grano |
130
+ |---|---|---|
131
+ | `spec-refine-loop` | sección `## UI spec` **del spec** (`docs/specs/NNN-spec-<slug>.md`) — documento, in place | todas las pantallas del requerimiento, grano grueso |
132
+ | `plan-new-loop` · `plan-refine-loop` | **design SPECs** `NNN-SPEC-<SLUG>.md` — artefactos en la **sesión de PLAN** (uno **por pantalla**, con encabezado de traza; ver `../../artifacts/artifacts-design/SPEC.md`) | una pantalla por archivo, detalle ejecutable |
118
133
 
119
- **Salida en un solo formato: Markdown.** La escribe el loop (no esta skill por sí sola). Encabezar la sección con las opciones de diseño elegidas (design system, tema, idioma) en una línea. Luego el render Markdown, con estas reglas exactas (recicladas del `MarkdownFormatter`):
134
+ Encabezar la sección (o el encabezado de traza del SPEC) con las opciones de diseño elegidas (design system, tema, idioma) en una línea. Luego el render Markdown, con estas reglas exactas (recicladas del `MarkdownFormatter`):
120
135
 
121
136
  - `# {nombre}`
122
137
  - `**Tipo**: {tipo} | **Plataforma**: {plataforma}`