@tekyzinc/gsd-t 2.68.11 → 2.68.13

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,19 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [2.68.13] - 2026-04-05
6
+
7
+ ### Added (element-contract template)
8
+ - **Chart-type-specific mandatory Visual Spec properties** — bar charts must now specify: `bar_width`, `bar_gap`, `bar_group_gap`, `corner_radius`, `label_position`, `label_min_width`, `segment_order`, `orientation`. Circular charts: `outer_diameter`, `inner_diameter`, `segment_order`, `start_angle`, `label_position`, `center_content`. Line/area: `stroke_width`, `point_radius`, `curve_type`, `fill_opacity`. Progress/gauge: `track_width`, `fill_width`, `track_color`. These are the exact properties that distinguish "matches the design" from "looks close."
9
+
10
+ ### Why
11
+ BDS comparison showed bars with wrong width, wrong gap between groups, labels positioned outside instead of inside, wrong segment stacking order. The element contract's Visual Spec was free-form (`{dimension_1}`) — the agent could skip bar_width, segment_order, and label_position entirely. Chart-type-specific mandatory fields close this gap.
12
+
13
+ ## [2.68.12] - 2026-04-05
14
+
15
+ ### Fixed (design-chart-taxonomy template)
16
+ - **Lists section, naming grammar, and formalized extension workflow** now ship in the package source template (previously only existed in local `~/.claude/templates/` copy from v2.67.10 — `update-all` overwrote it). Package template and installed template are now in sync.
17
+
5
18
  ## [2.68.11] - 2026-04-05
6
19
 
7
20
  ### Changed (widget-contract template)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "2.68.11",
3
+ "version": "2.68.13",
4
4
  "description": "GSD-T: Contract-Driven Development for Claude Code — 51 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",
@@ -144,6 +144,27 @@ The catastrophic failure mode is: agent sees "bars" in Figma, picks `chart-bar-g
144
144
  | `table-zebra` | Alternating row backgrounds |
145
145
  | `table-striped-header` | Only header row has distinct background |
146
146
 
147
+ **Decision rule: table vs list?**
148
+ - Columns aligned across rows, with a header row labelling columns → **table-\***
149
+ - Each row is self-contained (thumbnail + text stack + meta, no shared column grid) → **list-\*** (see Lists section)
150
+
151
+ ---
152
+
153
+ ## Lists
154
+
155
+ | Element name | Visual distinguisher |
156
+ |--------------------------------|---------------------------------------------------------------------------------------------------|
157
+ | `list-simple-vertical` | Vertical stack of single-line text rows |
158
+ | `list-icon-vertical` | Vertical stack of rows; each row has leading icon + text |
159
+ | `list-avatar-vertical` | Vertical stack of rows; each row has leading avatar + text stack |
160
+ | `list-thumbnail-vertical` | Vertical stack of rows; each row has leading thumbnail (bounded rect image) + text stack + meta |
161
+
162
+ **Decision rule: which list variant?**
163
+ - Leading visual is a circular profile image → `list-avatar-vertical`
164
+ - Leading visual is a glyph → `list-icon-vertical`
165
+ - Leading visual is a bounded-rect image (video thumb, article cover) → `list-thumbnail-vertical`
166
+ - No leading visual → `list-simple-vertical`
167
+
147
168
  ---
148
169
 
149
170
  ## Controls
@@ -257,11 +278,40 @@ When `gsd-t-design-decompose` runs, for EACH visual element encountered in the d
257
278
 
258
279
  ---
259
280
 
281
+ ## Naming grammar
282
+
283
+ Element names follow a consistent grammar to avoid ad-hoc invention:
284
+
285
+ ```
286
+ {category}-{variant}-{orientation/modifier}
287
+
288
+ Categories: chart, axis, legend, stat-card, card, table, list, button, input,
289
+ select, tabs, filter, icon, text, heading, container, stack, grid
290
+
291
+ Modifiers (common):
292
+ -single / -multi — series count
293
+ -horizontal / -vertical — orientation
294
+ -stacked / -grouped — arrangement
295
+ -percentage — values sum to 100%
296
+ -dense / -comfortable — density
297
+ -outline / -filled — visual weight
298
+ ```
299
+
300
+ When proposing a new entry, match the grammar of its sibling section.
301
+
260
302
  ## Extending the taxonomy
261
303
 
262
304
  If a new element variant is needed:
263
305
 
264
- 1. Add it to the relevant section above with a visual distinguisher
265
- 2. If it's a new chart variant, add a decision rule under the chart type
266
- 3. Bump GSD-T version (minor) and document the addition in CHANGELOG.md
267
- 4. Never delete entries — only add (breaking the closed set is destructive)
306
+ 1. **Write a proposal first**: `.gsd-t/contracts/design/taxonomy-proposals/{name}.proposal.md` with:
307
+ - Section it belongs in (existing or new)
308
+ - Proposed entry name + visual distinguisher (≤80 chars)
309
+ - Sibling entries — how the new entry differs from each
310
+ - Catastrophic-misclassification rationale (what goes wrong if you jam it into an existing entry)
311
+ - Source (Figma node, screenshot)
312
+ - Companion entries flagged (if the new entry implies a cluster of siblings)
313
+ 2. Add it to the relevant section above with a visual distinguisher
314
+ 3. If it creates a new section, place it near structurally similar sections (layout-like near Tables, interactive-like near Controls)
315
+ 4. If it's a new chart variant, add a decision rule under the chart type
316
+ 5. Bump GSD-T version (minor) and document the addition in CHANGELOG.md
317
+ 6. Never delete entries — only add (breaking the closed set is destructive)
@@ -28,6 +28,49 @@ Atomic visual unit. One contract per visual variant (e.g., `chart-bar-stacked-ho
28
28
 
29
29
  *List every measurable visual property: dimensions, spacing, radii, borders, shadows, opacity. Reference design tokens rather than raw values where possible (`tokens.spacing.4` instead of `16px`).*
30
30
 
31
+ ### Chart-Type-Specific Mandatory Properties
32
+
33
+ The free-form table above is necessary but not sufficient. For chart elements, the following properties are **MANDATORY** based on chart category — extract exact values from Figma MCP `get_design_context` or measure from the screenshot. Missing any of these is how "looks off" happens.
34
+
35
+ **Bar charts** (`chart-bar-*`):
36
+ | Property | Description | Example |
37
+ |----------|-------------|---------|
38
+ | `bar_width` | Width of each bar (px or % of available space) | `32px` / `60%` |
39
+ | `bar_gap` | Gap between bars within a group (grouped only) | `4px` |
40
+ | `bar_group_gap` | Gap between category groups | `24px` |
41
+ | `corner_radius` | Rounding on bar ends (top for vertical, right for horizontal) | `4px top` / `0` |
42
+ | `label_position` | Where percentage/value labels appear | `inside-center` / `outside-right` / `above` |
43
+ | `label_min_width` | Minimum bar width to show label (hide if smaller) | `40px` |
44
+ | `segment_order` | For stacked: order of series from bottom/left to top/right | `[NM, MT, OK, TX, IL]` |
45
+ | `orientation` | Explicit confirmation of horizontal vs vertical | `vertical` |
46
+
47
+ **Circular charts** (`chart-donut`, `chart-pie`, `chart-radial-bar`):
48
+ | Property | Description | Example |
49
+ |----------|-------------|---------|
50
+ | `outer_diameter` | Total diameter of the chart | `180px` |
51
+ | `inner_diameter` | Hole diameter (donut only, 0 for pie) | `100px` |
52
+ | `segment_order` | Clockwise order of segments from 12 o'clock | `[Steps, Broker, Video, Quick, Plan]` |
53
+ | `start_angle` | Where first segment starts | `12 o'clock (0°)` |
54
+ | `label_position` | Where percentage labels appear | `outside-radial` / `inside-segment` / `none` |
55
+ | `center_content` | What's displayed in the center hole (donut) | `"485" + "Total Interactions"` |
56
+
57
+ **Line / area charts** (`chart-line-*`, `chart-area-*`):
58
+ | Property | Description | Example |
59
+ |----------|-------------|---------|
60
+ | `stroke_width` | Line thickness | `2px` |
61
+ | `point_radius` | Data point dot radius (0 = no dots) | `4px` |
62
+ | `curve_type` | Linear, bezier, step | `linear` |
63
+ | `fill_opacity` | For area charts: opacity of fill below line | `0.3` |
64
+
65
+ **Progress / gauge** (`chart-progress-ring`, `chart-progress-bar`):
66
+ | Property | Description | Example |
67
+ |----------|-------------|---------|
68
+ | `track_width` | Width of background track | `12px` |
69
+ | `fill_width` | Width of progress fill (same as track or thinner) | `12px` |
70
+ | `track_color` | Background track color | `#e2e8f0` |
71
+
72
+ **If your element is a chart and you haven't filled the mandatory properties above, STOP. Go back to Figma and extract them.** These properties are the difference between a chart that "looks close" and one that matches.
73
+
31
74
  ## Labels / Text (if applicable)
32
75
 
33
76
  | Property | Value |