@specship/specship-darwin-arm64 0.28.0 → 0.29.0

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 (50) hide show
  1. package/lib/dist/bin/specship.js +37 -0
  2. package/lib/dist/bin/specship.js.map +1 -1
  3. package/lib/dist/commands/specship/spec.md +7 -1
  4. package/lib/dist/design-md/check.d.ts +51 -0
  5. package/lib/dist/design-md/check.d.ts.map +1 -0
  6. package/lib/dist/design-md/check.js +335 -0
  7. package/lib/dist/design-md/check.js.map +1 -0
  8. package/lib/dist/design-md/css.d.ts +40 -0
  9. package/lib/dist/design-md/css.d.ts.map +1 -0
  10. package/lib/dist/design-md/css.js +224 -0
  11. package/lib/dist/design-md/css.js.map +1 -0
  12. package/lib/dist/design-md/extract.d.ts +84 -0
  13. package/lib/dist/design-md/extract.d.ts.map +1 -0
  14. package/lib/dist/design-md/extract.js +595 -0
  15. package/lib/dist/design-md/extract.js.map +1 -0
  16. package/lib/dist/design-md/maintain.d.ts +45 -0
  17. package/lib/dist/design-md/maintain.d.ts.map +1 -0
  18. package/lib/dist/design-md/maintain.js +127 -0
  19. package/lib/dist/design-md/maintain.js.map +1 -0
  20. package/lib/dist/design-md/render.d.ts +28 -0
  21. package/lib/dist/design-md/render.d.ts.map +1 -0
  22. package/lib/dist/design-md/render.js +178 -0
  23. package/lib/dist/design-md/render.js.map +1 -0
  24. package/lib/dist/design-md/upkeep.d.ts +48 -0
  25. package/lib/dist/design-md/upkeep.d.ts.map +1 -0
  26. package/lib/dist/design-md/upkeep.js +169 -0
  27. package/lib/dist/design-md/upkeep.js.map +1 -0
  28. package/lib/dist/design-md/verify.d.ts +65 -0
  29. package/lib/dist/design-md/verify.d.ts.map +1 -0
  30. package/lib/dist/design-md/verify.js +311 -0
  31. package/lib/dist/design-md/verify.js.map +1 -0
  32. package/lib/dist/installer/gemini-commands.d.ts.map +1 -1
  33. package/lib/dist/installer/gemini-commands.js +7 -0
  34. package/lib/dist/installer/gemini-commands.js.map +1 -1
  35. package/lib/dist/installer/targets/claude.d.ts +1 -1
  36. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  37. package/lib/dist/installer/targets/claude.js +7 -2
  38. package/lib/dist/installer/targets/claude.js.map +1 -1
  39. package/lib/dist/skills/design-md/SKILL.md +172 -0
  40. package/lib/dist/skills/design-md/references/authored-sections.md +90 -0
  41. package/lib/dist/skills/design-md/references/sources.md +71 -0
  42. package/lib/dist/spec-quality/postcheck.d.ts +7 -1
  43. package/lib/dist/spec-quality/postcheck.d.ts.map +1 -1
  44. package/lib/dist/spec-quality/postcheck.js +31 -0
  45. package/lib/dist/spec-quality/postcheck.js.map +1 -1
  46. package/lib/dist/workflows/defaults/claude-design-implement.yaml +34 -5
  47. package/lib/dist/workflows/defaults/spec-implement.yaml +16 -0
  48. package/lib/node_modules/.package-lock.json +1 -1
  49. package/lib/package.json +1 -1
  50. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Build verification against design.md (DESIGNMD-DOC, REQ-DESIGNMD-008).
3
+ *
4
+ * The pixel eval's last miss was a builder slip, not missing information: a
5
+ * small model closed a container one line early, so a footer landed outside
6
+ * its card. That is mechanically detectable. This extracts the element outline
7
+ * of a built HTML page with the same extractor that wrote design.md, and
8
+ * compares it line by line with design.md's Element outline. Each element line
9
+ * carries its tag, classes, rendering attributes, inline style and nesting, so
10
+ * a match means the structure the design describes is the structure that was
11
+ * built. The builder runs it, fixes what it reports, and runs it again.
12
+ */
13
+ import { CssRule } from './css';
14
+ export interface VerifyMismatch {
15
+ /** 1-based line within the outline. */
16
+ line: number;
17
+ expected: string | null;
18
+ actual: string | null;
19
+ /** For notes: an inline-style or text edge-space difference; 'order' for a rule-order mismatch. */
20
+ kind?: 'style' | 'space' | 'order';
21
+ }
22
+ export interface VerifyResult {
23
+ ok: boolean;
24
+ expectedLines: number;
25
+ actualLines: number;
26
+ mismatches: VerifyMismatch[];
27
+ /** Inline-style or text edge-space differences: reported, never failing. */
28
+ notes: VerifyMismatch[];
29
+ }
30
+ /** The Element outline lines of a design.md, or null when it has none. */
31
+ export declare function designOutline(designMd: string): string[] | null;
32
+ /**
33
+ * Compare two outlines on structure. Inline-style differences are notes (a
34
+ * value moved into a stylesheet rule renders the same). A text edge-space
35
+ * difference fails when the space sits next to a sibling, where it renders
36
+ * ("Why now:" + " You are…" lost its space in a live-capture build); at the
37
+ * start or end of the parent it is a note. Nesting, tags, classes,
38
+ * attributes, text and SVG are what this check guarantees.
39
+ */
40
+ export declare function compareOutlines(expected: string[], actual: string[], limit?: number): VerifyResult;
41
+ /** The longhand properties a declaration writes, so shorthands overlap their parts. */
42
+ export declare function longhands(property: string): string[];
43
+ interface ElementShape {
44
+ tag: string;
45
+ classes: Set<string>;
46
+ }
47
+ /** Tag and classes of each element line in an outline (`div.card.p-4[...] { … }`). */
48
+ export declare function outlineElements(outline: string[]): ElementShape[];
49
+ /**
50
+ * Stylesheet rule order (cascade). For every pair of design rules that the
51
+ * build also has and that write an overlapping property, the build must keep
52
+ * the design's order — otherwise the later one wins the other way round.
53
+ * Only pairs some element of the design actually matches both of count:
54
+ * reordering `hr` and `body` changes nothing.
55
+ */
56
+ export declare function compareRuleOrder(design: CssRule[], build: CssRule[], elements: ElementShape[], limit?: number): VerifyMismatch[];
57
+ /** Verify a built HTML page against a design.md's Element outline and rule order. */
58
+ export declare function verifyBuild(designMd: string, buildPath: string, opts: {
59
+ projectRoot: string;
60
+ }): VerifyResult;
61
+ /** The Style rules (verbatim) section of a design.md, parsed back into rules. */
62
+ export declare function designStyleRules(designMd: string): CssRule[] | null;
63
+ export declare function formatVerify(result: VerifyResult, buildPath: string): string;
64
+ export {};
65
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/design-md/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAY,MAAM,OAAO,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mGAAmG;IACnG,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAU/D;AAuDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,YAAY,CA6B7F;AAID,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBpD;AAID,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAUjE;AAuCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,KAAK,SAAI,GAAG,cAAc,EAAE,CAwB3H;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAQ5G;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAkBnE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB5E"}
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ /**
3
+ * Build verification against design.md (DESIGNMD-DOC, REQ-DESIGNMD-008).
4
+ *
5
+ * The pixel eval's last miss was a builder slip, not missing information: a
6
+ * small model closed a container one line early, so a footer landed outside
7
+ * its card. That is mechanically detectable. This extracts the element outline
8
+ * of a built HTML page with the same extractor that wrote design.md, and
9
+ * compares it line by line with design.md's Element outline. Each element line
10
+ * carries its tag, classes, rendering attributes, inline style and nesting, so
11
+ * a match means the structure the design describes is the structure that was
12
+ * built. The builder runs it, fixes what it reports, and runs it again.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.designOutline = designOutline;
16
+ exports.compareOutlines = compareOutlines;
17
+ exports.longhands = longhands;
18
+ exports.outlineElements = outlineElements;
19
+ exports.compareRuleOrder = compareRuleOrder;
20
+ exports.verifyBuild = verifyBuild;
21
+ exports.designStyleRules = designStyleRules;
22
+ exports.formatVerify = formatVerify;
23
+ const css_1 = require("./css");
24
+ const extract_1 = require("./extract");
25
+ /** The Element outline lines of a design.md, or null when it has none. */
26
+ function designOutline(designMd) {
27
+ const head = designMd.indexOf('### Element outline');
28
+ if (head === -1)
29
+ return null;
30
+ const open = designMd.indexOf('```text\n', head);
31
+ if (open === -1)
32
+ return null;
33
+ const close = designMd.indexOf('\n```', open + 8);
34
+ return designMd
35
+ .slice(open + 8, close === -1 ? undefined : close)
36
+ .split('\n')
37
+ .filter((l) => l.length > 0 && !l.startsWith('… truncated'));
38
+ }
39
+ /** Sort the attributes inside every tag of an SVG markup string. */
40
+ function normalizeMarkup(markup) {
41
+ return markup.replace(/<([a-zA-Z][\w:-]*)((?:\s+[^\s=>]+(?:="[^"]*")?)*)\s*(\/?)>/g, (_m, tag, attrs, slash) => {
42
+ const list = (attrs.match(/[^\s=>]+(?:="[^"]*")?/g) ?? []).sort();
43
+ return `<${tag}${list.length ? ` ${list.join(' ')}` : ''}${slash}>`;
44
+ });
45
+ }
46
+ /** Canonical form of one outline line: SVG attribute order does not matter. */
47
+ function normalizeLine(line) {
48
+ const at = line.indexOf(' = <svg');
49
+ if (at === -1)
50
+ return line;
51
+ // The line's label already carries the svg's classes; a class attribute on
52
+ // the root tag of the markup is the same information twice.
53
+ const markup = line.slice(at + 3).replace(/^<svg([^>]*?)\s+class="[^"]*"/, '<svg$1');
54
+ return line.slice(0, at + 3) + normalizeMarkup(markup);
55
+ }
56
+ /**
57
+ * The structural part of a line: nesting, tag, classes, attributes, text and
58
+ * SVG markup, without the inline `{ … }` style. Moving a declaration from an
59
+ * inline style into a stylesheet rule renders the same; structure does not.
60
+ */
61
+ function structure(line) {
62
+ return normalizeLine(line).replace(/ \{ [^{}]* \}(?= = <svg|$)/, '');
63
+ }
64
+ const indentOf = (line) => line.length - line.trimStart().length;
65
+ /**
66
+ * Does the outline line at `i` have a sibling before / after it under the same
67
+ * parent? An edge space next to a sibling renders ("Why now:" + " You are…");
68
+ * at the very start or end of its parent it does not.
69
+ */
70
+ function siblings(lines, i) {
71
+ const d = indentOf(lines[i]);
72
+ const before = i > 0 && indentOf(lines[i - 1]) >= d;
73
+ let after = false;
74
+ for (let k = i + 1; k < lines.length; k++) {
75
+ const dk = indentOf(lines[k]);
76
+ if (dk < d)
77
+ break;
78
+ if (dk === d) {
79
+ after = true;
80
+ break;
81
+ }
82
+ }
83
+ return { before, after };
84
+ }
85
+ /** Two text lines that differ only in edge whitespace inside the quotes. */
86
+ function edgeSpaceOnly(a, b) {
87
+ const qa = /^(\s*)"(.*)"$/.exec(a);
88
+ const qb = /^(\s*)"(.*)"$/.exec(b);
89
+ return !!qa && !!qb && qa[1] === qb[1] && qa[2].trim() === qb[2].trim() && qa[2] !== qb[2];
90
+ }
91
+ /**
92
+ * Compare two outlines on structure. Inline-style differences are notes (a
93
+ * value moved into a stylesheet rule renders the same). A text edge-space
94
+ * difference fails when the space sits next to a sibling, where it renders
95
+ * ("Why now:" + " You are…" lost its space in a live-capture build); at the
96
+ * start or end of the parent it is a note. Nesting, tags, classes,
97
+ * attributes, text and SVG are what this check guarantees.
98
+ */
99
+ function compareOutlines(expected, actual, limit = 5) {
100
+ const mismatches = [];
101
+ const notes = [];
102
+ const n = Math.max(expected.length, actual.length);
103
+ for (let i = 0; i < n; i++) {
104
+ const e = expected[i] ?? null;
105
+ const a = actual[i] ?? null;
106
+ if (e !== null && a !== null && normalizeLine(e) === normalizeLine(a))
107
+ continue;
108
+ if (e !== null && a !== null && structure(e) === structure(a)) {
109
+ if (notes.length < limit)
110
+ notes.push({ line: i + 1, expected: e, actual: a, kind: 'style' });
111
+ continue;
112
+ }
113
+ if (e !== null && a !== null && edgeSpaceOnly(e, a)) {
114
+ const te = e.trim().slice(1, -1);
115
+ const ta = a.trim().slice(1, -1);
116
+ const sib = siblings(expected, i);
117
+ const leadDiffers = /^\s/.test(te) !== /^\s/.test(ta);
118
+ const trailDiffers = /\s$/.test(te) !== /\s$/.test(ta);
119
+ if ((leadDiffers && sib.before) || (trailDiffers && sib.after)) {
120
+ if (mismatches.length < limit)
121
+ mismatches.push({ line: i + 1, expected: e, actual: a });
122
+ }
123
+ else if (notes.length < limit) {
124
+ notes.push({ line: i + 1, expected: e, actual: a, kind: 'space' });
125
+ }
126
+ continue;
127
+ }
128
+ if (e === a)
129
+ continue;
130
+ if (mismatches.length < limit)
131
+ mismatches.push({ line: i + 1, expected: e, actual: a });
132
+ }
133
+ return { ok: mismatches.length === 0, expectedLines: expected.length, actualLines: actual.length, mismatches, notes };
134
+ }
135
+ const SIDES = ['top', 'right', 'bottom', 'left'];
136
+ /** The longhand properties a declaration writes, so shorthands overlap their parts. */
137
+ function longhands(property) {
138
+ const p = property.toLowerCase();
139
+ if (p === 'border')
140
+ return SIDES.flatMap((s) => ['width', 'style', 'color'].map((k) => `border-${s}-${k}`));
141
+ const side = /^border-(top|right|bottom|left)$/.exec(p);
142
+ if (side)
143
+ return ['width', 'style', 'color'].map((k) => `border-${side[1]}-${k}`);
144
+ const kind = /^border-(width|style|color)$/.exec(p);
145
+ if (kind)
146
+ return SIDES.map((s) => `border-${s}-${kind[1]}`);
147
+ if (p === 'border-radius')
148
+ return ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map((c) => `border-${c}-radius`);
149
+ if (p === 'margin' || p === 'padding')
150
+ return SIDES.map((s) => `${p}-${s}`);
151
+ if (p === 'inset')
152
+ return SIDES;
153
+ if (p === 'gap')
154
+ return ['row-gap', 'column-gap'];
155
+ if (p === 'background')
156
+ return ['background-color', 'background-image', 'background-position', 'background-size', 'background-repeat'];
157
+ if (p === 'font')
158
+ return ['font-style', 'font-weight', 'font-size', 'line-height', 'font-family'];
159
+ if (p === 'outline')
160
+ return ['outline-width', 'outline-style', 'outline-color'];
161
+ if (p === 'transition')
162
+ return ['transition-property', 'transition-duration', 'transition-timing-function', 'transition-delay'];
163
+ if (p === 'animation')
164
+ return ['animation-name', 'animation-duration', 'animation-timing-function', 'animation-delay', 'animation-iteration-count'];
165
+ return [p];
166
+ }
167
+ const ruleKey = (r) => `${r.media ?? ''}|${r.selector}`;
168
+ /** Tag and classes of each element line in an outline (`div.card.p-4[...] { … }`). */
169
+ function outlineElements(outline) {
170
+ const out = [];
171
+ for (const raw of outline) {
172
+ const line = raw.trim();
173
+ if (!line || line.startsWith('"'))
174
+ continue;
175
+ const head = line.split(/[\s[{]/)[0];
176
+ const [tag, ...rest] = head.split('.');
177
+ out.push({ tag: tag.replace(/#.*$/, ''), classes: new Set(rest) });
178
+ }
179
+ return out;
180
+ }
181
+ /** The final compound of each selector in a list: its tag (or '') and classes. */
182
+ function subjects(selector) {
183
+ return selector.split(',').map((part) => {
184
+ const compounds = part.trim().split(/\s*[\s>+~]\s*/);
185
+ const last = (compounds[compounds.length - 1] ?? '').replace(/\[[^\]]*\]/g, '');
186
+ const classes = [];
187
+ // Class names with escapes (`.hover\:bg-x`); stop at an unescaped `:` (pseudo).
188
+ for (const m of last.matchAll(/\.((?:\\.|[\w-])+)/g))
189
+ classes.push(m[1].replace(/\\(.)/g, '$1'));
190
+ const tag = /^[a-zA-Z][\w-]*/.exec(last)?.[0]?.toLowerCase() ?? '';
191
+ return { tag, classes };
192
+ });
193
+ }
194
+ /**
195
+ * True when every property both rules write is written with the same value
196
+ * in each (so whichever comes last, the result is identical). A shorthand
197
+ * against a longhand is never treated as equal.
198
+ */
199
+ function sameValuesWhereTheyOverlap(a, b) {
200
+ const la = new Set(a.declarations.flatMap((d) => longhands(d.property)));
201
+ for (const db of b.declarations) {
202
+ if (!longhands(db.property).some((p) => la.has(p)))
203
+ continue;
204
+ const da = a.declarations.find((d) => d.property === db.property);
205
+ if (!da || da.value !== db.value)
206
+ return false;
207
+ }
208
+ return true;
209
+ }
210
+ /** Could one element match both selectors? Judged against the design's own elements. */
211
+ function shareAnElement(a, b, elements) {
212
+ const sa = subjects(a);
213
+ const sb = subjects(b);
214
+ const fits = (el, s) => (!s.tag || s.tag === '*' || s.tag === el.tag) && s.classes.every((c) => el.classes.has(c));
215
+ return elements.some((el) => sa.some((x) => fits(el, x)) && sb.some((y) => fits(el, y)));
216
+ }
217
+ /**
218
+ * Stylesheet rule order (cascade). For every pair of design rules that the
219
+ * build also has and that write an overlapping property, the build must keep
220
+ * the design's order — otherwise the later one wins the other way round.
221
+ * Only pairs some element of the design actually matches both of count:
222
+ * reordering `hr` and `body` changes nothing.
223
+ */
224
+ function compareRuleOrder(design, build, elements, limit = 5) {
225
+ const sheet = (rules) => rules.filter((r) => !r.selector.startsWith('inline '));
226
+ const pos = new Map();
227
+ sheet(build).forEach((r, i) => { if (!pos.has(ruleKey(r)))
228
+ pos.set(ruleKey(r), i); });
229
+ const present = sheet(design).filter((r) => pos.has(ruleKey(r)));
230
+ const props = present.map((r) => new Set(r.declarations.flatMap((d) => longhands(d.property))));
231
+ const out = [];
232
+ for (let j = 1; j < present.length && out.length < limit; j++) {
233
+ for (let i = 0; i < j; i++) {
234
+ if (ruleKey(present[i]) === ruleKey(present[j]))
235
+ continue;
236
+ if (pos.get(ruleKey(present[i])) < pos.get(ruleKey(present[j])))
237
+ continue;
238
+ if (![...props[j]].some((p) => props[i].has(p)))
239
+ continue;
240
+ if (sameValuesWhereTheyOverlap(present[i], present[j]))
241
+ continue;
242
+ if (!shareAnElement(present[i].selector, present[j].selector, elements))
243
+ continue;
244
+ out.push({
245
+ line: j + 1,
246
+ expected: `${present[i].selector} before ${present[j].selector}`,
247
+ actual: `${present[j].selector} before ${present[i].selector}`,
248
+ kind: 'order',
249
+ });
250
+ break;
251
+ }
252
+ }
253
+ return out;
254
+ }
255
+ /** Verify a built HTML page against a design.md's Element outline and rule order. */
256
+ function verifyBuild(designMd, buildPath, opts) {
257
+ const expected = designOutline(designMd);
258
+ if (!expected)
259
+ throw new extract_1.DesignSourceError('design.md has no Element outline to verify against');
260
+ const built = (0, extract_1.extractDesign)([buildPath], opts);
261
+ const result = compareOutlines(expected, built.outline);
262
+ const designRules = designStyleRules(designMd);
263
+ const order = designRules ? compareRuleOrder(designRules, built.rules, outlineElements(expected)) : [];
264
+ return { ...result, ok: result.ok && order.length === 0, mismatches: [...result.mismatches, ...order] };
265
+ }
266
+ /** The Style rules (verbatim) section of a design.md, parsed back into rules. */
267
+ function designStyleRules(designMd) {
268
+ const head = designMd.indexOf('### Style rules (verbatim)');
269
+ if (head === -1)
270
+ return null;
271
+ const end = designMd.indexOf('<!-- design-md:generated:end -->', head);
272
+ const section = designMd.slice(head, end === -1 ? undefined : end);
273
+ const rules = [];
274
+ let media;
275
+ let inCss = false;
276
+ for (const line of section.split('\n')) {
277
+ if (line.startsWith('#### '))
278
+ media = line.slice(5).trim();
279
+ else if (line.startsWith('```css'))
280
+ inCss = true;
281
+ else if (line.startsWith('```'))
282
+ inCss = false;
283
+ else if (inCss && line.trim()) {
284
+ const parsed = (0, css_1.parseCss)(line);
285
+ for (const r of parsed.rules)
286
+ rules.push(media ? { ...r, media } : r);
287
+ }
288
+ }
289
+ return rules;
290
+ }
291
+ function formatVerify(result, buildPath) {
292
+ const noteLines = result.notes.map((m) => m.kind === 'space'
293
+ ? ` note, line ${m.line}: text edge spaces differ — expected ${m.expected.trim()}, built ${m.actual.trim()}`
294
+ : ` note, line ${m.line}: inline style differs (fine if a stylesheet rule supplies the same values) — expected ${m.expected.trim()}`);
295
+ if (result.ok)
296
+ return [`${buildPath} matches design.md's element outline (${result.expectedLines} lines)`, ...noteLines].join('\n');
297
+ const lines = [
298
+ `${buildPath} does not match design.md's element outline (expected ${result.expectedLines} lines, built ${result.actualLines}). First difference(s):`,
299
+ ];
300
+ for (const m of result.mismatches) {
301
+ if (m.kind === 'order') {
302
+ lines.push(` rule order: the design has ${m.expected}; the build has ${m.actual} — a later rule overrides an earlier one`);
303
+ continue;
304
+ }
305
+ lines.push(` line ${m.line}:`, ` expected: ${m.expected ?? '(nothing — the build has extra elements)'}`, ` built: ${m.actual ?? '(nothing — the build is missing elements)'}`);
306
+ }
307
+ lines.push(...noteLines);
308
+ lines.push('Fix the build so each element has the same nesting (indentation), classes, attributes, inline style and text as the outline, and its stylesheet rules keep the order Style rules lists them, then verify again.');
309
+ return lines.join('\n');
310
+ }
311
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/design-md/verify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-commands.d.ts","sourceRoot":"","sources":["../../src/installer/gemini-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAKH,4FAA4F;AAC5F,eAAO,MAAM,4BAA4B,2DAAsD,CAAC;AAEhG,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,aAAa,CAAC;AA2ClD,6EAA6E;AAC7E,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM;CAI3B;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAenG;AAwBD,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,SAAY,GAAG,MAAM,CAc1F;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAWrG"}
1
+ {"version":3,"file":"gemini-commands.d.ts","sourceRoot":"","sources":["../../src/installer/gemini-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAKH,4FAA4F;AAC5F,eAAO,MAAM,4BAA4B,2DAAsD,CAAC;AAEhG,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAkDlD,6EAA6E;AAC7E,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM;CAI3B;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAenG;AAwBD,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,SAAY,GAAG,MAAM,CAc1F;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAWrG"}
@@ -130,6 +130,13 @@ const REWRITES = [
130
130
  /Follow the \*\*`designer-loop` skill\*\* \(`~\/\.claude\/skills\/designer-loop\/SKILL\.md`\)\s*—\s*it is the authority\. In brief:/g,
131
131
  'Run the taste loop inline:',
132
132
  ],
133
+ // The design-md skill is a Claude skills-dir asset too; Gemini users drive
134
+ // the same `specship design` CLI directly (DESIGNMD-DOC).
135
+ [/; follow the \*\*`design-md` skill\*\*\)/g, ')'],
136
+ [
137
+ /To capture or refresh a design reference without authoring a spec, use that skill directly\./g,
138
+ 'To refresh it after the design changes, re-run `specship design extract <sources> --update specs/<slug>/design.md`, then `specship design check`.',
139
+ ],
133
140
  // `claude mcp add` → the verified Gemini equivalent.
134
141
  [/\bclaude mcp add\b/g, 'gemini mcp add'],
135
142
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-commands.js","sourceRoot":"","sources":["../../src/installer/gemini-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-commands.js","sourceRoot":"","sources":["../../src/installer/gemini-commands.ts"],"names":[],"mappings":"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"}
@@ -166,7 +166,7 @@ export declare function cleanupLegacyCommandsEntries(loc: Location): WriteResult
166
166
  */
167
167
  export declare function writeAgentsEntries(loc: Location): WriteResult['files'];
168
168
  /**
169
- * Copy our shipped skills (skills/spec-author/**) into the user's skills dir
169
+ * Copy our shipped skills (skills/spec-author/**, skills/design-md/**) into the user's skills dir
170
170
  * (REQ-AUTHG-007.A1). Same idempotency contract as writeCommandsEntries: a
171
171
  * destination with identical bytes reports `unchanged`, and sibling
172
172
  * user-authored skills in the same dir are never touched.
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/claude.ts"],"names":[],"mappings":"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"}
@@ -251,6 +251,10 @@ const SHIPPED_SKILLS = [
251
251
  'spec-author/references/quality-rubric.md',
252
252
  'spec-author/references/gap-questions.md',
253
253
  'spec-author/references/review-checklist.md',
254
+ // design.md: pixel-exact design reference from Claude Design / Figma (DESIGNMD-DOC, REQ-DESIGNMD-005).
255
+ 'design-md/SKILL.md',
256
+ 'design-md/references/sources.md',
257
+ 'design-md/references/authored-sections.md',
254
258
  ];
255
259
  /** The PostToolUse + SessionStart hooks the installer writes. */
256
260
  const SPECSHIP_HOOKS = [
@@ -1052,7 +1056,7 @@ function writeAgentsEntries(loc) {
1052
1056
  return SHIPPED_AGENTS.map((name) => copyAsset((0, shared_1.packageAssetPath)('agents', name), path.join(agentsDir(loc), name)));
1053
1057
  }
1054
1058
  /**
1055
- * Copy our shipped skills (skills/spec-author/**) into the user's skills dir
1059
+ * Copy our shipped skills (skills/spec-author/**, skills/design-md/**) into the user's skills dir
1056
1060
  * (REQ-AUTHG-007.A1). Same idempotency contract as writeCommandsEntries: a
1057
1061
  * destination with identical bytes reports `unchanged`, and sibling
1058
1062
  * user-authored skills in the same dir are never touched.
@@ -1071,7 +1075,8 @@ function removeSkillsEntries(loc) {
1071
1075
  // Deepest-first so a parent is only considered after its children are gone.
1072
1076
  const dirs = [...new Set(SHIPPED_SKILLS.map((name) => path.dirname(path.join(skillsDir(loc), name))))]
1073
1077
  .sort((a, b) => b.split(path.sep).length - a.split(path.sep).length);
1074
- for (const dir of [...dirs, path.join(skillsDir(loc), 'spec-author')]) {
1078
+ const skillRoots = [...new Set(SHIPPED_SKILLS.map((name) => path.join(skillsDir(loc), name.split('/')[0])))];
1079
+ for (const dir of [...dirs, ...skillRoots]) {
1075
1080
  try {
1076
1081
  if (fs.existsSync(dir) && fs.readdirSync(dir).length === 0)
1077
1082
  fs.rmdirSync(dir);