@brandlab-digital/conformance 1.0.0-rc.33 → 1.0.0-rc.35
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/dist/cli.d.ts +0 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -145
- package/dist/cli.js.map +1 -1
- package/dist/current-release.d.ts +3 -0
- package/dist/current-release.d.ts.map +1 -0
- package/dist/current-release.js +54 -0
- package/dist/current-release.js.map +1 -0
- package/dist/project.d.ts +12 -27
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +372 -1341
- package/dist/project.js.map +1 -1
- package/dist/release-manifest.d.ts +28 -82
- package/dist/release-manifest.d.ts.map +1 -1
- package/dist/release-manifest.js +141 -355
- package/dist/release-manifest.js.map +1 -1
- package/dist/rendered-content.d.ts +0 -2
- package/dist/rendered-content.d.ts.map +1 -1
- package/dist/rendered-content.js +2 -5
- package/dist/rendered-content.js.map +1 -1
- package/dist/verification-policy.d.ts +4 -13
- package/dist/verification-policy.d.ts.map +1 -1
- package/dist/verification-policy.js +11 -53
- package/dist/verification-policy.js.map +1 -1
- package/package.json +3 -32
- package/dist/analytics-contract.d.ts +0 -20
- package/dist/analytics-contract.d.ts.map +0 -1
- package/dist/analytics-contract.js +0 -262
- package/dist/analytics-contract.js.map +0 -1
- package/dist/legacy-architecture-contracts.d.ts +0 -31
- package/dist/legacy-architecture-contracts.d.ts.map +0 -1
- package/dist/legacy-architecture-contracts.js +0 -49
- package/dist/legacy-architecture-contracts.js.map +0 -1
- package/dist/locations.d.ts +0 -63
- package/dist/locations.d.ts.map +0 -1
- package/dist/locations.js +0 -105
- package/dist/locations.js.map +0 -1
- package/dist/project-config-v2-contract.d.ts +0 -32
- package/dist/project-config-v2-contract.d.ts.map +0 -1
- package/dist/project-config-v2-contract.js +0 -926
- package/dist/project-config-v2-contract.js.map +0 -1
- package/dist/project-config-v3.d.ts +0 -50
- package/dist/project-config-v3.d.ts.map +0 -1
- package/dist/project-config-v3.js +0 -3081
- package/dist/project-config-v3.js.map +0 -1
- package/dist/project-config.d.ts +0 -3
- package/dist/project-config.d.ts.map +0 -1
- package/dist/project-config.js +0 -3
- package/dist/project-config.js.map +0 -1
- package/dist/project-documentation.d.ts +0 -28
- package/dist/project-documentation.d.ts.map +0 -1
- package/dist/project-documentation.js +0 -234
- package/dist/project-documentation.js.map +0 -1
- package/dist/release-catalog.d.ts +0 -4
- package/dist/release-catalog.d.ts.map +0 -1
- package/dist/release-catalog.js +0 -2310
- package/dist/release-catalog.js.map +0 -1
- package/dist/release-contract-compatibility.d.ts +0 -15
- package/dist/release-contract-compatibility.d.ts.map +0 -1
- package/dist/release-contract-compatibility.js +0 -131
- package/dist/release-contract-compatibility.js.map +0 -1
- package/dist/schema-hygiene.d.ts +0 -26
- package/dist/schema-hygiene.d.ts.map +0 -1
- package/dist/schema-hygiene.js +0 -28
- package/dist/schema-hygiene.js.map +0 -1
- package/dist/source-safety-contracts.d.ts +0 -20
- package/dist/source-safety-contracts.d.ts.map +0 -1
- package/dist/source-safety-contracts.js +0 -64
- package/dist/source-safety-contracts.js.map +0 -1
- package/dist/vitest.d.ts +0 -110
- package/dist/vitest.d.ts.map +0 -1
- package/dist/vitest.js +0 -2678
- package/dist/vitest.js.map +0 -1
package/dist/cli.d.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { type BrandlabConformanceMode } from "./project.js";
|
|
3
|
-
import { type BrandlabSupportPolicy } from "./release-manifest.js";
|
|
4
3
|
interface CliOptions {
|
|
5
4
|
root: string;
|
|
6
5
|
installedRelease?: string | null;
|
|
7
|
-
targetRelease?: string | null;
|
|
8
|
-
supportPolicyPath: string | null;
|
|
9
|
-
releaseManifestPaths: string[];
|
|
10
6
|
mode: BrandlabConformanceMode;
|
|
11
7
|
json: boolean;
|
|
12
8
|
help: boolean;
|
|
@@ -17,7 +13,6 @@ interface CliIo {
|
|
|
17
13
|
}
|
|
18
14
|
export declare function parseBrandlabConformanceArgs(argv: readonly string[]): CliOptions;
|
|
19
15
|
export declare function runBrandlabConformanceCli(argv: readonly string[], io?: CliIo): number;
|
|
20
|
-
export declare function createEmbeddedLocalSupportPolicy(root: string, explicitInstalledRelease?: string | null): BrandlabSupportPolicy;
|
|
21
16
|
export declare function isBrandlabConformanceCliEntrypoint(moduleUrl: string, argvPath: string | undefined): boolean;
|
|
22
17
|
export {};
|
|
23
18
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAC;AAEtB,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,KAAK;IACb,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAmBD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA2BhF;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAGH,GACA,MAAM,CAkBR;AAmDD,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAOT"}
|
package/dist/cli.js
CHANGED
|
@@ -1,65 +1,47 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { realpathSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { evaluateBrandlabProject, shouldFailBrandlabConformance, } from "./project.js";
|
|
6
|
-
import { BRANDLAB_SHARED_PACKAGE_NAMES, compareBrandlabSemver, } from "./release-manifest.js";
|
|
7
|
-
import { DEFAULT_BRANDLAB_RELEASE_CATALOG } from "./release-catalog.js";
|
|
8
6
|
const HELP = `Brandlab verification
|
|
9
7
|
|
|
8
|
+
Runs the current objective verification checks for one project.
|
|
9
|
+
|
|
10
10
|
Usage:
|
|
11
|
-
brandlab-verify [--root <path>]
|
|
11
|
+
brandlab-verify [--root <path>]
|
|
12
12
|
[--installed-release <version|unadopted>]
|
|
13
|
-
[--
|
|
14
|
-
[--target-release <version|none>] [--mode <local|ci|preflight>] [--json]
|
|
13
|
+
[--mode <local|ci|preflight>] [--json]
|
|
15
14
|
|
|
16
15
|
Exit status:
|
|
17
|
-
local/ci fail only for
|
|
18
|
-
preflight
|
|
16
|
+
local/ci fail only for objective current-release blockers
|
|
17
|
+
preflight uses the same checks against an isolated candidate
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
Without an external support policy, local verification uses the installed
|
|
23
|
-
release's embedded contract. Portfolio and release checks always supply the
|
|
24
|
-
canonical Brandlab support policy.
|
|
19
|
+
Static verification reports tests, builds, browsers and deployments as not run
|
|
20
|
+
until real evidence is supplied.
|
|
25
21
|
`;
|
|
26
22
|
export function parseBrandlabConformanceArgs(argv) {
|
|
27
23
|
const parsed = {
|
|
28
24
|
root: process.cwd(),
|
|
29
|
-
supportPolicyPath: null,
|
|
30
|
-
releaseManifestPaths: [],
|
|
31
25
|
mode: "local",
|
|
32
26
|
json: false,
|
|
33
27
|
help: false,
|
|
34
28
|
};
|
|
35
29
|
for (let index = 0; index < argv.length; index += 1) {
|
|
36
30
|
const argument = argv[index];
|
|
37
|
-
if (argument === "--help" || argument === "-h")
|
|
31
|
+
if (argument === "--help" || argument === "-h")
|
|
38
32
|
parsed.help = true;
|
|
39
|
-
|
|
40
|
-
else if (argument === "--json") {
|
|
33
|
+
else if (argument === "--json")
|
|
41
34
|
parsed.json = true;
|
|
42
|
-
}
|
|
43
35
|
else if (argument === "--root") {
|
|
44
36
|
parsed.root = resolve(requireValue(argv, ++index, "--root"));
|
|
45
37
|
}
|
|
46
|
-
else if (argument === "--support-policy") {
|
|
47
|
-
parsed.supportPolicyPath = resolve(requireValue(argv, ++index, "--support-policy"));
|
|
48
|
-
}
|
|
49
|
-
else if (argument === "--release-manifest") {
|
|
50
|
-
parsed.releaseManifestPaths.push(resolve(requireValue(argv, ++index, "--release-manifest")));
|
|
51
|
-
}
|
|
52
38
|
else if (argument === "--installed-release") {
|
|
53
39
|
const value = requireValue(argv, ++index, "--installed-release");
|
|
54
40
|
parsed.installedRelease = value === "unadopted" ? null : value;
|
|
55
41
|
}
|
|
56
|
-
else if (argument === "--target-release") {
|
|
57
|
-
const value = requireValue(argv, ++index, "--target-release");
|
|
58
|
-
parsed.targetRelease = value === "none" ? null : value;
|
|
59
|
-
}
|
|
60
42
|
else if (argument === "--mode") {
|
|
61
43
|
const value = requireValue(argv, ++index, "--mode");
|
|
62
|
-
if (
|
|
44
|
+
if (!["local", "ci", "preflight"].includes(value)) {
|
|
63
45
|
throw new Error(`Invalid --mode ${value}.`);
|
|
64
46
|
}
|
|
65
47
|
parsed.mode = value;
|
|
@@ -80,27 +62,10 @@ export function runBrandlabConformanceCli(argv, io = {
|
|
|
80
62
|
io.stdout(HELP);
|
|
81
63
|
return 0;
|
|
82
64
|
}
|
|
83
|
-
const supportPolicy = options.supportPolicyPath
|
|
84
|
-
? loadSupportPolicy(options.supportPolicyPath)
|
|
85
|
-
: createEmbeddedLocalSupportPolicy(options.root, options.installedRelease);
|
|
86
|
-
const policyManifestPaths = options.supportPolicyPath
|
|
87
|
-
? resolveSupportPolicyReleaseManifestPaths(options.supportPolicyPath, supportPolicy)
|
|
88
|
-
: [];
|
|
89
|
-
const releaseManifests = [
|
|
90
|
-
...new Set([
|
|
91
|
-
...policyManifestPaths,
|
|
92
|
-
...options.releaseManifestPaths,
|
|
93
|
-
]),
|
|
94
|
-
]
|
|
95
|
-
.map(loadReleaseManifest)
|
|
96
|
-
.sort((left, right) => compareBrandlabSemver(left.releaseVersion, right.releaseVersion));
|
|
97
65
|
const result = evaluateBrandlabProject({
|
|
98
66
|
root: options.root,
|
|
99
67
|
installedRelease: options.installedRelease,
|
|
100
|
-
targetRelease: options.targetRelease,
|
|
101
68
|
mode: options.mode,
|
|
102
|
-
releaseManifests: releaseManifests.length > 0 ? releaseManifests : undefined,
|
|
103
|
-
supportPolicy,
|
|
104
69
|
});
|
|
105
70
|
io.stdout(options.json ? `${JSON.stringify(result, null, 2)}\n` : formatResult(result));
|
|
106
71
|
return shouldFailBrandlabConformance(result) ? 1 : 0;
|
|
@@ -110,107 +75,22 @@ export function runBrandlabConformanceCli(argv, io = {
|
|
|
110
75
|
return 2;
|
|
111
76
|
}
|
|
112
77
|
}
|
|
113
|
-
function loadSupportPolicy(path) {
|
|
114
|
-
if (path === null)
|
|
115
|
-
throw new Error("--support-policy is required.");
|
|
116
|
-
try {
|
|
117
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
121
|
-
throw new Error(`Unable to load support policy from ${path}: ${detail}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
export function createEmbeddedLocalSupportPolicy(root, explicitInstalledRelease) {
|
|
125
|
-
const declaredRelease = explicitInstalledRelease === undefined
|
|
126
|
-
? detectDeclaredBrandlabRelease(root)
|
|
127
|
-
: explicitInstalledRelease;
|
|
128
|
-
const embeddedVersions = DEFAULT_BRANDLAB_RELEASE_CATALOG.map((release) => release.releaseVersion);
|
|
129
|
-
const fallbackRelease = [...embeddedVersions].sort(compareBrandlabSemver).at(-1);
|
|
130
|
-
if (!fallbackRelease) {
|
|
131
|
-
throw new Error("The embedded Brandlab release catalog is empty.");
|
|
132
|
-
}
|
|
133
|
-
const release = declaredRelease && embeddedVersions.includes(declaredRelease)
|
|
134
|
-
? declaredRelease
|
|
135
|
-
: fallbackRelease;
|
|
136
|
-
return {
|
|
137
|
-
schemaVersion: 3,
|
|
138
|
-
authorityId: "brandlab-shared-package",
|
|
139
|
-
updatedAt: "2000-01-01",
|
|
140
|
-
currentReleaseVersion: release,
|
|
141
|
-
defaultNewProjectVersion: release,
|
|
142
|
-
minimumSupportedVersion: release,
|
|
143
|
-
channels: { local: release },
|
|
144
|
-
releases: {
|
|
145
|
-
[release]: {
|
|
146
|
-
lifecycle: "current",
|
|
147
|
-
manifest: `embedded-runtime-contract:${release}`,
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
projectPolicies: {},
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
function detectDeclaredBrandlabRelease(root) {
|
|
154
|
-
try {
|
|
155
|
-
const packageJson = JSON.parse(readFileSync(resolve(root, "package.json"), "utf8"));
|
|
156
|
-
const versions = BRANDLAB_SHARED_PACKAGE_NAMES.map((packageName) => packageJson.dependencies?.[packageName] ??
|
|
157
|
-
packageJson.devDependencies?.[packageName] ??
|
|
158
|
-
null);
|
|
159
|
-
const exact = versions.filter((version) => typeof version === "string" &&
|
|
160
|
-
!/^[~^*<>=]/.test(version) &&
|
|
161
|
-
!version.includes(" "));
|
|
162
|
-
return exact.length === BRANDLAB_SHARED_PACKAGE_NAMES.length &&
|
|
163
|
-
new Set(exact).size === 1
|
|
164
|
-
? exact[0]
|
|
165
|
-
: null;
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
function loadReleaseManifest(path) {
|
|
172
|
-
try {
|
|
173
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
177
|
-
throw new Error(`Unable to load release manifest from ${path}: ${detail}`);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
function resolveSupportPolicyReleaseManifestPaths(supportPolicyPath, supportPolicy) {
|
|
181
|
-
if (supportPolicyPath === null)
|
|
182
|
-
throw new Error("--support-policy is required.");
|
|
183
|
-
const references = Object.values(supportPolicy.releases ?? {}).map((release) => release?.manifest);
|
|
184
|
-
if (references.length === 0 ||
|
|
185
|
-
references.some((reference) => typeof reference !== "string" ||
|
|
186
|
-
reference.length === 0 ||
|
|
187
|
-
isAbsolute(reference) ||
|
|
188
|
-
reference.includes("\\") ||
|
|
189
|
-
reference.split("/").some((segment) => segment === ".."))) {
|
|
190
|
-
throw new Error("Support policy must use safe relative immutable release-manifest paths.");
|
|
191
|
-
}
|
|
192
|
-
let candidateRoot = dirname(supportPolicyPath);
|
|
193
|
-
while (true) {
|
|
194
|
-
const candidates = references.map((reference) => resolve(candidateRoot, reference));
|
|
195
|
-
if (candidates.every((candidate) => existsSync(candidate)))
|
|
196
|
-
return candidates;
|
|
197
|
-
const parent = dirname(candidateRoot);
|
|
198
|
-
if (parent === candidateRoot)
|
|
199
|
-
break;
|
|
200
|
-
candidateRoot = parent;
|
|
201
|
-
}
|
|
202
|
-
throw new Error(`Cannot resolve every support-policy release manifest from ${supportPolicyPath}.`);
|
|
203
|
-
}
|
|
204
78
|
function formatResult(result) {
|
|
79
|
+
const externalChecks = result.verification.checks.filter((check) => check.status === "not_run");
|
|
80
|
+
const staticStatus = result.verification.summary.blockers > 0
|
|
81
|
+
? "blocked"
|
|
82
|
+
: result.verification.summary.warnings > 0
|
|
83
|
+
? "warning"
|
|
84
|
+
: "pass";
|
|
205
85
|
const lines = [
|
|
206
86
|
"Brandlab verification",
|
|
207
87
|
`installed: ${result.installedRelease ?? "unadopted"}`,
|
|
208
|
-
`target: ${result.targetRelease ?? "none"}`,
|
|
209
88
|
`policy: ${result.verification.policyVersion}`,
|
|
210
|
-
`
|
|
211
|
-
`
|
|
212
|
-
|
|
213
|
-
|
|
89
|
+
`static checks: ${staticStatus}`,
|
|
90
|
+
`external evidence: ${externalChecks.length > 0
|
|
91
|
+
? `not run (${externalChecks.map((check) => check.title).join(", ")})`
|
|
92
|
+
: "complete"}`,
|
|
93
|
+
`findings: ${formatSummary(result.verification.summary)}`,
|
|
214
94
|
];
|
|
215
95
|
for (const family of result.verification.families) {
|
|
216
96
|
if (family.status === "pass")
|
|
@@ -221,7 +101,7 @@ function formatResult(result) {
|
|
|
221
101
|
const location = finding.path
|
|
222
102
|
? ` (${finding.path}${finding.line ? `:${finding.line}` : ""})`
|
|
223
103
|
: "";
|
|
224
|
-
lines.push(`[${finding.familyId}/${finding.
|
|
104
|
+
lines.push(`[${finding.familyId}/${finding.severity}] ${finding.ruleId}${location}: ${finding.actual}`);
|
|
225
105
|
}
|
|
226
106
|
return `${lines.join("\n")}\n`;
|
|
227
107
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-release.d.ts","sourceRoot":"","sources":["../src/current-release.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,8BAA8B,EAEpC,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,gCAAgC,EAkD7B,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Generated by standards/scripts/generate-conformance-current-release.mjs.
|
|
2
|
+
// Each exact package release verifies its own current runtime contract.
|
|
3
|
+
import { validateBrandlabRuntimeReleaseContract, } from "./release-manifest.js";
|
|
4
|
+
export const BRANDLAB_CURRENT_RUNTIME_RELEASE = Object.freeze({
|
|
5
|
+
"capabilities": [
|
|
6
|
+
"typed-project-business-and-route-data",
|
|
7
|
+
"essential-search-foundations",
|
|
8
|
+
"shared-contact-delivery",
|
|
9
|
+
"privacy-safe-lead-analytics",
|
|
10
|
+
"security-patched-runtime",
|
|
11
|
+
"live-google-review-summary",
|
|
12
|
+
"high-signal-project-verification",
|
|
13
|
+
"packed-positive-and-negative-consumers",
|
|
14
|
+
"changesets-oidc-release"
|
|
15
|
+
],
|
|
16
|
+
"contracts": {
|
|
17
|
+
"analytics": "analytics-v4",
|
|
18
|
+
"architecture": "architecture-v5",
|
|
19
|
+
"configuration": "project-config-v5",
|
|
20
|
+
"contact": "contact-v4",
|
|
21
|
+
"seo": "seo-v4"
|
|
22
|
+
},
|
|
23
|
+
"kind": "brandlab-runtime-release-contract",
|
|
24
|
+
"packages": {
|
|
25
|
+
"@brandlab-digital/conformance": {
|
|
26
|
+
"version": "1.0.0-rc.35"
|
|
27
|
+
},
|
|
28
|
+
"@brandlab-digital/eslint-plugin": {
|
|
29
|
+
"version": "1.0.0-rc.35"
|
|
30
|
+
},
|
|
31
|
+
"@brandlab-digital/site-core": {
|
|
32
|
+
"version": "1.0.0-rc.35"
|
|
33
|
+
},
|
|
34
|
+
"@brandlab-digital/site-next": {
|
|
35
|
+
"version": "1.0.0-rc.35"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"releaseVersion": "1.0.0-rc.35",
|
|
39
|
+
"runtime": {
|
|
40
|
+
"bundler": "turbopack",
|
|
41
|
+
"cacheComponents": false,
|
|
42
|
+
"next": "16.2.12",
|
|
43
|
+
"node": "24.x",
|
|
44
|
+
"packageManager": "npm@11.14.1",
|
|
45
|
+
"react": "19.2.8",
|
|
46
|
+
"reactDom": "19.2.8",
|
|
47
|
+
"router": "app",
|
|
48
|
+
"sharp": "0.35.3",
|
|
49
|
+
"typescript": "6.0.3"
|
|
50
|
+
},
|
|
51
|
+
"schemaVersion": "brandlab.runtime-release-contract.v1"
|
|
52
|
+
});
|
|
53
|
+
validateBrandlabRuntimeReleaseContract(BRANDLAB_CURRENT_RUNTIME_RELEASE);
|
|
54
|
+
//# sourceMappingURL=current-release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-release.js","sourceRoot":"","sources":["../src/current-release.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,OAAO,EAEL,sCAAsC,GACvC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,CAC7D;IACE,cAAc,EAAE;QACd,uCAAuC;QACvC,8BAA8B;QAC9B,yBAAyB;QACzB,6BAA6B;QAC7B,0BAA0B;QAC1B,4BAA4B;QAC5B,kCAAkC;QAClC,wCAAwC;QACxC,yBAAyB;KAC1B;IACD,WAAW,EAAE;QACX,WAAW,EAAE,cAAc;QAC3B,cAAc,EAAE,iBAAiB;QACjC,eAAe,EAAE,mBAAmB;QACpC,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,QAAQ;KAChB;IACD,MAAM,EAAE,mCAAmC;IAC3C,UAAU,EAAE;QACV,+BAA+B,EAAE;YAC/B,SAAS,EAAE,aAAa;SACzB;QACD,iCAAiC,EAAE;YACjC,SAAS,EAAE,aAAa;SACzB;QACD,6BAA6B,EAAE;YAC7B,SAAS,EAAE,aAAa;SACzB;QACD,6BAA6B,EAAE;YAC7B,SAAS,EAAE,aAAa;SACzB;KACF;IACD,gBAAgB,EAAE,aAAa;IAC/B,SAAS,EAAE;QACT,SAAS,EAAE,WAAW;QACtB,iBAAiB,EAAE,KAAK;QACxB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,MAAM;QACd,gBAAgB,EAAE,aAAa;QAC/B,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,QAAQ;QACjB,YAAY,EAAE,OAAO;KACtB;IACD,eAAe,EAAE,sCAAsC;CACxD,CAC6C,CAAC;AAE/C,sCAAsC,CAAC,gCAAgC,CAAC,CAAC"}
|
package/dist/project.d.ts
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import { type BrandlabDiagnosticsResult, type BrandlabOperationalFinding, type BrandlabVerificationEvidence, type BrandlabVerificationResult } from "./verification-policy.js";
|
|
1
|
+
import { type BrandlabContractVersions, type BrandlabReleaseManifest, type BrandlabRuntimeReleaseContract } from "./release-manifest.js";
|
|
2
|
+
import { type BrandlabOperationalFinding, type BrandlabVerificationEvidence, type BrandlabVerificationResult } from "./verification-policy.js";
|
|
4
3
|
export { BRANDLAB_VERIFICATION_CHECKS, BRANDLAB_VERIFICATION_FAMILIES, BRANDLAB_VERIFICATION_POLICY_VERSION, type BrandlabVerificationCheckId, type BrandlabVerificationCheckResult, type BrandlabVerificationEvidence, type BrandlabVerificationEvidenceKind, type BrandlabVerificationFamilyId, type BrandlabVerificationFamilyResult, type BrandlabVerificationResult, type BrandlabVerificationStatus, } from "./verification-policy.js";
|
|
5
|
-
export declare const BRANDLAB_CONFORMANCE_SCHEMA_VERSION = "brandlab.conformance.
|
|
6
|
-
export declare const BRANDLAB_CONFORMANCE_EVALUATOR_VERSION = "
|
|
7
|
-
export declare const BRANDLAB_ARCHITECTURE_DISPATCH_RULESET_ID = "version-aware-architecture-dispatch-v1";
|
|
4
|
+
export declare const BRANDLAB_CONFORMANCE_SCHEMA_VERSION = "brandlab.conformance.v2";
|
|
5
|
+
export declare const BRANDLAB_CONFORMANCE_EVALUATOR_VERSION = "current-only-v2";
|
|
8
6
|
export type BrandlabConformanceMode = "local" | "ci" | "preflight";
|
|
9
|
-
export type BrandlabFindingClassification = "maintenance" | "migration" | "advisory";
|
|
10
7
|
export type BrandlabFindingSeverity = "blocker" | "warning" | "info";
|
|
11
8
|
export interface BrandlabFinding {
|
|
12
9
|
ruleId: string;
|
|
13
10
|
surface: string;
|
|
14
|
-
classification: BrandlabFindingClassification;
|
|
15
11
|
severity: BrandlabFindingSeverity;
|
|
16
12
|
contract: {
|
|
17
13
|
name: string;
|
|
@@ -39,39 +35,28 @@ export interface BrandlabConformanceResult {
|
|
|
39
35
|
implementationFingerprint: string;
|
|
40
36
|
mode: BrandlabConformanceMode;
|
|
41
37
|
installedRelease: string | null;
|
|
42
|
-
targetRelease: string | null;
|
|
43
38
|
findings: BrandlabFinding[];
|
|
44
39
|
operationalFindings: BrandlabOperationalFinding[];
|
|
45
|
-
diagnostics: BrandlabDiagnosticsResult;
|
|
46
40
|
verification: BrandlabVerificationResult;
|
|
47
|
-
|
|
48
|
-
migration: ConformanceSummary;
|
|
49
|
-
advisory: ConformanceSummary;
|
|
41
|
+
summary: ConformanceSummary;
|
|
50
42
|
}
|
|
51
43
|
export interface EvaluateBrandlabProjectOptions {
|
|
52
44
|
root: string;
|
|
53
45
|
installedRelease?: string | null;
|
|
54
|
-
targetRelease?: string | null;
|
|
55
46
|
mode?: BrandlabConformanceMode;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
* Optional external post-build attestations. These are never embedded in the
|
|
59
|
-
* conformance package; control-plane callers may provide them when exact
|
|
60
|
-
* registry-integrity comparison is required.
|
|
61
|
-
*/
|
|
62
|
-
releaseManifests?: readonly BrandlabReleaseManifest[];
|
|
63
|
-
supportPolicy: BrandlabSupportPolicy;
|
|
64
|
-
/** Evidence produced outside the static evaluator, such as a build or browser run. */
|
|
47
|
+
release?: BrandlabRuntimeReleaseContract;
|
|
48
|
+
releaseManifest?: BrandlabReleaseManifest;
|
|
65
49
|
verificationEvidence?: readonly BrandlabVerificationEvidence[];
|
|
66
|
-
/** Compatibility input for callers that already parse legacy brandlab.config.ts. */
|
|
67
|
-
architecture?: BrandlabArchitectureConfigLike | null;
|
|
68
50
|
}
|
|
69
|
-
interface ProjectPackageJsonLike
|
|
51
|
+
interface ProjectPackageJsonLike {
|
|
52
|
+
dependencies?: Record<string, string>;
|
|
53
|
+
devDependencies?: Record<string, string>;
|
|
54
|
+
engines?: Record<string, string>;
|
|
70
55
|
overrides?: Record<string, string>;
|
|
56
|
+
packageManager?: string;
|
|
71
57
|
}
|
|
72
58
|
export declare function evaluateBrandlabProject(options: EvaluateBrandlabProjectOptions): BrandlabConformanceResult;
|
|
73
59
|
export declare function shouldFailBrandlabConformance(result: BrandlabConformanceResult): boolean;
|
|
74
60
|
export declare function detectInstalledBrandlabRelease(packageJson: ProjectPackageJsonLike | null): string | null;
|
|
75
|
-
export declare function readBrandlabArchitectureConfig(root: string): BrandlabArchitectureConfigLike | null;
|
|
76
61
|
export type { BrandlabContractVersions };
|
|
77
62
|
//# sourceMappingURL=project.d.ts.map
|
package/dist/project.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|