@mstar-harness/opencode 0.6.20 → 0.6.22
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/harness-skills/mstar-coding-behavior/SKILL.md +51 -4
- package/harness-skills/mstar-design-md/SKILL.md +21 -16
- package/harness-skills/mstar-design-md/references/completeness-checklist.md +40 -34
- package/harness-skills/mstar-design-md/references/design-md-spec.md +227 -97
- package/harness-skills/mstar-design-md/references/vercel-example.md +69 -7
- package/harness-skills/mstar-design-md/templates/DESIGN.dark.md.template +307 -91
- package/harness-skills/mstar-design-md/templates/DESIGN.md.template +347 -151
- package/harness-skills/mstar-dispatch-gates/SKILL.md +20 -8
- package/harness-skills/mstar-dispatch-gates/references/leaf-executor-checklist.md +6 -2
- package/harness-skills/mstar-harness-core/SKILL.md +1 -1
- package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +17 -4
- package/harness-skills/mstar-roles/references/qc-specialist-shared.md +8 -3
- package/package.json +1 -1
|
@@ -1,3 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
name: "[Design System Name]"
|
|
4
|
+
description: "[Design System Name] is a [adjective — e.g., minimal, high-contrast, playful] design system for [project/product name]. This is the Light theme."
|
|
5
|
+
|
|
6
|
+
colors:
|
|
7
|
+
# ── Background surfaces ──
|
|
8
|
+
# Level 1 — primary page/card surface (REQUIRED)
|
|
9
|
+
background-100: "[#ffffff]"
|
|
10
|
+
|
|
11
|
+
# LEVEL2_PLACEHOLDER: secondary surface, active surface — uncomment and fill when upgrading to Level 2
|
|
12
|
+
# background-200: "[#f5f5f5]"
|
|
13
|
+
# background-300: "[#e5e5e5]"
|
|
14
|
+
|
|
15
|
+
# ── Gray (solid — text and opaque fills) ──
|
|
16
|
+
# Level 1 — primary and secondary text (REQUIRED)
|
|
17
|
+
gray-1000: "[#111111]"
|
|
18
|
+
gray-900: "[#666666]"
|
|
19
|
+
|
|
20
|
+
# LEVEL2_PLACEHOLDER: full 10-step gray scale — uncomment and fill values for steps 100–800
|
|
21
|
+
# gray-100: "[#f2f2f2]"
|
|
22
|
+
# gray-200: "[#ebebeb]"
|
|
23
|
+
# gray-300: "[#e6e6e6]"
|
|
24
|
+
# gray-400: "[#eaeaea]"
|
|
25
|
+
# gray-500: "[#c9c9c9]"
|
|
26
|
+
# gray-600: "[#a8a8a8]"
|
|
27
|
+
# gray-700: "[#8f8f8f]"
|
|
28
|
+
# gray-800: "[#7d7d7d]"
|
|
29
|
+
|
|
30
|
+
# LEVEL2_PLACEHOLDER: gray alpha (translucent) scale — uncomment and fill
|
|
31
|
+
# gray-alpha-100: "#0000000d"
|
|
32
|
+
# gray-alpha-200: "#00000015"
|
|
33
|
+
# gray-alpha-300: "#0000001a"
|
|
34
|
+
# gray-alpha-400: "#00000014"
|
|
35
|
+
# gray-alpha-500: "#00000036"
|
|
36
|
+
# gray-alpha-600: "#0000003d"
|
|
37
|
+
# gray-alpha-700: "#00000070"
|
|
38
|
+
# gray-alpha-800: "#00000082"
|
|
39
|
+
# gray-alpha-900: "#000000b3"
|
|
40
|
+
# gray-alpha-1000: "#000000e8"
|
|
41
|
+
|
|
42
|
+
# ── Accent — Blue (links, focus, primary actions) ──
|
|
43
|
+
# Level 1 — at minimum blue-700 for interactive elements (REQUIRED)
|
|
44
|
+
blue-700: "[#0066ff]"
|
|
45
|
+
|
|
46
|
+
# LEVEL2_PLACEHOLDER: full blue scale — uncomment and fill
|
|
47
|
+
# blue-100: "[#f0f7ff]"
|
|
48
|
+
# blue-200: "[#e9f4ff]"
|
|
49
|
+
# blue-300: "[#dfefff]"
|
|
50
|
+
# blue-400: "[#cae7ff]"
|
|
51
|
+
# blue-500: "[#94ccff]"
|
|
52
|
+
# blue-600: "[#48aeff]"
|
|
53
|
+
# blue-700: "[#006bff]"
|
|
54
|
+
# blue-800: "[#0059ec]"
|
|
55
|
+
# blue-900: "[#005ff2]"
|
|
56
|
+
# blue-1000: "[#002359]"
|
|
57
|
+
|
|
58
|
+
# ── Accent — Red (errors, destructive actions) ──
|
|
59
|
+
# Level 1 — at minimum red-700 for errors (REQUIRED)
|
|
60
|
+
red-700: "[#e60000]"
|
|
61
|
+
|
|
62
|
+
# LEVEL2_PLACEHOLDER: full red scale — uncomment and fill
|
|
63
|
+
# red-100: "[#ffeeef]"
|
|
64
|
+
# red-200: "[#ffe8ea]"
|
|
65
|
+
# red-300: "[#ffe3e4]"
|
|
66
|
+
# red-400: "[#ffd7d6]"
|
|
67
|
+
# red-500: "[#ffb1b3]"
|
|
68
|
+
# red-600: "[#ff676d]"
|
|
69
|
+
# red-700: "[#fc0035]"
|
|
70
|
+
# red-800: "[#ea001d]"
|
|
71
|
+
# red-900: "[#d8001b]"
|
|
72
|
+
# red-1000: "[#47000c]"
|
|
73
|
+
|
|
74
|
+
# ── Accent — Amber (warnings) ──
|
|
75
|
+
# Level 1 — at minimum amber-700 for warnings (REQUIRED)
|
|
76
|
+
amber-700: "[#ffaa00]"
|
|
77
|
+
|
|
78
|
+
# LEVEL2_PLACEHOLDER: full amber scale — uncomment and fill
|
|
79
|
+
# amber-100: "[#fff6de]"
|
|
80
|
+
# amber-200: "[#fff4cf]"
|
|
81
|
+
# amber-300: "[#fff1c1]"
|
|
82
|
+
# amber-400: "[#ffdc73]"
|
|
83
|
+
# amber-500: "[#ffc543]"
|
|
84
|
+
# amber-600: "[#ffa600]"
|
|
85
|
+
# amber-700: "[#ffae00]"
|
|
86
|
+
# amber-800: "[#ff9300]"
|
|
87
|
+
# amber-900: "[#aa4d00]"
|
|
88
|
+
# amber-1000: "[#561900]"
|
|
89
|
+
|
|
90
|
+
# LEVEL2_PLACEHOLDER: additional accent scales — uncomment and fill
|
|
91
|
+
# green-100: "[#ecfdec]"
|
|
92
|
+
# green-200: "[#e5fce7]"
|
|
93
|
+
# green-300: "[#d3fad1]"
|
|
94
|
+
# green-400: "[#b9f5bc]"
|
|
95
|
+
# green-500: "[#82eb8d]"
|
|
96
|
+
# green-600: "[#4ce15e]"
|
|
97
|
+
# green-700: "[#28a948]"
|
|
98
|
+
# green-800: "[#279141]"
|
|
99
|
+
# green-900: "[#107d32]"
|
|
100
|
+
# green-1000: "[#003a00]"
|
|
101
|
+
|
|
102
|
+
# teal-100: "[#defffb]"
|
|
103
|
+
# teal-200: "[#ddfef6]"
|
|
104
|
+
# teal-300: "[#ccf9f1]"
|
|
105
|
+
# teal-400: "[#b1f7ec]"
|
|
106
|
+
# teal-500: "[#52f0db]"
|
|
107
|
+
# teal-600: "[#00e3c4]"
|
|
108
|
+
# teal-700: "[#00ac96]"
|
|
109
|
+
# teal-800: "[#00927f]"
|
|
110
|
+
# teal-900: "[#007f70]"
|
|
111
|
+
# teal-1000: "[#003f34]"
|
|
112
|
+
|
|
113
|
+
# purple-100: "[#faf0ff]"
|
|
114
|
+
# purple-200: "[#f9f0ff]"
|
|
115
|
+
# purple-300: "[#f6e8ff]"
|
|
116
|
+
# purple-400: "[#f2d9ff]"
|
|
117
|
+
# purple-500: "[#dfa7ff]"
|
|
118
|
+
# purple-600: "[#c979ff]"
|
|
119
|
+
# purple-700: "[#a000f8]"
|
|
120
|
+
# purple-800: "[#8500d1]"
|
|
121
|
+
# purple-900: "[#7d00cc]"
|
|
122
|
+
# purple-1000: "[#2f004e]"
|
|
123
|
+
|
|
124
|
+
# pink-100: "[#ffe8f6]"
|
|
125
|
+
# pink-200: "[#ffe8f3]"
|
|
126
|
+
# pink-300: "[#ffdfeb]"
|
|
127
|
+
# pink-400: "[#ffd3e1]"
|
|
128
|
+
# pink-500: "[#fdb3cc]"
|
|
129
|
+
# pink-600: "[#f97ea7]"
|
|
130
|
+
# pink-700: "[#f22782]"
|
|
131
|
+
# pink-800: "[#e4106e]"
|
|
132
|
+
# pink-900: "[#c41562]"
|
|
133
|
+
# pink-1000: "[#460523]"
|
|
134
|
+
|
|
135
|
+
# LEVEL3_PLACEHOLDER: wide-gamut P3 equivalents — uncomment and fill for Display P3 screens
|
|
136
|
+
# blue-100-p3: "oklch(…)"
|
|
137
|
+
# blue-200-p3: "oklch(…)"
|
|
138
|
+
# …
|
|
139
|
+
|
|
140
|
+
typography:
|
|
141
|
+
# ── Body text (multi-line, taller line-height) ──
|
|
142
|
+
# Level 1 — at minimum one body token (REQUIRED)
|
|
143
|
+
copy-16:
|
|
144
|
+
fontFamily: "[font-family]"
|
|
145
|
+
fontSize: 16px
|
|
146
|
+
fontWeight: 400
|
|
147
|
+
lineHeight: 1.6
|
|
148
|
+
letterSpacing: 0
|
|
149
|
+
|
|
150
|
+
# LEVEL2_PLACEHOLDER: additional body sizes — uncomment and fill
|
|
151
|
+
# copy-24:
|
|
152
|
+
# fontFamily: "[font-family]"
|
|
153
|
+
# fontSize: 24px
|
|
154
|
+
# fontWeight: 400
|
|
155
|
+
# lineHeight: 36px
|
|
156
|
+
# copy-20:
|
|
157
|
+
# fontFamily: "[font-family]"
|
|
158
|
+
# fontSize: 20px
|
|
159
|
+
# fontWeight: 400
|
|
160
|
+
# lineHeight: 36px
|
|
161
|
+
# copy-14:
|
|
162
|
+
# fontFamily: "[font-family]"
|
|
163
|
+
# fontSize: 14px
|
|
164
|
+
# fontWeight: 400
|
|
165
|
+
# lineHeight: 20px
|
|
166
|
+
|
|
167
|
+
# ── Headings ──
|
|
168
|
+
# Level 1 — at minimum one heading token (REQUIRED)
|
|
169
|
+
heading-32:
|
|
170
|
+
fontFamily: "[font-family]"
|
|
171
|
+
fontSize: 32px
|
|
172
|
+
fontWeight: 600
|
|
173
|
+
lineHeight: 1.2
|
|
174
|
+
letterSpacing: -0.02em
|
|
175
|
+
|
|
176
|
+
# LEVEL2_PLACEHOLDER: full heading scale — uncomment and fill
|
|
177
|
+
# heading-72:
|
|
178
|
+
# fontFamily: "[font-family]"
|
|
179
|
+
# fontSize: 72px
|
|
180
|
+
# fontWeight: 600
|
|
181
|
+
# lineHeight: 72px
|
|
182
|
+
# letterSpacing: -0.04em
|
|
183
|
+
# heading-48:
|
|
184
|
+
# fontFamily: "[font-family]"
|
|
185
|
+
# fontSize: 48px
|
|
186
|
+
# fontWeight: 600
|
|
187
|
+
# lineHeight: 56px
|
|
188
|
+
# letterSpacing: -0.03em
|
|
189
|
+
# heading-24:
|
|
190
|
+
# fontFamily: "[font-family]"
|
|
191
|
+
# fontSize: 24px
|
|
192
|
+
# fontWeight: 600
|
|
193
|
+
# lineHeight: 32px
|
|
194
|
+
# letterSpacing: -0.01em
|
|
195
|
+
# heading-20:
|
|
196
|
+
# fontFamily: "[font-family]"
|
|
197
|
+
# fontSize: 20px
|
|
198
|
+
# fontWeight: 600
|
|
199
|
+
# lineHeight: 26px
|
|
200
|
+
# letterSpacing: -0.005em
|
|
201
|
+
|
|
202
|
+
# LEVEL2_PLACEHOLDER: label typography (single-line, scannable) — uncomment and fill
|
|
203
|
+
# label-14:
|
|
204
|
+
# fontFamily: "[font-family]"
|
|
205
|
+
# fontSize: 14px
|
|
206
|
+
# fontWeight: 400
|
|
207
|
+
# lineHeight: 20px
|
|
208
|
+
|
|
209
|
+
# LEVEL2_PLACEHOLDER: button typography — uncomment and fill
|
|
210
|
+
# button-14:
|
|
211
|
+
# fontFamily: "[font-family]"
|
|
212
|
+
# fontSize: 14px
|
|
213
|
+
# fontWeight: 500
|
|
214
|
+
# lineHeight: 20px
|
|
215
|
+
|
|
216
|
+
spacing:
|
|
217
|
+
base: 4px
|
|
218
|
+
# Level 1 — at minimum 5 scale steps (REQUIRED)
|
|
219
|
+
1: 4px
|
|
220
|
+
2: 8px
|
|
221
|
+
3: 12px
|
|
222
|
+
4: 16px
|
|
223
|
+
6: 24px
|
|
224
|
+
|
|
225
|
+
# LEVEL2_PLACEHOLDER: full 9-step scale — uncomment and fill
|
|
226
|
+
# 8: 32px
|
|
227
|
+
# 10: 40px
|
|
228
|
+
# 16: 64px
|
|
229
|
+
# 24: 96px
|
|
230
|
+
|
|
231
|
+
rounded:
|
|
232
|
+
# Level 1 — at minimum one radius for everyday controls (REQUIRED)
|
|
233
|
+
sm: 6px
|
|
234
|
+
|
|
235
|
+
# LEVEL2_PLACEHOLDER: additional radius tokens — uncomment and fill
|
|
236
|
+
# md: 12px
|
|
237
|
+
# lg: 16px
|
|
238
|
+
# full: 9999px
|
|
239
|
+
|
|
240
|
+
# LEVEL2_PLACEHOLDER: component tokens — uncomment full section when upgrading to Level 2
|
|
241
|
+
# components:
|
|
242
|
+
# button-primary:
|
|
243
|
+
# backgroundColor: "{colors.gray-1000}"
|
|
244
|
+
# textColor: "{colors.background-100}"
|
|
245
|
+
# typography: "{typography.button-14}"
|
|
246
|
+
# rounded: "{rounded.sm}"
|
|
247
|
+
# padding: "0 10px"
|
|
248
|
+
# height: 40px
|
|
249
|
+
# button-secondary:
|
|
250
|
+
# backgroundColor: "{colors.background-100}"
|
|
251
|
+
# textColor: "{colors.gray-1000}"
|
|
252
|
+
# typography: "{typography.button-14}"
|
|
253
|
+
# rounded: "{rounded.sm}"
|
|
254
|
+
# padding: "0 10px"
|
|
255
|
+
# height: 40px
|
|
256
|
+
# button-tertiary:
|
|
257
|
+
# textColor: "{colors.gray-1000}"
|
|
258
|
+
# typography: "{typography.button-14}"
|
|
259
|
+
# rounded: "{rounded.sm}"
|
|
260
|
+
# padding: "0 10px"
|
|
261
|
+
# height: 40px
|
|
262
|
+
# button-error:
|
|
263
|
+
# backgroundColor: "{colors.red-800}"
|
|
264
|
+
# textColor: "#ffffff"
|
|
265
|
+
# typography: "{typography.button-14}"
|
|
266
|
+
# rounded: "{rounded.sm}"
|
|
267
|
+
# padding: "0 10px"
|
|
268
|
+
# height: 40px
|
|
269
|
+
# button-small:
|
|
270
|
+
# typography: "{typography.button-14}"
|
|
271
|
+
# rounded: "{rounded.sm}"
|
|
272
|
+
# padding: "0 6px"
|
|
273
|
+
# height: 32px
|
|
274
|
+
# button-large:
|
|
275
|
+
# typography: "{typography.button-16}"
|
|
276
|
+
# rounded: "{rounded.sm}"
|
|
277
|
+
# padding: "0 14px"
|
|
278
|
+
# height: 48px
|
|
279
|
+
# input:
|
|
280
|
+
# backgroundColor: "{colors.background-100}"
|
|
281
|
+
# textColor: "{colors.gray-1000}"
|
|
282
|
+
# typography: "{typography.label-14}"
|
|
283
|
+
# rounded: "{rounded.sm}"
|
|
284
|
+
# padding: "0 12px"
|
|
285
|
+
# height: 40px
|
|
286
|
+
# input-small:
|
|
287
|
+
# typography: "{typography.label-14}"
|
|
288
|
+
# rounded: "{rounded.sm}"
|
|
289
|
+
# padding: "0 12px"
|
|
290
|
+
# height: 32px
|
|
291
|
+
# input-large:
|
|
292
|
+
# typography: "{typography.label-16}"
|
|
293
|
+
# rounded: "{rounded.sm}"
|
|
294
|
+
# padding: "0 12px"
|
|
295
|
+
# height: 48px
|
|
296
|
+
---
|
|
297
|
+
|
|
1
298
|
<!-- COMPLETENESS_LEVEL: 1 — last audited [DATE] -->
|
|
2
299
|
|
|
3
300
|
# [Design System Name]
|
|
@@ -7,146 +304,59 @@
|
|
|
7
304
|
[Design System Name] is a [adjective, e.g., minimal, playful, bold] design system for [project/product name].
|
|
8
305
|
[Aesthetic principles — one sentence describing the visual identity: e.g., "Prioritize readability and clarity with plenty of whitespace and restrained color."]
|
|
9
306
|
|
|
307
|
+
All concrete token values live in the YAML frontmatter above (colors, typography, spacing, rounded, components). The sections below explain usage rules, design intent, and agent guidance.
|
|
308
|
+
|
|
10
309
|
This is the Light theme.
|
|
11
310
|
<!-- LEVEL2_PLACEHOLDER: When ready for dark theme, create DESIGN.dark.md with same token names and different values. See references/completeness-checklist.md § Level 3. -->
|
|
12
311
|
<!-- Uncomment when dark theme exists: The Dark theme uses the same token names with different values and lives at /DESIGN.dark.md. -->
|
|
13
312
|
|
|
14
313
|
## Colors
|
|
15
314
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<!-- Level 1 — Fill in at least background-100. Level 2 adds background-200 and background-300. -->
|
|
19
|
-
|
|
20
|
-
| Token | Value |
|
|
21
|
-
|-------|-------|
|
|
22
|
-
| background-100 | #[primary page/card surface] |
|
|
23
|
-
|
|
24
|
-
<!-- LEVEL2_PLACEHOLDER: Add background-200 and background-300 for subtle surface separation. See references/completeness-checklist.md § Level 2/Colors. -->
|
|
25
|
-
<!--
|
|
26
|
-
| background-200 | #[secondary surface] |
|
|
27
|
-
| background-300 | #[active surface] |
|
|
28
|
-
-->
|
|
29
|
-
|
|
30
|
-
### Gray (text and fills)
|
|
315
|
+
Token values are defined in the frontmatter `colors:` map. Each non-background scale runs 10 steps (`100`–`1000`), and the step encodes intent, not just lightness:
|
|
31
316
|
|
|
32
|
-
|
|
317
|
+
- `100` default background
|
|
318
|
+
- `200` hover background
|
|
319
|
+
- `300` active background
|
|
320
|
+
- `400` default border
|
|
321
|
+
- `500` hover border
|
|
322
|
+
- `600` active border
|
|
323
|
+
- `700` solid fill, high contrast
|
|
324
|
+
- `800` solid fill, hover
|
|
325
|
+
- `900` secondary text and icons
|
|
326
|
+
- `1000` primary text and icons
|
|
33
327
|
|
|
34
|
-
|
|
35
|
-
|-------|-------|
|
|
36
|
-
| gray-1000 | #[primary text] |
|
|
37
|
-
| gray-900 | #[secondary text] |
|
|
38
|
-
|
|
39
|
-
<!-- LEVEL2_PLACEHOLDER: Complete the full 10-step scale (gray-100 through gray-1000). See references/design-md-spec.md § Colors. -->
|
|
40
|
-
<!--
|
|
41
|
-
| gray-100 | #[lightest fill] |
|
|
42
|
-
| gray-200 | #[hover fill] |
|
|
43
|
-
| gray-300 | #[active fill] |
|
|
44
|
-
| gray-400 | #[border] |
|
|
45
|
-
| gray-500 | #[hover border] |
|
|
46
|
-
| gray-600 | #[active border] |
|
|
47
|
-
| gray-700 | #[solid fill / disabled text] |
|
|
48
|
-
| gray-800 | #[solid hover] |
|
|
49
|
-
| gray-900 | #[secondary text] |
|
|
50
|
-
| gray-1000 | #[primary text] |
|
|
51
|
-
-->
|
|
328
|
+
`background-100` is the primary page and card surface. The `gray-alpha-*` tokens are translucent, so they layer over any background; use them for borders, dividers, overlays, and hover states. Solid `gray-*` holds its contrast on any surface, so use it for text and opaque fills. Accent scales carry meaning: `blue` for links and focus; `red` for errors; `amber` for warnings; plus `green`, `teal`, `purple`, and `pink`.
|
|
52
329
|
|
|
330
|
+
<!-- LEVEL2_PLACEHOLDER: Complete the full 10-step gray scale and add all accent scales to the frontmatter. See references/completeness-checklist.md § Level 2/Colors. -->
|
|
53
331
|
<!-- LEVEL2_PLACEHOLDER: Add gray-alpha scale for translucent borders, overlays, and hover states. See references/design-md-spec.md § Colors. -->
|
|
54
|
-
<!--
|
|
55
|
-
### Gray Alpha (translucent overlays)
|
|
56
|
-
|
|
57
|
-
| Token | Value |
|
|
58
|
-
|-------|-------|
|
|
59
|
-
| gray-alpha-100 | rgba(0, 0, 0, 0.04) |
|
|
60
|
-
| gray-alpha-200 | rgba(0, 0, 0, 0.06) |
|
|
61
|
-
| gray-alpha-300 | rgba(0, 0, 0, 0.08) |
|
|
62
|
-
| gray-alpha-400 | rgba(0, 0, 0, 0.12) |
|
|
63
|
-
| gray-alpha-500 | rgba(0, 0, 0, 0.16) |
|
|
64
|
-
| gray-alpha-600 | rgba(0, 0, 0, 0.24) |
|
|
65
|
-
-->
|
|
66
|
-
|
|
67
|
-
### Accent
|
|
68
|
-
|
|
69
|
-
<!-- Level 1 — Fill in at least one accent (blue or brand color) for links/actions, plus red for errors and amber for warnings. -->
|
|
70
|
-
|
|
71
|
-
| Token | Value | Usage |
|
|
72
|
-
|-------|-------|-------|
|
|
73
|
-
| blue-700 | #[links, focus, primary actions] | Interactive elements |
|
|
74
|
-
| red-700 | #[errors, destructive actions] | Errors, delete buttons |
|
|
75
|
-
| amber-700 | #[warnings, alerts] | Warning states |
|
|
76
|
-
|
|
77
|
-
<!-- LEVEL2_PLACEHOLDER: Complete all accent scales (blue, red, amber, green, teal, purple, pink). Add at minimum 700/800/900/1000 steps per scale. See references/completeness-checklist.md § Level 2/Colors. -->
|
|
78
|
-
<!--
|
|
79
|
-
| green | Success states |
|
|
80
|
-
| teal | Info, secondary brand |
|
|
81
|
-
| purple | Special emphasis |
|
|
82
|
-
| pink | Highlights, badges |
|
|
83
|
-
-->
|
|
332
|
+
<!-- LEVEL3_PLACEHOLDER: Add wide-gamut P3 equivalents (`*-p3`) in oklch() to the frontmatter. -->
|
|
84
333
|
|
|
85
334
|
## Typography
|
|
86
335
|
|
|
87
|
-
|
|
88
|
-
<!-- Token naming: {role}-{size}. Roles: heading, label, copy, button. Size: approximate font size in px. -->
|
|
89
|
-
|
|
90
|
-
### Body text
|
|
336
|
+
Token values are defined in the frontmatter `typography:` map. Token naming: `{role}-{size}` where role is `heading`, `label`, `copy`, or `button` and size is approximate font size in px.
|
|
91
337
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
338
|
+
- **Headings** (`heading-72` through `heading-14`): title pages and sections; `letterSpacing` tightens as the size grows.
|
|
339
|
+
- **Labels** (`label-20` through `label-12`): single-line, scannable text — navigation, form labels, table headers, metadata.
|
|
340
|
+
- **Copy** (`copy-24` through `copy-13`): multi-line body text with a taller `lineHeight`.
|
|
341
|
+
- **Buttons** (`button-16` through `button-12`): medium-weight labels for buttons and compact controls.
|
|
342
|
+
- **Mono tokens** (`-mono` suffix): same metrics with a monospace font for code and data; prefer tabular figures when numbers need to align.
|
|
95
343
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
| Token | Font Family | Size | Weight | Line Height | Letter Spacing |
|
|
99
|
-
|-------|------------|------|--------|-------------|----------------|
|
|
100
|
-
| heading-32 | [font-family] | 32px | 600 | 1.2 | -0.02em |
|
|
101
|
-
|
|
102
|
-
<!-- LEVEL2_PLACEHOLDER: Complete the typography scale. Add at least 3 heading levels, 1 label token, and 1 button typography token. See references/completeness-checklist.md § Level 2/Typography. -->
|
|
103
|
-
<!--
|
|
104
|
-
### Labels (single-line, scannable)
|
|
105
|
-
|
|
106
|
-
| Token | Font Family | Size | Weight | Line Height | Letter Spacing |
|
|
107
|
-
|-------|------------|------|--------|-------------|----------------|
|
|
108
|
-
| label-14 | [font-family] | 14px | 500 | 1.3 | 0 |
|
|
109
|
-
|
|
110
|
-
### Buttons
|
|
111
|
-
|
|
112
|
-
| Token | Font Family | Size | Weight | Line Height | Letter Spacing |
|
|
113
|
-
|-------|------------|------|--------|-------------|----------------|
|
|
114
|
-
| button-14 | [font-family] | 14px | 500 | 1.3 | 0 |
|
|
115
|
-
|
|
116
|
-
### Additional headings
|
|
117
|
-
| heading-24 | [font-family] | 24px | 600 | 1.3 | -0.01em |
|
|
118
|
-
| heading-20 | [font-family] | 20px | 600 | 1.3 | 0 |
|
|
119
|
-
-->
|
|
344
|
+
<!-- LEVEL2_PLACEHOLDER: Complete the typography scale in the frontmatter. Add at least 3 heading levels, 1 label token, and 1 button typography token. See references/completeness-checklist.md § Level 2/Typography. -->
|
|
120
345
|
|
|
121
346
|
## Spacing & Layout
|
|
122
347
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
<!-- Level 1 — Declare base unit and at least 5 scale steps. Base unit is typically 4px or 8px. -->
|
|
348
|
+
Token values are defined in the frontmatter `spacing:` and `rounded:` maps.
|
|
126
349
|
|
|
127
|
-
|
|
350
|
+
### Spacing scale
|
|
128
351
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
| 3x | [base × 3] |
|
|
134
|
-
| 4x | [base × 4] |
|
|
135
|
-
| 6x | [base × 6] |
|
|
352
|
+
Keep a three-step rhythm:
|
|
353
|
+
- [small, e.g., 8px] inside a group (label + input, icon + text)
|
|
354
|
+
- [medium, e.g., 16px] between related groups
|
|
355
|
+
- [large, e.g., 32-40px] between sections
|
|
136
356
|
|
|
137
|
-
|
|
138
|
-
<!--
|
|
139
|
-
| 8x | [base × 8] |
|
|
140
|
-
| 10x | [base × 10] |
|
|
141
|
-
| 16x | [base × 16] |
|
|
142
|
-
| 24x | [base × 24] |
|
|
357
|
+
Cards use 24px padding, 16px when compact and 32px for hero areas. Center content in a responsive column with side padding that grows at wider breakpoints.
|
|
143
358
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
- [small]: inside a group (label + input, icon + text)
|
|
147
|
-
- [medium]: between related groups
|
|
148
|
-
- [large]: between sections
|
|
149
|
-
-->
|
|
359
|
+
<!-- LEVEL2_PLACEHOLDER: Complete the full 9-step spacing scale in the frontmatter. See references/completeness-checklist.md § Level 2/Spacing. -->
|
|
150
360
|
|
|
151
361
|
### Breakpoints
|
|
152
362
|
|
|
@@ -164,38 +374,30 @@ Base unit: [4px or 8px]
|
|
|
164
374
|
| 2xl | 1400px | Ultra-wide |
|
|
165
375
|
-->
|
|
166
376
|
|
|
167
|
-
<!-- LEVEL2_PLACEHOLDER: Add Components section — at minimum Button (primary, secondary) and Input tokens with size variants and all states. See references/design-md-spec.md § Components. -->
|
|
377
|
+
<!-- LEVEL2_PLACEHOLDER: Add Components section — at minimum Button (primary, secondary, tertiary, error) and Input tokens in the frontmatter `components:` map with size variants and all states. See references/design-md-spec.md § Components. -->
|
|
168
378
|
<!--
|
|
169
379
|
## Components
|
|
170
380
|
|
|
381
|
+
Component tokens are defined in the frontmatter `components:` map. They reference other frontmatter keys via `{colors.*}` and `{typography.*}` syntax.
|
|
382
|
+
|
|
171
383
|
### Button
|
|
172
384
|
|
|
173
|
-
|
|
174
|
-
|---------|-----------|------|--------|--------|--------|
|
|
175
|
-
| primary | gray-1000 | background-100 | — | 6px | 40px |
|
|
176
|
-
| secondary | background-100 | gray-1000 | gray-alpha-400 | 6px | 40px |
|
|
385
|
+
**Variants** are defined in frontmatter as `button-primary`, `button-secondary`, `button-tertiary`, `button-error`.
|
|
177
386
|
|
|
178
|
-
**Size variants
|
|
179
|
-
| Size | Height | Typography |
|
|
180
|
-
|------|--------|------------|
|
|
181
|
-
| small | 32px | button-12 |
|
|
182
|
-
| default | 40px | button-14 |
|
|
183
|
-
| large | 48px | button-16 |
|
|
387
|
+
**Size variants** (`button-small`, `button-large`) inherit variant properties and override only typography, padding, and height.
|
|
184
388
|
|
|
185
|
-
**States:** Fill steps up: 100→200 (hover), 100→300 (active). Border steps up: 400→500→600. Disabled:
|
|
389
|
+
**States:** Fill steps up: 100→200 (hover), 100→300 (active). Border steps up: 400→500→600. Disabled: 100 fill, 700 text, not-allowed cursor. Focus: `0 0 0 2px {colors.background-100}, 0 0 0 4px {colors.blue-700}`.
|
|
186
390
|
|
|
187
391
|
### Input
|
|
188
392
|
|
|
189
|
-
|
|
190
|
-
|---------|-----------|------|--------|--------|--------|
|
|
191
|
-
| default | background-100 | gray-1000 | gray-alpha-400 | 6px | 40px |
|
|
393
|
+
**Variants** are defined in frontmatter as `input`.
|
|
192
394
|
|
|
193
|
-
**Size variants
|
|
395
|
+
**Size variants** (`input-small`, `input-large`) same pattern as Button.
|
|
194
396
|
|
|
195
|
-
**States:** Same state progression as Button. Error: border red-700
|
|
397
|
+
**States:** Same state progression as Button. Error: border `red-700`, add error message below.
|
|
196
398
|
-->
|
|
197
399
|
|
|
198
|
-
<!-- LEVEL3_PLACEHOLDER: Add Elevation & Depth, Motion, Shapes, Voice & Content, and
|
|
400
|
+
<!-- LEVEL3_PLACEHOLDER: Add Elevation & Depth, Motion, Shapes, Voice & Content, and extended Component library. See references/completeness-checklist.md § Level 3. -->
|
|
199
401
|
<!--
|
|
200
402
|
## Elevation & Depth
|
|
201
403
|
|
|
@@ -209,7 +411,7 @@ Hierarchy comes from tonal surfaces and borders first; shadows stay subtle.
|
|
|
209
411
|
| Popover | 0 1px 1px rgba(0, 0, 0, 0.02), 0 4px 8px -4px rgba(0, 0, 0, 0.04), 0 16px 24px -8px rgba(0, 0, 0, 0.06) |
|
|
210
412
|
| Modal | 0 1px 1px rgba(0, 0, 0, 0.02), 0 8px 16px -4px rgba(0, 0, 0, 0.04), 0 24px 32px -8px rgba(0, 0, 0, 0.06) |
|
|
211
413
|
|
|
212
|
-
Pair each elevation with the matching radius
|
|
414
|
+
Pair each elevation with the matching radius from `rounded:` frontmatter.
|
|
213
415
|
|
|
214
416
|
## Motion
|
|
215
417
|
|
|
@@ -231,23 +433,16 @@ Honor prefers-reduced-motion: drop nonessential motion.
|
|
|
231
433
|
|
|
232
434
|
## Shapes
|
|
233
435
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
| Context | Value |
|
|
237
|
-
|---------|-------|
|
|
238
|
-
| Surface, Input, Button | 6px |
|
|
239
|
-
| Menu, Modal, Popover | 12px |
|
|
240
|
-
| Fullscreen | 16px |
|
|
241
|
-
| Pill, Avatar | 9999px |
|
|
242
|
-
|
|
243
|
-
Keep one radius family per view; never mix rounded and sharp corners.
|
|
436
|
+
Border radius values are defined in the frontmatter `rounded:` map. Keep one radius family per view; never mix rounded and sharp corners.
|
|
244
437
|
|
|
245
438
|
## Components — Extended
|
|
246
439
|
|
|
247
|
-
Add Card, Modal, Tooltip, Menu/Dropdown, Badge tokens following the same
|
|
440
|
+
Add Card, Modal, Tooltip, Menu/Dropdown, Badge tokens to the frontmatter `components:` map following the same structure as Button/Input.
|
|
248
441
|
|
|
249
442
|
## Voice & Content
|
|
250
443
|
|
|
444
|
+
Copy is part of the design; keep it precise and free of filler.
|
|
445
|
+
|
|
251
446
|
- Use Title Case for labels, buttons, titles, and tabs
|
|
252
447
|
- Sentence case for body, helper text, and toasts
|
|
253
448
|
- Name actions with a verb and a noun: [Create Project], [Delete Item]
|
|
@@ -263,11 +458,12 @@ Add Card, Modal, Tooltip, Menu/Dropdown, Badge tokens following the same pattern
|
|
|
263
458
|
|
|
264
459
|
<!-- Fill in with rules specific to this design system. Examples to customize: -->
|
|
265
460
|
|
|
266
|
-
- Use
|
|
461
|
+
- Use `gray-1000` for primary text, `gray-900` for secondary.
|
|
267
462
|
- Keep accent color for state and the single most important action on a view.
|
|
268
463
|
- Hold WCAG AA contrast (4.5:1 for body text).
|
|
269
|
-
- Show focus ring on every interactive element at
|
|
270
|
-
-
|
|
464
|
+
- Show focus ring on every interactive element at `:focus-visible`.
|
|
465
|
+
- Use token values from the frontmatter — never set font size, line height, or color by hand.
|
|
271
466
|
- Don't signal state with color alone; pair it with an icon or text label.
|
|
272
467
|
- Don't use more than two font weights in one view.
|
|
273
468
|
- Don't mix rounded and sharp corners in one view.
|
|
469
|
+
- Don't swap `gray-*` for `background-*`; they are separate scales.
|
|
@@ -7,14 +7,17 @@ description: Morning Star 派发与委派门禁 —— 仅 PM 可增派 subagent
|
|
|
7
7
|
|
|
8
8
|
**首次 Read 本 skill 前:必须先 Read `mstar-harness-core`(SKILL.md)。** 同仓 worktree、QC/QA 检出字段 → **`mstar-branch-worktree`**。冲突时 **以 `mstar-harness-core` 为准**。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 🚨 承接方:如果你是 leaf executor,先读本节!(你的 Assignment 开头 IDENTITY 块已告诉你身份)
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
12
|
+
> **如果你此刻的 Assignment 中 `Delegation: forbidden`(或未写 `Delegation: allowed`),则你属于 leaf executor。本节是你的行为边界,必须在你做任何决定之前读完。**
|
|
13
|
+
>
|
|
14
|
+
> **先回到你 Assignment 最顶部的 `**IDENTITY**` 块重读一遍** —— 那里已经告诉你:你是谁、你不是谁、Task 工具不属于你。本节是那个身份断言的加固版。
|
|
15
|
+
|
|
16
|
+
**身份断言(牢记,不动摇):**
|
|
17
|
+
- **你就是** `Execute as` 写的那个角色。你**不是 PM**,不是调度者,不是 `dispatching-parallel-agents` 的使用者。
|
|
18
|
+
- Task/subagent 工具即使在你的工具列表里出现,它**不属于你**。把它当作你没见过的工具 —— 不是"不能用",是"你没有"。
|
|
19
|
+
- 所有工作由你**本人**在当前会话内完成(Read / Write / Edit / Shell / Grep / Glob)。任何"这样做更高效"的想法都不构成 dispatch 的理由。
|
|
20
|
+
- 遇到超出能力范围的需求 → 写 `## Blocked` 回报 PM,**不是**尝试 dispatch。Blocked 是你能发出的正确信号,dispatch 不是。
|
|
18
21
|
|
|
19
22
|
## 承接方反递归红线(NEVER / DO NOT;leaf executor 必读)
|
|
20
23
|
|
|
@@ -35,7 +38,16 @@ description: Morning Star 派发与委派门禁 —— 仅 PM 可增派 subagent
|
|
|
35
38
|
3. 下一动作是不是「Task / subagent_type=…」?是 → 停手,改为 Read / Write / Shell / Edit,或 **`Blocked`**。
|
|
36
39
|
4. 命中任一 NEVER → 写 `## Blocked — recursive dispatch refused (<which NEVER>)` 回报 PM,**不**继续 invoke。
|
|
37
40
|
|
|
38
|
-
**Assignment 顶部反模式块**:每个 PM Assignment 开头均有 **`**You are a leaf executor. You MUST NOT:**`**
|
|
41
|
+
**Assignment 顶部反模式块**:每个 PM Assignment 开头均有 **`**You are a leaf executor. You MUST NOT:**`** 块(含 IDENTITY + CAPABILITY BOUNDARY + prohibitions),PM 按此 Assignment 的角色+上下文定制反模式清单。leaf executor 收到 Assignment 后须 **首先** 阅读该块;命中任一条 → **停止**(亲自完成或 `Blocked`)。详见 **`mstar-roles/references/project-manager/dispatch-and-assignment.md`**。
|
|
42
|
+
|
|
43
|
+
## 调度防串扰(强制;leaf executor 已在上方读过反递归红线,此处为完整规则供 PM/对照用)
|
|
44
|
+
|
|
45
|
+
- 只有 **`@project-manager`** 可以决定增加/并行 subagent;承接方**默认不得二次分派**。
|
|
46
|
+
- **`Execute as: <role-id>`** = 承接方**亲自**完成本单,**不是**再起同名 subagent 或嵌套同 `subagent_type` 的 Task(禁止**递归误派**)。
|
|
47
|
+
- 额外代理仅以 **`Delegation: allowed (...)`** 为准;未显式写时视为 **`Delegation: forbidden`**。
|
|
48
|
+
- Assignment 正文中的 `@xxx` 默认按「文本引用」解释,**不**视为自动调用命令。
|
|
49
|
+
- 承接方若判断必须增加 subagent,应先回报 **`Blocked`** 请 PM 重分派。
|
|
50
|
+
- **Superpowers `subagent-driven-development`**:per-task 子步**勿**用 `@qc-specialist*`;用 `@general` / `generalPurpose` 或 PM 标明的 informal `@qa-engineer`。详见 **`mstar-superpowers-align`**。
|
|
39
51
|
|
|
40
52
|
## 并发分派完整性门禁(PM 强制)
|
|
41
53
|
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
> Load **`mstar-harness-core`** first, then **`mstar-dispatch-gates`** SKILL.md.
|
|
4
4
|
>
|
|
5
|
-
> **First**: read the `**You are a leaf executor. You MUST NOT:**`
|
|
5
|
+
> **First**: read the `**IDENTITY**` and `**CAPABILITY BOUNDARY**` blocks at the top of your Assignment. Those tell you who you ARE and what tools are NOT yours. Then read the `**You are a leaf executor. You MUST NOT:**` prohibitions. Those anti-patterns are customized for your specific role+context and are the authoritative dispatch boundaries for this assignment.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**Preamble — internalize before any action:**
|
|
8
|
+
|
|
9
|
+
I am a leaf executor. I personally complete all work. Task/subagent is NOT my tool. If I think about dispatching, I stop and return to my direct work or write `Blocked`.
|
|
10
|
+
|
|
11
|
+
Before any Task/subagent call (if I somehow forget the preamble):
|
|
8
12
|
|
|
9
13
|
1. What is my **`Execute as`**?
|
|
10
14
|
2. Does the Assignment include **`Delegation: allowed (...)`**? If no → **no** Task/subagent.
|
|
@@ -85,7 +85,7 @@ PM 在 Assignment 写 **`Task category`**(主类 + 可选 `secondary`):
|
|
|
85
85
|
| `mstar-plan-artifacts` | 主 plan、reports、`status.json`、residual、knowledge、Done 归档 |
|
|
86
86
|
| `mstar-design-md` | DESIGN.md 设计系统规范 —— 创建/审计/维护 design tokens,三级检查清单,light/dark 双主题 |
|
|
87
87
|
| `mstar-review-qc` | QC 工作流、模板、verdict、residual 留档 |
|
|
88
|
-
| `mstar-coding-behavior` | Think / Simplicity / Surgical / Goal-Driven |
|
|
88
|
+
| `mstar-coding-behavior` | Think / Simplicity / Surgical / Debugging / Goal-Driven / Communication |
|
|
89
89
|
| `mstar-superpowers-align` | Superpowers × harness 优先级与短语 |
|
|
90
90
|
| `mstar-roles` | 角色正文 hub |
|
|
91
91
|
| `mstar-host` | 宿主适配(自动识别;`references/opencode.md` / `cursor.md` / `codex.md` / `parallel-dispatch.md`) |
|