@tekyzinc/gsd-t 3.23.11 → 3.25.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +7 -0
  3. package/bin/cli-preflight-checks/branch-guard.cjs +110 -0
  4. package/bin/cli-preflight-checks/contracts-stable.cjs +128 -0
  5. package/bin/cli-preflight-checks/deps-installed.cjs +89 -0
  6. package/bin/cli-preflight-checks/manifest-fresh.cjs +98 -0
  7. package/bin/cli-preflight-checks/ports-free.cjs +110 -0
  8. package/bin/cli-preflight-checks/working-tree-state.cjs +149 -0
  9. package/bin/cli-preflight.cjs +265 -0
  10. package/bin/gsd-t-context-brief-kinds/design-verify.cjs +139 -0
  11. package/bin/gsd-t-context-brief-kinds/execute.cjs +205 -0
  12. package/bin/gsd-t-context-brief-kinds/qa.cjs +130 -0
  13. package/bin/gsd-t-context-brief-kinds/red-team.cjs +131 -0
  14. package/bin/gsd-t-context-brief-kinds/scan.cjs +118 -0
  15. package/bin/gsd-t-context-brief-kinds/verify.cjs +157 -0
  16. package/bin/gsd-t-context-brief.cjs +395 -0
  17. package/bin/gsd-t-ratelimit-probe-worker.cjs +236 -0
  18. package/bin/gsd-t-ratelimit-probe.cjs +648 -0
  19. package/bin/gsd-t-verify-gate-judge.cjs +224 -0
  20. package/bin/gsd-t-verify-gate.cjs +612 -0
  21. package/bin/gsd-t.js +45 -1
  22. package/bin/live-activity-report.cjs +615 -0
  23. package/bin/m55-substrate-proof.cjs +134 -0
  24. package/bin/parallel-cli-tee.cjs +206 -0
  25. package/bin/parallel-cli.cjs +478 -0
  26. package/commands/gsd-t-execute.md +31 -0
  27. package/commands/gsd-t-help.md +21 -0
  28. package/commands/gsd-t-verify.md +38 -0
  29. package/docs/architecture.md +194 -0
  30. package/docs/diagrams/.gsd-t/.context-meter-state.json +10 -0
  31. package/docs/diagrams/.gsd-t/context-meter.log +9 -0
  32. package/docs/diagrams/.gsd-t/events/2026-05-08.jsonl +45 -0
  33. package/docs/diagrams/.gsd-t/events/2026-05-09.jsonl +1 -0
  34. package/docs/diagrams/.gsd-t/heartbeat-cd9e7f59-ba5b-406a-9ed6-16762f039e81.jsonl +48 -0
  35. package/docs/diagrams/01-top-level-map-d2.png +0 -0
  36. package/docs/diagrams/01-top-level-map.d2 +77 -0
  37. package/docs/diagrams/01-top-level-map.mmd +48 -0
  38. package/docs/diagrams/01-top-level-map.png +0 -0
  39. package/docs/diagrams/01-top-level-map.svg +126 -0
  40. package/docs/diagrams/02-milestone-lifecycle-d2.png +0 -0
  41. package/docs/diagrams/02-milestone-lifecycle.d2 +38 -0
  42. package/docs/diagrams/02-milestone-lifecycle.mmd +36 -0
  43. package/docs/diagrams/02-milestone-lifecycle.png +0 -0
  44. package/docs/diagrams/02-milestone-lifecycle.svg +114 -0
  45. package/docs/diagrams/03-wave-mode-d2.png +0 -0
  46. package/docs/diagrams/03-wave-mode.d2 +33 -0
  47. package/docs/diagrams/03-wave-mode.mmd +21 -0
  48. package/docs/diagrams/03-wave-mode.png +0 -0
  49. package/docs/diagrams/03-wave-mode.svg +113 -0
  50. package/docs/diagrams/04-design-to-code-d2.png +0 -0
  51. package/docs/diagrams/04-design-to-code.d2 +35 -0
  52. package/docs/diagrams/04-design-to-code.mmd +29 -0
  53. package/docs/diagrams/04-design-to-code.png +0 -0
  54. package/docs/diagrams/04-design-to-code.svg +115 -0
  55. package/docs/diagrams/05-backlog-d2.png +0 -0
  56. package/docs/diagrams/05-backlog.d2 +40 -0
  57. package/docs/diagrams/05-backlog.mmd +20 -0
  58. package/docs/diagrams/05-backlog.png +0 -0
  59. package/docs/diagrams/05-backlog.svg +113 -0
  60. package/docs/diagrams/06-automation-utilities-d2.png +0 -0
  61. package/docs/diagrams/06-automation-utilities.d2 +48 -0
  62. package/docs/diagrams/06-automation-utilities.mmd +47 -0
  63. package/docs/diagrams/06-automation-utilities.png +0 -0
  64. package/docs/diagrams/06-automation-utilities.svg +110 -0
  65. package/docs/diagrams/_theme.d2 +86 -0
  66. package/docs/requirements.md +48 -0
  67. package/docs/workflow-diagram.md +338 -0
  68. package/package.json +1 -1
  69. package/scripts/gsd-t-dashboard-server.js +190 -0
  70. package/scripts/gsd-t-transcript.html +200 -0
  71. package/templates/CLAUDE-global.md +46 -0
  72. package/templates/prompts/design-verify-subagent.md +3 -0
  73. package/templates/prompts/qa-subagent.md +3 -0
  74. package/templates/prompts/red-team-subagent.md +3 -0
@@ -0,0 +1,113 @@
1
+ <?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 2129 710"><svg class="d2-2460008753 d2-svg" width="2129" height="710" viewBox="-29 -29 2129 710"><rect x="-29.000000" y="-29.000000" width="2129.000000" height="710.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
2
+ .d2-2460008753 .text {
3
+ font-family: "d2-2460008753-font-regular";
4
+ }
5
+ @font-face {
6
+ font-family: d2-2460008753-font-regular;
7
+ src: url("data:application/font-woff;base64,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");
8
+ }
9
+ .d2-2460008753 .text-bold {
10
+ font-family: "d2-2460008753-font-bold";
11
+ }
12
+ @font-face {
13
+ font-family: d2-2460008753-font-bold;
14
+ src: url("data:application/font-woff;base64,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");
15
+ }
16
+ .d2-2460008753 .text-italic {
17
+ font-family: "d2-2460008753-font-italic";
18
+ }
19
+ @font-face {
20
+ font-family: d2-2460008753-font-italic;
21
+ src: url("data:application/font-woff;base64,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");
22
+ }]]></style><style type="text/css"><![CDATA[.shape {
23
+ shape-rendering: geometricPrecision;
24
+ stroke-linejoin: round;
25
+ }
26
+ .connection {
27
+ stroke-linecap: round;
28
+ stroke-linejoin: round;
29
+ }
30
+ .blend {
31
+ mix-blend-mode: multiply;
32
+ opacity: 0.5;
33
+ }
34
+
35
+ .d2-2460008753 .fill-N1{fill:#0A0F25;}
36
+ .d2-2460008753 .fill-N2{fill:#676C7E;}
37
+ .d2-2460008753 .fill-N3{fill:#9499AB;}
38
+ .d2-2460008753 .fill-N4{fill:#CFD2DD;}
39
+ .d2-2460008753 .fill-N5{fill:#DEE1EB;}
40
+ .d2-2460008753 .fill-N6{fill:#EEF1F8;}
41
+ .d2-2460008753 .fill-N7{fill:#FFFFFF;}
42
+ .d2-2460008753 .fill-B1{fill:#0D32B2;}
43
+ .d2-2460008753 .fill-B2{fill:#0D32B2;}
44
+ .d2-2460008753 .fill-B3{fill:#E3E9FD;}
45
+ .d2-2460008753 .fill-B4{fill:#E3E9FD;}
46
+ .d2-2460008753 .fill-B5{fill:#EDF0FD;}
47
+ .d2-2460008753 .fill-B6{fill:#F7F8FE;}
48
+ .d2-2460008753 .fill-AA2{fill:#4A6FF3;}
49
+ .d2-2460008753 .fill-AA4{fill:#EDF0FD;}
50
+ .d2-2460008753 .fill-AA5{fill:#F7F8FE;}
51
+ .d2-2460008753 .fill-AB4{fill:#EDF0FD;}
52
+ .d2-2460008753 .fill-AB5{fill:#F7F8FE;}
53
+ .d2-2460008753 .stroke-N1{stroke:#0A0F25;}
54
+ .d2-2460008753 .stroke-N2{stroke:#676C7E;}
55
+ .d2-2460008753 .stroke-N3{stroke:#9499AB;}
56
+ .d2-2460008753 .stroke-N4{stroke:#CFD2DD;}
57
+ .d2-2460008753 .stroke-N5{stroke:#DEE1EB;}
58
+ .d2-2460008753 .stroke-N6{stroke:#EEF1F8;}
59
+ .d2-2460008753 .stroke-N7{stroke:#FFFFFF;}
60
+ .d2-2460008753 .stroke-B1{stroke:#0D32B2;}
61
+ .d2-2460008753 .stroke-B2{stroke:#0D32B2;}
62
+ .d2-2460008753 .stroke-B3{stroke:#E3E9FD;}
63
+ .d2-2460008753 .stroke-B4{stroke:#E3E9FD;}
64
+ .d2-2460008753 .stroke-B5{stroke:#EDF0FD;}
65
+ .d2-2460008753 .stroke-B6{stroke:#F7F8FE;}
66
+ .d2-2460008753 .stroke-AA2{stroke:#4A6FF3;}
67
+ .d2-2460008753 .stroke-AA4{stroke:#EDF0FD;}
68
+ .d2-2460008753 .stroke-AA5{stroke:#F7F8FE;}
69
+ .d2-2460008753 .stroke-AB4{stroke:#EDF0FD;}
70
+ .d2-2460008753 .stroke-AB5{stroke:#F7F8FE;}
71
+ .d2-2460008753 .background-color-N1{background-color:#0A0F25;}
72
+ .d2-2460008753 .background-color-N2{background-color:#676C7E;}
73
+ .d2-2460008753 .background-color-N3{background-color:#9499AB;}
74
+ .d2-2460008753 .background-color-N4{background-color:#CFD2DD;}
75
+ .d2-2460008753 .background-color-N5{background-color:#DEE1EB;}
76
+ .d2-2460008753 .background-color-N6{background-color:#EEF1F8;}
77
+ .d2-2460008753 .background-color-N7{background-color:#FFFFFF;}
78
+ .d2-2460008753 .background-color-B1{background-color:#0D32B2;}
79
+ .d2-2460008753 .background-color-B2{background-color:#0D32B2;}
80
+ .d2-2460008753 .background-color-B3{background-color:#E3E9FD;}
81
+ .d2-2460008753 .background-color-B4{background-color:#E3E9FD;}
82
+ .d2-2460008753 .background-color-B5{background-color:#EDF0FD;}
83
+ .d2-2460008753 .background-color-B6{background-color:#F7F8FE;}
84
+ .d2-2460008753 .background-color-AA2{background-color:#4A6FF3;}
85
+ .d2-2460008753 .background-color-AA4{background-color:#EDF0FD;}
86
+ .d2-2460008753 .background-color-AA5{background-color:#F7F8FE;}
87
+ .d2-2460008753 .background-color-AB4{background-color:#EDF0FD;}
88
+ .d2-2460008753 .background-color-AB5{background-color:#F7F8FE;}
89
+ .d2-2460008753 .color-N1{color:#0A0F25;}
90
+ .d2-2460008753 .color-N2{color:#676C7E;}
91
+ .d2-2460008753 .color-N3{color:#9499AB;}
92
+ .d2-2460008753 .color-N4{color:#CFD2DD;}
93
+ .d2-2460008753 .color-N5{color:#DEE1EB;}
94
+ .d2-2460008753 .color-N6{color:#EEF1F8;}
95
+ .d2-2460008753 .color-N7{color:#FFFFFF;}
96
+ .d2-2460008753 .color-B1{color:#0D32B2;}
97
+ .d2-2460008753 .color-B2{color:#0D32B2;}
98
+ .d2-2460008753 .color-B3{color:#E3E9FD;}
99
+ .d2-2460008753 .color-B4{color:#E3E9FD;}
100
+ .d2-2460008753 .color-B5{color:#EDF0FD;}
101
+ .d2-2460008753 .color-B6{color:#F7F8FE;}
102
+ .d2-2460008753 .color-AA2{color:#4A6FF3;}
103
+ .d2-2460008753 .color-AA4{color:#EDF0FD;}
104
+ .d2-2460008753 .color-AA5{color:#F7F8FE;}
105
+ .d2-2460008753 .color-AB4{color:#EDF0FD;}
106
+ .d2-2460008753 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2460008753);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2460008753);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2460008753);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2460008753);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2460008753);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2460008753);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2460008753);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2460008753);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="c3RhcnQ= endpoint"><g class="shape" ><ellipse rx="107.000000" ry="35.500000" cx="119.000000" cy="257.500000" stroke="#374151" fill="#f3f4f6" class="shape" style="stroke-width:2;" /></g><text x="119.000000" y="263.000000" fill="#374151" class="text-bold" style="text-anchor:middle;font-size:16px">wave triggered</text></g><g class="cDE= cmd"><g class="shape" ><rect x="296.000000" y="225.000000" width="107.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="349.500000" y="263.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">partition</text></g><g class="cDI= cmd"><g class="shape" ><rect x="473.000000" y="225.000000" width="76.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="511.000000" y="263.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">plan</text></g><g class="cDM= cmd"><g class="shape" ><rect x="619.000000" y="225.000000" width="95.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="666.500000" y="263.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">impact</text></g><g class="cDQ= cmd"><g class="shape" ><rect x="784.000000" y="178.000000" width="101.000000" height="160.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="834.500000" y="263.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">execute</text></g><g class="cDU= cmd"><g class="shape" ><rect x="1015.000000" y="422.000000" width="111.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="1070.500000" y="460.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">test-sync</text></g><g class="cDY= cmd"><g class="shape" ><rect x="1196.000000" y="422.000000" width="111.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="1251.500000" y="460.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">integrate</text></g><g class="cDc= cmd"><g class="shape" ><rect x="1377.000000" y="395.000000" width="87.000000" height="120.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="1420.500000" y="460.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">verify</text></g><g class="cDg= cmd"><g class="shape" ><rect x="1544.000000" y="566.000000" width="188.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="1638.000000" y="604.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">complete-milestone</text></g><g class="ZW5k endpoint"><g class="shape" ><ellipse rx="123.500000" ry="41.000000" cx="1935.500000" cy="599.000000" stroke="#374151" fill="#f3f4f6" class="shape" style="stroke-width:2;" /></g><text x="1935.500000" y="604.500000" fill="#374151" class="text-bold" style="text-anchor:middle;font-size:16px">milestone shipped</text></g><g class="YXV4 group"><g class="shape" ><rect x="1817.000000" y="12.000000" width="238.000000" height="526.000000" stroke="#9ca3af" fill="#fafafa" style="stroke-width:1;stroke-dasharray:2.000000,2.000000;" /></g><text x="1936.000000" y="45.000000" fill="#374151" class="text" style="text-anchor:middle;font-size:28px">Auto-spawned</text></g><g class="YXV4LnFh subagent"><g class="shape" ><rect x="1867.000000" y="62.000000" width="63.000000" height="66.000000" rx="6.000000" stroke="#6b21a8" fill="#f3e8ff" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="1898.500000" y="100.500000" fill="#6b21a8" class="text-bold" style="text-anchor:middle;font-size:16px">qa</text></g><g class="YXV4LnJpcHBsZQ== subagent"><g class="shape" ><rect x="1867.000000" y="148.000000" width="118.000000" height="66.000000" rx="6.000000" stroke="#6b21a8" fill="#f3e8ff" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="1926.000000" y="186.500000" fill="#6b21a8" class="text-bold" style="text-anchor:middle;font-size:16px">doc-ripple</text></g><g class="YXV4LnBhcg== subagent"><g class="shape" ><rect x="1867.000000" y="234.000000" width="106.000000" height="82.000000" rx="6.000000" stroke="#6b21a8" fill="#f3e8ff" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="1920.000000" y="272.500000" fill="#6b21a8" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1920.000000" dy="0.000000">parallel</tspan><tspan x="1920.000000" dy="18.500000">dispatch</tspan></text></g><g class="YXV4LnJ0 gate"><g class="shape" ><rect x="1867.000000" y="336.000000" width="114.000000" height="66.000000" rx="6.000000" stroke="#991b1b" fill="#fee2e2" style="stroke-width:2;" /></g><text x="1924.000000" y="374.500000" fill="#991b1b" class="text-bold" style="text-anchor:middle;font-size:16px">Red Team</text></g><g class="YXV4LmR2 gate"><g class="shape" ><rect x="1867.000000" y="422.000000" width="138.000000" height="66.000000" rx="6.000000" stroke="#991b1b" fill="#fee2e2" style="stroke-width:2;" /></g><text x="1936.000000" y="460.500000" fill="#991b1b" class="text-bold" style="text-anchor:middle;font-size:16px">Design Verify</text></g><g class="KHN0YXJ0IC0mZ3Q7IHAxKVswXQ=="><marker id="mk-d2-2460008753-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 228.000000 258.000000 L 292.000000 258.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHAxIC0mZ3Q7IHAyKVswXQ=="><path d="M 405.000000 258.000000 L 469.000000 258.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHAyIC0mZ3Q7IHAzKVswXQ=="><path d="M 551.000000 258.000000 L 615.000000 258.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHAzIC0mZ3Q7IHA0KVswXQ=="><path d="M 716.000000 258.000000 L 780.000000 258.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA0IC0mZ3Q7IHA1KVswXQ=="><path d="M 887.000000 306.000000 L 915.000000 306.000000 S 925.000000 306.000000 925.000000 316.000000 L 925.000000 445.000000 S 925.000000 455.000000 935.000000 455.000000 L 1011.000000 455.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA1IC0mZ3Q7IHA2KVswXQ=="><path d="M 1128.000000 455.000000 L 1192.000000 455.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA2IC0mZ3Q7IHA3KVswXQ=="><path d="M 1309.000000 455.000000 L 1373.000000 455.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA3IC0mZ3Q7IHA4KVswXQ=="><path d="M 1466.000000 485.000000 L 1494.000000 485.000000 S 1504.000000 485.000000 1504.000000 495.000000 L 1504.000000 589.000000 S 1504.000000 599.000000 1514.000000 599.000000 L 1540.000000 599.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA4IC0mZ3Q7IGVuZClbMF0="><path d="M 1734.000000 599.000000 L 1808.000000 599.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2460008753-3488378134)" mask="url(#d2-2460008753)" /></g><g class="KHA0IC0mZ3Q7IGF1eC5xYSlbMF0="><marker id="mk-d2-2460008753-2177206569" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B2" stroke-width="2" /> </marker><path d="M 887.000000 210.000000 L 915.000000 210.000000 S 925.000000 210.000000 925.000000 200.000000 L 925.000000 105.000000 S 925.000000 95.000000 935.000000 95.000000 L 1863.000000 95.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-2460008753-2177206569)" mask="url(#d2-2460008753)" /><text x="1319.000000" y="101.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">spawned</text></g><g class="KHA0IC0mZ3Q7IGF1eC5yaXBwbGUpWzBd"><path d="M 887.000000 242.000000 L 1762.000000 242.000000 S 1772.000000 242.000000 1772.000000 232.000000 L 1772.000000 191.000000 S 1772.000000 181.000000 1782.000000 181.000000 L 1863.000000 181.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-2460008753-2177206569)" mask="url(#d2-2460008753)" /><text x="1407.000000" y="248.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">spawned</text></g><g class="KHA0IC0mZ3Q7IGF1eC5wYXIpWzBd"><path d="M 887.000000 275.000000 L 1863.000000 275.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-2460008753-2177206569)" mask="url(#d2-2460008753)" /><text x="1376.000000" y="281.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">parallel</text></g><g class="KHA3IC0mZ3Q7IGF1eC5ydClbMF0="><path d="M 1466.000000 425.000000 L 1494.000000 425.000000 S 1504.000000 425.000000 1504.000000 415.000000 L 1504.000000 379.000000 S 1504.000000 369.000000 1514.000000 369.000000 L 1863.000000 369.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-2460008753-2177206569)" mask="url(#d2-2460008753)" /><text x="1637.500000" y="375.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">gate</text></g><g class="KHA3IC0mZ3Q7IGF1eC5kdilbMF0="><path d="M 1466.000000 455.000000 L 1863.000000 455.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-2460008753-2177206569)" mask="url(#d2-2460008753)" /><text x="1665.500000" y="461.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">gate</text></g><mask id="d2-2460008753" maskUnits="userSpaceOnUse" x="-29" y="-29" width="2129" height="710">
107
+ <rect x="-29" y="-29" width="2129" height="710" fill="white"></rect>
108
+ <rect x="1286.000000" y="85.000000" width="66" height="21" fill="black"></rect>
109
+ <rect x="1374.000000" y="232.000000" width="66" height="21" fill="black"></rect>
110
+ <rect x="1348.000000" y="265.000000" width="56" height="21" fill="black"></rect>
111
+ <rect x="1620.000000" y="359.000000" width="35" height="21" fill="black"></rect>
112
+ <rect x="1648.000000" y="445.000000" width="35" height="21" fill="black"></rect>
113
+ </mask></svg></svg>
@@ -0,0 +1,35 @@
1
+ ...@_theme.d2
2
+
3
+
4
+ req: Design-to-code request { class: endpoint }
5
+ check: Existing\ncontracts? { class: decision }
6
+ clean: clean UI assets\n(inline) { class: subagent }
7
+ dd: "/gsd-t-design-decompose" { class: cmd }
8
+
9
+ contracts: ".gsd-t/contracts/design/\nelements · widgets · pages\nINDEX.md" { class: artifact }
10
+
11
+ db: "/gsd-t-design-build\ntwo-terminal review" { class: cmd; style.bold: true }
12
+
13
+ review: {
14
+ class: group
15
+ label: Review loop
16
+ t1: Term 1\nbuilder { class: cmd }
17
+ t2: "/gsd-t-design-review\nTerm 2 reviewer" { class: cmd }
18
+ t1 <-> t2: review
19
+ }
20
+
21
+ ship: All gates\npass? { class: decision }
22
+ done: UI shipped { class: endpoint }
23
+ da: "/gsd-t-design-audit\nbuilt vs Figma" { class: cmd }
24
+
25
+ req -> check
26
+ check -> clean: start over
27
+ check -> dd: none
28
+ check -> db: present
29
+ clean -> dd
30
+ dd -> contracts -> db
31
+ db -> review.t1
32
+ review.t2 -> ship
33
+ ship -> review.t1: no { style.stroke-dash: 3 }
34
+ ship -> done: yes
35
+ done -> da: optional { style.stroke-dash: 3 }
@@ -0,0 +1,29 @@
1
+ flowchart TD
2
+ REQ([Design-to-code request])
3
+
4
+ REQ --> CHECK{Existing<br/>contracts?}
5
+ CHECK -->|"start over"| CLEAN[clean UI assets<br/>inline]
6
+ CHECK -->|none| DD
7
+ CHECK -->|present| DB
8
+
9
+ CLEAN --> DD["/gsd-t-design-decompose<br/>elements → widgets → pages"]
10
+
11
+ DD --> DDOUT[".gsd-t/contracts/design/<br/>elements/*.contract.md<br/>widgets/*.contract.md<br/>pages/*.contract.md<br/>INDEX.md"]
12
+
13
+ DDOUT --> DB["/gsd-t-design-build<br/>two-terminal review"]
14
+
15
+ DB --> T1[Term 1<br/>builder]
16
+ DB --> T2["/gsd-t-design-review<br/>Term 2 reviewer"]
17
+
18
+ T1 <-->|review loop| T2
19
+
20
+ T2 --> SHIP{All gates pass?}
21
+ SHIP -->|no| T1
22
+ SHIP -->|yes| DONE([UI shipped])
23
+
24
+ DONE -.optional.-> DA["/gsd-t-design-audit<br/>compare built vs Figma"]
25
+
26
+ classDef pipe fill:#e1f5ff,stroke:#0288d1
27
+ classDef art fill:#f3e5f5,stroke:#7b1fa2
28
+ class DD,DB,T1,T2,DA,CLEAN pipe
29
+ class DDOUT art
@@ -0,0 +1,115 @@
1
+ <?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 419 2403"><svg class="d2-1418488350 d2-svg" width="419" height="2403" viewBox="-29 -29 419 2403"><rect x="-29.000000" y="-29.000000" width="419.000000" height="2403.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
2
+ .d2-1418488350 .text {
3
+ font-family: "d2-1418488350-font-regular";
4
+ }
5
+ @font-face {
6
+ font-family: d2-1418488350-font-regular;
7
+ src: url("data:application/font-woff;base64,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");
8
+ }
9
+ .d2-1418488350 .text-bold {
10
+ font-family: "d2-1418488350-font-bold";
11
+ }
12
+ @font-face {
13
+ font-family: d2-1418488350-font-bold;
14
+ src: url("data:application/font-woff;base64,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");
15
+ }
16
+ .d2-1418488350 .text-italic {
17
+ font-family: "d2-1418488350-font-italic";
18
+ }
19
+ @font-face {
20
+ font-family: d2-1418488350-font-italic;
21
+ src: url("data:application/font-woff;base64,d09GRgABAAAAABA8AAoAAAAAGUQAARhRAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAGAAAABgW1SVeGNtYXAAAAFUAAAAwQAAAQoF3gXeZ2x5ZgAAAhgAAAlQAAANTKxSQiFoZWFkAAALaAAAADYAAAA2G7Ur2mhoZWEAAAugAAAAJAAAACQLeAjRaG10eAAAC8QAAACzAAAAtE2lBL1sb2NhAAAMeAAAAFwAAABcTNJQAG1heHAAAAzUAAAAIAAAACAARQD2bmFtZQAADPQAAAMmAAAIMgntVzNwb3N0AAAQHAAAACAAAAAg/8YAMgADAeEBkAAFAAACigJY//EASwKKAlgARAFeADIBIwAAAgsFAwMEAwkCBCAAAHcAAAADAAAAAAAAAABBREJPAAEAIP//Au7/BgAAA9gBESAAAZMAAAAAAeYClAAAACAAA3icjM7LKoRxHIDh5zOfcRrn8/nvNGYU4gakpGwsRM3WQlIWtu5ILIUsJJdiY2+jpPxk+i5g3vWzeJEpyVCR+0VVkitL6tZt2LRtx659Bw4dOdFw5sK1pwgktcJtNd1e4Y41nDp3+e/infiOr/iJz/iIt3iNl3iOx3iI+7iL27iJq+ZFK2Vq6qqWrVm0ZEWbkly7sg6dunTrUdGrT78Bg4YMGzFqzLgJk6ZMmzFrzrxkwSp/AAAA//8BAAD///95MaAAAAB4nHxWfWwb5Rl/3vcud0nqOLHPPsfGsWO/9l3inO3EF/vyZcfOp5vYTfNJaJM0hRL6EVigdFA+RtdOHbDRmQkhDWkrAm3aVmlChT/YJpWJoS3Aqn2obGwwplEWULsJGmXVhsh5urOTOPlj/1gn632f5/f8nuf3e14oAx8Avgc/AxRUQDWYwQogcx6KkhWF2ChZFAnLKiLHsb7TaPn0c3Tvvn80PP9fyU0PfvVHw/+cv4CfWV9Ep2Yfe0zd//idd956/boaQH+8DgCA828DoHdwDirABMCxsigIImEYhGSOiIS92vHLSrqSph2y+ht0aF9m1PzJEXRyaan1aFv7Xeoozq0vXb4MgIEA4Jgeh9PQyRHeamEYIsqRWCzaKhBCzjz0xFOT5780NTX5SO9dd8Rw7usnH3jlzuTEswdnj2hYkB6jBudgl14f62FllrAelpxBR6vUq4Ebxk9lJBhxLvVOz82ekvMVJeep4ungjarPunAu9VGP+qdibFjDOaB0dBQ5s+eMBn4z7wLOFZFzNjkWU7QzlMYEq519NkAzxsr+4TPZZ5poprpyAOfUmSda7pbRzPoSevEp+WhEPQ8bPIg4B1XAb/HAcoQiFCdHNqh4Zebee8aPjy/ep/TdMXdoOD2PcwPj++8xqVcRr15Dk2MDsXCBk1kAHMU5YLVoRPGwhPrBiUtV6O2q107gbG/v+suFcyP5Nb0GHqDMK0Rb9QoYq4WXI4VPBrkOHWPooT3DFcn+tn3W0cyY87ThyII1bEdL6hNB70B25hj6tnrs3EkAlH8fAHtxDuwAhKNkG8/rtCgyxZHijLCs74vFiTbWUE6ZvNUPjv3rxEQXW1NOcX7TKTSBun7CS47aFv6Cekm9+KpddjgU+ys6R2J+Df0HrYJFY8umoU1gOcLbZEWmiEIYRozEFEUQiNeIrRb+5WRGGpqTxbiJ5hIHu8tpMm0WRnySNeL09UbdLYb9kwMnZ+QGT1x1pP3hZCj8Z8Eb2D0b6Y7rMw7u/Br6DC+DVVOSzSuIhCWczLJyLKb3x4jFSAJrrfEyLMvz18S4ibJ0n8uKPPZNBPX0UV9v1NXc6B0lIYtsaPDE8fKl+bqmfVNa6mRg96yciAf8HwteQODPr6GLaBWc26pjtYKYjZbYGObdkUNS9mBU6uKDnFDXPBVr76iP8V5H1rAw23d8Muy1N9usfUu9PQMOU8Tihw3usFhSyxZ3/5+8DjNVI2RzRfb2+HeyJ9YfuLTetpM+rNfyGloFB/hL8+lT7WH4jVooWZe5VuFHU0eCwzPNSsplKFPfqKjvDdS121x1o9/JY8rcSKJzhqMH+5fGpNDeiFM2du/1202y1Y38u2qrnC3uScCA8j60ilbBDaFCv5RCHoVhyPZpYRhqW7UXWqaIz9nfkBgy2oWJcHxv0+6ZFiFhorjuBe54Oxn1NvEtTpKSXeH3hbqozZtJHhakqcne+2+LaPNDHVhAnqbA7wRv48B0c2dnQVtuAPQuXta0IJfODUsRTitbGxvKfS7bXEM3jkmJaHki00XTaWc61I+Xr8dJONXm9qlvIclSWzUcCKk/zOe1mPA5vogFaAIABqR0IZeUX4PP8TKYtcqjrQXpWi1Fmu9OMQ9nH0XIRDEsquQN3SY7Prb+NFtBmRHupOlNvPgaWoVAAW8Brq0ImtmGurSAg90sLYwLHS1l4Wl/PEbTiWycpgetaalfq2eATzf1o5XdvhalQZJTbSaXpbSmra8tztAq1JZi2EmZlrFxLLSNMT3DTsI2Zx+9h1ahGupKZ7Eg4MKaKQjsysicNDQXGTkgDc8FgqNyLKL9GA7v7z8+GSr8JnuW+noGe5f6egb0PXgzL6PP0GpBV2wJYiMmumOw3DaPqHyym6H8kyFdXhGhi8Nm9/dLPeIyfjnpDhbF5T58HqGiSQif+D0b9ci6D+o5yxRNvDvme/t0I4/Hhf3ToVI/fPJ8qZgvn39ACG/a4XoWoe1mWOjLI2gVakr6YmOFjX7sousyQbv1lhqHL+OOo5VZKV7RV97dqV4GlP8iv4YeRasglqoy2iqIgrZwYlsmZ7XwNt0imBdbZu3NtqQQiDe2hdql3VJoyBniZI/QEqtPtDaPGVobBHdDiDhEtyPR2JTy+1wNFkfQ7RLM3i4p2OfXMHfl19A0Xtz005jCkW4s6+u+xE9/mmylUfvgrowvdcvDhkfbKafX6NhlqgkbuoPVjipkbi87ezahXjObXa7KMoWt1mK35dfQp2hF07Zta28WFccVLfXCphrSdYNSf0ZbQg0Thh7F5OZQTL3C2bUxRdOqY4jIBQ12AqC/oxWoApApmSuuT05GpwczPpqhaZOP+1ZWXUcr6sdkmPh2+5BddRTuDgDgX6MV8Oy4u/VFEaq4g6kjJFODEKKrb6k5NWzCGNFGR81j6b8eMOr/1lV/Ga2oH3r7vN4+L3KVfDlQJUn7fGmi3gSUvwKA/lDggXBiyb5nbVv7XvrL/j2BciNLV9dXT44v3zEilZsq6RovN4fwR4u8aLU0Whf/feM+PsTzku249o54PR9GV9EKOABYfWZ0I9/GiBEzlfVGu9nsT9nN4xmhrJyiTX7zNzPqh/bO9O9Ztr0iHiHoY/VTT5aQjBeZ1m+Es1KBKwcAOoW/or8ZFe2FFFNkSmYdVd+Yv7dyUum8/7QhiT6IGLzrryc1PDcB0Bv4Se0eURJUUdDipthZD1tZPn9uLixH61NeUbq1eWw6MPbIOLIYQqMP335bSOryuJuFxtv6onPzS+keDYMtvwaPw6KGoTBDBaMd4O2ik6/1G5y8Q6rj7ZKm+bn8GnoB/xjs2j5VEvROABTLloR4mgp0tAuhBqfCN9aNBgfGxM64RG8EflMe6oi2+xtDTlvIJe5OtQx2dPSGfruVTn/bfoAqkV1792rNJIb3qj7Q91o+DyPIAL9AX8Ms+KAN1ernU/m96Fb8HlQD2AqyVmyMZj687aFaj3J4KHh0scJifCn54tiJN38+az+r/u17oYV5QeP2Sn4vXCveFWNm7T2gmYTmAyh49FiFuTqihXjJcRZ5vhteOCBwyRfGTrz1M+3uq/l59AL+lYaTRTJKo4ttavZ5auGL5zZ3GlxGKxvvd/fB7O1oRRcMgkE8DBfxRY1/roS8BzkXsVnqCB628XZPLW+v/x8AAAD//wEAAP//ErzFaQABAAAAARhR81SYPV8PPPUAAQPoAAAAANhdoMwAAAAA3WYvN/69/t0IHQPJAAIAAwACAAAAAAAAAAEAAAPY/u8AAAhA/r39vAgdA+gAwv/RAAAAAAAAAAAAAAAteJwczCFOw3AUx/Hv71USEhJEAfMXj6aiHIAEDAKQRRAcaBIsJ8FxCBQG2YAhwdaQTHQH2ERFN9H0LdsBPh975ZRf0BR/dodrhesfZ8TtBbcK18SjPVNrGTM7prQjkj4pLKfUnMIOke2RWJBYc5Ylku2TLKO0PIat0QNJbzHqmks74FwNF/bDjT6iVRPf6jhRFwM9ud55UoXTU8u5UhGt7uNr98PtBgAA//8BAAD///39LYgAAAAALgAuAFIAdACMAKIAsADWAP4BEgE6AWgBoAHYAgYCPgJ4AsAC6gL2AxgDWgOEA7ID7AQmBEQEgASuBNoE+AUyBV4FjgWmBdAF5gYeBiwGNgZUBnIGggaQBqYAAQAAAC0AjAAMAGYABwABAAAAAAAAAAAAAAAAAAQAA3icnJTbThtXFIY/B9tterqoUERu0L5MpWRMoxAl4cqUoIyKcOpxepCqSoM9PojxzMgzmJIn6HXfom+Rqz5Gn6LqdbV/L4MdRUEgBPx79jr8a61/bWCT/9igVr8L/N2cG66x3fzZ8B2+aB4Z3mC/+ZnhOg8b/xhuMGi8NdzkQaNr+BPe1f80/ClP6r8ZvstW/dDw5zyubxr+csPxr+GveMK7Ba7BM/4wXGOLwvAdNvnV8Ab3sJi1OvfYMdzga7YNN9kGekyoSJmQMcIxZMKIM2YklEQkzJgwJGGAI6RNSqWvGbGQY/TBrzERFTNiRRxT4UiJSIkpGVvEt/LKea2MQ51mdtemYkzMiTxOiclw5IzIyUg4VZyKioIXtGhR0hffgoqSgJIJKQE5M0a06HDIET3GTChxHCqSZxaRM6TinFj5nVn4zvRJyCiN1RkZA/F04pfIO+QIR4dCtquRj9YiPMTxo7w9t1y23xLo160wW8+7ZBMzVz9TdSXVzbkmONatz9vmB+GKF7hb9WedyfU9Guh/pcgnnGn+A00qE5MM57ZoE0lBkbuPY1/nkEgd+YmQHq/o8Iaezm26dGlzTI+Ql/Lt0MXxHR2OOZBHKLy4O5RijvkFx/eEsvGxE+vPYmIJv1OYuktxnKmOKYV67pkHqjVRhTefsN+hfE0dpXz62iNv6TS/THsWMzJVFGI4VS+X2iitfwNTxFS1+Nle3fttmNvuLbf4glw77NW64OQnt2B03VSD9zRzrp+AmAE5J7LokzOlRcWFeL8m5owUx4G690pbUtG+9PF5LqSShKkYhGSKM6PQ39h0Exn3/prunb0lA/l7pqeXVd0mi1Ovrmb0Rt1b3kXW5WRlAi2bar6ipr64Zqb9RDu1yj+Sb6nXLecRoeIudvtDr8AOz9llj7Gy9HUzv7zzr4S32FMHTklkNZSmfQ2PCdgl4Cm77PKcp+/1csnGGR+3xmc1f5sD9umwd201C9sO+7xci/bxzH+J7Y7qcTy6PD279TQf3EC132jfrt7NribnpzG3aFfbcUzM1HNxW6s1ufsE/wMAAP//AQAA//9yoVFAAAAAAwAA//UAAP/OADIAAAAAAAAAAAAAAAAAAAAAAAAAAA==");
22
+ }]]></style><style type="text/css"><![CDATA[.shape {
23
+ shape-rendering: geometricPrecision;
24
+ stroke-linejoin: round;
25
+ }
26
+ .connection {
27
+ stroke-linecap: round;
28
+ stroke-linejoin: round;
29
+ }
30
+ .blend {
31
+ mix-blend-mode: multiply;
32
+ opacity: 0.5;
33
+ }
34
+
35
+ .d2-1418488350 .fill-N1{fill:#0A0F25;}
36
+ .d2-1418488350 .fill-N2{fill:#676C7E;}
37
+ .d2-1418488350 .fill-N3{fill:#9499AB;}
38
+ .d2-1418488350 .fill-N4{fill:#CFD2DD;}
39
+ .d2-1418488350 .fill-N5{fill:#DEE1EB;}
40
+ .d2-1418488350 .fill-N6{fill:#EEF1F8;}
41
+ .d2-1418488350 .fill-N7{fill:#FFFFFF;}
42
+ .d2-1418488350 .fill-B1{fill:#0D32B2;}
43
+ .d2-1418488350 .fill-B2{fill:#0D32B2;}
44
+ .d2-1418488350 .fill-B3{fill:#E3E9FD;}
45
+ .d2-1418488350 .fill-B4{fill:#E3E9FD;}
46
+ .d2-1418488350 .fill-B5{fill:#EDF0FD;}
47
+ .d2-1418488350 .fill-B6{fill:#F7F8FE;}
48
+ .d2-1418488350 .fill-AA2{fill:#4A6FF3;}
49
+ .d2-1418488350 .fill-AA4{fill:#EDF0FD;}
50
+ .d2-1418488350 .fill-AA5{fill:#F7F8FE;}
51
+ .d2-1418488350 .fill-AB4{fill:#EDF0FD;}
52
+ .d2-1418488350 .fill-AB5{fill:#F7F8FE;}
53
+ .d2-1418488350 .stroke-N1{stroke:#0A0F25;}
54
+ .d2-1418488350 .stroke-N2{stroke:#676C7E;}
55
+ .d2-1418488350 .stroke-N3{stroke:#9499AB;}
56
+ .d2-1418488350 .stroke-N4{stroke:#CFD2DD;}
57
+ .d2-1418488350 .stroke-N5{stroke:#DEE1EB;}
58
+ .d2-1418488350 .stroke-N6{stroke:#EEF1F8;}
59
+ .d2-1418488350 .stroke-N7{stroke:#FFFFFF;}
60
+ .d2-1418488350 .stroke-B1{stroke:#0D32B2;}
61
+ .d2-1418488350 .stroke-B2{stroke:#0D32B2;}
62
+ .d2-1418488350 .stroke-B3{stroke:#E3E9FD;}
63
+ .d2-1418488350 .stroke-B4{stroke:#E3E9FD;}
64
+ .d2-1418488350 .stroke-B5{stroke:#EDF0FD;}
65
+ .d2-1418488350 .stroke-B6{stroke:#F7F8FE;}
66
+ .d2-1418488350 .stroke-AA2{stroke:#4A6FF3;}
67
+ .d2-1418488350 .stroke-AA4{stroke:#EDF0FD;}
68
+ .d2-1418488350 .stroke-AA5{stroke:#F7F8FE;}
69
+ .d2-1418488350 .stroke-AB4{stroke:#EDF0FD;}
70
+ .d2-1418488350 .stroke-AB5{stroke:#F7F8FE;}
71
+ .d2-1418488350 .background-color-N1{background-color:#0A0F25;}
72
+ .d2-1418488350 .background-color-N2{background-color:#676C7E;}
73
+ .d2-1418488350 .background-color-N3{background-color:#9499AB;}
74
+ .d2-1418488350 .background-color-N4{background-color:#CFD2DD;}
75
+ .d2-1418488350 .background-color-N5{background-color:#DEE1EB;}
76
+ .d2-1418488350 .background-color-N6{background-color:#EEF1F8;}
77
+ .d2-1418488350 .background-color-N7{background-color:#FFFFFF;}
78
+ .d2-1418488350 .background-color-B1{background-color:#0D32B2;}
79
+ .d2-1418488350 .background-color-B2{background-color:#0D32B2;}
80
+ .d2-1418488350 .background-color-B3{background-color:#E3E9FD;}
81
+ .d2-1418488350 .background-color-B4{background-color:#E3E9FD;}
82
+ .d2-1418488350 .background-color-B5{background-color:#EDF0FD;}
83
+ .d2-1418488350 .background-color-B6{background-color:#F7F8FE;}
84
+ .d2-1418488350 .background-color-AA2{background-color:#4A6FF3;}
85
+ .d2-1418488350 .background-color-AA4{background-color:#EDF0FD;}
86
+ .d2-1418488350 .background-color-AA5{background-color:#F7F8FE;}
87
+ .d2-1418488350 .background-color-AB4{background-color:#EDF0FD;}
88
+ .d2-1418488350 .background-color-AB5{background-color:#F7F8FE;}
89
+ .d2-1418488350 .color-N1{color:#0A0F25;}
90
+ .d2-1418488350 .color-N2{color:#676C7E;}
91
+ .d2-1418488350 .color-N3{color:#9499AB;}
92
+ .d2-1418488350 .color-N4{color:#CFD2DD;}
93
+ .d2-1418488350 .color-N5{color:#DEE1EB;}
94
+ .d2-1418488350 .color-N6{color:#EEF1F8;}
95
+ .d2-1418488350 .color-N7{color:#FFFFFF;}
96
+ .d2-1418488350 .color-B1{color:#0D32B2;}
97
+ .d2-1418488350 .color-B2{color:#0D32B2;}
98
+ .d2-1418488350 .color-B3{color:#E3E9FD;}
99
+ .d2-1418488350 .color-B4{color:#E3E9FD;}
100
+ .d2-1418488350 .color-B5{color:#EDF0FD;}
101
+ .d2-1418488350 .color-B6{color:#F7F8FE;}
102
+ .d2-1418488350 .color-AA2{color:#4A6FF3;}
103
+ .d2-1418488350 .color-AA4{color:#EDF0FD;}
104
+ .d2-1418488350 .color-AA5{color:#F7F8FE;}
105
+ .d2-1418488350 .color-AB4{color:#EDF0FD;}
106
+ .d2-1418488350 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1418488350);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-1418488350);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1418488350);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1418488350);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1418488350);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1418488350);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1418488350);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1418488350);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="cmVx endpoint"><g class="shape" ><ellipse rx="147.500000" ry="49.000000" cx="200.500000" cy="61.000000" stroke="#374151" fill="#f3f4f6" class="shape" style="stroke-width:2;" /></g><text x="200.500000" y="66.500000" fill="#374151" class="text-bold" style="text-anchor:middle;font-size:16px">Design-to-code request</text></g><g class="Y2hlY2s= decision"><g class="shape" ><path d="M 200 304 C 199 304 199 304 198 304 L 111 243 C 110 242 110 241 111 241 L 198 180 C 199 179 200 179 201 180 L 289 240 C 290 241 290 242 289 242 L 202 304 C 201 304 201 304 200 304 Z" stroke="#92400e" fill="#fef3c7" style="stroke-width:2;" /></g><text x="200.000000" y="239.500000" fill="#92400e" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="200.000000" dy="0.000000">Existing</tspan><tspan x="200.000000" dy="18.500000">contracts?</tspan></text></g><g class="Y2xlYW4= subagent"><g class="shape" ><rect x="12.000000" y="475.000000" width="149.000000" height="82.000000" rx="6.000000" stroke="#6b21a8" fill="#f3e8ff" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="86.500000" y="513.500000" fill="#6b21a8" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="86.500000" dy="0.000000">clean UI assets</tspan><tspan x="86.500000" dy="18.500000">(inline)</tspan></text></g><g class="ZGQ= cmd"><g class="shape" ><rect x="31.000000" y="637.000000" width="225.000000" height="66.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="143.500000" y="675.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px">/gsd-t-design-decompose</text></g><g class="Y29udHJhY3Rz artifact"><g class="shape" ><path d="M 28 797 C 28 773 132 773 144 773 C 155 773 259 773 259 797 V 899 C 259 923 155 923 144 923 C 132 923 28 923 28 899 V 797 Z" stroke="#854d0e" fill="#fefce8" style="stroke-width:1;" /><path d="M 28 797 C 28 821 132 821 144 821 C 155 821 259 821 259 797" stroke="#854d0e" fill="#fefce8" style="stroke-width:1;" /></g><text x="143.500000" y="849.500000" fill="#713f12" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="143.500000" dy="0.000000">.gsd-t/contracts/design/</tspan><tspan x="143.500000" dy="17.666667">elements · widgets · pages</tspan><tspan x="143.500000" dy="17.666667">INDEX.md</tspan></text></g><g class="ZGI= cmd"><g class="shape" ><rect x="124.000000" y="1003.000000" width="191.000000" height="82.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="219.500000" y="1041.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="219.500000" dy="0.000000">/gsd-t-design-build</tspan><tspan x="219.500000" dy="18.500000">two-terminal review</tspan></text></g><g class="cmV2aWV3 group"><g class="shape" ><rect x="56.000000" y="1170.000000" width="293.000000" height="425.000000" stroke="#9ca3af" fill="#fafafa" style="stroke-width:1;stroke-dasharray:2.000000,2.000000;" /></g><text x="202.500000" y="1203.000000" fill="#374151" class="text" style="text-anchor:middle;font-size:28px">Review loop</text></g><g class="c2hpcA== decision"><g class="shape" ><path d="M 115 1874 C 114 1874 114 1874 114 1874 L 40 1813 C 39 1812 39 1811 40 1811 L 114 1750 C 115 1749 116 1749 117 1750 L 191 1810 C 192 1811 192 1812 191 1812 L 116 1874 C 116 1874 116 1874 115 1874 Z" stroke="#92400e" fill="#fef3c7" style="stroke-width:2;" /></g><text x="115.000000" y="1809.500000" fill="#92400e" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="115.000000" dy="0.000000">All gates</tspan><tspan x="115.000000" dy="18.500000">pass?</tspan></text></g><g class="ZG9uZQ== endpoint"><g class="shape" ><ellipse rx="83.000000" ry="27.500000" cx="115.000000" cy="2062.500000" stroke="#374151" fill="#f3f4f6" class="shape" style="stroke-width:2;" /></g><text x="115.000000" y="2068.000000" fill="#374151" class="text-bold" style="text-anchor:middle;font-size:16px">UI shipped</text></g><g class="ZGE= cmd"><g class="shape" ><rect x="24.000000" y="2251.000000" width="182.000000" height="82.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="115.000000" y="2289.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="115.000000" dy="0.000000">/gsd-t-design-audit</tspan><tspan x="115.000000" dy="18.500000">built vs Figma</tspan></text></g><g class="cmV2aWV3LnQx cmd"><g class="shape" ><rect x="154.000000" y="1220.000000" width="97.000000" height="82.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="202.500000" y="1258.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="202.500000" dy="0.000000">Term 1</tspan><tspan x="202.500000" dy="18.500000">builder</tspan></text></g><g class="cmV2aWV3LnQy cmd"><g class="shape" ><rect x="106.000000" y="1463.000000" width="193.000000" height="82.000000" rx="6.000000" stroke="#1e3a8a" fill="#dbeafe" style="stroke-width:2;" /></g><text x="202.500000" y="1501.500000" fill="#1e3a8a" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="202.500000" dy="0.000000">/gsd-t-design-review</tspan><tspan x="202.500000" dy="18.500000">Term 2 reviewer</tspan></text></g><g class="cmV2aWV3Lih0MSAmbHQ7LSZndDsgdDIpWzBd"><marker id="mk-d2-1418488350-2451250203" markerWidth="10.000000" markerHeight="12.000000" refX="3.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="10.000000,0.000000 0.000000,6.000000 10.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><marker id="mk-d2-1418488350-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 203.332993 1306.000000 L 203.332993 1459.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-start="url(#mk-d2-1418488350-2451250203)" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /><text x="203.000000" y="1388.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">review</text></g><g class="KHJlcSAtJmd0OyBjaGVjaylbMF0="><path d="M 201.000000 112.000000 L 201.000000 175.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KGNoZWNrIC0mZ3Q7IGNsZWFuKVswXQ=="><path d="M 155.992857 275.999987 L 155.785714 334.000064 S 155.750000 344.000000 145.750000 344.000000 L 96.500000 344.000000 S 86.500000 344.000000 86.500000 354.000000 L 86.500000 471.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /><text x="91.000000" y="350.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">start over</text></g><g class="KGNoZWNrIC0mZ3Q7IGRkKVswXQ=="><path d="M 201.000000 306.000000 L 201.000000 633.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /><text x="201.000000" y="476.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">none</text></g><g class="KGNoZWNrIC0mZ3Q7IGRiKVswXQ=="><path d="M 245.992958 274.999988 L 245.785211 334.000062 S 245.750000 344.000000 255.750000 344.000000 L 289.250000 344.000000 S 299.250000 344.000000 299.250000 354.000000 L 299.250000 999.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /><text x="299.000000" y="617.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">present</text></g><g class="KGNsZWFuIC0mZ3Q7IGRkKVswXQ=="><path d="M 106.250000 559.000000 L 106.250000 633.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KGRkIC0mZ3Q7IGNvbnRyYWN0cylbMF0="><path d="M 143.757143 704.999987 L 143.987500 769.500022" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KGNvbnRyYWN0cyAtJmd0OyBkYilbMF0="><path d="M 187.993815 923.499987 L 187.682494 999.000034" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KGRiIC0mZ3Q7IHJldmlldy50MSlbMF0="><path d="M 219.500000 1087.000000 L 219.500000 1216.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KHJldmlldy50MiAtJmd0OyBzaGlwKVswXQ=="><path d="M 140.668983 1546.999998 L 140.994036 1765.000004" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /></g><g class="KHNoaXAgLSZndDsgcmV2aWV3LnQxKVswXQ=="><marker id="mk-d2-1418488350-2177206569" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B2" stroke-width="2" /> </marker><path d="M 90.000000 1768.000000 L 90.000000 1720.000000 S 90.000000 1710.000000 80.000000 1710.000000 L 37.333000 1710.000000 S 27.333000 1710.000000 27.333000 1700.000000 L 27.333000 1135.000000 S 27.333000 1125.000000 37.333000 1125.000000 L 177.166000 1125.000000 S 187.166000 1125.000000 187.166000 1135.000000 L 187.166000 1216.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-1418488350-2177206569)" mask="url(#d2-1418488350)" /><text x="27.500000" y="1357.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">no</text></g><g class="KHNoaXAgLSZndDsgZG9uZSlbMF0="><path d="M 115.000000 1876.000000 L 115.000000 2031.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1418488350-3488378134)" mask="url(#d2-1418488350)" /><text x="115.500000" y="1960.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">yes</text></g><g class="KGRvbmUgLSZndDsgZGEpWzBd"><path d="M 115.000000 2092.000000 L 115.000000 2247.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-1418488350-2177206569)" mask="url(#d2-1418488350)" /><text x="115.000000" y="2176.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">optional</text></g><mask id="d2-1418488350" maskUnits="userSpaceOnUse" x="-29" y="-29" width="419" height="2403">
107
+ <rect x="-29" y="-29" width="419" height="2403" fill="white"></rect>
108
+ <rect x="179.000000" y="1372.000000" width="48" height="21" fill="black"></rect>
109
+ <rect x="56.000000" y="334.000000" width="70" height="21" fill="black"></rect>
110
+ <rect x="182.000000" y="460.000000" width="38" height="21" fill="black"></rect>
111
+ <rect x="271.000000" y="601.000000" width="56" height="21" fill="black"></rect>
112
+ <rect x="17.000000" y="1341.000000" width="21" height="21" fill="black"></rect>
113
+ <rect x="102.000000" y="1944.000000" width="27" height="21" fill="black"></rect>
114
+ <rect x="85.000000" y="2160.000000" width="60" height="21" fill="black"></rect>
115
+ </mask></svg></svg>
Binary file
@@ -0,0 +1,40 @@
1
+ ...@_theme.d2
2
+
3
+
4
+ direction: right
5
+
6
+ idea: User has idea { class: endpoint }
7
+ badd: "/gsd-t-backlog-add" { class: cmd }
8
+ bl: ".gsd-t/backlog.md" { class: artifact }
9
+
10
+ ops: {
11
+ class: group
12
+ label: Manage
13
+ view: "/gsd-t-backlog-list" { class: cmd }
14
+ edit: "/gsd-t-backlog-edit" { class: cmd }
15
+ move: "/gsd-t-backlog-move" { class: cmd }
16
+ rm: "/gsd-t-backlog-remove" { class: cmd }
17
+ }
18
+
19
+ promo: "/gsd-t-backlog-promote" { class: cmd; style.bold: true }
20
+ classify: Classify { class: decision }
21
+
22
+ mile: "/gsd-t-milestone" { class: cmd }
23
+ quick: "/gsd-t-quick" { class: cmd }
24
+ debug: "/gsd-t-debug" { class: cmd }
25
+ feat: "/gsd-t-feature" { class: cmd }
26
+
27
+ settings: "/gsd-t-backlog-settings" { class: cmd }
28
+
29
+ idea -> badd -> bl
30
+ bl -> ops.view
31
+ bl -> ops.edit
32
+ bl -> ops.move
33
+ bl -> ops.rm
34
+ bl -> promo
35
+ promo -> classify
36
+ classify -> mile: big
37
+ classify -> quick: small
38
+ classify -> debug: bug
39
+ classify -> feat: feature
40
+ settings -> badd: configures { style.stroke-dash: 3 }
@@ -0,0 +1,20 @@
1
+ flowchart LR
2
+ IDEA([User has idea]) --> BADD["/gsd-t-backlog-add"]
3
+ BADD --> BL[".gsd-t/backlog.md"]
4
+
5
+ BL --> VIEW["/gsd-t-backlog-list<br/>filtered view"]
6
+ BL --> EDIT["/gsd-t-backlog-edit"]
7
+ BL --> MOVE["/gsd-t-backlog-move<br/>reorder priority"]
8
+ BL --> RM["/gsd-t-backlog-remove"]
9
+ BL --> PROMO["/gsd-t-backlog-promote"]
10
+
11
+ PROMO --> ROUTE{Classify}
12
+ ROUTE -->|big| MILE["/gsd-t-milestone"]
13
+ ROUTE -->|small| QUICK["/gsd-t-quick"]
14
+ ROUTE -->|bug| DEBUG["/gsd-t-debug"]
15
+ ROUTE -->|feature| FEAT["/gsd-t-feature"]
16
+
17
+ SETTINGS["/gsd-t-backlog-settings"] -.configures.-> BADD
18
+
19
+ classDef backlog fill:#fff3e0,stroke:#ef6c00
20
+ class BADD,VIEW,EDIT,MOVE,RM,PROMO,SETTINGS backlog
Binary file