@tekyzinc/gsd-t 2.70.14 → 2.70.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 +10 -0
- package/commands/gsd-t-design-decompose.md +97 -25
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
4
|
|
|
5
|
+
## [2.70.15] - 2026-04-06
|
|
6
|
+
|
|
7
|
+
### Changed (design pipeline — decompose verification)
|
|
8
|
+
- **Separate Verification Agent** — `gsd-t-design-decompose` Step 6.5 now spawns a dedicated opus-model verification subagent instead of self-verifying chart classifications. The decompose agent cannot verify its own work — sunk cost bias causes it to rubber-stamp its classifications. The separate agent has fresh context and its sole incentive is finding mismatches.
|
|
9
|
+
- **BAR CHART ORIENTATION PROOF** — mechanical decision tree injected into the verification agent prompt: rectangles in a ROW → HORIZONTAL, rectangles BOTTOM-TO-TOP → VERTICAL. Eliminates the #1 misclassification (horizontal percentage bars classified as vertical grouped).
|
|
10
|
+
- **Max 2 fix cycles** — if the verifier finds mismatches, contracts are corrected and re-verified (up to 2 cycles). Persistent failures block decompose completion.
|
|
11
|
+
|
|
12
|
+
### Why
|
|
13
|
+
v2.70.14 ensured "build follows contracts" but the contracts themselves were wrong. The decompose command's Step 6.5 asked the same agent to verify its own chart type classifications — it always passed itself. Three charts (`Number of Tools`, `Time on Page`, `Number of Visits`) were classified as `bar-vertical-grouped` when the Figma shows `bar-stacked-horizontal-percentage`. A separate verification agent with no sunk cost catches these mismatches before contracts are finalized.
|
|
14
|
+
|
|
5
15
|
## [2.70.14] - 2026-04-06
|
|
6
16
|
|
|
7
17
|
### Changed (design pipeline — hierarchical execution)
|
|
@@ -301,40 +301,112 @@ Per-page element manifest (for verification agent):
|
|
|
301
301
|
| {analytics} | {N} | {N} — {list} |
|
|
302
302
|
```
|
|
303
303
|
|
|
304
|
-
## Step 6.5: Contract-vs-Figma Verification Gate (MANDATORY)
|
|
304
|
+
## Step 6.5: Contract-vs-Figma Verification Gate — SEPARATE AGENT (MANDATORY)
|
|
305
305
|
|
|
306
|
-
After writing all contracts but BEFORE proceeding to partition or build, verify
|
|
306
|
+
After writing all contracts but BEFORE proceeding to partition or build, spawn a **dedicated verification subagent** to independently verify every chart classification against the Figma source. This agent has FRESH context, no sunk cost in the classifications, and its sole incentive is finding mismatches.
|
|
307
307
|
|
|
308
|
-
|
|
308
|
+
> **Why a separate agent?** The decompose agent that classified the charts cannot objectively verify its own classifications. It has the same blind spots that caused the misclassification. This was proven repeatedly — the same agent rubber-stamps its own work. A fresh agent with only the contracts and Figma access catches what the classifier missed.
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
310
|
+
**OBSERVABILITY LOGGING (MANDATORY):**
|
|
311
|
+
Before spawning — run via Bash:
|
|
312
|
+
`T_START=$(date +%s) && DT_START=$(date +"%Y-%m-%d %H:%M") && TOK_START=${CLAUDE_CONTEXT_TOKENS_USED:-0} && TOK_MAX=${CLAUDE_CONTEXT_TOKENS_MAX:-200000}`
|
|
312
313
|
|
|
313
|
-
|
|
314
|
-
|-------|---------------|------------------------|
|
|
315
|
-
| Chart type | Contract's element name matches the actual visual pattern | Donut classified as stacked bar (or vice versa) |
|
|
316
|
-
| Data labels | Contract's Test Fixture labels match the Figma text exactly | Hallucinated column headers, invented metrics |
|
|
317
|
-
| Element count | Number of sub-elements in contract matches Figma | Missing legends, extra charts, wrong layout |
|
|
318
|
-
| Text content | Every title, subtitle, label, legend item matches Figma verbatim | "Engagement per video" subtitle that doesn't exist in Figma |
|
|
319
|
-
| Layout structure | Widget's claimed layout matches Figma arrangement | Side-by-side classified as stacked, 2 charts classified as 1 |
|
|
320
|
-
|
|
321
|
-
3. **Produce a contract-vs-Figma mismatch report:**
|
|
314
|
+
⚙ [opus] gsd-t-design-decompose → Chart Classification Verifier
|
|
322
315
|
|
|
323
316
|
```
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
317
|
+
Task subagent (general-purpose, model: opus):
|
|
318
|
+
"You are the Chart Classification Verifier. Your ONLY job is to independently
|
|
319
|
+
verify that each element contract's chart type classification matches the actual
|
|
320
|
+
Figma design. You have ZERO knowledge of how the charts were classified — you
|
|
321
|
+
are seeing them fresh. Your incentive: every misclassification you catch prevents
|
|
322
|
+
a wrong chart being built. Every misclassification you miss causes a rebuild.
|
|
323
|
+
|
|
324
|
+
## Contracts to Verify
|
|
325
|
+
{list each element contract filename + its claimed chart type from INDEX.md}
|
|
326
|
+
|
|
327
|
+
## Figma Source
|
|
328
|
+
File key: {fileKey}
|
|
329
|
+
Page node: {nodeId}
|
|
330
|
+
|
|
331
|
+
## Verification Process
|
|
332
|
+
|
|
333
|
+
For EACH element contract that claims a chart/visualization type:
|
|
334
|
+
|
|
335
|
+
1. Read the element contract — note its claimed type (e.g., 'bar-vertical-grouped')
|
|
336
|
+
2. Find the Figma node ID referenced in the contract (or in the widget that uses it)
|
|
337
|
+
3. Call `get_design_context` on that specific node ID — examine the STRUCTURE:
|
|
338
|
+
- Layout mode (horizontal vs vertical arrangement of children)
|
|
339
|
+
- Child elements (are they bars? segments? slices?)
|
|
340
|
+
- How children are arranged (side by side? stacked? overlapping?)
|
|
341
|
+
- Dimensions (do bars extend horizontally or vertically?)
|
|
342
|
+
|
|
343
|
+
4. Walk the decision tree INDEPENDENTLY (do NOT read the contract's reasoning):
|
|
344
|
+
|
|
345
|
+
BAR CHART ORIENTATION PROOF:
|
|
346
|
+
a. Are the data-bearing rectangles arranged HORIZONTALLY (left to right)?
|
|
347
|
+
→ Segments share ONE ROW, each segment's WIDTH encodes its value
|
|
348
|
+
→ This is HORIZONTAL (stacked if touching, grouped if separated)
|
|
349
|
+
b. Are the data-bearing rectangles arranged VERTICALLY (bottom to top)?
|
|
350
|
+
→ Each bar is a COLUMN, each bar's HEIGHT encodes its value
|
|
351
|
+
→ This is VERTICAL (stacked if layered, grouped if side-by-side)
|
|
352
|
+
c. Is it ONE bar with colored segments? → STACKED
|
|
353
|
+
Is it MULTIPLE separate bars? → GROUPED
|
|
354
|
+
d. Do labels show percentages summing to 100%? → PERCENTAGE variant
|
|
355
|
+
|
|
356
|
+
CRITICAL DISTINCTION — the #1 misclassification:
|
|
357
|
+
A single horizontal bar divided into colored segments (each segment's WIDTH
|
|
358
|
+
represents a percentage) is chart-bar-stacked-horizontal-percentage.
|
|
359
|
+
Multiple vertical columns of different heights side-by-side is
|
|
360
|
+
chart-bar-grouped-vertical. These render COMPLETELY DIFFERENTLY.
|
|
361
|
+
If you see colored blocks in a ROW → HORIZONTAL. Period.
|
|
362
|
+
|
|
363
|
+
5. Compare YOUR classification against the contract's classification.
|
|
364
|
+
|
|
365
|
+
6. For EACH element, produce:
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
Element: {name}
|
|
369
|
+
Contract claims: {chart type}
|
|
370
|
+
Figma node: {id}
|
|
371
|
+
I SEE: {describe what the Figma MCP returned — layout, children, arrangement}
|
|
372
|
+
MY CLASSIFICATION: {your independent classification}
|
|
373
|
+
VERDICT: ✅ MATCH or ❌ MISMATCH
|
|
374
|
+
If MISMATCH: Contract says {X} but Figma shows {Y} because {evidence}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Report
|
|
378
|
+
|
|
379
|
+
Produce the full verification table:
|
|
380
|
+
|
|
381
|
+
| # | Element | Contract Type | Verified Type | Figma Evidence | Verdict |
|
|
382
|
+
|---|---------|--------------|---------------|----------------|---------|
|
|
383
|
+
| 1 | chart-donut | chart-donut | chart-donut | circular arcs + center hole | ✅ MATCH |
|
|
384
|
+
| 2 | bar-vertical-grouped | bar-vertical-grouped | bar-stacked-horizontal-pct | 4 segments in ONE horizontal row | ❌ MISMATCH |
|
|
385
|
+
|
|
386
|
+
If ANY ❌ MISMATCH found:
|
|
387
|
+
- List each mismatch with the correct classification and evidence
|
|
388
|
+
- Report: 'VERIFICATION FAILED — {N} misclassifications found. Contracts must be fixed before build.'
|
|
389
|
+
|
|
390
|
+
If ALL ✅ MATCH:
|
|
391
|
+
- Report: 'VERIFICATION PASSED — all {N} chart classifications confirmed against Figma source.'
|
|
392
|
+
"
|
|
333
393
|
```
|
|
334
394
|
|
|
335
|
-
|
|
395
|
+
After subagent returns — run via Bash:
|
|
396
|
+
`T_END=$(date +%s) && DT_END=$(date +"%Y-%m-%d %H:%M") && TOK_END=${CLAUDE_CONTEXT_TOKENS_USED:-0} && DURATION=$((T_END-T_START))`
|
|
397
|
+
|
|
398
|
+
Compute tokens/compaction per standard pattern. Append to `.gsd-t/token-log.md`.
|
|
399
|
+
|
|
400
|
+
**If VERIFICATION FAILED**: Fix every misclassified element contract before proceeding:
|
|
401
|
+
1. Rename the contract file to match the correct chart type
|
|
402
|
+
2. Rewrite the visual spec section to match the correct chart type
|
|
403
|
+
3. Update INDEX.md references
|
|
404
|
+
4. Update any widget contracts that reference the renamed element
|
|
405
|
+
5. **Re-run the verification subagent** to confirm fixes (max 2 cycles)
|
|
406
|
+
|
|
407
|
+
**If VERIFICATION PASSED**: Proceed to Step 7.
|
|
336
408
|
|
|
337
|
-
> **Why this gate exists**: The
|
|
409
|
+
> **Why this gate exists**: The decompose agent's own examples show the correct classification for "Number of Tools" as `chart-bar-stacked-horizontal-percentage` — yet the agent classified the same chart as `bar-vertical-grouped` in practice. Soft instructions ("MANDATORY decision tree") don't prevent misclassification. A separate agent with fresh context and inverted incentives (success = finding errors) does.
|
|
338
410
|
|
|
339
411
|
## Step 7: Wire Into Partition
|
|
340
412
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "2.70.
|
|
3
|
+
"version": "2.70.15",
|
|
4
4
|
"description": "GSD-T: Contract-Driven Development for Claude Code — 54 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",
|