mandrel 2.15.0 → 2.16.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/.agents/docs/workflows.md +2 -1
- package/.agents/scripts/deliver-light.js +31 -3
- package/.agents/scripts/lib/close-validation/process.js +61 -15
- package/.agents/scripts/lib/orchestration/complexity-gate.js +307 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +31 -9
- package/.agents/scripts/lib/orchestration/plan-context.js +190 -10
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +87 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +24 -15
- package/.agents/scripts/plan-context.js +4 -1
- package/.agents/workflows/helpers/deliver-light.md +34 -8
- package/.agents/workflows/helpers/plan-reference.md +27 -6
- package/.agents/workflows/plan.md +4 -2
- package/.agents/workflows/prototype.md +104 -0
- package/docs/CHANGELOG.md +17 -0
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >-
|
|
3
|
+
Operator-invoked UI prototype pass. Discovers the consumer's design-system
|
|
4
|
+
SSOT first, then — only after the operator confirms — writes exactly one
|
|
5
|
+
self-contained HTML file under the gitignored workspace-root temp tree, so a
|
|
6
|
+
layout can be reviewed before its UI acceptance criteria are authored.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /prototype [what to prototype]
|
|
10
|
+
|
|
11
|
+
UI acceptance criteria are otherwise authored blind: "the dashboard shows the
|
|
12
|
+
active runs" says nothing about layout, density, or interaction, so delivery
|
|
13
|
+
resolves those by taste. `/prototype` puts a reviewable artifact in front of the
|
|
14
|
+
operator before the criteria are written.
|
|
15
|
+
|
|
16
|
+
**Operator-invoked only.** `/plan` may report that a plan touches UI and that
|
|
17
|
+
this command exists; it must never run it. No workflow, gate, or script invokes
|
|
18
|
+
`/prototype` — the whole design rests on the operator asking for it.
|
|
19
|
+
|
|
20
|
+
## Procedure
|
|
21
|
+
|
|
22
|
+
### Step 0 — Discover the design-system SSOT (first, before anything is drawn)
|
|
23
|
+
|
|
24
|
+
You cannot prototype *in the project's visual language* until you have found the
|
|
25
|
+
language. Locate and read the consumer's sources of truth — the same set
|
|
26
|
+
[`/audit-ux-ui`](audit-ux-ui.md) Step 0 mandates:
|
|
27
|
+
|
|
28
|
+
- **Design tokens / theme** — a `tailwind.config.{js,ts}`, CSS custom properties
|
|
29
|
+
(`:root { --color-*, --space-* }`), a `theme/` / `tokens/` /
|
|
30
|
+
`design-system/` directory, or a CSS-in-JS theme object.
|
|
31
|
+
- **Component roster** — the shared component directory (`components/ui/**`, a
|
|
32
|
+
published design-system package) that raw elements are expected to defer to.
|
|
33
|
+
- **Documented conventions** — `docs/style-guide.md`, plus `docs/web-routes.md`
|
|
34
|
+
when the surface is a route, whenever they exist in the consumer checkout.
|
|
35
|
+
|
|
36
|
+
Report what you found — token names, the component roster, the style-guide rules
|
|
37
|
+
— and draw only against that discovered baseline. **No artifact is drawn until
|
|
38
|
+
this step has run.**
|
|
39
|
+
|
|
40
|
+
### Step 0a — When no design-system SSOT is discoverable
|
|
41
|
+
|
|
42
|
+
Report the absence explicitly, then emit a **low-fidelity frame**: boxes,
|
|
43
|
+
labels, and hierarchy, in the host's default typography with no colour system.
|
|
44
|
+
Do **not** invent a visual language. A prototype in a palette the project never
|
|
45
|
+
adopted reviews the invention rather than the layout, and the operator cannot
|
|
46
|
+
tell which of the two they are approving.
|
|
47
|
+
|
|
48
|
+
### Step 1 — Confirm before writing (**hard gate**)
|
|
49
|
+
|
|
50
|
+
Describe the layout you intend — surfaces, hierarchy, states, and which
|
|
51
|
+
discovered tokens and components it reuses — and **STOP**. Nothing is written to
|
|
52
|
+
disk until the operator confirms; never write silently. This is the disk-write
|
|
53
|
+
policy [`core/idea-refinement`](../skills/core/idea-refinement/SKILL.md) already
|
|
54
|
+
applies to its one-pager.
|
|
55
|
+
|
|
56
|
+
### Step 2 — Write exactly one self-contained HTML file
|
|
57
|
+
|
|
58
|
+
On confirm, write **exactly one** self-contained `.html` file — inline CSS, no
|
|
59
|
+
build step, no fetched external assets — under the **gitignored workspace-root
|
|
60
|
+
temp tree** (`temp/prototypes/<slug>.html`). One file, because a prototype is a
|
|
61
|
+
thing to look at, not a codebase to maintain; self-contained, because it has to
|
|
62
|
+
open from disk with no server and no install.
|
|
63
|
+
|
|
64
|
+
Report the path, and iterate in place on that same file.
|
|
65
|
+
|
|
66
|
+
### Step 3 — Optional: publish to a host
|
|
67
|
+
|
|
68
|
+
Host publishing is an **optional upgrade of that same file** and never the
|
|
69
|
+
artifact of record — the file under the temp tree stays authoritative. Publish
|
|
70
|
+
only when the operator asks, and keep the two identical by re-publishing the
|
|
71
|
+
file rather than editing a published copy.
|
|
72
|
+
|
|
73
|
+
### Step 4 — Carry the review through to the Story
|
|
74
|
+
|
|
75
|
+
The **default carry-through is a fold into the Story's `## Spec`.** Delivery
|
|
76
|
+
reads the Story body and never the temp tree, so a layout that exists only as a
|
|
77
|
+
temp artifact is a layout delivery cannot see. Record the reviewed decisions —
|
|
78
|
+
surfaces, hierarchy, states, and the named tokens and components — as contract
|
|
79
|
+
prose in `## Spec`, and turn the observable ones into UI acceptance criteria.
|
|
80
|
+
|
|
81
|
+
**Committing a prototype is opt-in, per Story.** Ask; never default to it. A
|
|
82
|
+
prototype is wrong the moment the real UI ships, and a repository with a
|
|
83
|
+
documentation-freshness gate already carries that failure mode.
|
|
84
|
+
|
|
85
|
+
## Constraint
|
|
86
|
+
|
|
87
|
+
- **Nothing reaches disk without a confirm.** Step 1 is a hard gate, not a
|
|
88
|
+
courtesy.
|
|
89
|
+
- **One file, under the temp tree.** Never a second artifact, never outside the
|
|
90
|
+
gitignored workspace-root temp tree, and never a committed prototype
|
|
91
|
+
directory by default.
|
|
92
|
+
- **Never invoked automatically.** `/plan` records the offer and proceeds with
|
|
93
|
+
planning; no workflow, gate, or script may call this command.
|
|
94
|
+
- **Read-only over the codebase.** The prototype file is the only write. Do not
|
|
95
|
+
edit application source, tokens, or components to make a prototype render.
|
|
96
|
+
- **Discovered baseline only.** No invented palette, type scale, or component
|
|
97
|
+
vocabulary when the project defines none.
|
|
98
|
+
|
|
99
|
+
## See also
|
|
100
|
+
|
|
101
|
+
- [`/audit-ux-ui`](audit-ux-ui.md) — the same design-system SSOT discovery,
|
|
102
|
+
applied as a review lens after the UI ships.
|
|
103
|
+
- [`/plan`](plan.md) — where the advisory `complexitySignals.uiSurface` offer
|
|
104
|
+
surfaces. It names this command; it never runs it.
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [2.16.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.15.0...mandrel-v2.16.0) (2026-07-25)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
* **workflows:** add operator-invoked /prototype and an advisory uiSurface offer (refs [#4765](https://github.com/dsj1984/mandrel/issues/4765)) ([#4769](https://github.com/dsj1984/mandrel/issues/4769)) ([d3f7173](https://github.com/dsj1984/mandrel/commit/d3f71734ef8573ffa40187b5f4f8a97be6e32041))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
* **close-validation:** drain gate output without stalling the child's pipe (refs [#4766](https://github.com/dsj1984/mandrel/issues/4766)) ([#4770](https://github.com/dsj1984/mandrel/issues/4770)) ([fd75550](https://github.com/dsj1984/mandrel/commit/fd75550288411a4c92831ac7c9b946e2cce5a686))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
* **routing:** scope the light path by effort and risk (refs [#4764](https://github.com/dsj1984/mandrel/issues/4764)) ([#4767](https://github.com/dsj1984/mandrel/issues/4767)) ([c4851ab](https://github.com/dsj1984/mandrel/commit/c4851abe218721145daaeb4353af400223b588e6))
|
|
21
|
+
|
|
5
22
|
## [2.15.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.14.0...mandrel-v2.15.0) (2026-07-25)
|
|
6
23
|
|
|
7
24
|
|
package/package.json
CHANGED