@kungfu-tech/buildchain 3.0.6 → 3.0.7-alpha.0
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 +4 -2
- package/actions/release-tail/README.md +17 -0
- package/bin/buildchain.mjs +11 -0
- package/bin/internal/command-registry.mjs +2 -0
- package/contracts/fixtures/release-tail-capabilities-v1/kungfu-alpha.json +273 -0
- package/contracts/publication-rehearsal-capsule-v1.schema.json +173 -0
- package/contracts/release-tail-capabilities-v1.schema.json +199 -0
- package/contracts/release-tail-provider-bindings-v1.schema.json +56 -0
- package/dist/site/agent-index.json +3 -0
- package/dist/site/artifact-schemas.json +6 -0
- package/dist/site/buildchain-contract.json +35 -20
- package/dist/site/buildchain-site.json +307 -17
- package/dist/site/capability-registry.json +12 -9
- package/dist/site/cli-registry.json +102 -0
- package/dist/site/controller-registry.json +14 -2
- package/dist/site/kfd-claims.json +247 -16
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +48 -3
- package/dist/site/node-api-registry.json +3108 -1409
- package/dist/site/page-registry.json +275 -9
- package/dist/site/public-surface-audit.json +304 -15
- package/dist/site/publication-authority-registry.json +26 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +5 -0
- package/dist/site/schemas/publication-rehearsal-capsule-v1.schema.json +269 -0
- package/dist/site/schemas/release-tail-capabilities-v1.schema.json +353 -0
- package/dist/site/schemas/release-tail-provider-bindings-v1.schema.json +94 -0
- package/dist/site/site-manifest.json +31 -7
- package/dist/site/workflow-registry.json +86 -9
- package/docs/MAP.md +5 -2
- package/docs/cli-reference.md +136 -0
- package/docs/node-api-reference.md +233 -84
- package/docs/publication-rehearsal.md +94 -0
- package/docs/release-tail-contract.md +160 -0
- package/docs/release-tail-provider-plane.md +120 -0
- package/package.json +8 -3
- package/packages/core/buildchain-agent-manuals.js +3 -0
- package/packages/core/buildchain-kfd-claims.js +1 -1
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/index.js +39 -0
- package/packages/core/paper-agent-entry.js +11 -5
- package/packages/core/paper-repository.js +1 -0
- package/packages/core/paper-scaffold-content.js +21 -0
- package/packages/core/paper.js +28 -2
- package/packages/core/publication-rehearsal-projection.js +173 -0
- package/packages/core/publication-rehearsal-runtime.js +909 -0
- package/packages/core/release-tail-compatibility.js +60 -0
- package/packages/core/release-tail-provider-adapters.js +461 -0
- package/packages/core/release-tail-provider-plane.js +1228 -0
- package/scripts/assemble-publication-artifact-admission.mjs +1 -1
- package/scripts/assemble-self-publication-admission.mjs +1 -1
- package/scripts/buildchain-cli-help.mjs +13 -0
- package/scripts/check-core-mechanism-inventory.mjs +347 -0
- package/scripts/check-inventory.mjs +8 -8
- package/scripts/check-maintainability.mjs +9 -2
- package/scripts/check-release-tail-contract.mjs +435 -0
- package/scripts/generate-channel-promotion-workflow.mjs +10 -8
- package/scripts/generate-site-bundle.mjs +24 -0
- package/scripts/init-repo.mjs +26 -2
- package/scripts/materialize-self-release-candidate-version.mjs +131 -0
- package/scripts/release-tail.mjs +159 -0
- package/scripts/site-capability-metadata.mjs +11 -0
- package/scripts/v4-architecture.mjs +600 -0
- package/scripts/workflow-call-contract.mjs +184 -5
package/README.md
CHANGED
|
@@ -278,13 +278,14 @@ plus fail-closed product-evidence gates for KFD-4, KFD-5, and KFD-7. These
|
|
|
278
278
|
gates preserve product-owned qualification and support decisions; they do not
|
|
279
279
|
turn a schema-valid record into certification or shipped support.
|
|
280
280
|
|
|
281
|
-
Buildchain's action registry currently contains
|
|
281
|
+
Buildchain's action registry currently contains seven active entries. Five are
|
|
282
282
|
direct consumer integration actions:
|
|
283
283
|
|
|
284
284
|
- `actions/validate-config`
|
|
285
285
|
- `actions/run-lifecycle`
|
|
286
286
|
- `actions/promote-buildchain-ref`
|
|
287
287
|
- `actions/report-buildchain-issue`
|
|
288
|
+
- `actions/release-tail`
|
|
288
289
|
|
|
289
290
|
Two additional release-authority components are also registered and versioned:
|
|
290
291
|
|
|
@@ -292,7 +293,7 @@ Two additional release-authority components are also registered and versioned:
|
|
|
292
293
|
- `actions/macos-credential-island`
|
|
293
294
|
|
|
294
295
|
`dist/site/workflow-registry.json#actions` is the machine-readable inventory;
|
|
295
|
-
this split keeps the older four-action consumer
|
|
296
|
+
this split keeps the older four-action consumer snapshot from being mistaken for
|
|
296
297
|
the complete current registry.
|
|
297
298
|
|
|
298
299
|
The active reusable workflow surfaces are:
|
|
@@ -457,4 +458,5 @@ npm pack --dry-run --json --registry=https://registry.npmjs.org/
|
|
|
457
458
|
- [Release candidate passport](docs/release-candidate.md)
|
|
458
459
|
- [Consumer issue reporting](docs/consumer-issue-reporting.md)
|
|
459
460
|
- [Publish transaction](docs/publish-transaction.md)
|
|
461
|
+
- [Declarative release-tail contract](docs/release-tail-contract.md)
|
|
460
462
|
- [Release governance](docs/release-governance.md)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Declarative Release Tail
|
|
2
|
+
|
|
3
|
+
This Action restores one content-addressed
|
|
4
|
+
`kungfu.buildchain.publication-rehearsal-capsule/v1` and invokes the same public
|
|
5
|
+
rehearsal runtime used by the local CLI. The capsule binds the versioned
|
|
6
|
+
`buildchain.release-tail/v1` declaration, candidate files, policies, Passport,
|
|
7
|
+
transaction, data-only provider bindings and observations. It does not accept
|
|
8
|
+
a command, script, executable path, plugin, repository callback, implicit
|
|
9
|
+
workspace or GitHub runner semantic input.
|
|
10
|
+
|
|
11
|
+
Every mutation is preceded and followed by provider readback. Buildchain core,
|
|
12
|
+
not the adapter, compares the observed subject and target roots, owns retry and
|
|
13
|
+
terminal classification, checkpoints state and emits the standardized receipt.
|
|
14
|
+
Tokens remain Action inputs and are never written to the transaction or
|
|
15
|
+
receipt. The wrapper contributes only credentials, GitHub/HTTPS transport and
|
|
16
|
+
real provider observations. The rooted provider transcript and rehearsal
|
|
17
|
+
evidence are retained with the transaction state.
|
package/bin/buildchain.mjs
CHANGED
|
@@ -9,6 +9,7 @@ import { npmPublishDryRun } from "../scripts/npm-publish-dry-run.mjs";
|
|
|
9
9
|
import { runLifecycle } from "../scripts/run-lifecycle-core.mjs";
|
|
10
10
|
import { runReleasePropagationCli } from "../scripts/release-propagation.mjs";
|
|
11
11
|
import { runReleaseGovernanceCli } from "../scripts/reconcile-release-governance.mjs";
|
|
12
|
+
import { runReleaseTailCli } from "../scripts/release-tail.mjs";
|
|
12
13
|
import { runPublicationArtifactCli } from "../scripts/publication-artifact.mjs";
|
|
13
14
|
import { runPublicationPackageCli } from "../scripts/publication-package.mjs";
|
|
14
15
|
import { runPublicationReproducibilityCli } from "../scripts/publication-reproducibility.mjs";
|
|
@@ -1646,6 +1647,10 @@ async function handleReleaseGovernanceCommand(args) {
|
|
|
1646
1647
|
|
|
1647
1648
|
}
|
|
1648
1649
|
|
|
1650
|
+
async function handleReleaseTailCommand(args) {
|
|
1651
|
+
await runReleaseTailCli(args);
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1649
1654
|
async function handleGitHubGovernanceCommand(args) {
|
|
1650
1655
|
runScript("reconcile-github-governance.mjs", args);
|
|
1651
1656
|
return;
|
|
@@ -1706,6 +1711,10 @@ async function handlePublishSourceCommand(args) {
|
|
|
1706
1711
|
|
|
1707
1712
|
}
|
|
1708
1713
|
|
|
1714
|
+
async function handleArchitectureCommand(args) {
|
|
1715
|
+
runScript("v4-architecture.mjs", args);
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1709
1718
|
const BUILDCHAIN_COMMAND_HANDLERS = Object.freeze({
|
|
1710
1719
|
"help": handleHelpCommand,
|
|
1711
1720
|
"version": handleVersionCommand,
|
|
@@ -1737,11 +1746,13 @@ const BUILDCHAIN_COMMAND_HANDLERS = Object.freeze({
|
|
|
1737
1746
|
"paper": handlePaperCommand,
|
|
1738
1747
|
"release-propagation": handleReleasePropagationCommand,
|
|
1739
1748
|
"release-governance": handleReleaseGovernanceCommand,
|
|
1749
|
+
"release-tail": handleReleaseTailCommand,
|
|
1740
1750
|
"github-governance": handleGitHubGovernanceCommand,
|
|
1741
1751
|
"badges": handleBadgesCommand,
|
|
1742
1752
|
"homebrew": handleHomebrewCommand,
|
|
1743
1753
|
"build-contract": handleBuildContractCommand,
|
|
1744
1754
|
"publish-source": handlePublishSourceCommand,
|
|
1755
|
+
"architecture": handleArchitectureCommand,
|
|
1745
1756
|
});
|
|
1746
1757
|
|
|
1747
1758
|
async function main(argv = process.argv.slice(2)) {
|
|
@@ -32,11 +32,13 @@ const BUILDCHAIN_COMMAND_REGISTRY = Object.freeze([
|
|
|
32
32
|
{ id: "paper", aliases: [] },
|
|
33
33
|
{ id: "release-propagation", aliases: [] },
|
|
34
34
|
{ id: "release-governance", aliases: [] },
|
|
35
|
+
{ id: "release-tail", aliases: [] },
|
|
35
36
|
{ id: "github-governance", aliases: [] },
|
|
36
37
|
{ id: "badges", aliases: [] },
|
|
37
38
|
{ id: "homebrew", aliases: [] },
|
|
38
39
|
{ id: "build-contract", aliases: [] },
|
|
39
40
|
{ id: "publish-source", aliases: [] },
|
|
41
|
+
{ id: "architecture", aliases: [] },
|
|
40
42
|
]);
|
|
41
43
|
|
|
42
44
|
function buildCommandLookup(registry = BUILDCHAIN_COMMAND_REGISTRY) {
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "kungfu-buildchain-release-tail-capabilities",
|
|
3
|
+
"schemaVersion": 1,
|
|
4
|
+
"transactionPolicy": "buildchain.release-tail/v1",
|
|
5
|
+
"subject": {
|
|
6
|
+
"repository": "kungfu-systems/kungfu",
|
|
7
|
+
"sourceSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
8
|
+
"version": "4.0.0-alpha.1",
|
|
9
|
+
"tag": "v4.0.0-alpha.1",
|
|
10
|
+
"channel": "alpha"
|
|
11
|
+
},
|
|
12
|
+
"capabilities": [
|
|
13
|
+
{
|
|
14
|
+
"id": "artifact.publish",
|
|
15
|
+
"executor": "provider-adapter",
|
|
16
|
+
"adapter": "github-release-assets",
|
|
17
|
+
"artifactRoles": [
|
|
18
|
+
{
|
|
19
|
+
"role": "installable-product",
|
|
20
|
+
"root": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"role": "release-passport",
|
|
24
|
+
"root": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"destination": {
|
|
28
|
+
"kind": "github-release",
|
|
29
|
+
"locator": "github-release:kungfu-systems/kungfu@v4.0.0-alpha.1"
|
|
30
|
+
},
|
|
31
|
+
"channelPolicy": {
|
|
32
|
+
"channel": "alpha",
|
|
33
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
34
|
+
"authorityMove": "verified-ref"
|
|
35
|
+
},
|
|
36
|
+
"activationPolicy": { "mode": "none", "environment": "none" },
|
|
37
|
+
"readbackPredicates": [
|
|
38
|
+
{
|
|
39
|
+
"id": "release-assets-match-roots",
|
|
40
|
+
"kind": "provider-assets",
|
|
41
|
+
"expected": "all declared artifact roots are publicly readable"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"effect": {
|
|
45
|
+
"kind": "artifact-publication",
|
|
46
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
47
|
+
},
|
|
48
|
+
"observation": {
|
|
49
|
+
"kind": "artifact-publication-readback",
|
|
50
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
51
|
+
},
|
|
52
|
+
"receipt": {
|
|
53
|
+
"kind": "artifact-publication",
|
|
54
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
55
|
+
},
|
|
56
|
+
"operationIdentity": {
|
|
57
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
58
|
+
"capabilityId": "artifact.publish",
|
|
59
|
+
"subjectRoot": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
60
|
+
"targetRoot": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
|
|
61
|
+
"attemptKey": "artifact.publish/1"
|
|
62
|
+
},
|
|
63
|
+
"idempotency": {
|
|
64
|
+
"scope": "subject-target",
|
|
65
|
+
"duplicate": "readback-before-retry"
|
|
66
|
+
},
|
|
67
|
+
"retry": {
|
|
68
|
+
"class": "provider-transient",
|
|
69
|
+
"localAttempts": 2,
|
|
70
|
+
"exhausted": "repair-required"
|
|
71
|
+
},
|
|
72
|
+
"evidenceRequirements": [
|
|
73
|
+
"kungfu-buildchain-publish-evidence",
|
|
74
|
+
"kungfu-buildchain-release-passport"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "signed-channel.commit",
|
|
79
|
+
"executor": "provider-adapter",
|
|
80
|
+
"adapter": "signed-static-channel",
|
|
81
|
+
"artifactRoles": [
|
|
82
|
+
{
|
|
83
|
+
"role": "signed-channel-index",
|
|
84
|
+
"root": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"role": "installer-publication-bundle",
|
|
88
|
+
"root": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"destination": {
|
|
92
|
+
"kind": "well-known-signed-channel",
|
|
93
|
+
"locator": "https://kungfu.tech/.well-known/kungfu/alpha.json"
|
|
94
|
+
},
|
|
95
|
+
"channelPolicy": {
|
|
96
|
+
"channel": "alpha",
|
|
97
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
98
|
+
"authorityMove": "signed-cas"
|
|
99
|
+
},
|
|
100
|
+
"activationPolicy": { "mode": "none", "environment": "none" },
|
|
101
|
+
"readbackPredicates": [
|
|
102
|
+
{
|
|
103
|
+
"id": "signed-channel-root",
|
|
104
|
+
"kind": "public-signed-document",
|
|
105
|
+
"expected": "signature, payload root, source SHA, tag, and previous authority match"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"effect": {
|
|
109
|
+
"kind": "signed-channel-commit",
|
|
110
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
111
|
+
},
|
|
112
|
+
"observation": {
|
|
113
|
+
"kind": "signed-channel-readback",
|
|
114
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
115
|
+
},
|
|
116
|
+
"receipt": {
|
|
117
|
+
"kind": "publication-commit",
|
|
118
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
119
|
+
},
|
|
120
|
+
"operationIdentity": {
|
|
121
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
122
|
+
"capabilityId": "signed-channel.commit",
|
|
123
|
+
"subjectRoot": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
|
|
124
|
+
"targetRoot": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
|
|
125
|
+
"attemptKey": "signed-channel.commit/1"
|
|
126
|
+
},
|
|
127
|
+
"idempotency": {
|
|
128
|
+
"scope": "subject-target",
|
|
129
|
+
"duplicate": "return-observed-receipt"
|
|
130
|
+
},
|
|
131
|
+
"retry": {
|
|
132
|
+
"class": "readback",
|
|
133
|
+
"localAttempts": 2,
|
|
134
|
+
"exhausted": "repair-required"
|
|
135
|
+
},
|
|
136
|
+
"evidenceRequirements": [
|
|
137
|
+
"kungfu-buildchain-publication-commit-evidence/v1"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "release.activate",
|
|
142
|
+
"executor": "provider-adapter",
|
|
143
|
+
"adapter": "site-release-activation",
|
|
144
|
+
"artifactRoles": [
|
|
145
|
+
{
|
|
146
|
+
"role": "activation-receipt-set",
|
|
147
|
+
"root": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"destination": {
|
|
151
|
+
"kind": "production-site",
|
|
152
|
+
"locator": "https://kungfu.tech/.well-known/kungfu-release-status.json"
|
|
153
|
+
},
|
|
154
|
+
"channelPolicy": {
|
|
155
|
+
"channel": "alpha",
|
|
156
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
157
|
+
"authorityMove": "verified-ref"
|
|
158
|
+
},
|
|
159
|
+
"activationPolicy": {
|
|
160
|
+
"mode": "receipt-set",
|
|
161
|
+
"environment": "production"
|
|
162
|
+
},
|
|
163
|
+
"readbackPredicates": [
|
|
164
|
+
{
|
|
165
|
+
"id": "release-status-current",
|
|
166
|
+
"kind": "public-json",
|
|
167
|
+
"expected": "source, site source, version, tag, channel, and Passport roots match"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "installable-product-qualified",
|
|
171
|
+
"kind": "public-product-qualification",
|
|
172
|
+
"expected": "a public qualification asset matches an admitted artifact root"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"effect": {
|
|
176
|
+
"kind": "release-activation",
|
|
177
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
178
|
+
},
|
|
179
|
+
"observation": {
|
|
180
|
+
"kind": "production-readback",
|
|
181
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
182
|
+
},
|
|
183
|
+
"receipt": {
|
|
184
|
+
"kind": "activation-receipt-set",
|
|
185
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
186
|
+
},
|
|
187
|
+
"operationIdentity": {
|
|
188
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
189
|
+
"capabilityId": "release.activate",
|
|
190
|
+
"subjectRoot": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
191
|
+
"targetRoot": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
192
|
+
"attemptKey": "release.activate/1"
|
|
193
|
+
},
|
|
194
|
+
"idempotency": {
|
|
195
|
+
"scope": "operation",
|
|
196
|
+
"duplicate": "readback-before-retry"
|
|
197
|
+
},
|
|
198
|
+
"retry": {
|
|
199
|
+
"class": "provider-transient",
|
|
200
|
+
"localAttempts": 2,
|
|
201
|
+
"exhausted": "blocked"
|
|
202
|
+
},
|
|
203
|
+
"evidenceRequirements": [
|
|
204
|
+
"kungfu-buildchain-release-activation-receipt-set/v1",
|
|
205
|
+
"kungfu.release-public-readback/v1",
|
|
206
|
+
"kungfu.cli-installed-product-qualification/v1"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"id": "released-evidence.synthesize",
|
|
211
|
+
"executor": "buildchain-core",
|
|
212
|
+
"adapter": "activation-receipt-projector",
|
|
213
|
+
"artifactRoles": [
|
|
214
|
+
{
|
|
215
|
+
"role": "activation-receipt-set",
|
|
216
|
+
"root": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
|
217
|
+
}
|
|
218
|
+
],
|
|
219
|
+
"destination": {
|
|
220
|
+
"kind": "release-passport-attachment",
|
|
221
|
+
"locator": ".buildchain/release-evidence/ungfu-public-use.json"
|
|
222
|
+
},
|
|
223
|
+
"channelPolicy": {
|
|
224
|
+
"channel": "alpha",
|
|
225
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
226
|
+
"authorityMove": "none"
|
|
227
|
+
},
|
|
228
|
+
"activationPolicy": {
|
|
229
|
+
"mode": "receipt-only",
|
|
230
|
+
"environment": "production"
|
|
231
|
+
},
|
|
232
|
+
"readbackPredicates": [
|
|
233
|
+
{
|
|
234
|
+
"id": "five-canonical-receipts",
|
|
235
|
+
"kind": "rooted-receipt-set",
|
|
236
|
+
"expected": "artifact, Passport, site, public readback, and product qualification receipts share one binding root"
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"effect": {
|
|
240
|
+
"kind": "released-evidence-projection",
|
|
241
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
242
|
+
},
|
|
243
|
+
"observation": {
|
|
244
|
+
"kind": "released-evidence-validation",
|
|
245
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
246
|
+
},
|
|
247
|
+
"receipt": {
|
|
248
|
+
"kind": "released-evidence",
|
|
249
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
250
|
+
},
|
|
251
|
+
"operationIdentity": {
|
|
252
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
253
|
+
"capabilityId": "released-evidence.synthesize",
|
|
254
|
+
"subjectRoot": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
255
|
+
"targetRoot": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
256
|
+
"attemptKey": "released-evidence.synthesize/1"
|
|
257
|
+
},
|
|
258
|
+
"idempotency": {
|
|
259
|
+
"scope": "operation",
|
|
260
|
+
"duplicate": "return-observed-receipt"
|
|
261
|
+
},
|
|
262
|
+
"retry": {
|
|
263
|
+
"class": "never",
|
|
264
|
+
"localAttempts": 0,
|
|
265
|
+
"exhausted": "terminal-failure"
|
|
266
|
+
},
|
|
267
|
+
"evidenceRequirements": [
|
|
268
|
+
"kungfu-buildchain-release-activation-receipt-set/v1",
|
|
269
|
+
"kungfu-ungfu-release-evidence-index"
|
|
270
|
+
]
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://buildchain.kungfu.ai/contracts/publication-rehearsal-capsule-v1.schema.json",
|
|
4
|
+
"title": "Buildchain publication rehearsal capsule",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"contract",
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"root",
|
|
11
|
+
"declaration",
|
|
12
|
+
"policyRoots",
|
|
13
|
+
"passport",
|
|
14
|
+
"transaction",
|
|
15
|
+
"files",
|
|
16
|
+
"providerBindings",
|
|
17
|
+
"providerObservations",
|
|
18
|
+
"runtime"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"contract": {
|
|
22
|
+
"const": "kungfu.buildchain.publication-rehearsal-capsule/v1"
|
|
23
|
+
},
|
|
24
|
+
"schemaVersion": { "const": 1 },
|
|
25
|
+
"root": { "$ref": "#/$defs/root" },
|
|
26
|
+
"declaration": {
|
|
27
|
+
"$ref": "release-tail-capabilities-v1.schema.json"
|
|
28
|
+
},
|
|
29
|
+
"policyRoots": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"minItems": 1,
|
|
32
|
+
"uniqueItems": true,
|
|
33
|
+
"items": { "$ref": "#/$defs/root" }
|
|
34
|
+
},
|
|
35
|
+
"passport": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": ["path", "root"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"path": { "$ref": "#/$defs/path" },
|
|
41
|
+
"root": { "$ref": "#/$defs/root" }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"transaction": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"required": [
|
|
47
|
+
"schema",
|
|
48
|
+
"transactionPolicy",
|
|
49
|
+
"transactionRoot",
|
|
50
|
+
"declarationRoot",
|
|
51
|
+
"planRoot",
|
|
52
|
+
"subject",
|
|
53
|
+
"state",
|
|
54
|
+
"operationOrder",
|
|
55
|
+
"operations",
|
|
56
|
+
"observations",
|
|
57
|
+
"receipts",
|
|
58
|
+
"failure",
|
|
59
|
+
"stateRoot"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"files": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"minItems": 1,
|
|
65
|
+
"items": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": ["role", "path", "size", "root"],
|
|
69
|
+
"properties": {
|
|
70
|
+
"role": { "type": "string", "minLength": 1 },
|
|
71
|
+
"path": { "$ref": "#/$defs/path" },
|
|
72
|
+
"size": { "type": "integer", "minimum": 0 },
|
|
73
|
+
"root": { "$ref": "#/$defs/root" }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"providerBindings": {
|
|
78
|
+
"$ref": "release-tail-provider-bindings-v1.schema.json"
|
|
79
|
+
},
|
|
80
|
+
"providerObservations": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": false,
|
|
85
|
+
"required": ["operationId", "readbacks", "apply"],
|
|
86
|
+
"properties": {
|
|
87
|
+
"operationId": { "$ref": "#/$defs/root" },
|
|
88
|
+
"readbacks": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"minItems": 1,
|
|
91
|
+
"items": { "$ref": "#/$defs/observation" }
|
|
92
|
+
},
|
|
93
|
+
"apply": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["outcome", "code", "classification"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"outcome": {
|
|
99
|
+
"enum": ["applied", "transient", "conflict"]
|
|
100
|
+
},
|
|
101
|
+
"code": { "type": "string", "minLength": 1 },
|
|
102
|
+
"classification": { "type": "string", "minLength": 1 }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"runtime": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"required": ["platform", "declaredEnvironment", "externalEffects"],
|
|
112
|
+
"properties": {
|
|
113
|
+
"platform": { "const": "portable" },
|
|
114
|
+
"declaredEnvironment": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"uniqueItems": true,
|
|
117
|
+
"items": { "type": "string", "pattern": "^[A-Z][A-Z0-9_]*$" }
|
|
118
|
+
},
|
|
119
|
+
"externalEffects": {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"items": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"additionalProperties": false,
|
|
124
|
+
"required": ["capabilityId", "adapter", "kind"],
|
|
125
|
+
"properties": {
|
|
126
|
+
"capabilityId": { "type": "string", "minLength": 1 },
|
|
127
|
+
"adapter": { "type": "string", "minLength": 1 },
|
|
128
|
+
"kind": { "type": "string", "minLength": 1 }
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"$defs": {
|
|
136
|
+
"root": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
139
|
+
},
|
|
140
|
+
"path": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"minLength": 1,
|
|
143
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)(?!.*\\\\).+$"
|
|
144
|
+
},
|
|
145
|
+
"observation": {
|
|
146
|
+
"type": "object",
|
|
147
|
+
"additionalProperties": false,
|
|
148
|
+
"required": [
|
|
149
|
+
"outcome",
|
|
150
|
+
"subjectRoot",
|
|
151
|
+
"targetRoot",
|
|
152
|
+
"evidenceRoots",
|
|
153
|
+
"providerCode"
|
|
154
|
+
],
|
|
155
|
+
"properties": {
|
|
156
|
+
"outcome": {
|
|
157
|
+
"enum": ["observed", "absent", "transient", "conflict"]
|
|
158
|
+
},
|
|
159
|
+
"subjectRoot": {
|
|
160
|
+
"anyOf": [{ "$ref": "#/$defs/root" }, { "const": "" }]
|
|
161
|
+
},
|
|
162
|
+
"targetRoot": {
|
|
163
|
+
"anyOf": [{ "$ref": "#/$defs/root" }, { "const": "" }]
|
|
164
|
+
},
|
|
165
|
+
"evidenceRoots": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": { "$ref": "#/$defs/root" }
|
|
168
|
+
},
|
|
169
|
+
"providerCode": { "type": "string", "minLength": 1 }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|