@tacuchi/agent-workflow-cli 21.6.0 → 21.7.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/dist/application/artifacts-service.js +10 -0
- package/dist/application/artifacts-service.js.map +1 -1
- package/dist/application/capability/design-handler.js +224 -12
- package/dist/application/capability/design-handler.js.map +1 -1
- package/dist/application/capability/dispatcher.js +20 -6
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/durable-effect.js +23 -157
- package/dist/application/capability/durable-effect.js.map +1 -1
- package/dist/application/checkpoint-service.js +49 -3
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +5 -0
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/design/design-gate-service.js +18 -0
- package/dist/application/design/design-gate-service.js.map +1 -1
- package/dist/application/design/design-index-service.js +2 -0
- package/dist/application/design/design-index-service.js.map +1 -1
- package/dist/application/design/design-resolver-service.js +18 -1
- package/dist/application/design/design-resolver-service.js.map +1 -1
- package/dist/application/design/design-simple-service.js +217 -0
- package/dist/application/design/design-simple-service.js.map +1 -0
- package/dist/application/flow/advance.js +96 -11
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/flow-service.js +12 -1
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +221 -0
- package/dist/application/flow/internal-actions.js.map +1 -0
- package/dist/application/flow/internal-drive.js +293 -0
- package/dist/application/flow/internal-drive.js.map +1 -0
- package/dist/application/flow/submit.js +242 -84
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/local-proposal.js +171 -0
- package/dist/application/local-proposal.js.map +1 -0
- package/dist/application/parsers/decisiones.js +13 -0
- package/dist/application/parsers/decisiones.js.map +1 -1
- package/dist/application/paths-service.js +11 -1
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/resume-service.js +22 -26
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +10 -2
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/session-artifacts.js +53 -0
- package/dist/application/session-artifacts.js.map +1 -1
- package/dist/application/session-close-service.js +5 -0
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-narrative.js +294 -0
- package/dist/application/session-narrative.js.map +1 -0
- package/dist/application/status-service.js +1 -0
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +2 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/designs.js +4 -1
- package/dist/cli/commands/designs.js.map +1 -1
- package/dist/cli/commands/flow.js +14 -0
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/session-artifacts.js +55 -2
- package/dist/cli/commands/session-artifacts.js.map +1 -1
- package/dist/domain/design/capability.js +35 -4
- package/dist/domain/design/capability.js.map +1 -1
- package/dist/domain/design/direct.js.map +1 -1
- package/dist/domain/design/expansion.js +137 -0
- package/dist/domain/design/expansion.js.map +1 -0
- package/dist/domain/design/manifest.js +61 -8
- package/dist/domain/design/manifest.js.map +1 -1
- package/dist/domain/design/reference.js +57 -10
- package/dist/domain/design/reference.js.map +1 -1
- package/dist/domain/design/simple.js +164 -0
- package/dist/domain/design/simple.js.map +1 -0
- package/dist/domain/flow/answer.js +90 -12
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +266 -60
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/authorization.js +36 -15
- package/dist/domain/flow/authorization.js.map +1 -1
- package/dist/domain/flow/directive.js +10 -6
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/execution-result.js +72 -0
- package/dist/domain/flow/execution-result.js.map +1 -0
- package/dist/domain/flow/run-state.js +165 -13
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/host-verification.js +8 -8
- package/dist/domain/host-verification.js.map +1 -1
- package/dist/domain/proposal.js +91 -0
- package/dist/domain/proposal.js.map +1 -0
- package/dist/domain/session/narrative.js +126 -0
- package/dist/domain/session/narrative.js.map +1 -0
- package/package.json +1 -1
- package/skills/w/SKILL.md +1 -1
- package/skills/w/loops/CHASSIS.md +1 -1
- package/skills/w/loops/plan-new-loop/LOOP.md +5 -6
- package/skills/w/loops/plan-refine-loop/LOOP.md +7 -7
- package/skills/w/loops/spec-refine-loop/LOOP.md +6 -4
- package/skills/w/modules/DESIGN-REFERENCES.md +50 -56
- package/skills/w/roles/design/CONTRACT.md +73 -6
- package/skills/w/roles/design/ROLE.md +21 -3
- package/skills/w/schemas/design/design-manifest.v1.schema.json +4 -0
|
@@ -46,7 +46,7 @@ Closing *every* gap turns the spec into a premature plan. Close what changes **w
|
|
|
46
46
|
**Adopt, do not repeat.** `spec-new`'s **facts** are reused; its **assumptions** are re-validated **only when one blocks a gap**; its `Open questions` are re-classified by destination; its one-vs-many hypothesis is re-judged at the *Change-shape gate*. The shallow sweep is never re-run wholesale. Keep the labels distinct — a spec that blurs them cannot be gated: **fact** (backed by repo, data or docs) · **inference** (unproven) · **user decision** · **deferred decision** (owner declared) · **open question** (can still move the contract).
|
|
47
47
|
|
|
48
48
|
## Writes
|
|
49
|
-
Updates `docs/specs/NNN-spec-<slug>.md` **in place** (when the user picks `
|
|
49
|
+
Updates `docs/specs/NNN-spec-<slug>.md` **in place** (when the user picks `Aprobar y guardar`): completes sections, **adds** `## Decisions`, closes `Open questions` as they get resolved, and stamps the frontmatter `status: ready-for-plan`. The stamp travels **inside the proposed bytes** — it is a projection of the same save, not a second write to authorize afterwards. Since it overwrites an existing doc, the preview says so and the person approves it **once**.
|
|
50
50
|
|
|
51
51
|
> **Not every shape decision creates a file** (§ *Change-shape gate*). An accepted **split** writes the reduced original **and** the extracted sibling specs; a replacement by **`Crear una nueva spec`** writes one new file and leaves this one untouched; **`Reformular esta spec`** creates nothing — it edits this same file, same number, same path. Every write, new or overwriting, is confirmed first.
|
|
52
52
|
|
|
@@ -203,9 +203,11 @@ spec-refine-loop(spec):
|
|
|
203
203
|
ideation offer declined → mark that gap exhausted # anti re-fire; on-demand entry stays open
|
|
204
204
|
# no BLOCKING gaps → the CLI evaluates the ready-for-plan gate over the run's
|
|
205
205
|
# Success criteria and asks for their real state; whatever fails comes back as a gap.
|
|
206
|
-
|
|
207
|
-
# split branch →
|
|
208
|
-
|
|
206
|
+
hand the CLI the exact bytes of the refined spec, with status: ready-for-plan already stamped in them
|
|
207
|
+
# split branch → the same bytes carry the extracted siblings as status: draft
|
|
208
|
+
the CLI seals them into ONE proposal and shows its preview: destination, weight, what it replaces
|
|
209
|
+
Aprobar y guardar → the CLI writes every file of the preview, together or not at all ; goto finalize
|
|
210
|
+
Refinar → nothing is written and the refinement stays open
|
|
209
211
|
flow Compactar/Cerrar → handle the same way
|
|
210
212
|
finalize:
|
|
211
213
|
write CHECKPOINT (refine_session) # always persisted
|
|
@@ -6,6 +6,13 @@ The **UI unspecified** gap is resolved by the [`design`](../roles/design/ROLE.md
|
|
|
6
6
|
capability over the **UI Design Package v1**. A spec and a plan **reference** a
|
|
7
7
|
design; neither contains one. The block below is all they carry.
|
|
8
8
|
|
|
9
|
+
A design is **simple** — one authored `DESIGN.md`, everything else derived — by
|
|
10
|
+
default, or an expanded **package** with a declared cause; that vocabulary and the
|
|
11
|
+
authoring contract live in
|
|
12
|
+
[`../roles/design/CONTRACT.md`](../roles/design/CONTRACT.md), and `aw designs`
|
|
13
|
+
prints each mode. Only two consequences reach a citing document: the block is
|
|
14
|
+
identical for both, and the mode decides which task-pin form is legal.
|
|
15
|
+
|
|
9
16
|
## The reference block
|
|
10
17
|
|
|
11
18
|
```markdown
|
|
@@ -16,44 +23,32 @@ design; neither contains one. The block below is all they carry.
|
|
|
16
23
|
digest: `sha256:<64 hex>`
|
|
17
24
|
```
|
|
18
25
|
|
|
26
|
+
A simple design's hint is its `DESIGN.md`.
|
|
27
|
+
|
|
19
28
|
- `package` pins **identity and revision**. `latest`, a folder slug, a bare
|
|
20
|
-
`DES-001` or a title are rejected: each answers a different question next year
|
|
21
|
-
than it does today.
|
|
29
|
+
`DES-001` or a title are rejected: each answers a different question next year.
|
|
22
30
|
- `baseline_hint` is a **location hint**, never the identity. A renamed dossier
|
|
23
31
|
keeps the reference valid and reports the hint as stale.
|
|
24
32
|
- `digest` seals the exact bytes; one that no longer matches never resolves
|
|
25
33
|
quietly.
|
|
26
|
-
- Several
|
|
27
|
-
|
|
34
|
+
- Several designs are several blocks. One named in prose **without being pinned**
|
|
35
|
+
is reported, not ignored.
|
|
28
36
|
|
|
29
37
|
**Never in the document**: Screen Specifications, flow graphs, state inventories,
|
|
30
|
-
region or component tables, mockups, embedded images. Those live
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Publishing the package is the loop writing a composed deliverable through the
|
|
38
|
+
region or component tables, mockups, embedded images. Those live at their own
|
|
39
|
+
revision — carrying them makes a design that cannot be superseded without editing
|
|
40
|
+
its consumer. Publishing is the loop writing a composed deliverable through the
|
|
35
41
|
CLI, not graduating a session artifact (chassis § *docs/ boundary*).
|
|
36
42
|
|
|
37
|
-
## Evidence and lifecycle
|
|
38
|
-
|
|
39
|
-
`trace` marks each criterion `visual`, `interaction` or `not_visual`. Preview
|
|
40
|
-
only visual acceptance; interaction relies on states, semantics and implementation
|
|
41
|
-
proof, never a storyboard merely to satisfy format.
|
|
42
|
-
|
|
43
|
-
The CLI marks a delta **compact** only with an existing surface, ≤2 screens, and
|
|
44
|
-
no journey, rule, token, asset, external dependency, blocker or adaptation.
|
|
45
|
-
Compact publishes one `handoff` for PLAN to reuse. Otherwise it is **expanded**:
|
|
46
|
-
SPEC keeps `outline`; PLAN promotes only its consumed closure. The model authors
|
|
47
|
-
content, not this routing.
|
|
48
|
-
|
|
49
43
|
## SPEC — close the requirement at `outline`
|
|
50
44
|
|
|
51
45
|
1. **Reuse before minting.** `aw designs` lists what the workspace already has; a
|
|
52
46
|
compatible baseline is reused rather than given a second identity.
|
|
53
|
-
2. **Classify the lifecycle.** Compact publishes `handoff`
|
|
54
|
-
`outline`, which may hold unknowns until PLAN promotes its
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
2. **Classify the lifecycle.** Compact publishes one `handoff` for PLAN to reuse;
|
|
48
|
+
otherwise open `outline`, which may hold unknowns until PLAN promotes its
|
|
49
|
+
implemented roots.
|
|
50
|
+
3. **Publish, then reference.** Citing a baseline never published is the dangling
|
|
51
|
+
reference this contract removes.
|
|
57
52
|
|
|
58
53
|
`spec-new` only **records the need**; it mints nothing. The section sits right
|
|
59
54
|
before `## Decisions`.
|
|
@@ -61,55 +56,54 @@ before `## Decisions`.
|
|
|
61
56
|
## PLAN — promote the closure, pin the roots
|
|
62
57
|
|
|
63
58
|
1. **Read the spec's `## Design references`.** No section and a plan with screens
|
|
64
|
-
means the spec never closed its design — a gap back to `spec-refine
|
|
65
|
-
|
|
66
|
-
2. **Express what this plan implements as exact roots** — the flows, screens and
|
|
67
|
-
screen states its phases will build.
|
|
59
|
+
means the spec never closed its design — a gap back to `spec-refine`.
|
|
60
|
+
2. **Express what this plan implements as exact roots.**
|
|
68
61
|
3. **Compute the closure**: a flow reaches its nodes, a screen its flows, and both
|
|
69
62
|
reach the rules, tokens and assets they depend on. It stops there. `flow_refs`
|
|
70
|
-
is *not* followed —
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
handoff from SPEC is already the plan's baseline, not work to repeat.
|
|
74
|
-
5. **Publish the revision**, then write the roots.
|
|
63
|
+
is *not* followed — the inverse relation drags in designs nobody consumes.
|
|
64
|
+
4. **Reuse a valid `handoff`, or promote exactly the missing closure**, then
|
|
65
|
+
publish the revision and write the roots.
|
|
75
66
|
|
|
76
67
|
The plan declares its own `## Design references` — same block — after
|
|
77
|
-
`## Dependencies`, before `## Tasks
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
says so.
|
|
81
|
-
|
|
82
|
-
Then each phase or task pins the exact roots it consumes:
|
|
68
|
+
`## Dependencies`, before `## Tasks`, never a copy of the spec's: that is what
|
|
69
|
+
lets a refine move it to `@r5` while a sibling stays on `@r4`. A task pinning a
|
|
70
|
+
baseline its plan never declared resolves against nothing, and says so.
|
|
83
71
|
|
|
84
72
|
```markdown
|
|
85
73
|
- [ ] T3.2 — Alta de familia desde el formulario · DES-001@r4 / SCR-002@r2#empty
|
|
74
|
+
- [ ] T3.3 — Aviso de duplicado · DES-007@r1
|
|
86
75
|
```
|
|
87
76
|
|
|
88
|
-
`<package>@rN / <artifact>@rN[#state]
|
|
89
|
-
|
|
90
|
-
it once at phase level.
|
|
91
|
-
|
|
92
|
-
|
|
77
|
+
`<package>@rN / <artifact>@rN[#state]` pins inside a **package**: both revisions
|
|
78
|
+
mandatory, the anchor optional and only on a screen, and a phase whose tasks share
|
|
79
|
+
one root may pin it once at phase level. `<package>@rN` alone pins the **root** —
|
|
80
|
+
the only form a **simple** design has, since there is nothing to point inside.
|
|
81
|
+
Asking a simple design for an artifact blocks and sends you to its root; a package
|
|
82
|
+
task pinning a whole revision is legitimate. A root pin walks no closure and
|
|
83
|
+
reaches no maturity, and still resolves identity, revision and digest, refuses a
|
|
84
|
+
revoked revision, and fails closed when the bytes moved. A rendition never answers
|
|
85
|
+
for a root: an approved image is not the current semantics, nor a conformance
|
|
86
|
+
claim.
|
|
93
87
|
|
|
94
88
|
## quick — read it, never rewrite it
|
|
95
89
|
|
|
96
90
|
`quick` **reads and validates** (`aw designs`, `aw designs --plan`); it changes
|
|
97
|
-
nothing a baseline seals — normative content, a maturity, an approval. A
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
91
|
+
nothing a baseline seals — normative content, a maturity, an approval. A tweak
|
|
92
|
+
that needs a new state or a redrawn journey **escalates with the evidence it
|
|
93
|
+
gathered**: `plan-refine` for the package, `spec-refine` when behavior or
|
|
94
|
+
acceptance moves. Editing silently moves the revision while every consumer stays
|
|
95
|
+
pinned to the old digest.
|
|
102
96
|
|
|
103
97
|
## plan-refine — the delta, and only the delta
|
|
104
98
|
|
|
105
99
|
- **New revisions only for the artifacts the refine actually affects.** An
|
|
106
100
|
untouched screen keeps its revision, maturity and digest.
|
|
107
101
|
- **Never re-point another consumer.** Two plans may pin the same baseline;
|
|
108
|
-
publishing `@rN+1` for one leaves the other's reference
|
|
102
|
+
publishing `@rN+1` for one leaves the other's reference as it was.
|
|
109
103
|
- **Re-point only this plan** — its `## Design references` and the tasks whose
|
|
110
|
-
artifacts moved. The spec's section
|
|
111
|
-
|
|
104
|
+
artifacts moved. The spec's section records the baseline the *requirement*
|
|
105
|
+
closed on and is not touched.
|
|
112
106
|
- **Behavior or acceptance changed → `spec-refine` first.** Redrawing a journey,
|
|
113
|
-
adding
|
|
114
|
-
|
|
115
|
-
|
|
107
|
+
adding an undescribed state or moving an acceptance criterion is functional;
|
|
108
|
+
closing it here leaves the spec and the design disagreeing with no way to tell
|
|
109
|
+
which is right.
|
|
@@ -22,6 +22,70 @@ envelope. Every attempt returns `outcome`, `output` and `receipt`. A
|
|
|
22
22
|
`needs_input` is answered with `continue`, which builds the NEXT attempt of the
|
|
23
23
|
same `invocation_id` — it never reuses the previous request.
|
|
24
24
|
|
|
25
|
+
## What a person actually sees
|
|
26
|
+
|
|
27
|
+
Four stages is the machinery. The **visible** journey is four moments and exactly
|
|
28
|
+
one decision:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
comprender fuentes → redactar y organizar → vista previa → Aprobar y guardar | Refinar
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`prepare` publishes what a valid answer must contain and where it may land;
|
|
35
|
+
`validate` seals the exact bytes and returns the preview; the person decides once.
|
|
36
|
+
`Aprobar y guardar` runs `apply` with that digest and covers the whole proposal —
|
|
37
|
+
document, manifest, index and derived state — in one atomic write. `Refinar`
|
|
38
|
+
produces no effect at all and the proposal is written again. An identical retry
|
|
39
|
+
reuses the approval; any change of content, destination, base, scope or effect
|
|
40
|
+
class invalidates it and shows a new preview.
|
|
41
|
+
|
|
42
|
+
Discovery, classification, numbering, digests, validation, publication and indexes
|
|
43
|
+
never become questions of their own. What keeps its OWN boundary: sensitive
|
|
44
|
+
sources, network, execution, destruction, external effects, and any scope the
|
|
45
|
+
preview did not show.
|
|
46
|
+
|
|
47
|
+
## Two shapes, one contract
|
|
48
|
+
|
|
49
|
+
`create` and `update` publish a **simple** design by default: one authored
|
|
50
|
+
`DESIGN.md` (`## Objetivo`, `## Diseño propuesto`, `## Validación`, plus
|
|
51
|
+
`## Recorrido`, `## Decisiones` or `## Abiertos` only when they say something).
|
|
52
|
+
The CLI derives the identity, the folder, the revision, the digest and a minimal
|
|
53
|
+
manifest — the caller administers none of it, and `maturity` answers null because
|
|
54
|
+
one document has no ladder to climb.
|
|
55
|
+
|
|
56
|
+
The full **UI Design Package v1** appears only with a cause, and the vocabulary is
|
|
57
|
+
closed to five — one is enough:
|
|
58
|
+
|
|
59
|
+
| Signal | Means | Who says it |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `design.independent-outcomes` | two or more results each worth delivering | agent |
|
|
62
|
+
| `design.functional-blocking` | an unclosed functional decision blocks the design | agent |
|
|
63
|
+
| `design.clarity-lost` | one document would stop being readable | agent |
|
|
64
|
+
| `design.governance-or-system-reuse` | the package already carries governance or several revisions | **CLI derives** |
|
|
65
|
+
| `design.special-source-or-effect` | a sensitive source, an external transmission, or a declared source that did not contribute | **CLI derives** |
|
|
66
|
+
|
|
67
|
+
Recognizing a semantic signal is judgment and travels as `--input expansion=<id>`;
|
|
68
|
+
the two structural ones are facts about the invocation, so declaring one is
|
|
69
|
+
refused rather than believed. The receipt carries the mode, the signals that fired
|
|
70
|
+
and the one-line cause — every artifact beyond the simple document traces back to
|
|
71
|
+
the need it covers. `render` and `record` are package operations regardless.
|
|
72
|
+
|
|
73
|
+
Publishing a second simple revision archives the outgoing bytes inside the same
|
|
74
|
+
approved proposal, so a reference pinned to `@r1` keeps resolving after `@r2`
|
|
75
|
+
lands: a published revision is never taken away by the next one.
|
|
76
|
+
|
|
77
|
+
## Evidence and lifecycle inside a package
|
|
78
|
+
|
|
79
|
+
`trace` marks each criterion `visual`, `interaction` or `not_visual`. Preview only
|
|
80
|
+
visual acceptance; interaction relies on states, semantics and implementation
|
|
81
|
+
proof, never a storyboard to satisfy format.
|
|
82
|
+
|
|
83
|
+
The CLI marks a delta **compact** only with an existing surface, ≤2 screens, and
|
|
84
|
+
no journey, rule, token, asset, external dependency, blocker or adaptation.
|
|
85
|
+
Compact publishes one `handoff` for PLAN to reuse; otherwise SPEC keeps `outline`
|
|
86
|
+
and PLAN promotes only its consumed closure. The model authors content, not this
|
|
87
|
+
routing — the same split the simple route applies to expansion.
|
|
88
|
+
|
|
25
89
|
## What each caller may invoke
|
|
26
90
|
|
|
27
91
|
| Caller | Operations | Then |
|
|
@@ -59,12 +123,15 @@ never when they are sensitive.
|
|
|
59
123
|
|
|
60
124
|
## Where the output lands
|
|
61
125
|
|
|
62
|
-
Inside a workspace the
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
126
|
+
Inside a workspace the design defaults to `docs/designs/` and is discoverable by
|
|
127
|
+
the index — which is what lets a spec or a plan reference it later without it ever
|
|
128
|
+
having had a relationship with those flows. On the simple route the exact folder
|
|
129
|
+
is derived from the title (`docs/designs/NNN-design-<slug>/`) and travels back as
|
|
130
|
+
the one allowed destination, so `target` is optional and naming it only narrows
|
|
131
|
+
the default. Outside a workspace the caller MUST name an explicit root; the result
|
|
132
|
+
is still a conformant, portable package — and it takes the expanded route, because
|
|
133
|
+
a simple design derives its identity from an index that is not there. What never
|
|
134
|
+
happens is a guess: no root declared outside a workspace, nothing written.
|
|
68
135
|
|
|
69
136
|
## What the direct route does not do
|
|
70
137
|
|
|
@@ -32,11 +32,20 @@ Resolution: built-in default → `~/.workflow/skills.toml` (global) →
|
|
|
32
32
|
## Purpose
|
|
33
33
|
|
|
34
34
|
Given a UI requirement, author the **semantic** design of its journeys and
|
|
35
|
-
surfaces into
|
|
35
|
+
surfaces into something that outlives the session that produced it: durable,
|
|
36
36
|
versioned, referenceable by digest, and complete enough that an implementation
|
|
37
37
|
can be planned against it without reopening the design conversation.
|
|
38
38
|
|
|
39
|
-
The
|
|
39
|
+
The **default deliverable is one readable `DESIGN.md`** — `## Objetivo`,
|
|
40
|
+
`## Diseño propuesto`, `## Validación`, plus `## Recorrido`, `## Decisiones` or
|
|
41
|
+
`## Abiertos` only when they say something. The CLI derives its identity,
|
|
42
|
+
revision, digest and minimal manifest; nobody authoring a design administers any
|
|
43
|
+
of that. The full package below is the **expanded** shape, and it appears only
|
|
44
|
+
with a declared or derived cause — the closed vocabulary lives in
|
|
45
|
+
[`CONTRACT.md`](CONTRACT.md) § *Two shapes, one contract*.
|
|
46
|
+
|
|
47
|
+
Whichever shape it takes, the design is the deliverable. A spec **references**
|
|
48
|
+
it; it never contains it.
|
|
40
49
|
|
|
41
50
|
## Composed by
|
|
42
51
|
|
|
@@ -56,7 +65,16 @@ and the curation. This skill contributes what a correct package looks like.
|
|
|
56
65
|
|
|
57
66
|
## Knowledge
|
|
58
67
|
|
|
59
|
-
###
|
|
68
|
+
### Simple layout — the default
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
docs/designs/NNN-design-<slug>/
|
|
72
|
+
DESIGN.md the ONLY authored file
|
|
73
|
+
design-manifest.json derived: mode simple, one baseline, empty catalog
|
|
74
|
+
revisions/DESIGN-rNNN.md the exact bytes of a revision a newer one superseded
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Package layout — the expanded shape
|
|
60
78
|
|
|
61
79
|
```
|
|
62
80
|
docs/designs/NNN-design-<slug>/
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
"type": "string",
|
|
29
29
|
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
30
30
|
},
|
|
31
|
+
"mode": {
|
|
32
|
+
"description": "Which shape this package is. `simple` publishes one authored DESIGN.md and catalogs nothing; `package` is the full dossier of flows, screens, rules, tokens and renditions. Optional, and absent means `package` — every dossier published before the simple route stays readable without a migration.",
|
|
33
|
+
"enum": ["simple", "package"]
|
|
34
|
+
},
|
|
31
35
|
"title": {
|
|
32
36
|
"description": "Human name of the package.",
|
|
33
37
|
"type": "string",
|