@kungfu-tech/buildchain 3.0.3-alpha.2 → 3.0.3-alpha.3
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/site/buildchain-contract.json +3 -3
- package/dist/site/buildchain-site.json +4 -4
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/node-api-registry.json +1 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +4 -4
- package/package.json +1 -1
- package/packages/core/paper-fleet.js +26 -0
- package/packages/core/paper-repository.js +1 -0
- package/packages/core/paper.js +43 -8
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "3.0.3-alpha.
|
|
7
|
+
"version": "3.0.3-alpha.3",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v3",
|
|
@@ -731,7 +731,7 @@
|
|
|
731
731
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
732
732
|
],
|
|
733
733
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
734
|
-
"auditDigest": "sha256:
|
|
734
|
+
"auditDigest": "sha256:580c8766d5007b1655b341b8e6d0f417cbdd1324f59cac094bead261fa50c961"
|
|
735
735
|
},
|
|
736
736
|
{
|
|
737
737
|
"contractVersion": 1,
|
|
@@ -3522,5 +3522,5 @@
|
|
|
3522
3522
|
}
|
|
3523
3523
|
],
|
|
3524
3524
|
"compatibilityDigest": "sha256:61af7d0871220bc0909008bdc571905ad500cccf853e7841bc5d462a34b2d436",
|
|
3525
|
-
"contractDigest": "sha256:
|
|
3525
|
+
"contractDigest": "sha256:8b03b26e1175e136a3eb6ff6755844fe93cdfd4375f5c0f93221664ca2d7d660"
|
|
3526
3526
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-31T16:01:42.263Z",
|
|
5
|
+
"publishedAt": "2026-07-31T16:01:42.263Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "f30bb2678cacbae947eb46411c13eda75e9e35b0",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"package": {
|
|
39
39
|
"name": "@kungfu-tech/buildchain",
|
|
40
|
-
"version": "3.0.3-alpha.
|
|
40
|
+
"version": "3.0.3-alpha.3",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -616,7 +616,7 @@
|
|
|
616
616
|
"specifier": "@kungfu-tech/buildchain/paper",
|
|
617
617
|
"export": "./paper",
|
|
618
618
|
"target": "./packages/core/paper.js",
|
|
619
|
-
"digest": "sha256:
|
|
619
|
+
"digest": "sha256:9e92cd56383d09ea020f7e9b80bc87ae61ab1e66f4cd771dcb5e918708b7bbc4",
|
|
620
620
|
"summary": "Unified Paper work, fleet, scaffold, preflight, npm bootstrap, build, Alpha, status, and resume planning APIs.",
|
|
621
621
|
"capabilityGroup": "reusable-build",
|
|
622
622
|
"audience": [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-31T16:01:42.263Z",
|
|
5
|
+
"publishedAt": "2026-07-31T16:01:42.263Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "f30bb2678cacbae947eb46411c13eda75e9e35b0",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"package": {
|
|
34
34
|
"name": "@kungfu-tech/buildchain",
|
|
35
|
-
"version": "3.0.3-alpha.
|
|
35
|
+
"version": "3.0.3-alpha.3",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-manifest",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-31T16:01:42.263Z",
|
|
5
|
+
"publishedAt": "2026-07-31T16:01:42.263Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "f30bb2678cacbae947eb46411c13eda75e9e35b0",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"package": {
|
|
39
39
|
"name": "@kungfu-tech/buildchain",
|
|
40
|
-
"version": "3.0.3-alpha.
|
|
40
|
+
"version": "3.0.3-alpha.3",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "3.0.3-alpha.
|
|
3
|
+
"version": "3.0.3-alpha.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
|
|
6
6
|
"repository": "https://github.com/kungfu-systems/buildchain",
|
|
@@ -46,6 +46,24 @@ function plannedManagedSurfaces(options) {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
function legacyBuildchainWorkflowRefs(cwd) {
|
|
50
|
+
const workflowRoot = path.resolve(cwd, ".github", "workflows");
|
|
51
|
+
if (!fs.existsSync(workflowRoot)) return [];
|
|
52
|
+
return fs
|
|
53
|
+
.readdirSync(workflowRoot, { withFileTypes: true })
|
|
54
|
+
.filter(
|
|
55
|
+
(entry) =>
|
|
56
|
+
entry.isFile() && /\.ya?ml$/i.test(entry.name),
|
|
57
|
+
)
|
|
58
|
+
.filter((entry) =>
|
|
59
|
+
/uses:\s*kungfu-systems\/buildchain\/[^\s]+@v2(?:[-.][^\s]+)?/i.test(
|
|
60
|
+
fs.readFileSync(path.join(workflowRoot, entry.name), "utf8"),
|
|
61
|
+
),
|
|
62
|
+
)
|
|
63
|
+
.map((entry) => `.github/workflows/${entry.name}`)
|
|
64
|
+
.sort();
|
|
65
|
+
}
|
|
66
|
+
|
|
49
67
|
function paperFleetEntry({
|
|
50
68
|
cwd,
|
|
51
69
|
buildchainRoot,
|
|
@@ -78,6 +96,7 @@ function paperFleetEntry({
|
|
|
78
96
|
const lockText = fs.existsSync(lockPath)
|
|
79
97
|
? fs.readFileSync(lockPath, "utf8")
|
|
80
98
|
: "";
|
|
99
|
+
const legacyWorkflows = legacyBuildchainWorkflowRefs(cwd);
|
|
81
100
|
const checks = [
|
|
82
101
|
workCheck(
|
|
83
102
|
"repository.canonical-origin",
|
|
@@ -112,6 +131,12 @@ function paperFleetEntry({
|
|
|
112
131
|
"Every Buildchain-owned paper control surface matches v3.",
|
|
113
132
|
"buildchain paper migrate --write --json",
|
|
114
133
|
),
|
|
134
|
+
workCheck(
|
|
135
|
+
"workflows.buildchain-v2-absent",
|
|
136
|
+
legacyWorkflows.length === 0,
|
|
137
|
+
"No workflow calls a Buildchain v2 reusable surface.",
|
|
138
|
+
"buildchain paper migrate --write --json",
|
|
139
|
+
),
|
|
115
140
|
];
|
|
116
141
|
return {
|
|
117
142
|
name: path.basename(cwd),
|
|
@@ -124,6 +149,7 @@ function paperFleetEntry({
|
|
|
124
149
|
buildchainDependency: dependency,
|
|
125
150
|
expectedError: expected.error,
|
|
126
151
|
managed,
|
|
152
|
+
legacyWorkflows,
|
|
127
153
|
checks,
|
|
128
154
|
ok: checks.every((entry) => entry.status === "pass"),
|
|
129
155
|
};
|
|
@@ -9,6 +9,7 @@ export const PAPER_PATHS = Object.freeze({
|
|
|
9
9
|
versionPin: ".buildchain-version",
|
|
10
10
|
contractLock: ".buildchain/contract-lock.json",
|
|
11
11
|
buildWorkflow: ".github/workflows/build.yml",
|
|
12
|
+
verifyWorkflow: ".github/workflows/verify.yml",
|
|
12
13
|
releaseWorkflow: ".github/workflows/paper-release.yml",
|
|
13
14
|
reproducibilityReceipt:
|
|
14
15
|
".buildchain/publication/reproducibility-receipt.json",
|
package/packages/core/paper.js
CHANGED
|
@@ -172,11 +172,30 @@ function runtimeGitSha(buildchainRoot, buildchainVersion = "") {
|
|
|
172
172
|
return GIT_SHA_PATTERN.test(gitHead) ? gitHead : "";
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function runtimeAcceptedAt(buildchainRoot, sha) {
|
|
175
|
+
function runtimeAcceptedAt(buildchainRoot, sha, buildchainVersion = "") {
|
|
176
176
|
if (!sha) return "1970-01-01T00:00:00.000Z";
|
|
177
177
|
const value = gitValue(buildchainRoot, ["show", "-s", "--format=%cI", sha]);
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
let acceptedAt = value;
|
|
179
|
+
if (!acceptedAt && buildchainVersion) {
|
|
180
|
+
const identity = buildchainPackageIdentity(
|
|
181
|
+
buildchainRoot,
|
|
182
|
+
buildchainVersion,
|
|
183
|
+
);
|
|
184
|
+
const observed = commandResult(
|
|
185
|
+
"npm",
|
|
186
|
+
[
|
|
187
|
+
"view",
|
|
188
|
+
`${identity.name}@${identity.version}`,
|
|
189
|
+
"time",
|
|
190
|
+
"--json",
|
|
191
|
+
`--registry=${NPM_REGISTRY}`,
|
|
192
|
+
],
|
|
193
|
+
{ cwd: buildchainRoot },
|
|
194
|
+
);
|
|
195
|
+
const published = observed.ok ? safeParseJson(observed.stdout) : null;
|
|
196
|
+
acceptedAt = String(published?.[identity.version] || "");
|
|
197
|
+
}
|
|
198
|
+
const parsed = new Date(acceptedAt);
|
|
180
199
|
return Number.isNaN(parsed.valueOf())
|
|
181
200
|
? "1970-01-01T00:00:00.000Z"
|
|
182
201
|
: parsed.toISOString();
|
|
@@ -613,9 +632,9 @@ function scaffoldFiles({
|
|
|
613
632
|
).value;
|
|
614
633
|
const acceptedAt =
|
|
615
634
|
existingLock?.buildchain?.acceptedAt ||
|
|
616
|
-
runtimeAcceptedAt(buildchainRoot, buildchainSha);
|
|
635
|
+
runtimeAcceptedAt(buildchainRoot, buildchainSha, buildchainVersion);
|
|
617
636
|
const contractLock = createBuildchainContractLock({
|
|
618
|
-
buildchainRef
|
|
637
|
+
buildchainRef,
|
|
619
638
|
resolvedSha: buildchainSha,
|
|
620
639
|
contractWorld,
|
|
621
640
|
acceptedAt,
|
|
@@ -918,13 +937,17 @@ function migrationFiles({
|
|
|
918
937
|
path.resolve(cwd, PAPER_PATHS.contractLock),
|
|
919
938
|
).value;
|
|
920
939
|
const contractLock = createBuildchainContractLock({
|
|
921
|
-
buildchainRef:
|
|
940
|
+
buildchainRef: "v3",
|
|
922
941
|
resolvedSha: runtimeSha,
|
|
923
942
|
contractWorld: runtimeContractWorld(buildchainRoot),
|
|
924
943
|
acceptedAt:
|
|
925
944
|
existingLock?.buildchain?.resolvedSha === runtimeSha
|
|
926
945
|
? existingLock.buildchain.acceptedAt
|
|
927
|
-
: runtimeAcceptedAt(
|
|
946
|
+
: runtimeAcceptedAt(
|
|
947
|
+
buildchainRoot,
|
|
948
|
+
runtimeSha,
|
|
949
|
+
runtimeIdentity.version,
|
|
950
|
+
),
|
|
928
951
|
});
|
|
929
952
|
const contractLockText = jsonText(contractLock);
|
|
930
953
|
const buildWorkflow = scaffoldBuildWorkflow(runtimeSha, {
|
|
@@ -951,7 +974,7 @@ function migrationFiles({
|
|
|
951
974
|
currentPackage.value,
|
|
952
975
|
runtimeIdentity.version,
|
|
953
976
|
);
|
|
954
|
-
|
|
977
|
+
const files = new Map([
|
|
955
978
|
[PAPER_PATHS.contractLock, contractLockText],
|
|
956
979
|
[PAPER_PATHS.versionPin, `${runtimeIdentity.version}\n`],
|
|
957
980
|
[PAPER_PATHS.buildWorkflow, buildWorkflow],
|
|
@@ -959,6 +982,18 @@ function migrationFiles({
|
|
|
959
982
|
[PAPER_PATHS.provisioningAuthority, jsonText(provisioningAuthority)],
|
|
960
983
|
["package.json", jsonText(packageJson)],
|
|
961
984
|
]);
|
|
985
|
+
const verifyWorkflowPath = path.resolve(cwd, PAPER_PATHS.verifyWorkflow);
|
|
986
|
+
if (fs.existsSync(verifyWorkflowPath)) {
|
|
987
|
+
const currentVerifyWorkflow = fs.readFileSync(verifyWorkflowPath, "utf8");
|
|
988
|
+
const migratedVerifyWorkflow = currentVerifyWorkflow.replace(
|
|
989
|
+
/(uses:\s*kungfu-systems\/buildchain\/\.github\/workflows\/check\.yml@)[^\s]+/g,
|
|
990
|
+
`$1${runtimeSha}`,
|
|
991
|
+
);
|
|
992
|
+
if (migratedVerifyWorkflow !== currentVerifyWorkflow) {
|
|
993
|
+
files.set(PAPER_PATHS.verifyWorkflow, migratedVerifyWorkflow);
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
return files;
|
|
962
997
|
}
|
|
963
998
|
|
|
964
999
|
export function planPaperMigration({
|