@tekyzinc/gsd-t 4.19.12 → 4.19.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,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
4
|
|
|
5
|
+
## [4.19.13] - 2026-07-07
|
|
6
|
+
|
|
7
|
+
### Fixed — `/gsd-t-stories`: reserve label space when a diagram is height-constrained
|
|
8
|
+
|
|
9
|
+
The aspect-ratio "contain" fit (v4.19.12) set a tall image to the FULL page height, leaving no room for the `Flow Diagram:` label above it — so keep-with-next pushed the whole image to the next page (observed on Newman). The height constraint is now `avail_height = page_height − label_reserve` (label_reserve ≈ 0.5in) instead of full page height, so the label + image always fit on one page. Width-constrained images are unaffected.
|
|
10
|
+
|
|
11
|
+
- `commands/gsd-t-stories.md`: Step 4b — label-reserved page box (`avail_height`), clamp height to it not full page.
|
|
12
|
+
- `templates/playbooks/tekyz-user-stories-format.md`: same.
|
|
13
|
+
|
|
5
14
|
## [4.19.12] - 2026-07-07
|
|
6
15
|
|
|
7
16
|
### Fixed — `/gsd-t-stories` diagrams: deterministic aspect-ratio fit + heading placement + no orphans
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# GSD-T: Contract-Driven Development for Claude Code
|
|
2
2
|
|
|
3
|
-
**v4.19.
|
|
3
|
+
**v4.19.13** - A methodology for reliable, parallelizable development using Claude Code with optional Agent Teams support.
|
|
4
4
|
|
|
5
5
|
**Eliminates context rot** — task-level fresh dispatch (one subagent per task, ~10-20% context each) means compaction never triggers.
|
|
6
6
|
**Compaction-proof debug loops** — `gsd-t headless --debug-loop` runs test-fix-retest cycles as separate `claude -p` sessions. A JSONL debug ledger persists all hypothesis/fix/learning history across fresh sessions. Anti-repetition preamble injection prevents retrying failed hypotheses. Escalation tiers (sonnet → opus → human) and a hard iteration ceiling enforced externally.
|
|
@@ -71,16 +71,18 @@ classDef newfeat fill:#e2f0fb,stroke:#5b9bd5,color:#1f4e79,stroke-dasharray:4
|
|
|
71
71
|
|
|
72
72
|
The whole diagram MUST fit inside the page's visible area. **Compare aspect ratios first, then clamp ONLY the constraining dimension** — this is the standard "contain" fit; it guarantees no clipping and no distortion. Do NOT eyeball it or rely on layout luck.
|
|
73
73
|
|
|
74
|
-
**Page dimensions** (the visible printable area) default to **US Letter portrait content box ≈ 6.5in × 9in** (W×H, i.e. 8.5×11 minus 1in margins) unless the deliverable specifies otherwise.
|
|
74
|
+
**Page dimensions** (the visible printable area) default to **US Letter portrait content box ≈ 6.5in × 9in** (W×H, i.e. 8.5×11 minus 1in margins) unless the deliverable specifies otherwise.
|
|
75
|
+
|
|
76
|
+
**⚠️ RESERVE LABEL SPACE — critical.** Every diagram has a heading label ABOVE it (`Flow Diagram:`) that must sit on the SAME page (4b keep-with-next). If the image is set to the FULL page height, there is no room for the label → keep-with-next pushes the whole image to the next page (the Newman failure). So the height the image may occupy is **`avail_height = page_height − label_reserve`**, where `label_reserve ≈ 0.5in` (heading line + gap). Use `avail_height` — NOT the full `page_height` — as the height constraint. Width is unaffected (`avail_width = page_width`). `page_AR = avail_width / avail_height`.
|
|
75
77
|
|
|
76
78
|
**Algorithm — run per rendered diagram:**
|
|
77
79
|
1. **Render** the Mermaid to PNG (Step 4c), then **measure its actual pixel dimensions** `img_w × img_h` (e.g. via `sips -g pixelWidth -g pixelHeight <png>` on macOS, or `mmdc` output metadata). `img_AR = img_w / img_h`.
|
|
78
|
-
2. **Compute both aspect ratios** — compare SHAPES, not sizes yet.
|
|
80
|
+
2. **Compute both aspect ratios** against the **label-reserved** page box — compare SHAPES, not sizes yet.
|
|
79
81
|
3. **Clamp the constraining dimension:**
|
|
80
|
-
- **If `img_AR > page_AR`** (image is *wider* than the
|
|
81
|
-
- **If `img_AR < page_AR`** (image is *taller* than the
|
|
82
|
-
- **If equal** → either
|
|
83
|
-
4. **Embed at that ONE clamped dimension** so the renderer scales the other proportionally. In markdown, use an HTML `<img>` with only the clamped side set (e.g. `<img src="media/<name>.png" width="…" />` or `height="…"`) — never set both (that distorts). For `.docx`, pandoc honors the single dimension.
|
|
82
|
+
- **If `img_AR > page_AR`** (image is *wider* than the available box) → **width is the constraint → set embedded `width = avail_width` (= page_width)** (height scales proportionally, lands ≤ avail_height). *Example: a 5-wide × 4-tall image → set width = page width.*
|
|
83
|
+
- **If `img_AR < page_AR`** (image is *taller* than the available box) → **height is the constraint → set embedded `height = avail_height` (= page_height − label_reserve, NOT full page height)** (width scales proportionally). This is what leaves room for the label above. *Example: a 2-wide × 4-tall image → set height = page_height − 0.5in.*
|
|
84
|
+
- **If equal** → either works; set width = avail_width.
|
|
85
|
+
4. **Embed at that ONE clamped dimension** so the renderer scales the other proportionally. In markdown, use an HTML `<img>` with only the clamped side set (e.g. `<img src="media/<name>.png" width="…" />` or `height="…"`) — never set both (that distorts). For `.docx`, pandoc honors the single dimension. The label + image together now fit on one page.
|
|
84
86
|
|
|
85
87
|
**Layout still matters as an INPUT to the ratio** (not a substitute for it): choose `flowchart LR` for long linear flows and `TD` for short ones so the rendered `img_AR` is closer to the page shape *before* clamping — this maximizes the final on-page size. But the aspect-ratio clamp above is what GUARANTEES the fit; the direction choice only optimizes how much of the page it fills.
|
|
86
88
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "4.19.
|
|
3
|
+
"version": "4.19.13",
|
|
4
4
|
"description": "GSD-T: Contract-Driven Development for Claude Code — 54 slash commands with headless-by-default workflow spawning, unattended supervisor relay with event stream, graph-powered code analysis, real-time agent dashboard, 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",
|
|
@@ -137,18 +137,23 @@ terminals are round `([...])`; label decision-branch edges (`-->|Yes|`).
|
|
|
137
137
|
### Fit-to-page by ASPECT-RATIO CONTAIN (MANDATORY — deterministic)
|
|
138
138
|
|
|
139
139
|
Compare aspect ratios FIRST, then clamp only the constraining dimension (standard "contain" fit —
|
|
140
|
-
no clipping, no distortion). Page = visible content box, default US Letter portrait ≈ 6.5in × 9in
|
|
141
|
-
|
|
140
|
+
no clipping, no distortion). Page = visible content box, default US Letter portrait ≈ 6.5in × 9in (W×H).
|
|
141
|
+
|
|
142
|
+
**RESERVE LABEL SPACE:** each diagram's `Flow Diagram:` label sits above it on the same page. If the
|
|
143
|
+
image is set to FULL page height, no room is left for the label and keep-with-next pushes the image to
|
|
144
|
+
the next page (the Newman bug). So use `avail_height = page_height − label_reserve` (label_reserve ≈
|
|
145
|
+
0.5in) as the height constraint, NOT full page_height. `avail_width = page_width`;
|
|
146
|
+
`page_AR = avail_width / avail_height`.
|
|
142
147
|
|
|
143
148
|
1. Render to PNG, then MEASURE its pixels `img_w × img_h` (`sips -g pixelWidth -g pixelHeight`);
|
|
144
149
|
`img_AR = img_w / img_h`.
|
|
145
|
-
2. Compare shapes:
|
|
146
|
-
- `img_AR > page_AR` (wider
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
2. Compare shapes against the label-reserved box:
|
|
151
|
+
- `img_AR > page_AR` (wider) → **set width = avail_width (= page_width)** (height scales, fits).
|
|
152
|
+
- `img_AR < page_AR` (taller) → **set height = avail_height (= page_height − 0.5in, NOT full page)**
|
|
153
|
+
(width scales) — this leaves room for the label above.
|
|
154
|
+
- equal → set width = avail_width.
|
|
155
|
+
3. Embed with ONLY the clamped side set (`<img … width>` OR `height`, never both). Label + image fit
|
|
156
|
+
on one page.
|
|
152
157
|
|
|
153
158
|
Direction (`LR` for long flows, `TD` for short) is chosen to bring `img_AR` closer to `page_AR`
|
|
154
159
|
BEFORE clamping (maximizes final on-page size) — but the ratio clamp is what guarantees the fit.
|