@tekyzinc/gsd-t 2.62.10 → 2.64.10

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,21 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [2.64.10] - 2026-04-05
6
+
7
+ ### Added (page-contract template)
8
+ - **Page Fixture (OPTIONAL)** section — formalizes the composition chain (element → widget → page) by referencing each widget's fixture via `$ref:{widget-name}#/fixture`. Closes gap P2 from page-tier convergence run 1.
9
+ - **Boundary Rules (MANDATORY)** section — explicit rules on what a page may vs may not do (pass data through widget props = OK; declare CSS for widget internal classes = VIOLATION). Adds a grep-based enforcement check. Closes gap P3.
10
+ - **Grid position format** clarification — use `grid[row=N, col=M]` OR named CSS grid areas, consistently within one page. Closes gap P4.
11
+
12
+ ### Changed
13
+ - **Widgets Used** table: renamed "Notes" column → "Layout Notes" with positioning-only guidance (spans/stacking/sticky — NOT widget configuration). Closes gap P1.
14
+
15
+ ## [2.63.10] - 2026-04-05
16
+
17
+ ### Added
18
+ - **Taxonomy filename rule** in `gsd-t-design-decompose.md` Step 0: element contract filenames MUST match the closed-set taxonomy name exactly (`chart-bar-vertical-single.contract.md`, not `bar-vertical-single.contract.md`). Closes widget-tier gap W5 — shortened aliases create taxonomy drift and break link-integrity. Prefer renaming legacy contracts over creating parallel files.
19
+
5
20
  ## [2.62.10] - 2026-04-05
6
21
 
7
22
  ### Added
@@ -36,6 +36,7 @@ Run these checks, log results to user inline:
36
36
  - READ `templates/design-chart-taxonomy.md` from the GSD-T package (or `~/.claude/` if installed)
37
37
  - This is the **CLOSED SET** of valid element names. You MUST pick from this list. Inventing new element names is FORBIDDEN without user approval to extend the taxonomy.
38
38
  - Keep the taxonomy in working memory while classifying — every element you identify MUST be matched against it
39
+ - **Filename rule**: the element contract filename MUST match the taxonomy name exactly (`chart-bar-vertical-single.contract.md`, not `bar-vertical-single.contract.md`). Shortened aliases are FORBIDDEN — they create taxonomy drift and make link-integrity checks fail. If an existing legacy contract uses a shortened name, prefer renaming it to the taxonomy name over creating a parallel file.
39
40
 
40
41
  ## Step 1: Survey the Design
41
42
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "2.62.10",
3
+ "version": "2.64.10",
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",
@@ -18,14 +18,31 @@ Top-level assembly of widgets + global layout + routing + data loading. Pages PO
18
18
 
19
19
  ## Widgets Used
20
20
 
21
- | Position in Grid | Widget Contract | Notes |
21
+ | Position in Grid | Widget Contract | Layout Notes |
22
22
  |----------------------------------|---------------------------------|------------------------------|
23
- | header | page-header-widget | {sticky} |
24
- | sidebar | nav-sidebar-widget | {collapsible at <1024px} |
25
- | grid[row=1, cols=1-4] | stat-strip-widget | {4 KPI tiles} |
26
- | grid[row=2, col=1-2] | revenue-breakdown-widget | {spans 2 columns} |
27
- | grid[row=2, col=3-4] | user-growth-widget | {spans 2 columns} |
28
- | grid[row=3, col=1-4] | recent-activity-table-widget | {full width} |
23
+ | header | page-header-widget | sticky |
24
+ | sidebar | nav-sidebar-widget | collapsible at <1024px |
25
+ | grid[row=1, cols=1-4] | stat-strip-widget | full-width row |
26
+ | grid[row=2, col=1-2] | revenue-breakdown-widget | spans 2 columns |
27
+ | grid[row=2, col=3-4] | user-growth-widget | spans 2 columns |
28
+ | grid[row=3, col=1-4] | recent-activity-table-widget | full width |
29
+
30
+ **Grid position format**: use EITHER `grid[row=N, col=M]` / `grid[row=N, cols=M-K]` OR named CSS grid areas (`grid-area: strip`). Be consistent within one page. The **Layout Notes** column documents positioning metadata only (spans, stacking, sticky/fixed) — NOT widget configuration (widget props live in the widget contract).
31
+
32
+ ## Page Fixture (OPTIONAL)
33
+
34
+ If you want to formalize the composition chain (element → widget → page), declare a page-level fixture that references each widget's fixture by `$ref`:
35
+
36
+ ```json
37
+ {
38
+ "__fixture_source__": "composed-from-widgets",
39
+ "strip": "$ref:stat-strip-widget#/fixture",
40
+ "donut": "$ref:revenue-breakdown-widget#/fixture",
41
+ "bar": "$ref:user-growth-widget#/fixture"
42
+ }
43
+ ```
44
+
45
+ Skip this section for pages that are pure assembly with no storybook / harness target. Include it when the page has a dedicated demo route or when multiple pages share widget fixtures and you want to document which instance each page references.
29
46
 
30
47
  ## Layout
31
48
 
@@ -123,6 +140,20 @@ Top-level assembly of widgets + global layout + routing + data loading. Pages PO
123
140
  - **Router integration**: {vue-router / react-router / next.js app dir}
124
141
  - **Data fetching**: {composable / hook / server component}
125
142
 
143
+ ## Boundary Rules (MANDATORY)
144
+
145
+ A page is allowed to:
146
+ - Pass DATA through a widget's documented `defineProps` / public API (titles, subtitles, fixture data — these are the widget's legitimate inputs)
147
+ - Declare page-level layout CSS (grid template, gaps, padding, max-width, background, landmark regions)
148
+ - Manage route-level state and data fetching
149
+
150
+ A page is **FORBIDDEN** from:
151
+ - Declaring CSS selectors that target a widget's internal classes (`.card-title`, `.donut-segment`, `.legend-dot`) — this is a boundary violation
152
+ - Overriding widget visual spec via `:deep()` selectors or `!important` on widget-owned properties
153
+ - Re-specifying element visual spec (colors, font sizes, radii, paddings owned by elements)
154
+
155
+ **Enforcement check**: `grep` the page file for any CSS selector matching a widget's internal class names — if found, move the styling into the widget contract or create a widget variant.
156
+
126
157
  ## Verification Checklist
127
158
 
128
159
  Page-level verification runs AFTER all widgets pass their own verification. Page verification only checks assembly — widget and element internals are out of scope.