@growth-labs/conformance 0.1.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.
- package/CHANGELOG.md +14 -0
- package/README.md +118 -0
- package/dist/html.d.ts +24 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +138 -0
- package/dist/html.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/policy.d.ts +18 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +72 -0
- package/dist/policy.js.map +1 -0
- package/dist/runner.d.ts +7 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +382 -0
- package/dist/runner.js.map +1 -0
- package/dist/schema.d.ts +878 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +129 -0
- package/dist/schema.js.map +1 -0
- package/fixtures/negative/required-negative-fixtures.json +132 -0
- package/fixtures/valid/public-article.json +76 -0
- package/package.json +48 -0
- package/src/html.ts +175 -0
- package/src/index.ts +51 -0
- package/src/policy.ts +97 -0
- package/src/runner.ts +477 -0
- package/src/schema.ts +165 -0
package/dist/runner.js
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { extractHtmlSignals, getSchemaTypes, nodeHasSchemaType } from './html.js';
|
|
2
|
+
import { isPrivateAudience, normalizeHeaders, REQUIRED_SECURITY_HEADERS } from './policy.js';
|
|
3
|
+
import { conformanceFixtureSchema, EVIDENCE_SCHEMA_VERSION, fleetEvidenceBundleSchema, siteEvidenceBundleSchema, } from './schema.js';
|
|
4
|
+
const REQUIRED_PUBLICATION_SURFACES = ['sitemap', 'robots', 'feed'];
|
|
5
|
+
const DISCOVER_HERO_MIN_WIDTH = 1200;
|
|
6
|
+
export function runSiteConformance(input, options = {}) {
|
|
7
|
+
const fixture = conformanceFixtureSchema.parse(input);
|
|
8
|
+
const generatedAt = options.now?.() ?? new Date().toISOString();
|
|
9
|
+
const htmlSignals = extractHtmlSignals(fixture.response.html ?? fixture.response.body ?? '');
|
|
10
|
+
const checks = [
|
|
11
|
+
checkSecurityHeaders(fixture),
|
|
12
|
+
checkMetadata(fixture, htmlSignals),
|
|
13
|
+
checkStructuredData(fixture, htmlSignals),
|
|
14
|
+
checkImages(fixture, htmlSignals),
|
|
15
|
+
checkPublicationSurfaces(fixture),
|
|
16
|
+
checkCache(fixture),
|
|
17
|
+
checkBuildEvidence(fixture),
|
|
18
|
+
];
|
|
19
|
+
const findings = checks.flatMap((check) => check.findings);
|
|
20
|
+
const summary = summarizeChecks(checks);
|
|
21
|
+
const bundle = {
|
|
22
|
+
schemaVersion: EVIDENCE_SCHEMA_VERSION,
|
|
23
|
+
generatedAt,
|
|
24
|
+
fixtureId: fixture.id,
|
|
25
|
+
site: fixture.site,
|
|
26
|
+
environment: fixture.environment,
|
|
27
|
+
url: fixture.url,
|
|
28
|
+
status: findings.some((finding) => finding.severity === 'error') ? 'fail' : 'pass',
|
|
29
|
+
summary,
|
|
30
|
+
checks,
|
|
31
|
+
findings,
|
|
32
|
+
};
|
|
33
|
+
return siteEvidenceBundleSchema.parse(bundle);
|
|
34
|
+
}
|
|
35
|
+
export function runFleetConformance(inputs, options = {}) {
|
|
36
|
+
const generatedAt = options.now?.() ?? new Date().toISOString();
|
|
37
|
+
const sites = inputs.map((input) => runSiteConformance(input, { now: () => generatedAt }));
|
|
38
|
+
const summary = sites.reduce((acc, site) => {
|
|
39
|
+
acc.pass += site.summary.pass;
|
|
40
|
+
acc.fail += site.summary.fail;
|
|
41
|
+
acc.na += site.summary.na;
|
|
42
|
+
acc.findings += site.summary.findings;
|
|
43
|
+
return acc;
|
|
44
|
+
}, { pass: 0, fail: 0, na: 0, findings: 0, sites: sites.length });
|
|
45
|
+
const bundle = {
|
|
46
|
+
schemaVersion: EVIDENCE_SCHEMA_VERSION,
|
|
47
|
+
generatedAt,
|
|
48
|
+
status: sites.some((site) => site.status === 'fail') ? 'fail' : 'pass',
|
|
49
|
+
summary,
|
|
50
|
+
sites,
|
|
51
|
+
};
|
|
52
|
+
return fleetEvidenceBundleSchema.parse(bundle);
|
|
53
|
+
}
|
|
54
|
+
function checkSecurityHeaders(fixture) {
|
|
55
|
+
const headers = normalizeHeaders(fixture.response.headers);
|
|
56
|
+
const findings = [];
|
|
57
|
+
const missingSecurityHeaders = REQUIRED_SECURITY_HEADERS.filter((name) => !headers[name]);
|
|
58
|
+
if (fixture.renderMode === 'ssr' &&
|
|
59
|
+
fixture.buildEvidence?.staticHeaderPolicy === true &&
|
|
60
|
+
fixture.buildEvidence.ssrHeaderPolicy !== true &&
|
|
61
|
+
missingSecurityHeaders.length > 0) {
|
|
62
|
+
findings.push({
|
|
63
|
+
code: 'security.headers.static_only_for_ssr',
|
|
64
|
+
severity: 'error',
|
|
65
|
+
message: 'SSR response is missing runtime security headers while build evidence only declares static header policy.',
|
|
66
|
+
path: 'response.headers',
|
|
67
|
+
evidence: `missing=${missingSecurityHeaders.join(',')}`,
|
|
68
|
+
remediation: 'Apply the shared header policy in the Worker response path as well as static output.',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
for (const header of missingSecurityHeaders) {
|
|
72
|
+
findings.push({
|
|
73
|
+
code: 'security.header.missing',
|
|
74
|
+
severity: 'error',
|
|
75
|
+
message: `Missing required security header: ${header}.`,
|
|
76
|
+
path: `response.headers.${header}`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const csp = headers['content-security-policy'];
|
|
80
|
+
if (csp?.toLowerCase().includes('unsafe-inline')) {
|
|
81
|
+
findings.push({
|
|
82
|
+
code: 'security.csp.unsafe_inline',
|
|
83
|
+
severity: 'error',
|
|
84
|
+
message: 'Content-Security-Policy must not allow unsafe-inline script or style execution.',
|
|
85
|
+
path: 'response.headers.content-security-policy',
|
|
86
|
+
evidence: csp,
|
|
87
|
+
remediation: 'Use nonces or hashes in the shared CSP policy instead of unsafe-inline.',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const xContentType = headers['x-content-type-options'];
|
|
91
|
+
if (xContentType && xContentType.toLowerCase() !== 'nosniff') {
|
|
92
|
+
findings.push({
|
|
93
|
+
code: 'security.header.invalid',
|
|
94
|
+
severity: 'error',
|
|
95
|
+
message: 'X-Content-Type-Options must be nosniff.',
|
|
96
|
+
path: 'response.headers.x-content-type-options',
|
|
97
|
+
evidence: xContentType,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const hsts = headers['strict-transport-security'];
|
|
101
|
+
if (hsts && !/max-age=\d+/i.test(hsts)) {
|
|
102
|
+
findings.push({
|
|
103
|
+
code: 'security.header.invalid',
|
|
104
|
+
severity: 'error',
|
|
105
|
+
message: 'Strict-Transport-Security must declare max-age.',
|
|
106
|
+
path: 'response.headers.strict-transport-security',
|
|
107
|
+
evidence: hsts,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const cacheControl = headers['cache-control'];
|
|
111
|
+
if (!cacheControl) {
|
|
112
|
+
findings.push({
|
|
113
|
+
code: 'cache.header.missing',
|
|
114
|
+
severity: 'error',
|
|
115
|
+
message: 'HTML responses must declare Cache-Control semantics.',
|
|
116
|
+
path: 'response.headers.cache-control',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else if (isPrivateAudience(fixture.audience) && /\bpublic\b/i.test(cacheControl)) {
|
|
120
|
+
findings.push({
|
|
121
|
+
code: 'cache.private_audience_public',
|
|
122
|
+
severity: 'error',
|
|
123
|
+
message: 'Private or entitled audience responses must not use public cache semantics.',
|
|
124
|
+
path: 'response.headers.cache-control',
|
|
125
|
+
evidence: cacheControl,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return receipt('security-headers', findings);
|
|
129
|
+
}
|
|
130
|
+
function checkMetadata(fixture, htmlSignals) {
|
|
131
|
+
const findings = [];
|
|
132
|
+
if (!htmlSignals.canonicalUrl) {
|
|
133
|
+
findings.push({
|
|
134
|
+
code: 'metadata.canonical.missing',
|
|
135
|
+
severity: 'error',
|
|
136
|
+
message: 'Renderable HTML must include a canonical link.',
|
|
137
|
+
path: 'html.head.link[rel=canonical]',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else if (fixture.expected.canonicalUrl &&
|
|
141
|
+
htmlSignals.canonicalUrl !== fixture.expected.canonicalUrl) {
|
|
142
|
+
findings.push({
|
|
143
|
+
code: 'metadata.canonical.runtime_override_not_applied',
|
|
144
|
+
severity: 'error',
|
|
145
|
+
message: 'Rendered canonical URL does not match the runtime canonical override.',
|
|
146
|
+
path: 'html.head.link[rel=canonical].href',
|
|
147
|
+
evidence: `expected=${fixture.expected.canonicalUrl}; actual=${htmlSignals.canonicalUrl}`,
|
|
148
|
+
remediation: 'Apply runtime canonical composition before rendering metadata.',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const robots = htmlSignals.robotsContent;
|
|
152
|
+
const robotsDirectives = robots
|
|
153
|
+
?.toLowerCase()
|
|
154
|
+
.split(',')
|
|
155
|
+
.map((part) => part.trim()) ?? [];
|
|
156
|
+
if (!robotsDirectives.includes('max-image-preview:large')) {
|
|
157
|
+
findings.push({
|
|
158
|
+
code: 'metadata.robots.missing_max_image_preview_large',
|
|
159
|
+
severity: 'error',
|
|
160
|
+
message: 'Robots metadata must include max-image-preview:large for Discover eligibility.',
|
|
161
|
+
path: 'html.head.meta[name=robots].content',
|
|
162
|
+
evidence: robots ?? 'missing',
|
|
163
|
+
remediation: 'Compose robots metadata globally with max-image-preview:large.',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return receipt('metadata', findings);
|
|
167
|
+
}
|
|
168
|
+
function checkStructuredData(fixture, htmlSignals) {
|
|
169
|
+
const findings = htmlSignals.jsonLdParseErrors.map((error) => ({
|
|
170
|
+
code: 'structured_data.json_ld.invalid',
|
|
171
|
+
severity: 'error',
|
|
172
|
+
message: `Invalid JSON-LD: ${error.message}`,
|
|
173
|
+
path: error.path,
|
|
174
|
+
}));
|
|
175
|
+
const allTypes = new Set(htmlSignals.jsonLdNodes.flatMap((node) => getSchemaTypes(node)));
|
|
176
|
+
for (const expectedType of fixture.expected.schemaTypes) {
|
|
177
|
+
if (!allTypes.has(expectedType)) {
|
|
178
|
+
findings.push({
|
|
179
|
+
code: 'structured_data.schema_type.missing',
|
|
180
|
+
severity: 'error',
|
|
181
|
+
message: `Expected JSON-LD schema type ${expectedType} was not rendered.`,
|
|
182
|
+
path: 'jsonLd.@type',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
htmlSignals.jsonLdNodes.forEach((node, index) => {
|
|
187
|
+
if ((nodeHasSchemaType(node, 'Article') ||
|
|
188
|
+
nodeHasSchemaType(node, 'NewsArticle') ||
|
|
189
|
+
nodeHasSchemaType(node, 'VideoObject')) &&
|
|
190
|
+
typeof node.isAccessibleForFree === 'string') {
|
|
191
|
+
findings.push({
|
|
192
|
+
code: 'structured_data.is_accessible_for_free.stringified',
|
|
193
|
+
severity: 'error',
|
|
194
|
+
message: 'isAccessibleForFree must be a boolean, not a string.',
|
|
195
|
+
path: `jsonLd[${index}].isAccessibleForFree`,
|
|
196
|
+
evidence: node.isAccessibleForFree,
|
|
197
|
+
remediation: 'Return structured data objects with boolean values before serialization.',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (nodeHasSchemaType(node, 'VideoObject') && isDateOnlyString(node.uploadDate)) {
|
|
201
|
+
findings.push({
|
|
202
|
+
code: 'structured_data.video_object.upload_date.date_only',
|
|
203
|
+
severity: 'error',
|
|
204
|
+
message: 'VideoObject uploadDate must include a full ISO date-time with timezone.',
|
|
205
|
+
path: `jsonLd[${index}].uploadDate`,
|
|
206
|
+
evidence: String(node.uploadDate),
|
|
207
|
+
remediation: 'Use an ISO 8601 date-time such as 2026-07-15T14:30:00Z.',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return receipt('structured-data', findings);
|
|
212
|
+
}
|
|
213
|
+
function checkImages(fixture, htmlSignals) {
|
|
214
|
+
const findings = [];
|
|
215
|
+
const images = htmlSignals.jsonLdImages;
|
|
216
|
+
if (fixture.expected.discoverEligible && images.length === 0) {
|
|
217
|
+
findings.push({
|
|
218
|
+
code: 'images.discover_image.missing',
|
|
219
|
+
severity: 'error',
|
|
220
|
+
message: 'Discover-eligible pages must expose structured image data.',
|
|
221
|
+
path: 'jsonLd.image',
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
for (const image of images) {
|
|
225
|
+
if (image.width === undefined || image.height === undefined) {
|
|
226
|
+
findings.push({
|
|
227
|
+
code: 'images.dimensions.missing',
|
|
228
|
+
severity: 'error',
|
|
229
|
+
message: 'Structured image objects must include width and height.',
|
|
230
|
+
path: image.path,
|
|
231
|
+
evidence: image.url,
|
|
232
|
+
remediation: 'Return JSON-LD image objects with url, width, and height.',
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const measuredWidths = images
|
|
237
|
+
.map((image) => image.width)
|
|
238
|
+
.filter((width) => typeof width === 'number');
|
|
239
|
+
if (fixture.expected.discoverEligible &&
|
|
240
|
+
measuredWidths.length > 0 &&
|
|
241
|
+
Math.max(...measuredWidths) < DISCOVER_HERO_MIN_WIDTH) {
|
|
242
|
+
findings.push({
|
|
243
|
+
code: 'images.hero.under_1200',
|
|
244
|
+
severity: 'error',
|
|
245
|
+
message: 'Discover-eligible hero image width must be at least 1200px.',
|
|
246
|
+
path: 'jsonLd.image',
|
|
247
|
+
evidence: `maxWidth=${Math.max(...measuredWidths)}`,
|
|
248
|
+
remediation: 'Provide a 1200px or larger image variant in JSON-LD and social metadata.',
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return receipt('images', findings);
|
|
252
|
+
}
|
|
253
|
+
function checkPublicationSurfaces(fixture) {
|
|
254
|
+
const findings = [];
|
|
255
|
+
const surfacesByName = new Map(fixture.publicationSurfaces.map((surface) => [surface.name, surface]));
|
|
256
|
+
for (const required of REQUIRED_PUBLICATION_SURFACES) {
|
|
257
|
+
if (!surfacesByName.has(required)) {
|
|
258
|
+
findings.push({
|
|
259
|
+
code: 'publication.surface.missing',
|
|
260
|
+
severity: 'error',
|
|
261
|
+
message: `Publication surface ${required} must be present or explicitly declared NA.`,
|
|
262
|
+
path: `publicationSurfaces.${required}`,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
fixture.publicationSurfaces.forEach((surface, index) => {
|
|
267
|
+
const path = `publicationSurfaces[${index}]`;
|
|
268
|
+
if (surface.status === 'na') {
|
|
269
|
+
if (!surface.capabilityBoundary || !surface.evidence) {
|
|
270
|
+
findings.push({
|
|
271
|
+
code: 'publication.na.undeclared',
|
|
272
|
+
severity: 'error',
|
|
273
|
+
message: 'NA publication surfaces require a capability boundary and evidence.',
|
|
274
|
+
path,
|
|
275
|
+
evidence: surface.name,
|
|
276
|
+
remediation: 'Declare why the site cannot provide the surface and attach supporting evidence.',
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (surface.status === 'missing') {
|
|
282
|
+
findings.push({
|
|
283
|
+
code: 'publication.surface.missing',
|
|
284
|
+
severity: 'error',
|
|
285
|
+
message: `Publication surface ${surface.name} is missing.`,
|
|
286
|
+
path,
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (surface.httpStatus !== undefined && surface.httpStatus >= 400) {
|
|
291
|
+
findings.push({
|
|
292
|
+
code: 'publication.surface.http_error',
|
|
293
|
+
severity: 'error',
|
|
294
|
+
message: `Publication surface ${surface.name} returned HTTP ${surface.httpStatus}.`,
|
|
295
|
+
path: `${path}.httpStatus`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
if (surface.bodyBytes !== undefined && surface.bodyBytes === 0) {
|
|
299
|
+
findings.push({
|
|
300
|
+
code: 'publication.surface.empty',
|
|
301
|
+
severity: 'error',
|
|
302
|
+
message: `Publication surface ${surface.name} has an empty body.`,
|
|
303
|
+
path: `${path}.bodyBytes`,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
return receipt('publication-surfaces', findings);
|
|
308
|
+
}
|
|
309
|
+
function checkCache(fixture) {
|
|
310
|
+
const findings = [];
|
|
311
|
+
const variants = fixture.cacheVariants;
|
|
312
|
+
for (let leftIndex = 0; leftIndex < variants.length; leftIndex += 1) {
|
|
313
|
+
for (let rightIndex = leftIndex + 1; rightIndex < variants.length; rightIndex += 1) {
|
|
314
|
+
const left = variants[leftIndex];
|
|
315
|
+
const right = variants[rightIndex];
|
|
316
|
+
if (!left || !right || left.cacheKey !== right.cacheKey)
|
|
317
|
+
continue;
|
|
318
|
+
if (isCrawlerPublicCollision(left.audience, right.audience)) {
|
|
319
|
+
findings.push({
|
|
320
|
+
code: 'cache.crawler_public_key_collision',
|
|
321
|
+
severity: 'error',
|
|
322
|
+
message: 'Crawler and public HTML variants must not share a cache key.',
|
|
323
|
+
path: `cacheVariants[${leftIndex}],cacheVariants[${rightIndex}]`,
|
|
324
|
+
evidence: left.cacheKey,
|
|
325
|
+
remediation: 'Include audience/crawler class in cache keys when content or headers differ.',
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return receipt('cache', findings);
|
|
331
|
+
}
|
|
332
|
+
function checkBuildEvidence(fixture) {
|
|
333
|
+
const findings = [];
|
|
334
|
+
const buildEvidence = fixture.buildEvidence;
|
|
335
|
+
if (!buildEvidence) {
|
|
336
|
+
findings.push({
|
|
337
|
+
code: 'build.evidence.missing',
|
|
338
|
+
severity: 'error',
|
|
339
|
+
message: 'Conformance fixtures must include build evidence.',
|
|
340
|
+
path: 'buildEvidence',
|
|
341
|
+
});
|
|
342
|
+
return receipt('build-evidence', findings);
|
|
343
|
+
}
|
|
344
|
+
if (!buildEvidence.commitSha && !buildEvidence.artifactId) {
|
|
345
|
+
findings.push({
|
|
346
|
+
code: 'build.evidence.identity_missing',
|
|
347
|
+
severity: 'error',
|
|
348
|
+
message: 'Build evidence must include a commit SHA or artifact identifier.',
|
|
349
|
+
path: 'buildEvidence',
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
if (Object.keys(buildEvidence.packageVersions).length === 0) {
|
|
353
|
+
findings.push({
|
|
354
|
+
code: 'build.evidence.package_versions_missing',
|
|
355
|
+
severity: 'error',
|
|
356
|
+
message: 'Build evidence must include package versions used by the site.',
|
|
357
|
+
path: 'buildEvidence.packageVersions',
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
return receipt('build-evidence', findings);
|
|
361
|
+
}
|
|
362
|
+
function summarizeChecks(checks) {
|
|
363
|
+
return checks.reduce((acc, check) => {
|
|
364
|
+
acc[check.status] += 1;
|
|
365
|
+
acc.findings += check.findings.length;
|
|
366
|
+
return acc;
|
|
367
|
+
}, { pass: 0, fail: 0, na: 0, findings: 0 });
|
|
368
|
+
}
|
|
369
|
+
function receipt(name, findings) {
|
|
370
|
+
return {
|
|
371
|
+
name,
|
|
372
|
+
status: findings.some((finding) => finding.severity === 'error') ? 'fail' : 'pass',
|
|
373
|
+
findings,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function isDateOnlyString(value) {
|
|
377
|
+
return typeof value === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(value);
|
|
378
|
+
}
|
|
379
|
+
function isCrawlerPublicCollision(left, right) {
|
|
380
|
+
return (left === 'crawler' && right === 'public') || (left === 'public' && right === 'crawler');
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|