@kungfu-tech/buildchain 4.0.1-alpha.5 → 4.0.1-alpha.55
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/README.md +9 -6
- package/actions/release-tail/README.md +8 -0
- package/actions/v4-release-candidate-promote/README.md +3 -0
- package/architecture/agent-change-map.md +1015 -0
- package/architecture/ci-lane-change-budget.json +256 -0
- package/architecture/decisions/0004-v4-declarative-release-tail.md +47 -0
- package/architecture/internal-capabilities.json +220 -15
- package/architecture/maintainability-debt.json +3229 -0
- package/architecture/maintainability-policy.json +489 -132
- package/architecture/release-tail-contract-inventory.json +5 -2
- package/architecture/v3-core-mechanism-inventory.json +4 -3
- package/architecture/v3-v4-capability-closure.md +59 -0
- package/architecture/v3-v4-live-capability-inventory.json +102404 -0
- package/architecture/v4-adopter-delivery-parity.json +32 -5
- package/architecture/v4-cross-platform-adopter-qualification.json +52 -0
- package/architecture/v4-delivery-warrant-shadow-fixtures.json +3 -3
- package/architecture/v4-floating-consumer-policy.json +6 -0
- package/architecture/v4-publication-rehearsal-parity.json +84 -0
- package/architecture/v4-runtime-semantic-closure.json +710 -0
- package/bin/buildchain.mjs +7 -1
- package/bin/internal/adopter-delivery-cli.mjs +70 -0
- package/bin/internal/command-registry.mjs +1 -0
- package/bin/internal/trust-release-release-handlers.mjs +5 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/archive-template.json +19 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +93 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/gate-positive.json +29 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/gate-unknown-selector.json +26 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/offline-vectors.json +50 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/artifacts/product.bin +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/config/buildchain.toml +5 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/release-activation.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/signed-channel.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/evidence/qualification.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/candidate.json +5 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/release-passport.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/capsule.json +707 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/offline-vectors.json +27 -0
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
- package/contracts/v4-adopter-delivery-v1.schema.json +81 -0
- package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +4 -2
- package/contracts/v4-publication-qualification-v1.schema.json +51 -0
- package/contracts/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
- package/dist/site/agent-index.json +4 -0
- package/dist/site/artifact-schemas.json +8 -0
- package/dist/site/buildchain-contract.json +125 -34
- package/dist/site/buildchain-site.json +308 -33
- package/dist/site/capability-registry.json +13 -12
- package/dist/site/cli-registry.json +57 -2
- package/dist/site/controller-registry.json +41 -5
- package/dist/site/kfd-claims.json +438 -24
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +22 -7
- package/dist/site/node-api-registry.json +12843 -9314
- package/dist/site/page-registry.json +288 -21
- package/dist/site/public-surface-audit.json +281 -21
- package/dist/site/publication-authority-registry.json +66 -8
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +20 -0
- package/dist/site/schemas/release-tail-capabilities-v1.schema.json +199 -0
- package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +81 -0
- package/dist/site/schemas/v4-publication-qualification-v1.schema.json +51 -0
- package/dist/site/schemas/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
- package/dist/site/site-manifest.json +19 -11
- package/dist/site/workflow-registry.json +195 -17
- package/docs/MAP.md +4 -2
- package/docs/cli-reference.md +70 -2
- package/docs/cli.md +8 -0
- package/docs/dev-delivery-warrant.md +34 -10
- package/docs/node-api-reference.md +524 -279
- package/docs/publish-transaction.md +11 -4
- package/docs/release-candidate.md +7 -0
- package/docs/release-tail-provider-plane.md +30 -0
- package/docs/v4-adopter-delivery.md +152 -0
- package/docs/v4-declarative-release-tail-migration.md +43 -0
- package/docs/v4-publication-rehearsal.md +130 -0
- package/package.json +24 -4
- package/packages/core/adopter-delivery-passport.js +295 -0
- package/packages/core/adopter-delivery-vectors.js +158 -0
- package/packages/core/adopter-delivery-vectors.json +77 -0
- package/packages/core/buildchain-agent-manuals.js +1 -0
- package/packages/core/buildchain-config.js +84 -0
- package/packages/core/buildchain-contract.js +31 -1
- package/packages/core/buildchain-delivery-bootstrap.js +240 -0
- package/packages/core/buildchain-delivery-infrastructure.js +164 -0
- package/packages/core/buildchain-delivery-self-dogfood.js +395 -0
- package/packages/core/buildchain-publication-authority.js +2 -0
- package/packages/core/ci-lane-change-budget.js +247 -0
- package/packages/core/dev-delivery-native-proof.js +43 -27
- package/packages/core/dev-delivery-warrant-settlement.js +239 -3
- package/packages/core/dev-delivery-warrant-state.js +46 -10
- package/packages/core/dev-delivery-warrant.js +29 -7
- package/packages/core/github-governance-authority.js +5 -4
- package/packages/core/index.js +6 -0
- package/packages/core/legacy-kfd-adopter-driver.js +167 -0
- package/packages/core/paper-scaffold-content.js +401 -0
- package/packages/core/paper.js +12 -378
- package/packages/core/publication-control-plane-audit.js +135 -111
- package/packages/core/publication-rehearsal-projection.js +104 -0
- package/packages/core/publication-rehearsal-runtime.js +190 -0
- package/packages/core/published-delivery-authority.js +266 -0
- package/packages/core/release-candidate-recovery.js +71 -15
- package/packages/core/release-candidate.js +2 -2
- package/packages/core/release-passport.js +95 -170
- package/packages/core/v4-adopter-delivery-parity.js +3 -3
- package/packages/core/v4-adopter-delivery.js +359 -0
- package/packages/core/v4-cross-platform-adopter-qualification.js +343 -0
- package/packages/core/v4-delivery-warrant-read-candidate.js +10 -3
- package/packages/core/v4-floating-consumer-evidence.js +18 -4
- package/packages/core/v4-floating-consumer-policy.js +139 -35
- package/packages/core/v4-floating-consumer-release-passport.js +154 -8
- package/packages/core/v4-publication-qualification.js +222 -0
- package/packages/core/v4-publication-rehearsal-capsule.js +468 -0
- package/packages/core/v4-publication-rehearsal-provider-bindings.js +212 -0
- package/packages/core/v4-publication-rehearsal.js +481 -0
- package/packages/core/workflow-yaml-contract.js +24 -2
- package/scripts/artifact-signing-controller-core.mjs +1 -1
- package/scripts/audit-publication-control-plane.mjs +17 -17
- package/scripts/buildchain-cli-help.mjs +13 -0
- package/scripts/check-ci-lane-change-budget.mjs +100 -0
- package/scripts/check-internal-architecture.mjs +23 -3
- package/scripts/check-inventory.mjs +24 -6
- package/scripts/check-maintainability.mjs +145 -4
- package/scripts/check-project-cut-merge-queue-admission.mjs +87 -0
- package/scripts/check-v3-v4-capability-inventory.mjs +574 -0
- package/scripts/check-v4-floating-consumer-policy-contract.mjs +30 -4
- package/scripts/check-v4-runtime-semantic-closure.mjs +266 -0
- package/scripts/dev-delivery-source-proof-replay.mjs +153 -0
- package/scripts/dev-delivery-source-proof-reuse.mjs +13 -97
- package/scripts/dev-delivery-warrant-options.mjs +27 -11
- package/scripts/dev-delivery-warrant-store.mjs +10 -6
- package/scripts/dev-delivery-warrant.mjs +50 -6
- package/scripts/dev-pr-auto-merge.mjs +25 -11
- package/scripts/dev-pr-delivery-warrant.mjs +45 -0
- package/scripts/dev-pr-prequeue-guard.mjs +0 -18
- package/scripts/dev-qualification-patrol.mjs +9 -9
- package/scripts/dispatch-artifact-signing-authority.mjs +1 -1
- package/scripts/generate-agent-change-map.mjs +118 -0
- package/scripts/generate-channel-promotion-workflow.mjs +2 -2
- package/scripts/generate-release-candidate-passport.mjs +177 -0
- package/scripts/generate-site-bundle.mjs +36 -0
- package/scripts/maintainability-domain-metrics.mjs +237 -0
- package/scripts/maintainability-governance.mjs +473 -0
- package/scripts/maintainability-metrics.mjs +28 -6
- package/scripts/project-cut-merge-queue-admission.mjs +394 -0
- package/scripts/promotion-channel-router.mjs +4 -4
- package/scripts/promotion-routing-evidence.mjs +35 -6
- package/scripts/release-candidate-anchor-provenance.mjs +99 -0
- package/scripts/release-candidate-resolver.mjs +44 -0
- package/scripts/release-line-policy.mjs +25 -15
- package/scripts/release-tail.mjs +68 -3
- package/scripts/resume-from-candidate-run.mjs +595 -65
- package/scripts/run-lifecycle-core.mjs +341 -376
- package/scripts/site-capability-metadata.mjs +21 -0
- package/scripts/stable-candidate-qualification.mjs +9 -10
- package/scripts/v3-v4-capability-catalog.mjs +439 -0
- package/scripts/v4-consumer-policy.mjs +4 -0
- package/scripts/v4-cross-platform-adopter-qualification.mjs +228 -0
- package/scripts/v4-declarative-promotion-admission.mjs +42 -0
- package/scripts/v4-publication-rehearsal-fixture.mjs +144 -0
|
@@ -47,16 +47,27 @@ export function parseVersionStateRef(ref) {
|
|
|
47
47
|
|
|
48
48
|
export function parseReleaseLineRecoveryRef(ref) {
|
|
49
49
|
const normalizedRef = normalizeRef(ref);
|
|
50
|
-
const match = normalizedRef.match(/^fix\/release-line-v(\d+)-v(\d+\.\d+)-[0-9A-Za-z._-]+$/);
|
|
50
|
+
const match = normalizedRef.match(/^fix\/(alpha|release)-line-v(\d+)-v(\d+\.\d+)-[0-9A-Za-z._-]+$/);
|
|
51
51
|
if (!match) return undefined;
|
|
52
52
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
channel: match[1],
|
|
54
|
+
major: Number(match[2]),
|
|
55
|
+
loose: Number(match[3]),
|
|
56
|
+
normalizedRef: `${match[1]}/v${match[2]}/v${match[3]}`,
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
function getRecoveryBumpKeyword({ target, baseRef, baseChannel, version, looseVersionNumber, headRef }) {
|
|
61
|
+
if (!target) return "";
|
|
62
|
+
if (baseChannel !== target.channel || target.normalizedRef !== normalizeRef(baseRef)) {
|
|
63
|
+
throw new Error(`Versions not match for head/base refs: ${headRef} -> ${baseRef}`);
|
|
64
|
+
}
|
|
65
|
+
if (target.major !== version.major || target.loose !== looseVersionNumber) {
|
|
66
|
+
throw new Error(`The version of head ref ${headRef} does not match current ${version.version}`);
|
|
67
|
+
}
|
|
68
|
+
return baseChannel === "release" ? "patch" : "prerelease";
|
|
69
|
+
}
|
|
70
|
+
|
|
60
71
|
export function parsePublishGateChannelRef(ref) {
|
|
61
72
|
const normalizedRef = normalizeRef(ref);
|
|
62
73
|
const match = normalizedRef.match(/^publish-gate\/(alpha|release)\/(v(\d+)\/v(\d+\.\d+))\/[^/]+$/);
|
|
@@ -131,6 +142,14 @@ export function getBumpKeyword({ cwd = process.cwd(), headRef, baseRef, loose =
|
|
|
131
142
|
const authorityTarget = parseAuthorityRef(baseRef);
|
|
132
143
|
const headChannel = getChannel(headRef);
|
|
133
144
|
const baseChannel = getChannel(baseRef);
|
|
145
|
+
const recoveryKeyword = getRecoveryBumpKeyword({
|
|
146
|
+
target: releaseLineRecoveryTarget,
|
|
147
|
+
baseRef,
|
|
148
|
+
baseChannel,
|
|
149
|
+
version,
|
|
150
|
+
looseVersionNumber,
|
|
151
|
+
headRef,
|
|
152
|
+
});
|
|
134
153
|
const key = `${headChannel}->${baseChannel}`;
|
|
135
154
|
const keywords = {
|
|
136
155
|
"dev->alpha": "prerelease",
|
|
@@ -157,16 +176,7 @@ export function getBumpKeyword({ cwd = process.cwd(), headRef, baseRef, loose =
|
|
|
157
176
|
return "none";
|
|
158
177
|
}
|
|
159
178
|
|
|
160
|
-
if (
|
|
161
|
-
if (baseChannel !== "release" || releaseLineRecoveryTarget.normalizedRef !== normalizeRef(baseRef)) {
|
|
162
|
-
throw new Error(`Versions not match for head/base refs: ${headRef} -> ${baseRef}`);
|
|
163
|
-
}
|
|
164
|
-
const mismatchMsg = `The version of head ref ${headRef} does not match current ${version.version}`;
|
|
165
|
-
if (releaseLineRecoveryTarget.major !== version.major || releaseLineRecoveryTarget.loose !== looseVersionNumber) {
|
|
166
|
-
throw new Error(mismatchMsg);
|
|
167
|
-
}
|
|
168
|
-
return "patch";
|
|
169
|
-
}
|
|
179
|
+
if (recoveryKeyword) return recoveryKeyword;
|
|
170
180
|
|
|
171
181
|
if (publishGateTarget) {
|
|
172
182
|
if (publishGateTarget.channel !== baseChannel || publishGateTarget.normalizedRef !== normalizeRef(baseRef)) {
|
package/scripts/release-tail.mjs
CHANGED
|
@@ -11,6 +11,10 @@ import {
|
|
|
11
11
|
writeReleaseTailTransaction,
|
|
12
12
|
} from "../packages/core/release-tail-provider-plane.js";
|
|
13
13
|
import { diagnoseLegacyReleaseTailHooks } from "../packages/core/release-tail-compatibility.js";
|
|
14
|
+
import {
|
|
15
|
+
V4_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
|
|
16
|
+
executeV4PublicationRehearsal,
|
|
17
|
+
} from "../packages/core/v4-publication-rehearsal.js";
|
|
14
18
|
|
|
15
19
|
function flag(args, name, fallback = "") {
|
|
16
20
|
const index = args.indexOf(`--${name}`);
|
|
@@ -34,8 +38,69 @@ function output(value, filePath = "") {
|
|
|
34
38
|
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
export function runReleaseTailCli(args = process.argv.slice(2)) {
|
|
41
|
+
export async function runReleaseTailCli(args = process.argv.slice(2)) {
|
|
38
42
|
const [mode = "status", ...options] = args;
|
|
43
|
+
if (mode === "rehearse") {
|
|
44
|
+
const capsulePath = flag(options, "capsule");
|
|
45
|
+
const candidateRoot =
|
|
46
|
+
flag(options, "candidate-root") || flag(options, "capsule-root");
|
|
47
|
+
const statePath = flag(options, "state");
|
|
48
|
+
const evidencePath = flag(options, "evidence");
|
|
49
|
+
for (const [name, value] of Object.entries({
|
|
50
|
+
"--capsule": capsulePath,
|
|
51
|
+
"--candidate-root": candidateRoot,
|
|
52
|
+
"--state": statePath,
|
|
53
|
+
"--evidence": evidencePath,
|
|
54
|
+
}))
|
|
55
|
+
if (!value || !path.isAbsolute(value))
|
|
56
|
+
throw new Error(`${name} must be an explicit absolute path`);
|
|
57
|
+
const rehearsalMode = flag(options, "mode", "simulate");
|
|
58
|
+
if (!new Set(["simulate", "replay"]).has(rehearsalMode))
|
|
59
|
+
throw new Error(
|
|
60
|
+
"local rehearsal --mode must be simulate or replay; authorized provider rehearsal uses the reusable workflow",
|
|
61
|
+
);
|
|
62
|
+
try {
|
|
63
|
+
const environmentInput = flag(options, "environment-json");
|
|
64
|
+
const environment = environmentInput
|
|
65
|
+
? readJson(environmentInput, "--environment-json")
|
|
66
|
+
: {};
|
|
67
|
+
if (
|
|
68
|
+
!environment ||
|
|
69
|
+
typeof environment !== "object" ||
|
|
70
|
+
Array.isArray(environment) ||
|
|
71
|
+
Object.keys(environment).length > 0
|
|
72
|
+
) {
|
|
73
|
+
const error = new Error(
|
|
74
|
+
"--environment-json must be an empty object; v4 binds every semantic input into the source-bound capsule",
|
|
75
|
+
);
|
|
76
|
+
error.code = "ambient-environment-forbidden";
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
const result = await executeV4PublicationRehearsal({
|
|
80
|
+
capsule: readJson(capsulePath, "--capsule"),
|
|
81
|
+
candidateRoot,
|
|
82
|
+
mode: rehearsalMode,
|
|
83
|
+
checkpoint: (transaction) =>
|
|
84
|
+
writeReleaseTailTransaction(statePath, transaction),
|
|
85
|
+
});
|
|
86
|
+
writeReleaseTailTransaction(statePath, result.transaction);
|
|
87
|
+
output(result.evidence, evidencePath);
|
|
88
|
+
return result;
|
|
89
|
+
} catch (error) {
|
|
90
|
+
output(
|
|
91
|
+
{
|
|
92
|
+
schema: V4_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
|
|
93
|
+
status: "rejected",
|
|
94
|
+
code: error.code || "publication-rehearsal-runtime-error",
|
|
95
|
+
message: error.message,
|
|
96
|
+
productionAuthority: false,
|
|
97
|
+
releasePassport: null,
|
|
98
|
+
},
|
|
99
|
+
evidencePath,
|
|
100
|
+
);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
39
104
|
if (mode === "plan") {
|
|
40
105
|
const plan = compileReleaseTailDeclaration(
|
|
41
106
|
readJson(flag(options, "declaration"), "--declaration"),
|
|
@@ -95,7 +160,7 @@ export function runReleaseTailCli(args = process.argv.slice(2)) {
|
|
|
95
160
|
return report;
|
|
96
161
|
}
|
|
97
162
|
throw new Error(
|
|
98
|
-
"usage: buildchain release-tail <plan|init|status|verify|compat> [--declaration <json-or-path>] [--state <path>] [--hooks-json <json-or-path>] [--output <path>]",
|
|
163
|
+
"usage: buildchain release-tail <plan|init|status|verify|compat|rehearse> [--declaration <json-or-path>] [--capsule <absolute-path>] [--candidate-root <absolute-path>|--capsule-root <absolute-path>] [--environment-json <empty-json-or-path>] [--mode <simulate|replay>] [--state <absolute-path>] [--evidence <absolute-path>] [--hooks-json <json-or-path>] [--output <path>]",
|
|
99
164
|
);
|
|
100
165
|
}
|
|
101
166
|
|
|
@@ -105,7 +170,7 @@ if (
|
|
|
105
170
|
import.meta.url === pathToFileURL(process.argv[1]).href
|
|
106
171
|
) {
|
|
107
172
|
try {
|
|
108
|
-
runReleaseTailCli();
|
|
173
|
+
await runReleaseTailCli();
|
|
109
174
|
} catch (error) {
|
|
110
175
|
console.error(`release-tail: ${error.message}`);
|
|
111
176
|
process.exitCode = 1;
|