@hegemonart/get-design-done 1.0.7
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/.claude-plugin/marketplace.json +63 -0
- package/.claude-plugin/plugin.json +54 -0
- package/CHANGELOG.md +221 -0
- package/LICENSE +21 -0
- package/README.md +724 -0
- package/SKILL.md +232 -0
- package/agents/README.md +226 -0
- package/agents/a11y-mapper.md +118 -0
- package/agents/component-taxonomy-mapper.md +88 -0
- package/agents/design-advisor.md +139 -0
- package/agents/design-assumptions-analyzer.md +171 -0
- package/agents/design-auditor.md +383 -0
- package/agents/design-context-builder.md +544 -0
- package/agents/design-context-checker-gate.md +90 -0
- package/agents/design-context-checker.md +260 -0
- package/agents/design-discussant.md +98 -0
- package/agents/design-doc-writer.md +229 -0
- package/agents/design-executor.md +452 -0
- package/agents/design-figma-writer.md +302 -0
- package/agents/design-fixer.md +180 -0
- package/agents/design-integration-checker-gate.md +93 -0
- package/agents/design-integration-checker.md +326 -0
- package/agents/design-pattern-mapper.md +206 -0
- package/agents/design-phase-researcher.md +229 -0
- package/agents/design-plan-checker.md +164 -0
- package/agents/design-planner.md +352 -0
- package/agents/design-reflector.md +175 -0
- package/agents/design-research-synthesizer.md +127 -0
- package/agents/design-verifier-gate.md +97 -0
- package/agents/design-verifier.md +605 -0
- package/agents/gdd-graphify-sync.md +100 -0
- package/agents/gdd-intel-updater.md +88 -0
- package/agents/gdd-learnings-extractor.md +85 -0
- package/agents/motion-mapper.md +103 -0
- package/agents/token-mapper.md +103 -0
- package/agents/visual-hierarchy-mapper.md +95 -0
- package/connections/chromatic.md +247 -0
- package/connections/claude-design.md +190 -0
- package/connections/connections.md +218 -0
- package/connections/figma-writer.md +139 -0
- package/connections/figma.md +146 -0
- package/connections/graphify.md +197 -0
- package/connections/pinterest.md +153 -0
- package/connections/preview.md +173 -0
- package/connections/refero.md +189 -0
- package/connections/storybook.md +280 -0
- package/hooks/budget-enforcer.js +318 -0
- package/hooks/context-exhaustion.js +127 -0
- package/hooks/gdd-read-injection-scanner.js +44 -0
- package/hooks/hooks.json +44 -0
- package/package.json +60 -0
- package/reference/BRANCH-PROTECTION.md +65 -0
- package/reference/DEPRECATIONS.md +41 -0
- package/reference/STATE-TEMPLATE.md +200 -0
- package/reference/accessibility.md +190 -0
- package/reference/anti-patterns.md +336 -0
- package/reference/audit-scoring.md +205 -0
- package/reference/checklists.md +137 -0
- package/reference/config-schema.md +319 -0
- package/reference/debugger-philosophy.md +32 -0
- package/reference/heuristics.md +201 -0
- package/reference/intel-schema.md +266 -0
- package/reference/model-prices.md +37 -0
- package/reference/model-tiers.md +118 -0
- package/reference/motion.md +285 -0
- package/reference/parallelism-rules.md +108 -0
- package/reference/priority-matrix.md +31 -0
- package/reference/project-skills-guide.md +42 -0
- package/reference/review-format.md +107 -0
- package/reference/schemas/config.schema.json +41 -0
- package/reference/schemas/hooks.schema.json +55 -0
- package/reference/schemas/intel.schema.json +191 -0
- package/reference/schemas/marketplace.schema.json +72 -0
- package/reference/schemas/plugin.schema.json +59 -0
- package/reference/shared-preamble.md +82 -0
- package/reference/typography.md +229 -0
- package/scripts/aggregate-agent-metrics.js +144 -0
- package/scripts/apply-branch-protection.sh +75 -0
- package/scripts/bootstrap-manifest.txt +3 -0
- package/scripts/bootstrap.sh +80 -0
- package/scripts/build-intel.cjs +458 -0
- package/scripts/detect-stale-refs.cjs +101 -0
- package/scripts/extract-changelog-section.cjs +57 -0
- package/scripts/release-smoke-test.cjs +169 -0
- package/scripts/rollback-release.sh +42 -0
- package/scripts/run-injection-scanner-ci.cjs +92 -0
- package/scripts/validate-frontmatter.cjs +68 -0
- package/scripts/validate-schemas.cjs +225 -0
- package/scripts/verify-version-sync.cjs +30 -0
- package/skills/add-backlog/SKILL.md +47 -0
- package/skills/analyze-dependencies/SKILL.md +184 -0
- package/skills/apply-reflections/SKILL.md +112 -0
- package/skills/audit/SKILL.md +54 -0
- package/skills/brief/SKILL.md +75 -0
- package/skills/cache-manager/SKILL.md +120 -0
- package/skills/compare/SKILL.md +322 -0
- package/skills/complete-cycle/SKILL.md +33 -0
- package/skills/darkmode/SKILL.md +331 -0
- package/skills/debug/SKILL.md +38 -0
- package/skills/design/SKILL.md +281 -0
- package/skills/discover/SKILL.md +172 -0
- package/skills/discuss/SKILL.md +67 -0
- package/skills/do/SKILL.md +45 -0
- package/skills/explore/SKILL.md +109 -0
- package/skills/extract-learnings/SKILL.md +98 -0
- package/skills/fast/SKILL.md +44 -0
- package/skills/figma-write/SKILL.md +40 -0
- package/skills/graphify/SKILL.md +48 -0
- package/skills/health/SKILL.md +48 -0
- package/skills/help/SKILL.md +76 -0
- package/skills/list-assumptions/SKILL.md +60 -0
- package/skills/map/SKILL.md +112 -0
- package/skills/new-cycle/SKILL.md +35 -0
- package/skills/new-project/SKILL.md +53 -0
- package/skills/next/SKILL.md +42 -0
- package/skills/note/SKILL.md +47 -0
- package/skills/optimize/SKILL.md +120 -0
- package/skills/pause/SKILL.md +41 -0
- package/skills/plan/SKILL.md +251 -0
- package/skills/plant-seed/SKILL.md +47 -0
- package/skills/pr-branch/SKILL.md +31 -0
- package/skills/progress/SKILL.md +60 -0
- package/skills/quick/SKILL.md +43 -0
- package/skills/reapply-patches/SKILL.md +31 -0
- package/skills/reflect/SKILL.md +73 -0
- package/skills/resume/SKILL.md +37 -0
- package/skills/review-backlog/SKILL.md +45 -0
- package/skills/router/SKILL.md +67 -0
- package/skills/scan/SKILL.md +721 -0
- package/skills/settings/SKILL.md +78 -0
- package/skills/ship/SKILL.md +31 -0
- package/skills/sketch/SKILL.md +78 -0
- package/skills/sketch-wrap-up/SKILL.md +88 -0
- package/skills/skill-manifest/SKILL.md +79 -0
- package/skills/spike/SKILL.md +67 -0
- package/skills/spike-wrap-up/SKILL.md +81 -0
- package/skills/stats/SKILL.md +50 -0
- package/skills/style/SKILL.md +193 -0
- package/skills/synthesize/SKILL.md +93 -0
- package/skills/todo/SKILL.md +54 -0
- package/skills/undo/SKILL.md +30 -0
- package/skills/update/SKILL.md +36 -0
- package/skills/verify/SKILL.md +452 -0
- package/skills/warm-cache/SKILL.md +113 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://get-design-done.example/schemas/intel.schema.json",
|
|
4
|
+
"title": ".design/intel/*.json",
|
|
5
|
+
"description": "Shape of intel-store slice files per reference/intel-schema.md. Each slice has a generated timestamp and one array-valued payload key matching the slice name.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"required": ["generated"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"generated": { "type": "string" },
|
|
11
|
+
"git_hash": { "type": "string" },
|
|
12
|
+
"files": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": true,
|
|
17
|
+
"required": ["path", "type"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"path": { "type": "string" },
|
|
20
|
+
"type": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"enum": ["skill", "agent", "reference", "connection", "script", "hook", "config", "test", "other"]
|
|
23
|
+
},
|
|
24
|
+
"mtime": { "type": "string" },
|
|
25
|
+
"size_bytes": { "type": "integer", "minimum": 0 },
|
|
26
|
+
"git_hash": { "type": "string" }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"exports": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"required": ["file", "kind", "name"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"file": { "type": "string" },
|
|
38
|
+
"kind": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"enum": ["skill", "agent", "reference", "other"]
|
|
41
|
+
},
|
|
42
|
+
"name": { "type": "string" },
|
|
43
|
+
"command": { "type": "string" }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"symbols": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"additionalProperties": true,
|
|
52
|
+
"required": ["file", "heading"],
|
|
53
|
+
"properties": {
|
|
54
|
+
"file": { "type": "string" },
|
|
55
|
+
"heading": { "type": "string" },
|
|
56
|
+
"level": { "type": "integer", "minimum": 1, "maximum": 6 },
|
|
57
|
+
"anchor": { "type": "string" },
|
|
58
|
+
"line": { "type": "integer", "minimum": 1 }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"tokens": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": true,
|
|
67
|
+
"required": ["file", "token"],
|
|
68
|
+
"properties": {
|
|
69
|
+
"file": { "type": "string" },
|
|
70
|
+
"token": { "type": "string" },
|
|
71
|
+
"category": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"enum": ["color", "spacing", "typography", "radius", "shadow", "motion", "other"]
|
|
74
|
+
},
|
|
75
|
+
"line": { "type": "integer", "minimum": 1 },
|
|
76
|
+
"context": { "type": "string" }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"components": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": true,
|
|
85
|
+
"required": ["file", "component"],
|
|
86
|
+
"properties": {
|
|
87
|
+
"file": { "type": "string" },
|
|
88
|
+
"component": { "type": "string" },
|
|
89
|
+
"role": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"enum": ["definition", "reference", "example"]
|
|
92
|
+
},
|
|
93
|
+
"line": { "type": "integer", "minimum": 1 }
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"patterns": {
|
|
98
|
+
"type": "array",
|
|
99
|
+
"items": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"additionalProperties": true,
|
|
102
|
+
"required": ["name"],
|
|
103
|
+
"properties": {
|
|
104
|
+
"name": { "type": "string" },
|
|
105
|
+
"category": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"enum": ["color-system", "spacing-system", "typography-system", "component-styling", "layout", "interaction", "other"]
|
|
108
|
+
},
|
|
109
|
+
"source_file": { "type": "string" },
|
|
110
|
+
"description": { "type": "string" }
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"dependencies": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"items": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"additionalProperties": true,
|
|
119
|
+
"required": ["from", "to"],
|
|
120
|
+
"properties": {
|
|
121
|
+
"from": { "type": "string" },
|
|
122
|
+
"to": { "type": "string" },
|
|
123
|
+
"kind": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"enum": ["at-reference", "reads-from", "skill-calls-agent", "agent-calls-agent"]
|
|
126
|
+
},
|
|
127
|
+
"line": { "type": "integer", "minimum": 1 }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"decisions": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"items": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"additionalProperties": true,
|
|
136
|
+
"required": ["id", "summary"],
|
|
137
|
+
"properties": {
|
|
138
|
+
"id": { "type": "string" },
|
|
139
|
+
"summary": { "type": "string" },
|
|
140
|
+
"source_file": { "type": "string" },
|
|
141
|
+
"line": { "type": "integer", "minimum": 1 },
|
|
142
|
+
"date": { "type": "string" }
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"debt": {
|
|
147
|
+
"type": "array",
|
|
148
|
+
"items": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"additionalProperties": true,
|
|
151
|
+
"required": ["id", "summary"],
|
|
152
|
+
"properties": {
|
|
153
|
+
"id": { "type": "string" },
|
|
154
|
+
"summary": { "type": "string" },
|
|
155
|
+
"severity": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"enum": ["high", "medium", "low"]
|
|
158
|
+
},
|
|
159
|
+
"source_file": { "type": "string" },
|
|
160
|
+
"line": { "type": "integer", "minimum": 1 }
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"nodes": {
|
|
165
|
+
"type": "array",
|
|
166
|
+
"items": {
|
|
167
|
+
"type": "object",
|
|
168
|
+
"additionalProperties": true,
|
|
169
|
+
"required": ["id"],
|
|
170
|
+
"properties": {
|
|
171
|
+
"id": { "type": "string" },
|
|
172
|
+
"type": { "type": "string" },
|
|
173
|
+
"name": { "type": "string" }
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"edges": {
|
|
178
|
+
"type": "array",
|
|
179
|
+
"items": {
|
|
180
|
+
"type": "object",
|
|
181
|
+
"additionalProperties": true,
|
|
182
|
+
"required": ["from", "to"],
|
|
183
|
+
"properties": {
|
|
184
|
+
"from": { "type": "string" },
|
|
185
|
+
"to": { "type": "string" },
|
|
186
|
+
"kind": { "type": "string" }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://get-design-done.example/schemas/marketplace.schema.json",
|
|
4
|
+
"title": "Claude marketplace.json",
|
|
5
|
+
"description": "Shape of .claude-plugin/marketplace.json — the plugin marketplace descriptor.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"required": ["name", "owner", "metadata", "plugins"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"minLength": 1
|
|
13
|
+
},
|
|
14
|
+
"owner": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": true,
|
|
17
|
+
"required": ["name"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"name": { "type": "string", "minLength": 1 }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"metadata": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": true,
|
|
25
|
+
"required": ["description", "version"],
|
|
26
|
+
"properties": {
|
|
27
|
+
"description": { "type": "string", "minLength": 1 },
|
|
28
|
+
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" }
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"plugins": {
|
|
32
|
+
"type": "array",
|
|
33
|
+
"items": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": true,
|
|
36
|
+
"required": [
|
|
37
|
+
"name",
|
|
38
|
+
"source",
|
|
39
|
+
"description",
|
|
40
|
+
"version",
|
|
41
|
+
"author",
|
|
42
|
+
"repository",
|
|
43
|
+
"license",
|
|
44
|
+
"category",
|
|
45
|
+
"keywords"
|
|
46
|
+
],
|
|
47
|
+
"properties": {
|
|
48
|
+
"name": { "type": "string", "minLength": 1 },
|
|
49
|
+
"source": { "type": "string", "minLength": 1 },
|
|
50
|
+
"description": { "type": "string", "minLength": 1 },
|
|
51
|
+
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" },
|
|
52
|
+
"author": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": true,
|
|
55
|
+
"required": ["name"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"name": { "type": "string", "minLength": 1 }
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"homepage": { "type": "string" },
|
|
61
|
+
"repository": { "type": "string" },
|
|
62
|
+
"license": { "type": "string" },
|
|
63
|
+
"category": { "type": "string" },
|
|
64
|
+
"keywords": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": { "type": "string" }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://get-design-done.example/schemas/plugin.schema.json",
|
|
4
|
+
"title": "Claude plugin.json",
|
|
5
|
+
"description": "Shape of .claude-plugin/plugin.json — the plugin manifest consumed by Claude Code.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"required": [
|
|
9
|
+
"name",
|
|
10
|
+
"short_name",
|
|
11
|
+
"version",
|
|
12
|
+
"description",
|
|
13
|
+
"author",
|
|
14
|
+
"repository",
|
|
15
|
+
"license",
|
|
16
|
+
"keywords",
|
|
17
|
+
"skills",
|
|
18
|
+
"hooks"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"name": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"minLength": 1
|
|
24
|
+
},
|
|
25
|
+
"short_name": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"minLength": 1
|
|
28
|
+
},
|
|
29
|
+
"version": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
32
|
+
},
|
|
33
|
+
"description": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1
|
|
36
|
+
},
|
|
37
|
+
"author": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"additionalProperties": true,
|
|
40
|
+
"required": ["name"],
|
|
41
|
+
"properties": {
|
|
42
|
+
"name": { "type": "string", "minLength": 1 },
|
|
43
|
+
"url": { "type": "string" }
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"homepage": { "type": "string" },
|
|
47
|
+
"repository": { "type": "string" },
|
|
48
|
+
"license": { "type": "string" },
|
|
49
|
+
"keywords": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "type": "string" }
|
|
52
|
+
},
|
|
53
|
+
"skills": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": { "type": "string" }
|
|
56
|
+
},
|
|
57
|
+
"hooks": { "type": "string" }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# GSD Agent Shared Preamble
|
|
2
|
+
|
|
3
|
+
> **This file is imported via `@reference/shared-preamble.md` as the first line of every agent body in `agents/*.md`. Its placement is load-bearing for Anthropic's 5-minute prompt cache (see `reference/model-tiers.md` and phase 10.1 decision D-08 Layer A): because every agent opens with the identical preamble prefix, the second and subsequent agent spawns in a session pay `cached_input_per_1m` rates rather than full `input_per_1m` rates for these bytes. Do not inline this content into agent bodies — always import.**
|
|
4
|
+
|
|
5
|
+
## Framework Identity
|
|
6
|
+
|
|
7
|
+
You are a GSD agent operating under the `get-design-done` plugin contract (see `agents/README.md` for the full authoring contract). You are spawned by a pipeline stage (or by another agent) via the Claude Code `Task` tool with a fully self-contained prompt. You have **zero session memory** — everything you need is in the prompt string and the files listed inside its `<required_reading>` block.
|
|
8
|
+
|
|
9
|
+
You are one step in a pipeline. You do not own the pipeline. The orchestrator decides what runs next based on your output.
|
|
10
|
+
|
|
11
|
+
## Required Reading Discipline
|
|
12
|
+
|
|
13
|
+
When the orchestrator's prompt contains a `<required_reading>` block, you MUST read every file it lists with the `Read` tool before taking any other action. Paths prefixed with `@` are file paths — pass them directly to `Read`. Skipping required reading is a hard violation: you will produce stale output that the downstream verifier catches, wasting a full spawn cycle.
|
|
14
|
+
|
|
15
|
+
## Writes Protocol
|
|
16
|
+
|
|
17
|
+
Only write files declared in your frontmatter `writes:` list. Agents with `reads-only: true` must never call `Write` or `Edit` on any file. If the task appears to require writing outside your declared scope, stop and return a `<blocker>` in STATE.md rather than expanding your write surface.
|
|
18
|
+
|
|
19
|
+
If your agent runs in a phase that enforces atomic commits (most do), commit only files in your declared `writes:` list. Use the repo commit convention: `docs(phase-N-P): short imperative description` for documentation-class changes, `feat(phase-N-P): ...` for new capability, `fix(phase-N-P): ...` for bug fixes. Phase and plan numbers come from `.design/STATE.md` `phase:` and the invoking plan's frontmatter.
|
|
20
|
+
|
|
21
|
+
## Deviation Handling
|
|
22
|
+
|
|
23
|
+
If an expected file is missing, a required reading entry fails to load, or the prompt references an artifact that contradicts STATE.md, **stop** before taking any destructive action. Return a structured blocker to STATE.md and terminate your response with your completion marker:
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
<blocker>
|
|
27
|
+
type: missing-artifact | stale-state | contract-violation
|
|
28
|
+
detail: <one sentence>
|
|
29
|
+
suggested-fix: <one sentence or leave blank>
|
|
30
|
+
</blocker>
|
|
31
|
+
|
|
32
|
+
## {STAGE} COMPLETE
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Valid completion markers per agent class (from `agents/README.md` §Completion Markers):
|
|
36
|
+
- Research agent → `## RESEARCH COMPLETE`
|
|
37
|
+
- Planning agent → `## PLANNING COMPLETE`
|
|
38
|
+
- Execution agent → `## EXECUTION COMPLETE`
|
|
39
|
+
- Verification agent → `## VERIFICATION COMPLETE`
|
|
40
|
+
- Stage-specific agents → the stage name: `## SCAN COMPLETE`, `## DISCOVER COMPLETE`, `## PLAN COMPLETE`, `## DESIGN COMPLETE`, `## VERIFY COMPLETE`.
|
|
41
|
+
|
|
42
|
+
The orchestrator detects failure by reading STATE.md for a `<blocker>`, not by the absence of a marker. Always emit the marker.
|
|
43
|
+
|
|
44
|
+
## Context-Exhaustion Hook Awareness
|
|
45
|
+
|
|
46
|
+
A PostToolUse hook at `hooks/context-exhaustion.js` watches your tool output for the string `<context-exhaustion>` in your response. If you determine you cannot finish the task in the remaining context, emit:
|
|
47
|
+
|
|
48
|
+
```xml
|
|
49
|
+
<context-exhaustion>
|
|
50
|
+
reason: <one-sentence cause — e.g., "required_reading totals 47KB exceeding remaining context">
|
|
51
|
+
resume-hint: <one-sentence instruction for a resumption spawn>
|
|
52
|
+
</context-exhaustion>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
…before your completion marker. The hook captures this into STATE.md so the orchestrator can re-spawn you with a narrower scope. Do not guess when you're near exhaustion — only emit when a concrete obstacle (file too large to read, required diff too wide) forced the call.
|
|
56
|
+
|
|
57
|
+
## Budget-Enforcer Hook Awareness (Phase 10.1)
|
|
58
|
+
|
|
59
|
+
A PreToolUse hook at `hooks/budget-enforcer.js` intercepts every `Task` spawn (including the one that invoked you). The hook may:
|
|
60
|
+
- **Short-circuit** your spawn with a cached result from `.design/cache-manifest.json` (transparent — you never run).
|
|
61
|
+
- **Downgrade** your tier to Haiku at the 80% per-task cap soft-threshold, silently (`auto_downgrade_on_cap: true` in `.design/budget.json`, D-03).
|
|
62
|
+
- **Hard-block** your spawn at the 100% per-task or per-phase cap with an actionable error (D-02).
|
|
63
|
+
|
|
64
|
+
Implication for you as the agent: **do not assume a specific model tier is live.** Your output must be correct whether you run on Haiku, Sonnet, or Opus. If a task genuinely requires reasoning density beyond Haiku, the `size_budget` + `default-tier` combination should have been set at authoring time so the router routes it correctly — the remedy is a frontmatter update (a Phase 11 reflector proposal), not a mid-run assumption.
|
|
65
|
+
|
|
66
|
+
## Ordering Convention (D-17)
|
|
67
|
+
|
|
68
|
+
Your agent body is structured in this exact order so the cache prefix stays stable:
|
|
69
|
+
|
|
70
|
+
1. **Shared preamble import** — this file, imported at the top via `@reference/shared-preamble.md`. Same bytes across every agent → caches.
|
|
71
|
+
2. **Agent-specific role, tools contract, and output format** — unique to you, the "role" section the orchestrator relies on. Stable across invocations of the same agent → caches per-agent after the first call.
|
|
72
|
+
3. **Dynamic task-specific content** — the `<required_reading>` block, per-invocation inputs, the concrete task description. Different every call → never caches.
|
|
73
|
+
|
|
74
|
+
Do not reorder. Do not inline this preamble. Do not splice dynamic content ahead of your stable role description. Every deviation costs the cache.
|
|
75
|
+
|
|
76
|
+
## Pre-Warming
|
|
77
|
+
|
|
78
|
+
The `/gdd:warm-cache` command (ships in Plan 10.1-02) pre-warms this identical prefix in the Anthropic cache before a design sprint, so the first real agent spawn of the sprint is already a cache hit on the shared-preamble bytes. You do not need to do anything special to participate — just keep the import directive at the top of your body.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
*Imported by: every file under `agents/*.md` (except `agents/README.md`). Maintained as part of Phase 10.1 (OPT-07). Edits to this file affect every agent simultaneously — verify across the full agent suite before committing.*
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Typography — Scale, Pairing, and Hierarchy
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Type Scale Systems
|
|
6
|
+
|
|
7
|
+
### Modular Scale (Recommended)
|
|
8
|
+
|
|
9
|
+
Choose a ratio and base size. Common ratios:
|
|
10
|
+
|
|
11
|
+
| Ratio | Name | Use case |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| 1.067 | Minor Second | Dense UIs, data-heavy dashboards |
|
|
14
|
+
| 1.125 | Major Second | Conservative, corporate |
|
|
15
|
+
| 1.200 | Minor Third | Balanced — most SaaS products |
|
|
16
|
+
| 1.250 | Major Third | Consumer, editorial |
|
|
17
|
+
| 1.333 | Perfect Fourth | Strong hierarchy, marketing |
|
|
18
|
+
| 1.414 | Augmented Fourth | Bold, magazine-style |
|
|
19
|
+
| 1.500 | Perfect Fifth | Very dramatic hierarchy |
|
|
20
|
+
| 1.618 | Golden Ratio | Maximum visual drama |
|
|
21
|
+
|
|
22
|
+
**Standard scale (base 16px, ratio 1.25 — Major Third):**
|
|
23
|
+
|
|
24
|
+
| Token | Size | Use |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `text-xs` | 12px | Captions, badges, timestamps |
|
|
27
|
+
| `text-sm` | 14px | Secondary labels, helper text |
|
|
28
|
+
| `text-base` | 16px | Body text (minimum) |
|
|
29
|
+
| `text-lg` | 18px / 20px | Lead paragraphs, emphasized body |
|
|
30
|
+
| `text-xl` | 20px / 24px | Section headings (h3) |
|
|
31
|
+
| `text-2xl` | 24px / 32px | Page headings (h2) |
|
|
32
|
+
| `text-3xl` | 30px / 40px | Section titles (h1 secondary) |
|
|
33
|
+
| `text-4xl` | 36px / 48px | Hero headings |
|
|
34
|
+
| `text-5xl+` | 48px+ | Display, marketing hero |
|
|
35
|
+
|
|
36
|
+
Never create a scale ad-hoc. Pick one ratio, generate the scale, use only values in the scale.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Line Height
|
|
41
|
+
|
|
42
|
+
| Context | Line height | Notes |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Body text | **1.5 – 1.75** | More generous = more readable |
|
|
45
|
+
| Headings | **1.1 – 1.3** | Tight heading stacks look intentional |
|
|
46
|
+
| Captions / small text | **1.4** | Smaller text needs more breathing room |
|
|
47
|
+
| Code blocks | **1.6 – 1.8** | Line scanning for code |
|
|
48
|
+
| Display / hero | **0.9 – 1.1** | Can go very tight for dramatic effect |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Line Length (Measure)
|
|
53
|
+
|
|
54
|
+
| Context | Characters per line | Notes |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Desktop body | **65 – 75 chars** | Optimal reading comfort |
|
|
57
|
+
| Mobile body | **35 – 55 chars** | Narrower viewport forces shorter |
|
|
58
|
+
| Hero/display | **35 – 55 chars** | Headings should never wrap awkwardly |
|
|
59
|
+
| Data/tables | No limit | Tables have own structure |
|
|
60
|
+
|
|
61
|
+
Enforce with `max-width`: `65ch` for body containers works with any font size.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Font Weight Hierarchy
|
|
66
|
+
|
|
67
|
+
| Role | Weight | Notes |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Display headings | **700 – 900** | Bold commands attention |
|
|
70
|
+
| Page headings | **600 – 700** | Strong but not display-level |
|
|
71
|
+
| Section headings | **500 – 600** | Distinguish from body |
|
|
72
|
+
| Body text | **400** | Regular — no emphasis weight |
|
|
73
|
+
| UI labels | **500** | Slightly heavier than body |
|
|
74
|
+
| Captions | **400** | Regular — size reduces emphasis |
|
|
75
|
+
| Monospace code | **400 – 500** | |
|
|
76
|
+
|
|
77
|
+
**Rule**: Never use `font-weight: 300` (light) on small text. It becomes illegible below 16px.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Proven Font Pairings
|
|
82
|
+
|
|
83
|
+
### For SaaS / Productivity
|
|
84
|
+
- **Plus Jakarta Sans** (headers) + **Plus Jakarta Sans** (body) — single-family, geometric, modern
|
|
85
|
+
- **DM Sans** (headers) + **DM Sans** (body) — clean, contemporary
|
|
86
|
+
- **Outfit** + **Work Sans** — geometric, startup feel
|
|
87
|
+
|
|
88
|
+
### For Consumer / Marketing
|
|
89
|
+
- **Playfair Display** + **Inter** — editorial contrast (serif header, sans body)
|
|
90
|
+
- **Cormorant Garamond** + **Montserrat** — luxury, refined
|
|
91
|
+
- **Syne** + **Manrope** — fashion-forward, editorial
|
|
92
|
+
|
|
93
|
+
### For Finance / Enterprise
|
|
94
|
+
- **IBM Plex Sans** (all) — technical, neutral, reliable
|
|
95
|
+
- **Lexend** + **Source Sans 3** — corporate, trustworthy, accessible
|
|
96
|
+
- **Libre Bodoni** + **Public Sans** — news editorial, authority
|
|
97
|
+
|
|
98
|
+
### For Developer Tools / Technical
|
|
99
|
+
- **JetBrains Mono** (code) + **IBM Plex Sans** (UI) — technical, consistent
|
|
100
|
+
- **Fira Code** + **Fira Sans** — same family, harmonious
|
|
101
|
+
- **Geist Mono** + **Geist** (Vercel) — modern technical
|
|
102
|
+
|
|
103
|
+
### For Bold / Expressive
|
|
104
|
+
- **Bebas Neue** + **Source Sans 3** — display contrast, impactful
|
|
105
|
+
- **Syne** + **Epilogue** — editorial, contemporary
|
|
106
|
+
- **Clash Display** + **Satoshi** — startup bold, premium
|
|
107
|
+
|
|
108
|
+
### For Accessibility-First
|
|
109
|
+
- **Atkinson Hyperlegible** (all) — designed for low-vision readers
|
|
110
|
+
- **Lexend** (all) — designed to improve reading fluency
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Typographic Anti-Patterns
|
|
115
|
+
|
|
116
|
+
**Inter as the default** — Inter is excellent but requires a reason. "I used Inter" is not a typographic decision. If there's no brand reason for Inter specifically, explore the pairing list above.
|
|
117
|
+
|
|
118
|
+
**Space Grotesk without purpose** — frequently used as a "quirky technical" font. Overused.
|
|
119
|
+
|
|
120
|
+
**Mismatched personality** — serif heading on a developer tool, playful font on a medical platform, condensed display on body text.
|
|
121
|
+
|
|
122
|
+
**Too many families** — maximum **2 font families** in a UI. More than that = chaos. (Exceptions: monospace for code is a 3rd that doesn't count.)
|
|
123
|
+
|
|
124
|
+
**Light weights on small text** — `font-weight: 300` below 16px fails contrast and readability.
|
|
125
|
+
|
|
126
|
+
**All caps body text** — reserved for: labels, badges, category markers, short UI labels only. Never for sentences or paragraphs.
|
|
127
|
+
|
|
128
|
+
**Inconsistent tracking** — only use `letter-spacing` intentionally. Positive tracking on uppercase labels is fine. Negative tracking on small body text reduces readability. Random tracking changes across components signal lack of system.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Letter Spacing Rules
|
|
133
|
+
|
|
134
|
+
| Use case | letter-spacing |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Body text | `0` (default) |
|
|
137
|
+
| Uppercase labels / badges | `0.05em – 0.1em` |
|
|
138
|
+
| Display headings | `−0.02em – 0.01em` |
|
|
139
|
+
| Monospace code | `0` or slight positive |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Hierarchy Without Size (Advanced)
|
|
144
|
+
|
|
145
|
+
Strong typographic hierarchy comes from **multiple signals combined**, not just font-size:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
SIZE + WEIGHT + COLOR + FAMILY + SPACING
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Example of weak hierarchy: h2 = 24px regular Inter, h3 = 20px regular Inter, body = 16px regular Inter.
|
|
152
|
+
Example of strong hierarchy: h2 = 32px 700 Playfair Display, h3 = 18px 600 Inter, body = 16px 400 Inter.
|
|
153
|
+
|
|
154
|
+
Test: Can you tell which element is a heading just from the weight/family, without looking at size? If yes, hierarchy is working.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Number Formatting in Data UIs
|
|
159
|
+
|
|
160
|
+
- Use **tabular figures** (`font-variant-numeric: tabular-nums`) for all numbers in tables, dashboards, and metric displays. This aligns decimal points.
|
|
161
|
+
- `JetBrains Mono`, `IBM Plex Mono`, `Roboto Mono` have tabular figures by default.
|
|
162
|
+
- Most modern sans-serifs support it via CSS property even without a separate mono font.
|
|
163
|
+
|
|
164
|
+
```css
|
|
165
|
+
.metric-value,
|
|
166
|
+
.table-number {
|
|
167
|
+
font-variant-numeric: tabular-nums;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Brand Archetype Quick Guide
|
|
174
|
+
|
|
175
|
+
Pick the archetype closest to the project brief; use the recommended pairing
|
|
176
|
+
as a starting point (adjust for specific constraints).
|
|
177
|
+
|
|
178
|
+
| Archetype | Character | Recommended Pairing |
|
|
179
|
+
|-----------|-----------|---------------------|
|
|
180
|
+
| SaaS / productivity | clear, neutral, utilitarian | Inter (UI) + Inter (body) — single family |
|
|
181
|
+
| Consumer / editorial | warm, opinionated, expressive | Fraunces or GT Sectra (display) + Inter (body) |
|
|
182
|
+
| Enterprise / finance | authoritative, conservative | IBM Plex Sans (UI) + IBM Plex Serif (body) |
|
|
183
|
+
| Developer tools | technical, efficient | Geist (UI) + Geist Mono (code) |
|
|
184
|
+
| Bold / expressive | high-energy, distinctive | Söhne or Mona Sans (display) + Inter (body) |
|
|
185
|
+
|
|
186
|
+
**Selection heuristic:** If the brief uses words like "professional", "trustworthy", "clean" → SaaS or Enterprise. If "warm", "editorial", "narrative" → Consumer. If "bold", "energetic", "distinctive" → Bold. If "technical", "efficient", "fast" → Dev tools.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Variable Fonts
|
|
191
|
+
|
|
192
|
+
Variable fonts expose typographic axes that can be animated or set per-context
|
|
193
|
+
via `font-variation-settings`. Prefer variable fonts over static family fallbacks
|
|
194
|
+
when available — one file covers all weights and widths.
|
|
195
|
+
|
|
196
|
+
### Common axes
|
|
197
|
+
|
|
198
|
+
| Axis | Range | Purpose |
|
|
199
|
+
|------|-------|---------|
|
|
200
|
+
| wght | 100–900 | Weight (Thin → Black) |
|
|
201
|
+
| wdth | 50%–150% | Width (Condensed → Extended) |
|
|
202
|
+
| ital | 0 / 1 | Italic toggle (discrete in most) |
|
|
203
|
+
| opsz | font-size value | Optical size (auto-applies when `font-optical-sizing: auto`) |
|
|
204
|
+
|
|
205
|
+
### @font-face format
|
|
206
|
+
|
|
207
|
+
```css
|
|
208
|
+
@font-face {
|
|
209
|
+
font-family: 'InterVariable';
|
|
210
|
+
src: url('/fonts/InterVariable.woff2') format('woff2-variations');
|
|
211
|
+
font-weight: 100 900;
|
|
212
|
+
font-style: normal;
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Usage via font-variation-settings
|
|
217
|
+
|
|
218
|
+
```css
|
|
219
|
+
.heading { font-variation-settings: "wght" 700, "opsz" 32; }
|
|
220
|
+
.body { font-variation-settings: "wght" 400; }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Fallback strategy
|
|
224
|
+
|
|
225
|
+
Always include a non-variable fallback of the same family in the font stack:
|
|
226
|
+
|
|
227
|
+
```css
|
|
228
|
+
font-family: 'InterVariable', 'Inter', -apple-system, system-ui, sans-serif;
|
|
229
|
+
```
|