@brandlab-digital/conformance 1.0.0-rc.2 → 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.
Files changed (48) hide show
  1. package/dist/analytics-contract.d.ts +20 -0
  2. package/dist/analytics-contract.d.ts.map +1 -0
  3. package/dist/analytics-contract.js +211 -0
  4. package/dist/analytics-contract.js.map +1 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +91 -20
  8. package/dist/cli.js.map +1 -1
  9. package/dist/project-config-v3.d.ts +9 -1
  10. package/dist/project-config-v3.d.ts.map +1 -1
  11. package/dist/project-config-v3.js +246 -37
  12. package/dist/project-config-v3.js.map +1 -1
  13. package/dist/project-config.d.ts +1 -1
  14. package/dist/project-config.d.ts.map +1 -1
  15. package/dist/project-config.js +1 -1
  16. package/dist/project-config.js.map +1 -1
  17. package/dist/project-documentation.d.ts +28 -0
  18. package/dist/project-documentation.d.ts.map +1 -0
  19. package/dist/project-documentation.js +398 -0
  20. package/dist/project-documentation.js.map +1 -0
  21. package/dist/project.d.ts +9 -2
  22. package/dist/project.d.ts.map +1 -1
  23. package/dist/project.js +290 -44
  24. package/dist/project.js.map +1 -1
  25. package/dist/release-catalog.d.ts.map +1 -1
  26. package/dist/release-catalog.js +1405 -0
  27. package/dist/release-catalog.js.map +1 -1
  28. package/dist/release-contract-compatibility.d.ts +133 -0
  29. package/dist/release-contract-compatibility.d.ts.map +1 -1
  30. package/dist/release-contract-compatibility.js +133 -0
  31. package/dist/release-contract-compatibility.js.map +1 -1
  32. package/dist/release-manifest.d.ts +1 -0
  33. package/dist/release-manifest.d.ts.map +1 -1
  34. package/dist/release-manifest.js +7 -0
  35. package/dist/release-manifest.js.map +1 -1
  36. package/dist/rendered-content.d.ts +38 -0
  37. package/dist/rendered-content.d.ts.map +1 -0
  38. package/dist/rendered-content.js +149 -0
  39. package/dist/rendered-content.js.map +1 -0
  40. package/dist/source-safety-contracts.d.ts +1 -1
  41. package/dist/source-safety-contracts.d.ts.map +1 -1
  42. package/dist/source-safety-contracts.js +5 -1
  43. package/dist/source-safety-contracts.js.map +1 -1
  44. package/dist/verification-policy.d.ts +99 -0
  45. package/dist/verification-policy.d.ts.map +1 -0
  46. package/dist/verification-policy.js +219 -0
  47. package/dist/verification-policy.js.map +1 -0
  48. package/package.json +20 -2
@@ -0,0 +1,398 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, normalize, relative, resolve } from "node:path";
3
+ export const BRANDLAB_PROJECT_DOCUMENTATION_RULESET_ID = "architecture-v5-project-documentation@1.0.0-rc.17";
4
+ const REQUIRED_DOCUMENTS = [
5
+ { file: "AGENTS.md", ruleId: "brandlab-documentation-missing-agents" },
6
+ { file: "README.md", ruleId: "brandlab-documentation-missing-readme" },
7
+ ];
8
+ const OPTIONAL_DOCUMENTS = [
9
+ {
10
+ file: "DESIGN.md",
11
+ missing: { ruleId: "brandlab-documentation-missing-design" },
12
+ unmapped: { ruleId: "brandlab-documentation-unmapped-design" },
13
+ },
14
+ {
15
+ file: "STRATEGY.md",
16
+ missing: { ruleId: "brandlab-documentation-missing-strategy" },
17
+ unmapped: { ruleId: "brandlab-documentation-unmapped-strategy" },
18
+ },
19
+ ];
20
+ const ALL_DOCUMENTS = [
21
+ ...REQUIRED_DOCUMENTS.map(({ file }) => file),
22
+ ...OPTIONAL_DOCUMENTS.map(({ file }) => file),
23
+ ];
24
+ const FORBIDDEN_FILES = ["CLAUDE.md"];
25
+ const FORBIDDEN_DIRECTORIES = [
26
+ { path: ".cursor", ruleId: "brandlab-documentation-forbidden-cursor" },
27
+ { path: "docs", ruleId: "brandlab-documentation-forbidden-docs" },
28
+ { path: "files", ruleId: "brandlab-documentation-forbidden-files" },
29
+ {
30
+ path: "PROJECT_STANDARDISATION",
31
+ ruleId: "brandlab-documentation-forbidden-project-standardisation",
32
+ },
33
+ ];
34
+ const AGENTS_REFERENCES = [
35
+ { path: "README.md", ruleId: "brandlab-documentation-agents-reference-readme-md" },
36
+ {
37
+ path: "brandlab.config.ts",
38
+ ruleId: "brandlab-documentation-agents-reference-brandlab-config-ts",
39
+ },
40
+ { path: "package.json", ruleId: "brandlab-documentation-agents-reference-package-json" },
41
+ ];
42
+ const AGENTS_MAX_BYTES = 12 * 1024;
43
+ const AGENTS_MAX_LINES = 120;
44
+ const DEEP_DOCUMENT_MAX_BYTES = 64 * 1024;
45
+ const DEEP_DOCUMENT_MAX_LINES = 1_200;
46
+ const VERSION_FACT_PATTERNS = [
47
+ /@brandlab-digital\/(?:site-core|site-next|conformance|eslint-plugin)(?:@|\s+(?:version\s*)?)[~^]?\d+\.\d+\.\d+(?:-[a-z0-9.-]+)?/i,
48
+ /\b(?:Next(?:\.js)?|React|Node(?:\.js)?|TypeScript)\s+(?:version\s+|v)?\d+\.\d+(?:\.\d+)?\b/i,
49
+ ];
50
+ const SECRET_VALUE_PATTERN = /\b(?:api[_ -]?key|access[_ -]?token|auth[_ -]?token|client[_ -]?secret|password|private[_ -]?key|secret)\b\s*[:=]\s*["'`]?([A-Za-z0-9_./+=-]{16,})/gi;
51
+ const SAFE_SECRET_VALUE_TOKENS = new Set([
52
+ "process.env",
53
+ "redacted",
54
+ "onepassword",
55
+ "1password",
56
+ "vercel",
57
+ "environment",
58
+ ]);
59
+ export function inspectBrandlabProjectDocumentation(root, options = {}) {
60
+ const absoluteRoot = resolve(root);
61
+ const issues = [];
62
+ const packageJson = readPackageJson(absoluteRoot);
63
+ const files = {};
64
+ for (const file of ALL_DOCUMENTS) {
65
+ const path = join(absoluteRoot, file);
66
+ if (!existsSync(path) || !statSync(path).isFile()) {
67
+ files[file] = null;
68
+ continue;
69
+ }
70
+ const source = readFileSync(path, "utf8");
71
+ files[file] = {
72
+ bytes: Buffer.byteLength(source),
73
+ lines: source.length === 0 ? 0 : source.split(/\r?\n/).length,
74
+ };
75
+ }
76
+ for (const { file, ruleId } of REQUIRED_DOCUMENTS) {
77
+ if (files[file])
78
+ continue;
79
+ issues.push(documentationIssue({
80
+ ruleId,
81
+ path: file,
82
+ expected: `${file} exists at the repository root.`,
83
+ actual: `${file} is missing.`,
84
+ remediation: file === "AGENTS.md"
85
+ ? "Add a concise project map for Codex using the Brandlab AGENTS.md reference."
86
+ : "Add a concise human operations guide using the Brandlab README.md reference.",
87
+ }));
88
+ }
89
+ if (options.requireDesign && !files["DESIGN.md"]) {
90
+ issues.push(documentationIssue({
91
+ ruleId: OPTIONAL_DOCUMENTS[0].missing.ruleId,
92
+ path: "DESIGN.md",
93
+ expected: "DESIGN.md exists when design direction is part of the managed scope.",
94
+ actual: "DESIGN.md is missing for a design-managed project.",
95
+ remediation: "Add the approved visual principles, interaction rules and evidence boundaries to DESIGN.md.",
96
+ }));
97
+ }
98
+ if (options.requireStrategy && !files["STRATEGY.md"]) {
99
+ issues.push(documentationIssue({
100
+ ruleId: OPTIONAL_DOCUMENTS[1].missing.ruleId,
101
+ path: "STRATEGY.md",
102
+ expected: "STRATEGY.md exists when SEO, Ads or content strategy is part of the managed scope.",
103
+ actual: "STRATEGY.md is missing for a strategy-managed project.",
104
+ remediation: "Add the approved audience, positioning, search, conversion and proof strategy to STRATEGY.md.",
105
+ }));
106
+ }
107
+ for (const file of FORBIDDEN_FILES) {
108
+ const path = join(absoluteRoot, file);
109
+ if (!existsSync(path))
110
+ continue;
111
+ issues.push(documentationIssue({
112
+ ruleId: "brandlab-documentation-forbidden-claude",
113
+ path: file,
114
+ expected: "AGENTS.md is the only root agent-instruction file.",
115
+ actual: `${file} creates a second agent-instruction authority.`,
116
+ remediation: "Move any unique, current instructions into AGENTS.md, then remove CLAUDE.md.",
117
+ }));
118
+ }
119
+ for (const { path: directory, ruleId } of FORBIDDEN_DIRECTORIES) {
120
+ const path = join(absoluteRoot, directory);
121
+ if (!existsSync(path) || !statSync(path).isDirectory())
122
+ continue;
123
+ issues.push(documentationIssue({
124
+ ruleId,
125
+ path: directory,
126
+ expected: "Project guidance uses the small approved root-document set.",
127
+ actual: `${directory} is a project-local guide or working-document directory.`,
128
+ remediation: "Move durable project direction into AGENTS.md, DESIGN.md or STRATEGY.md; keep operational evidence in Brandlab systems.",
129
+ }));
130
+ }
131
+ for (const file of ALL_DOCUMENTS) {
132
+ const stats = files[file];
133
+ if (!stats)
134
+ continue;
135
+ const source = readFileSync(join(absoluteRoot, file), "utf8");
136
+ inspectDocument({ absoluteRoot, file, source, stats, packageJson, issues });
137
+ }
138
+ const agents = files["AGENTS.md"]
139
+ ? readFileSync(join(absoluteRoot, "AGENTS.md"), "utf8")
140
+ : null;
141
+ if (agents) {
142
+ for (const { path: reference, ruleId } of AGENTS_REFERENCES) {
143
+ if (agents.includes(reference))
144
+ continue;
145
+ issues.push(documentationIssue({
146
+ ruleId,
147
+ path: "AGENTS.md",
148
+ expected: `AGENTS.md points to ${reference} instead of repeating its facts.`,
149
+ actual: `${reference} is not referenced.`,
150
+ remediation: `Add a short source-of-truth pointer to ${reference}.`,
151
+ }));
152
+ }
153
+ }
154
+ const readme = files["README.md"]
155
+ ? readFileSync(join(absoluteRoot, "README.md"), "utf8")
156
+ : null;
157
+ if (readme) {
158
+ if (!readme.includes("AGENTS.md")) {
159
+ issues.push(documentationIssue({
160
+ ruleId: "brandlab-documentation-readme-agents-reference",
161
+ path: "README.md",
162
+ expected: "README.md points contributors to AGENTS.md for agent instructions.",
163
+ actual: "AGENTS.md is not referenced.",
164
+ remediation: "Add AGENTS.md to the README source-of-truth map.",
165
+ }));
166
+ }
167
+ if (!/\bnpm\s+run\s+verify\b/.test(readme)) {
168
+ issues.push(documentationIssue({
169
+ ruleId: "brandlab-documentation-readme-verify-command",
170
+ path: "README.md",
171
+ expected: "README.md identifies npm run verify as the normal local proof command.",
172
+ actual: "The standard verification command is not documented.",
173
+ remediation: "Document npm run verify without copying package versions or generated release facts.",
174
+ }));
175
+ }
176
+ }
177
+ for (const optional of OPTIONAL_DOCUMENTS) {
178
+ if (!files[optional.file])
179
+ continue;
180
+ const linked = [agents, readme].some((source) => source?.includes(optional.file));
181
+ if (linked)
182
+ continue;
183
+ issues.push(documentationIssue({
184
+ ruleId: optional.unmapped.ruleId,
185
+ path: optional.file,
186
+ expected: `${optional.file} is linked from AGENTS.md or README.md.`,
187
+ actual: `${optional.file} exists but is not discoverable from the project map.`,
188
+ remediation: `Add a concise pointer to ${optional.file} without copying its contents into AGENTS.md.`,
189
+ severity: "warning",
190
+ }));
191
+ }
192
+ return {
193
+ rulesetId: BRANDLAB_PROJECT_DOCUMENTATION_RULESET_ID,
194
+ files,
195
+ issues: issues.sort(compareIssues),
196
+ };
197
+ }
198
+ function inspectDocument(options) {
199
+ const { file, source, stats, issues } = options;
200
+ const maxBytes = file === "AGENTS.md" ? AGENTS_MAX_BYTES : DEEP_DOCUMENT_MAX_BYTES;
201
+ const maxLines = file === "AGENTS.md" ? AGENTS_MAX_LINES : DEEP_DOCUMENT_MAX_LINES;
202
+ if (stats.bytes > maxBytes || stats.lines > maxLines) {
203
+ const sizeRule = file === "AGENTS.md"
204
+ ? { ruleId: "brandlab-documentation-agents-size" }
205
+ : { ruleId: "brandlab-documentation-document-size" };
206
+ issues.push(documentationIssue({
207
+ ruleId: sizeRule.ruleId,
208
+ path: file,
209
+ expected: file === "AGENTS.md"
210
+ ? `AGENTS.md is a map no larger than ${AGENTS_MAX_LINES} lines or ${AGENTS_MAX_BYTES} bytes.`
211
+ : `Project guidance stays below ${DEEP_DOCUMENT_MAX_LINES} lines and ${DEEP_DOCUMENT_MAX_BYTES} bytes per file.`,
212
+ actual: `${file} contains ${stats.lines} lines and ${stats.bytes} bytes.`,
213
+ remediation: file === "AGENTS.md"
214
+ ? "Keep only durable boundaries, source-of-truth links and verified commands; move detail to DESIGN.md or STRATEGY.md."
215
+ : "Remove duplicated history and retain only current, decision-relevant guidance.",
216
+ }));
217
+ }
218
+ if (!source.trim()) {
219
+ issues.push(documentationIssue({
220
+ ruleId: "brandlab-documentation-empty",
221
+ path: file,
222
+ expected: `${file} contains current project guidance.`,
223
+ actual: `${file} is empty.`,
224
+ remediation: "Add the approved document content or remove the optional document.",
225
+ }));
226
+ }
227
+ for (const pattern of VERSION_FACT_PATTERNS) {
228
+ const match = pattern.exec(source);
229
+ if (!match || match.index === undefined)
230
+ continue;
231
+ issues.push(documentationIssue({
232
+ ruleId: "brandlab-documentation-duplicated-version-fact",
233
+ path: file,
234
+ line: lineAt(source, match.index),
235
+ expected: "Runtime and package versions come from package.json, the lockfile and immutable release manifests.",
236
+ actual: `A copied version claim appears in ${file}.`,
237
+ remediation: "Replace the version claim with a pointer to the machine-readable authority.",
238
+ }));
239
+ }
240
+ const unresolved = /\{\{[^}\n]+\}\}|<PROJECT_[A-Z0-9_]+>|\[(?:TODO|TBD)\]/i.exec(source);
241
+ if (unresolved?.index !== undefined) {
242
+ issues.push(documentationIssue({
243
+ ruleId: "brandlab-documentation-unresolved-placeholder",
244
+ path: file,
245
+ line: lineAt(source, unresolved.index),
246
+ expected: "Committed project guidance contains no unresolved reference tokens.",
247
+ actual: `An unresolved reference token appears in ${file}.`,
248
+ remediation: "Replace the token with reviewed project-specific guidance before migration approval.",
249
+ }));
250
+ }
251
+ SECRET_VALUE_PATTERN.lastIndex = 0;
252
+ for (const match of source.matchAll(SECRET_VALUE_PATTERN)) {
253
+ const value = (match[1] ?? "").toLowerCase();
254
+ if ([...SAFE_SECRET_VALUE_TOKENS].some((token) => value.includes(token)))
255
+ continue;
256
+ issues.push(documentationIssue({
257
+ ruleId: "brandlab-documentation-secret-value",
258
+ surface: "security",
259
+ path: file,
260
+ line: lineAt(source, match.index ?? 0),
261
+ expected: "Documentation contains environment-key names and secret-store pointers only.",
262
+ actual: `A credential-shaped value appears in ${file}.`,
263
+ remediation: "Remove the value, rotate it if genuine, and keep secrets in 1Password and deployment environments.",
264
+ }));
265
+ }
266
+ for (const command of source.matchAll(/\bnpm\s+run\s+([a-zA-Z0-9:_-]+)/g)) {
267
+ const script = command[1];
268
+ if (options.packageJson.scripts[script])
269
+ continue;
270
+ issues.push(documentationIssue({
271
+ ruleId: "brandlab-documentation-broken-command",
272
+ path: file,
273
+ line: lineAt(source, command.index ?? 0),
274
+ expected: `npm run ${script} exists in package.json.`,
275
+ actual: `package.json does not define the documented ${script} script.`,
276
+ remediation: "Correct or remove the stale command; package.json remains command authority.",
277
+ }));
278
+ }
279
+ if (options.packageJson.packageManager?.startsWith("npm@")) {
280
+ const alternateManager = /(?:^|[\s`])(?:pnpm|yarn)\s+(?:run\s+)?[a-zA-Z0-9:_-]+/m.exec(source);
281
+ if (alternateManager?.index !== undefined) {
282
+ issues.push(documentationIssue({
283
+ ruleId: "brandlab-documentation-package-manager-drift",
284
+ path: file,
285
+ line: lineAt(source, alternateManager.index),
286
+ expected: "Documented commands use the packageManager declared in package.json.",
287
+ actual: `${file} documents a pnpm or Yarn command for an npm project.`,
288
+ remediation: "Use the corresponding npm command or correct package.json if the package manager intentionally changed.",
289
+ }));
290
+ }
291
+ }
292
+ for (const link of markdownLinks(source)) {
293
+ const linkTarget = localLinkTarget(link.target);
294
+ if (!linkTarget)
295
+ continue;
296
+ const { target, nonPortable } = linkTarget;
297
+ if (nonPortable) {
298
+ issues.push(documentationIssue({
299
+ ruleId: "brandlab-documentation-nonportable-link",
300
+ path: file,
301
+ line: lineAt(source, link.index),
302
+ expected: "Project guidance links only to portable files inside the repository or to explicit web URLs.",
303
+ actual: `${file} links to a machine-local absolute path.`,
304
+ remediation: "Replace the machine-local path with a repository file, a durable Brandlab web reference or a source-of-truth pointer.",
305
+ severity: "warning",
306
+ }));
307
+ continue;
308
+ }
309
+ const absoluteTarget = resolve(dirname(join(options.absoluteRoot, file)), target);
310
+ const relativeTarget = relative(options.absoluteRoot, absoluteTarget);
311
+ const outsideRoot = relativeTarget === ".." ||
312
+ relativeTarget.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`);
313
+ if (outsideRoot) {
314
+ issues.push(documentationIssue({
315
+ ruleId: "brandlab-documentation-nonportable-link",
316
+ path: file,
317
+ line: lineAt(source, link.index),
318
+ expected: "Project guidance links only to portable files inside the repository or to explicit web URLs.",
319
+ actual: `${file} links to a local path outside the repository.`,
320
+ remediation: "Replace the machine-local path with a repository file, a durable Brandlab web reference or a source-of-truth pointer.",
321
+ severity: "warning",
322
+ }));
323
+ continue;
324
+ }
325
+ if (normalize(absoluteTarget) === normalize(options.absoluteRoot) ||
326
+ existsSync(absoluteTarget)) {
327
+ continue;
328
+ }
329
+ issues.push(documentationIssue({
330
+ ruleId: "brandlab-documentation-broken-link",
331
+ path: file,
332
+ line: lineAt(source, link.index),
333
+ expected: `The local documentation target ${target} exists.`,
334
+ actual: `${file} links to a missing local path.`,
335
+ remediation: "Correct the link or remove the stale reference.",
336
+ }));
337
+ }
338
+ }
339
+ function markdownLinks(source) {
340
+ return [...source.matchAll(/\[[^\]]+\]\(([^)]+)\)/g)].map((match) => ({
341
+ target: match[1] ?? "",
342
+ index: match.index ?? 0,
343
+ }));
344
+ }
345
+ function localLinkTarget(raw) {
346
+ const trimmed = raw.trim().replace(/^<|>$/g, "");
347
+ const target = trimmed.split(/\s+["']/u, 1)[0] ?? "";
348
+ if (!target ||
349
+ target.startsWith("#") ||
350
+ /^(?:https?:|mailto:|tel:)/i.test(target)) {
351
+ return null;
352
+ }
353
+ const withoutFragment = target.split(/[?#]/, 1)[0] ?? "";
354
+ if (isAbsolute(withoutFragment) ||
355
+ /^[A-Za-z]:[\\/]/.test(withoutFragment) ||
356
+ /^file:/i.test(withoutFragment)) {
357
+ return { target: withoutFragment, nonPortable: true };
358
+ }
359
+ try {
360
+ return {
361
+ target: decodeURIComponent(withoutFragment).replace(/:\d+(?::\d+)?$/, ""),
362
+ nonPortable: false,
363
+ };
364
+ }
365
+ catch {
366
+ return { target: withoutFragment, nonPortable: false };
367
+ }
368
+ }
369
+ function readPackageJson(root) {
370
+ try {
371
+ const parsed = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
372
+ return {
373
+ scripts: parsed.scripts ?? {},
374
+ packageManager: parsed.packageManager ?? null,
375
+ };
376
+ }
377
+ catch {
378
+ return { scripts: {}, packageManager: null };
379
+ }
380
+ }
381
+ function lineAt(source, index) {
382
+ return source.slice(0, index).split(/\r?\n/).length;
383
+ }
384
+ function documentationIssue(options) {
385
+ return {
386
+ surface: options.surface ?? "documentation",
387
+ severity: options.severity ?? "blocker",
388
+ evidenceKind: "static",
389
+ ...options,
390
+ };
391
+ }
392
+ function compareIssues(first, second) {
393
+ return (first.severity.localeCompare(second.severity) ||
394
+ first.ruleId.localeCompare(second.ruleId) ||
395
+ (first.path ?? "").localeCompare(second.path ?? "") ||
396
+ (first.line ?? 0) - (second.line ?? 0));
397
+ }
398
+ //# sourceMappingURL=project-documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-documentation.js","sourceRoot":"","sources":["../src/project-documentation.ts"],"names":[],"mappings":"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"}
package/dist/project.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { type BrandlabArchitectureConfigLike, type PackageJsonLike } from "./vitest.js";
2
2
  import { type BrandlabContractVersions, type BrandlabReleaseManifest, type BrandlabRuntimeReleaseContract, type BrandlabSupportPolicy } from "./release-manifest.js";
3
+ import { type BrandlabDiagnosticsResult, type BrandlabOperationalFinding, type BrandlabVerificationResult } from "./verification-policy.js";
3
4
  export declare const BRANDLAB_CONFORMANCE_SCHEMA_VERSION = "brandlab.conformance.v1";
4
- export declare const BRANDLAB_CONFORMANCE_EVALUATOR_VERSION = "control-plane-v1";
5
+ export declare const BRANDLAB_CONFORMANCE_EVALUATOR_VERSION = "simplified-v1";
5
6
  export declare const BRANDLAB_ARCHITECTURE_DISPATCH_RULESET_ID = "version-aware-architecture-dispatch-v1";
6
7
  export type BrandlabConformanceMode = "local" | "ci" | "preflight";
7
8
  export type BrandlabFindingClassification = "maintenance" | "migration" | "advisory";
@@ -39,6 +40,9 @@ export interface BrandlabConformanceResult {
39
40
  installedRelease: string | null;
40
41
  targetRelease: string | null;
41
42
  findings: BrandlabFinding[];
43
+ operationalFindings: BrandlabOperationalFinding[];
44
+ diagnostics: BrandlabDiagnosticsResult;
45
+ verification: BrandlabVerificationResult;
42
46
  maintenance: ConformanceSummary;
43
47
  migration: ConformanceSummary;
44
48
  advisory: ConformanceSummary;
@@ -59,9 +63,12 @@ export interface EvaluateBrandlabProjectOptions {
59
63
  /** Compatibility input for callers that already parse legacy brandlab.config.ts. */
60
64
  architecture?: BrandlabArchitectureConfigLike | null;
61
65
  }
66
+ interface ProjectPackageJsonLike extends PackageJsonLike {
67
+ overrides?: Record<string, string>;
68
+ }
62
69
  export declare function evaluateBrandlabProject(options: EvaluateBrandlabProjectOptions): BrandlabConformanceResult;
63
70
  export declare function shouldFailBrandlabConformance(result: BrandlabConformanceResult): boolean;
64
- export declare function detectInstalledBrandlabRelease(packageJson: PackageJsonLike | null): string | null;
71
+ export declare function detectInstalledBrandlabRelease(packageJson: ProjectPackageJsonLike | null): string | null;
65
72
  export declare function readBrandlabArchitectureConfig(root: string): BrandlabArchitectureConfigLike | null;
66
73
  export type { BrandlabContractVersions };
67
74
  //# sourceMappingURL=project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}