@tacuchi/agent-workflow-cli 12.3.0 → 12.4.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.
@@ -12,6 +12,8 @@ export interface SessionCreateInput {
12
12
  export interface SessionCreateRecordOutput {
13
13
  type: SessionType;
14
14
  name: string;
15
+ /** Global sequential number assigned by the CLI (zero-padded, e.g. "003"). */
16
+ number: string;
15
17
  folder: string;
16
18
  path: string;
17
19
  session_path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CA+BvD"}
1
+ {"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAgCvD"}
@@ -22,6 +22,7 @@ export async function runSessionCreate(fs, _env, paths, input) {
22
22
  const record = {
23
23
  type,
24
24
  name,
25
+ number: folderInfo.number,
25
26
  folder: folderInfo.folder,
26
27
  path: sessionPath,
27
28
  session_path: sessionFilePath,
@@ -55,13 +56,35 @@ function validateInput(input) {
55
56
  async function prepareSessionFolder(fs, paths, name) {
56
57
  const sessionsDir = paths.cwdSessionsDir();
57
58
  await fs.mkdirp(sessionsDir);
58
- // Folder is the --name verbatim (locked decision): no numeric NNN, no type suffix.
59
- const folder = name;
59
+ // The CLI owns the session number: a single global, sequential counter across
60
+ // ALL sessions in `.workflow/sessions/` (any type), so numbering never resets
61
+ // per type nor collides. Callers pass only the descriptor via `--name`; the
62
+ // `NNN-` prefix is assigned here. A descriptor that already carries a leading
63
+ // `NNN-` is normalized away first so the prefix can't double up.
64
+ const descriptor = name.replace(/^\d{3}-/, "");
65
+ const number = await nextSessionNumber(fs, sessionsDir);
66
+ const folder = `${number}-${descriptor}`;
60
67
  const sessionPath = join(sessionsDir, folder);
61
68
  if (await fs.exists(sessionPath)) {
62
69
  return { error: `Ya existe ${sessionPath}` };
63
70
  }
64
71
  await fs.mkdirp(sessionPath);
65
- return { folder, sessionPath, sessionsDir };
72
+ return { folder, number, sessionPath, sessionsDir };
73
+ }
74
+ /**
75
+ * Next global session number: scan `.workflow/sessions/` for any entry whose name
76
+ * starts with a 3-digit code and return max+1, zero-padded. Type-agnostic — one
77
+ * sequence for every session regardless of kind. Legacy `sessionNNN-…` folders
78
+ * (no leading digit) don't match and are ignored, so the new sequence starts fresh.
79
+ */
80
+ async function nextSessionNumber(fs, sessionsDir) {
81
+ const entries = await fs.list(sessionsDir);
82
+ let max = 0;
83
+ for (const entry of entries) {
84
+ const m = entry.name.match(/^(\d{3})/);
85
+ if (m?.[1])
86
+ max = Math.max(max, Number.parseInt(m[1], 10));
87
+ }
88
+ return String(max + 1).padStart(3, "0");
66
89
  }
67
90
  //# sourceMappingURL=session-create-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"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"}
package/dist/cli/main.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "12.3.0",
3
+ "version": "12.4.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": {
@@ -6,18 +6,14 @@ allowed-tools:
6
6
  "Bash",
7
7
  "Read",
8
8
  "Write",
9
- "Skill",
10
9
  ]
11
10
  ---
12
11
 
13
12
  # export-diagrams — exportar diagramas
14
13
 
15
- Lee el código de las fuentes del workspace + el plan-doc (secciones `AS-IS`/`TO-BE`) y genera diagramas C4 / mermaid en `docs/diagrams/`. Single-pass, read-only sobre sesiones. Invoca el skill `export-diagrams`.
14
+ Lee el código de las fuentes del workspace + el plan-doc (secciones `AS-IS`/`TO-BE`) y genera diagramas C4 / mermaid en `docs/diagrams/`. Single-pass, read-only sobre sesiones.
16
15
 
17
- ```
18
- Skill: export-diagrams
19
- args: $ARGUMENTS
20
- ```
16
+ Para ejecutar: **leé** `../exports/export-diagrams/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-diagrams` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
21
17
 
22
18
  ## Qué produce
23
19
 
@@ -6,18 +6,14 @@ allowed-tools:
6
6
  "Bash",
7
7
  "Read",
8
8
  "Write",
9
- "Skill",
10
9
  ]
11
10
  ---
12
11
 
13
12
  # export-manuals — exportar manuales
14
13
 
15
- Consolida sesiones + artefactos `DECISION` + plan-doc (`Final behavior`) + código fuente y genera documentación de usuario/operación en `docs/manuals/`. Single-pass, read-only sobre sesiones. Invoca el skill `export-manuals`.
14
+ Consolida sesiones + artefactos `DECISION` + plan-doc (`Final behavior`) + código fuente y genera documentación de usuario/operación en `docs/manuals/`. Single-pass, read-only sobre sesiones.
16
15
 
17
- ```
18
- Skill: export-manuals
19
- args: $ARGUMENTS
20
- ```
16
+ Para ejecutar: **leé** `../exports/export-manuals/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-manuals` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
21
17
 
22
18
  ## Qué produce
23
19
 
@@ -6,18 +6,14 @@ allowed-tools:
6
6
  "Bash",
7
7
  "Read",
8
8
  "Write",
9
- "Skill",
10
9
  ]
11
10
  ---
12
11
 
13
12
  # export-reports — exportar informes
14
13
 
15
- Consolida el corpus completo de sesiones (`CONCLUSIONS`, `DECISION`, spec) + plan-doc (estado) + `docs/` y genera un informe ejecutivo o funcional en `docs/reports/`. Single-pass, read-only sobre sesiones. Invoca el skill `export-reports`.
14
+ Consolida el corpus completo de sesiones (`CONCLUSIONS`, `DECISION`, spec) + plan-doc (estado) + `docs/` y genera un informe ejecutivo o funcional en `docs/reports/`. Single-pass, read-only sobre sesiones.
16
15
 
17
- ```
18
- Skill: export-reports
19
- args: $ARGUMENTS
20
- ```
16
+ Para ejecutar: **leé** `../exports/export-reports/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-reports` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
21
17
 
22
18
  ## Qué produce
23
19
 
@@ -6,18 +6,14 @@ allowed-tools:
6
6
  "Bash",
7
7
  "Read",
8
8
  "Write",
9
- "Skill",
10
9
  ]
11
10
  ---
12
11
 
13
12
  # export-scripts — exportar scripts de BD
14
13
 
15
- Promueve los artefactos `SCRIPTS.sql` (tipo B — migraciones) de N sesiones de `.workflow/sessions/` a `docs/scripts/`. Single-pass, read-only sobre sesiones. Invoca el skill `export-scripts`.
14
+ Promueve los artefactos `SCRIPTS.sql` (tipo B — migraciones) de N sesiones de `.workflow/sessions/` a `docs/scripts/`. Single-pass, read-only sobre sesiones.
16
15
 
17
- ```
18
- Skill: export-scripts
19
- args: $ARGUMENTS
20
- ```
16
+ Para ejecutar: **leé** `../exports/export-scripts/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-scripts` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
21
17
 
22
18
  ## Qué produce
23
19
 
@@ -7,7 +7,6 @@ allowed-tools:
7
7
  "Read",
8
8
  "Write",
9
9
  "Edit",
10
- "Skill",
11
10
  ]
12
11
  ---
13
12
 
@@ -15,12 +14,14 @@ allowed-tools:
15
14
 
16
15
  Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase por fase. El plan (`docs/plans/PPP-plan.md`) es un documento vivo que el loop mantiene actualizado (estado de fases y tareas).
17
16
 
18
- Invocar el skill:
17
+ ## Ejecutar el loop
19
18
 
20
- ```
21
- Skill: plan-exec-loop
22
- args: $ARGUMENTS
23
- ```
19
+ `plan-exec-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
20
+
21
+ 1. **Leé** `../loops/plan-exec-loop/SKILL.md` (ruta relativa a este archivo).
22
+ 2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input: detecta CHECKPOINT/resume, ejecuta fase por fase (git-safe, BD solo-scripts), mantiene el plan vivo y reporta.
23
+
24
+ > No intentes `Skill: plan-exec-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
24
25
 
25
26
  ## Qué hace el loop (resumen)
26
27
 
@@ -7,7 +7,6 @@ allowed-tools:
7
7
  "Read",
8
8
  "Write",
9
9
  "Edit",
10
- "Skill",
11
10
  ]
12
11
  ---
13
12
 
@@ -23,12 +22,14 @@ El skill evalúa `$ARGUMENTS`:
23
22
  2. **`docs/specs/NNN-spec.md`** (borrador sin refinar) → propone correr `/w:spec-refine` primero; planificar sobre un spec sólido produce mejores planes.
24
23
  3. **prompt** (sin spec referenciado) → propone usar el flujo SPEC; **por default lanza `/w:spec-new`** con ese prompt para crear el borrador, y desde ahí continúa el flujo natural.
25
24
 
26
- Invocar el skill:
25
+ ## Ejecutar el loop
27
26
 
28
- ```
29
- Skill: plan-new-loop
30
- args: $ARGUMENTS
31
- ```
27
+ `plan-new-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
28
+
29
+ 1. **Leé** `../loops/plan-new-loop/SKILL.md` (ruta relativa a este archivo).
30
+ 2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input (resuelto según las 3 reglas de arriba): detecta estado/resume, corre el motor gap-driven, crea y maneja sessions, converge y reporta.
31
+
32
+ > No intentes `Skill: plan-new-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
32
33
 
33
34
  ## Notas de numeración
34
35
 
@@ -7,7 +7,6 @@ allowed-tools:
7
7
  "Read",
8
8
  "Write",
9
9
  "Edit",
10
- "Skill",
11
10
  ]
12
11
  ---
13
12
 
@@ -15,12 +14,14 @@ allowed-tools:
15
14
 
16
15
  Para tareas acotadas y directas que no justifican pasar por SPEC ni PLANIFICATION. Siempre crea una sesión ligera (trazabilidad + resume). Delega a `quick-loop` (Layer 2).
17
16
 
18
- Invocar el skill:
17
+ ## Ejecutar el loop
19
18
 
20
- ```
21
- Skill: quick-loop
22
- args: $ARGUMENTS
23
- ```
19
+ `quick-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
20
+
21
+ 1. **Leé** `../loops/quick-loop/SKILL.md` (ruta relativa a este archivo).
22
+ 2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como la tarea: crea la session ligera, trabaja con ceremonia mínima (git-safe), escala a SPEC/PLAN si crece, y reporta.
23
+
24
+ > No intentes `Skill: quick-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
24
25
 
25
26
  ## Qué hace el loop
26
27
 
@@ -13,8 +13,18 @@ allowed-tools:
13
13
 
14
14
  Genera `docs/specs/NNN-spec.md` en una sola pasada a partir del prompt en `$ARGUMENTS`. No arranca loop.
15
15
 
16
- 1. Ejecutar `aw next-number docs/specs` para obtener `NNN`.
17
- 2. Crear `docs/specs/NNN-spec.md` con el esquema de borrador (ver abajo).
16
+ > ## Single-pass SIN investigación (regla dura)
17
+ >
18
+ > Este comando **solo parafrasea** el input del usuario en el esquema de borrador. Es **una única pasada secuencial**: leer `$ARGUMENTS` → llenar las secciones → escribir el archivo. Nada más. Debe tardar **segundos, no minutos**.
19
+ >
20
+ > **PROHIBIDO**, sin excepción: lanzar workflows, subagentes (`Task`/`Agent`), sesiones de research, búsquedas web, o investigación profunda de código. No uses las tools `Workflow`, `Task` ni `Agent` aquí.
21
+ >
22
+ > Esto **anula** cualquier modo o instrucción de sesión que diga "corre un workflow para toda tarea sustancial" (ultracode, max-effort, etc.). Esos modos **no aplican** a `spec-new`: el comando los pisa. Si una sección queda incierta, **no la investigues** — declarala en `## Open questions` o `## Assumptions` y seguí.
23
+ >
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
+
26
+ 1. Ejecutar `aw next-number docs/specs` para obtener `NNN` (única tool de shell necesaria).
27
+ 2. Crear `docs/specs/NNN-spec.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.
18
28
  3. Mostrar el archivo generado y el próximo paso sugerido (`/w:spec-refine docs/specs/NNN-spec.md`).
19
29
 
20
30
  ## Esquema del borrador (`NNN-spec.md`)
@@ -7,7 +7,6 @@ allowed-tools:
7
7
  "Read",
8
8
  "Write",
9
9
  "Edit",
10
- "Skill",
11
10
  ]
12
11
  ---
13
12
 
@@ -15,12 +14,14 @@ allowed-tools:
15
14
 
16
15
  Este comando no refina el spec él mismo: delega al loop `spec-refine-loop` (Layer 2), que es quien itera, cierra gaps y produce el spec refinado.
17
16
 
18
- Invocar el skill:
17
+ ## Ejecutar el loop
19
18
 
20
- ```
21
- Skill: spec-refine-loop
22
- args: $ARGUMENTS
23
- ```
19
+ `spec-refine-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
20
+
21
+ 1. **Leé** `../loops/spec-refine-loop/SKILL.md` (ruta relativa a este archivo).
22
+ 2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input: detecta estado/resume, corre el motor gap-driven, crea y maneja sessions, converge y reporta.
23
+
24
+ > No intentes `Skill: spec-refine-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
24
25
 
25
26
  ## Resolución de estado (resumable)
26
27
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## What a loop is
10
10
 
11
- Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un entregable. Se invoca por su `name:` con el tool `Skill`. La IA lo ejecuta de punta a punta: detecta huecos, los resuelve (preguntando al humano o investigando), integra y repite hasta converger.
11
+ Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un entregable. **No es invocable por nombre** con el tool `Skill` (no se registra como skill suelta): es el cuerpo de su comando `/w:…`, que lo **carga leyendo `<loop>/SKILL.md`** y lo ejecuta inline. La IA lo corre de punta a punta: detecta huecos, los resuelve (preguntando al humano o investigando), integra y repite hasta converger.
12
12
 
13
13
  Propiedades comunes a **los 4 loops**:
14
14
 
@@ -59,14 +59,16 @@ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
59
59
 
60
60
  ## Internal sessions (managed)
61
61
 
62
- - **control session** `<plan>-plan-exec`: dueña del run (`SESSION` + `CHECKPOINT` + `BACKLOG` al cerrar; Type = `control`).
63
- - **exec session por fase** `<plan>-exec-phase-<N>`: `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (Type = `exec`).
64
- - **research session** `<plan>-research-*`: on-demand (run-and-close), igual que el chasis.
62
+ - **control session** descriptor `plan-exec` → `NNN-plan-exec`: dueña del run (`SESSION` + `CHECKPOINT` + `BACKLOG` al cerrar; Type = `control`).
63
+ - **exec session por fase** descriptor `plan-exec-phase-<N>` → `NNN-plan-exec-phase-<N>`: `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (Type = `exec`).
64
+ - **research session** descriptor `plan-exec-research-*` → `NNN-plan-exec-research-*`: on-demand (run-and-close), igual que el chasis.
65
+
66
+ > **Numeración**: el caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial sobre `.workflow/sessions/` (ver chasis). No reinicia por tipo ni por fase.
65
67
 
66
68
  ## Delta 1 — **One exec session per phase** (+ resume intra-fase)
67
69
 
68
70
  - Recorre las `Phases` del plan en orden (respeta deps).
69
- - Por cada Phase no completada → `create_or_resume(<plan>-exec-phase-<N>)` (**reusa** la session si la fase quedó a medias; no crea una segunda).
71
+ - Por cada Phase no completada → `create_or_resume("plan-exec-phase-<N>")` (**reusa** la session si la fase quedó a medias; no crea una segunda; el CLI antepone el `NNN` global).
70
72
  - 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).
71
73
  - Registra `DECISION` solo lo **no obvio**.
72
74
 
@@ -102,11 +104,11 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
102
104
 
103
105
  ```
104
106
  plan-exec-loop(PPP-plan.md):
105
- control = create_or_resume(<plan>-plan-exec) # CHECKPOINT, resume
107
+ control = create_or_resume("plan-exec") # CLI antepone NNN global; CHECKPOINT, resume
106
108
  plan = read(PPP-plan.md)
107
109
  para cada Phase en plan (en orden, respeta deps):
108
110
  si Phase done: skip
109
- es = create_or_resume(<plan>-exec-phase-<N>) # reusa si quedó a medias
111
+ es = create_or_resume("plan-exec-phase-<N>") # reusa si quedó a medias
110
112
  para cada Task de la Phase:
111
113
  si Task - [x] en el plan: skip # resume intra-fase
112
114
  verificar rama esperada por fuente (branch-check)
@@ -39,11 +39,11 @@ PLANIFICATION
39
39
  Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
40
40
 
41
41
  - Motor **gap-driven convergente** (`detect_gaps` → resolver → integrar → repetir; gaps agotados con límite `MAX` no se re-disparan).
42
- - **Sessions internas**: `control` (`<plan>-plan-new`: `SESSION` + `CHECKPOINT`, + `BACKLOG` al cerrar; Type = `refine`/`control`) + `research` on-demand (run-and-close, puede cerrar inconclusa).
42
+ - **Sessions internas**: `control` (descriptor `plan-new` → `NNN-plan-new`: `SESSION` + `CHECKPOINT`, + `BACKLOG` al cerrar; Type = `refine`/`control`) + `research` on-demand (run-and-close, puede cerrar inconclusa).
43
43
  - **AskUserQuestion**: ≤3 tabs de contenido + 1 tab `flow` (`Compactar`/`Cerrar`) siempre.
44
44
  - **Ask-vs-research rule** + **research autónomo** + **regla BD** (pregunta MCP si >1 sin default → queries a `SCRIPTS.sql` → ejecuta read-only, `sql-mutation-guard`) + manejo de research **inconclusa** (degrada a humano / difiere a `Open questions` + límite `MAX`).
45
45
  - **Compact / resume** (4 casos) y **`Cerrar` persiste** `CHECKPOINT` + `BACKLOG`.
46
- - **Naming** `<run>` para sessions hijas: `<plan>-plan-new` `<plan>-research-*`.
46
+ - **Naming + numeración global** del chasis: `<run>` = descriptor `plan-new`; hijas `--name plan-new-research-<gap>`. El CLI antepone el `NNN` global y secuencial (sin reiniciar por tipo); el caller pasa solo el descriptor.
47
47
 
48
48
  ## Delta 1 — Deliverable: PLAN RICO (`PPP-plan.md`)
49
49
 
@@ -39,7 +39,7 @@ QUICK
39
39
 
40
40
  ## Internal session
41
41
 
42
- - **SIEMPRE** crea una session ligera `<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG` al cerrar). Una sola session (no exec-por-fase).
42
+ - **SIEMPRE** crea una session ligera con descriptor `<slug>-quick` → `NNN-<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG` al cerrar). Una sola session (no exec-por-fase). El caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial (ver chasis).
43
43
 
44
44
  ## Inherits
45
45
 
@@ -64,7 +64,7 @@ QUICK
64
64
 
65
65
  ```
66
66
  quick-loop(prompt):
67
- s = create_or_resume(<slug>-quick) # siempre session ligera
67
+ s = create_or_resume("<slug>-quick") # CLI antepone NNN global; siempre session ligera
68
68
  trabajar la tarea (loop mínimo):
69
69
  verificar rama esperada por fuente (branch-check); si no → pausar + resolver
70
70
  editar código (cambio mínimo)
@@ -82,7 +82,7 @@ finalize: CHECKPOINT + BACKLOG (si queda algo) + cerrar session + reportar
82
82
 
83
83
  ```mermaid
84
84
  flowchart TD
85
- S["create_or_resume session <slug>-quick"] --> G["branch-check por fuente"]
85
+ S["create_or_resume session NNN-&lt;slug&gt;-quick"] --> G["branch-check por fuente"]
86
86
  G -->|ok| DO["editar código · BD→SCRIPTS.sql · DECISION<br/>(duda→research/AskUserQuestion)"]
87
87
  G -->|rama ≠| PA["pausar + resolver"]
88
88
  PA --> G
@@ -44,16 +44,22 @@ El loop crea y maneja sus sessions en `.workflow/sessions/`. El usuario nunca la
44
44
 
45
45
  | Session | When | Artifacts | Role |
46
46
  |---|---|---|---|
47
- | **refine session** `<spec>-spec-refine/` | al arrancar el loop (o se reanuda) | `SESSION.md` · `CHECKPOINT.md` (· `BACKLOG.md` al cerrar) | Dueña del run. Guarda el avance al `Compactar` y al `Cerrar`; habilita el resume. Type = `refine`. |
48
- | **research session** `<run>-research-*/` | on-demand, por cada gap factual | `SESSION.md` · `ANALYSIS-FILE.md` → `CONCLUSIONS.md` (+ `SCRIPTS.sql` si consulta BD) | Investiga, concluye, **cierra y reporta**. Puede cerrar **inconclusa**. Type = `research`; on-demand, **no reanudable** (run-and-close, sin `CHECKPOINT`/`BACKLOG` propios). |
47
+ | **refine session** `NNN-spec-refine/` | al arrancar el loop (o se reanuda) | `SESSION.md` · `CHECKPOINT.md` (· `BACKLOG.md` al cerrar) | Dueña del run. Guarda el avance al `Compactar` y al `Cerrar`; habilita el resume. Type = `refine`. |
48
+ | **research session** `MMM-spec-refine-research-*/` | on-demand, por cada gap factual | `SESSION.md` · `ANALYSIS-FILE.md` → `CONCLUSIONS.md` (+ `SCRIPTS.sql` si consulta BD) | Investiga, concluye, **cierra y reporta**. Puede cerrar **inconclusa**. Type = `research`; on-demand, **no reanudable** (run-and-close, sin `CHECKPOINT`/`BACKLOG` propios). |
49
49
 
50
50
  > El spec **nunca** entra en una session; vive en `docs/specs/`.
51
+
52
+ ### Numeración de sessions (regla dura, heredada por todos los loops)
53
+
54
+ El **CLI es dueño del número**: `aw session-create` antepone un `NNN` **global y secuencial** escaneando **todas** las sessions de `.workflow/sessions/` (cualquier tipo). El caller pasa **solo el descriptor** vía `--name` — **nunca** un número. Así la numeración no se reinicia por tipo ni colisiona (ej.: `001-spec-refine`, `002-spec-refine-research-x`, `003-plan-new`, …).
55
+
56
+ > `<run>` = el **descriptor** (sin número) de la control session que prefija sus sessions hijas: `spec-refine`, `plan-new`, `plan-exec`, `quick`. La research session pasa `--name <run>-research-<gap>` y el CLI le pone su propio `NNN`. **No** embebas el número del padre en el descriptor del hijo (lo agrega el CLI; embeberlo lo duplicaría).
51
57
  >
52
- > `<run>` = id de la session dueña del loop padre, que prefija sus sessions hijas: `<spec>-spec-refine`, `<plan>-plan-new`, `<plan>-plan-exec`, `<slug>-quick`. Así el patrón de naming es exacto en cualquier flujo que herede este chasis.
58
+ > **Resume**: localiza la session existente **escaneando** `.workflow/sessions/` por descriptor + `## Origin` (qué spec/plan), **no** reconstruyendo el número (que ahora es global, no derivable del artefacto). `aw session-resume --code <NNN | folder>` resuelve ambas formas.
53
59
 
54
- **CLI** (asunción de naming; los subcomandos se implementan en paralelo — no bloquear):
55
- - `aw session-create --type refine --name <spec>-spec-refine` / `aw session-resume --code <…>` (detecta `CHECKPOINT`).
56
- - `aw session-create --type research --name <run>-research-<gap>` para cada gap factual.
60
+ **CLI**:
61
+ - `aw session-create --type refine --name spec-refine` → crea `NNN-spec-refine` / `aw session-resume --code <…>` (detecta `CHECKPOINT`).
62
+ - `aw session-create --type research --name <run>-research-<gap>` por cada gap factual → crea `MMM-<run>-research-<gap>`.
57
63
  - `aw checkpoint-write` / `aw checkpoint-read` para el resume.
58
64
  - `aw session-close` al cerrar (con razón); `aw session-artifacts` para inspeccionar.
59
65
 
@@ -140,7 +146,7 @@ Para cada gap, una sola pregunta decide el resolutor:
140
146
  ```
141
147
  spec-refine-loop(spec):
142
148
  input = exists(NNN-spec-refined.md) ? NNN-spec-refined.md : NNN-spec.md # (#2 resume)
143
- refine_session = create_or_resume(<spec>-spec-refine) # detecta CHECKPOINT
149
+ refine_session = create_or_resume("spec-refine") # CLI antepone NNN global; resume localiza por descriptor/origin
144
150
  work = read(input) (+ aplicar avance del checkpoint si reanuda)
145
151
  attempts = {} # anti-relanzamiento por gap
146
152
  repeat: