@tacuchi/agent-workflow-cli 20.26.0 → 21.1.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 +2 -1
- package/dist/adapters/node-file-system.js +3 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/capability/compose.js +161 -0
- package/dist/application/capability/compose.js.map +1 -0
- package/dist/application/capability/descriptor-loader.js +109 -0
- package/dist/application/capability/descriptor-loader.js.map +1 -0
- package/dist/application/capability/design-handler.js +299 -0
- package/dist/application/capability/design-handler.js.map +1 -0
- package/dist/application/capability/dispatcher.js +312 -0
- package/dist/application/capability/dispatcher.js.map +1 -0
- package/dist/application/capability/durable-effect.js +220 -0
- package/dist/application/capability/durable-effect.js.map +1 -0
- package/dist/application/capability/installed-inventory.js +168 -0
- package/dist/application/capability/installed-inventory.js.map +1 -0
- package/dist/application/capability/readiness.js +204 -0
- package/dist/application/capability/readiness.js.map +1 -0
- package/dist/application/capability/resolution.js +264 -0
- package/dist/application/capability/resolution.js.map +1 -0
- package/dist/application/capability/wrapper.js +187 -0
- package/dist/application/capability/wrapper.js.map +1 -0
- package/dist/application/context/manifest.js +11 -5
- package/dist/application/context/manifest.js.map +1 -1
- package/dist/application/context/measure.js +5 -2
- package/dist/application/context/measure.js.map +1 -1
- package/dist/application/context/plan-service.js +6 -6
- package/dist/application/context/plan-service.js.map +1 -1
- package/dist/application/design/design-bundle-service.js +148 -0
- package/dist/application/design/design-bundle-service.js.map +1 -0
- package/dist/application/design/design-gate-service.js +246 -0
- package/dist/application/design/design-gate-service.js.map +1 -0
- package/dist/application/design/design-graph-service.js +85 -0
- package/dist/application/design/design-graph-service.js.map +1 -0
- package/dist/application/design/design-index-service.js +132 -0
- package/dist/application/design/design-index-service.js.map +1 -0
- package/dist/application/design/design-proposal-service.js +69 -0
- package/dist/application/design/design-proposal-service.js.map +1 -0
- package/dist/application/design/design-publish-service.js +756 -0
- package/dist/application/design/design-publish-service.js.map +1 -0
- package/dist/application/design/design-record-service.js +100 -0
- package/dist/application/design/design-record-service.js.map +1 -0
- package/dist/application/design/design-resolver-service.js +165 -0
- package/dist/application/design/design-resolver-service.js.map +1 -0
- package/dist/application/flow/advance.js +533 -0
- package/dist/application/flow/advance.js.map +1 -0
- package/dist/application/flow/flow-service.js +65 -0
- package/dist/application/flow/flow-service.js.map +1 -0
- package/dist/application/flow/run-projection.js +80 -0
- package/dist/application/flow/run-projection.js.map +1 -0
- package/dist/application/flow/run-state-service.js +107 -0
- package/dist/application/flow/run-state-service.js.map +1 -0
- package/dist/application/flow/submit.js +423 -0
- package/dist/application/flow/submit.js.map +1 -0
- package/dist/application/resume-service.js +46 -14
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/self/install-skill.js +11 -0
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -0
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +18 -12
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/semantic-operation/publish.js +56 -9
- package/dist/application/semantic-operation/publish.js.map +1 -1
- package/dist/application/skills-resolver-service.js +27 -6
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/status-service.js +5 -1
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +6 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +22 -2
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/capability.js +182 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/designs.js +110 -0
- package/dist/cli/commands/designs.js.map +1 -0
- package/dist/cli/commands/flow.js +71 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/resume.js +8 -0
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/skills.js +55 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +50 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +9 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/parser.js +7 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +5 -0
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +5 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/domain/capability/descriptor.js +553 -0
- package/dist/domain/capability/descriptor.js.map +1 -0
- package/dist/domain/capability/effects.js +90 -0
- package/dist/domain/capability/effects.js.map +1 -0
- package/dist/domain/capability/protocol.js +494 -0
- package/dist/domain/capability/protocol.js.map +1 -0
- package/dist/domain/contract-reader.js +84 -0
- package/dist/domain/contract-reader.js.map +1 -0
- package/dist/domain/design/adapter.js +161 -0
- package/dist/domain/design/adapter.js.map +1 -0
- package/dist/domain/design/artifact-body.js +223 -0
- package/dist/domain/design/artifact-body.js.map +1 -0
- package/dist/domain/design/artifact.js +750 -0
- package/dist/domain/design/artifact.js.map +1 -0
- package/dist/domain/design/baseline.js +359 -0
- package/dist/domain/design/baseline.js.map +1 -0
- package/dist/domain/design/capability.js +310 -0
- package/dist/domain/design/capability.js.map +1 -0
- package/dist/domain/design/closure.js +161 -0
- package/dist/domain/design/closure.js.map +1 -0
- package/dist/domain/design/direct.js +108 -0
- package/dist/domain/design/direct.js.map +1 -0
- package/dist/domain/design/external-send.js +65 -0
- package/dist/domain/design/external-send.js.map +1 -0
- package/dist/domain/design/governance.js +298 -0
- package/dist/domain/design/governance.js.map +1 -0
- package/dist/domain/design/identity.js +145 -0
- package/dist/domain/design/identity.js.map +1 -0
- package/dist/domain/design/manifest.js +552 -0
- package/dist/domain/design/manifest.js.map +1 -0
- package/dist/domain/design/maturity.js +305 -0
- package/dist/domain/design/maturity.js.map +1 -0
- package/dist/domain/design/naming.js +117 -0
- package/dist/domain/design/naming.js.map +1 -0
- package/dist/domain/design/offline.js +92 -0
- package/dist/domain/design/offline.js.map +1 -0
- package/dist/domain/design/profiles.js +212 -0
- package/dist/domain/design/profiles.js.map +1 -0
- package/dist/domain/design/projections.js +165 -0
- package/dist/domain/design/projections.js.map +1 -0
- package/dist/domain/design/proposal.js +234 -0
- package/dist/domain/design/proposal.js.map +1 -0
- package/dist/domain/design/reference.js +234 -0
- package/dist/domain/design/reference.js.map +1 -0
- package/dist/domain/design/render-bundle.js +0 -0
- package/dist/domain/design/render-bundle.js.map +1 -0
- package/dist/domain/design/rendition.js +472 -0
- package/dist/domain/design/rendition.js.map +1 -0
- package/dist/domain/design/retired.js +61 -0
- package/dist/domain/design/retired.js.map +1 -0
- package/dist/domain/design/revision.js +219 -0
- package/dist/domain/design/revision.js.map +1 -0
- package/dist/domain/design/secrets.js +86 -0
- package/dist/domain/design/secrets.js.map +1 -0
- package/dist/domain/design/sources.js +180 -0
- package/dist/domain/design/sources.js.map +1 -0
- package/dist/domain/design/validation.js +19 -0
- package/dist/domain/design/validation.js.map +1 -0
- package/dist/domain/design/visual-evidence.js +155 -0
- package/dist/domain/design/visual-evidence.js.map +1 -0
- package/dist/domain/design/yaml-subset.js +390 -0
- package/dist/domain/design/yaml-subset.js.map +1 -0
- package/dist/domain/flow/answer.js +459 -0
- package/dist/domain/flow/answer.js.map +1 -0
- package/dist/domain/flow/authority.js +2276 -0
- package/dist/domain/flow/authority.js.map +1 -0
- package/dist/domain/flow/authorization.js +62 -0
- package/dist/domain/flow/authorization.js.map +1 -0
- package/dist/domain/flow/directive.js +421 -0
- package/dist/domain/flow/directive.js.map +1 -0
- package/dist/domain/flow/rules.js +140 -0
- package/dist/domain/flow/rules.js.map +1 -0
- package/dist/domain/flow/run-state.js +317 -0
- package/dist/domain/flow/run-state.js.map +1 -0
- package/dist/domain/harnesses.js +21 -0
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/safe-path.js +23 -0
- package/dist/domain/safe-path.js.map +1 -0
- package/dist/domain/skills.js +26 -3
- package/dist/domain/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +15 -13
- package/skills/w/artifacts/README.md +3 -4
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
- package/skills/w/commands/plan-exec.md +11 -5
- package/skills/w/commands/plan-new.md +6 -2
- package/skills/w/commands/plan-refine.md +6 -3
- package/skills/w/commands/quick.md +2 -2
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/spec-refine.md +1 -0
- package/skills/w/context/MANIFEST.json +57 -9
- package/skills/w/harness/HARNESS.md +20 -0
- package/skills/w/loops/CHASSIS.md +11 -20
- package/skills/w/loops/CODE-POLICIES.md +18 -9
- package/skills/w/loops/README.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +126 -62
- package/skills/w/loops/plan-new-loop/LOOP.md +71 -73
- package/skills/w/loops/plan-refine-loop/LOOP.md +20 -10
- package/skills/w/loops/quick-loop/LOOP.md +18 -26
- package/skills/w/loops/spec-refine-loop/LOOP.md +28 -30
- package/skills/w/modules/COMPACTION.md +2 -6
- package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
- package/skills/w/modules/DESIGN-REFERENCES.md +113 -0
- package/skills/w/modules/IDEATION-GATE.md +3 -3
- package/skills/w/modules/PERSIST-ROUTING.md +1 -0
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +65 -0
- package/skills/w/modules/PLAN-INPUT.md +5 -3
- package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
- package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
- package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
- package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
- package/skills/w/roles/README.md +9 -5
- package/skills/w/roles/design/CONTRACT.md +80 -0
- package/skills/w/roles/design/ROLE.md +224 -0
- package/skills/w/schemas/capability-descriptor.schema.json +260 -0
- package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
- package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
- package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
- package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
- package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
- package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
- package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
- package/skills/w/schemas/design/ui-screen.v1.schema.json +242 -0
- package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
- package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
- package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
- package/skills/w/roles/ui-spec/ROLE.md +0 -147
package/dist/domain/skills.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Capability roles for the pluggable skills model.
|
|
3
3
|
*
|
|
4
|
-
* A loop composes a CAPABILITY by its role (e.g. "
|
|
4
|
+
* A loop composes a CAPABILITY by its role (e.g. "design"), not a concrete
|
|
5
5
|
* skill. The role → skill binding is resolved from `skills.toml`
|
|
6
6
|
* (cascade: built-in default → global → workspace). See skills-resolver-service.
|
|
7
7
|
*
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* or binds a specific convention skill; the host surfaces any useful one that is
|
|
13
13
|
* installed (e.g. from the `dev-conventions` marketplace plugin, or anywhere).
|
|
14
14
|
*/
|
|
15
|
-
export const SKILL_ROLES = ["
|
|
15
|
+
export const SKILL_ROLES = ["design", "sql", "git", "research", "diagrams", "overview"];
|
|
16
16
|
/** Built-in default skill name for each capability role. */
|
|
17
17
|
export const BUILTIN_DEFAULT_SKILLS = {
|
|
18
|
-
|
|
18
|
+
design: "design",
|
|
19
19
|
sql: "sql",
|
|
20
20
|
git: "git",
|
|
21
21
|
research: "research",
|
|
@@ -26,4 +26,27 @@ const ROLE_SET = new Set(SKILL_ROLES);
|
|
|
26
26
|
export function isSkillRole(value) {
|
|
27
27
|
return ROLE_SET.has(value);
|
|
28
28
|
}
|
|
29
|
+
export function classifyCapabilityBinding(resolved, canonicalName) {
|
|
30
|
+
if (!resolved.enabled || resolved.skill === null) {
|
|
31
|
+
return { state: "off", reason: `'${resolved.role}' está en off`, action: null };
|
|
32
|
+
}
|
|
33
|
+
if (resolved.skill === canonicalName) {
|
|
34
|
+
return { state: "floor_and_improvements", reason: null, action: null };
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
state: "misconfigured",
|
|
38
|
+
reason: `'${resolved.role}' apunta a '${resolved.skill}', y un binding de reemplazo no selecciona una mejora`,
|
|
39
|
+
action: `dejá el binding sin declarar, ponelo en '${canonicalName}' o desactivalo con "off"`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export const RETIRED_SKILL_IDENTITIES = new Map([
|
|
43
|
+
[
|
|
44
|
+
"ui-design",
|
|
45
|
+
"el role de diseño ahora es 'design' y su implementación por defecto también: no hay alias",
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"ui-spec",
|
|
49
|
+
"'ui-spec' es el render legacy y no implementa 'design', cuyo único formato es el UI Design Package v1",
|
|
50
|
+
],
|
|
51
|
+
]);
|
|
29
52
|
//# sourceMappingURL=skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAIjG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAA8B;IAC/D,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC;AAcF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AA+CD,MAAM,UAAU,yBAAyB,CACvC,QAAuB,EACvB,aAAqB;IAErB,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IACD,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,eAAe,QAAQ,CAAC,KAAK,uDAAuD;QAC7G,MAAM,EAAE,4CAA4C,aAAa,2BAA2B;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAgC,IAAI,GAAG,CAAC;IAC3E;QACE,WAAW;QACX,2FAA2F;KAC5F;IACD;QACE,SAAS;QACT,uGAAuG;KACxG;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.1.0",
|
|
4
4
|
"description": "Runtime CLI for Workline — the stages + loops + artifacts system for agent work. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, persist, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/skills/w/SKILL.md
CHANGED
|
@@ -48,7 +48,7 @@ USER invokes
|
|
|
48
48
|
│ the export-* read the artifacts
|
|
49
49
|
▼
|
|
50
50
|
docs/ ZONE — permanent, user-facing documents
|
|
51
|
-
specs · plans (flows) · research (persist / no-flow) · scripts · manuals · diagrams · reports (export-*) · tools (ambient)
|
|
51
|
+
specs · plans (flows) · designs (UI Design Packages) · research (persist / no-flow) · scripts · manuals · diagrams · reports (export-*) · tools (ambient)
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
- **Layer 1** — high level. Single-pass or starts a loop. No iteration logic.
|
|
@@ -89,11 +89,11 @@ Before any loop, the AI resolves its **operating context** on **every prompt** w
|
|
|
89
89
|
**Continuity rule** (single source — the chassis and the loops reference here):
|
|
90
90
|
|
|
91
91
|
1. **Flow command** = **new work line** → new session.
|
|
92
|
-
2. **
|
|
93
|
-
3.
|
|
94
|
-
4. **
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
2. **Prompt with no command** = "same line" → continue/reopen the **most recent** session (the *last started*).
|
|
93
|
+
3. Only if the prompt is clearly **unrelated**: offer choosing (`continuar NNN` | `trabajo nuevo`) or fall to "no flow".
|
|
94
|
+
4. **Convergence closes** the session; a later related prompt **reopens** it (resume removes `.closed`).
|
|
95
|
+
|
|
96
|
+
> **The two exceptions to #1 are not this document's call:** re-running the same command over the **same input** does not open another line — `aw session-resume --code <NNN> --reopen` locates that flow's session by descriptor and `## Origin` and resumes it instead of duplicating it — and an **accepted escalation** inside a loop (quick → SPEC) opens a new line **without** a command, which `aw resume` treats as equivalent to having invoked the destination flow's, because the consent was explicit. Both stay stated here for their reason, not their rule: a line must never fork because somebody re-ran a command, and never continue silently because somebody changed subject.
|
|
97
97
|
|
|
98
98
|
It is the **inter-turn** face of the *persistent objective* (same `CHECKPOINT`+resume, applied to the next prompt) — agnostic doctrine, not a host hook. It applies to **every artifact** (`SCRIPTS.sql` is the worked example; QUICK case: `loops/quick-loop/LOOP.md`).
|
|
99
99
|
|
|
@@ -108,7 +108,7 @@ The flows are **composable with host-native work, never exclusive**. The host is
|
|
|
108
108
|
- `/w:spec-refine` — starts `spec-refine-loop` to refine the spec until it is `ready-for-plan`: the blocking functional decisions closed, the architecture/implementation ones declared for PLAN.
|
|
109
109
|
- `/w:plan-new` — starts `plan-new-loop` to derive an executable plan from the ready spec.
|
|
110
110
|
- `/w:plan-refine` — starts `plan-refine-loop` to turn the plan, in place, into an executable sequence of functional states (auxiliary, **not mandatory**); it is also the return path when execution hits a structural deviation.
|
|
111
|
-
- `/w:plan-exec` —
|
|
111
|
+
- `/w:plan-exec` — executes planned states in live-inferred isolated/continuous batches; continuous units validate, review and commit only at batch close.
|
|
112
112
|
- `/w:quick` — starts `quick-loop` (shortcut, no `docs/`; escalates live to SPEC when the objective exceeds a quick).
|
|
113
113
|
- `/w:export-scripts` · `/w:export-manuals` · `/w:export-diagrams` · `/w:export-reports` — promote artifacts to `docs/`.
|
|
114
114
|
|
|
@@ -143,16 +143,16 @@ Common: Layer 1, explicit (user-invoked, never by a loop) · single-pass, read-o
|
|
|
143
143
|
|
|
144
144
|
### Capability skills + `.workflow/skills.toml`
|
|
145
145
|
|
|
146
|
-
A loop does **not** compose a concrete skill; it composes a **capability by its role** (e.g. `
|
|
146
|
+
A loop does **not** compose a concrete skill; it composes a **capability by its role** (e.g. `design`). Which skill fulfills the role is decided by config, never by the loop. Swapping implementations = one config line.
|
|
147
147
|
|
|
148
148
|
```toml
|
|
149
149
|
[skills]
|
|
150
|
-
|
|
150
|
+
design = "design" # built-in default
|
|
151
151
|
sql = "sql"
|
|
152
152
|
git = "git"
|
|
153
153
|
research = "research"
|
|
154
154
|
# diagrams = "off" # ← capability disabled
|
|
155
|
-
#
|
|
155
|
+
# design = "acme/figma-spec" # ← third-party skill (via skills.sh)
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
**Resolution cascade**: built-in default → `~/.workflow/skills.toml` (global, machine) → `.workflow/skills.toml` (workspace). Workspace overrides global; global overrides default. Unbound role → built-in default. `off` → disabled (the loop continues without it; if it was needed, it says so or asks).
|
|
@@ -161,13 +161,15 @@ Role catalog and defaults:
|
|
|
161
161
|
|
|
162
162
|
| Role | Default | Tier | Composed by |
|
|
163
163
|
|---|---|---|---|
|
|
164
|
-
| `
|
|
164
|
+
| `design` | `design` | must | `spec-refine-loop` (UI) · `plan-new-loop` / `plan-refine-loop` · `plan-exec-loop` (reads, never redesigns) † |
|
|
165
165
|
| `sql` | `sql` | must | research · `plan-exec-loop` · `quick-loop` · `export-scripts` |
|
|
166
166
|
| `git` | `git` | must | `plan-exec-loop` · `quick-loop` |
|
|
167
167
|
| `research` | `research` | should | every loop (inline capability) |
|
|
168
168
|
| `diagrams` | `diagrams` | should | `export-diagrams` |
|
|
169
169
|
| `overview` | `w` | should | anyone (orientation) |
|
|
170
170
|
|
|
171
|
+
> † **The composing loops land references, not design.** `spec-refine` keeps `## Design references` and the plan loops promote the closure they implement and pin exact roots. The retired names `ui-design` and `ui-spec` resolve to nothing — no alias, no dual-read, no migration. See [roles/README.md](roles/README.md).
|
|
172
|
+
>
|
|
171
173
|
> **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).
|
|
172
174
|
|
|
173
175
|
The **loop chassis** is NOT bound: it is the common engine of the 5 loops ([`loops/CHASSIS.md`](loops/CHASSIS.md), a referenced doc), not a pluggable capability.
|
|
@@ -199,8 +201,8 @@ One language per plane — never mix them:
|
|
|
199
201
|
### The 6 hard invariants
|
|
200
202
|
|
|
201
203
|
1. **No auto-export** — loops never graduate/export to `docs/`. Only `export-*` does, explicitly.
|
|
202
|
-
2. **Each flow touches only its `docs/` folders** — SPEC→`specs` · PLAN→`plans` · QUICK→none · rest→`export
|
|
203
|
-
3. **The spec and the plan are documents** (`docs/`), not session artifacts. *(Not to be confused with the **
|
|
204
|
+
2. **Each flow touches only its `docs/` folders** — SPEC→`specs` · PLAN→`plans` · QUICK→none · rest→`export-*`, **plus `docs/designs` for whichever loop composes the `design` capability** (spec-refine and the plan loops publish the package; `plan-exec` only reads it). (`docs/tools` and `docs/research` belong to no flow: `docs/tools` is written by the ambient skill `creating-tools`; `docs/research` by `/w:persist` or direct no-flow authoring.)
|
|
205
|
+
3. **The spec and the plan are documents** (`docs/`), not session artifacts. *(Not to be confused with the **UI Design Package** the `design` capability produces under `docs/designs/NNN-design-<slug>/`: a durable dossier a spec **references** by baseline and digest — see [`roles/design/ROLE.md`](roles/design/ROLE.md) — it is not the requirement-spec.)*
|
|
204
206
|
4. **DB scripts-only** — the AI never executes DML/DDL; migrations stay in `SCRIPTS.sql` and the user applies them. Only read-only reads via MCP.
|
|
205
207
|
5. **Safe git** — expected branch verified before editing; proposed commits per source; never `push`/`--amend`/`--no-verify`.
|
|
206
208
|
6. **Loop chassis** — the 5 loops run the same **common engine**; each loop is an heir adding only its deltas, nothing of the engine is re-declared. Detail: `loops/CHASSIS.md`.
|
|
@@ -35,7 +35,7 @@ Sessions are created by the loops as needed — **one session per run**. The ses
|
|
|
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
|
-
> **
|
|
38
|
+
> **Design is NOT a session artifact.** When a spec or a plan involves UI, the composed [`design`](../roles/design/ROLE.md) capability publishes a **UI Design Package** under `docs/designs/NNN-design-<slug>/` — a durable dossier the spec references by baseline and digest and the plan pins by exact root. Nothing about it lives in a session. The per-screen design SPEC (`NNN-SPEC-<SLUG>.md`) that PLAN sessions used to carry is **retired and unsupported**: no loop produces or reads one, there is no importer or conversion, and presenting one as input or as a gate's evidence is rejected — the result has to be recreated from current sources. Documents already written stay exactly where they are, byte for byte.
|
|
39
39
|
|
|
40
40
|
> **PLAN note (rich plan):** the plan-doc (`docs/plans/PPP-plan.md`) absorbs inline the `TECHNICAL-NOTE` level (`Solution` — summary + AS-IS → TO-BE delta + Final behavior block —, `Impacted`, `Validations`…) **and** the phased `Tasks` (`### Fn` blocks). 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.
|
|
41
41
|
|
|
@@ -53,7 +53,6 @@ Sessions are created by the loops as needed — **one session per run**. The ses
|
|
|
53
53
|
|---|---|---|
|
|
54
54
|
| [`artifacts-core/`](artifacts-core/) | common to any session | `SESSION` · `TASKS` · `CHECKPOINT` · `BACKLOG` · `SCRIPTS.sql` |
|
|
55
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) |
|
|
57
56
|
| [`artifacts-exec/`](artifacts-exec/) | `exec` / `quick` session | `DECISION` · `TECHNICAL-NOTE` (schema reference; absorbed by the plan-doc) |
|
|
58
57
|
|
|
59
58
|
---
|
|
@@ -61,6 +60,6 @@ Sessions are created by the loops as needed — **one session per run**. The ses
|
|
|
61
60
|
## Invariants (hard rules — canonical list: [`../SKILL.md`](../SKILL.md) § *The 6 hard invariants*)
|
|
62
61
|
|
|
63
62
|
1. **No auto-export**: only `export-*` promotes to `docs/`, explicitly.
|
|
64
|
-
2. **Each flow touches only its `docs/` folders**: SPEC→`specs` · PLAN→`plans` · QUICK→none
|
|
65
|
-
3. **Spec and plan are documents**, never session artifacts. *(Design
|
|
63
|
+
2. **Each flow touches only its `docs/` folders**: SPEC→`specs` · PLAN→`plans` · QUICK→none — plus `docs/designs` for whichever loop composes `design`.
|
|
64
|
+
3. **Spec and plan are documents**, never session artifacts. *(Neither is the **UI Design Package** under `docs/designs/`: a durable dossier the spec references, not the requirement-spec.)*
|
|
66
65
|
4. **DB scripts-only**: never execute DML/DDL; migrations (type B) stay in `SCRIPTS.sql` and ship via `export-scripts`; only read-only queries (type A) run via MCP.
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
## Completed
|
|
14
14
|
What already happened: finished phases/tasks/gaps with their outcome (ref: plan-doc `docs/plans/PPP-plan.md`, the spec's gaps, or `TASKS.md` if the session created its own split). Fold the key context a resume needs (settled decisions, discoveries) into these bullets.
|
|
15
15
|
|
|
16
|
-
> **Implemented is not validated (exec sessions).** A phase lands here only once the plan-doc's `> Estado: validada` was flipped. Work that is written but not yet proven stays in `Pending / Next` with its validation pending — a full set of ticked tasks never promotes a phase into this section. Each closed phase records the **functional state reached** and, **only when the change carries one**, the **simulation boundary in force** — that, not the list of files touched, is what a resume actually needs.
|
|
16
|
+
> **Implemented is not validated (exec sessions).** A phase lands here only once the plan-doc's `> Estado: validada` was flipped. Work that is written but not yet proven stays in `Pending / Next` with its validation pending — a full set of ticked tasks never promotes a phase into this section. Continuous-batch phases move together only after their combined validation/review. Each closed phase records the **functional state reached** and, **only when the change carries one**, the **simulation boundary in force** — that, not the list of files touched, is what a resume actually needs.
|
|
17
17
|
|
|
18
18
|
## Pending / Next
|
|
19
|
-
The intent: what remains and what comes immediately next (seeded BEFORE executing — artifact-first). A resume starts here. In exec
|
|
19
|
+
The intent: what remains and what comes immediately next (seeded BEFORE executing — artifact-first). A resume starts here. In exec, record the effective batch (`id` · `continuous|isolated` · phases), any declared-vs-live regrouping and explicit conditional commit authorization, then the next functional state. A phase left `bloqueada` states here **what is missing to validate it** — applying the migration, an environment, a third party — so the next run knows what to execute before flipping the state.
|
|
20
20
|
|
|
21
21
|
## Open questions
|
|
22
22
|
Live doubts not yet resolved — the section exists only while there are any (rule 1). Deferred ones move to the session's `BACKLOG` or the flow doc's `## Open questions`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Use when a plan is ready to implement
|
|
2
|
+
description: Use when a plan is ready to implement. Starts/resumes plan-exec-loop over docs/plans/PPP-plan-<slug>.md, re-inferring continuous batches and deferring their validation, review and single-per-source commits to batch close.
|
|
3
3
|
argument-hint: <docs/plans/PPP-plan-<slug>.md>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
@@ -12,19 +12,25 @@ allowed-tools:
|
|
|
12
12
|
|
|
13
13
|
# plan-exec — trampoline to the execution loop
|
|
14
14
|
|
|
15
|
-
Starts or resumes `plan-exec-loop` (Layer 2)
|
|
15
|
+
Starts or resumes `plan-exec-loop` (Layer 2). Phases remain verifiable states; effective batches are
|
|
16
|
+
execution units. The loop re-infers them from live state using
|
|
17
|
+
[`PLAN-EXECUTION-BATCHES`](../modules/PLAN-EXECUTION-BATCHES.md), then updates each phase's
|
|
18
|
+
checkboxes and `> Estado:` line in the living plan.
|
|
16
19
|
|
|
17
20
|
> **Hard floor — applies even if you read nothing beyond this file:**
|
|
18
21
|
>
|
|
19
22
|
> 1. **Session first** — create/resume the run's session before touching code: `aw session-create --type exec --name <slug>-plan-exec --objetivo "<one-line objective>"`; keep its `CHECKPOINT.md` updated (`## Completed` · `## Pending / Next`; `## Open questions` only while live doubts exist).
|
|
20
|
-
> 2. **Git/DB** —
|
|
23
|
+
> 2. **Git/DB** — branch-check before a batch; exactly one commit per affected source after its
|
|
24
|
+
> checks/review. Use one final approval unless the user explicitly pre-authorized green commits.
|
|
25
|
+
> Never `push`/`--amend`/`--no-verify`; DML/DDL stays in `SCRIPTS.sql`.
|
|
21
26
|
> 3. **Ask, don't invent** — user-dependent decisions go through questions with a recommended option first (≤3 content questions + the `flow` control `Compactar`/`Cerrar`).
|
|
22
27
|
> 4. **Language** — everything user-facing (questions, option labels, reports) goes in the **user's language**.
|
|
23
28
|
|
|
24
29
|
## Run the loop
|
|
25
30
|
|
|
26
31
|
1. `aw context-plan --command plan-exec --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
|
|
27
|
-
2. Follow
|
|
32
|
+
2. Follow it end to end: check executability, infer live batches, execute each without internal
|
|
33
|
+
validation pauses, then validate/review/commit at its close.
|
|
28
34
|
|
|
29
35
|
> `plan-exec-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body. It is **resumable**: an existing CHECKPOINT continues from there.
|
|
30
36
|
|
|
@@ -40,4 +46,4 @@ Starts or resumes `plan-exec-loop` (Layer 2), which executes the real work phase
|
|
|
40
46
|
- `db` — the plan touches a database → [`../modules/EXEC-DB-POLICY.md`](../modules/EXEC-DB-POLICY.md)
|
|
41
47
|
- `probe` — a task is a PoC → [`../modules/EXEC-PROBE-TASKS.md`](../modules/EXEC-PROBE-TASKS.md)
|
|
42
48
|
- `simulation` — **only when the change carries temporary behavior**, its boundary is declared and its retirement identified → [`../modules/SIMULATION-LIFECYCLE.md`](../modules/SIMULATION-LIFECYCLE.md)
|
|
43
|
-
- `ui` — the plan
|
|
49
|
+
- `ui` — the plan pins design references → [`../modules/DESIGN-REFERENCES.md`](../modules/DESIGN-REFERENCES.md). Before implementing a task that pins one, `aw designs --plan <plan-doc>` decides: absent, altered, revoked or an applicable closure short of `handoff` **block** naming the artifact and the fix; superseded-but-intact only warns. `plan-exec` never redesigns.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Use when a spec is ready to become an executable plan
|
|
2
|
+
description: Use when a spec is ready to become an executable plan. Starts plan-new-loop from docs/specs/NNN-spec-<slug>.md, turning the "what" into functional phases and inferred execution batches. Also adopts an external plan and may split siblings.
|
|
3
3
|
argument-hint: <docs/specs/NNN-spec-<slug>.md | prompt>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
@@ -32,11 +32,15 @@ SPEC → PLAN bridge. Turns the "what" (refined spec) into the "how" (plan). Del
|
|
|
32
32
|
|
|
33
33
|
The plan is born with `### Fn` phases that each leave a **verifiable state of the system** — each with its `> Estado:` line, its primary evidence and its exit condition — never a list of files, classes or layers. The blocks beyond those are **conditional**: a phase with no temporary behavior gets no `Límite de simulación`, and one with nothing excluded gets no `Diferido` — a heading is never written empty to satisfy a template. The plan itself is born `> Estado: open`; only `plan-exec` closes it.
|
|
34
34
|
|
|
35
|
+
It also writes the complete `## Execution batches` partition from
|
|
36
|
+
[`PLAN-EXECUTION-BATCHES`](../modules/PLAN-EXECUTION-BATCHES.md): maximal eligible ranges are
|
|
37
|
+
`continuous`; the rest are one-phase `isolated` units. This is inferred, not asked.
|
|
38
|
+
|
|
35
39
|
## More context
|
|
36
40
|
|
|
37
41
|
`aw context-plan --command plan-new --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
|
|
38
42
|
|
|
39
43
|
- `input` — the argument is not plainly a `ready-for-plan` spec → [`../modules/PLAN-INPUT.md`](../modules/PLAN-INPUT.md)
|
|
40
44
|
- `split` — the spec may need more than one plan → [`../modules/PLAN-SPLIT-GATE.md`](../modules/PLAN-SPLIT-GATE.md)
|
|
41
|
-
- `ui` — the plan includes UI,
|
|
45
|
+
- `ui` — the plan includes UI: promote the closure, pin the roots → [`../modules/DESIGN-REFERENCES.md`](../modules/DESIGN-REFERENCES.md)
|
|
42
46
|
- `probe` — the plan rests on a runnable unknown → [`../modules/PLAN-PROBE-TASKS.md`](../modules/PLAN-PROBE-TASKS.md)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Use when a plan must become executable before running it
|
|
2
|
+
description: Use when a plan must become executable before running it. Starts plan-refine-loop, which re-shapes docs/plans/PPP-plan-<slug>.md in place into verifiable functional states and re-infers its execution batches.
|
|
3
3
|
argument-hint: <docs/plans/PPP-plan-<slug>.md>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
@@ -28,7 +28,10 @@ allowed-tools:
|
|
|
28
28
|
|
|
29
29
|
> `plan-refine-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body.
|
|
30
30
|
|
|
31
|
-
**Expected output: an executable plan.**
|
|
31
|
+
**Expected output: an executable plan.** Each phase has evidence and an exit condition;
|
|
32
|
+
**only when the change carries temporary behavior**, it declares that boundary. The complete partition follows
|
|
33
|
+
[`PLAN-EXECUTION-BATCHES`](../modules/PLAN-EXECUTION-BATCHES.md), so execution need not invent or
|
|
34
|
+
ask about units.
|
|
32
35
|
|
|
33
36
|
## More context
|
|
34
37
|
|
|
@@ -38,4 +41,4 @@ allowed-tools:
|
|
|
38
41
|
- `resume` — a prior refinement of this plan may exist → [`../modules/PLAN-REFINE-KEYS.md`](../modules/PLAN-REFINE-KEYS.md)
|
|
39
42
|
- `replan` — work already executed has to be re-planned around → [`../modules/REPLANNING.md`](../modules/REPLANNING.md)
|
|
40
43
|
- `simulation` — the change carries temporary behavior, so **only when** it does, its boundary is declared → [`../modules/SIMULATION-LIFECYCLE.md`](../modules/SIMULATION-LIFECYCLE.md)
|
|
41
|
-
- `ui` — the refine touches UI → [`../modules/
|
|
44
|
+
- `ui` — the refine touches UI, so it revises only the artifacts it affects → [`../modules/DESIGN-REFERENCES.md`](../modules/DESIGN-REFERENCES.md)
|
|
@@ -30,8 +30,8 @@ Delegates to `quick-loop` (Layer 2). Creates a light session (traceability + res
|
|
|
30
30
|
|
|
31
31
|
## Two things this command never does
|
|
32
32
|
|
|
33
|
-
- **It never
|
|
34
|
-
- **It never re-derives what the conversation already settled
|
|
33
|
+
- **It never writes `docs/`** and it exports nothing. It may READ a design package; changing one escalates.
|
|
34
|
+
- **It never re-derives what the conversation already settled** — that analysis is *input* (`## Origin` = adopted).
|
|
35
35
|
|
|
36
36
|
## More context
|
|
37
37
|
|
|
@@ -76,7 +76,7 @@ Assumed facts.
|
|
|
76
76
|
Pending doubts. ← the spec-refine-loop closes them.
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
> **`Open questions` goes last** — the refined spec **inserts before `Open questions`** `##
|
|
79
|
+
> **`Open questions` goes last** — the refined spec **inserts before `Open questions`** `## Design references` (if there is UI) + `## Decisions`, and may add `## Affected capabilities` / `## Behavioral changes` right after `Context` when the change touches behavior that already exists (refined schema in the [`spec-refine-loop`](../loops/spec-refine-loop/LOOP.md); the refine drops `Open questions` when it empties). Draft and refined spec share the same skeleton and order.
|
|
80
80
|
|
|
81
81
|
**Filling notes:**
|
|
82
82
|
|
|
@@ -88,7 +88,7 @@ Pending doubts. ← the spec-refine-loop closes them.
|
|
|
88
88
|
- **The code found never widens `Scope`** and never becomes a requirement: **acceptance criteria derive from the user's intent**. The reconnaissance may lend vocabulary, name existing actors and boundaries, and avoid obvious contradictions. It must not invent behavior nobody asked for, turn a current technical decision into a user requirement, or impose an implementation as a criterion.
|
|
89
89
|
- **Acceptance criteria = static testable criteria** (the "what"): `plan-exec` validates them, but progress is tracked in the PLAN (its Tasks), never by ticking these `- [ ]`; the spec never mutates by execution, only by a re-refine.
|
|
90
90
|
- **Scenarios = behavior made concrete** (uppercase GIVEN/WHEN/THEN/AND): draft them only when the prompt already describes behavior — deriving the rest is spec-refine work. A scenario earns its place only when it adds GIVEN setup or edge semantics the criterion does not capture — **never restate a criterion 1:1**.
|
|
91
|
-
- If **UI** is involved, mention it in `Requirement`/`Context
|
|
91
|
+
- If **UI** is involved, **record the need and stop there**: mention it in `Requirement`/`Context`. This command creates **no design package** and writes no `## Design references` — the design is composed in `spec-refine` (via the [`design`](../roles/design/ROLE.md) capability, which publishes the package the spec then references). Minting a package from a draft would pin an identity before the requirement is even closed. "UI unspecified" is a first-class refinement gap.
|
|
92
92
|
- The **gaps** the loop detects = weak sections of the schema (vague Requirement, Scope without `Out`, untestable criteria, open questions, undeclared assumptions, contradictions) **+ UI unspecified** when the requirement involves UI.
|
|
93
93
|
- Equivalent alternative: the user writes the draft by hand. Both paths produce the same file.
|
|
94
94
|
|
|
@@ -35,5 +35,6 @@ Delegates to `spec-refine-loop` (Layer 2), which iterates, closes the blocking g
|
|
|
35
35
|
`aw context-plan --command spec-refine --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
|
|
36
36
|
|
|
37
37
|
- `shape` — the loop's change-shape gate fired and you must tell `split` from `replace` → [`../modules/SPEC-CHANGE-SHAPE.md`](../modules/SPEC-CHANGE-SHAPE.md)
|
|
38
|
+
- `ui` — the requirement involves UI, so the spec references a design package instead of containing one → [`../modules/DESIGN-REFERENCES.md`](../modules/DESIGN-REFERENCES.md)
|
|
38
39
|
- `resume` — a prior refinement of this spec may exist → [`../modules/SPEC-REFINE-KEYS.md`](../modules/SPEC-REFINE-KEYS.md)
|
|
39
40
|
- `web` — the solution space looks unexplored and the loop opens its ideation step → [`../modules/IDEATION-GATE.md`](../modules/IDEATION-GATE.md)
|
|
@@ -22,6 +22,36 @@
|
|
|
22
22
|
"classification": "in-conversation work has to be classified before it is written",
|
|
23
23
|
"authoring": "the deliverable's own notation, structure or ordering is not obvious from the material"
|
|
24
24
|
},
|
|
25
|
+
"$comment_flow_signals": "Vocabulary the AGENT may declare at a flow boundary — kept HERE, next to the context signals, so there is one catalog and not two that drift. The frontier is exact: recognizing a signal is judgment (the agent's), applying the threshold over the declared signals is a rule (the CLI's). A signal outside this vocabulary never advances a journey. Each id must be consumed by some transition of the authority registry, and every signal a transition consumes must appear here: the guard runs in both directions.",
|
|
26
|
+
"flow_signals": {
|
|
27
|
+
"quick.needs-architecture": "the objective cannot be met without deciding how responsibilities are distributed",
|
|
28
|
+
"quick.two-or-more-sources": "the change reaches two or more declared sources",
|
|
29
|
+
"quick.multiple-deliverables": "the objective bundles more than one independent deliverable",
|
|
30
|
+
"quick.large-feature-or-refactor": "the size is that of a feature or a refactor, not a scoped fix",
|
|
31
|
+
"quick.ambiguous-requirements": "what is being asked needs elicitation before anything can be built",
|
|
32
|
+
"quick.deliverable-is-analysis": "what the task produces is an analysis or a design, so its criterion is a rubric a person ratifies",
|
|
33
|
+
"spec.functional-ambiguity": "a functional ambiguity with two readings that would change what gets built is blocking this spec",
|
|
34
|
+
"spec.solution-space-unexplored": "a trigger of the ideation gate fires: the spec settled on its first idea and the alternatives would change the outcome",
|
|
35
|
+
"spec.independent-outcomes": "the prompt holds outcomes each worth delivering on its own",
|
|
36
|
+
"spec.enumerated-features": "the prompt enumerates distinct features explicitly",
|
|
37
|
+
"spec.distinct-moments": "the parts are requested for different moments or in a stated order",
|
|
38
|
+
"spec.independent-value": "the users or the value of each part do not depend on the others",
|
|
39
|
+
"plan.independent-tranches": "the tranches are executable and deliverable independently",
|
|
40
|
+
"plan.no-shared-deps": "the tranches share neither dependencies nor risk",
|
|
41
|
+
"plan.distinct-priorities": "the tranches are requested at different moments or priorities",
|
|
42
|
+
"plan.far-beyond-s": "the plan far exceeds S-complexity phases",
|
|
43
|
+
"plan.staging-requested": "the person asked for the work to be staged",
|
|
44
|
+
"plan.dependency-outside-range": "a phase of the range depends on something neither already satisfied nor an earlier phase of that same range",
|
|
45
|
+
"plan.result-shapes-later": "a phase result, proof, probe or human decision determines how a later phase has to be built",
|
|
46
|
+
"plan.blocker-between-phases": "an unresolved question, a live blocker, an operative handoff or an irreversible external action sits between the phases",
|
|
47
|
+
"plan.recovery-boundary": "an intermediate commit, release, review or deployment is a required recovery boundary",
|
|
48
|
+
"plan.not-one-reviewable-unit": "the combined change is not coherent, recoverable and reviewable as a single unit",
|
|
49
|
+
"plan.entry-gap-minor": "the plan is all but executable: the gap is derivable from what it already states, so it can be normalized in place",
|
|
50
|
+
"plan.entry-gap-structural": "phases, contracts or journey are missing, or temporary behavior leaves its boundary undeclared",
|
|
51
|
+
"plan.deviation-structural": "the change that appeared while implementing touches a contract, the participating components, the phase order or the simulation boundary",
|
|
52
|
+
"plan.deviation-functional": "the change that appeared while implementing touches the expected result, the scope, a business rule or an acceptance criterion",
|
|
53
|
+
"chassis.context-pressure": "a fresh reader would need the CHECKPOINT to continue this run"
|
|
54
|
+
},
|
|
25
55
|
"commands": {
|
|
26
56
|
"quick": {
|
|
27
57
|
"core": [
|
|
@@ -53,6 +83,10 @@
|
|
|
53
83
|
"signal": "db",
|
|
54
84
|
"requires": "external-data"
|
|
55
85
|
},
|
|
86
|
+
{
|
|
87
|
+
"path": "modules/DESIGN-REFERENCES.md",
|
|
88
|
+
"signal": "ui"
|
|
89
|
+
},
|
|
56
90
|
{
|
|
57
91
|
"path": "modules/COMPACTION.md",
|
|
58
92
|
"signal": "compaction",
|
|
@@ -100,6 +134,10 @@
|
|
|
100
134
|
"path": "modules/SPEC-REFINE-KEYS.md",
|
|
101
135
|
"signal": "resume"
|
|
102
136
|
},
|
|
137
|
+
{
|
|
138
|
+
"path": "modules/DESIGN-REFERENCES.md",
|
|
139
|
+
"signal": "ui"
|
|
140
|
+
},
|
|
103
141
|
{
|
|
104
142
|
"path": "modules/IDEATION-GATE.md",
|
|
105
143
|
"signal": "web",
|
|
@@ -130,7 +168,12 @@
|
|
|
130
168
|
]
|
|
131
169
|
},
|
|
132
170
|
"plan-new": {
|
|
133
|
-
"core": [
|
|
171
|
+
"core": [
|
|
172
|
+
"commands/plan-new.md",
|
|
173
|
+
"loops/plan-new-loop/LOOP.md",
|
|
174
|
+
"modules/PLAN-EXECUTION-BATCHES.md",
|
|
175
|
+
"loops/CHASSIS.md"
|
|
176
|
+
],
|
|
134
177
|
"modules": [
|
|
135
178
|
{
|
|
136
179
|
"path": "modules/PLAN-MODE.md",
|
|
@@ -149,7 +192,7 @@
|
|
|
149
192
|
"signal": "split"
|
|
150
193
|
},
|
|
151
194
|
{
|
|
152
|
-
"path": "modules/
|
|
195
|
+
"path": "modules/DESIGN-REFERENCES.md",
|
|
153
196
|
"signal": "ui"
|
|
154
197
|
},
|
|
155
198
|
{
|
|
@@ -185,6 +228,7 @@
|
|
|
185
228
|
"commands/plan-refine.md",
|
|
186
229
|
"loops/plan-refine-loop/LOOP.md",
|
|
187
230
|
"loops/plan-new-loop/LOOP.md",
|
|
231
|
+
"modules/PLAN-EXECUTION-BATCHES.md",
|
|
188
232
|
"loops/CHASSIS.md"
|
|
189
233
|
],
|
|
190
234
|
"modules": [
|
|
@@ -213,11 +257,7 @@
|
|
|
213
257
|
"signal": "split"
|
|
214
258
|
},
|
|
215
259
|
{
|
|
216
|
-
"path": "modules/
|
|
217
|
-
"signal": "ui"
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
"path": "modules/PLAN-DESIGN-SPECS.md",
|
|
260
|
+
"path": "modules/DESIGN-REFERENCES.md",
|
|
221
261
|
"signal": "ui"
|
|
222
262
|
},
|
|
223
263
|
{
|
|
@@ -260,6 +300,7 @@
|
|
|
260
300
|
"core": [
|
|
261
301
|
"commands/plan-exec.md",
|
|
262
302
|
"loops/plan-exec-loop/LOOP.md",
|
|
303
|
+
"modules/PLAN-EXECUTION-BATCHES.md",
|
|
263
304
|
"loops/CHASSIS.md",
|
|
264
305
|
"loops/CODE-POLICIES.md"
|
|
265
306
|
],
|
|
@@ -296,7 +337,7 @@
|
|
|
296
337
|
"signal": "simulation"
|
|
297
338
|
},
|
|
298
339
|
{
|
|
299
|
-
"path": "modules/
|
|
340
|
+
"path": "modules/DESIGN-REFERENCES.md",
|
|
300
341
|
"signal": "ui"
|
|
301
342
|
},
|
|
302
343
|
{
|
|
@@ -437,6 +478,13 @@
|
|
|
437
478
|
]
|
|
438
479
|
}
|
|
439
480
|
},
|
|
481
|
+
"capabilities": {
|
|
482
|
+
"$comment": "Conformant capabilities: the same read-set question as a command, and deliberately NOT commands — no commands/<name>.md, no activation median, no reclassification as a single-pass command.",
|
|
483
|
+
"design": {
|
|
484
|
+
"core": ["roles/design/CONTRACT.md"],
|
|
485
|
+
"modules": []
|
|
486
|
+
}
|
|
487
|
+
},
|
|
440
488
|
"journeys": [
|
|
441
489
|
{
|
|
442
490
|
"id": "spec",
|
|
@@ -476,7 +524,7 @@
|
|
|
476
524
|
}
|
|
477
525
|
],
|
|
478
526
|
"budget_policy": {
|
|
479
|
-
"$comment": "Ratios of the frozen baseline (spec 009
|
|
527
|
+
"$comment": "Ratios of the frozen baseline (spec 009 § Decisions: -30% discovery, -40% median and -20% minimum activation, -25% median execution, +5% ceiling per journey). Absolute targets are DERIVED from baseline x ratio, never written by hand. The +5% ceiling also caps modules.total, the conditional tree as one figure: a representative journey carries no signal, so no journey line ever prices a module, and without that line the modules would grow unwatched.",
|
|
480
528
|
"discovery_max_ratio": 0.7,
|
|
481
529
|
"activation_median_max_ratio": 0.6,
|
|
482
530
|
"activation_each_max_ratio": 0.8,
|
|
@@ -79,6 +79,26 @@ Concrete mechanism per harness (matrix base verified **Jul-2026**; the `structur
|
|
|
79
79
|
|
|
80
80
|
> **web-research (consumer & consent).** Single consumer today: `spec-refine-loop` § *Ideation gate* (the SPEC flow's divergent gate). Consent is **bundled into accepting that gate's offer** — one accepted offer authorizes that round's searches; never free browsing outside a consented round. It is *enhancement*, never a `must`: on degrade the loop ideates **offline and declares it** (unlike host-memory's silent omit — the user consented expecting the web, so silence would mislead).
|
|
81
81
|
|
|
82
|
+
## Directive presentation (flow boundaries)
|
|
83
|
+
|
|
84
|
+
A host surface — a command wrapper, a skill, an adapter — **invokes** the direction engine (`aw flow advance` / `aw flow submit`), **transports** the directive it returns and **presents** it. It never re-derives a transition, re-orders a journey or restates a rule the engine owns: the CLI decides, the surface shows. Two surfaces on two hosts therefore show the *same* boundary through *different* mechanisms, which is precisely the *capability, not tool* principle applied to one more capability.
|
|
85
|
+
|
|
86
|
+
Each boundary kind maps to a capability **already catalogued above**; this table adds no host column, so per-host mechanisms keep living in exactly one place — the binding matrix.
|
|
87
|
+
|
|
88
|
+
| Boundary | What it asks for | Capability used | Must survive the presentation |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| **semantic** | a bounded judgment from the agent | *procedure-loading* — the agent reads the request's `read_set` and answers inline; no human mechanism involved | `request` whole — contract, limits, `read_set` — and `state_digest` |
|
|
91
|
+
| **human** | a preference nobody may infer | *structured-choice* | every `choices` entry with its consequence, and the single recommendation |
|
|
92
|
+
| **authorization** | an approval over the effect classes it names | *structured-choice* | `choices`, `effects`, `authorizations`, and the approval digest carried in `next_action` |
|
|
93
|
+
| **execution** | a step the CLI decided and cannot run inside its own process | *command-invocation* — run exactly the invocation the directive names | `action` whole — program, args, target, input, the `evidence` demanded and the recovery — plus `state_digest` |
|
|
94
|
+
| **blocked** | nothing, until the cause is cleared | — (plain report) | `error`: code, message and the one valid action |
|
|
95
|
+
| **final** | nothing: the journey is done | — (plain report) | `pending` (empty) and the `applied` trace with each step's authority |
|
|
96
|
+
|
|
97
|
+
- **Four things a presentation may never drop**, whatever the host: the **options** with their consequence (`choices`), the **explanation** of what is being asked (`request` at a semantic boundary), the **effects** at stake (`effects` + `authorizations`), and the **resume evidence** (`state_digest` + `session`) — without that last pair the boundary cannot be answered from another host, or after the conversation is gone.
|
|
98
|
+
- **Degrade the mechanism, never the content.** A host with no native question surface renders labeled markdown (see the matrix); it does not merge, truncate or drop alternatives to fit. Losing content is a *degradation* and is declared as one.
|
|
99
|
+
- **Ownership travels with every step.** The trace says each applied transition is `cli-owned`, and a surface may not present one as its own decision — the registry (`domain/flow/authority.ts`) is the only place ownership changes.
|
|
100
|
+
- **An execution boundary is answered with output, never with agreement.** The surface transports `action` unchanged, the executor runs *that* invocation, and `aw flow submit` brings back the real result: the outcome, the invocation it actually ran, and one validation per demanded evidence id carrying the tool's own output in `detail`. A boolean confirmation, a narration or an approval already granted prove nothing ran — the engine refuses them and the transition stays pending with the action's declared recovery.
|
|
101
|
+
|
|
82
102
|
## Leverage installed skills
|
|
83
103
|
|
|
84
104
|
"Leverage whatever skills the harness has installed" resolves through the **same** `.workflow/skills.toml` binding: a role can point at a skill **installed on the host** (third-party, via skills.sh) instead of the built-in. Rule:
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This document is the **common engine** of the Workline loops: the doctrine every loop runs underneath its deltas. **It is not a skill** — it is a referenced document: every loop orders it read from its `## Inherits`, **always, before its deltas**. If you edit the engine, edit it **here** — heirs never repeat it, they only reference it.
|
|
4
4
|
|
|
5
|
+
> **When each step below happens is no longer this document's call:** the deterministic steps below are decided by the CLI (`aw flow advance`), not by this document. What stays is what each rule is FOR — the half no engine carries.
|
|
6
|
+
|
|
5
7
|
## Heirs (canonical list)
|
|
6
8
|
|
|
7
9
|
The **5 loops** run this engine; each adds only its deltas:
|
|
@@ -67,13 +69,7 @@ The loop works **artifact-first**: the artifact is **seeded before** executing a
|
|
|
67
69
|
|
|
68
70
|
## Gap-driven convergent engine
|
|
69
71
|
|
|
70
|
-
The common cycle — each heir instantiates it in its `## Sequence` with its own gap taxonomy:
|
|
71
|
-
|
|
72
|
-
1. `detect_gaps(work)`, minus the *exhausted* gaps (see *Research*).
|
|
73
|
-
2. If `∅` → **convergence gate** (see *Convergence / exit*).
|
|
74
|
-
3. If there are gaps: take a batch (≤3) and **seed** `CHECKPOINT.Pending/Next` (*artifact-first*).
|
|
75
|
-
4. Resolve each gap with its **resolver** per the *ask-vs-research rule*: human (structured-choice) · inline research · a probe (PoC) · a composed capability (e.g. `ui-design`).
|
|
76
|
-
5. **Integrate**, update `CHECKPOINT` → repeat.
|
|
72
|
+
The common cycle — each heir instantiates it in its `## Sequence` with its own gap taxonomy: detect the gaps, seed `CHECKPOINT.Pending/Next` (*artifact-first*), resolve each with its resolver, integrate, repeat until none is left and the convergence gate can run. The pacing is the CLI's — one open boundary at a time, which meets the ≤3 ceiling by construction. Why it is gap-driven at all stays here: a plan fixed up front cannot notice what it did not know.
|
|
77
73
|
|
|
78
74
|
## Internal sessions (managed) — one session per run
|
|
79
75
|
|
|
@@ -87,12 +83,7 @@ The loop creates and manages its session under `.workflow/sessions/`; **the user
|
|
|
87
83
|
|
|
88
84
|
## Ask-vs-research rule (the discriminator)
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
> *"Was this already established in the current conversation?"* → **adopt it** (`adopted` module) — never re-ask or re-research settled conclusions.
|
|
93
|
-
> *"Can I answer this by reading the repo/data?"* → **research** (autonomous).
|
|
94
|
-
> *"Can I only answer it by RUNNING a small experiment?"* → **probe** (`probe` module).
|
|
95
|
-
> *"Does it depend on what the user wants?"* → **ask the human** (structured-choice).
|
|
86
|
+
Which resolver a gap gets is the kind of thing it is, and the CLI classifies it: a boundary's kind IS its resolver. Already **established in this conversation** → adopt it (`adopted` module), never re-ask a settled conclusion · answerable by **reading** the repo/data → research, autonomously · answerable only by **RUNNING a small experiment** → a probe (`probe` module) · dependent on **what the user wants** → ask the human. Why: asking a person what a file already says wastes the one resource the loop cannot regenerate, and guessing what only they decide is worse.
|
|
96
87
|
|
|
97
88
|
## Research: autonomy, scope & failure
|
|
98
89
|
|
|
@@ -101,16 +92,16 @@ Investigation is **inline**: an activity **inside the run's current session**, n
|
|
|
101
92
|
- **Autonomous**: the AI investigates inline and reports **without asking permission**. The human learns of it at integration time and keeps control via the `flow` control.
|
|
102
93
|
- **Scope**: the current conversation (settled conclusions are reused, never re-derived) + workspace + associated repos + DB MCPs.
|
|
103
94
|
- **DB rule** — the single exception to autonomy: it lives in the `db` module and is loaded **before** any query runs.
|
|
104
|
-
- **Inconclusive research** (DB unavailable, insufficient evidence, unresolvable factual gap): the investigation closes with status **`inconclusive`** in `CONCLUSIONS` and reports why. The loop **degrades** the gap — to a human question, or failing that to the flow doc's `## Open questions` (the session's `BACKLOG` when the flow has no doc) —
|
|
95
|
+
- **Inconclusive research** (DB unavailable, insufficient evidence, unresolvable factual gap): the investigation closes with status **`inconclusive`** in `CONCLUSIONS` and reports why. The loop **degrades** the gap — to a human question, or failing that to the flow doc's `## Open questions` (the session's `BACKLOG` when the flow has no doc) — instead of re-firing it. Counting the attempts and refusing the one past the cap is the CLI's; declaring where a degraded gap GOES is doctrine's, because a gap dropped without a destination is the convergence this engine promises, faked.
|
|
105
96
|
|
|
106
97
|
## Structured-choice (design & batching)
|
|
107
98
|
|
|
108
|
-
**Canonical
|
|
99
|
+
**Canonical form:** *structured-choice* = **≤3 content questions + 1 `flow` control**, always. Each option is a **short semantic label + one functional sentence** (outcome/trade-off or simple example), never a positional code. The CLI builds it and refuses a question that does not hold this form. Present it with the richest current binding in [`HARNESS.md`](../harness/HARNESS.md); otherwise labeled markdown.
|
|
109
100
|
|
|
110
|
-
- **Flow:** `Compactar` | `Cerrar
|
|
101
|
+
- **Flow:** `Compactar` | `Cerrar`, appended to every boundary with alternatives — never the question's to omit, because one nobody can pause or leave is not a question. An unanswered control means continue (`Continuar` when the UI requires it). Under context pressure the loop **raises the choice itself**, recommending `Compactar`.
|
|
111
102
|
- **Content/batching:** human gaps, pre-query MCP choice and the convergence action | `Preguntar algo más`; at most 3 per call. Honor a smaller native ceiling by reserving one question slot for `flow`; carry overflow, prioritizing blockers.
|
|
112
103
|
- **Options/encoding:** prefer 2–3 alternatives. Map label/sentence to separate fields or `Label — functional sentence`. If it cannot fit, use labeled markdown; never truncate or merge candidates or duplicate a host-provided free-text option.
|
|
113
|
-
- **Recommendation:**
|
|
104
|
+
- **Recommendation:** exactly one option is *recommended*, it comes first, and it comes from research; the human ratifies or corrects it, never starts cold.
|
|
114
105
|
- **Text fallback:** answer by label; `Aceptar recomendaciones` accepts all first options. Never require composite coordinates such as `1A, 2A, 3A`.
|
|
115
106
|
|
|
116
107
|
> Canonical labels (`Continuar`, `Compactar`, `Cerrar`, `Aceptar recomendaciones`, `Guardar plan`, …) stay verbatim; other user-facing text follows [`SKILL.md`](../SKILL.md) § *Language policy*.
|
|
@@ -129,12 +120,12 @@ Resume **keys off the `CHECKPOINT`** of the run's session, not the existence of
|
|
|
129
120
|
|
|
130
121
|
## Convergence / exit
|
|
131
122
|
|
|
132
|
-
- **No material gaps** → **convergence gate** (read-only) = **`Success criteria` green** (*verification-first*). Whatever fails **comes back as a gap**; if it passes → the loop **flips the green criteria** in `SESSION.md` (`- [ ]` → `- [x]`) and offers its closing action. The checklist must reflect the real final state: a criterion left unchecked at `finalize` needs an explicit reason. Each heir names its own instance of this gate.
|
|
133
|
-
- `Cerrar` (the `flow` control, at any time) → `finalize
|
|
123
|
+
- **No material gaps** → **convergence gate** (read-only) = **`Success criteria` green** (*verification-first*). Whatever fails **comes back as a gap**; if it passes → the loop **flips the green criteria** in `SESSION.md` (`- [ ]` → `- [x]`) and offers its closing action. The checklist must reflect the real final state: a criterion left unchecked at `finalize` needs an explicit reason. Each heir names its own instance of this gate, and those instances are what realize it.
|
|
124
|
+
- `Cerrar` (the `flow` control, at any time) → `finalize`, the last step of every journey. **`finalize` always persists `CHECKPOINT.md`** (resumable) and, **only if** something was deferred, writes `BACKLOG.md` (close reason + the deferred items); closes the session and reports. Progress survives even without a prior `Compactar`.
|
|
134
125
|
|
|
135
126
|
## docs/ boundary — no auto-export (hard rule)
|
|
136
127
|
|
|
137
|
-
A loop writes into `docs/` **only** its own flow's doc
|
|
128
|
+
A loop writes into `docs/` **only** its own flow's doc plus, when it composes a capability whose own deliverable is a `docs/` category, that category — today only the **UI Design Package** under `docs/designs` (`design`). Which folders that is per flow, and refusing any delegated step whose target leaves them, is the CLI's. **Published, never graduated**: the test is the origin, not the folder. No loop **graduates/promotes artifacts** into `docs/`: migrations → `docs/scripts`, manuals → `docs/manuals`, diagrams → `docs/diagrams` are done by the separate **`export-*`** skills, as an explicit later step; artifacts stay in their sessions until then. A task that creates a tool/utility has it documented in `docs/tools` by the ambient `creating-tools` skill (auto-discovered; Workline does not bind it).
|
|
138
129
|
|
|
139
130
|
## Conditional modules
|
|
140
131
|
|