@kungfu-tech/buildchain 4.0.1-alpha.41 → 4.0.1-alpha.42
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/v4-release-candidate-promote/README.md +3 -0
- package/architecture/ci-lane-change-budget.json +53 -1
- package/architecture/decisions/0004-v4-declarative-release-tail.md +47 -0
- package/architecture/maintainability-policy.json +15 -13
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
- package/contracts/v4-publication-qualification-v1.schema.json +51 -0
- package/dist/site/agent-index.json +1 -0
- package/dist/site/artifact-schemas.json +2 -0
- package/dist/site/buildchain-contract.json +70 -19
- package/dist/site/buildchain-site.json +62 -14
- package/dist/site/capability-registry.json +5 -5
- package/dist/site/controller-registry.json +6 -2
- package/dist/site/kfd-claims.json +99 -12
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +2 -2
- package/dist/site/node-api-registry.json +261 -17
- package/dist/site/page-registry.json +55 -7
- package/dist/site/public-surface-audit.json +43 -7
- package/dist/site/publication-authority-registry.json +28 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +2 -0
- package/dist/site/schemas/v4-publication-qualification-v1.schema.json +51 -0
- package/dist/site/site-manifest.json +6 -6
- package/dist/site/workflow-registry.json +53 -6
- package/docs/MAP.md +1 -1
- package/docs/node-api-reference.md +60 -32
- package/docs/v4-declarative-release-tail-migration.md +43 -0
- package/package.json +3 -1
- package/packages/core/buildchain-contract.js +31 -1
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/index.js +1 -0
- package/packages/core/v4-publication-qualification.js +222 -0
- package/scripts/check-inventory.mjs +2 -2
- package/scripts/generate-release-candidate-passport.mjs +26 -1
- package/scripts/generate-site-bundle.mjs +6 -0
- package/scripts/release-candidate-resolver.mjs +44 -0
- package/scripts/site-capability-metadata.mjs +1 -0
- package/scripts/v4-declarative-promotion-admission.mjs +42 -0
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Buildchain
|
|
2
2
|
|
|
3
3
|
<!-- buildchain-auditable-demo:start -->
|
|
4
|
+
|
|
4
5
|
## Buildchain beginner bootstrap
|
|
5
6
|
|
|
6
7
|
[](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/public-evidence.json)
|
|
@@ -54,12 +55,12 @@ The same mechanism releases Buildchain itself.
|
|
|
54
55
|
|
|
55
56
|
## Choose Your Path
|
|
56
57
|
|
|
57
|
-
| You are...
|
|
58
|
-
|
|
|
59
|
-
| adopting Buildchain for the first time | [Golden Path](docs/getting-started.md)
|
|
60
|
-
| looking up a CLI command
|
|
61
|
-
| writing JavaScript automation
|
|
62
|
-
| operating an advanced build or release | [Documentation Map](docs/MAP.md)
|
|
58
|
+
| You are... | Start here | You will get... |
|
|
59
|
+
| -------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
60
|
+
| adopting Buildchain for the first time | [Golden Path](docs/getting-started.md) | an exact install, project declaration, validated config, reusable workflow, release dry-run, and Passport inspection |
|
|
61
|
+
| looking up a CLI command | [Generated CLI Reference](docs/cli-reference.md) | governed syntax, options, aliases, and side-effect-free help paths |
|
|
62
|
+
| writing JavaScript automation | [Generated Node API Reference](docs/node-api-reference.md) | every public subpath and symbol with source-derived signatures and behavior boundaries |
|
|
63
|
+
| operating an advanced build or release | [Documentation Map](docs/MAP.md) | capability-, intent-, and maturity-based navigation to normative contracts |
|
|
63
64
|
|
|
64
65
|
Production release operators should also read the
|
|
65
66
|
[Buildchain v4 production release runbook](docs/v4-production-release.md).
|
|
@@ -290,6 +291,7 @@ direct consumer integration actions:
|
|
|
290
291
|
- `actions/promote-buildchain-ref`
|
|
291
292
|
- `actions/report-buildchain-issue`
|
|
292
293
|
- `actions/release-tail`
|
|
294
|
+
- `actions/v4-release-candidate-promote`
|
|
293
295
|
|
|
294
296
|
Two additional release-authority components are also registered and versioned:
|
|
295
297
|
|
|
@@ -463,4 +465,5 @@ npm pack --dry-run --json --registry=https://registry.npmjs.org/
|
|
|
463
465
|
- [Consumer issue reporting](docs/consumer-issue-reporting.md)
|
|
464
466
|
- [Publish transaction](docs/publish-transaction.md)
|
|
465
467
|
- [Declarative release-tail contract](docs/release-tail-contract.md)
|
|
468
|
+
- [v4 declarative release-tail migration](docs/v4-declarative-release-tail-migration.md)
|
|
466
469
|
- [Release governance](docs/release-governance.md)
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# v4 release-candidate promote action
|
|
2
|
+
|
|
3
|
+
This internal action validates a sealed v4 publication qualification receipt, aggregates the Buildchain Release Passport, and executes the fixed four-capability Release Tail Provider Plane. It has no command or shell extension input and is invoked by the v4 branch of the reusable `release-candidate-promote` workflow.
|
|
@@ -183,5 +183,57 @@
|
|
|
183
183
|
".github/workflows/verify.yml#stage-capsule-checkpoints"
|
|
184
184
|
]
|
|
185
185
|
},
|
|
186
|
-
"declarations": [
|
|
186
|
+
"declarations": [
|
|
187
|
+
{
|
|
188
|
+
"laneId": ".github/workflows/.release-candidate-promote.yml#legacy-promote",
|
|
189
|
+
"authorityClass": "release",
|
|
190
|
+
"triggerClass": "reusable",
|
|
191
|
+
"concurrencyPolicy": {
|
|
192
|
+
"mode": "none",
|
|
193
|
+
"cancelInProgress": false
|
|
194
|
+
},
|
|
195
|
+
"expectedRunnerMinutes": 45,
|
|
196
|
+
"cancellationBehavior": "finish-started",
|
|
197
|
+
"sloImpact": {
|
|
198
|
+
"mergeCritical": false,
|
|
199
|
+
"metric": "protected release completion latency",
|
|
200
|
+
"expectedContributionSeconds": 0,
|
|
201
|
+
"rationale": "This is the existing v3 promotion lane under an explicit legacy identity, not an added execution path."
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"laneId": ".github/workflows/.release-candidate-promote.yml#v4-declarative-promote",
|
|
206
|
+
"authorityClass": "release",
|
|
207
|
+
"triggerClass": "reusable",
|
|
208
|
+
"concurrencyPolicy": {
|
|
209
|
+
"mode": "none",
|
|
210
|
+
"cancelInProgress": false
|
|
211
|
+
},
|
|
212
|
+
"expectedRunnerMinutes": 30,
|
|
213
|
+
"cancellationBehavior": "finish-started",
|
|
214
|
+
"sloImpact": {
|
|
215
|
+
"mergeCritical": false,
|
|
216
|
+
"metric": "protected release completion latency",
|
|
217
|
+
"expectedContributionSeconds": 0,
|
|
218
|
+
"rationale": "The v4 provider lane replaces consumer tail execution only for release invocations and is outside merge-critical CI."
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"laneId": ".github/workflows/v4-declarative-release-tail-dogfood.yml#publish",
|
|
223
|
+
"authorityClass": "release",
|
|
224
|
+
"triggerClass": "manual",
|
|
225
|
+
"concurrencyPolicy": {
|
|
226
|
+
"mode": "none",
|
|
227
|
+
"cancelInProgress": false
|
|
228
|
+
},
|
|
229
|
+
"expectedRunnerMinutes": 35,
|
|
230
|
+
"cancellationBehavior": "finish-started",
|
|
231
|
+
"sloImpact": {
|
|
232
|
+
"mergeCritical": false,
|
|
233
|
+
"metric": "manual dogfood release completion latency",
|
|
234
|
+
"expectedContributionSeconds": 0,
|
|
235
|
+
"rationale": "The explicit dogfood run proves hosted provider publication and checkpoint resume without joining pull-request checks."
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
]
|
|
187
239
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: accepted
|
|
3
|
+
period: ongoing
|
|
4
|
+
theme: buildchain-v4-declarative-release-tail
|
|
5
|
+
doc_type: decision
|
|
6
|
+
source_level: local-files
|
|
7
|
+
confidence: high
|
|
8
|
+
sensitivity: public
|
|
9
|
+
evidence_grade: A
|
|
10
|
+
review_state: self-reviewed
|
|
11
|
+
last_reviewed: 2026-08-26
|
|
12
|
+
ai_provenance:
|
|
13
|
+
model_family: GPT-5
|
|
14
|
+
product: Codex
|
|
15
|
+
generated_at: 2026-08-26
|
|
16
|
+
invisible_context: unavailable
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# ADR 0004: v4 release tails are sealed provider transactions
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
22
|
+
|
|
23
|
+
Buildchain v4 release candidates carry a `kungfu.buildchain.v4-publication-qualification/v1` receipt. Build/Verify creates it from the candidate root, source root, typed artifact and manifest roots, floating-consumer policy digest, and a bounded freshness interval. The receipt root is written into every release-candidate Stage Capsule.
|
|
24
|
+
|
|
25
|
+
`release-candidate-promote` validates that evidence before publication. It does not check out the consumer repository and does not evaluate product-owned qualification, KFD, invariant, publication, activation, or evidence commands. The v4 path accepts no non-empty `command`, `cmd`, `script`, `shell`, or `run` input. The v3 path remains available with its existing inputs and behavior.
|
|
26
|
+
|
|
27
|
+
One Buildchain-owned provider transaction executes these ordered capabilities:
|
|
28
|
+
|
|
29
|
+
1. `artifact.publish` creates and reads back immutable GitHub Release assets.
|
|
30
|
+
2. `signed-channel.commit` commits the rooted channel document through the built-in GitHub document provider.
|
|
31
|
+
3. `release.activate` commits and reads back the rooted activation document.
|
|
32
|
+
4. `released-evidence.synthesize` writes receipt-only evidence from the sealed roots.
|
|
33
|
+
|
|
34
|
+
Buildchain aggregates the Release Passport before the first provider mutation. All four capabilities share one transaction root and use the existing Release Tail Provider Plane envelope, idempotency, retry, observation, and receipt contracts.
|
|
35
|
+
|
|
36
|
+
## Failure and resume semantics
|
|
37
|
+
|
|
38
|
+
The transaction state is checkpointed after every observation and effect. A retry reads the same state, verifies its declaration and plan roots, and starts at the first capability without a settled receipt. A provider result lost after mutation is recovered by readback. Conflicting or partially matching public state enters `repair-required` without another mutation.
|
|
39
|
+
|
|
40
|
+
The dogfood-only `provider-failure-after-capability` input interrupts after a durable capability checkpoint. The workflow immediately invokes the same built-in provider action against the same state path, proving local tail-only continuation and retaining the state, receipts, candidate evidence, and Release Passport as workflow artifacts.
|
|
41
|
+
|
|
42
|
+
## Consequences
|
|
43
|
+
|
|
44
|
+
- Consumers declare evidence and provider targets; they do not inject release-tail programs.
|
|
45
|
+
- Candidate, source, artifact, and policy mismatch, tampering, missing evidence, and stale evidence fail before provider mutation.
|
|
46
|
+
- Adding a new provider capability requires changing Buildchain's fixed capability registry and schema; arbitrary executable extension points are not a compatibility mechanism.
|
|
47
|
+
- v3 consumers are not forced onto the v4 evidence contract.
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"enforcementRevision": "5308189b09bcb5a1314195412f2807a40d678838",
|
|
6
6
|
"repositoryBudgets": {
|
|
7
7
|
"baselineRevision": "858dbe00b6206a8f356b4a12d2659bee7a72e71b",
|
|
8
|
-
"maxHandMaintainedSourceFiles":
|
|
9
|
-
"maxHandMaintainedSourceLines":
|
|
10
|
-
"maxWorkflowFiles":
|
|
11
|
-
"maxWorkflowLines":
|
|
12
|
-
"latestTransition": "
|
|
13
|
-
"latestTransitionRationale": "
|
|
8
|
+
"maxHandMaintainedSourceFiles": 433,
|
|
9
|
+
"maxHandMaintainedSourceLines": 161573,
|
|
10
|
+
"maxWorkflowFiles": 77,
|
|
11
|
+
"maxWorkflowLines": 26557,
|
|
12
|
+
"latestTransition": "V4 release-candidate promotion closes through the declarative provider plane.",
|
|
13
|
+
"latestTransitionRationale": "Four bounded source surfaces add the sealed publication qualification contract, earliest declarative admission, the dedicated v4 promotion Action, and built-in GitHub document providers. One manual-only dogfood workflow proves floating v4 contract-lock consumption and checkpoint resume. The existing v3 action and legacy lane retain their prior inputs and implementation. These exact 433-file, 161573-source-line, 77-workflow-file and 26557-workflow-line ceilings contain no unrelated headroom.",
|
|
14
14
|
"rationale": "Bounded modules separate candidate, evidence, native proof and execution, canonical failure verification, closed-set execution transfer, process-boundary verification, Warrant state and qualification, authority state, qualification, Landing acquisition, verified-attempt admission, Landing settlement and fence validation, provider attempt and heartbeat readback, sealed terminal evidence, hosted heartbeat, resume, store, options, command-specific adapters, and CLI orchestration responsibilities. The protected delivery workflow gives candidate and seal jobs no provider write credential, recursively rejects transfer drift, scopes every transfer artifact to the exact provider run attempt, chains every durable heartbeat state and receipt root on a distinct hosted runner domain, and permits qualification or exact failure settlement only after the finalizer verifies live jobs and the latest durable authority state. Public Landing admission and heartbeat always perform non-injectable fresh exact-attempt provider readback, tolerate only a not-yet-materialized seal job while retaining exact native and duplicate-job rejection, and heartbeat-loss coordination never invokes GitHub's run-scoped cancellation API where a successor rerun could race. The hosted process boundary anchors trust in the kernel-resolved versioned Runner.Worker path while accepting an equivalent argv-zero spelling with the same basename; its public boundary marker is allowed only at the one exact non-secret value, so a forged value under the same credential-like name still fails closed. The credentialless transfer seal validates the rooted native reuse decision against the Warrant-bound source, closure, dependency, toolchain, environment and command inputs; qualifiedBase stays in the proof and decision where it is rooted and later independently rechecked, rather than being assumed on the Warrant schema. V2 mutation cannot initialize a second empty authority beside a legacy ref: migration reads and roots the canonical live v1 ref, rechecks it, applies the explicit configured v2 policy, and atomically replaces its bytes through one expected-old non-force update, so old v1 controllers fail closed while the prior commit remains immutable history. Candidate ancestry classifies the GitHub artifact runtime token as credential authority. Every Landing settlement, including an unexpired fence, requires product-owned terminal readback. Terminal cleanup reads the immutable historical attempt, derives workflow and hosted Landing job identity from live run data, reads the exact protected ref head and compares containment against that immutable SHA, and seals merged only when the admitted merge-group head is contained by that protected base; a later different-head merge settles the old attempt as dequeued. Terminal normalization preserves transfer, finalizer boundary, native and seal job, admitted provider attempt, protected-base head, containment result, and terminal readback coordinates. The public reusable workflow truthfully retains its single-flight v1 authority without advertising v2 migration, while bounded v2 remains a separate opt-in CLI, Node API, and schema contract; the tracked self-caller stays on public v4-alpha with matching stable and alpha locks, and transient train selection is dispatch-only. Next-development parity adds one versioned transition authority, one durable controller, one bounded reservation adapter, and pure public-contract recovery evidence while retaining the existing thin floating-channel callers byte-for-byte. The floating-consumer gate reuses the existing contract-world evaluator so SHA drift passes only under the selected lock's compatibility policy, breaking surface drift still fails closed, and external certification reconstructs the receipt from the observed workflow SHA rather than the lock's historical evidence SHA. Tail reseal adds no Stage Capsule effect or general rebuild authority: it verifies the exact retained four-platform bytes, admits one known macOS tail failure through live provider readback, fences signing and finalization to explicit credentials and Warrant identity, and requires standard candidate Passport plus provider and protected readback. Compatibility Facts parity isolates canonical encoding, temporal verification, lifecycle validation, fixture projection, public authority projection, and CLI adaptation into bounded modules; legacy digest and proof arrays are derived only from exact current Fact lineage. Publication Rehearsal adds no production release authority: the content-addressed capsule contract binds source, candidate, manifest, config, canonical data-only provider bindings, provider policy, observations and core version separately from filesystem, runtime and rehearsal-only provider authority; simulate, replay and explicitly authorized provider rehearsal all reuse the release-tail planner, while same-commit local dogfood resolves the new reusable contract and exact current runtime before external callers remain on floating v4-alpha. Cross-runtime candidate recovery preserves original runtime and provider roots and creates resume lineage only after exact public ref, tag, ancestry, npm version and integrity readback. Adopter Delivery restores the reviewed public v3 gate, drivers, Passport binding, N-1 bootstrap and exact archive loader through one public v4 surface while keeping provider and release authority explicit non-claims. Floating Alpha bootstrap uses only the existing exact resolver and protected Alpha private shell to move an otherwise stale floating shell, retains public v4 stable promotion, and removes itself after protected readback. CI lane change-budget enforcement adds a bounded parser, evaluator, guard, and tests without creating another merge authority."
|
|
15
15
|
},
|
|
16
16
|
"sourceBudgets": {
|
|
@@ -105,8 +105,8 @@
|
|
|
105
105
|
},
|
|
106
106
|
"approvedExistingDebtTransitions": {
|
|
107
107
|
"packages/core/index.js": {
|
|
108
|
-
"maxLines":
|
|
109
|
-
"rationale": "The public facade exposes the bounded
|
|
108
|
+
"maxLines": 705,
|
|
109
|
+
"rationale": "The public facade exposes the bounded v4 publication qualification contract beside the existing v4 governance APIs without adding provider effects or a second implementation; this exact post-integration ceiling cannot grow implicitly."
|
|
110
110
|
},
|
|
111
111
|
"actions/promote-buildchain-ref/index.js": {
|
|
112
112
|
"maxFunctionLines": 280,
|
|
@@ -156,10 +156,10 @@
|
|
|
156
156
|
"rationale": "The generated promotion router keeps the exact candidate recovery interface and the latest bounded shell-routing implementation in one deterministic generator. It now derives the advanced contract gate's expected lane and major from the selected route without exposing them as caller-controlled public inputs. This exact combined train ceiling cannot grow implicitly."
|
|
157
157
|
},
|
|
158
158
|
"scripts/release-candidate-resolver.mjs": {
|
|
159
|
-
"maxLines":
|
|
160
|
-
"maxFunctionLines":
|
|
159
|
+
"maxLines": 854,
|
|
160
|
+
"maxFunctionLines": 309,
|
|
161
161
|
"maxFunctionComplexity": 63,
|
|
162
|
-
"rationale": "The shared candidate resolver
|
|
162
|
+
"rationale": "The shared candidate resolver retains its bounded archive and payload validation while additionally locating and validating the candidate-bound Stage Capsule aggregate and publication qualification receipt before exposing their exact paths. The validation is extracted from the main orchestration and does not execute consumer code; these exact ceilings cannot grow implicitly."
|
|
163
163
|
},
|
|
164
164
|
"scripts/auditable-demo.mjs": {
|
|
165
165
|
"maxLines": 1330,
|
|
@@ -1133,6 +1133,7 @@
|
|
|
1133
1133
|
"promotion-shell-ref",
|
|
1134
1134
|
"promotion-shell-sha",
|
|
1135
1135
|
"promotion-target-ref",
|
|
1136
|
+
"provider-failure-after-capability",
|
|
1136
1137
|
"publication-admission-json",
|
|
1137
1138
|
"publication-authority-workflow-path",
|
|
1138
1139
|
"publication-auto-admission",
|
|
@@ -1255,7 +1256,7 @@
|
|
|
1255
1256
|
"release-tail-transaction-state"
|
|
1256
1257
|
]
|
|
1257
1258
|
},
|
|
1258
|
-
"rationale": "The advanced
|
|
1259
|
+
"rationale": "The advanced workflow adds an isolated v4-only declarative provider lane and one optional dogfood failure checkpoint while preserving the existing v3 promotion implementation as the legacy lane. V4 admits only sealed candidate, Stage Capsule and qualification evidence; legacy command inputs fail closed before planning and the provider resumes only incomplete capabilities."
|
|
1259
1260
|
},
|
|
1260
1261
|
"workflow:release-candidate-promote": {
|
|
1261
1262
|
"fromRevision": "5308189b09bcb5a1314195412f2807a40d678838",
|
|
@@ -1290,6 +1291,7 @@
|
|
|
1290
1291
|
"github-release-payload-patterns",
|
|
1291
1292
|
"github-release-title",
|
|
1292
1293
|
"package-manager",
|
|
1294
|
+
"provider-failure-after-capability",
|
|
1293
1295
|
"publication-admission-json",
|
|
1294
1296
|
"publication-auto-admission",
|
|
1295
1297
|
"publication-auto-no-gate",
|
|
@@ -1423,7 +1425,7 @@
|
|
|
1423
1425
|
"release-tail-transaction-state"
|
|
1424
1426
|
]
|
|
1425
1427
|
},
|
|
1426
|
-
"rationale": "The generated
|
|
1428
|
+
"rationale": "The generated router preserves exact floating v4 contract-lock routing and forwards one optional dogfood provider checkpoint into the v4-only declarative lane. Existing v3 callers retain the same defaults, public inputs and legacy implementation, while v4 rejects command-shaped tail authority before planning."
|
|
1427
1429
|
}
|
|
1428
1430
|
},
|
|
1429
1431
|
"approvedExtractedDebt": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"ref": "v4-alpha",
|
|
23
23
|
"sha": "dddddddddddddddddddddddddddddddddddddddd",
|
|
24
24
|
"contractRoot": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
25
|
-
"consumerPolicyReceiptRoot": "sha256:
|
|
25
|
+
"consumerPolicyReceiptRoot": "sha256:c3779989554f16ea3e8cd38c270985e5168a59481596918bd57a3a0bde66de4d"
|
|
26
26
|
},
|
|
27
27
|
"warrant": {
|
|
28
28
|
"candidateId": "candidate-alpha-2",
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://kungfu.link/schemas/buildchain/v4-publication-qualification-v1.schema.json",
|
|
4
|
+
"title": "Buildchain v4 Publication Qualification Receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schema",
|
|
9
|
+
"repository",
|
|
10
|
+
"candidateRoot",
|
|
11
|
+
"sourceSha",
|
|
12
|
+
"sourceRoot",
|
|
13
|
+
"policyDigest",
|
|
14
|
+
"artifacts",
|
|
15
|
+
"issuedAt",
|
|
16
|
+
"expiresAt",
|
|
17
|
+
"artifactRoot",
|
|
18
|
+
"receiptRoot"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"schema": { "const": "kungfu.buildchain.v4-publication-qualification/v1" },
|
|
22
|
+
"repository": { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$" },
|
|
23
|
+
"candidateRoot": { "$ref": "#/$defs/root" },
|
|
24
|
+
"sourceSha": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
|
|
25
|
+
"sourceRoot": { "$ref": "#/$defs/root" },
|
|
26
|
+
"policyDigest": { "$ref": "#/$defs/root" },
|
|
27
|
+
"artifacts": {
|
|
28
|
+
"type": "array",
|
|
29
|
+
"minItems": 1,
|
|
30
|
+
"items": { "$ref": "#/$defs/artifact" }
|
|
31
|
+
},
|
|
32
|
+
"issuedAt": { "type": "string", "format": "date-time" },
|
|
33
|
+
"expiresAt": { "type": "string", "format": "date-time" },
|
|
34
|
+
"artifactRoot": { "$ref": "#/$defs/root" },
|
|
35
|
+
"receiptRoot": { "$ref": "#/$defs/root" }
|
|
36
|
+
},
|
|
37
|
+
"$defs": {
|
|
38
|
+
"root": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
|
|
39
|
+
"artifact": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["role", "platform", "artifactRoot", "manifestRoot"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"role": { "type": "string", "minLength": 1 },
|
|
45
|
+
"platform": { "type": "string", "minLength": 1 },
|
|
46
|
+
"artifactRoot": { "$ref": "#/$defs/root" },
|
|
47
|
+
"manifestRoot": { "$ref": "#/$defs/root" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"schemas/v4-publication-rehearsal-capsule-v1.schema.json",
|
|
25
25
|
"schemas/v4-adopter-delivery-v1.schema.json",
|
|
26
26
|
"schemas/release-tail-capabilities-v1.schema.json",
|
|
27
|
+
"schemas/v4-publication-qualification-v1.schema.json",
|
|
27
28
|
"buildchain-contract.json",
|
|
28
29
|
"kfd-upstream-aggregate.json",
|
|
29
30
|
"kfd-claims.json",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"schemas/v4-publication-rehearsal-capsule-v1.schema.json",
|
|
13
13
|
"schemas/v4-adopter-delivery-v1.schema.json",
|
|
14
14
|
"schemas/release-tail-capabilities-v1.schema.json",
|
|
15
|
+
"schemas/v4-publication-qualification-v1.schema.json",
|
|
15
16
|
"kfd-support.json",
|
|
16
17
|
"artifact-evidence.json",
|
|
17
18
|
"product-mechanism.json",
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"schemas/v4-publication-rehearsal-capsule-v1.schema.json",
|
|
52
53
|
"schemas/v4-adopter-delivery-v1.schema.json",
|
|
53
54
|
"schemas/release-tail-capabilities-v1.schema.json",
|
|
55
|
+
"schemas/v4-publication-qualification-v1.schema.json",
|
|
54
56
|
"buildchain-contract.json",
|
|
55
57
|
"kfd-claims.json",
|
|
56
58
|
"product-mechanism.json",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "4.0.1-alpha.
|
|
7
|
+
"version": "4.0.1-alpha.42",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v4",
|
|
@@ -1591,7 +1591,7 @@
|
|
|
1591
1591
|
"GitHub Release passport and evidence publication is delegated to promote-buildchain-ref after the semver release transaction completes"
|
|
1592
1592
|
],
|
|
1593
1593
|
"breakingDigest": "sha256:5f10c81d3f80cb417960be682921884639c40b6d875f1a3b1ffae7e652c3f468",
|
|
1594
|
-
"auditDigest": "sha256:
|
|
1594
|
+
"auditDigest": "sha256:4eebf2dfffd030f88de33622e470a6a77321b67f7e717901b11207dade542f1b"
|
|
1595
1595
|
},
|
|
1596
1596
|
{
|
|
1597
1597
|
"contractVersion": 1,
|
|
@@ -1646,7 +1646,7 @@
|
|
|
1646
1646
|
"resume-from-candidate-run is fail-closed and uses a fresh caller event instead of rerunning a frozen startup graph"
|
|
1647
1647
|
],
|
|
1648
1648
|
"breakingDigest": "sha256:9db8dd07152855d03ff30f9c571438593c689d3e8139fa45431d000f548242f5",
|
|
1649
|
-
"auditDigest": "sha256:
|
|
1649
|
+
"auditDigest": "sha256:0004ab83f8e7ef1d07ebc3de28d9cd3bbbb6ce0d95cfa7eaa41107e3656f7f20",
|
|
1650
1650
|
"compatibleBreakingDigests": [
|
|
1651
1651
|
"sha256:aa30f22e3af0a89841310bdbdc900844dd95a66974db173fa140a71bbd7e82c0"
|
|
1652
1652
|
],
|
|
@@ -1819,6 +1819,52 @@
|
|
|
1819
1819
|
"breakingDigest": "sha256:0bcba689ab5060e12230db4118895242ecb48677ff581ea0360b1833bdac558c",
|
|
1820
1820
|
"auditDigest": "sha256:da366842e8943c88a4f12520faf2d19c555b7530d8f6d44cf75a37b94200960d"
|
|
1821
1821
|
},
|
|
1822
|
+
{
|
|
1823
|
+
"contractVersion": 1,
|
|
1824
|
+
"stability": "stable",
|
|
1825
|
+
"additiveChanges": "optional inputs, optional outputs, diagnostics, and documentation may be added within the same major line",
|
|
1826
|
+
"id": "v4-release-candidate-promote-action",
|
|
1827
|
+
"kind": "action",
|
|
1828
|
+
"path": "actions/v4-release-candidate-promote/action.yml",
|
|
1829
|
+
"publicRef": "kungfu-systems/buildchain/actions/v4-release-candidate-promote@v4",
|
|
1830
|
+
"requiredInputs": [
|
|
1831
|
+
"token",
|
|
1832
|
+
"repository",
|
|
1833
|
+
"source-sha",
|
|
1834
|
+
"version",
|
|
1835
|
+
"tag",
|
|
1836
|
+
"channel",
|
|
1837
|
+
"candidate-passport-path",
|
|
1838
|
+
"stage-capsules-path",
|
|
1839
|
+
"publication-qualification-path"
|
|
1840
|
+
],
|
|
1841
|
+
"requiredOutputs": [
|
|
1842
|
+
"release-passport-path",
|
|
1843
|
+
"release-passport-root",
|
|
1844
|
+
"transaction-state",
|
|
1845
|
+
"declaration-root",
|
|
1846
|
+
"transaction-root",
|
|
1847
|
+
"state-root",
|
|
1848
|
+
"receipt-roots-json"
|
|
1849
|
+
],
|
|
1850
|
+
"breakingDefaults": {
|
|
1851
|
+
"statePath": ".buildchain/release-tail/state.json",
|
|
1852
|
+
"executionBoundary": "built-in-provider-plane-only"
|
|
1853
|
+
},
|
|
1854
|
+
"optionalInputs": [
|
|
1855
|
+
"artifact-paths",
|
|
1856
|
+
"state-path",
|
|
1857
|
+
"failure-after-capability"
|
|
1858
|
+
],
|
|
1859
|
+
"guarantees": [
|
|
1860
|
+
"v4 promotion consumes only sealed candidate, Stage Capsule, qualification, and artifact evidence",
|
|
1861
|
+
"GitHub Release, signed-channel commit, activation, readback, and released-evidence synthesis use built-in provider adapters",
|
|
1862
|
+
"durable provider checkpoints resume completed capabilities without replay",
|
|
1863
|
+
"no consumer command, script, shell, checkout, or executable tail hook is accepted"
|
|
1864
|
+
],
|
|
1865
|
+
"breakingDigest": "sha256:9229eb3a000fb408feb6b8793c209c77afbf9327026467d68954470e22e4f8f4",
|
|
1866
|
+
"auditDigest": "sha256:83fd394419851e6da877c50018e879b447497db52b0ac871dfd83e074f5459a8"
|
|
1867
|
+
},
|
|
1822
1868
|
{
|
|
1823
1869
|
"contractVersion": 1,
|
|
1824
1870
|
"stability": "stable",
|
|
@@ -2211,7 +2257,7 @@
|
|
|
2211
2257
|
"manual entries carry source file digests so downstream sites and agents can detect stale hand-written documentation"
|
|
2212
2258
|
],
|
|
2213
2259
|
"breakingDigest": "sha256:7d0d2819e3a3e72989d9c57b5efe9d0bc0a79bc0f2c82a0c7b9d6c5a211a91f2",
|
|
2214
|
-
"auditDigest": "sha256:
|
|
2260
|
+
"auditDigest": "sha256:26db255c7250b899d1352c53010a5208f5299b03007179349730b37a11c10be3"
|
|
2215
2261
|
},
|
|
2216
2262
|
{
|
|
2217
2263
|
"contractVersion": 1,
|
|
@@ -2233,7 +2279,7 @@
|
|
|
2233
2279
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
2234
2280
|
],
|
|
2235
2281
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
2236
|
-
"auditDigest": "sha256:
|
|
2282
|
+
"auditDigest": "sha256:a1400da39b461f070b0a8b0eced378eaf81938227b50eb6ee1d808081a483ed1"
|
|
2237
2283
|
},
|
|
2238
2284
|
{
|
|
2239
2285
|
"contractVersion": 1,
|
|
@@ -2289,7 +2335,7 @@
|
|
|
2289
2335
|
"controllerDescriptor": {
|
|
2290
2336
|
"contract": "buildchain.controller-descriptor/v1",
|
|
2291
2337
|
"digest": "sha256:91aeff9ffcc598918626c24850a00063a79ddf26aa48702fa22e7dce8c761968",
|
|
2292
|
-
"registryDigest": "sha256:
|
|
2338
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
2293
2339
|
"inputClassifications": {
|
|
2294
2340
|
"buildchain-ref": {
|
|
2295
2341
|
"classification": "included",
|
|
@@ -2497,7 +2543,7 @@
|
|
|
2497
2543
|
"controllerDescriptor": {
|
|
2498
2544
|
"contract": "buildchain.controller-descriptor/v1",
|
|
2499
2545
|
"digest": "sha256:03677ba50080b3813a20004c41802e340368e4d225782fae194e3722c763bd01",
|
|
2500
|
-
"registryDigest": "sha256:
|
|
2546
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
2501
2547
|
"inputClassifications": {
|
|
2502
2548
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN": {
|
|
2503
2549
|
"classification": "redacted",
|
|
@@ -3064,7 +3110,7 @@
|
|
|
3064
3110
|
"controllerDescriptor": {
|
|
3065
3111
|
"contract": "buildchain.controller-descriptor/v1",
|
|
3066
3112
|
"digest": "sha256:45978a572cf3ce57b48e5c3190761ad4fbeedc8e75ea0dae2e66ea5a980282df",
|
|
3067
|
-
"registryDigest": "sha256:
|
|
3113
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
3068
3114
|
"inputClassifications": {
|
|
3069
3115
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN": {
|
|
3070
3116
|
"classification": "redacted",
|
|
@@ -3566,7 +3612,7 @@
|
|
|
3566
3612
|
"controllerDescriptor": {
|
|
3567
3613
|
"contract": "buildchain.controller-descriptor/v1",
|
|
3568
3614
|
"digest": "sha256:8e42956a2c10fa109500e72b97994f06b3d22a19cc63a46f66410b2e81706e9d",
|
|
3569
|
-
"registryDigest": "sha256:
|
|
3615
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
3570
3616
|
"inputClassifications": {
|
|
3571
3617
|
"artifact-name": {
|
|
3572
3618
|
"classification": "included",
|
|
@@ -3783,7 +3829,7 @@
|
|
|
3783
3829
|
"controllerDescriptor": {
|
|
3784
3830
|
"contract": "buildchain.controller-descriptor/v1",
|
|
3785
3831
|
"digest": "sha256:c5274b37f04d0054559fdc8698c51bd0f0d8ae470baf163e9caa7699aa970575",
|
|
3786
|
-
"registryDigest": "sha256:
|
|
3832
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
3787
3833
|
"inputClassifications": {
|
|
3788
3834
|
"artifact-path": {
|
|
3789
3835
|
"classification": "digest-only",
|
|
@@ -4029,7 +4075,7 @@
|
|
|
4029
4075
|
"controllerDescriptor": {
|
|
4030
4076
|
"contract": "buildchain.controller-descriptor/v1",
|
|
4031
4077
|
"digest": "sha256:e48bb7719886d3949d63ec69d638264b20c7de8a70ee2db3cca78d4369f5a41e",
|
|
4032
|
-
"registryDigest": "sha256:
|
|
4078
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
4033
4079
|
"inputClassifications": {
|
|
4034
4080
|
"artifact-name": {
|
|
4035
4081
|
"classification": "included",
|
|
@@ -4219,7 +4265,7 @@
|
|
|
4219
4265
|
"controllerDescriptor": {
|
|
4220
4266
|
"contract": "buildchain.controller-descriptor/v1",
|
|
4221
4267
|
"digest": "sha256:6d71409659fbf8543c7e520b0c493d8afe86bdf60286b860bb917f0041ebc173",
|
|
4222
|
-
"registryDigest": "sha256:
|
|
4268
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
4223
4269
|
"inputClassifications": {
|
|
4224
4270
|
"artifact-name": {
|
|
4225
4271
|
"classification": "included",
|
|
@@ -4477,6 +4523,7 @@
|
|
|
4477
4523
|
"promotion-shell-ref",
|
|
4478
4524
|
"promotion-shell-sha",
|
|
4479
4525
|
"promotion-target-ref",
|
|
4526
|
+
"provider-failure-after-capability",
|
|
4480
4527
|
"publication-admission-json",
|
|
4481
4528
|
"publication-authority-workflow-path",
|
|
4482
4529
|
"publication-auto-admission",
|
|
@@ -4558,8 +4605,8 @@
|
|
|
4558
4605
|
],
|
|
4559
4606
|
"controllerDescriptor": {
|
|
4560
4607
|
"contract": "buildchain.controller-descriptor/v1",
|
|
4561
|
-
"digest": "sha256:
|
|
4562
|
-
"registryDigest": "sha256:
|
|
4608
|
+
"digest": "sha256:665f27b24c6aaf813f071da1182c27ccf487df42cc0caee85afd9b5fc1bfab05",
|
|
4609
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
4563
4610
|
"inputClassifications": {
|
|
4564
4611
|
"BUILDCHAIN_ISSUE_APP_ID": {
|
|
4565
4612
|
"classification": "redacted",
|
|
@@ -4761,6 +4808,10 @@
|
|
|
4761
4808
|
"classification": "included",
|
|
4762
4809
|
"source": "workflow-call-input"
|
|
4763
4810
|
},
|
|
4811
|
+
"provider-failure-after-capability": {
|
|
4812
|
+
"classification": "included",
|
|
4813
|
+
"source": "workflow-call-input"
|
|
4814
|
+
},
|
|
4764
4815
|
"publication-admission-json": {
|
|
4765
4816
|
"classification": "digest-only",
|
|
4766
4817
|
"source": "workflow-call-input"
|
|
@@ -5082,7 +5133,7 @@
|
|
|
5082
5133
|
"missing receipts are non-qualifying and must not be represented as a successful controller run"
|
|
5083
5134
|
],
|
|
5084
5135
|
"breakingDigest": "sha256:015d8de793adbd4c539416be7d7512e18cc92097e629b0203fa06d2c183e98bd",
|
|
5085
|
-
"auditDigest": "sha256:
|
|
5136
|
+
"auditDigest": "sha256:0004ab83f8e7ef1d07ebc3de28d9cd3bbbb6ce0d95cfa7eaa41107e3656f7f20"
|
|
5086
5137
|
},
|
|
5087
5138
|
{
|
|
5088
5139
|
"contractVersion": 1,
|
|
@@ -5147,7 +5198,7 @@
|
|
|
5147
5198
|
"controllerDescriptor": {
|
|
5148
5199
|
"contract": "buildchain.controller-descriptor/v1",
|
|
5149
5200
|
"digest": "sha256:660579b5561e8e33375a3f3b1fefbb8a5bd8241a55ba43374d786fb772c24a12",
|
|
5150
|
-
"registryDigest": "sha256:
|
|
5201
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
5151
5202
|
"inputClassifications": {
|
|
5152
5203
|
"agent-work-context-json": {
|
|
5153
5204
|
"classification": "digest-only",
|
|
@@ -5291,7 +5342,7 @@
|
|
|
5291
5342
|
"controllerDescriptor": {
|
|
5292
5343
|
"contract": "buildchain.controller-descriptor/v1",
|
|
5293
5344
|
"digest": "sha256:b6f53563c0adc859bc586c05fce560a5094d7d9666438d63c5fd3e1fc4774555",
|
|
5294
|
-
"registryDigest": "sha256:
|
|
5345
|
+
"registryDigest": "sha256:5250c4437ad5b1bac03d283d62ccbc0335a3fb7cb2ffe538dd9e42c3a192548a",
|
|
5295
5346
|
"inputClassifications": {}
|
|
5296
5347
|
},
|
|
5297
5348
|
"guarantees": [
|
|
@@ -5307,6 +5358,6 @@
|
|
|
5307
5358
|
"compatibilityFactRegistryRoot": "sha256:232fd556a2372b29db586bbc2acbdfce6464a68c93902797ff527f75f7816c42",
|
|
5308
5359
|
"compatibilityFactCutRoot": "sha256:f61b975d4a96c921cc4bd37fb3ed9a0596b47004fe34dc7219979d697e3707f9",
|
|
5309
5360
|
"compatibilityProofRegistryRoot": "sha256:b7194b811e4d3af2df4390bc4d1731e16a86215bd64ee18cb630dd5492f4fb63",
|
|
5310
|
-
"compatibilityDigest": "sha256:
|
|
5311
|
-
"contractDigest": "sha256:
|
|
5361
|
+
"compatibilityDigest": "sha256:20411029d83211dff426fb6535a608902129844a5ccb4788db77d3f81becb839",
|
|
5362
|
+
"contractDigest": "sha256:cfce04a67fbf3003bd6282de28ab9a71b5b2f188d59192cb1bbbb10204326a9d"
|
|
5312
5363
|
}
|