reflection-check 0.0.2 → 0.0.3

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.
@@ -27,8 +27,8 @@ export declare const ReportStatusSchema: z.ZodEnum<{
27
27
  "pass-with-review": "pass-with-review";
28
28
  }>;
29
29
  export declare const ArtifactTypeSchema: z.ZodEnum<{
30
- report: "report";
31
30
  screenshot: "screenshot";
31
+ report: "report";
32
32
  image: "image";
33
33
  "visual-diff": "visual-diff";
34
34
  trace: "trace";
@@ -37,8 +37,8 @@ export declare const ArtifactTypeSchema: z.ZodEnum<{
37
37
  metadata: "metadata";
38
38
  }>;
39
39
  export declare const ArtifactRoleSchema: z.ZodEnum<{
40
- trace: "trace";
41
40
  expected: "expected";
41
+ trace: "trace";
42
42
  evidence: "evidence";
43
43
  actual: "actual";
44
44
  diff: "diff";
@@ -46,8 +46,8 @@ export declare const ArtifactRoleSchema: z.ZodEnum<{
46
46
  }>;
47
47
  export declare const ArtifactRefSchema: z.ZodObject<{
48
48
  type: z.ZodEnum<{
49
- report: "report";
50
49
  screenshot: "screenshot";
50
+ report: "report";
51
51
  image: "image";
52
52
  "visual-diff": "visual-diff";
53
53
  trace: "trace";
@@ -56,8 +56,8 @@ export declare const ArtifactRefSchema: z.ZodObject<{
56
56
  metadata: "metadata";
57
57
  }>;
58
58
  role: z.ZodOptional<z.ZodEnum<{
59
- trace: "trace";
60
59
  expected: "expected";
60
+ trace: "trace";
61
61
  evidence: "evidence";
62
62
  actual: "actual";
63
63
  diff: "diff";
@@ -93,8 +93,8 @@ export declare const CheckResultSchema: z.ZodObject<{
93
93
  details: z.ZodOptional<z.ZodString>;
94
94
  artifacts: z.ZodArray<z.ZodObject<{
95
95
  type: z.ZodEnum<{
96
- report: "report";
97
96
  screenshot: "screenshot";
97
+ report: "report";
98
98
  image: "image";
99
99
  "visual-diff": "visual-diff";
100
100
  trace: "trace";
@@ -103,8 +103,8 @@ export declare const CheckResultSchema: z.ZodObject<{
103
103
  metadata: "metadata";
104
104
  }>;
105
105
  role: z.ZodOptional<z.ZodEnum<{
106
- trace: "trace";
107
106
  expected: "expected";
107
+ trace: "trace";
108
108
  evidence: "evidence";
109
109
  actual: "actual";
110
110
  diff: "diff";
@@ -183,8 +183,8 @@ export declare const ReflectionReportSchema: z.ZodObject<{
183
183
  details: z.ZodOptional<z.ZodString>;
184
184
  artifacts: z.ZodArray<z.ZodObject<{
185
185
  type: z.ZodEnum<{
186
- report: "report";
187
186
  screenshot: "screenshot";
187
+ report: "report";
188
188
  image: "image";
189
189
  "visual-diff": "visual-diff";
190
190
  trace: "trace";
@@ -193,8 +193,8 @@ export declare const ReflectionReportSchema: z.ZodObject<{
193
193
  metadata: "metadata";
194
194
  }>;
195
195
  role: z.ZodOptional<z.ZodEnum<{
196
- trace: "trace";
197
196
  expected: "expected";
197
+ trace: "trace";
198
198
  evidence: "evidence";
199
199
  actual: "actual";
200
200
  diff: "diff";
@@ -209,8 +209,8 @@ export declare const ReflectionReportSchema: z.ZodObject<{
209
209
  }, z.core.$strip>>;
210
210
  artifacts: z.ZodArray<z.ZodObject<{
211
211
  type: z.ZodEnum<{
212
- report: "report";
213
212
  screenshot: "screenshot";
213
+ report: "report";
214
214
  image: "image";
215
215
  "visual-diff": "visual-diff";
216
216
  trace: "trace";
@@ -219,8 +219,8 @@ export declare const ReflectionReportSchema: z.ZodObject<{
219
219
  metadata: "metadata";
220
220
  }>;
221
221
  role: z.ZodOptional<z.ZodEnum<{
222
- trace: "trace";
223
222
  expected: "expected";
223
+ trace: "trace";
224
224
  evidence: "evidence";
225
225
  actual: "actual";
226
226
  diff: "diff";
@@ -247,6 +247,7 @@ export type SuggestedNextStep = z.output<typeof SuggestedNextStepSchema>;
247
247
  export declare function summarizeChecks(checks: CheckResult[]): ReportSummary;
248
248
  export declare function deriveReportStatus(checks: CheckResult[]): ReportStatus;
249
249
  export declare function deriveExitCode(status: ReportStatus): ExitCode;
250
+ export declare function deriveSuggestedNextSteps(checks: CheckResult[]): SuggestedNextStep[];
250
251
  export declare function validateReport(report: unknown): ReflectionReport;
251
252
  export declare function createReport(input: {
252
253
  runId: string;
@@ -83,6 +83,45 @@ export function deriveExitCode(status) {
83
83
  }
84
84
  return ExitCode.Success;
85
85
  }
86
+ export function deriveSuggestedNextSteps(checks) {
87
+ const blockingFailures = checks.filter((check) => check.severity === 'blocking' && (check.status === 'fail' || check.status === 'error'));
88
+ if (blockingFailures.length > 0) {
89
+ return [
90
+ {
91
+ kind: 'fix',
92
+ summary: `Fix blocking checks before updating baselines: ${formatCheckList(blockingFailures)}.`
93
+ }
94
+ ];
95
+ }
96
+ const missingBaselines = checks.filter((check) => check.suite === 'visual' && check.severity === 'review' && check.metadata.classification === 'missing-baseline');
97
+ if (missingBaselines.length > 0) {
98
+ return [
99
+ {
100
+ kind: 'baseline',
101
+ summary: 'Review actual screenshots for missing baselines, then run `reflection update --dry-run --case <caseId> --from-run latest` for intentional first baselines.'
102
+ }
103
+ ];
104
+ }
105
+ const visualReviewItems = checks.filter((check) => check.suite === 'visual' && check.severity === 'review' && (check.status === 'warn' || check.status === 'fail'));
106
+ if (visualReviewItems.length > 0) {
107
+ return [
108
+ {
109
+ kind: 'review',
110
+ summary: 'Inspect review-only visual artifacts, then run `reflection update --dry-run --case <caseId> --from-run latest` for intentional route visual changes.'
111
+ }
112
+ ];
113
+ }
114
+ const reviewItems = checks.filter((check) => check.severity === 'review' && (check.status === 'warn' || check.status === 'fail'));
115
+ if (reviewItems.length > 0) {
116
+ return [
117
+ {
118
+ kind: 'review',
119
+ summary: `Inspect review-only checks: ${formatCheckList(reviewItems)}.`
120
+ }
121
+ ];
122
+ }
123
+ return [{ kind: 'pass', summary: 'No action required; expand route or visual coverage when useful.' }];
124
+ }
86
125
  export function validateReport(report) {
87
126
  const parsed = ReflectionReportSchema.safeParse(report);
88
127
  if (!parsed.success) {
@@ -106,7 +145,14 @@ export function createReport(input) {
106
145
  summary: summarizeChecks(input.checks),
107
146
  checks: input.checks,
108
147
  artifacts: input.artifacts ?? [],
109
- suggestedNextSteps: input.suggestedNextSteps ?? []
148
+ suggestedNextSteps: input.suggestedNextSteps ?? deriveSuggestedNextSteps(input.checks)
110
149
  });
111
150
  }
151
+ function formatCheckList(checks) {
152
+ const ids = checks.map((check) => check.id);
153
+ if (ids.length <= 3) {
154
+ return ids.join(', ');
155
+ }
156
+ return `${ids.slice(0, 3).join(', ')} and ${ids.length - 3} more`;
157
+ }
112
158
  //# sourceMappingURL=report-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-schema.js","sourceRoot":"","sources":["../../src/core/report-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-schema.js","sourceRoot":"","sources":["../../src/core/report-schema.ts"],"names":[],"mappings":"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"}
@@ -7,21 +7,29 @@ Reflection is meant to give agents an evidence gate for rendered UI work. Agents
7
7
  Before claiming frontend work is complete:
8
8
 
9
9
  ```bash
10
- reflection doctor
10
+ reflection doctor --config reflection.config.ts
11
11
  reflection run --config reflection.config.ts --mode smoke
12
12
  reflection review --json
13
13
  ```
14
14
 
15
- `reflection doctor` is currently a lightweight setup check. Treat `reflection run --config ...` as the command that exercises project contracts.
15
+ `reflection doctor --config` validates config loading/schema, summarizes enabled contracts and server settings, checks local runtime readiness, and remains read-only.
16
16
 
17
17
  If the project uses a non-default config path or report root, pass it explicitly:
18
18
 
19
19
  ```bash
20
- reflection doctor
20
+ reflection doctor --config path/to/reflection.config.ts
21
21
  reflection run --config path/to/reflection.config.ts --mode smoke --report-dir .reflection
22
22
  reflection review --report-dir .reflection --json
23
23
  ```
24
24
 
25
+ For first-time setup discovery, agents may run the read-only preview:
26
+
27
+ ```bash
28
+ reflection init --dry-run --preset vite-react
29
+ ```
30
+
31
+ The init command currently previews proposed config and scripts only. Do not assume it wrote files, and do not run any future write mode without explicit human approval.
32
+
25
33
  ## How to interpret review JSON
26
34
 
27
35
  Treat the review summary as the handoff contract:
@@ -100,7 +108,7 @@ Use Reflection as the UI evidence gate before claiming frontend work is complete
100
108
  Run:
101
109
 
102
110
  ```bash
103
- reflection doctor
111
+ reflection doctor --config reflection.config.ts
104
112
  reflection run --config reflection.config.ts --mode smoke
105
113
  reflection review --json
106
114
  ```
@@ -121,7 +129,7 @@ Full protocol: `docs/validation-process.md`.
121
129
  CI should run Reflection and upload artifacts, but never update baselines:
122
130
 
123
131
  ```bash
124
- reflection doctor
132
+ reflection doctor --config reflection.config.ts
125
133
  reflection run --ci --config reflection.config.ts --mode smoke
126
134
  reflection review --report-dir artifacts/reflection --json
127
135
  ```
@@ -30,12 +30,22 @@ browser: {
30
30
  reuseExisting: true,
31
31
  timeoutMs: 60_000
32
32
  },
33
+ setup: {
34
+ localStorage: {
35
+ 'reflection:test-mode': 'enabled'
36
+ }
37
+ },
33
38
  maskSelectors: ['[data-reflection-mask]'],
34
39
  routes: [
35
40
  {
36
41
  id: 'login',
37
42
  path: '/login',
38
43
  viewports: ['desktop', 'mobile'],
44
+ setup: {
45
+ sessionStorage: {
46
+ 'reflection:login-state': 'ready'
47
+ }
48
+ },
39
49
  expects: [
40
50
  { role: 'heading', name: 'Login' },
41
51
  { label: 'Email' },
@@ -51,6 +61,27 @@ browser: {
51
61
  }
52
62
  ```
53
63
 
64
+ ## Route setup for authenticated fixtures
65
+
66
+ Use `setup.localStorage` and `setup.sessionStorage` to seed non-secret test state before Reflection navigates to a route:
67
+
68
+ ```ts
69
+ routes: [
70
+ {
71
+ id: 'authenticated-home',
72
+ path: '/',
73
+ setup: {
74
+ localStorage: {
75
+ 'reflection:test-user': 'fixture-user'
76
+ }
77
+ },
78
+ expects: [{ text: 'Welcome fixture-user' }]
79
+ }
80
+ ]
81
+ ```
82
+
83
+ Browser-level setup applies to every route, and route-level setup extends or overrides it. Reflection records only setup key names in metadata so reports show that setup ran without logging values. Keep real credentials and production session values out of committed config; prefer test-mode auth or mock fixture tokens.
84
+
54
85
  ## Expectations
55
86
 
56
87
  | Expectation | Use for |
package/docs/ci.md CHANGED
@@ -4,8 +4,18 @@ Reflection is designed to be safe in CI: runs create evidence artifacts, but the
4
4
 
5
5
  ## Recommended command
6
6
 
7
+ Install Reflection in the consuming repository:
8
+
9
+ ```bash
10
+ pnpm add -D reflection-check
11
+ ```
12
+
13
+ Then run the CI evidence loop:
14
+
7
15
  ```bash
16
+ reflection doctor --config reflection.config.ts
8
17
  reflection run --ci --config reflection.config.ts --mode smoke
18
+ reflection review --report-dir artifacts/reflection --json
9
19
  ```
10
20
 
11
21
  When `--ci` is enabled and `--report-dir` is not provided, Reflection writes artifacts to:
@@ -41,4 +51,4 @@ artifacts/reflection/runs/latest
41
51
 
42
52
  ## GitHub Actions example
43
53
 
44
- See `.github/workflows/reflection.yml` for a repo-owned example that installs dependencies, builds Reflection, runs `reflection run --ci`, and uploads `artifacts/reflection` for review.
54
+ See `.github/workflows/reflection.yml` for a repo-owned example that installs dependencies, builds Reflection, runs `reflection run --ci`, reviews `artifacts/reflection`, and uploads the report root for inspection.
@@ -59,6 +59,11 @@ browser: {
59
59
  reuseExisting: true,
60
60
  timeoutMs: 60_000
61
61
  },
62
+ setup: {
63
+ localStorage: {
64
+ 'reflection:test-mode': 'enabled'
65
+ }
66
+ },
62
67
  maskSelectors: ['[data-reflection-mask]'],
63
68
  routes: [
64
69
  {
@@ -66,6 +71,11 @@ browser: {
66
71
  name: 'Home route',
67
72
  path: '/',
68
73
  viewports: ['desktop', 'mobile'],
74
+ setup: {
75
+ sessionStorage: {
76
+ 'reflection:route-state': 'ready'
77
+ }
78
+ },
69
79
  expects: [
70
80
  { role: 'heading', name: 'Home' },
71
81
  { noHorizontalOverflow: true },
@@ -96,10 +106,26 @@ Browser fields:
96
106
  | `blocking` | Defaults to `true`; route assertion failures are blocking unless configured otherwise by current runner behavior. |
97
107
  | `baseUrl` | Absolute URL used to visit route paths. |
98
108
  | `server` | Optional managed server. If omitted, Reflection assumes `baseUrl` is already reachable. |
109
+ | `setup` | Optional browser-level storage setup applied before route navigation. Values are not written to report metadata. |
99
110
  | `maskSelectors` | Selectors masked in browser screenshots. |
100
111
  | `routes` | Route assertions executed in `smoke` and `full` modes. |
101
112
  | `visualSmoke` | Route screenshot baseline comparisons driven from successful browser screenshots. |
102
113
 
114
+ Route setup fields:
115
+
116
+ ```ts
117
+ setup: {
118
+ localStorage: {
119
+ 'reflection:test-user': 'fixture-user'
120
+ },
121
+ sessionStorage: {
122
+ 'reflection:test-session': 'fixture-session'
123
+ }
124
+ }
125
+ ```
126
+
127
+ Browser-level setup applies to every route. Route-level setup extends or overrides browser-level keys for that route. Reflection records only storage key names in metadata, never storage values. Use this for non-secret test-mode state, mock auth, or local fixture tokens. Do not commit real credentials or production session values in config.
128
+
103
129
  Supported browser expectations:
104
130
 
105
131
  ```ts
@@ -20,6 +20,14 @@ pnpm exec reflection doctor
20
20
 
21
21
  The package install exposes both `reflection` and `reflection-check` binaries. The docs use `reflection` as the primary command.
22
22
 
23
+ You can preview the setup Reflection would suggest without writing files:
24
+
25
+ ```bash
26
+ pnpm exec reflection init --dry-run --preset vite-react
27
+ ```
28
+
29
+ `init --dry-run` prints proposed install commands, config, and script guidance. It is read-only; creating or updating files still happens manually.
30
+
23
31
  For local tarball testing before a registry publish, create and install a packed artifact instead.
24
32
 
25
33
  From the Reflection repository:
@@ -84,18 +92,24 @@ reflection run --config reflection.config.ts --mode smoke
84
92
  reflection review --latest
85
93
  ```
86
94
 
95
+ Pass the config to `doctor` when you want a read-only preflight of the consuming repository setup:
96
+
97
+ ```bash
98
+ reflection doctor --config reflection.config.ts
99
+ ```
100
+
87
101
  During Reflection development, use the built CLI:
88
102
 
89
103
  ```bash
90
104
  pnpm build
91
- node dist/cli.js doctor
105
+ node dist/cli.js doctor --config examples/basic-react/reflection.config.ts
92
106
  node dist/cli.js run --config examples/basic-react/reflection.config.ts --mode smoke
93
107
  node dist/cli.js review --latest
94
108
  ```
95
109
 
96
110
  `reflection run` writes reports and artifacts under `.reflection/runs/<run-id>/` by default.
97
111
 
98
- `reflection doctor` is currently a lightweight setup check. The configured project contract is exercised by `reflection run --config reflection.config.ts ...`.
112
+ `reflection doctor --config` validates that the config can be loaded, summarizes enabled contracts and server settings, checks local runtime readiness, and does not start servers or mutate baselines. Use `--check-server` when you explicitly want it to probe the configured server `readyUrl` without starting the server.
99
113
 
100
114
  Important files:
101
115
 
@@ -147,7 +161,7 @@ Use Reflection as the UI evidence gate before claiming frontend work is complete
147
161
  Run:
148
162
 
149
163
  ```bash
150
- reflection doctor
164
+ reflection doctor --config reflection.config.ts
151
165
  reflection run --config reflection.config.ts --mode smoke
152
166
  reflection review --json
153
167
  ```