@kungfu-tech/buildchain 3.0.5-alpha.0 → 3.0.5-alpha.2
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 +30 -20
- package/dist/site/buildchain-site.json +28 -18
- package/dist/site/controller-registry.json +11 -3
- package/dist/site/kfd-claims.json +6 -4
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +4 -4
- package/dist/site/page-registry.json +20 -10
- package/dist/site/public-surface-audit.json +6 -4
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +8 -8
- package/dist/site/workflow-registry.json +4 -2
- package/docs/aws-us-elastic-runner-burst-plane.md +132 -16
- package/docs/publish-transaction.md +7 -5
- package/docs/release-flow.md +4 -0
- package/docs/release-governance.md +7 -0
- package/docs/reusable-build-surface.md +9 -0
- package/package.json +1 -1
- package/scripts/aws-macos-jit-controller-core.mjs +389 -0
- package/scripts/aws-macos-jit-controller-runtime.mjs +82 -0
- package/scripts/aws-macos-jit-controller.mjs +558 -0
- package/scripts/aws-macos-jit-job-controller.mjs +401 -0
- package/scripts/aws-windows-jit-campaign-core.mjs +241 -0
- package/scripts/aws-windows-jit-campaign.mjs +167 -0
- package/scripts/aws-windows-jit-controller-core.mjs +20 -2
- package/scripts/aws-windows-jit-controller.mjs +184 -109
- package/scripts/aws-windows-jit-core.mjs +18 -0
- package/scripts/aws-windows-jit.mjs +2 -0
- package/scripts/locked-source-checkout.mjs +17 -3
|
@@ -677,6 +677,7 @@
|
|
|
677
677
|
"checkout-cache-mode",
|
|
678
678
|
"checkout-cache-reference-repository-template",
|
|
679
679
|
"checkout-cache-timeout-seconds",
|
|
680
|
+
"checkout-history-mode",
|
|
680
681
|
"compiler-cache-platforms-json",
|
|
681
682
|
"compiler-cache-provider",
|
|
682
683
|
"compiler-cache-required",
|
|
@@ -726,7 +727,7 @@
|
|
|
726
727
|
"verify-command",
|
|
727
728
|
"working-directory"
|
|
728
729
|
],
|
|
729
|
-
"inputCount":
|
|
730
|
+
"inputCount": 83,
|
|
730
731
|
"secrets": [
|
|
731
732
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
732
733
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -1496,6 +1497,7 @@
|
|
|
1496
1497
|
"checkout-cache-mode",
|
|
1497
1498
|
"checkout-cache-reference-repository-template",
|
|
1498
1499
|
"checkout-cache-timeout-seconds",
|
|
1500
|
+
"checkout-history-mode",
|
|
1499
1501
|
"compiler-cache-platforms-json",
|
|
1500
1502
|
"compiler-cache-provider",
|
|
1501
1503
|
"compiler-cache-required",
|
|
@@ -1545,7 +1547,7 @@
|
|
|
1545
1547
|
"verify-command",
|
|
1546
1548
|
"working-directory"
|
|
1547
1549
|
],
|
|
1548
|
-
"inputCount":
|
|
1550
|
+
"inputCount": 86,
|
|
1549
1551
|
"secrets": [
|
|
1550
1552
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
1551
1553
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -7028,8 +7030,8 @@
|
|
|
7028
7030
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
7029
7031
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
7030
7032
|
"cliRegistryDigest": "0db010925d1c60209c3dac8bc2797537f307ab21bc68084263e79004c5c16ff7",
|
|
7031
|
-
"workflowRegistryDigest": "
|
|
7032
|
-
"pageRegistryDigest": "
|
|
7033
|
+
"workflowRegistryDigest": "4f1b9a933e117abc5fc4212241c83a35609f23477dac98d6cd37c4b40b57ba29",
|
|
7034
|
+
"pageRegistryDigest": "ae6076b33246fc76a7d9ce4a54ae65b9eb3a11a9772a8ea937e6f5e93bda13d1"
|
|
7033
7035
|
},
|
|
7034
7036
|
"comparison": {
|
|
7035
7037
|
"missingCliRegistry": [],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-08-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
4
|
+
"generatedAt": "2026-08-02T03:31:24.457Z",
|
|
5
|
+
"publishedAt": "2026-08-02T03:31:24.457Z",
|
|
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": "1d2c6f6f9571f0417063c9814e5ad0e6fd61bb81",
|
|
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.5-alpha.
|
|
35
|
+
"version": "3.0.5-alpha.2",
|
|
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-08-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
4
|
+
"generatedAt": "2026-08-02T03:31:24.457Z",
|
|
5
|
+
"publishedAt": "2026-08-02T03:31:24.457Z",
|
|
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": "1d2c6f6f9571f0417063c9814e5ad0e6fd61bb81",
|
|
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.5-alpha.
|
|
40
|
+
"version": "3.0.5-alpha.2",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -277,7 +277,7 @@
|
|
|
277
277
|
"path": "docs/reusable-build-surface.md",
|
|
278
278
|
"plane": "use",
|
|
279
279
|
"exists": true,
|
|
280
|
-
"digest": "sha256:
|
|
280
|
+
"digest": "sha256:baadd0c0ef61d877b409d2bdf0e696e218971eb541c5f51a1a8e88e75af4904d"
|
|
281
281
|
},
|
|
282
282
|
{
|
|
283
283
|
"id": "publish-transaction",
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
"path": "docs/publish-transaction.md",
|
|
286
286
|
"plane": "verify",
|
|
287
287
|
"exists": true,
|
|
288
|
-
"digest": "sha256:
|
|
288
|
+
"digest": "sha256:3a9ef099d5d93d9b558c7b6a0aa4403dfcce1479ce5d6fc36ecb3e34cdd5bb6d"
|
|
289
289
|
},
|
|
290
290
|
{
|
|
291
291
|
"id": "release-governance",
|
|
@@ -293,7 +293,7 @@
|
|
|
293
293
|
"path": "docs/release-governance.md",
|
|
294
294
|
"plane": "why",
|
|
295
295
|
"exists": true,
|
|
296
|
-
"digest": "sha256:
|
|
296
|
+
"digest": "sha256:96d78f800cd7d43d3a47a11863d4813711e360418ba33a4284688389c7e4b70c"
|
|
297
297
|
},
|
|
298
298
|
{
|
|
299
299
|
"id": "release-flow",
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
"path": "docs/release-flow.md",
|
|
302
302
|
"plane": "verify",
|
|
303
303
|
"exists": true,
|
|
304
|
-
"digest": "sha256:
|
|
304
|
+
"digest": "sha256:dc54b8a264489341984ca6157b07d1956e934366f937b7412a21df7f025d2d8d"
|
|
305
305
|
},
|
|
306
306
|
{
|
|
307
307
|
"id": "runtime-train-validation",
|
|
@@ -126,6 +126,7 @@
|
|
|
126
126
|
"checkout-cache-mode",
|
|
127
127
|
"checkout-cache-reference-repository-template",
|
|
128
128
|
"checkout-cache-timeout-seconds",
|
|
129
|
+
"checkout-history-mode",
|
|
129
130
|
"compiler-cache-platforms-json",
|
|
130
131
|
"compiler-cache-provider",
|
|
131
132
|
"compiler-cache-required",
|
|
@@ -175,7 +176,7 @@
|
|
|
175
176
|
"verify-command",
|
|
176
177
|
"working-directory"
|
|
177
178
|
],
|
|
178
|
-
"inputCount":
|
|
179
|
+
"inputCount": 83,
|
|
179
180
|
"secrets": [
|
|
180
181
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
181
182
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -1155,6 +1156,7 @@
|
|
|
1155
1156
|
"checkout-cache-mode",
|
|
1156
1157
|
"checkout-cache-reference-repository-template",
|
|
1157
1158
|
"checkout-cache-timeout-seconds",
|
|
1159
|
+
"checkout-history-mode",
|
|
1158
1160
|
"compiler-cache-platforms-json",
|
|
1159
1161
|
"compiler-cache-provider",
|
|
1160
1162
|
"compiler-cache-required",
|
|
@@ -1204,7 +1206,7 @@
|
|
|
1204
1206
|
"verify-command",
|
|
1205
1207
|
"working-directory"
|
|
1206
1208
|
],
|
|
1207
|
-
"inputCount":
|
|
1209
|
+
"inputCount": 86,
|
|
1208
1210
|
"secrets": [
|
|
1209
1211
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
1210
1212
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -8,7 +8,12 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: A
|
|
10
10
|
review_state: unreviewed
|
|
11
|
-
last_reviewed: 2026-
|
|
11
|
+
last_reviewed: 2026-08-02
|
|
12
|
+
ai_provenance:
|
|
13
|
+
model_family: GPT-5
|
|
14
|
+
product: Codex
|
|
15
|
+
generated_at: 2026-08-01
|
|
16
|
+
invisible_information: No hidden model checkpoint, parameters, or private training data were available.
|
|
12
17
|
---
|
|
13
18
|
|
|
14
19
|
# AWS US elastic runner burst plane
|
|
@@ -138,14 +143,16 @@ The source-bound evidence and deterministic phase receipt are:
|
|
|
138
143
|
|
|
139
144
|
The Windows phase uses the explicit `aws-us-ec2-windows-jit` runner preset.
|
|
140
145
|
Its caller supplies one bounded label under
|
|
141
|
-
`aws-us-ec2-windows-jit-<qualification-id>`, and Buildchain
|
|
142
|
-
one Windows x64 native lane. The reusable trust gate still
|
|
143
|
-
GitHub-hosted runner before the JIT label can select EC2.
|
|
146
|
+
`aws-us-ec2-windows-jit-<campaign-id>-<qualification-id>`, and Buildchain
|
|
147
|
+
resolves exactly one Windows x64 native lane. The reusable trust gate still
|
|
148
|
+
runs on a GitHub-hosted runner before the JIT label can select EC2.
|
|
144
149
|
|
|
145
150
|
The provider creates repository-level GitHub JIT configuration for
|
|
146
151
|
`kungfu-systems/kungfu`. Its `labels` request must contain all four scheduling
|
|
147
152
|
labels: `self-hosted`, `Windows`, `X64`, and the card-scoped
|
|
148
|
-
`aws-us-ec2-windows-jit-<qualification-id>` label.
|
|
153
|
+
`aws-us-ec2-windows-jit-<campaign-id>-<qualification-id>` label. The workflow
|
|
154
|
+
display title also carries both identities, allowing the launch controller to
|
|
155
|
+
verify the queued run against its campaign plan. GitHub's JIT endpoint does
|
|
149
156
|
not infer the default OS and architecture labels when they are omitted. The
|
|
150
157
|
encoded configuration is never placed in EC2 user data, a tag, a command log,
|
|
151
158
|
or an artifact. The operator writes it to a card-scoped SSM SecureString under
|
|
@@ -168,21 +175,104 @@ Each runner uses:
|
|
|
168
175
|
security-group rule, no key pair, and no warm Auto Scaling capacity.
|
|
169
176
|
|
|
170
177
|
Runner diagnostics and a redacted lifecycle record are uploaded to the
|
|
171
|
-
provider's encrypted, private evidence bucket
|
|
172
|
-
|
|
173
|
-
|
|
178
|
+
provider's encrypted, private evidence bucket under the exact campaign, run,
|
|
179
|
+
attempt, and instance identity. The runner process exits after one job, Windows
|
|
180
|
+
shuts down, and EC2's instance-initiated shutdown behavior is set to
|
|
181
|
+
`terminate`. A five-minute reaper terminates card-owned stopped or
|
|
174
182
|
three-hour-old instances and deletes only their dedicated JIT parameter.
|
|
175
183
|
|
|
176
184
|
At the 2026-07-29 AWS Price List rate of USD 1.45 per Windows
|
|
177
|
-
`c7i.4xlarge` hour,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
`c7i.4xlarge` hour, each accepted instance reserves its complete three-hour
|
|
186
|
+
USD 4.35 fail-closed lifetime before `RunInstances`. A DynamoDB transaction
|
|
187
|
+
binds the exact campaign and source, creates an idempotent run ledger entry,
|
|
188
|
+
and atomically refuses a seventh accepted instance. Six accepted instances
|
|
189
|
+
therefore reserve at most USD 26.10 under the dedicated USD 40 decision.
|
|
190
|
+
|
|
191
|
+
The campaign starts unarmed and expires within 24 hours. Its `CONTROL` record
|
|
192
|
+
can be created only once: a killed or expired campaign cannot be re-armed by
|
|
193
|
+
the campaign tool. A budget notification or any instance lifetime violation
|
|
194
|
+
persists `KILLED` before cleanup, so later workflow dispatches fail before a
|
|
195
|
+
paid launch. Reservations are never refunded: a controller crash, ambiguous
|
|
196
|
+
launch, or successful launch all remain charged to the campaign, favoring a
|
|
197
|
+
false stop over an accidental budget overrun.
|
|
198
|
+
|
|
199
|
+
The tag-filtered AWS Budget is defense in depth, not the authoritative launch
|
|
200
|
+
gate. It is disabled by default because a linked account cannot activate a
|
|
201
|
+
cost-allocation tag. Set `EnableTagFilteredBudget=true` only after the AWS
|
|
202
|
+
Organizations management account has activated `kungfu:provider` and a Cost
|
|
203
|
+
Explorer readback proves that `windows-ec2-jit` spend is visible. The DynamoDB
|
|
204
|
+
reservation cap remains mandatory in either mode.
|
|
205
|
+
|
|
206
|
+
Qualification requires one runner-profile smoke and three trusted exact-source
|
|
207
|
+
full Windows jobs all bound to the same campaign, independent cancellation and
|
|
208
|
+
timeout cleanup exercises, and zero repository runner, EC2 instance,
|
|
209
|
+
disposable volume, min capacity, and desired capacity within 15 minutes of the
|
|
210
|
+
final job.
|
|
211
|
+
|
|
212
|
+
### Phase 2 campaign controller
|
|
213
|
+
|
|
214
|
+
`scripts/aws-windows-jit-campaign.mjs` is the one-shot operator boundary.
|
|
215
|
+
Without a mutation mode it emits the arm plan. `arm-campaign` requires the
|
|
216
|
+
campaign id, exact source SHA, and state table to be repeated as confirmations,
|
|
217
|
+
then creates `CONTROL` and `CAMPAIGN#<id>` with `attribute_not_exists`
|
|
218
|
+
conditions. DynamoDB therefore refuses a second campaign in the same retained
|
|
219
|
+
state table. The operator can always use `kill-campaign`; there is deliberately
|
|
220
|
+
no clear or re-arm operation.
|
|
221
|
+
|
|
222
|
+
Every `scripts/aws-windows-jit-controller.mjs --execute` call must provide the
|
|
223
|
+
same `--campaign-id`, `--confirm-campaign-id`, `--state-table`, and
|
|
224
|
+
`--confirm-state-table`. After the GitHub, AMI, active-instance, SSM, and EC2
|
|
225
|
+
DryRun checks pass, the controller
|
|
226
|
+
atomically reserves one run. Duplicate run-attempt-qualification identities,
|
|
227
|
+
source mismatch, expiry, `KILLED`, the seventh accepted instance, or a
|
|
228
|
+
reservation over the USD 40 ceiling all fail closed before `RunInstances`.
|
|
229
|
+
|
|
230
|
+
Example dry-run and arm boundary (do not execute without a new campaign budget
|
|
231
|
+
decision):
|
|
181
232
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
233
|
+
```bash
|
|
234
|
+
windows_campaign=win-REPLACE_WITH_CAMPAIGN_ID
|
|
235
|
+
windows_source=REPLACE_WITH_EXACT_40_CHARACTER_SHA
|
|
236
|
+
windows_state_table=REPLACE_WITH_CAMPAIGN_STATE_TABLE
|
|
237
|
+
windows_expires_at=REPLACE_WITH_ISO_TIMESTAMP_WITHIN_24_HOURS
|
|
238
|
+
|
|
239
|
+
node scripts/aws-windows-jit-campaign.mjs plan-arm \
|
|
240
|
+
--campaign-id "$windows_campaign" \
|
|
241
|
+
--source-sha "$windows_source" \
|
|
242
|
+
--state-table "$windows_state_table" \
|
|
243
|
+
--expires-at "$windows_expires_at"
|
|
244
|
+
|
|
245
|
+
node scripts/aws-windows-jit-campaign.mjs arm-campaign \
|
|
246
|
+
--campaign-id "$windows_campaign" \
|
|
247
|
+
--confirm-campaign-id "$windows_campaign" \
|
|
248
|
+
--source-sha "$windows_source" \
|
|
249
|
+
--confirm-source-sha "$windows_source" \
|
|
250
|
+
--state-table "$windows_state_table" \
|
|
251
|
+
--confirm-state-table "$windows_state_table" \
|
|
252
|
+
--expires-at "$windows_expires_at"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Arming creates a permanent one-shot control record and admits up to six paid
|
|
256
|
+
instances. Its rollback is fail-closed, not deletion: `kill-campaign` first
|
|
257
|
+
persists `KILLED`, then publishes to the dedicated SNS topic so the reaper
|
|
258
|
+
terminates active card-owned instances and removes their JIT parameters. The
|
|
259
|
+
command is idempotent, but the operator must read back DynamoDB, EC2, SSM, and
|
|
260
|
+
GitHub runners before treating cleanup as complete:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
windows_kill_topic=REPLACE_WITH_DEDICATED_KILL_SWITCH_TOPIC_ARN
|
|
264
|
+
|
|
265
|
+
node scripts/aws-windows-jit-campaign.mjs kill-campaign \
|
|
266
|
+
--campaign-id "$windows_campaign" \
|
|
267
|
+
--confirm-campaign-id "$windows_campaign" \
|
|
268
|
+
--source-sha "$windows_source" \
|
|
269
|
+
--confirm-source-sha "$windows_source" \
|
|
270
|
+
--state-table "$windows_state_table" \
|
|
271
|
+
--confirm-state-table "$windows_state_table" \
|
|
272
|
+
--kill-switch-topic "$windows_kill_topic" \
|
|
273
|
+
--confirm-kill-switch-topic "$windows_kill_topic" \
|
|
274
|
+
--reason operator-kill
|
|
275
|
+
```
|
|
186
276
|
|
|
187
277
|
## Phase 3 contract
|
|
188
278
|
|
|
@@ -226,6 +316,32 @@ host, including at least one full run, plus proof that:
|
|
|
226
316
|
- AWS has no active campaign instance or allocated campaign host;
|
|
227
317
|
- actual incremental spend remained below USD 25.
|
|
228
318
|
|
|
319
|
+
### Phase 3 lifecycle controller
|
|
320
|
+
|
|
321
|
+
`scripts/aws-macos-jit-controller.mjs` is the operator boundary for the paid
|
|
322
|
+
campaign. It has three explicit mutation modes:
|
|
323
|
+
|
|
324
|
+
- `launch-campaign` binds the exact repository source, AMI, availability zone,
|
|
325
|
+
tagged Dedicated Host, and reusable instance. It rejects pre-existing Mac
|
|
326
|
+
capacity and requires successful `AllocateHosts` and `RunInstances` DryRuns
|
|
327
|
+
before either real call.
|
|
328
|
+
- `run-job` binds one queued exact-source GitHub job to the existing campaign
|
|
329
|
+
host and instance. It writes the repository JIT configuration through a
|
|
330
|
+
mode-0600 temporary file into a distinct SSM SecureString, sends only the
|
|
331
|
+
credential-free bootstrap through SSM, and removes the parameter plus runner
|
|
332
|
+
registration if command delivery fails.
|
|
333
|
+
- `close-campaign` refuses execution before the provider's 24-hour minimum,
|
|
334
|
+
verifies the encrypted delete-on-termination root volume, removes scoped JIT
|
|
335
|
+
residue, terminates the exact instance, and requires a `ReleaseHosts` DryRun
|
|
336
|
+
before release. If Apple host scrubbing is still in progress, it reports
|
|
337
|
+
`release-pending`; the ten-minute card-scoped reaper remains the bounded
|
|
338
|
+
retry path.
|
|
339
|
+
|
|
340
|
+
Every execute mode requires the exact source SHA and campaign id to be repeated
|
|
341
|
+
through `--confirm-source-sha` and `--confirm-campaign-id`. `run-job` also
|
|
342
|
+
requires `--confirm-run-id`. Omitting `--execute` emits a deterministic plan
|
|
343
|
+
without changing AWS or GitHub state.
|
|
344
|
+
|
|
229
345
|
## Provider lifecycle
|
|
230
346
|
|
|
231
347
|
The three infrastructure templates live under
|
|
@@ -415,9 +415,10 @@ first run can stop at `finalizing` after registry publication. If the reviewed
|
|
|
415
415
|
merge commit later contains that exact transaction release material but the
|
|
416
416
|
exact tag is still absent, a retry performs finalization only: it reloads the
|
|
417
417
|
same durable source, release material, tooling, evidence, version, and target
|
|
418
|
-
bindings; creates the exact
|
|
419
|
-
|
|
420
|
-
|
|
418
|
+
bindings; creates the exact tag at the transaction source SHA; moves floating
|
|
419
|
+
refs to the transaction release SHA; and completes the passport from the
|
|
420
|
+
transaction source tree. It does not rerun the provider mutation and does not
|
|
421
|
+
authorize the newer composite channel tree
|
|
421
422
|
as published material. A different source tree still requires a new version and
|
|
422
423
|
a fresh release candidate.
|
|
423
424
|
|
|
@@ -536,8 +537,9 @@ inside the mutation boundary.
|
|
|
536
537
|
|
|
537
538
|
If finalization fails after an exact Git tag is created, the next run reads the
|
|
538
539
|
durable `finalizing` state, verifies the exact tag points at the recorded
|
|
539
|
-
|
|
540
|
-
|
|
540
|
+
source SHA (while accepting legacy release/material targets for recovery), and
|
|
541
|
+
retries the remaining floating refs. An exact tag at an unrelated SHA is a
|
|
542
|
+
material conflict and blocks recovery.
|
|
541
543
|
|
|
542
544
|
## CLI Recovery
|
|
543
545
|
|
package/docs/release-flow.md
CHANGED
|
@@ -96,6 +96,10 @@ published artifacts are already durable.
|
|
|
96
96
|
The intended governance split is:
|
|
97
97
|
|
|
98
98
|
- exact tags such as `v3.0.2` and `v3.0.3-alpha.0` are immutable audit refs;
|
|
99
|
+
- for publish transactions, the exact tag points to the transaction
|
|
100
|
+
`source_sha`, matching package-registry source metadata such as npm
|
|
101
|
+
`gitHead`; generated version-state commits remain on protected branches and
|
|
102
|
+
floating channel refs;
|
|
99
103
|
- floating tags such as `v3`, `v3.0`, `v3.0-alpha`, and `v3-alpha` are mutable channel refs
|
|
100
104
|
owned by the Buildchain promotion token;
|
|
101
105
|
- protected branches still require reviewed channel PRs before Buildchain can
|
|
@@ -831,6 +831,13 @@ must be absent or already point at accepted release material. This preserves an
|
|
|
831
831
|
immutable tag that represents a completed transaction while allowing a tag
|
|
832
832
|
collision discovered after registry publication to recover without republishing.
|
|
833
833
|
|
|
834
|
+
For package publish transactions, the immutable public version tag points to
|
|
835
|
+
the transaction `source_sha`, so registry source metadata such as npm `gitHead`
|
|
836
|
+
and the Git tag identify the same source commit. Protected branches and mutable
|
|
837
|
+
channel tags continue to point to the generated `release_sha`. Recovery accepts
|
|
838
|
+
older completed transactions whose exact tags already point to recorded release
|
|
839
|
+
or release-material SHAs, but new tags are source-bound.
|
|
840
|
+
|
|
834
841
|
Every Buildchain publish model that can run registry side effects must bind the
|
|
835
842
|
publish entrypoint to an immutable `publish-gate/*` source lock. The reusable
|
|
836
843
|
`release-candidate-promote.yml@v3` wrapper creates or updates that gate ref and
|
|
@@ -439,6 +439,7 @@ jobs:
|
|
|
439
439
|
checkout-cache-timeout-seconds: 60
|
|
440
440
|
checkout-cache-github-timeout-seconds: 600
|
|
441
441
|
checkout-cache-fetch-attempts: 3
|
|
442
|
+
checkout-history-mode: shallow
|
|
442
443
|
```
|
|
443
444
|
|
|
444
445
|
`checkout-cache-mode` accepts:
|
|
@@ -449,6 +450,14 @@ jobs:
|
|
|
449
450
|
| `auto` | Try the trusted cache first; on miss, record the miss and fall back according to `checkout-cache-fallback`. |
|
|
450
451
|
| `require` | Require the cache to provide the locked commit and fail before lifecycle work if unavailable. |
|
|
451
452
|
|
|
453
|
+
`checkout-history-mode` defaults to `shallow`, preserving the bounded single-
|
|
454
|
+
commit transport used by ordinary builds. Set it to `full` only when a
|
|
455
|
+
consumer gate must inspect source ancestry, for example when an Alpha pull
|
|
456
|
+
request qualifies GitHub's synthetic merge ref while retained evidence is
|
|
457
|
+
bound to an ancestor of the source-lock head. Full mode still verifies the
|
|
458
|
+
resolved immutable `HEAD` and tree; it changes only whether the advertised
|
|
459
|
+
source ref is fetched with depth one or with its reachable history.
|
|
460
|
+
|
|
452
461
|
The cache can be a local/LAN mirror URL template or a runner-local bare
|
|
453
462
|
reference repository template. Templates support `{owner}`, `{repo}`,
|
|
454
463
|
`{repository}`, `{repositorySlug}`, and `{sha}`. The workflow also reads
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "3.0.5-alpha.
|
|
3
|
+
"version": "3.0.5-alpha.2",
|
|
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",
|