@brandlab-digital/conformance 1.0.0-rc.20 → 1.0.0-rc.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"release-contract-compatibility.js","sourceRoot":"","sources":["../src/release-contract-compatibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release-contract-compatibility.js","sourceRoot":"","sources":["../src/release-contract-compatibility.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,38 @@
1
1
  export interface RenderedContentSample {
2
2
  id: string;
3
3
  mainText: string;
4
+ /**
5
+ * Page-specific values such as a suburb or council name. These are used only
6
+ * to detect pages that are otherwise exact token substitutions.
7
+ */
8
+ variationTokens?: readonly string[];
4
9
  }
5
10
  export interface RenderedContentSimilarityOptions {
6
11
  warningThreshold?: number;
12
+ /** @deprecated Similarity is diagnostic and never blocks verification. */
7
13
  blockerThreshold?: number;
8
14
  shingleSize?: number;
15
+ /** Limits the diagnostic comparison set deterministically. */
16
+ sampleLimit?: number;
9
17
  }
10
18
  export interface RenderedContentSimilarityFinding {
11
19
  leftId: string;
12
20
  rightId: string;
13
21
  score: number;
14
- severity: 'warning' | 'blocker';
22
+ severity: 'warning';
15
23
  }
24
+ export interface RenderedContentDuplicateFinding {
25
+ leftId: string;
26
+ rightId: string;
27
+ kind: 'exact-duplicate' | 'token-substitution';
28
+ severity: 'blocker';
29
+ }
30
+ export declare function normalizeRenderedContent(value: string): string;
31
+ /**
32
+ * Operational duplicate protection. This deliberately blocks only exact
33
+ * copied output and explicit location-token substitutions.
34
+ */
35
+ export declare function evaluateRenderedContentDuplicates(samples: readonly RenderedContentSample[]): RenderedContentDuplicateFinding[];
16
36
  export declare function fiveWordShingleSimilarity(left: string, right: string): number;
17
37
  export declare function evaluateRenderedContentSimilarity(samples: readonly RenderedContentSample[], options?: RenderedContentSimilarityOptions): RenderedContentSimilarityFinding[];
18
38
  //# sourceMappingURL=rendered-content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rendered-content.d.ts","sourceRoot":"","sources":["../src/rendered-content.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAA;CAChC;AAoBD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAYpE;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,gCAAqC,sCA8D/C"}
1
+ {"version":3,"file":"rendered-content.d.ts","sourceRoot":"","sources":["../src/rendered-content.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,gCAAgC;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CAAA;IAC9C,QAAQ,EAAE,SAAS,CAAA;CACpB;AAWD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,UAErD;AA4BD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,SAAS,qBAAqB,EAAE,qCAiD1C;AAWD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAYpE;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,gCAAqC,sCAgE/C"}
@@ -6,6 +6,71 @@ function normalizedWords(value) {
6
6
  .split(/\s+/)
7
7
  .filter(Boolean);
8
8
  }
9
+ export function normalizeRenderedContent(value) {
10
+ return normalizedWords(value).join(' ');
11
+ }
12
+ function assertUniqueSampleIds(samples) {
13
+ const duplicateId = samples.find((sample, index) => samples.slice(0, index).some((candidate) => candidate.id === sample.id));
14
+ if (duplicateId) {
15
+ throw new Error(`Rendered-content sample ID "${duplicateId.id}" is duplicated.`);
16
+ }
17
+ }
18
+ function normalizeWithoutVariationTokens(sample) {
19
+ let normalized = normalizeRenderedContent(sample.mainText);
20
+ const tokens = [...(sample.variationTokens ?? [])]
21
+ .map(normalizeRenderedContent)
22
+ .filter(Boolean)
23
+ .sort((left, right) => right.length - left.length);
24
+ for (const token of tokens) {
25
+ const escaped = token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
26
+ normalized = normalized.replace(new RegExp(`(?:^|\\s)${escaped}(?=\\s|$)`, 'g'), ' location');
27
+ }
28
+ return normalized.trim().replace(/\s+/g, ' ');
29
+ }
30
+ /**
31
+ * Operational duplicate protection. This deliberately blocks only exact
32
+ * copied output and explicit location-token substitutions.
33
+ */
34
+ export function evaluateRenderedContentDuplicates(samples) {
35
+ assertUniqueSampleIds(samples);
36
+ const prepared = samples.map((sample) => ({
37
+ ...sample,
38
+ normalized: normalizeRenderedContent(sample.mainText),
39
+ withoutVariationTokens: normalizeWithoutVariationTokens(sample),
40
+ }));
41
+ const findings = [];
42
+ for (let leftIndex = 0; leftIndex < prepared.length; leftIndex += 1) {
43
+ const left = prepared[leftIndex];
44
+ if (!left.normalized)
45
+ continue;
46
+ for (let rightIndex = leftIndex + 1; rightIndex < prepared.length; rightIndex += 1) {
47
+ const right = prepared[rightIndex];
48
+ if (!right.normalized)
49
+ continue;
50
+ if (left.normalized === right.normalized) {
51
+ findings.push({
52
+ leftId: left.id,
53
+ rightId: right.id,
54
+ kind: 'exact-duplicate',
55
+ severity: 'blocker',
56
+ });
57
+ continue;
58
+ }
59
+ if (left.variationTokens?.length &&
60
+ right.variationTokens?.length &&
61
+ left.withoutVariationTokens === right.withoutVariationTokens) {
62
+ findings.push({
63
+ leftId: left.id,
64
+ rightId: right.id,
65
+ kind: 'token-substitution',
66
+ severity: 'blocker',
67
+ });
68
+ }
69
+ }
70
+ }
71
+ return findings.sort((left, right) => left.leftId.localeCompare(right.leftId) ||
72
+ left.rightId.localeCompare(right.rightId));
73
+ }
9
74
  function shingles(value, size) {
10
75
  const words = normalizedWords(value);
11
76
  const values = new Set();
@@ -33,6 +98,7 @@ export function evaluateRenderedContentSimilarity(samples, options = {}) {
33
98
  const warningThreshold = options.warningThreshold ?? 0.55;
34
99
  const blockerThreshold = options.blockerThreshold ?? 0.7;
35
100
  const shingleSize = options.shingleSize ?? 5;
101
+ const sampleLimit = options.sampleLimit ?? 100;
36
102
  if (warningThreshold < 0 ||
37
103
  blockerThreshold > 1 ||
38
104
  warningThreshold >= blockerThreshold) {
@@ -41,11 +107,14 @@ export function evaluateRenderedContentSimilarity(samples, options = {}) {
41
107
  if (!Number.isInteger(shingleSize) || shingleSize < 2 || shingleSize > 10) {
42
108
  throw new Error('Rendered-content shingleSize must be an integer from 2 to 10.');
43
109
  }
44
- const duplicateId = samples.find((sample, index) => samples.slice(0, index).some((candidate) => candidate.id === sample.id));
45
- if (duplicateId) {
46
- throw new Error(`Rendered-content sample ID "${duplicateId.id}" is duplicated.`);
110
+ if (!Number.isInteger(sampleLimit) || sampleLimit < 2) {
111
+ throw new Error('Rendered-content sampleLimit must be an integer of at least two.');
47
112
  }
48
- const prepared = samples.map((sample) => ({
113
+ assertUniqueSampleIds(samples);
114
+ const prepared = [...samples]
115
+ .sort((left, right) => left.id.localeCompare(right.id))
116
+ .slice(0, sampleLimit)
117
+ .map((sample) => ({
49
118
  ...sample,
50
119
  shingleSet: shingles(sample.mainText, shingleSize),
51
120
  }));
@@ -69,7 +138,7 @@ export function evaluateRenderedContentSimilarity(samples, options = {}) {
69
138
  leftId: left.id,
70
139
  rightId: right.id,
71
140
  score,
72
- severity: score > blockerThreshold ? 'blocker' : 'warning',
141
+ severity: 'warning',
73
142
  });
74
143
  }
75
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rendered-content.js","sourceRoot":"","sources":["../src/rendered-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rendered-content.js","sourceRoot":"","sources":["../src/rendered-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { BrandlabFinding, BrandlabFindingClassification, ConformanceSummary } from "./project.js";
2
+ export declare const BRANDLAB_VERIFICATION_POLICY_VERSION = "simplified-v1";
3
+ export declare const BRANDLAB_VERIFICATION_FAMILIES: readonly [{
4
+ readonly id: "runtime-security";
5
+ readonly title: "Runtime and security";
6
+ readonly purpose: "Supported patched runtime, headers and server-only safety.";
7
+ }, {
8
+ readonly id: "release-integrity";
9
+ readonly title: "Release integrity";
10
+ readonly purpose: "One exact Brandlab release with reproducible package provenance.";
11
+ }, {
12
+ readonly id: "project-verification";
13
+ readonly title: "Project verification";
14
+ readonly purpose: "Typecheck, tests and production build complete successfully.";
15
+ }, {
16
+ readonly id: "contact-delivery";
17
+ readonly title: "Contact delivery";
18
+ readonly purpose: "Shared validation, delivery, error handling and duplicate protection.";
19
+ }, {
20
+ readonly id: "analytics-privacy";
21
+ readonly title: "Analytics privacy";
22
+ readonly purpose: "No lead PII reaches analytics or public runtime configuration.";
23
+ }, {
24
+ readonly id: "analytics-conversion";
25
+ readonly title: "Analytics conversion";
26
+ readonly purpose: "Canonical calls and accepted contact submissions are tracked once.";
27
+ }, {
28
+ readonly id: "search-routing";
29
+ readonly title: "Search routing";
30
+ readonly purpose: "Canonical, robots, breadcrumbs and sitemap output agree.";
31
+ }, {
32
+ readonly id: "structured-data";
33
+ readonly title: "Structured data";
34
+ readonly purpose: "Valid schema without synthetic offers or prohibited ratings.";
35
+ }, {
36
+ readonly id: "business-identity";
37
+ readonly title: "Business identity";
38
+ readonly purpose: "Public business facts match the verified operating model.";
39
+ }, {
40
+ readonly id: "route-identity";
41
+ readonly title: "Route identity";
42
+ readonly purpose: "Routes have stable IDs and unique canonical search identity.";
43
+ }, {
44
+ readonly id: "copy-safety";
45
+ readonly title: "Customer copy safety";
46
+ readonly purpose: "No placeholder, implementation-facing or unsupported public copy.";
47
+ }, {
48
+ readonly id: "duplicate-content";
49
+ readonly title: "Duplicate content";
50
+ readonly purpose: "No exact duplicate or clear location-token-substitution page.";
51
+ }, {
52
+ readonly id: "accessibility";
53
+ readonly title: "Accessibility";
54
+ readonly purpose: "Representative pages have no serious interaction or Axe failures.";
55
+ }, {
56
+ readonly id: "deployment-provenance";
57
+ readonly title: "Deployment provenance";
58
+ readonly purpose: "Release evidence matches the reviewed source and deployment.";
59
+ }, {
60
+ readonly id: "source-safety";
61
+ readonly title: "Source safety";
62
+ readonly purpose: "No secret leakage or unsafe local reimplementation of protected behaviour.";
63
+ }];
64
+ export type BrandlabVerificationFamilyId = (typeof BRANDLAB_VERIFICATION_FAMILIES)[number]["id"];
65
+ export interface BrandlabOperationalFinding extends BrandlabFinding {
66
+ familyId: BrandlabVerificationFamilyId;
67
+ }
68
+ export interface BrandlabVerificationFamilyResult {
69
+ id: BrandlabVerificationFamilyId;
70
+ title: string;
71
+ purpose: string;
72
+ status: "pass" | "warning" | "blocked";
73
+ blockers: number;
74
+ warnings: number;
75
+ info: number;
76
+ sourceRuleIds: string[];
77
+ }
78
+ export interface BrandlabVerificationResult {
79
+ policyVersion: typeof BRANDLAB_VERIFICATION_POLICY_VERSION;
80
+ familyCount: typeof BRANDLAB_VERIFICATION_FAMILIES.length;
81
+ status: "pass" | "warning" | "blocked";
82
+ maintenance: ConformanceSummary;
83
+ migration: ConformanceSummary;
84
+ advisory: ConformanceSummary;
85
+ families: BrandlabVerificationFamilyResult[];
86
+ }
87
+ export interface BrandlabDiagnosticsResult {
88
+ findings: BrandlabFinding[];
89
+ maintenance: ConformanceSummary;
90
+ migration: ConformanceSummary;
91
+ advisory: ConformanceSummary;
92
+ }
93
+ export declare function applyBrandlabVerificationPolicy(findings: readonly BrandlabFinding[]): {
94
+ operationalFindings: BrandlabOperationalFinding[];
95
+ diagnostics: BrandlabFinding[];
96
+ verification: BrandlabVerificationResult;
97
+ };
98
+ export declare function summarizeVerificationFindings(findings: readonly BrandlabFinding[], classification: BrandlabFindingClassification): ConformanceSummary;
99
+ //# sourceMappingURL=verification-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-policy.d.ts","sourceRoot":"","sources":["../src/verification-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,oCAAoC,kBAAkB,CAAC;AAEpE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4EjC,CAAC;AAEX,MAAM,MAAM,4BAA4B,GACtC,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAExD,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE,QAAQ,EAAE,4BAA4B,CAAC;CACxC;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,4BAA4B,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,oCAAoC,CAAC;IAC3D,WAAW,EAAE,OAAO,8BAA8B,CAAC,MAAM,CAAC;IAC1D,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,gCAAgC,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC;IACD,mBAAmB,EAAE,0BAA0B,EAAE,CAAC;IAClD,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,YAAY,EAAE,0BAA0B,CAAC;CAC1C,CA4DA;AAsGD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,cAAc,EAAE,6BAA6B,GAC5C,kBAAkB,CAcpB"}
@@ -0,0 +1,219 @@
1
+ export const BRANDLAB_VERIFICATION_POLICY_VERSION = "simplified-v1";
2
+ export const BRANDLAB_VERIFICATION_FAMILIES = [
3
+ {
4
+ id: "runtime-security",
5
+ title: "Runtime and security",
6
+ purpose: "Supported patched runtime, headers and server-only safety.",
7
+ },
8
+ {
9
+ id: "release-integrity",
10
+ title: "Release integrity",
11
+ purpose: "One exact Brandlab release with reproducible package provenance.",
12
+ },
13
+ {
14
+ id: "project-verification",
15
+ title: "Project verification",
16
+ purpose: "Typecheck, tests and production build complete successfully.",
17
+ },
18
+ {
19
+ id: "contact-delivery",
20
+ title: "Contact delivery",
21
+ purpose: "Shared validation, delivery, error handling and duplicate protection.",
22
+ },
23
+ {
24
+ id: "analytics-privacy",
25
+ title: "Analytics privacy",
26
+ purpose: "No lead PII reaches analytics or public runtime configuration.",
27
+ },
28
+ {
29
+ id: "analytics-conversion",
30
+ title: "Analytics conversion",
31
+ purpose: "Canonical calls and accepted contact submissions are tracked once.",
32
+ },
33
+ {
34
+ id: "search-routing",
35
+ title: "Search routing",
36
+ purpose: "Canonical, robots, breadcrumbs and sitemap output agree.",
37
+ },
38
+ {
39
+ id: "structured-data",
40
+ title: "Structured data",
41
+ purpose: "Valid schema without synthetic offers or prohibited ratings.",
42
+ },
43
+ {
44
+ id: "business-identity",
45
+ title: "Business identity",
46
+ purpose: "Public business facts match the verified operating model.",
47
+ },
48
+ {
49
+ id: "route-identity",
50
+ title: "Route identity",
51
+ purpose: "Routes have stable IDs and unique canonical search identity.",
52
+ },
53
+ {
54
+ id: "copy-safety",
55
+ title: "Customer copy safety",
56
+ purpose: "No placeholder, implementation-facing or unsupported public copy.",
57
+ },
58
+ {
59
+ id: "duplicate-content",
60
+ title: "Duplicate content",
61
+ purpose: "No exact duplicate or clear location-token-substitution page.",
62
+ },
63
+ {
64
+ id: "accessibility",
65
+ title: "Accessibility",
66
+ purpose: "Representative pages have no serious interaction or Axe failures.",
67
+ },
68
+ {
69
+ id: "deployment-provenance",
70
+ title: "Deployment provenance",
71
+ purpose: "Release evidence matches the reviewed source and deployment.",
72
+ },
73
+ {
74
+ id: "source-safety",
75
+ title: "Source safety",
76
+ purpose: "No secret leakage or unsafe local reimplementation of protected behaviour.",
77
+ },
78
+ ];
79
+ export function applyBrandlabVerificationPolicy(findings) {
80
+ const operationalFindings = [];
81
+ const diagnostics = [];
82
+ for (const finding of findings) {
83
+ const familyId = familyForFinding(finding);
84
+ if (isOperationalFinding(finding, familyId)) {
85
+ operationalFindings.push({ ...finding, familyId });
86
+ }
87
+ else {
88
+ diagnostics.push(finding);
89
+ }
90
+ }
91
+ const families = BRANDLAB_VERIFICATION_FAMILIES.map((definition) => {
92
+ const scoped = operationalFindings.filter((finding) => finding.familyId === definition.id);
93
+ const blockers = scoped.filter((finding) => finding.severity === "blocker").length;
94
+ const warnings = scoped.filter((finding) => finding.severity === "warning").length;
95
+ const info = scoped.filter((finding) => finding.severity === "info").length;
96
+ return {
97
+ ...definition,
98
+ status: blockers > 0 ? "blocked" : warnings > 0 ? "warning" : "pass",
99
+ blockers,
100
+ warnings,
101
+ info,
102
+ sourceRuleIds: [...new Set(scoped.map((finding) => finding.ruleId))].sort(),
103
+ };
104
+ });
105
+ const maintenance = summarizeVerificationFindings(operationalFindings, "maintenance");
106
+ const migration = summarizeVerificationFindings(operationalFindings, "migration");
107
+ const advisory = summarizeVerificationFindings(operationalFindings, "advisory");
108
+ return {
109
+ operationalFindings,
110
+ diagnostics,
111
+ verification: {
112
+ policyVersion: BRANDLAB_VERIFICATION_POLICY_VERSION,
113
+ familyCount: BRANDLAB_VERIFICATION_FAMILIES.length,
114
+ status: maintenance.blockers > 0 || migration.blockers > 0
115
+ ? "blocked"
116
+ : maintenance.warnings > 0 || migration.warnings > 0
117
+ ? "warning"
118
+ : "pass",
119
+ maintenance,
120
+ migration,
121
+ advisory,
122
+ families,
123
+ },
124
+ };
125
+ }
126
+ function familyForFinding(finding) {
127
+ const id = finding.ruleId;
128
+ const surface = finding.surface;
129
+ if (surface === "release")
130
+ return "release-integrity";
131
+ if (surface === "runtime" ||
132
+ surface === "headers" ||
133
+ surface === "security" ||
134
+ surface === "environment") {
135
+ return "runtime-security";
136
+ }
137
+ if (surface.startsWith("contact"))
138
+ return "contact-delivery";
139
+ if (surface === "analytics") {
140
+ return /\b(?:pii|privacy|email|phone-number|lead-diagnostic|public-env)\b/i.test(id)
141
+ ? "analytics-privacy"
142
+ : "analytics-conversion";
143
+ }
144
+ if (surface === "metadata" ||
145
+ surface === "sitemap" ||
146
+ surface === "sitemap-catalog" ||
147
+ surface === "robots" ||
148
+ surface === "breadcrumbs" ||
149
+ surface === "search-certification") {
150
+ return "search-routing";
151
+ }
152
+ if (surface === "schema" ||
153
+ surface === "schema-graph" ||
154
+ surface === "reviews" ||
155
+ surface === "project-reviews" ||
156
+ surface.startsWith("google-reviews")) {
157
+ return "structured-data";
158
+ }
159
+ if (surface === "business" || surface === "location-proof") {
160
+ return "business-identity";
161
+ }
162
+ if (surface === "routes")
163
+ return "route-identity";
164
+ if (surface === "location-quality" || id.includes("rendered-content")) {
165
+ return "duplicate-content";
166
+ }
167
+ if (surface === "accessibility")
168
+ return "accessibility";
169
+ if (surface === "deployment")
170
+ return "deployment-provenance";
171
+ if (surface === "content")
172
+ return "copy-safety";
173
+ return "source-safety";
174
+ }
175
+ function isOperationalFinding(finding, familyId) {
176
+ if (finding.classification === "advisory")
177
+ return false;
178
+ switch (familyId) {
179
+ case "release-integrity":
180
+ case "runtime-security":
181
+ case "contact-delivery":
182
+ case "structured-data":
183
+ case "accessibility":
184
+ case "deployment-provenance":
185
+ return true;
186
+ case "analytics-privacy":
187
+ return true;
188
+ case "analytics-conversion":
189
+ return /(?:event|conversion|accepted|contact|phone|send-to|dedup|duplicate|unsafe)/i.test(finding.ruleId);
190
+ case "search-routing":
191
+ return /(?:canonical|robots|sitemap|breadcrumb|framework-output|duplicate-brand-title|unsafe-metadata)/i.test(finding.ruleId);
192
+ case "business-identity":
193
+ return /(?:service-area-public-address|address-leak|hidden-address|synthetic-review|hardcoded-google-review)/i.test(finding.ruleId);
194
+ case "route-identity":
195
+ return /(?:project-id|route-(?:id|path|canonical)|duplicate-route|config-v[2345]-(?:missing|syntax|export|object))/.test(finding.ruleId);
196
+ case "copy-safety":
197
+ return /(?:placeholder|template|implementation|helper-language|unsupported-claim)/i.test(finding.ruleId);
198
+ case "duplicate-content":
199
+ return /(?:exact-duplicate|token-substitution)/i.test(finding.ruleId);
200
+ case "source-safety":
201
+ return /(?:secret|unsafe|raw-json|raw-schema|local-contact|local-analytics|local-google-reviews|self-serving|prohibited)/i.test(finding.ruleId);
202
+ case "project-verification":
203
+ return true;
204
+ }
205
+ }
206
+ export function summarizeVerificationFindings(findings, classification) {
207
+ const scoped = findings.filter((finding) => finding.classification === classification);
208
+ const blockers = scoped.filter((finding) => finding.severity === "blocker").length;
209
+ const warnings = scoped.filter((finding) => finding.severity === "warning").length;
210
+ const info = scoped.filter((finding) => finding.severity === "info").length;
211
+ return {
212
+ status: blockers > 0 ? "blocked" : warnings > 0 ? "warning" : "pass",
213
+ total: scoped.length,
214
+ blockers,
215
+ warnings,
216
+ info,
217
+ };
218
+ }
219
+ //# sourceMappingURL=verification-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-policy.js","sourceRoot":"","sources":["../src/verification-policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brandlab-digital/conformance",
3
- "version": "1.0.0-rc.20",
3
+ "version": "1.0.0-rc.21",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/RomieDandan/brandlab.git",
@@ -10,6 +10,7 @@
10
10
  "type": "module",
11
11
  "sideEffects": false,
12
12
  "bin": {
13
+ "brandlab-verify": "dist/cli.js",
13
14
  "brandlab-conformance": "dist/cli.js"
14
15
  },
15
16
  "files": [