@tacuchi/agent-workflow-cli 20.6.0 → 20.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 +6 -5
- package/dist/application/paths-service.js +1 -1
- package/dist/application/self/skills-manager.js +1 -1
- package/dist/application/self/skills-manager.js.map +1 -1
- package/dist/application/workspace-init-service.js +1 -1
- package/dist/cli/main.js +1 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/components/focus-row.js +1 -1
- package/dist/cli/tui/components/home-header.js +1 -1
- package/dist/cli/tui/components/home-header.js.map +1 -1
- package/dist/cli/tui/components/host-admin-section.js +1 -1
- package/dist/cli/tui/components/host-admin-section.js.map +1 -1
- package/dist/cli/tui/components/tabs-config.js +1 -1
- package/dist/cli/tui/components/tabs-config.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +3 -2
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.js +1 -1
- package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
- package/dist/cli/tui/tabs/status-tab.js +1 -1
- package/dist/cli/tui/tabs/status-tab.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +3 -3
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/package.json +2 -2
- package/skills/w/README.md +2 -2
- package/skills/w/SKILL.md +15 -10
- package/skills/w/artifacts/README.md +3 -3
- package/skills/w/commands/README.md +3 -2
- package/skills/w/commands/persist.md +101 -0
- package/skills/w/commands/plan-exec.md +2 -1
- package/skills/w/commands/plan-new.md +10 -3
- package/skills/w/commands/plan-refine.md +4 -2
- package/skills/w/commands/quick.md +1 -0
- package/skills/w/commands/spec-new.md +16 -2
- package/skills/w/commands/workspace-init.md +1 -1
- package/skills/w/exports/README.md +1 -1
- package/skills/w/harness/HARNESS.md +6 -6
- package/skills/w/loops/CHASSIS.md +25 -5
- package/skills/w/loops/CODE-POLICIES.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +14 -4
- package/skills/w/loops/plan-new-loop/LOOP.md +13 -4
- package/skills/w/loops/plan-refine-loop/LOOP.md +5 -2
- package/skills/w/loops/quick-loop/LOOP.md +7 -5
- package/skills/w/loops/spec-refine-loop/LOOP.md +8 -6
- package/skills/w/roles/README.md +2 -2
|
@@ -44,7 +44,7 @@ Read **[`../CHASSIS.md`](../CHASSIS.md)** — the loop's **full engine** — **a
|
|
|
44
44
|
|
|
45
45
|
`git` (safe branch + proposed commits) · `sql` (DB rule). Both resolved via `.workflow/skills.toml`; `off` → the loop continues without the capability and, if it was needed, says so or asks.
|
|
46
46
|
|
|
47
|
-
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` —
|
|
47
|
+
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` — Workline neither binds nor depends on them. Full doctrine: [../../roles/README.md](../../roles/README.md).
|
|
48
48
|
|
|
49
49
|
## Internal sessions (managed)
|
|
50
50
|
|
|
@@ -61,7 +61,7 @@ Read **[`../CHASSIS.md`](../CHASSIS.md)** — the loop's **full engine** — **a
|
|
|
61
61
|
- Executes the phase's `Tasks`; **skips** the ones already `- [x]` in the plan (the plan-doc is the per-task source of truth). Marks `- [x]` + state **in the plan** (living doc; never in a separate `TASKS`).
|
|
62
62
|
- At **every phase boundary**: validate, run the **closing review gate** (Delta 5), update the `CHECKPOINT` (Completed += Phase N, Next = Phase N+1) and propose commits.
|
|
63
63
|
- Records in `DECISION` only the **non-obvious**, **as it is decided** (per-phase decisions accumulate in the SINGLE `DECISION`, tagged by phase/task — e.g. `Origin: T2 (F1)`).
|
|
64
|
-
- The chassis **gap-driven** engine applies here **inside a task**: facing a non-obvious decision/doubt → inline research OR structured-choice.
|
|
64
|
+
- The chassis **gap-driven** engine applies here **inside a task**: facing a non-obvious decision/doubt → inline research, a probe (Delta 7) OR structured-choice.
|
|
65
65
|
|
|
66
66
|
## Delta 2 — Git policy: **safe branch + proposed commits**
|
|
67
67
|
|
|
@@ -73,7 +73,7 @@ Full policy in [`../CODE-POLICIES.md`](../CODE-POLICIES.md) (§ *DB scripts-only
|
|
|
73
73
|
|
|
74
74
|
## Delta 4 — Validation
|
|
75
75
|
|
|
76
|
-
- After executing (per phase and at the end): run tests/checks against `Validations` + `Final behavior` + the spec's acceptance/success criteria.
|
|
76
|
+
- After executing (per phase and at the end): run tests/checks against `Validations` + `Final behavior` + the spec's acceptance/success criteria (its `## Scenarios`, if present, are ready-made test cases: GIVEN=arrange · WHEN=act · THEN=assert).
|
|
77
77
|
- A validation that **runs and fails** → back to the task (gap); no advancing.
|
|
78
78
|
- **Validation depending on an unapplied migration**: since the AI never executes the DML, it **cannot run it read-only** → it is **deferred** (handoff to a DBA), it does **not block progress**. Recorded in the plan's `Open questions` + `BACKLOG`, marked "verification pending until the SQL is applied". (Reuses the chassis degrade/defer pattern + `MAX` cap → avoids the "back to the task" loop.)
|
|
79
79
|
|
|
@@ -89,6 +89,14 @@ Full gate in [`../CODE-POLICIES.md`](../CODE-POLICIES.md) (§ *Closing review ga
|
|
|
89
89
|
- All phases done → final *structured-choice* (content: `Marcar plan done` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`).
|
|
90
90
|
- **No automatic export**: the artifacts (`SCRIPTS.sql`, `DECISION`, …) stay in the session. Promoting them to `docs/` (scripts, manuals, …) is a separate step via `export-*`.
|
|
91
91
|
|
|
92
|
+
## Delta 7 — Probe (PoC) tasks
|
|
93
|
+
|
|
94
|
+
Chassis § *Proof of concept (probe)*, instantiated for execution — for a plan's explicit probe task or a runnable doubt inside a task:
|
|
95
|
+
|
|
96
|
+
- Seed the question + pass/fail check → run **throwaway code in the session folder** (never the source tree, never committed; DB probe = read-only) → verdict in `CONCLUSIONS`, consequences in `DECISION` (tagged by task) → mark the task with its verdict.
|
|
97
|
+
- A **failed probe does not fail the phase** — it de-risked it: surface it (structured-choice); reshaping the plan goes to `Open questions` + `BACKLOG` (or `/w:plan-refine`).
|
|
98
|
+
- **Promotion**: probe code reaches the sources only as a normal task edit (branch-check + review gate) — never by committing the probe.
|
|
99
|
+
|
|
92
100
|
## Sequence
|
|
93
101
|
|
|
94
102
|
```
|
|
@@ -108,7 +116,9 @@ plan-exec-loop(PPP-plan-<slug>.md):
|
|
|
108
116
|
if read-only DB query → SCRIPTS.sql + execute read-only
|
|
109
117
|
if DB change (DDL/DML) → draft in SCRIPTS.sql (session artifact, DO NOT execute)
|
|
110
118
|
if non-obvious decision → DECISION (tagged by phase/task, in the SINGLE DECISION)
|
|
111
|
-
if
|
|
119
|
+
if probe (PoC) task / runnable doubt → seed check → run throwaway code in the
|
|
120
|
+
session folder → verdict → CONCLUSIONS/DECISION; failed → structured-choice (Delta 7)
|
|
121
|
+
if doubt/gap → inline research, probe OR structured-choice # chassis
|
|
112
122
|
mark Task - [x] + state IN THE PLAN # AFTER completing the Task (the plan-doc is the per-task source of truth)
|
|
113
123
|
phase validation:
|
|
114
124
|
what runs and fails → back to the task
|
|
@@ -31,6 +31,8 @@ PLAN
|
|
|
31
31
|
|
|
32
32
|
> **slug**: short kebab-case derived from the spec's Requirement — only `[a-z0-9-]`, ≤ ~5 words / ≤ 40 chars. `aw next-number docs/plans` returns JSON (field `next` = `PPP`); the loop builds the full name. To locate plans, glob `docs/plans/PPP-plan-*.md`.
|
|
33
33
|
|
|
34
|
+
> **Adoption (command mode 4):** an **externally-built plan** (host plan mode, hand-written, another agent) is materialized by the **command** in a single pass — this loop does not run: transcribe + normalize into the Delta 1 schema, `## Origin` = "adopted from <source>" + attribution; then `plan-refine` closes schema gaps (its coherence gate degrades for spec-less plans). See `../../commands/plan-new.md` § *Input resolution*.
|
|
35
|
+
|
|
34
36
|
## Inherits
|
|
35
37
|
|
|
36
38
|
Read **[`../CHASSIS.md`](../CHASSIS.md)** — the loop's **full engine** — **always before** these deltas. *(If `../` does not resolve: `CHASSIS.md` next to this file — global layout rule, chassis § Reference resolution.)*
|
|
@@ -52,7 +54,7 @@ The plan absorbs the `TECHNICAL-NOTE` level **inline** (user decision) + the roa
|
|
|
52
54
|
|
|
53
55
|
> Derived from docs/specs/NNN-spec-<slug>.md · generated by plan-new-loop
|
|
54
56
|
|
|
55
|
-
## Origin source spec
|
|
57
|
+
## Origin source spec · prompt (bootstrapped via spec-new) · "adopted from <source>" + attribution (external plan — /w:plan-new mode 4 / /w:persist)
|
|
56
58
|
## Summary the how, in 1–2 sentences (core)
|
|
57
59
|
## Solution technical/functional explanation of the implementation (core)
|
|
58
60
|
## Impacted FE · BE · DB (schemas/tables/functions) · APIs · integr. (core)
|
|
@@ -86,7 +88,7 @@ Replaces the spec gap taxonomy with a planning-oriented one:
|
|
|
86
88
|
| Task not atomic | complexity > XS | the AI re-splits |
|
|
87
89
|
| Missing deps | order unclear | research / human |
|
|
88
90
|
| Spec criteria uncovered | tasks don't trace to acceptance criteria | the AI derives + human confirms |
|
|
89
|
-
| Unaddressed risks | technical risks unmitigated/undeclared | human |
|
|
91
|
+
| Unaddressed risks | technical risks unmitigated/undeclared | human / **probe** (Delta 5) |
|
|
90
92
|
| UI without design SPEC *(if it applies)* | the plan includes UI (FE/screens in `Impacted`, `## UI spec` in the spec, or UI tasks) without `NNN-SPEC-*.md` in the session | **`ui-design` capability** |
|
|
91
93
|
|
|
92
94
|
## Delta 3 — What research investigates here
|
|
@@ -100,7 +102,14 @@ The **UI without design SPEC** gap is resolved by **composing** the **`ui-design
|
|
|
100
102
|
- It authors **one design SPEC per screen** as a session artifact: `NNN-SPEC-<SLUG>.md` (numbering local to the session — see [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)).
|
|
101
103
|
- It **derives** from the spec's `## UI spec` section when present (splits it per screen and raises it to executable detail); otherwise it authors from the `Requirement` (design system/theme/ambiguities via *structured-choice*, counts in the batch).
|
|
102
104
|
- The plan's **UI Tasks reference** their SPEC's path — that reference is the **source of truth** — and `plan-exec-loop` reads them as the design reference.
|
|
103
|
-
- It is the
|
|
105
|
+
- It is the chassis' composed-capability resolution mode (next to *research*, *probe* and *human*).
|
|
106
|
+
|
|
107
|
+
## Delta 5 — Probe (PoC) tasks — de-risk early
|
|
108
|
+
|
|
109
|
+
Chassis § *Proof of concept (probe)*, instantiated for planning. Two placements:
|
|
110
|
+
|
|
111
|
+
- **Plan-shaping unknown** (the `Solution` itself depends on the answer) → run the probe **inline now**; the verdict (`CONCLUSIONS`) feeds `Solution` / `Risks / impact`.
|
|
112
|
+
- **Execution-time risk** (a task will build on a risky, runnable assumption) → encode an explicit **probe task**, placed **early** — before the tasks that depend on its verdict; the matching `Risks / impact` entry references it.
|
|
104
113
|
|
|
105
114
|
## Sequence
|
|
106
115
|
|
|
@@ -116,7 +125,7 @@ plan-new-loop(spec):
|
|
|
116
125
|
gaps = detect_gaps(work) (Delta 2 taxonomy) minus the exhausted ones
|
|
117
126
|
if gaps == ∅: break
|
|
118
127
|
batch ≤3 → seed CHECKPOINT.Pending/Next → resolve each gap:
|
|
119
|
-
research (maps code/impact — Delta 3) · human (structured-choice) · ui-design (Delta 4)
|
|
128
|
+
research (maps code/impact — Delta 3) · human (structured-choice) · probe (Delta 5) · ui-design (Delta 4)
|
|
120
129
|
integrate + update CHECKPOINT # artifact-first cycle
|
|
121
130
|
coherence gate (read-only) = Success criteria green:
|
|
122
131
|
- every spec acceptance criterion traces to a phase/task
|
|
@@ -29,7 +29,7 @@ PLAN
|
|
|
29
29
|
`/w:plan-refine` — **resumable** (same chassis mechanism, keyed off CHECKPOINT) and **re-runnable on demand** (see *Compact / resume*).
|
|
30
30
|
|
|
31
31
|
## Reads
|
|
32
|
-
`docs/plans/PPP-plan-*.md` (glob — locates the plan by number; or the exact path from the command argument). **Always the plan itself**: this loop edits it in place; there is no separate "refined" file.
|
|
32
|
+
`docs/plans/PPP-plan-*.md` (glob — locates the plan by number; or the exact path from the command argument). **Always the plan itself**: this loop edits it in place; there is no separate "refined" file. Provenance is irrelevant — generated by `plan-new`, **hand-written, or adopted** from a host planner (`plan-new` mode 4 / `persist`); existence is the only requirement.
|
|
33
33
|
|
|
34
34
|
## Writes
|
|
35
35
|
Updates `docs/plans/PPP-plan-<slug>.md` **in place** (when the user picks `Guardar plan refinado`): completes/adjusts sections and **adds** `## Refinement decisions` + `## Q&A traceability`. Since it overwrites an existing doc, it asks the user's **confirmation**. It writes only `docs/plans` — never other `docs/` folders, no auto-export. If the refine **touches UI**, it also produces/updates **design SPECs** (`NNN-SPEC-<SLUG>.md`) as artifacts **of its own session** (see *Delta 4* — they are not `docs/`, no auto-export).
|
|
@@ -72,6 +72,8 @@ Reuses plan-new-loop's gap taxonomy **in full** ([`plan-new-loop`](../plan-new-l
|
|
|
72
72
|
|---|---|---|
|
|
73
73
|
| Plan↔spec drift | the spec was re-refined and the plan fell out of line | **research** (re-reads the spec) / **human** |
|
|
74
74
|
|
|
75
|
+
> **Spec-less degradation (hand-written / adopted plans).** When the plan has **no source spec** (`## Origin` = adopted / hand-written), the spec-anchored checks **degrade gracefully**: "spec criteria uncovered" and "plan↔spec drift" do **not** apply — criterion→task traceability anchors to the plan's **own** `## Final behavior` / `## Validations` instead. The rest of the taxonomy (atomicity, deps, Impacted↔Solution, UI→SPEC) applies unchanged. Normalizing an adopted plan to the full Delta 1 schema **is** this loop's job (missing `(core)` sections are gaps).
|
|
76
|
+
|
|
75
77
|
## Delta 3 — What research investigates here
|
|
76
78
|
|
|
77
79
|
Same as plan-new (maps code/impact: FE/BE/DB components, AS-IS wiring, deps), but **scoped to the delta**: it re-verifies only what the change touches (never re-maps the whole plan). Chassis DB rule unchanged (read-only into `SCRIPTS.sql`, MCP via a question when >1 without default).
|
|
@@ -98,11 +100,12 @@ plan-refine-loop(plan):
|
|
|
98
100
|
gaps = detect_gaps(work) (plan-new taxonomy + plan↔spec drift) minus the exhausted ones
|
|
99
101
|
if gaps == ∅: break
|
|
100
102
|
batch ≤3 → seed CHECKPOINT.Pending/Next → resolve each gap:
|
|
101
|
-
research (scoped to the delta — Delta 3) · human (structured-choice) ·
|
|
103
|
+
research (scoped to the delta — Delta 3) · human (structured-choice) · probe (chassis) ·
|
|
102
104
|
ui-design (Delta 4, only new/changed screens)
|
|
103
105
|
integrate + update CHECKPOINT # artifact-first cycle
|
|
104
106
|
coherence gate (read-only) = Success criteria green:
|
|
105
107
|
- plan-new checklist (criterion→task · Final behavior · XS–S/XS · deps · Impacted↔Solution · UI→current SPEC)
|
|
108
|
+
# spec-less plan (adopted/hand-written): criteria anchor to the plan's own Final behavior/Validations (see Delta 2)
|
|
106
109
|
- re-refine's own check: the plan is REALIGNED with what changed
|
|
107
110
|
whatever fails → comes back as a gap
|
|
108
111
|
structured_choice(content: [Guardar plan refinado, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quick-loop
|
|
3
3
|
description: >-
|
|
4
|
-
The
|
|
4
|
+
The Workline lightweight shortcut: solves a scoped task (fix, small
|
|
5
5
|
tweak) straight from the prompt, with minimal ceremony and a single commit.
|
|
6
6
|
Heir of the chassis (loops/CHASSIS.md + CODE-POLICIES.md). Deltas: no
|
|
7
7
|
plan-doc (the prompt IS the task), single light session <slug>-quick, an
|
|
@@ -25,7 +25,7 @@ QUICK
|
|
|
25
25
|
`/w:quick` — **resumable** (same chassis resume mechanism).
|
|
26
26
|
|
|
27
27
|
## Reads
|
|
28
|
-
— (the user's prompt
|
|
28
|
+
— (the user's prompt **plus any analysis already established in this conversation** — *adopted context*, chassis § *Adopted context*: adopted, never re-derived. There is no input document).
|
|
29
29
|
|
|
30
30
|
## Writes
|
|
31
31
|
- **Deliverable per task:** edits code in the sources (minimal change) **or** produces a scoped **analysis/design** (non-code deliverable, lives in the session artifacts — never in `docs/`).
|
|
@@ -44,7 +44,7 @@ Read **[`../CHASSIS.md`](../CHASSIS.md)** — the loop's **full engine** — **a
|
|
|
44
44
|
|
|
45
45
|
`git` · `sql` (DB rule) · `research` (inline). Resolved via `.workflow/skills.toml`.
|
|
46
46
|
|
|
47
|
-
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` —
|
|
47
|
+
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` — Workline neither binds nor depends on them. Full doctrine: [../../roles/README.md](../../roles/README.md).
|
|
48
48
|
|
|
49
49
|
## QUICK delta — minimal ceremony
|
|
50
50
|
|
|
@@ -52,7 +52,7 @@ Read **[`../CHASSIS.md`](../CHASSIS.md)** — the loop's **full engine** — **a
|
|
|
52
52
|
- **Proportional verification-first** (minimal ceremony): even here the check is **seeded before**, sized to the task. Code: one test (bug repro → fix) or "existing build/lint/tests stay green" (chore). **Analysis/design**: a **short falsifiable rubric**, *ratified by the user* before pursuing it. It is the run's `SESSION.Success criteria` (see [chassis § *Verification-first*](../CHASSIS.md)).
|
|
53
53
|
- **Git and DB inline** (full policies in [`../CODE-POLICIES.md`](../CODE-POLICIES.md)): before editing, verify each source's expected branch (`aw check-branch`); **proposed** commit (approve first) — never `push`/`--amend`/`--no-verify`. The AI **never executes DML/DDL**: migrations are drafted into the session's `SCRIPTS.sql` (read-only queries do run, via MCP).
|
|
54
54
|
- **One session. One commit** proposed at the end (only if there were code changes), **after the proportional closing review gate** ([`../CODE-POLICIES.md`](../CODE-POLICIES.md) § *Closing review gate*): diff re-read + ambient conventions; fix or defer; nothing reaches the commit unreviewed.
|
|
55
|
-
- **Entry SIZE GATE** (before creating the session): on receiving the objective, evaluate whether it **exceeds a quick**. It fires **only on clear signals** (≥2 of: needs architecture · ≥2 sources · multiple deliverables · large feature/refactor · ambiguous requirements needing elicitation); borderline → **continue in quick without asking** (if it later grows, mid-loop escalation covers it). A **resume** of an existing quick does **not** re-fire the gate. If it fires → **structured-choice** (1 content question, recommendation first + `flow` control; `Cerrar` here = abort, nothing created yet):
|
|
55
|
+
- **Entry SIZE GATE** (before creating the session): on receiving the objective, evaluate whether it **exceeds a quick**. It fires **only on clear signals** (≥2 of: needs architecture · ≥2 sources · multiple deliverables · large feature/refactor · ambiguous requirements needing elicitation); signals already resolved by *adopted context* do **not** fire (e.g. a host pre-analysis in this conversation that removed the ambiguity — chassis § *Adopted context*); borderline → **continue in quick without asking** (if it later grows, mid-loop escalation covers it). A **resume** of an existing quick does **not** re-fire the gate. If it fires → **structured-choice** (1 content question, recommendation first + `flow` control; `Cerrar` here = abort, nothing created yet):
|
|
56
56
|
- **`Cambiar a SPEC`** (recommended) → **no quick session is created**: run the *Live transition to SPEC* (next bullet).
|
|
57
57
|
- **`Seguir en quick`** → continue normally (`create_or_resume` + loop).
|
|
58
58
|
- **`Recortar alcance`** → the AI proposes the **sub-task that DOES fit** a quick; the loop continues with it (`SESSION.Objective` = the sub-task; the original prompt goes into the session's `## Origin`) and the rest is deferred to `BACKLOG` ("trimmed at the gate — may warrant its own spec, `/w:spec-new`").
|
|
@@ -92,6 +92,8 @@ quick-loop(prompt):
|
|
|
92
92
|
Seguir en quick → continue
|
|
93
93
|
s = create_or_resume("<slug>-quick") # CLI prepends global NNN; always a light session
|
|
94
94
|
seed SESSION.Objective = the prompt
|
|
95
|
+
if the conversation already established analysis/conclusions → # adopted context (chassis)
|
|
96
|
+
adopt them (SESSION.Origin = "adopted from host conversation"; reference in CONCLUSIONS) — never re-derive/re-ask
|
|
95
97
|
seed SESSION.Success criteria = the deliverable's check # verification-first, BEFORE: test(s) if code · short RATIFIED rubric if analysis/design
|
|
96
98
|
seed CHECKPOINT.Pending/Next = the task (s) # BEFORE: seed the intent (artifact-first)
|
|
97
99
|
work the task (minimal loop):
|
|
@@ -100,7 +102,7 @@ quick-loop(prompt):
|
|
|
100
102
|
if read-only DB query → SCRIPTS.sql + execute read-only
|
|
101
103
|
if DB change (DDL/DML) → SCRIPTS.sql (session artifact, DO NOT execute)
|
|
102
104
|
if non-obvious decision → DECISION
|
|
103
|
-
if doubt/gap → inline research OR structured-choice
|
|
105
|
+
if doubt/gap → inline research, a probe OR structured-choice # chassis § Proof of concept
|
|
104
106
|
if the task GROWS → propose escalating to SPEC/PLAN # structured-choice, recommendation first
|
|
105
107
|
accepts PLAN → handoff (progress stays; BACKLOG→seeded plan — resume there, deferred) → goto finalize
|
|
106
108
|
accepts SPEC → handoff (progress stays; BACKLOG→"continued live") → finalize →
|
|
@@ -51,13 +51,13 @@ Full doctrine in the chassis (§ *Internal sessions* + *Numbering*). This loop's
|
|
|
51
51
|
|
|
52
52
|
## Composes
|
|
53
53
|
|
|
54
|
-
The **UI unspecified** gap (when the requirement involves UI; see *Gap taxonomy*) is resolved by **composing** the **`ui-design`** capability (built-in default `ui-spec`; rebindable via `.workflow/skills.toml`): it authors the UI spec natively (structure, vocabulary, Markdown format). It is
|
|
54
|
+
The **UI unspecified** gap (when the requirement involves UI; see *Gap taxonomy*) is resolved by **composing** the **`ui-design`** capability (built-in default `ui-spec`; rebindable via `.workflow/skills.toml`): it authors the UI spec natively (structure, vocabulary, Markdown format). It is the chassis' composed-capability resolution mode (next to *research*, *probe* and *human*): the loop contributes iteration/Q&A (design system, theme, variants, disambiguation) **via the same structured-choice**, and integrates the result as the spec's `## UI spec` section.
|
|
55
55
|
|
|
56
56
|
> **Two levels of the same capability:** here (SPEC) it produces `## UI spec` — the UI's *what*, coarse grain; in PLAN the plan loops produce **per-screen design SPECs** derived from that section (see [`SPEC.md`](../../artifacts/artifacts-design/SPEC.md)).
|
|
57
57
|
|
|
58
58
|
Other transversal capabilities the engine always uses: `research` (**inline** — chassis § *Research*), `sql` (DB rule inside research — chassis). All resolved by config; `off` → the loop continues without the capability and, if it was needed, says so or asks. The spec's **prose** follows the **ambient** writing conventions (the host auto-applies an installed writing skill if present), not a composed role.
|
|
59
59
|
|
|
60
|
-
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` —
|
|
60
|
+
> **Ambient conventions (not roles):** code/testing/writing standards and `creating-tools` are standalone skills the host auto-discovers by `description` — Workline neither binds nor depends on them. Full doctrine: [../../roles/README.md](../../roles/README.md).
|
|
61
61
|
|
|
62
62
|
## Deliverable schema (the spec, edited in place)
|
|
63
63
|
|
|
@@ -72,7 +72,8 @@ The spec is completed **in place**: the draft's sections get **completed** + two
|
|
|
72
72
|
## Requirement (sharpened, unambiguous)
|
|
73
73
|
## Context (complete)
|
|
74
74
|
## Scope (clear In / Out)
|
|
75
|
-
## Acceptance criteria (testable, - [ ]; EARS
|
|
75
|
+
## Acceptance criteria (testable, - [ ]; EARS style; behavioral ones expand in ## Scenarios)
|
|
76
|
+
## Scenarios (opt. — GIVEN/WHEN/THEN/AND blocks; each traces to ≥1 criterion)
|
|
76
77
|
## Assumptions (declared)
|
|
77
78
|
|
|
78
79
|
## UI spec (opt. — if UI is involved; via the ui-design capability / ui-spec skill)
|
|
@@ -101,7 +102,8 @@ Every doubt asked to the human + the chosen answer.
|
|
|
101
102
|
| Vague requirement | the what/why is ambiguous | **human** |
|
|
102
103
|
| Incomplete context | systems/components unidentified | **research** |
|
|
103
104
|
| Blurry scope | `Out` missing, or In/Out overlap | **human** |
|
|
104
|
-
| Untestable criteria | acceptance not verifiable | **human** (derive + confirm) |
|
|
105
|
+
| Untestable criteria | acceptance not verifiable | **human** (derive + confirm — often as a `### Scenario`) |
|
|
106
|
+
| Scenario missing | behavioral criterion without a `### Scenario` | the AI drafts GIVEN/WHEN/THEN + **human** confirms |
|
|
105
107
|
| Open questions pending | explicit doubts | by nature |
|
|
106
108
|
| Hidden assumptions | the spec assumes unstated things | **research** validates / **human** confirms |
|
|
107
109
|
| Internal contradiction | sections contradict each other | **human** |
|
|
@@ -140,7 +142,7 @@ spec-refine-loop(spec):
|
|
|
140
142
|
Cerrar → goto finalize
|
|
141
143
|
work = integrate(work, ans) # → Q&A traceability / Open questions
|
|
142
144
|
# no material gaps → analyze gate = Success criteria green (read-only) before offering Guardar:
|
|
143
|
-
issues = analyze(work) # criteria trace to the Requirement · no contradictions · coherent Scope · Open questions closed/deferred
|
|
145
|
+
issues = analyze(work) # criteria trace to the Requirement · no contradictions · coherent Scope · Open questions closed/deferred · scenarios↔criteria
|
|
144
146
|
if issues: gaps += issues ; continue # findings come back into the loop as gaps
|
|
145
147
|
ans = structured_choice(content: [Guardar refinada, Preguntar algo más],
|
|
146
148
|
flow: [Compactar, Cerrar])
|
|
@@ -162,7 +164,7 @@ Full mechanism (3 cases, `Compactar`, re-run on demand with `--reopen`) in the c
|
|
|
162
164
|
|
|
163
165
|
## Convergence / exit
|
|
164
166
|
|
|
165
|
-
- **No material gaps** → **analyze gate** (read-only) = **`Success criteria` green** (*verification-first*; the SPEC instance of the chassis convergence gate): every acceptance criterion traces to the `Requirement`, no internal contradictions, coherent `Scope` In/Out, `Open questions` closed or explicitly deferred. Whatever fails **comes back as a gap**; if it passes → offer `Guardar especificación refinada`.
|
|
167
|
+
- **No material gaps** → **analyze gate** (read-only) = **`Success criteria` green** (*verification-first*; the SPEC instance of the chassis convergence gate): every acceptance criterion traces to the `Requirement`, no internal contradictions, coherent `Scope` In/Out, `Open questions` closed or explicitly deferred. Scenarios must trace to ≥1 criterion — and behavioral criteria to ≥1 scenario — without contradicting `Scope`. Whatever fails **comes back as a gap**; if it passes → offer `Guardar especificación refinada`.
|
|
166
168
|
- `Guardar` → `edit_in_place_with_confirm(spec)` and `finalize`.
|
|
167
169
|
- `Cerrar` → the chassis `finalize` (always persists `CHECKPOINT`; `BACKLOG` **only if** something is deferred — here: close reason + deferred `Open questions`).
|
|
168
170
|
|
package/skills/w/roles/README.md
CHANGED
|
@@ -17,13 +17,13 @@ All 6 roles, their built-in defaults, their tier, and which loops/exports compos
|
|
|
17
17
|
| `git` | `git` | must | `plan-exec-loop` · `quick-loop` |
|
|
18
18
|
| `research` | [`research`](research/ROLE.md) | should | all loops (on-demand investigation) |
|
|
19
19
|
| `diagrams` | [`diagrams`](diagrams/ROLE.md) | should | `export-diagrams` |
|
|
20
|
-
| `overview` | `w` | should | any loop (orientation about
|
|
20
|
+
| `overview` | `w` | should | any loop (orientation about Workline itself) |
|
|
21
21
|
|
|
22
22
|
**Tiers:**
|
|
23
23
|
- `must` — core to almost every session; built-in always active unless explicitly `off`.
|
|
24
24
|
- `should` — loaded on-demand; active by default but lower priority to override.
|
|
25
25
|
|
|
26
|
-
> **Ambient conventions (not roles).** Code, testing and writing standards **and tool authoring** (`creating-tools`, which writes `docs/tools`) are **not
|
|
26
|
+
> **Ambient conventions (not roles).** Code, testing and writing standards **and tool authoring** (`creating-tools`, which writes `docs/tools`) are **not Workline roles** and are never bound: they are **standalone skills the host auto-discovers by `description`** and applies when relevant. Workline is **indifferent** (it neither reads nor looks for them). Useful families live in marketplace plugins (`dev-conventions`, `tool-builder`), but Workline does **not depend** on them.
|
|
27
27
|
>
|
|
28
28
|
> **The closing review is not a role either** (deliberate decision — a `conventions`/`rules`/`review` role was evaluated and discarded): the pre-commit **closing review gate** of `plan-exec-loop`/`quick-loop` is a **loop step**; the loop creates the **moment** and the installed ambient conventions fill it. A role that "points at the marketplace skills" would re-couple what this extraction decoupled.
|
|
29
29
|
|