@kungfu-tech/buildchain 3.0.6 → 3.0.7-alpha.1

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.
Files changed (103) hide show
  1. package/README.md +4 -2
  2. package/actions/promote-buildchain-ref/README.md +10 -0
  3. package/actions/release-tail/README.md +17 -0
  4. package/bin/buildchain.mjs +11 -0
  5. package/bin/internal/command-registry.mjs +2 -0
  6. package/contracts/auditable-demo-scenario-v1.schema.json +1 -1
  7. package/contracts/engineering-housekeeper-v1.schema.json +143 -0
  8. package/contracts/fixtures/engineering-housekeeper-v1/cases.json +68 -0
  9. package/contracts/fixtures/release-tail-capabilities-v1/kungfu-alpha.json +273 -0
  10. package/contracts/publication-rehearsal-capsule-v1.schema.json +173 -0
  11. package/contracts/release-tail-capabilities-v1.schema.json +199 -0
  12. package/contracts/release-tail-provider-bindings-v1.schema.json +56 -0
  13. package/dist/site/agent-index.json +3 -0
  14. package/dist/site/artifact-schemas.json +6 -0
  15. package/dist/site/buildchain-contract.json +42 -27
  16. package/dist/site/buildchain-site.json +384 -33
  17. package/dist/site/capability-registry.json +15 -12
  18. package/dist/site/cli-registry.json +102 -0
  19. package/dist/site/controller-registry.json +19 -3
  20. package/dist/site/kfd-claims.json +359 -17
  21. package/dist/site/kfd-upstream-aggregate.json +1 -1
  22. package/dist/site/manual-registry.json +53 -7
  23. package/dist/site/node-api-registry.json +5882 -3605
  24. package/dist/site/page-registry.json +348 -21
  25. package/dist/site/public-surface-audit.json +396 -16
  26. package/dist/site/publication-authority-registry.json +106 -1
  27. package/dist/site/publication-registry.json +4 -4
  28. package/dist/site/release-provenance.json +7 -0
  29. package/dist/site/schemas/publication-rehearsal-capsule-v1.schema.json +269 -0
  30. package/dist/site/schemas/release-tail-capabilities-v1.schema.json +353 -0
  31. package/dist/site/schemas/release-tail-provider-bindings-v1.schema.json +94 -0
  32. package/dist/site/site-manifest.json +35 -11
  33. package/dist/site/workflow-registry.json +204 -10
  34. package/docs/MAP.md +6 -2
  35. package/docs/auditable-demo.md +2 -2
  36. package/docs/cli-reference.md +136 -0
  37. package/docs/dev-delivery-warrant.md +49 -4
  38. package/docs/engineering-housekeeper.md +138 -0
  39. package/docs/lifecycle-protocol.md +4 -2
  40. package/docs/node-api-reference.md +495 -281
  41. package/docs/publication-rehearsal.md +94 -0
  42. package/docs/release-governance.md +17 -2
  43. package/docs/release-tail-contract.md +160 -0
  44. package/docs/release-tail-provider-plane.md +120 -0
  45. package/docs/reusable-build-surface.md +11 -0
  46. package/package.json +11 -3
  47. package/packages/core/artifact-signing.js +61 -0
  48. package/packages/core/buildchain-agent-manuals.js +3 -0
  49. package/packages/core/buildchain-config.js +66 -6
  50. package/packages/core/buildchain-kfd-claims.js +1 -1
  51. package/packages/core/buildchain-publication-authority.js +5 -0
  52. package/packages/core/controller-evidence.js +2 -1
  53. package/packages/core/dev-delivery-warrant-cancellation.js +1 -0
  54. package/packages/core/dev-delivery-warrant-shadow.js +502 -0
  55. package/packages/core/dev-delivery-warrant.js +15 -6
  56. package/packages/core/diagnostics.js +8 -3
  57. package/packages/core/engineering-housekeeper-github-client.js +222 -0
  58. package/packages/core/engineering-housekeeper-github.js +501 -0
  59. package/packages/core/engineering-housekeeper.js +259 -0
  60. package/packages/core/index.js +42 -0
  61. package/packages/core/kfd-gate.js +45 -15
  62. package/packages/core/paper-agent-entry.js +11 -5
  63. package/packages/core/paper-repository.js +1 -0
  64. package/packages/core/paper-scaffold-content.js +21 -0
  65. package/packages/core/paper.js +28 -2
  66. package/packages/core/publication-rehearsal-projection.js +173 -0
  67. package/packages/core/publication-rehearsal-runtime.js +921 -0
  68. package/packages/core/release-passport.js +130 -20
  69. package/packages/core/release-tail-compatibility.js +60 -0
  70. package/packages/core/release-tail-provider-adapters.js +461 -0
  71. package/packages/core/release-tail-provider-plane.js +1228 -0
  72. package/scripts/assemble-publication-artifact-admission.mjs +1 -1
  73. package/scripts/assemble-self-publication-admission.mjs +2 -2
  74. package/scripts/audit-publication-control-plane.mjs +1 -1
  75. package/scripts/auditable-demo-bundle-verification.mjs +2 -3
  76. package/scripts/auditable-demo-platform.mjs +2 -2
  77. package/scripts/auditable-demo-renditions.mjs +1 -1
  78. package/scripts/auditable-demo.mjs +2 -2
  79. package/scripts/build-contract-core.mjs +8 -3
  80. package/scripts/build-standalone-binary.mjs +14 -3
  81. package/scripts/buildchain-cli-help.mjs +13 -0
  82. package/scripts/check-core-mechanism-inventory.mjs +347 -0
  83. package/scripts/check-inventory.mjs +10 -8
  84. package/scripts/check-maintainability.mjs +9 -2
  85. package/scripts/check-release-tail-contract.mjs +435 -0
  86. package/scripts/dev-delivery-warrant.mjs +31 -4
  87. package/scripts/dev-pr-auto-merge.mjs +30 -4
  88. package/scripts/dev-pr-delivery-warrant.mjs +50 -0
  89. package/scripts/engineering-housekeeper-workflow.mjs +394 -0
  90. package/scripts/generate-channel-promotion-workflow.mjs +10 -8
  91. package/scripts/generate-site-bundle.mjs +47 -4
  92. package/scripts/init-repo.mjs +26 -2
  93. package/scripts/inspect-artifact-signing-requests.mjs +6 -0
  94. package/scripts/materialize-self-release-candidate-version.mjs +137 -0
  95. package/scripts/publication-commit-evidence.mjs +69 -23
  96. package/scripts/release-candidate-resolver.mjs +16 -10
  97. package/scripts/release-tail.mjs +159 -0
  98. package/scripts/resume-from-candidate-run.mjs +123 -9
  99. package/scripts/seal-artifact-signing-requests.mjs +6 -0
  100. package/scripts/site-capability-metadata.mjs +13 -0
  101. package/scripts/v4-architecture.mjs +600 -0
  102. package/scripts/web-surface-core.mjs +8 -2
  103. 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 six active entries. Four are
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 list from being mistaken for
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)
@@ -328,6 +328,7 @@ BUILDCHAIN_SEALED_NPM_TARBALL
328
328
  BUILDCHAIN_SEALED_NPM_INTEGRITY
329
329
  BUILDCHAIN_SEALED_NPM_SHA256
330
330
  BUILDCHAIN_REQUIRED_ARTIFACTS
331
+ BUILDCHAIN_PUBLISH_REQUIRED_ARTIFACTS_PATH
331
332
  ```
332
333
 
333
334
  `BUILDCHAIN_REQUIRED_ARTIFACTS` is the normalized requirement array after the
@@ -337,6 +338,10 @@ declared provenance to the current release coordinate. Template expansion
337
338
  happens after exact version selection; ambiguous or unsupported templates fail
338
339
  before `lifecycle.publish`. Requirement descriptors may omit `digest`; final
339
340
  publish evidence may not.
341
+ The action also writes that normalized array to
342
+ `BUILDCHAIN_PUBLISH_REQUIRED_ARTIFACTS_PATH`. To stay below operating-system
343
+ process environment limits, large arrays are available through the file path
344
+ only; small arrays retain the inline variable for compatibility.
340
345
 
341
346
  The action outputs `transaction-id`, `transaction-state`,
342
347
  `transaction-publication-state`, `transaction-sealed-bundle-root`,
@@ -494,6 +499,11 @@ governance semantics:
494
499
  - alpha promotion must come from a merged same-repository PR
495
500
  `dev/vN/vN.M -> alpha/vN/vN.M`, or from a strict same-line
496
501
  `publish-gate/alpha/vN/vN.M/<version> -> alpha/vN/vN.M` source-lock PR;
502
+ an immutable recovery receipt may instead admit the exact current alpha
503
+ channel SHA only when its sealed candidate tree is byte-equivalent and its
504
+ publication version is bound by that receipt; when administrative protection
505
+ details are hidden, the provider-visible protected head and required check
506
+ must still match that exact recovered SHA;
497
507
  - release promotion must come from a merged same-repository PR
498
508
  `alpha/vN/vN.M -> release/vN/vN.M`, or from a strict same-line
499
509
  `publish-gate/release/vN/vN.M/<version> -> release/vN/vN.M` source-lock PR;
@@ -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.
@@ -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) {
@@ -112,7 +112,7 @@
112
112
  "renditions": {
113
113
  "const": [
114
114
  {"id": "1080p", "role": "primary", "columns": 150, "rows": 36, "width": 1920, "height": 1080},
115
- {"id": "720p", "role": "responsive", "columns": 100, "rows": 28, "width": 1280, "height": 720}
115
+ {"id": "720p", "role": "responsive", "columns": 150, "rows": 28, "width": 1280, "height": 720}
116
116
  ]
117
117
  },
118
118
  "demos": {
@@ -0,0 +1,143 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://buildchain.kungfu.ai/contracts/engineering-housekeeper-v1.schema.json",
4
+ "title": "Buildchain Engineering Housekeeper contract",
5
+ "oneOf": [{ "$ref": "#/$defs/plan" }, { "$ref": "#/$defs/receipt" }],
6
+ "$defs": {
7
+ "root": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
8
+ "oid": { "type": "string", "pattern": "^[0-9a-f]{40,64}$" },
9
+ "target": {
10
+ "type": "object",
11
+ "required": ["name", "headOid"],
12
+ "properties": {
13
+ "name": { "type": "string", "minLength": 1 },
14
+ "headOid": { "$ref": "#/$defs/oid" }
15
+ },
16
+ "additionalProperties": false
17
+ },
18
+ "policy": {
19
+ "type": "object",
20
+ "required": ["protectedPatterns", "retainedPatterns", "pullRequests"],
21
+ "properties": {
22
+ "protectedPatterns": {
23
+ "type": "array",
24
+ "items": { "type": "string" },
25
+ "uniqueItems": true
26
+ },
27
+ "retainedPatterns": {
28
+ "type": "array",
29
+ "items": { "type": "string" },
30
+ "uniqueItems": true
31
+ },
32
+ "pullRequests": {
33
+ "type": "object",
34
+ "required": ["reportStale", "label", "autoClose"],
35
+ "properties": {
36
+ "reportStale": { "type": "boolean" },
37
+ "label": { "type": "string" },
38
+ "autoClose": { "const": false }
39
+ },
40
+ "additionalProperties": false
41
+ }
42
+ },
43
+ "additionalProperties": false
44
+ },
45
+ "inventory": {
46
+ "type": "object",
47
+ "required": ["kind", "repository", "headOid", "reasonCodes"],
48
+ "properties": {
49
+ "kind": { "enum": ["branch", "pull-request"] },
50
+ "repository": { "type": "string", "pattern": "^[^/]+/[^/]+$" },
51
+ "name": { "type": "string" },
52
+ "number": { "type": "integer", "minimum": 1 },
53
+ "headRepository": { "type": "string" },
54
+ "headRef": { "type": "string" },
55
+ "headOid": { "$ref": "#/$defs/oid" },
56
+ "target": { "$ref": "#/$defs/target" },
57
+ "eligible": { "type": "boolean" },
58
+ "decision": { "enum": ["delete", "retain"] },
59
+ "state": { "enum": ["open", "draft", "closed", "merged"] },
60
+ "actions": {
61
+ "type": "array",
62
+ "items": { "enum": ["report", "label"] },
63
+ "uniqueItems": true
64
+ },
65
+ "reasonCodes": {
66
+ "type": "array",
67
+ "minItems": 1,
68
+ "items": { "type": "string" },
69
+ "uniqueItems": true
70
+ }
71
+ },
72
+ "additionalProperties": false
73
+ },
74
+ "action": {
75
+ "type": "object",
76
+ "required": ["kind"],
77
+ "properties": {
78
+ "kind": {
79
+ "enum": ["delete-branch", "report-pull-request", "label-pull-request"]
80
+ },
81
+ "name": { "type": "string", "minLength": 1 },
82
+ "number": { "type": "integer", "minimum": 1 },
83
+ "expectedHeadOid": { "$ref": "#/$defs/oid" },
84
+ "targetName": { "type": "string", "minLength": 1 },
85
+ "expectedTargetHeadOid": { "$ref": "#/$defs/oid" }
86
+ },
87
+ "additionalProperties": false
88
+ },
89
+ "plan": {
90
+ "type": "object",
91
+ "required": [
92
+ "contract",
93
+ "schemaVersion",
94
+ "mode",
95
+ "repository",
96
+ "target",
97
+ "observedAt",
98
+ "policy",
99
+ "inventory",
100
+ "actions",
101
+ "planRoot"
102
+ ],
103
+ "properties": {
104
+ "contract": { "const": "kungfu-buildchain-engineering-housekeeper/v1" },
105
+ "schemaVersion": { "const": 1 },
106
+ "mode": { "const": "plan" },
107
+ "repository": { "type": "string", "pattern": "^[^/]+/[^/]+$" },
108
+ "target": { "$ref": "#/$defs/target" },
109
+ "observedAt": { "type": "string", "format": "date-time" },
110
+ "policy": { "$ref": "#/$defs/policy" },
111
+ "inventory": {
112
+ "type": "array",
113
+ "items": { "$ref": "#/$defs/inventory" }
114
+ },
115
+ "actions": { "type": "array", "items": { "$ref": "#/$defs/action" } },
116
+ "planRoot": { "$ref": "#/$defs/root" }
117
+ },
118
+ "additionalProperties": false
119
+ },
120
+ "receipt": {
121
+ "type": "object",
122
+ "required": [
123
+ "contract",
124
+ "schemaVersion",
125
+ "mode",
126
+ "planRoot",
127
+ "appliedAt",
128
+ "outcomes",
129
+ "receiptRoot"
130
+ ],
131
+ "properties": {
132
+ "contract": { "const": "kungfu-buildchain-engineering-housekeeper/v1" },
133
+ "schemaVersion": { "const": 1 },
134
+ "mode": { "const": "receipt" },
135
+ "planRoot": { "$ref": "#/$defs/root" },
136
+ "appliedAt": { "type": "string", "format": "date-time" },
137
+ "outcomes": { "type": "array", "items": { "type": "object" } },
138
+ "receiptRoot": { "$ref": "#/$defs/root" }
139
+ },
140
+ "additionalProperties": false
141
+ }
142
+ }
143
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "contract": "kungfu-buildchain-engineering-housekeeper-fixtures/v1",
3
+ "cases": [
4
+ {
5
+ "id": "active",
6
+ "branch": {
7
+ "name": "feature/active",
8
+ "ancestry": "ancestor",
9
+ "openPullRequestNumbers": [11]
10
+ },
11
+ "eligible": false,
12
+ "reason": "branch.open-pr-head"
13
+ },
14
+ {
15
+ "id": "merged",
16
+ "branch": {
17
+ "name": "feature/merged",
18
+ "ancestry": "ancestor",
19
+ "openPullRequestNumbers": []
20
+ },
21
+ "eligible": true,
22
+ "reason": "eligible.merged-branch"
23
+ },
24
+ {
25
+ "id": "stale",
26
+ "branch": {
27
+ "name": "feature/stale",
28
+ "ancestry": "diverged",
29
+ "openPullRequestNumbers": []
30
+ },
31
+ "eligible": false,
32
+ "reason": "branch.not-merged"
33
+ },
34
+ {
35
+ "id": "advanced",
36
+ "revalidation": "head",
37
+ "reason": "branch.head-advanced"
38
+ },
39
+ { "id": "renamed", "revalidation": "name", "reason": "branch.renamed" },
40
+ {
41
+ "id": "protected",
42
+ "branch": {
43
+ "name": "dev/v3/v3.0",
44
+ "ancestry": "ancestor",
45
+ "openPullRequestNumbers": []
46
+ },
47
+ "eligible": false,
48
+ "reason": "branch.protected"
49
+ },
50
+ {
51
+ "id": "forked",
52
+ "branch": {
53
+ "name": "feature/forked",
54
+ "ancestry": "ancestor",
55
+ "openPullRequestNumbers": [],
56
+ "sourceRepository": "fork/buildchain"
57
+ },
58
+ "eligible": false,
59
+ "reason": "branch.cross-repository"
60
+ },
61
+ {
62
+ "id": "permission-denied",
63
+ "outcome": "denied",
64
+ "reason": "branch.permission-denied"
65
+ },
66
+ { "id": "repeated", "replay": true, "reason": "replay.already-applied" }
67
+ ]
68
+ }
@@ -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
+ }