@neonwatty/limner 0.1.0 → 0.1.2

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 (54) hide show
  1. package/README.md +53 -39
  2. package/dist/cli.js +3 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/compare-image-reference.d.ts +3 -0
  5. package/dist/commands/compare-image-reference.js +26 -3
  6. package/dist/commands/compare-image-reference.js.map +1 -1
  7. package/dist/commands/compare.d.ts +4 -1
  8. package/dist/commands/compare.js +72 -45
  9. package/dist/commands/compare.js.map +1 -1
  10. package/dist/core/agent-comparison-fingerprint.d.ts +12 -0
  11. package/dist/core/agent-comparison-fingerprint.js +27 -0
  12. package/dist/core/agent-comparison-fingerprint.js.map +1 -0
  13. package/dist/core/agent-comparison-pack.d.ts +30 -0
  14. package/dist/core/agent-comparison-pack.js +148 -0
  15. package/dist/core/agent-comparison-pack.js.map +1 -0
  16. package/dist/core/agent-comparison-profiles.d.ts +9 -0
  17. package/dist/core/agent-comparison-profiles.js +19 -0
  18. package/dist/core/agent-comparison-profiles.js.map +1 -0
  19. package/dist/core/agent-comparison-prompts.d.ts +22 -0
  20. package/dist/core/agent-comparison-prompts.js +84 -0
  21. package/dist/core/agent-comparison-prompts.js.map +1 -0
  22. package/dist/core/agent-comparison-report.d.ts +3 -0
  23. package/dist/core/agent-comparison-report.js +56 -0
  24. package/dist/core/agent-comparison-report.js.map +1 -0
  25. package/dist/core/agent-comparison-validation.d.ts +2 -0
  26. package/dist/core/agent-comparison-validation.js +8 -0
  27. package/dist/core/agent-comparison-validation.js.map +1 -0
  28. package/dist/core/playwright-capture.js +1 -1
  29. package/dist/core/playwright-capture.js.map +1 -1
  30. package/dist/core/report-writer.d.ts +7 -11
  31. package/dist/core/report-writer.js +21 -43
  32. package/dist/core/report-writer.js.map +1 -1
  33. package/dist/core/visual-spec-prompts.js +2 -2
  34. package/dist/core/visual-spec-prompts.js.map +1 -1
  35. package/dist/core/workspace.d.ts +1 -0
  36. package/dist/core/workspace.js +13 -2
  37. package/dist/core/workspace.js.map +1 -1
  38. package/dist/index.d.ts +4 -2
  39. package/dist/index.js +3 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/schemas/comparison.d.ts +349 -0
  42. package/dist/schemas/comparison.js +211 -0
  43. package/dist/schemas/comparison.js.map +1 -0
  44. package/dist/schemas/visual-spec.d.ts +8 -8
  45. package/dist/schemas/visual-spec.js +2 -2
  46. package/dist/schemas/visual-spec.js.map +1 -1
  47. package/docs/agent-workflow.md +20 -33
  48. package/docs/superpowers/plans/2026-06-12-agent-comparison-scores.md +209 -0
  49. package/package.json +2 -2
  50. package/skills/limner/SKILL.md +18 -21
  51. package/templates/target/AGENT_GUIDE.md +13 -9
  52. package/dist/commands/compare-image-app.d.ts +0 -12
  53. package/dist/commands/compare-image-app.js +0 -45
  54. package/dist/commands/compare-image-app.js.map +0 -1
@@ -0,0 +1,211 @@
1
+ import { z } from 'zod';
2
+ const score01Schema = z.number().min(0).max(1);
3
+ const comparisonScoreSchema = z.object({
4
+ overall: score01Schema,
5
+ layout: score01Schema.optional(),
6
+ hierarchy: score01Schema.optional(),
7
+ typography: score01Schema.optional(),
8
+ color: score01Schema.optional(),
9
+ spacing: score01Schema.optional(),
10
+ structure: score01Schema.optional(),
11
+ semantics: score01Schema.optional(),
12
+ });
13
+ const hashSchema = z.string().regex(/^[a-f0-9]{64}$/);
14
+ const inputFingerprintSchema = z.object({
15
+ expectedImageSha256: hashSchema,
16
+ actualImageSha256: hashSchema,
17
+ expectedStructureSha256: hashSchema.optional(),
18
+ actualStructureSha256: hashSchema.optional(),
19
+ });
20
+ const evidenceSchema = z.object({
21
+ source: z.string().min(1),
22
+ observation: z.string().min(1),
23
+ });
24
+ const fixTargetSchema = z.object({
25
+ surface: z.enum(['mockup', 'implementation', 'unknown']),
26
+ region: z.string().min(1).optional(),
27
+ likelyFiles: z.array(z.string()).default([]),
28
+ selectors: z.array(z.string()).default([]),
29
+ });
30
+ const diffAreaSchema = z.object({
31
+ id: z.string().min(1),
32
+ title: z.string().min(1),
33
+ category: z.enum(['layout', 'hierarchy', 'typography', 'color', 'spacing', 'component-anatomy', 'copy-state', 'attention-flow', 'other']),
34
+ severity: z.enum(['high', 'medium', 'low']),
35
+ priority: z.number().int().positive(),
36
+ expected: z.string().min(1),
37
+ actual: z.string().min(1),
38
+ impact: z.string().min(1),
39
+ evidence: z.array(evidenceSchema).min(1),
40
+ fixTarget: fixTargetSchema.optional(),
41
+ recommendedChange: z.string().min(1),
42
+ });
43
+ const nextIterationSchema = z.object({
44
+ focus: z.string().min(1),
45
+ steps: z.array(z.string()),
46
+ avoidForNow: z.array(z.string()).default([]),
47
+ expectedImprovement: z.string().min(1).optional(),
48
+ });
49
+ const remarksSchema = z.object({
50
+ matches: z.array(z.string()),
51
+ uncertainties: z.array(z.string()).default([]),
52
+ possibleIntentionalDeviations: z.array(z.string()).default([]),
53
+ });
54
+ const systemFeedbackSchema = z.object({
55
+ inputQuality: z.array(z.string()),
56
+ missingContext: z.array(z.string()).default([]),
57
+ suggestedLimnerImprovements: z.array(z.string()).default([]),
58
+ });
59
+ const baseComparisonSchema = z.object({
60
+ summary: z.string().min(1),
61
+ score: comparisonScoreSchema,
62
+ confidence: score01Schema,
63
+ majorDiffAreas: z.array(diffAreaSchema),
64
+ matches: z.array(z.string()),
65
+ remarks: remarksSchema,
66
+ systemFeedback: systemFeedbackSchema,
67
+ nextIteration: nextIterationSchema,
68
+ rationale: z.string().min(1),
69
+ });
70
+ export const imageComparisonSchema = baseComparisonSchema.extend({
71
+ kind: z.literal('image-vs-image'),
72
+ inputs: z.object({
73
+ expectedImagePath: z.string().min(1),
74
+ actualImagePath: z.string().min(1),
75
+ }),
76
+ });
77
+ export const structureComparisonSchema = baseComparisonSchema.extend({
78
+ kind: z.literal('structure-vs-structure'),
79
+ inputs: z.object({
80
+ expectedStructurePath: z.string().min(1),
81
+ actualStructurePath: z.string().min(1),
82
+ structureKind: z.enum(['visual-spec', 'dom-metrics', 'html', 'json-description']),
83
+ }),
84
+ });
85
+ export const agentComparisonBundleSchema = z.object({
86
+ version: z.literal(1),
87
+ generatedBy: z.literal('agent'),
88
+ profile: z.enum(['ideal-to-mockup', 'mockup-to-implementation']),
89
+ inputFingerprint: inputFingerprintSchema,
90
+ imageComparison: imageComparisonSchema,
91
+ structureComparison: structureComparisonSchema.optional(),
92
+ recommendation: z.object({
93
+ topFix: z.string().min(1).optional(),
94
+ why: z.string().min(1).optional(),
95
+ expectedScoreLift: score01Schema.optional(),
96
+ }).default({}),
97
+ });
98
+ export function createAgentComparisonBundleExample(mode, inputFingerprint = exampleFingerprint(mode)) {
99
+ const imageComparison = {
100
+ kind: 'image-vs-image',
101
+ inputs: {
102
+ expectedImagePath: 'targets/demo/source/ideal.png',
103
+ actualImagePath: 'targets/demo/captures/image-reference/reference.png',
104
+ },
105
+ summary: 'The screens preserve the same overall layout, with hierarchy and typography drift.',
106
+ score: { overall: 0.82, layout: 0.9, hierarchy: 0.74, typography: 0.76, color: 0.85, spacing: 0.8 },
107
+ confidence: 0.78,
108
+ majorDiffAreas: [exampleDiff('hero-heading', 'Hero heading lacks visual dominance', 'mockup')],
109
+ matches: ['Primary content appears in the same broad region.'],
110
+ remarks: {
111
+ matches: ['Overall single-column composition is similar.'],
112
+ uncertainties: ['Exact font family cannot be determined from screenshots alone.'],
113
+ possibleIntentionalDeviations: [],
114
+ },
115
+ systemFeedback: {
116
+ inputQuality: ['Both screenshots are readable and appear to use the same viewport.'],
117
+ missingContext: [],
118
+ suggestedLimnerImprovements: ['Include computed font metrics for the hero region when available.'],
119
+ },
120
+ nextIteration: {
121
+ focus: 'Tune the hero heading size, weight, and contrast.',
122
+ steps: ['Increase heading font size by one scale step.', 'Use a heavier font weight.'],
123
+ avoidForNow: ['Do not spend the next iteration on tiny border-radius differences.'],
124
+ expectedImprovement: 'This should improve hierarchy more than small spacing changes.',
125
+ },
126
+ rationale: 'The composition is close, but visual priority differs enough to warrant another iteration.',
127
+ };
128
+ if (mode === 'image-only') {
129
+ return { version: 1, generatedBy: 'agent', profile: 'ideal-to-mockup', inputFingerprint, imageComparison, recommendation: {} };
130
+ }
131
+ imageComparison.inputs = {
132
+ expectedImagePath: 'targets/demo/captures/reference-implementation/reference.png',
133
+ actualImagePath: 'targets/demo/captures/reference-implementation/implementation.png',
134
+ };
135
+ imageComparison.summary = 'The implementation preserves the mockup layout, with hierarchy and typography drift.';
136
+ imageComparison.majorDiffAreas = [exampleDiff('hero-heading', 'Hero heading lacks visual dominance', 'implementation')];
137
+ imageComparison.nextIteration = {
138
+ focus: 'Tune the implementation hero heading size, weight, and contrast.',
139
+ steps: ['Increase implementation heading font size by one scale step.', 'Use a heavier font weight.'],
140
+ avoidForNow: ['Do not spend the next iteration on tiny border-radius differences.'],
141
+ expectedImprovement: 'This should improve implementation hierarchy more than small spacing changes.',
142
+ };
143
+ return {
144
+ version: 1,
145
+ generatedBy: 'agent',
146
+ profile: 'mockup-to-implementation',
147
+ inputFingerprint,
148
+ imageComparison,
149
+ structureComparison: {
150
+ kind: 'structure-vs-structure',
151
+ inputs: {
152
+ expectedStructurePath: 'targets/demo/captures/reference-implementation/reference.png.metrics.json',
153
+ actualStructurePath: 'targets/demo/captures/reference-implementation/implementation.png.metrics.json',
154
+ structureKind: 'dom-metrics',
155
+ },
156
+ summary: 'The region structure is mostly preserved, but the heading style differs.',
157
+ score: { overall: 0.86, structure: 0.92, typography: 0.72, color: 0.84, semantics: 0.9 },
158
+ confidence: 0.82,
159
+ majorDiffAreas: [exampleDiff('heading-weight', 'Heading weight differs in computed metrics', 'implementation')],
160
+ matches: ['Both structures include the main content and CTA regions.'],
161
+ remarks: { matches: ['Major regions are present.'], uncertainties: [], possibleIntentionalDeviations: [] },
162
+ systemFeedback: { inputQuality: ['DOM metrics were available for both sides.'], missingContext: [], suggestedLimnerImprovements: [] },
163
+ nextIteration: { focus: 'Align implementation heading typography.', steps: ['Increase implementation heading font weight.'], avoidForNow: [] },
164
+ rationale: 'The structure matches well, but computed typography still diverges.',
165
+ },
166
+ recommendation: {
167
+ topFix: 'Tune the hero heading typography.',
168
+ why: 'Both visual and structural comparisons identify this as the highest-impact mismatch.',
169
+ expectedScoreLift: 0.06,
170
+ },
171
+ };
172
+ }
173
+ export function createAgentComparisonJsonSchema(mode = 'any') {
174
+ const schema = z.toJSONSchema(agentComparisonBundleSchema);
175
+ if (mode === 'image-and-structure') {
176
+ schema.required = [...new Set([...(schema.required ?? []), 'structureComparison'])];
177
+ }
178
+ if (mode === 'image-only') {
179
+ schema.not = { required: ['structureComparison'] };
180
+ }
181
+ return schema;
182
+ }
183
+ function exampleDiff(id, title, surface) {
184
+ return {
185
+ id,
186
+ title,
187
+ category: 'typography',
188
+ severity: 'medium',
189
+ priority: 1,
190
+ expected: 'Large, bold, visually dominant heading.',
191
+ actual: 'Slightly smaller heading with weaker emphasis.',
192
+ impact: 'The primary hierarchy is less forceful.',
193
+ evidence: [{ source: 'expected-image', observation: 'Heading is the strongest element in the upper content region.' }],
194
+ fixTarget: { surface, region: 'hero', likelyFiles: [], selectors: [] },
195
+ recommendedChange: 'Increase heading size and weight, then compare again.',
196
+ };
197
+ }
198
+ function exampleFingerprint(mode) {
199
+ const image = {
200
+ expectedImageSha256: '0'.repeat(64),
201
+ actualImageSha256: '1'.repeat(64),
202
+ };
203
+ if (mode === 'image-only')
204
+ return image;
205
+ return {
206
+ ...image,
207
+ expectedStructureSha256: '2'.repeat(64),
208
+ actualStructureSha256: '3'.repeat(64),
209
+ };
210
+ }
211
+ //# sourceMappingURL=comparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison.js","sourceRoot":"","sources":["../../src/schemas/comparison.ts"],"names":[],"mappings":"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"}
@@ -40,8 +40,8 @@ export declare const visualSpecSchema: z.ZodObject<{
40
40
  role: z.ZodEnum<{
41
41
  unknown: "unknown";
42
42
  status: "status";
43
- header: "header";
44
43
  hero: "hero";
44
+ header: "header";
45
45
  content: "content";
46
46
  panel: "panel";
47
47
  footer: "footer";
@@ -84,8 +84,8 @@ export declare const visualSpecSchema: z.ZodObject<{
84
84
  }>;
85
85
  weight: z.ZodEnum<{
86
86
  bold: "bold";
87
- regular: "regular";
88
87
  medium: "medium";
88
+ regular: "regular";
89
89
  semibold: "semibold";
90
90
  }>;
91
91
  usage: z.ZodString;
@@ -132,8 +132,8 @@ export declare const visualSpecDiffSchema: z.ZodObject<{
132
132
  reference: z.ZodString;
133
133
  impact: z.ZodString;
134
134
  severity: z.ZodEnum<{
135
- medium: "medium";
136
135
  high: "high";
136
+ medium: "medium";
137
137
  low: "low";
138
138
  }>;
139
139
  }, z.core.$strip>>;
@@ -180,8 +180,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
180
180
  role: z.ZodEnum<{
181
181
  unknown: "unknown";
182
182
  status: "status";
183
- header: "header";
184
183
  hero: "hero";
184
+ header: "header";
185
185
  content: "content";
186
186
  panel: "panel";
187
187
  footer: "footer";
@@ -224,8 +224,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
224
224
  }>;
225
225
  weight: z.ZodEnum<{
226
226
  bold: "bold";
227
- regular: "regular";
228
227
  medium: "medium";
228
+ regular: "regular";
229
229
  semibold: "semibold";
230
230
  }>;
231
231
  usage: z.ZodString;
@@ -301,8 +301,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
301
301
  role: z.ZodEnum<{
302
302
  unknown: "unknown";
303
303
  status: "status";
304
- header: "header";
305
304
  hero: "hero";
305
+ header: "header";
306
306
  content: "content";
307
307
  panel: "panel";
308
308
  footer: "footer";
@@ -345,8 +345,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
345
345
  }>;
346
346
  weight: z.ZodEnum<{
347
347
  bold: "bold";
348
- regular: "regular";
349
348
  medium: "medium";
349
+ regular: "regular";
350
350
  semibold: "semibold";
351
351
  }>;
352
352
  usage: z.ZodString;
@@ -394,8 +394,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
394
394
  reference: z.ZodString;
395
395
  impact: z.ZodString;
396
396
  severity: z.ZodEnum<{
397
- medium: "medium";
398
397
  high: "high";
398
+ medium: "medium";
399
399
  low: "low";
400
400
  }>;
401
401
  }, z.core.$strip>>;
@@ -81,9 +81,9 @@ export const visualSpecDiffSchema = z.object({
81
81
  reference: z.string().min(1),
82
82
  impact: z.string().min(1),
83
83
  severity: z.enum(['high', 'medium', 'low']),
84
- })).min(1),
84
+ })),
85
85
  openQuestions: z.array(z.string()),
86
- nextFixes: z.array(z.string()).min(1),
86
+ nextFixes: z.array(z.string()),
87
87
  });
88
88
  export const visualSpecBundleSchema = z.object({
89
89
  version: z.literal(1),
@@ -1 +1 @@
1
- {"version":3,"file":"visual-spec.js","sourceRoot":"","sources":["../../src/schemas/visual-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACnD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;KACH,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3C,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACpC,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACnC,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QAC5B,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAClC,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC5C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACV,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/B,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;IACxE,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC/E,IAAI,EAAE,oBAAoB;CAC3B,CAAC,CAAC;AAMH,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE;YACT,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,oDAAoD;YAC7D,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE;YAC/D,MAAM,EAAE;gBACN,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,CAAC;wBACR,EAAE,EAAE,MAAM;wBACV,KAAK,EAAE,cAAc;wBACrB,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,uCAAuC;wBACpD,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;wBAC7D,QAAQ,EAAE,CAAC,oDAAoD,CAAC;qBACjE,CAAC;gBACF,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,6BAA6B,EAAE;aAC7F;YACD,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,oCAAoC,EAAE,kCAAkC,CAAC;gBACpF,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;gBACrF,cAAc,EAAE,CAAC,yDAAyD,CAAC;aAC5E;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;gBAC1F,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC;aACzC;YACD,SAAS,EAAE;gBACT,YAAY,EAAE,wDAAwD;gBACtE,cAAc,EAAE,CAAC,yBAAyB,CAAC;gBAC3C,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;gBAC3C,aAAa,EAAE,CAAC,qCAAqC,CAAC;aACvD;YACD,SAAS,EAAE;gBACT,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,2CAA2C,EAAE,CAAC;gBAClH,cAAc,EAAE,EAAE;gBAClB,KAAK,EAAE,CAAC,wDAAwD,CAAC;aAClE;YACD,QAAQ,EAAE,CAAC,0BAA0B,EAAE,6CAA6C,CAAC;SACtF;QACD,aAAa,EAAE;YACb,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,2DAA2D;YACpE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE;YAC/D,MAAM,EAAE;gBACN,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,CAAC;wBACR,EAAE,EAAE,MAAM;wBACV,KAAK,EAAE,cAAc;wBACrB,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,uCAAuC;wBACpD,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;wBAC7D,QAAQ,EAAE,CAAC,wCAAwC,EAAE,mCAAmC,CAAC;qBAC1F,CAAC;gBACF,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,6BAA6B,EAAE;aAC7F;YACD,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,oCAAoC,EAAE,kCAAkC,CAAC;gBACpF,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;gBAC5G,cAAc,EAAE,CAAC,6CAA6C,CAAC;aAChE;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;gBACxF,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAChC;YACD,SAAS,EAAE;gBACT,YAAY,EAAE,kDAAkD;gBAChE,cAAc,EAAE,CAAC,yBAAyB,EAAE,eAAe,CAAC;gBAC5D,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;gBAC3C,aAAa,EAAE,CAAC,qCAAqC,CAAC;aACvD;YACD,SAAS,EAAE;gBACT,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,2CAA2C,EAAE,CAAC;gBAClH,cAAc,EAAE,EAAE;gBAClB,KAAK,EAAE,CAAC,yDAAyD,CAAC;aACnE;YACD,QAAQ,EAAE,CAAC,4CAA4C,EAAE,+BAA+B,CAAC;SAC1F;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,6DAA6D;YACtE,OAAO,EAAE,CAAC,6BAA6B,EAAE,kDAAkD,CAAC;YAC5F,UAAU,EAAE,CAAC;oBACX,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,qCAAqC;oBAC5C,SAAS,EAAE,6CAA6C;oBACxD,MAAM,EAAE,8CAA8C;oBACtD,QAAQ,EAAE,QAAQ;iBACnB,CAAC;YACF,aAAa,EAAE,CAAC,sEAAsE,CAAC;YACvF,SAAS,EAAE,CAAC,2EAA2E,CAAC;SACzF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"visual-spec.js","sourceRoot":"","sources":["../../src/schemas/visual-spec.ts"],"names":[],"mappings":"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"}
@@ -2,44 +2,31 @@
2
2
 
3
3
  Limner is designed for agent-in-the-loop visual fidelity work.
4
4
 
5
+ Prompt profiles: `ideal-to-mockup` for Phase 1, and `mockup-to-implementation` for Phase 2.
6
+
5
7
  ## Phase 1: Image To Reference
6
8
 
7
- 1. Run `limn init <image> --target <name>`.
9
+ 1. Run `limner init <image> --target <name>`.
8
10
  2. Inspect `targets/<name>/source/`.
9
11
  3. Edit `contract/regions.json`, `contract/tokens.json`, and `contract/acceptance.md`.
10
12
  4. Rebuild `reference/index.html` and `reference/styles.css` as a faithful HTML facsimile.
11
- 5. Run `limn compare image-reference --target <name>`.
12
- 6. Optional: run `limn compare image-reference --target <name> --spec` to generate an agent-required visual spec prompt pack.
13
- 7. Edit `contract/visual-spec-instructions.md` for target-specific prompt guidance, or pass `--spec-instructions <path>` for a shared prompt policy.
14
- 8. If using Codex, start from `captures/image-reference/spec/agent-prompt.codex.md`.
15
- 9. If using Claude, start from `captures/image-reference/spec/agent-prompt.claude.md` and attach the images it references.
16
- 10. Have the agent write `captures/image-reference/spec/agent-response.json`, then rerun the command to validate and split the structured output.
17
- 11. Instruct the agent to inspect the ideal image and reference screenshot separately; use the side-by-side only as comparison context.
18
- 12. Open `captures/image-reference/side-by-side.png`.
19
- 13. Record concrete mismatches in `reports/image-reference.md`.
20
- 14. Iterate until the reference is approved.
21
-
22
- ## Phase 2: Reference To App
23
-
24
- 1. Add app selectors to `contract/regions.json`.
25
- 2. Run `limn compare reference-app --target <name> --url <app-url>`.
26
- 3. Open `captures/reference-app/side-by-side.png`.
27
- 4. Inspect `captures/reference-app/dom-metrics.json`.
28
- 5. Record app repair steps in `reports/reference-app.md`.
29
- 6. Fix the app and rerun until the app matches the approved reference.
30
-
31
- ## Optional Grounding: Image To App
32
-
33
- Use this when you need to confirm that the app URL, authentication state, and viewport are correct before building the HTML reference.
34
-
35
- ```bash
36
- limn compare image-app --target <name> --url <app-url> --storage-state ./e2e/.auth/user.json
37
- ```
38
-
39
- This is not a replacement for Phase 1. For design reconstruction work, first recreate the generated image in `reference/index.html` and compare with `image-reference`.
40
-
41
- Capture defaults to viewport-only. Add `--full-page` only when the generated image is meant to represent the full scrollable page.
13
+ 5. Run `limner compare image-reference --target <name>`.
14
+ 6. Read `captures/image-reference/agent-comparison/agent-prompt.codex.md`.
15
+ 7. Write `captures/image-reference/agent-comparison/agent-response.json`.
16
+ 8. Rerun the same command to validate `image-comparison.json` and `comparison-summary.json`.
17
+ 9. Optional: run `limner compare image-reference --target <name> --spec` to generate a visual spec prompt pack.
18
+ 10. Edit `contract/visual-spec-instructions.md` for target-specific prompt guidance, or pass `--spec-instructions <path>` for a shared prompt policy.
19
+ 11. Iterate on one scoped mockup fix at a time until the reference is approved.
20
+
21
+ ## Phase 2: Reference To Implementation
22
+
23
+ 1. Add implementation selectors to `contract/regions.json` using `appSelector`.
24
+ 2. Run `limner compare reference-implementation --target <name> --url <implementation-url>`.
25
+ 3. Read `captures/reference-implementation/agent-comparison/agent-prompt.codex.md`.
26
+ 4. Write `captures/reference-implementation/agent-comparison/agent-response.json`.
27
+ 5. Rerun the same command to validate `image-comparison.json`, `structure-comparison.json`, and `comparison-summary.json`.
28
+ 6. Fix the implementation and rerun until it matches the approved reference.
42
29
 
43
30
  ## Agent Rule
44
31
 
45
- Do not treat side-by-side generation as success. It is evidence. The agent still needs to compare regions, name mismatches, and decide the next scoped fix.
32
+ Do not treat side-by-side generation as success. It is evidence. The agent must write the structured comparison response and use its next-iteration guidance for one scoped fix.
@@ -0,0 +1,209 @@
1
+ # Agent Comparison Scores Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Replace Limner's current comparison behavior with agent-authored UX screenshot comparisons that drive the next implementation iteration for the two primary visual fidelity loops.
6
+
7
+ **Architecture:** Comparison commands still capture screenshots and write reports, but their core output becomes validated agent comparison artifacts rather than artifact-only side-by-sides. New schemas model image comparisons, structure comparisons, scores, confidence, evidence, matches, diffs, remarks, system feedback, and next iteration guidance. Prompt profiles tell the agent which side is canonical and which surface should change.
8
+
9
+ **Tech Stack:** TypeScript, Commander, Zod, Playwright, Vitest.
10
+
11
+ ---
12
+
13
+ ## Decisions
14
+
15
+ - Agent comparison is the only scoring path in this plan.
16
+ - This is a major overhaul of the existing compare modes, not an additive scoring feature.
17
+ - The implementation comparison naming should be `reference-implementation`.
18
+ - Current reports should be reshaped around agent comparison status, scores, diffs, and next iteration guidance.
19
+ - Limner stays model-agnostic: it prepares prompt/schema/evidence files; an external agent writes `agent-response.json`.
20
+ - The prompt is tailored for UX screenshot comparison, not generic image comparison.
21
+ - Perfect matches are valid: `diffs`, `mismatches`, and `nextFixes` may be empty.
22
+ - Scores are `0..1` estimates with rationale/evidence, not final pass/fail judgments.
23
+ - The schema prioritizes the next implementation iteration over progress tracking.
24
+
25
+ ## Prompt Profiles
26
+
27
+ - `ideal-to-mockup`: expected is the ideal image, actual is the HTML mockup screenshot, editable surface is the mockup. Used by `compare image-reference`.
28
+ - `mockup-to-implementation`: expected is the approved HTML mockup screenshot, actual is the implementation screenshot, editable surface is the implementation. Used by `compare reference-implementation`.
29
+
30
+ ## CLI Semantics
31
+
32
+ - `limner compare image-reference --target <name>` creates or validates an `ideal-to-mockup` agent pack and emits `image-comparison.json` after validation.
33
+ - `limner compare reference-implementation --target <name> --url <url>` creates or validates a `mockup-to-implementation` agent pack and emits image plus DOM-metrics structure comparisons after validation.
34
+ - `--no-agent-comparison` skips the default agent comparison pack for quick artifact-only runs.
35
+
36
+ ## Replacement Scope
37
+
38
+ - Replace the current artifact-only comparison reports with agent-comparison-centered reports.
39
+ - Rename the implementation comparison command to `compare reference-implementation`.
40
+ - Rename implementation comparison capture/report folders to reference-implementation equivalents.
41
+ - Keep backwards compatibility only if implementation chooses to add a deprecated alias; the new docs and agent workflow should use `reference-implementation`.
42
+
43
+ ## Artifacts
44
+
45
+ ```text
46
+ targets/<target>/captures/<mode>/
47
+ agent-comparison/
48
+ agent-prompt.md
49
+ agent-prompt.codex.md
50
+ agent-prompt.claude.md
51
+ agent-response.schema.json
52
+ agent-response.example.json
53
+ agent-response.json
54
+ image-comparison.json
55
+ structure-comparison.json
56
+ comparison-summary.json
57
+ ```
58
+
59
+ ## File Map
60
+
61
+ - Create `src/schemas/comparison.ts` and `src/schemas/comparison.test.ts`.
62
+ - Create `src/core/agent-comparison-profiles.ts`, `src/core/agent-comparison-prompts.ts`, `src/core/agent-comparison-pack.ts`, and `src/core/agent-comparison-pack.test.ts`.
63
+ - Modify `src/commands/compare-image-reference.ts`, `src/commands/compare.ts`, and `src/commands/compare.test.ts`.
64
+ - Modify `src/core/report-writer.ts`, `src/schemas/visual-spec.ts`, and `src/index.ts`.
65
+ - Modify `templates/target/AGENT_GUIDE.md`, `skills/limner/SKILL.md`, `docs/agent-workflow.md`, and `README.md`.
66
+
67
+ ---
68
+
69
+ ### Task 1: Shared Comparison Schemas
70
+
71
+ **Files:** create `src/schemas/comparison.ts`, create `src/schemas/comparison.test.ts`, modify `src/index.ts`.
72
+
73
+ - [ ] Write failing tests for image-only bundles, image-plus-structure bundles, perfect matches with empty `diffs`/`nextFixes`, and score bounds.
74
+
75
+ Use assertions shaped like:
76
+
77
+ ```ts
78
+ expect(agentComparisonBundleSchema.parse(createAgentComparisonBundleExample('image-only')).imageComparison.kind).toBe('image-vs-image');
79
+ expect(agentComparisonBundleSchema.parse(createAgentComparisonBundleExample('image-and-structure')).structureComparison?.kind).toBe('structure-vs-structure');
80
+ example.imageComparison.diffs = [];
81
+ example.imageComparison.nextIteration.steps = [];
82
+ example.imageComparison.score.overall = 1;
83
+ expect(agentComparisonBundleSchema.parse(example).imageComparison.diffs).toEqual([]);
84
+ example.imageComparison.score.overall = 1.2;
85
+ expect(() => agentComparisonBundleSchema.parse(example)).toThrow();
86
+ ```
87
+
88
+ - [ ] Run `npm test -- src/schemas/comparison.test.ts`; expect failure because the schema module is missing.
89
+ - [ ] Implement `score01Schema`, `imageComparisonSchema`, `structureComparisonSchema`, `agentComparisonBundleSchema`, exported types, `createAgentComparisonBundleExample(mode)`, and `createAgentComparisonJsonSchema()`.
90
+ - [ ] Include these top-level comparison fields: `summary`, `score`, `confidence`, `majorDiffAreas`, `matches`, `remarks`, `systemFeedback`, `nextIteration`, and `rationale`.
91
+ - [ ] Each diff should include `id`, `title`, `category`, `severity`, `priority`, `expected`, `actual`, `impact`, `evidence`, optional `fixTarget`, and `recommendedChange`.
92
+ - [ ] `fixTarget.surface` should be `mockup`, `implementation`, or `unknown`.
93
+ - [ ] Export schemas, helpers, and types from `src/index.ts`.
94
+ - [ ] Run `npm test -- src/schemas/comparison.test.ts && npm run typecheck`; expect pass.
95
+
96
+ ---
97
+
98
+ ### Task 2: Allow Perfect Visual Spec Diffs
99
+
100
+ **Files:** modify `src/schemas/visual-spec.ts`, modify `src/commands/compare.test.ts`.
101
+
102
+ - [ ] In the existing `compareImageReference` spec validation test, set `response.diff.mismatches = []` and `response.diff.nextFixes = []`.
103
+ - [ ] Assert `expect(diff.mismatches).toEqual([])`.
104
+ - [ ] Run `npm test -- src/commands/compare.test.ts`; expect failure because current schema requires one mismatch and one next fix.
105
+ - [ ] Remove `.min(1)` from `visualSpecDiffSchema.mismatches` and `visualSpecDiffSchema.nextFixes`.
106
+ - [ ] Run `npm test -- src/commands/compare.test.ts`; expect pass.
107
+
108
+ ---
109
+
110
+ ### Task 3: Agent Comparison Pack
111
+
112
+ **Files:** create `src/core/agent-comparison-profiles.ts`, create `src/core/agent-comparison-prompts.ts`, create `src/core/agent-comparison-pack.ts`, create `src/core/agent-comparison-pack.test.ts`.
113
+
114
+ - [ ] Write tests covering missing response, prompt/schema/example creation, invalid JSON, schema-invalid JSON, valid image-only response, valid image-plus-structure response, and both prompt profiles.
115
+ - [ ] Run `npm test -- src/core/agent-comparison-pack.test.ts`; expect failure because implementation is missing.
116
+ - [ ] Implement profile metadata for `ideal-to-mockup` and `mockup-to-implementation`.
117
+ - [ ] Implement prompt builders that include profile name, expected role, actual role, editable surface, expected/actual image paths, optional structure paths, schema path, response path, and UX-specific comparison guidance.
118
+ - [ ] The prompt must tell the agent to prioritize the next implementation iteration over exhaustive critique.
119
+ - [ ] The prompt must ask for high-signal UX diffs: layout, hierarchy, typography, color, spacing, component anatomy, copy/state, and attention flow.
120
+ - [ ] Implement `writeAgentComparisonPack(input)` with this contract:
121
+
122
+ ```ts
123
+ {
124
+ workspaceRoot: string;
125
+ captureDir: string;
126
+ mode: 'image-reference' | 'reference-implementation';
127
+ profile: 'ideal-to-mockup' | 'mockup-to-implementation';
128
+ imageInputs: { expectedImagePath: string; actualImagePath: string };
129
+ structureInputs?: {
130
+ expectedStructurePath: string;
131
+ actualStructurePath: string;
132
+ structureKind: 'visual-spec' | 'dom-metrics' | 'html' | 'json-description';
133
+ };
134
+ }
135
+ ```
136
+
137
+ - [ ] Return prompt paths, schema/example/response paths, status, validation errors, split artifact paths, and score highlights.
138
+ - [ ] On valid responses, write `image-comparison.json`, optional `structure-comparison.json`, and `comparison-summary.json`.
139
+ - [ ] Run `npm test -- src/core/agent-comparison-pack.test.ts && npm run typecheck`; expect pass.
140
+
141
+ ---
142
+
143
+ ### Task 4: Replace Current Primary Compare Modes
144
+
145
+ **Files:** modify `src/commands/compare-image-reference.ts`, `src/commands/compare.ts`, and `src/commands/compare.test.ts`.
146
+
147
+ - [ ] Extend compare tests so `image-reference` and `reference-implementation` return `agentComparison.status === 'awaiting-agent'` by default and each report mentions `agent-response.json`.
148
+ - [ ] For `reference-implementation`, assert the prompt includes `Structure kind: \`dom-metrics\``.
149
+ - [ ] Add coverage that `compare reference-implementation` is the documented command name.
150
+ - [ ] If a deprecated alias is retained, assert it points to the same implementation and prints a deprecation warning.
151
+ - [ ] Assert prompts include the expected profile names: `ideal-to-mockup` and `mockup-to-implementation`.
152
+ - [ ] Run `npm test -- src/commands/compare.test.ts`; expect failure.
153
+ - [ ] In `image-reference`, call `writeAgentComparisonPack` with profile `ideal-to-mockup`, ideal image as expected, and reference screenshot as actual.
154
+ - [ ] In `reference-implementation`, call it with profile `mockup-to-implementation`, reference screenshot as expected, implementation screenshot as actual, and structure inputs pointing at `${referencePath}.metrics.json` and `${implementationPath}.metrics.json`.
155
+ - [ ] Respect `options.agentComparison === false`.
156
+ - [ ] Run `npm test -- src/commands/compare.test.ts && npm run typecheck`; expect pass.
157
+
158
+ ---
159
+
160
+ ### Task 5: CLI Flags And Reports
161
+
162
+ **Files:** modify `src/commands/compare.ts`, modify `src/core/report-writer.ts`.
163
+
164
+ - [ ] Add to `image-reference` and `reference-implementation`:
165
+
166
+ ```ts
167
+ .option('--no-agent-comparison', 'skip the default agent comparison prompt pack')
168
+ ```
169
+
170
+ - [ ] Pass `agentComparison` through to command functions.
171
+ - [ ] Console output should include prompt paths, schema path, response target, validation status, and validated artifact paths.
172
+ - [ ] Reports should include `## Agent Comparison`.
173
+ - [ ] Awaiting reports should show prompt paths and the next step.
174
+ - [ ] Invalid reports should show validation errors.
175
+ - [ ] Validated reports should show agent image score, optional agent structure score, next iteration focus, and artifact paths.
176
+ - [ ] Verify help: `image-reference` and `reference-implementation` show `--no-agent-comparison`.
177
+
178
+ ---
179
+
180
+ ### Task 6: Teach Agents The Default Workflow
181
+
182
+ **Files:** modify `templates/target/AGENT_GUIDE.md`, `skills/limner/SKILL.md`, `docs/agent-workflow.md`, and `README.md`.
183
+
184
+ - [ ] Document that `image-reference` and `reference-implementation` create an agent comparison pack by default.
185
+ - [ ] Document prompt profiles: `ideal-to-mockup` and `mockup-to-implementation`.
186
+ - [ ] Tell agents to read `captures/<mode>/agent-comparison/agent-prompt.codex.md`.
187
+ - [ ] Tell agents to write `captures/<mode>/agent-comparison/agent-response.json`.
188
+ - [ ] Tell agents to rerun the same compare command to validate output.
189
+ - [ ] Update README’s product promise: Limner prepares model-agnostic agent-authored UX comparison scores, but does not make final pass/fail judgments.
190
+ - [ ] Run `rg -n "agent comparison|agent-response.json|ideal-to-mockup|mockup-to-implementation" README.md docs/agent-workflow.md templates/target/AGENT_GUIDE.md skills/limner/SKILL.md`; expect all files to mention the workflow.
191
+
192
+ ---
193
+
194
+ ### Task 7: Full Quality Gate And Handoff
195
+
196
+ **Files:** no edits.
197
+
198
+ - [ ] Run `npm run check`; expect lint, typecheck, Vitest, build, Knip, and file-size guard pass.
199
+ - [ ] Smoke `npm run dev -- compare image-reference --help`; expect `--no-agent-comparison`.
200
+ - [ ] Smoke `npm run dev -- compare reference-implementation --help`; expect `--no-agent-comparison`.
201
+ - [ ] PR handoff should include failure modes, commands run/results, generated artifacts, negative cases, and remaining risks.
202
+ - [ ] Failure modes: agents may treat scores as pass/fail; awaiting-agent loop if response is not written; agent feedback may be too broad unless the prompt enforces a focused next iteration.
203
+ - [ ] Negative cases: perfect match, invalid JSON, schema-invalid JSON, and `--no-agent-comparison`.
204
+
205
+ ## Self-Review
206
+
207
+ - Spec coverage: Covers the comparison overhaul, `reference-implementation` naming, two prompt profiles, image-vs-image output, structure-vs-structure output, how agents know to use it, schemas, validation, docs, and tests.
208
+ - Placeholder scan: No TBD/TODO language remains; each task names concrete files, behavior, commands, and expected outcomes.
209
+ - Type consistency: `agentComparison`, `imageComparison`, `structureComparison`, `ideal-to-mockup`, and `mockup-to-implementation` are consistent across the plan.