@kungfu-tech/buildchain 4.0.1-alpha.3 → 4.0.1-alpha.5
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/architecture/decisions/0002-next-development-transition.md +101 -0
- package/architecture/internal-capabilities.json +52 -3
- package/architecture/maintainability-policy.json +22 -10
- package/architecture/v3-core-mechanism-inventory.json +89 -0
- package/architecture/v4-capability-state-machine-manifest.json +73 -0
- package/architecture/v4-compatibility-facts-parity.json +77 -0
- package/architecture/v4-delivery-warrant-shadow-fixtures.json +15 -6
- package/architecture/v4-next-development-parity.json +192 -0
- package/architecture/v4-release-train-parity.json +1 -0
- package/architecture/v4-tail-reseal-parity.json +150 -0
- package/bin/buildchain.mjs +16 -1
- package/bin/internal/command-registry.mjs +2 -0
- package/bin/internal/compatibility-facts-cli.mjs +101 -0
- package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +47 -0
- package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +47 -0
- package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +40 -0
- package/contracts/fixtures/v4-compatibility-facts-v1/shared.json +1129 -0
- package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +7 -1
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +229 -0
- package/contracts/next-development-request-v1.schema.json +66 -0
- package/contracts/next-development-transition-v1.schema.json +292 -0
- package/contracts/v4-compatibility-facts-v1.schema.json +230 -0
- package/contracts/v4-tail-reseal-v1.schema.json +276 -0
- package/dist/site/agent-index.json +1 -0
- package/dist/site/artifact-schemas.json +2 -0
- package/dist/site/buildchain-contract.json +1388 -23
- package/dist/site/buildchain-site.json +259 -21
- package/dist/site/capability-registry.json +10 -8
- package/dist/site/cli-registry.json +106 -0
- package/dist/site/kfd-claims.json +187 -12
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +35 -4
- package/dist/site/node-api-registry.json +6578 -4492
- package/dist/site/page-registry.json +235 -13
- package/dist/site/public-surface-audit.json +241 -7
- package/dist/site/publication-authority-registry.json +6 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +7 -0
- package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +230 -0
- package/dist/site/site-manifest.json +24 -8
- package/dist/site/workflow-registry.json +36 -4
- package/docs/MAP.md +4 -1
- package/docs/cli-reference.md +125 -0
- package/docs/dev-alpha-candidate-patrol.md +8 -0
- package/docs/dev-delivery-warrant.md +8 -4
- package/docs/next-development-transition.md +118 -0
- package/docs/node-api-reference.md +256 -123
- package/docs/v4-compatibility-facts.md +91 -0
- package/docs/v4-tail-reseal.md +73 -0
- package/docs/versioning.md +4 -3
- package/package.json +14 -5
- package/packages/core/buildchain-agent-manuals.js +2 -0
- package/packages/core/buildchain-compatibility-authority.js +336 -0
- package/packages/core/buildchain-compatibility-fact.js +394 -0
- package/packages/core/buildchain-compatibility-facts.json +217 -0
- package/packages/core/buildchain-compatibility-proof.js +566 -0
- package/packages/core/buildchain-contract.js +93 -141
- package/packages/core/channel-candidate.js +8 -0
- package/packages/core/channel-promotion-baseline.js +55 -0
- package/packages/core/dev-alpha-candidate-selection.js +10 -2
- package/packages/core/dev-delivery-execution-transfer.js +21 -1
- package/packages/core/dev-delivery-process-boundary.js +19 -7
- package/packages/core/dev-delivery-provider-heartbeat.js +18 -6
- package/packages/core/dev-delivery-warrant-state.js +4 -5
- package/packages/core/dev-delivery-warrant.js +1 -0
- package/packages/core/kungfu-temporal-fact.js +557 -0
- package/packages/core/next-development-candidate-reservation.js +186 -0
- package/packages/core/next-development-controller.js +728 -0
- package/packages/core/next-development-projection.js +287 -0
- package/packages/core/next-development-transition.js +738 -0
- package/packages/core/paper-agent-entry.js +11 -5
- package/packages/core/paper.js +16 -5
- package/packages/core/v4-canonical-contracts.js +5 -0
- package/packages/core/v4-floating-consumer-policy.js +29 -9
- package/packages/core/v4-tail-reseal-contract.js +26 -0
- package/packages/core/v4-tail-reseal-github.js +178 -0
- package/packages/core/v4-tail-reseal-receipt.js +225 -0
- package/packages/core/v4-tail-reseal.js +594 -0
- package/scripts/buildchain-cli-help.mjs +20 -0
- package/scripts/check-inventory.mjs +11 -0
- package/scripts/check-v4-floating-consumer-policy-contract.mjs +1 -1
- package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
- package/scripts/dev-pr-auto-merge.mjs +1 -1
- package/scripts/generate-next-development-guidance.mjs +49 -0
- package/scripts/generate-site-bundle.mjs +16 -3
- package/scripts/init-repo.mjs +22 -4
- package/scripts/next-development-self-dogfood-harness.mjs +460 -0
- package/scripts/next-development-self-dogfood.mjs +597 -0
- package/scripts/next-development-transition.mjs +47 -0
- package/scripts/release-train-self-dogfood.mjs +94 -92
- package/scripts/site-capability-metadata.mjs +12 -0
- package/scripts/v4-consumer-policy.mjs +1 -5
- package/scripts/v4-tail-reseal-macos-rehearsal.mjs +134 -0
- package/scripts/v4-tail-reseal.mjs +416 -0
- package/templates/native-dev-delivery.yml +2 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-v4-next-development-parity",
|
|
4
|
+
"sourceAuthority": {
|
|
5
|
+
"branch": "dev/v3/v3.0",
|
|
6
|
+
"capturedCommit": "6b96bdad8d9f8ccf9275f27d9370a226a9c78465",
|
|
7
|
+
"transitionCommit": "d165c2f733859dd2e46a2d1fdb25b242e2fc2567",
|
|
8
|
+
"controllerCommit": "63f494d4b92c0bd01ffb454c6fce23d0692148fb",
|
|
9
|
+
"selfDogfoodCommit": "518bb4cb4706db1854e5a5b39bf7198f2aaa1d1d"
|
|
10
|
+
},
|
|
11
|
+
"target": {
|
|
12
|
+
"branch": "dev/v4/v4.0",
|
|
13
|
+
"implementationBaseline": "36ad1dc03a9d2785aca938a7a369e4b96707fa32",
|
|
14
|
+
"publicConsumerCaller": ".github/workflows/v4-public-consumer-dogfood.yml",
|
|
15
|
+
"publicConsumerReusable": "kungfu-systems/buildchain/.github/workflows/v4-stage-capsule-canary.yml@v4-alpha"
|
|
16
|
+
},
|
|
17
|
+
"earlierContinuityDelta": {
|
|
18
|
+
"assignment": "2026-08-11-buildchain-next-development-version-continuity",
|
|
19
|
+
"disposition": "no-current-reusable-implementation-evidence",
|
|
20
|
+
"requiredDelta": "implement and re-prove the exact v3 semantics against the live protected v4 head"
|
|
21
|
+
},
|
|
22
|
+
"allowedDispositions": [
|
|
23
|
+
"implemented",
|
|
24
|
+
"superseded-equivalent",
|
|
25
|
+
"missing-before-closeout"
|
|
26
|
+
],
|
|
27
|
+
"invariants": [
|
|
28
|
+
{
|
|
29
|
+
"id": "ND-01",
|
|
30
|
+
"claim": "The exact v3 planner, controller, projection and recovery authorities are mapped to current v4 files rather than inferred from the earlier continuity family.",
|
|
31
|
+
"disposition": "implemented",
|
|
32
|
+
"implementationEvidence": [
|
|
33
|
+
"architecture/decisions/0002-next-development-transition.md",
|
|
34
|
+
"packages/core/next-development-transition.js",
|
|
35
|
+
"packages/core/next-development-controller.js",
|
|
36
|
+
"packages/core/next-development-projection.js"
|
|
37
|
+
],
|
|
38
|
+
"verificationEvidence": ["tests/v4-next-development-parity.test.mjs"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "ND-02",
|
|
42
|
+
"claim": "Semver automatic planning deterministically advances only the Alpha sequence on the same patch and rejects operator-selected targets.",
|
|
43
|
+
"disposition": "implemented",
|
|
44
|
+
"implementationEvidence": [
|
|
45
|
+
"packages/core/next-development-transition.js",
|
|
46
|
+
"contracts/next-development-transition-v1.schema.json"
|
|
47
|
+
],
|
|
48
|
+
"verificationEvidence": [
|
|
49
|
+
"tests/next-development-transition.test.mjs",
|
|
50
|
+
"contracts/fixtures/next-development-transition-v1/semver-auto-planned.json"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "ND-03",
|
|
55
|
+
"claim": "Anchored manual planning remains waiting until reviewed target and exact read-only manifest digest authority are both supplied.",
|
|
56
|
+
"disposition": "implemented",
|
|
57
|
+
"implementationEvidence": [
|
|
58
|
+
"packages/core/next-development-transition.js",
|
|
59
|
+
"scripts/next-development-transition.mjs"
|
|
60
|
+
],
|
|
61
|
+
"verificationEvidence": [
|
|
62
|
+
"tests/next-development-transition.test.mjs",
|
|
63
|
+
"tests/next-development-controller.test.mjs",
|
|
64
|
+
"contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "ND-04",
|
|
69
|
+
"claim": "Atomic create-if-absent and compare-and-swap checkpoints create one child per completed Alpha and recover idempotent materialization after runner loss.",
|
|
70
|
+
"disposition": "implemented",
|
|
71
|
+
"implementationEvidence": [
|
|
72
|
+
"packages/core/next-development-controller.js"
|
|
73
|
+
],
|
|
74
|
+
"verificationEvidence": [
|
|
75
|
+
"tests/next-development-controller.test.mjs",
|
|
76
|
+
"tests/next-development-self-dogfood.test.mjs"
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "ND-05",
|
|
81
|
+
"claim": "Protected Dev movement supersedes only stale preparation, retries from current readback and preserves completed Alpha identity without rebuilding it.",
|
|
82
|
+
"disposition": "implemented",
|
|
83
|
+
"implementationEvidence": [
|
|
84
|
+
"packages/core/next-development-controller.js",
|
|
85
|
+
"actions/promote-buildchain-ref/internal/promote-alpha-channel.js",
|
|
86
|
+
"actions/promote-buildchain-ref/lib.js"
|
|
87
|
+
],
|
|
88
|
+
"verificationEvidence": [
|
|
89
|
+
"tests/next-development-controller.test.mjs",
|
|
90
|
+
"tests/promote-buildchain-ref-governance.test.mjs"
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "ND-06",
|
|
95
|
+
"claim": "A protected version pull request and exact source, derived, ancestry and target-version readback are mandatory before verified state.",
|
|
96
|
+
"disposition": "implemented",
|
|
97
|
+
"implementationEvidence": [
|
|
98
|
+
"packages/core/next-development-controller.js"
|
|
99
|
+
],
|
|
100
|
+
"verificationEvidence": [
|
|
101
|
+
"tests/next-development-controller.test.mjs",
|
|
102
|
+
"tests/next-development-self-dogfood.test.mjs"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "ND-07",
|
|
107
|
+
"claim": "Completed candidates and Alpha publication remain immutable and terminal; next-development exposes no tag, release, package, candidate or ref-update effect.",
|
|
108
|
+
"disposition": "implemented",
|
|
109
|
+
"implementationEvidence": [
|
|
110
|
+
"packages/core/next-development-transition.js",
|
|
111
|
+
"packages/core/next-development-controller.js"
|
|
112
|
+
],
|
|
113
|
+
"verificationEvidence": [
|
|
114
|
+
"tests/next-development-transition.test.mjs",
|
|
115
|
+
"tests/next-development-self-dogfood.test.mjs"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "ND-08",
|
|
120
|
+
"claim": "Candidate Patrol ignores pure version preparation and requires current exact blob reservation readback before later product candidate settlement.",
|
|
121
|
+
"disposition": "implemented",
|
|
122
|
+
"implementationEvidence": [
|
|
123
|
+
"packages/core/next-development-candidate-reservation.js",
|
|
124
|
+
"packages/core/channel-promotion-baseline.js",
|
|
125
|
+
"scripts/dev-alpha-candidate-patrol.mjs"
|
|
126
|
+
],
|
|
127
|
+
"verificationEvidence": ["tests/dev-alpha-candidate-patrol.test.mjs"]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "ND-09",
|
|
131
|
+
"claim": "The public CLI, Node exports, schemas, init and Paper templates, generated Agent guidance and manual all project one contract source.",
|
|
132
|
+
"disposition": "implemented",
|
|
133
|
+
"implementationEvidence": [
|
|
134
|
+
"bin/buildchain.mjs",
|
|
135
|
+
"bin/internal/command-registry.mjs",
|
|
136
|
+
"scripts/next-development-transition.mjs",
|
|
137
|
+
"package.json",
|
|
138
|
+
"contracts/next-development-request-v1.schema.json",
|
|
139
|
+
"contracts/next-development-transition-v1.schema.json",
|
|
140
|
+
"scripts/init-repo.mjs",
|
|
141
|
+
"packages/core/paper.js",
|
|
142
|
+
"packages/core/paper-agent-entry.js",
|
|
143
|
+
"packages/core/next-development-projection.js"
|
|
144
|
+
],
|
|
145
|
+
"verificationEvidence": [
|
|
146
|
+
"tests/next-development-transition.test.mjs",
|
|
147
|
+
"tests/v4-next-development-parity.test.mjs"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "ND-10",
|
|
152
|
+
"claim": "V4 recovery proof runs as pure tests through the standard lifecycle.verify reached by the exact thin public consumer caller, while existing hosted dual-channel evidence keeps public v4-alpha and v4 routes.",
|
|
153
|
+
"disposition": "implemented",
|
|
154
|
+
"implementationEvidence": [
|
|
155
|
+
".github/workflows/v4-public-consumer-dogfood.yml",
|
|
156
|
+
".github/workflows/buildchain-alpha-self-dogfood.yml",
|
|
157
|
+
".buildchain/buildchain.toml",
|
|
158
|
+
"scripts/next-development-self-dogfood.mjs",
|
|
159
|
+
"scripts/next-development-self-dogfood-harness.mjs"
|
|
160
|
+
],
|
|
161
|
+
"verificationEvidence": [
|
|
162
|
+
"tests/next-development-self-dogfood.test.mjs",
|
|
163
|
+
"tests/v4-public-dogfood-contract.test.mjs"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"id": "ND-11",
|
|
168
|
+
"claim": "Architecture inventory, capability metadata, generated references and site facts expose the current v4 next-development contract without stale generated output.",
|
|
169
|
+
"disposition": "implemented",
|
|
170
|
+
"implementationEvidence": [
|
|
171
|
+
"architecture/v3-core-mechanism-inventory.json",
|
|
172
|
+
"architecture/v4-capability-state-machine-manifest.json",
|
|
173
|
+
"scripts/check-inventory.mjs",
|
|
174
|
+
"scripts/site-capability-metadata.mjs",
|
|
175
|
+
"scripts/generate-site-bundle.mjs"
|
|
176
|
+
],
|
|
177
|
+
"verificationEvidence": [
|
|
178
|
+
"tests/core-mechanism-inventory.test.mjs",
|
|
179
|
+
"tests/v4-architecture.test.mjs",
|
|
180
|
+
"tests/v4-next-development-parity.test.mjs"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "ND-12",
|
|
185
|
+
"claim": "Independent review, protected merge into dev/v4/v4.0 and exact post-merge containment and readback are required external closeout evidence and cannot be inferred from local green tests.",
|
|
186
|
+
"disposition": "missing-before-closeout",
|
|
187
|
+
"implementationEvidence": [],
|
|
188
|
+
"verificationEvidence": []
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
"matrixRoot": "sha256:0f0d69dd338cad33dc61870675cbedb8664e019e403f73a1ddcf8471d69df405"
|
|
192
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-v4-tail-reseal-parity",
|
|
4
|
+
"sourceAuthority": {
|
|
5
|
+
"branch": "dev/v3/v3.0",
|
|
6
|
+
"capturedCommit": "6b96bdad8d9f8ccf9275f27d9370a226a9c78465",
|
|
7
|
+
"implementation": "scripts/release-candidate-tail-reseal.mjs",
|
|
8
|
+
"workflow": ".github/workflows/.build.yml",
|
|
9
|
+
"tests": "tests/release-candidate-tail-reseal.test.mjs"
|
|
10
|
+
},
|
|
11
|
+
"target": {
|
|
12
|
+
"branch": "dev/v4/v4.0",
|
|
13
|
+
"publicReusableWorkflow": "kungfu-systems/buildchain/.github/workflows/v4-tail-reseal.yml@v4-alpha",
|
|
14
|
+
"requestSchema": "contracts/v4-tail-reseal-v1.schema.json",
|
|
15
|
+
"planner": "packages/core/v4-tail-reseal.js",
|
|
16
|
+
"admission": "packages/core/v4-tail-reseal-github.js",
|
|
17
|
+
"receipt": "packages/core/v4-tail-reseal-receipt.js",
|
|
18
|
+
"cli": "buildchain tail-reseal"
|
|
19
|
+
},
|
|
20
|
+
"authority": {
|
|
21
|
+
"productionAuthority": "v4",
|
|
22
|
+
"stageCapsuleEffectAuthority": "none",
|
|
23
|
+
"signingAuthority": "explicit-live-release-tail",
|
|
24
|
+
"credentialAuthority": "lease-bound-secret-island",
|
|
25
|
+
"runtimePersistence": "floating-only",
|
|
26
|
+
"v3BehaviorChange": false
|
|
27
|
+
},
|
|
28
|
+
"allowedDispositions": [
|
|
29
|
+
"implemented",
|
|
30
|
+
"superseded-equivalent",
|
|
31
|
+
"missing-before-closeout"
|
|
32
|
+
],
|
|
33
|
+
"invariants": [
|
|
34
|
+
{
|
|
35
|
+
"id": "TR-01",
|
|
36
|
+
"claim": "The exact captured v3 retained-candidate script, workflow and tests are rooted as parity authority.",
|
|
37
|
+
"disposition": "implemented",
|
|
38
|
+
"implementationEvidence": ["architecture/v4-tail-reseal-parity.json"],
|
|
39
|
+
"verificationEvidence": ["tests/v4-tail-reseal-parity.test.mjs"]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "TR-02",
|
|
43
|
+
"claim": "One exact failed run binds four byte-addressed platform payloads, manifests, archives and Stage Capsules.",
|
|
44
|
+
"disposition": "implemented",
|
|
45
|
+
"implementationEvidence": [
|
|
46
|
+
"contracts/v4-tail-reseal-v1.schema.json",
|
|
47
|
+
"packages/core/v4-tail-reseal-github.js"
|
|
48
|
+
],
|
|
49
|
+
"verificationEvidence": [
|
|
50
|
+
"contracts/fixtures/v4-tail-reseal-v1/valid.json",
|
|
51
|
+
"tests/v4-tail-reseal.test.mjs"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "TR-03",
|
|
56
|
+
"claim": "A fresh runner downloads retained archives and verifies every manifest and payload byte before any tail effect.",
|
|
57
|
+
"disposition": "implemented",
|
|
58
|
+
"implementationEvidence": [
|
|
59
|
+
"scripts/v4-tail-reseal.mjs",
|
|
60
|
+
".github/workflows/v4-tail-reseal.yml"
|
|
61
|
+
],
|
|
62
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "TR-04",
|
|
66
|
+
"claim": "Install, build, verify, package and platform-matrix remain explicitly skipped under effect-free Stage Capsule reuse.",
|
|
67
|
+
"disposition": "implemented",
|
|
68
|
+
"implementationEvidence": ["packages/core/v4-tail-reseal.js"],
|
|
69
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "TR-05",
|
|
73
|
+
"claim": "Only macOS signing-finalization may change bytes; every other platform stays byte-identical and provider-effect-free.",
|
|
74
|
+
"disposition": "implemented",
|
|
75
|
+
"implementationEvidence": [
|
|
76
|
+
"packages/core/v4-tail-reseal-receipt.js",
|
|
77
|
+
"scripts/v4-tail-reseal.mjs"
|
|
78
|
+
],
|
|
79
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "TR-06",
|
|
83
|
+
"claim": "The macOS effect is fenced by exact Warrant lineage, credential authority, release-tail transaction and idempotency key.",
|
|
84
|
+
"disposition": "implemented",
|
|
85
|
+
"implementationEvidence": [
|
|
86
|
+
"packages/core/v4-tail-reseal.js",
|
|
87
|
+
".github/workflows/v4-tail-reseal.yml"
|
|
88
|
+
],
|
|
89
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "TR-07",
|
|
93
|
+
"claim": "Source, platform, archive, manifest, signer, Warrant, credential, retention and prior-failure drift fails closed.",
|
|
94
|
+
"disposition": "implemented",
|
|
95
|
+
"implementationEvidence": [
|
|
96
|
+
"packages/core/v4-tail-reseal.js",
|
|
97
|
+
"packages/core/v4-tail-reseal-github.js"
|
|
98
|
+
],
|
|
99
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "TR-08",
|
|
103
|
+
"claim": "Expired retention or credential leases invalidate reuse and require a normal candidate rebuild.",
|
|
104
|
+
"disposition": "implemented",
|
|
105
|
+
"implementationEvidence": ["packages/core/v4-tail-reseal.js"],
|
|
106
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "TR-09",
|
|
110
|
+
"claim": "Successful reseal emits the ordinary v4 Release Candidate Passport with its original floating-consumer policy receipt.",
|
|
111
|
+
"disposition": "implemented",
|
|
112
|
+
"implementationEvidence": [
|
|
113
|
+
"packages/core/v4-tail-reseal-receipt.js",
|
|
114
|
+
".github/workflows/v4-tail-reseal.yml"
|
|
115
|
+
],
|
|
116
|
+
"verificationEvidence": ["tests/v4-tail-reseal.test.mjs"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "TR-10",
|
|
120
|
+
"claim": "The reusable workflow resolves job.workflow_sha as runtime evidence and exposes no persisted SHA, variable indirection or private self-dogfood path.",
|
|
121
|
+
"disposition": "implemented",
|
|
122
|
+
"implementationEvidence": [".github/workflows/v4-tail-reseal.yml"],
|
|
123
|
+
"verificationEvidence": ["tests/v4-tail-reseal-parity.test.mjs"]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "TR-11",
|
|
127
|
+
"claim": "Node API, CLI, schema, deterministic fixture, generated references and macOS bounded qualification project one contract.",
|
|
128
|
+
"disposition": "implemented",
|
|
129
|
+
"implementationEvidence": [
|
|
130
|
+
"package.json",
|
|
131
|
+
"bin/buildchain.mjs",
|
|
132
|
+
"scripts/v4-tail-reseal.mjs",
|
|
133
|
+
"docs/v4-tail-reseal.md"
|
|
134
|
+
],
|
|
135
|
+
"verificationEvidence": [
|
|
136
|
+
"tests/command-registry.test.mjs",
|
|
137
|
+
"tests/v4-tail-reseal.test.mjs",
|
|
138
|
+
"tests/v4-tail-reseal-parity.test.mjs"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "TR-12",
|
|
143
|
+
"claim": "Independent review, protected merge and exact post-merge public readback remain external closeout evidence.",
|
|
144
|
+
"disposition": "missing-before-closeout",
|
|
145
|
+
"implementationEvidence": [],
|
|
146
|
+
"verificationEvidence": []
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"matrixRoot": "sha256:126ec51c12a9dedeb9b9e187202781e3895856af1927b399ba3902f3940750ad"
|
|
150
|
+
}
|
package/bin/buildchain.mjs
CHANGED
|
@@ -11,6 +11,7 @@ import { runLifecycle } from "../scripts/run-lifecycle-core.mjs";
|
|
|
11
11
|
import { runReleasePropagationCli } from "../scripts/release-propagation.mjs";
|
|
12
12
|
import { runReleaseGovernanceCli } from "../scripts/reconcile-release-governance.mjs";
|
|
13
13
|
import { runReleaseTailCli } from "../scripts/release-tail.mjs";
|
|
14
|
+
import { runV4TailResealCli } from "../scripts/v4-tail-reseal.mjs";
|
|
14
15
|
import { runPublicationArtifactCli } from "../scripts/publication-artifact.mjs";
|
|
15
16
|
import { runPublicationPackageCli } from "../scripts/publication-package.mjs";
|
|
16
17
|
import { runPublicationReproducibilityCli } from "../scripts/publication-reproducibility.mjs";
|
|
@@ -109,6 +110,7 @@ import {
|
|
|
109
110
|
dispatchTrustReleaseCommand,
|
|
110
111
|
} from "./internal/trust-release-cli.mjs";
|
|
111
112
|
import { dispatchRegisteredCommand } from "./internal/command-registry.mjs";
|
|
113
|
+
import { runCompatibilityFactsCli } from "./internal/compatibility-facts-cli.mjs";
|
|
112
114
|
|
|
113
115
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
114
116
|
const embeddedPackageVersion = process.env.BUILDCHAIN_EMBEDDED_PACKAGE_VERSION || "";
|
|
@@ -987,6 +989,9 @@ async function runKfdCli(args = []) {
|
|
|
987
989
|
async function runBuildFactsCli(args = []) {
|
|
988
990
|
const [subcommand = "", ...factArgs] = args;
|
|
989
991
|
const cwd = path.resolve(readFlag(factArgs, "cwd", process.cwd()));
|
|
992
|
+
if (subcommand === "compatibility") {
|
|
993
|
+
return runCompatibilityFactsCli({ args: factArgs, cwd, packageRoot: root });
|
|
994
|
+
}
|
|
990
995
|
if (subcommand === "module") {
|
|
991
996
|
const fact = collectModuleBuildFacts({
|
|
992
997
|
cwd,
|
|
@@ -1060,7 +1065,7 @@ async function runBuildFactsCli(args = []) {
|
|
|
1060
1065
|
}
|
|
1061
1066
|
return;
|
|
1062
1067
|
}
|
|
1063
|
-
throw new Error("usage: buildchain facts <module|aggregate|verify> ...");
|
|
1068
|
+
throw new Error("usage: buildchain facts <module|aggregate|verify|compatibility> ...");
|
|
1064
1069
|
}
|
|
1065
1070
|
|
|
1066
1071
|
function appendJsonLine(filePath, value) {
|
|
@@ -1673,6 +1678,14 @@ async function handleReleaseTailCommand(args) {
|
|
|
1673
1678
|
runReleaseTailCli(args);
|
|
1674
1679
|
}
|
|
1675
1680
|
|
|
1681
|
+
async function handleTailResealCommand(args) {
|
|
1682
|
+
await runV4TailResealCli(args);
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
async function handleNextDevelopmentCommand(args) {
|
|
1686
|
+
runScript("next-development-transition.mjs", args);
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1676
1689
|
async function handleGitHubGovernanceCommand(args) {
|
|
1677
1690
|
runScript("reconcile-github-governance.mjs", args);
|
|
1678
1691
|
return;
|
|
@@ -1769,6 +1782,8 @@ const BUILDCHAIN_COMMAND_HANDLERS = Object.freeze({
|
|
|
1769
1782
|
"release-propagation": handleReleasePropagationCommand,
|
|
1770
1783
|
"release-governance": handleReleaseGovernanceCommand,
|
|
1771
1784
|
"release-tail": handleReleaseTailCommand,
|
|
1785
|
+
"tail-reseal": handleTailResealCommand,
|
|
1786
|
+
"next-development": handleNextDevelopmentCommand,
|
|
1772
1787
|
"github-governance": handleGitHubGovernanceCommand,
|
|
1773
1788
|
"badges": handleBadgesCommand,
|
|
1774
1789
|
"homebrew": handleHomebrewCommand,
|
|
@@ -33,6 +33,8 @@ const BUILDCHAIN_COMMAND_REGISTRY = Object.freeze([
|
|
|
33
33
|
{ id: "release-propagation", aliases: [] },
|
|
34
34
|
{ id: "release-governance", aliases: [] },
|
|
35
35
|
{ id: "release-tail", aliases: [] },
|
|
36
|
+
{ id: "tail-reseal", aliases: [] },
|
|
37
|
+
{ id: "next-development", aliases: [] },
|
|
36
38
|
{ id: "github-governance", aliases: [] },
|
|
37
39
|
{ id: "badges", aliases: [] },
|
|
38
40
|
{ id: "homebrew", aliases: [] },
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
createBuildchainCompatibilityFactRegistry,
|
|
5
|
+
verifyBuildchainCompatibilityFactRegistry,
|
|
6
|
+
} from "../../packages/core/buildchain-compatibility-fact.js";
|
|
7
|
+
import {
|
|
8
|
+
createBuildchainCompatibilityPathQuery,
|
|
9
|
+
createBuildchainCompatibilityProofRegistry,
|
|
10
|
+
verifyBuildchainCompatibilityPath,
|
|
11
|
+
} from "../../packages/core/buildchain-compatibility-authority.js";
|
|
12
|
+
import { createBuildchainContractWorld } from "../../packages/core/buildchain-contract.js";
|
|
13
|
+
import {
|
|
14
|
+
printJson,
|
|
15
|
+
readBooleanFlag,
|
|
16
|
+
readFlag,
|
|
17
|
+
readJsonInput,
|
|
18
|
+
writeJsonFile,
|
|
19
|
+
} from "./cli-options.mjs";
|
|
20
|
+
|
|
21
|
+
export function runCompatibilityFactsCli({ args, cwd, packageRoot }) {
|
|
22
|
+
const [action = "project", ...factArgs] = args;
|
|
23
|
+
const registryInput = readFlag(factArgs, "registry", "");
|
|
24
|
+
const registry = registryInput
|
|
25
|
+
? readJsonInput(registryInput, {
|
|
26
|
+
cwd,
|
|
27
|
+
label: "compatibility Fact registry",
|
|
28
|
+
})
|
|
29
|
+
: createBuildchainCompatibilityFactRegistry();
|
|
30
|
+
if (action === "project") {
|
|
31
|
+
const world = createBuildchainContractWorld({ root: packageRoot });
|
|
32
|
+
const projection = createBuildchainCompatibilityProofRegistry({
|
|
33
|
+
proofs: registry.legacyProofs,
|
|
34
|
+
surfaces: world.surfaces,
|
|
35
|
+
majorLine: world.majorLine,
|
|
36
|
+
});
|
|
37
|
+
const result = {
|
|
38
|
+
schema: "kungfu.buildchain.compatibility-fact-projection/v1",
|
|
39
|
+
authority: "Fact-registry-only",
|
|
40
|
+
grantsReleaseAuthority: false,
|
|
41
|
+
registry,
|
|
42
|
+
projections: projection.projections,
|
|
43
|
+
};
|
|
44
|
+
const output = readFlag(factArgs, "output", "");
|
|
45
|
+
if (output) writeJsonFile(path.resolve(cwd, output), result);
|
|
46
|
+
if (readBooleanFlag(factArgs, "json") || !output) printJson(result);
|
|
47
|
+
else
|
|
48
|
+
process.stdout.write(
|
|
49
|
+
`buildchain facts compatibility project: wrote ${output}\n`,
|
|
50
|
+
);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (action === "verify") {
|
|
54
|
+
const result = verifyBuildchainCompatibilityFactRegistry(registry);
|
|
55
|
+
printJson(result);
|
|
56
|
+
if (!result.ok) process.exitCode = 1;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (action === "query") {
|
|
60
|
+
const queryInput = readFlag(factArgs, "query", "");
|
|
61
|
+
if (!queryInput) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
"usage: buildchain facts compatibility query --query <json-or-path> [--registry <json-or-path>]",
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
const query = readJsonInput(queryInput, {
|
|
67
|
+
cwd,
|
|
68
|
+
label: "compatibility Fact query",
|
|
69
|
+
});
|
|
70
|
+
const receipt = verifyBuildchainCompatibilityPath({ registry, query });
|
|
71
|
+
printJson(receipt);
|
|
72
|
+
if (receipt.record.status !== "accepted") process.exitCode = 1;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (action === "query-template") {
|
|
76
|
+
const factRoot = readFlag(factArgs, "fact-root", "");
|
|
77
|
+
const fact = registry.facts.find((entry) => entry.factRoot === factRoot);
|
|
78
|
+
if (!fact) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
"buildchain facts compatibility query-template requires a current --fact-root",
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
printJson(
|
|
84
|
+
createBuildchainCompatibilityPathQuery({
|
|
85
|
+
registry,
|
|
86
|
+
queryId: readFlag(
|
|
87
|
+
factArgs,
|
|
88
|
+
"query-id",
|
|
89
|
+
`buildchain:compatibility:${fact.factId}`,
|
|
90
|
+
),
|
|
91
|
+
sourceRoot: fact.sourceRoot,
|
|
92
|
+
targetRoot: fact.targetRoot,
|
|
93
|
+
relationPathRoots: [fact.factRoot],
|
|
94
|
+
}),
|
|
95
|
+
);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
throw new Error(
|
|
99
|
+
"usage: buildchain facts compatibility <project|verify|query|query-template> ...",
|
|
100
|
+
);
|
|
101
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-next-development-transition/v1",
|
|
4
|
+
"idempotencyKey": "sha256:cf805c1933cbc3e571c21af3ae030139bebafb08e2436b3c479c411b2cd2d22c",
|
|
5
|
+
"repository": "example/widget",
|
|
6
|
+
"completedAlpha": {
|
|
7
|
+
"outcome": "succeeded",
|
|
8
|
+
"version": "1.4.2-alpha.7",
|
|
9
|
+
"exactTag": "v1.4.2-alpha.7",
|
|
10
|
+
"releaseSha": "1111111111111111111111111111111111111111",
|
|
11
|
+
"treeSha": "2222222222222222222222222222222222222222",
|
|
12
|
+
"publicationRoot": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
13
|
+
"completedAt": "2026-08-11T01:00:00.000Z"
|
|
14
|
+
},
|
|
15
|
+
"completedAlphaRoot": "sha256:18e65c63aba0df789e0b0e68903733825d87e292b82bcb8fd3793ca45dca6266",
|
|
16
|
+
"alphaOutcome": "preserved-success",
|
|
17
|
+
"model": {
|
|
18
|
+
"strategy": "anchored",
|
|
19
|
+
"next": "manual"
|
|
20
|
+
},
|
|
21
|
+
"target": {
|
|
22
|
+
"version": null,
|
|
23
|
+
"anchor": null
|
|
24
|
+
},
|
|
25
|
+
"declaredPaths": ["package.json", "release.json"],
|
|
26
|
+
"adapter": {
|
|
27
|
+
"environmentVariable": "BUILDCHAIN_VERSION",
|
|
28
|
+
"sourcePaths": ["package.json"],
|
|
29
|
+
"derivedPaths": [],
|
|
30
|
+
"allowedChangePaths": ["package.json"],
|
|
31
|
+
"readOnlyPaths": ["release.json"],
|
|
32
|
+
"derivationStage": null,
|
|
33
|
+
"verificationStage": "lifecycle.verify"
|
|
34
|
+
},
|
|
35
|
+
"effectBounds": {
|
|
36
|
+
"allowedPaths": ["package.json"],
|
|
37
|
+
"refUpdates": [],
|
|
38
|
+
"forbiddenRefNamespaces": ["refs/heads/alpha/", "refs/tags/"]
|
|
39
|
+
},
|
|
40
|
+
"state": {
|
|
41
|
+
"status": "waiting-anchor",
|
|
42
|
+
"generation": 1,
|
|
43
|
+
"stateRoot": "sha256:4bbca86f960a7c1a10d76d01736422e3129f3f16d3e69e0800a0829201122dd4"
|
|
44
|
+
},
|
|
45
|
+
"materialization": null,
|
|
46
|
+
"transitions": []
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-next-development-transition/v1",
|
|
4
|
+
"idempotencyKey": "sha256:37ee52799584a989b059db060b7ce062feb56fbeff452033245046fdf3b21e78",
|
|
5
|
+
"repository": "example/widget",
|
|
6
|
+
"completedAlpha": {
|
|
7
|
+
"outcome": "succeeded",
|
|
8
|
+
"version": "1.4.2-alpha.7",
|
|
9
|
+
"exactTag": "v1.4.2-alpha.7",
|
|
10
|
+
"releaseSha": "1111111111111111111111111111111111111111",
|
|
11
|
+
"treeSha": "2222222222222222222222222222222222222222",
|
|
12
|
+
"publicationRoot": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
13
|
+
"completedAt": "2026-08-11T01:00:00.000Z"
|
|
14
|
+
},
|
|
15
|
+
"completedAlphaRoot": "sha256:18e65c63aba0df789e0b0e68903733825d87e292b82bcb8fd3793ca45dca6266",
|
|
16
|
+
"alphaOutcome": "preserved-success",
|
|
17
|
+
"model": {
|
|
18
|
+
"strategy": "semver",
|
|
19
|
+
"next": "auto"
|
|
20
|
+
},
|
|
21
|
+
"target": {
|
|
22
|
+
"version": "1.4.2-alpha.8",
|
|
23
|
+
"anchor": null
|
|
24
|
+
},
|
|
25
|
+
"declaredPaths": ["package.json"],
|
|
26
|
+
"adapter": {
|
|
27
|
+
"environmentVariable": "BUILDCHAIN_VERSION",
|
|
28
|
+
"sourcePaths": ["package.json"],
|
|
29
|
+
"derivedPaths": [],
|
|
30
|
+
"allowedChangePaths": ["package.json"],
|
|
31
|
+
"readOnlyPaths": [],
|
|
32
|
+
"derivationStage": null,
|
|
33
|
+
"verificationStage": "lifecycle.verify"
|
|
34
|
+
},
|
|
35
|
+
"effectBounds": {
|
|
36
|
+
"allowedPaths": ["package.json"],
|
|
37
|
+
"refUpdates": [],
|
|
38
|
+
"forbiddenRefNamespaces": ["refs/heads/alpha/", "refs/tags/"]
|
|
39
|
+
},
|
|
40
|
+
"state": {
|
|
41
|
+
"status": "planned",
|
|
42
|
+
"generation": 1,
|
|
43
|
+
"stateRoot": "sha256:4ef8ac1ff07cb14633994625e65a340acb3130ae56bbc88ee81504f09df3fa0f"
|
|
44
|
+
},
|
|
45
|
+
"materialization": null,
|
|
46
|
+
"transitions": []
|
|
47
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "kungfu-buildchain-next-development-version-model-fixtures/v1",
|
|
3
|
+
"positive": [
|
|
4
|
+
{
|
|
5
|
+
"name": "semver-auto",
|
|
6
|
+
"model": { "strategy": "semver", "next": "auto" }
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "anchored-manual",
|
|
10
|
+
"model": { "strategy": "anchored", "next": "manual" }
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"negative": [
|
|
14
|
+
{
|
|
15
|
+
"name": "semver-manual",
|
|
16
|
+
"model": { "strategy": "semver", "next": "manual" },
|
|
17
|
+
"error": "version model must be semver/auto or anchored/manual"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "anchored-auto",
|
|
21
|
+
"model": { "strategy": "anchored", "next": "auto" },
|
|
22
|
+
"error": "version model must be semver/auto or anchored/manual"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "semver-auto-with-anchor",
|
|
26
|
+
"model": { "strategy": "semver", "next": "auto" },
|
|
27
|
+
"anchor": {
|
|
28
|
+
"manifestPath": "release.json",
|
|
29
|
+
"manifestRoot": "sha256:4444444444444444444444444444444444444444444444444444444444444444"
|
|
30
|
+
},
|
|
31
|
+
"error": "semver/auto must not declare an anchor"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "anchored-manual-target-without-anchor",
|
|
35
|
+
"model": { "strategy": "anchored", "next": "manual" },
|
|
36
|
+
"targetVersion": "22.1.0",
|
|
37
|
+
"error": "anchored/manual targetVersion requires an anchor"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|