@tekyzinc/gsd-t 2.71.14 → 2.71.15

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/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [2.71.15] - 2026-04-08
6
+
7
+ ### Changed (design-build command → orchestrator delegate)
8
+ - **`gsd-t-design-build.md` now delegates to the JS orchestrator** — the 388-line prompt-based command is replaced with a thin wrapper that runs `gsd-t design-build`. Both `/user:gsd-t-design-build` and `gsd-t design-build` now end up in the same deterministic pipeline. No more prompt-based gates that get skipped.
9
+
5
10
  ## [2.71.14] - 2026-04-08
6
11
 
7
12
  ### Added (design-build orchestrator)
@@ -1,387 +1,44 @@
1
- # GSD-T: Design Build — Build from Design Contracts with Two-Terminal Review
1
+ # GSD-T: Design Build — Deterministic Design-to-Code Pipeline
2
2
 
3
- You are the design builder (Term 1). You build UI components from design contracts, measure them against specs, and coordinate with an independent review session (Term 2) for unbiased verification.
3
+ This command delegates to the **JavaScript orchestrator** for ironclad flow control. Do NOT attempt to run the build pipeline inline the orchestrator handles Claude spawning, measurement, review gates, and feedback processing deterministically.
4
4
 
5
- **Architecture**: Term 1 builds file system → Term 2 reviews → file system → Term 1 reads feedback. Zero shared context between sessions.
5
+ ## Step 1: Launch the Orchestrator
6
6
 
7
- ## Step 0: Validate Prerequisites
8
-
9
- 1. Read `.gsd-t/contracts/design/INDEX.md` — if missing, STOP: "Run `/user:gsd-t-design-decompose` first to create design contracts."
10
- 2. Read `.gsd-t/progress.md` for current state
11
- 3. Verify `scripts/gsd-t-design-review-server.js` exists (GSD-T package)
12
- - Get the GSD-T install path: `npm root -g` → `{global_root}/@tekyzinc/gsd-t/scripts/`
13
- - If not found: "Update GSD-T: `/user:gsd-t-version-update`"
14
-
15
- ## Step 1: Start Infrastructure
16
-
17
- ### 1a. Dev Server
18
-
19
- Check if a dev server is running:
20
- ```bash
21
- lsof -i :5173 2>/dev/null | head -2
22
- ```
23
-
24
- If not running, detect and start:
25
- ```bash
26
- # Check package.json for dev command
27
- npm run dev &
28
- # Wait for server to be ready
29
- for i in $(seq 1 30); do curl -s http://localhost:5173 > /dev/null 2>&1 && break; sleep 1; done
30
- ```
31
-
32
- Record the dev server port as `$DEV_PORT`.
33
-
34
- ### 1b. Review Server
35
-
36
- Find the review server script:
37
- ```bash
38
- GSD_ROOT=$(npm root -g)/@tekyzinc/gsd-t/scripts
39
- ```
40
-
41
- Start the review server as a background process:
42
- ```bash
43
- node $GSD_ROOT/gsd-t-design-review-server.js \
44
- --target http://localhost:$DEV_PORT \
45
- --project $PWD \
46
- --port 3456 &
47
- REVIEW_PID=$!
48
- ```
49
-
50
- Verify it's running:
51
- ```bash
52
- curl -s http://localhost:3456/review/api/status
53
- ```
54
-
55
- ### 1c. Launch Term 2 (Independent Review Session)
56
-
57
- Write the review prompt to disk (Term 2 reads this, not Term 1's context):
58
- ```bash
59
- cat > .gsd-t/design-review/review-prompt.md << 'PROMPT'
60
- You are the design review agent (Term 2). You are an INDEPENDENT reviewer — you have NO knowledge of how components were built. Your job is to compare built output against design contracts.
61
-
62
- ## Your Loop
63
-
64
- 1. Poll `.gsd-t/design-review/queue/` every 5 seconds for new JSON files
65
- 2. For each queue item:
66
- a. Read the queue JSON — it has component name, selector, measurements, source path
67
- b. Read the matching design contract from `.gsd-t/contracts/design/`
68
- c. Open the app at http://localhost:3456/ (proxied through review server)
69
- d. Use Playwright to navigate to the component and evaluate it against the contract
70
- e. AI Review — check what measurements can't catch:
71
- - Does the visual hierarchy feel right?
72
- - Are proportions correct even if individual measurements pass?
73
- - Does the component look like the contract describes, holistically?
74
- f. If CRITICAL issues found (wrong chart type, missing elements, wrong data model):
75
- - Write rejection to `.gsd-t/design-review/rejected/{id}.json`:
76
- `{ "id": "...", "reason": "...", "severity": "critical", "timestamp": "..." }`
77
- - The review server will notify Term 1 automatically
78
- g. If no critical issues → the component passes to human review (review UI handles this)
79
- 3. When `.gsd-t/design-review/shutdown.json` appears → exit cleanly
80
-
81
- ## Rules
82
- - You write ZERO code. You ONLY review.
83
- - You have NO context about how anything was built — judge purely by contract vs. output.
84
- - Be harsh. Your value is in catching what the builder missed.
85
- - Check `.gsd-t/contracts/design/elements/`, `widgets/`, and `pages/` for specs.
86
- PROMPT
87
- ```
88
-
89
- Launch a new terminal with an independent Claude session:
90
- ```bash
91
- # macOS
92
- osascript -e "tell application \"Terminal\" to do script \"cd $(pwd) && claude --print 'Read .gsd-t/design-review/review-prompt.md and execute the instructions. This is your only directive.'\""
93
- ```
94
-
95
- ```bash
96
- # Linux (fallback)
97
- gnome-terminal -- bash -c "cd $(pwd) && claude --print 'Read .gsd-t/design-review/review-prompt.md and execute the instructions. This is your only directive.'; exec bash"
98
- ```
99
-
100
- Display to user:
101
- ```
102
- Design Build — Infrastructure Ready
103
- ✓ Dev server: http://localhost:$DEV_PORT
104
- ✓ Review server: http://localhost:3456
105
- ✓ Review UI: http://localhost:3456/review
106
- ✓ Term 2: Independent review session launched
107
- ```
108
-
109
- Auto-open the review UI:
110
- ```bash
111
- open http://localhost:3456/review 2>/dev/null || xdg-open http://localhost:3456/review 2>/dev/null
112
- ```
113
-
114
- ## Step 2: Build Phase — Elements
115
-
116
- Read all element contracts from `.gsd-t/contracts/design/elements/`. Sort by any `order` field or alphabetically.
117
-
118
- For each element contract:
119
-
120
- ### 2a. Build the Element
121
-
122
- Read the element contract. Build or update the component at the specified source path. Follow the contract exactly:
123
- - Chart type, dimensions, colors, spacing, typography
124
- - Props interface matching the contract's data model
125
- - Import patterns (use existing design system components where specified)
126
-
127
- ### 2b. Render-Measure-Compare
128
-
129
- After building, use Playwright to measure the rendered component against the contract specs:
130
-
131
- ```javascript
132
- // In Playwright page.evaluate():
133
- const el = document.querySelector(selector);
134
- const s = getComputedStyle(el);
135
- const rect = el.getBoundingClientRect();
136
- // Measure each spec property from the contract
137
- // Compare against expected values
138
- // Build measurements array: [{ property, expected, actual, pass }]
139
- ```
140
-
141
- ### 2c. Queue for Review
142
-
143
- Write the queue JSON to `.gsd-t/design-review/queue/{element-id}.json`:
144
- ```json
145
- {
146
- "id": "element-donut-chart",
147
- "name": "DonutChart",
148
- "type": "element",
149
- "order": 1,
150
- "selector": "svg[viewBox='0 0 200 200']",
151
- "sourcePath": "src/components/elements/DonutChart.vue",
152
- "route": "/",
153
- "measurements": [
154
- { "property": "chart type", "expected": "donut", "actual": "donut", "pass": true },
155
- ...
156
- ]
157
- }
158
- ```
159
-
160
- ### 2d. Check for Auto-Rejections
161
-
162
- After queuing, check for immediate rejection from Term 2:
163
- ```bash
164
- # Brief wait for Term 2 to process
165
- sleep 3
166
- ls .gsd-t/design-review/rejected/{element-id}.json 2>/dev/null
167
- ```
168
-
169
- If rejected:
170
- - Read the rejection reason
171
- - Fix the element based on the rejection feedback
172
- - Re-measure and re-queue (max 2 auto-rejection cycles per element)
173
-
174
- ### 2e. Continue Building
175
-
176
- Continue building remaining elements. Don't wait for human review — queue them all.
177
-
178
- ## Step 3: Wait for Human Review (BLOCKING)
179
-
180
- **This is a BLOCKING step. Do NOT proceed to Step 4 until the human submits their review. Do NOT skip this step. Do NOT treat this as optional.**
181
-
182
- After all elements are built and queued, **STOP** and enter the poll loop:
183
-
184
- ```
185
- Waiting for human review of elements...
186
- Review UI: http://localhost:3456/review
187
- {N} elements queued, awaiting submission
188
- ```
189
-
190
- Poll for the review-complete signal — **actually run this bash loop**:
191
7
  ```bash
192
- while [ ! -f .gsd-t/design-review/review-complete.json ]; do
193
- sleep 5
194
- done
8
+ gsd-t design-build $ARGUMENTS
195
9
  ```
196
10
 
197
- **Only after `review-complete.json` appears**, proceed to Step 4.
198
-
199
- ## Step 4: Process Feedback
11
+ That's it. The orchestrator handles everything:
200
12
 
201
- Read `.gsd-t/design-review/review-complete.json` and each feedback file in `.gsd-t/design-review/feedback/`.
13
+ 1. Reads contracts from `.gsd-t/contracts/design/`
14
+ 2. Starts dev server + review server
15
+ 3. For each tier (elements → widgets → pages):
16
+ - Spawns Claude to build components from contracts
17
+ - Measures with Playwright
18
+ - Queues for human review
19
+ - **Blocks in a JS polling loop** until the human submits (ironclad gate)
20
+ - Processes feedback, applies fixes if needed
21
+ - Proceeds to next tier only after approval
202
22
 
203
- For each element's feedback:
23
+ ## Options
204
24
 
205
- ### No changes, no comment → Approved
206
- - Mark element as complete
207
- - No action needed
25
+ Pass any of these as `$ARGUMENTS`:
208
26
 
209
- ### Property changes only → Apply and verify
210
- - Read the change list: `[{ property, oldValue, newValue, path }]`
211
- - Map CSS property changes back to source code:
212
- - Tailwind: `padding: 16px` find and update the Tailwind class (e.g., `p-6` `p-4`)
213
- - Inline styles: update the style binding directly
214
- - CSS modules: update the CSS rule
215
- - Re-run Playwright measurement to verify the change took effect
216
- - If verification passes mark complete
217
- - If verification fails → re-queue for review with updated measurements
27
+ | Flag | Purpose |
28
+ |------|---------|
29
+ | `--resume` | Resume from last saved state after interruption |
30
+ | `--tier <name>` | Start from a specific tier (`elements`, `widgets`, `pages`) |
31
+ | `--project <dir>` | Target project directory (default: current directory) |
32
+ | `--dev-port <N>` | Dev server port (default: 5173) |
33
+ | `--review-port <N>` | Review server port (default: 3456) |
34
+ | `--timeout <sec>` | Claude timeout per tier in seconds (default: 600) |
35
+ | `--skip-measure` | Skip Playwright measurement (human-review only) |
218
36
 
219
- ### Comment only → Interpret and fix
220
- - Read the comment — it describes a change to make
221
- - Implement the change described in the comment
222
- - Re-measure the element
223
- - Re-queue for review
37
+ ## Prerequisites
224
38
 
225
- ### Changes + comment Apply changes, use comment as context
226
- - Apply the property changes first
227
- - Read the comment for additional context or fixes beyond the property changes
228
- - Implement any additional changes
229
- - Re-measure and re-queue
230
-
231
- After processing all feedback:
232
- - Clear the queue: `rm .gsd-t/design-review/queue/*.json`
233
- - Delete the signal: `rm .gsd-t/design-review/review-complete.json`
234
- - Clear feedback: `rm .gsd-t/design-review/feedback/*.json`
235
-
236
- If any elements were re-queued → return to Step 3 (max 3 review cycles total).
237
-
238
- ## Step 5: Widget Assembly Phase
239
-
240
- **GATE: Do NOT start this step until ALL elements from Step 2 have been reviewed and approved by the human in the review UI.**
241
-
242
- 1. Read widget contracts from `.gsd-t/contracts/design/widgets/`
243
- 2. For each widget:
244
- a. Build the widget — MUST import approved element components, not rebuild them inline
245
- b. Verify imports: grep the widget file for element imports
246
- c. **Render-Measure-Compare** — use Playwright to measure the assembled widget against its contract specs:
247
- ```javascript
248
- // In Playwright page.evaluate():
249
- const widget = document.querySelector(widgetSelector);
250
- const s = getComputedStyle(widget);
251
- const rect = widget.getBoundingClientRect();
252
- // Measure layout properties from widget contract:
253
- // - grid-template-columns / grid-template-rows (column count, track sizes)
254
- // - gap / row-gap / column-gap
255
- // - padding, margin, border-radius
256
- // - width, height, aspect-ratio
257
- // Count direct children and verify against contract's expected child count
258
- const children = widget.children;
259
- const childRects = [...children].map(c => c.getBoundingClientRect());
260
- // Verify children-per-row: count children whose top is within 2px of first child's top
261
- const firstRowTop = childRects[0]?.top;
262
- const childrenPerRow = childRects.filter(r => Math.abs(r.top - firstRowTop) < 2).length;
263
- // Compare ALL measured values against contract specs
264
- // Build measurements array: [{ property, expected, actual, pass }]
265
- ```
266
- **Every measurement failure MUST appear in the queue JSON measurements array with `pass: false`.**
267
- d. Write queue JSON to `.gsd-t/design-review/queue/{widget-id}.json` (same format as elements, with `"type": "widget"`)
268
- e. Check for auto-rejections (sleep 3, check `rejected/` dir) — fix and re-queue if rejected (max 2 cycles)
269
- 3. After ALL widgets are built and queued, **STOP and poll for human review** — this is a BLOCKING wait, do NOT proceed until the human submits:
270
- ```
271
- Waiting for human review of widgets...
272
- Review UI: http://localhost:3456/review
273
- {N} widgets queued, awaiting submission
274
- ```
275
- ```bash
276
- while [ ! -f .gsd-t/design-review/review-complete.json ]; do
277
- sleep 5
278
- done
279
- ```
280
- 4. Process feedback — read `review-complete.json` and each feedback file, apply changes/fixes per the same rules as Step 4. Clear queue, delete signal, clear feedback after processing. If any widgets re-queued → return to sub-step 3 (max 3 review cycles).
281
-
282
- ## Step 6: Page Composition Phase
283
-
284
- **GATE: Do NOT start this step until ALL widgets from Step 5 have been reviewed and approved by the human in the review UI.**
285
-
286
- 1. Read page contracts from `.gsd-t/contracts/design/pages/`
287
- 2. For each page:
288
- a. Build the page — MUST import approved widget components
289
- b. **Render-Measure-Compare** — use Playwright to verify the full page layout against its contract specs:
290
- ```javascript
291
- // In Playwright page.evaluate():
292
- // 1. GRID LAYOUT — verify column count matches contract
293
- const grid = document.querySelector(pageGridSelector);
294
- const gridStyle = getComputedStyle(grid);
295
- const columns = gridStyle.gridTemplateColumns.split(' ').length;
296
- // Compare against contract's expected column count (e.g., 2, not 4)
297
-
298
- // 2. SECTION ORDERING — verify widgets appear in contract-specified order
299
- const sections = [...grid.querySelectorAll('[data-section]')];
300
- const sectionOrder = sections.map(s => s.dataset.section);
301
- // Compare against contract's section order array
302
-
303
- // 3. WIDGET DIMENSIONS — verify each widget's width relative to grid
304
- const gridRect = grid.getBoundingClientRect();
305
- const widgetRects = sections.map(s => s.getBoundingClientRect());
306
- // For a 2-column grid: each widget should be ~50% of grid width (minus gap)
307
- // For a 1-column widget spanning full width: should be ~100% of grid width
308
-
309
- // 4. SPACING — verify gap, padding, margins match contract
310
- // gap, rowGap, columnGap, padding
311
-
312
- // 5. RESPONSIVE — if contract specifies breakpoints, measure at each viewport width
313
- // Build measurements array: [{ property, expected, actual, pass }]
314
- ```
315
- **Grid column count is a CRITICAL measurement. If the contract says 2 columns and the page renders 4, this is `severity: "critical"` and MUST be flagged.**
316
- c. Write queue JSON to `.gsd-t/design-review/queue/{page-id}.json` (same format, with `"type": "page"`)
317
- e. Check for auto-rejections (sleep 3, check `rejected/` dir) — fix and re-queue if rejected (max 2 cycles)
318
- 3. After ALL pages are built and queued, **STOP and poll for human review** — this is a BLOCKING wait, do NOT proceed until the human submits:
319
- ```
320
- Waiting for human review of pages...
321
- Review UI: http://localhost:3456/review
322
- {N} pages queued, awaiting submission
323
- ```
324
- ```bash
325
- while [ ! -f .gsd-t/design-review/review-complete.json ]; do
326
- sleep 5
327
- done
328
- ```
329
- 4. Process feedback — same rules as Step 4. Clear queue, delete signal, clear feedback. If any pages re-queued → return to sub-step 3 (max 3 review cycles).
330
-
331
- ## Step 7: Cleanup and Report
332
-
333
- ```bash
334
- # Signal Term 2 to shut down
335
- echo '{"shutdown": true}' > .gsd-t/design-review/shutdown.json
336
- sleep 2
337
-
338
- # Kill review server
339
- kill $REVIEW_PID 2>/dev/null
340
-
341
- # Kill dev server if we started it
342
- # (only if we started it in Step 1a)
343
- ```
344
-
345
- Report:
346
- ```
347
- Design Build Complete
348
- Elements: {N} built, {N} approved
349
- Widgets: {N} built, {N} approved
350
- Pages: {N} built, {N} approved
351
- Review cycles: {N}
352
-
353
- Changes applied from review: {N}
354
- Comments addressed: {N}
355
- ```
356
-
357
- Update `.gsd-t/progress.md` with completion status.
358
-
359
- ## Coordination Directory Structure
360
-
361
- ```
362
- .gsd-t/design-review/
363
- ├── queue/ # Term 1 writes, Term 2 + human reads
364
- │ ├── element-donut.json
365
- │ └── element-bar.json
366
- ├── feedback/ # Human review writes, Term 1 reads
367
- │ ├── element-donut.json
368
- │ └── element-bar.json
369
- ├── rejected/ # Term 2 auto-rejects, Term 1 reads
370
- │ └── element-bar.json
371
- ├── review-complete.json # Human submit signal → Term 1 polls
372
- ├── review-prompt.md # Term 2's instructions (no builder context)
373
- ├── shutdown.json # Term 1 signals Term 2 to exit
374
- └── status.json # Review server state
375
- ```
39
+ - Design contracts must exist in `.gsd-t/contracts/design/` with an `INDEX.md`
40
+ - If no contracts exist, run `/user:gsd-t-design-decompose` first
376
41
 
377
- ## Rules
42
+ ## Why a JS Orchestrator?
378
43
 
379
- - NEVER share builder context with Term 2coordination is files only
380
- - NEVER skip the review cycle — every component goes through Term 2 + human
381
- - NEVER proceed to widgets before all elements are reviewed and approved by the human — the bash polling loop MUST block until `review-complete.json` appears
382
- - NEVER proceed to pages before all widgets are reviewed and approved by the human — same blocking poll
383
- - NEVER rebuild element functionality inline in widgets — always import
384
- - NEVER skip or shortcut the bash polling loop — it MUST actually execute and block
385
- - Max 3 review cycles per phase — if still failing, stop and present to user
386
- - Auto-open the browser review UI so the user doesn't have to find it
387
- - Kill all background processes on completion or error
44
+ Claude Code agents optimize for task completion and will skip any prompt instruction that asks them to pause indefinitely including bash polling loops, `BLOCKING` headers, and `STOP` directives. Three separate attempts to enforce review gates via prompt instructions all failed. The JS orchestrator moves flow control out of prompts entirely into deterministic JavaScript.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "2.71.14",
3
+ "version": "2.71.15",
4
4
  "description": "GSD-T: Contract-Driven Development for Claude Code — 56 slash commands with headless CI/CD mode, graph-powered code analysis, real-time agent dashboard, execution intelligence, task telemetry, doc-ripple enforcement, backlog management, impact analysis, test sync, milestone archival, and PRD generation",
5
5
  "author": "Tekyz, Inc.",
6
6
  "license": "MIT",