@kungfu-tech/buildchain 4.0.1-alpha.3 → 4.0.1-alpha.5

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