@kungfu-tech/buildchain 3.0.9-alpha.1 → 3.0.9-alpha.10

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 (100) hide show
  1. package/bin/buildchain.mjs +9 -1
  2. package/contracts/dev-delivery-authority-v2.schema.json +253 -0
  3. package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +47 -0
  4. package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +47 -0
  5. package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +40 -0
  6. package/contracts/next-development-request-v1.schema.json +66 -0
  7. package/contracts/next-development-transition-v1.schema.json +292 -0
  8. package/dist/site/agent-index.json +1 -0
  9. package/dist/site/artifact-schemas.json +2 -0
  10. package/dist/site/buildchain-contract.json +74 -14
  11. package/dist/site/buildchain-site.json +334 -36
  12. package/dist/site/capability-registry.json +7 -6
  13. package/dist/site/cli-registry.json +41 -2
  14. package/dist/site/kfd-claims.json +193 -9
  15. package/dist/site/kfd-upstream-aggregate.json +9 -9
  16. package/dist/site/manual-registry.json +23 -7
  17. package/dist/site/node-api-registry.json +7789 -4648
  18. package/dist/site/page-registry.json +315 -25
  19. package/dist/site/public-surface-audit.json +353 -8
  20. package/dist/site/publication-registry.json +4 -4
  21. package/dist/site/release-passport-check-manifest.json +1 -0
  22. package/dist/site/release-provenance.json +12 -0
  23. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +442 -0
  24. package/dist/site/schemas/release-passport-v1.schema.json +3 -0
  25. package/dist/site/site-manifest.json +19 -11
  26. package/dist/site/workflow-registry.json +15 -7
  27. package/docs/MAP.md +5 -2
  28. package/docs/adopter-delivery-gate.md +106 -0
  29. package/docs/aws-us-elastic-runner-burst-plane.md +30 -3
  30. package/docs/cli-reference.md +200 -13
  31. package/docs/dev-alpha-candidate-patrol.md +8 -0
  32. package/docs/dev-delivery-qualification-landing-adr.md +137 -0
  33. package/docs/dev-delivery-warrant.md +149 -22
  34. package/docs/kfd-support.md +7 -2
  35. package/docs/next-development-transition.md +119 -0
  36. package/docs/node-api-reference.md +381 -204
  37. package/docs/release-governance.md +10 -7
  38. package/docs/release-passport.md +8 -2
  39. package/docs/versioning.md +4 -1
  40. package/package.json +21 -6
  41. package/packages/core/README.md +25 -0
  42. package/packages/core/adopter-delivery-gate.js +576 -0
  43. package/packages/core/adopter-delivery-json.js +66 -0
  44. package/packages/core/adopter-delivery-passport.js +259 -0
  45. package/packages/core/adopter-delivery-vectors.js +158 -0
  46. package/packages/core/adopter-delivery-vectors.json +77 -0
  47. package/packages/core/artifact-verification-envelope.js +5 -5
  48. package/packages/core/buildchain-agent-manuals.js +1 -0
  49. package/packages/core/buildchain-channel-identity.js +2 -3
  50. package/packages/core/buildchain-compatibility-proof.js +22 -0
  51. package/packages/core/buildchain-delivery-bootstrap.js +240 -0
  52. package/packages/core/buildchain-delivery-infrastructure.js +164 -0
  53. package/packages/core/channel-candidate.js +8 -0
  54. package/packages/core/channel-promotion-baseline.js +52 -0
  55. package/packages/core/dev-alpha-candidate-selection.js +10 -2
  56. package/packages/core/dev-delivery-authority.js +996 -0
  57. package/packages/core/dev-delivery-native-proof.js +418 -0
  58. package/packages/core/dev-delivery-warrant-settlement.js +67 -20
  59. package/packages/core/dev-delivery-warrant.js +128 -46
  60. package/packages/core/kfd-adopter-category-driver.js +167 -0
  61. package/packages/core/kfd-adopter-manifest.js +49 -50
  62. package/packages/core/legacy-kfd-adopter-driver.js +167 -0
  63. package/packages/core/next-development-candidate-reservation.js +186 -0
  64. package/packages/core/next-development-controller.js +726 -0
  65. package/packages/core/next-development-projection.js +288 -0
  66. package/packages/core/next-development-transition.js +738 -0
  67. package/packages/core/paper-agent-entry.js +7 -4
  68. package/packages/core/paper.js +14 -7
  69. package/packages/core/release-passport-contract.js +10 -6
  70. package/packages/core/release-passport.js +29 -12
  71. package/scripts/aws-macos-jit-controller-core.mjs +239 -4
  72. package/scripts/aws-macos-jit-controller.mjs +198 -2
  73. package/scripts/aws-macos-jit-instance-rehydrate.mjs +260 -0
  74. package/scripts/aws-macos-jit-source-rebind.mjs +235 -14
  75. package/scripts/aws-macos-jit.mjs +12 -0
  76. package/scripts/buildchain-cli-help.mjs +9 -2
  77. package/scripts/check-internal-architecture.mjs +1 -0
  78. package/scripts/check-inventory.mjs +12 -1
  79. package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
  80. package/scripts/dev-delivery-authority.mjs +368 -0
  81. package/scripts/dev-delivery-native-run.mjs +235 -0
  82. package/scripts/dev-delivery-proof.mjs +64 -2
  83. package/scripts/dev-delivery-two-phase-resume.mjs +90 -0
  84. package/scripts/dev-delivery-two-phase.mjs +577 -0
  85. package/scripts/dev-delivery-warrant.mjs +47 -5
  86. package/scripts/dev-pr-delivery-warrant.mjs +19 -14
  87. package/scripts/generate-buildchain-kfd-witnesses.mjs +2 -2
  88. package/scripts/generate-channel-build-workflow.mjs +4 -0
  89. package/scripts/generate-next-development-guidance.mjs +49 -0
  90. package/scripts/generate-site-bundle.mjs +8 -3
  91. package/scripts/init-repo.mjs +135 -62
  92. package/scripts/next-development-self-dogfood-harness.mjs +409 -0
  93. package/scripts/next-development-self-dogfood.mjs +532 -0
  94. package/scripts/next-development-transition.mjs +47 -0
  95. package/scripts/release-candidate-tail-reseal.mjs +426 -0
  96. package/scripts/seal-artifact-signing-requests.mjs +7 -4
  97. package/scripts/site-capability-metadata.mjs +23 -1
  98. package/scripts/stable-candidate-qualification.mjs +7 -7
  99. package/scripts/workflow-call-contract.mjs +1 -1
  100. package/templates/native-dev-delivery.yml +86 -0
package/docs/MAP.md CHANGED
@@ -59,14 +59,14 @@ workflow, action, and Node API export also carries a `capabilityGroup`,
59
59
  | Capability group | Primary facts | Primary manuals |
60
60
  | --- | --- | --- |
61
61
  | Getting Started | `capability-registry.json`, `product-mechanism.json` | [`getting-started.md`](getting-started.md), [`install.md`](install.md), [`product-mechanism.md`](product-mechanism.md), [`cli.md`](cli.md) |
62
- | Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`github-artifact-attestation.md`](github-artifact-attestation.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`release-train.md`](release-train.md), [`publish-transaction.md`](publish-transaction.md), [`release-tail-contract.md`](release-tail-contract.md), [`publication-rehearsal.md`](publication-rehearsal.md), [`binary-distribution.md`](binary-distribution.md) |
62
+ | Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`adopter-delivery-gate.md`](adopter-delivery-gate.md), [`github-artifact-attestation.md`](github-artifact-attestation.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`release-train.md`](release-train.md), [`publish-transaction.md`](publish-transaction.md), [`release-tail-contract.md`](release-tail-contract.md), [`publication-rehearsal.md`](publication-rehearsal.md), [`binary-distribution.md`](binary-distribution.md) |
63
63
  | Reusable Build and Lifecycle | `workflow-registry.json`, `controller-registry.json`, `release-model.json` | [`reusable-build-surface.md`](reusable-build-surface.md), [`controller-evidence.md`](controller-evidence.md), [`shifu-gate-profiles.md`](shifu-gate-profiles.md), [`lifecycle-protocol.md`](lifecycle-protocol.md) |
64
64
  | KFD Trust and Surface Closure | `kfd-claims.json`, `public-surface-audit.json`, `cli-registry.json`, `node-api-registry.json` | [`kfd-support.md`](kfd-support.md), [`release-passport.md`](release-passport.md) |
65
65
  | Site Bundle, Web Surfaces, and Propagation | `buildchain-site.json`, `site-manifest.json`, `page-registry.json`, `release-model.json` | [`site-bundle-contract.md`](site-bundle-contract.md), [`web-surface-deployments.md`](web-surface-deployments.md), [`release-propagation.md`](release-propagation.md) |
66
66
  | Publication Artifacts | `publication-registry.json`, `workflow-registry.json`, `node-api-registry.json`, `manual-registry.json`, `kungfu-buildchain-publication-artifact-registry` | [`publication-artifacts.md`](publication-artifacts.md), [`reusable-build-surface.md`](reusable-build-surface.md) |
67
67
  | Distribution Indexes and Badges | `badge-endpoint-registry.json`, `node-api-registry.json`, `manual-registry.json` | [`readme-badges.md`](readme-badges.md), [`homebrew.md`](homebrew.md) |
68
68
  | Build Facts, Observability, and Diagnostics | `cli-registry.json`, `node-api-registry.json`, lifecycle artifacts | [`build-facts.md`](build-facts.md), [`toolkit-observability.md`](toolkit-observability.md), [`consumer-issue-reporting.md`](consumer-issue-reporting.md) |
69
- | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
69
+ | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`next-development-transition.md`](next-development-transition.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
70
70
  | CLI and Node API Reference | `cli-registry.json`, `node-api-registry.json`, `workflow-registry.json`, `manual-registry.json` | [`cli-reference.md`](cli-reference.md), [`node-api-reference.md`](node-api-reference.md), [`cli.md`](cli.md), [`../packages/core/README.md`](../packages/core/README.md) |
71
71
 
72
72
  | Capability | Machine-readable entry | Manual entry |
@@ -107,6 +107,7 @@ replace them.
107
107
  | How do I install a standalone binary or npm package? | [`install.md`](install.md) | use | stable |
108
108
  | How do I run or look up the `buildchain` CLI? | [`cli-reference.md`](cli-reference.md) + [`cli.md`](cli.md) | use | stable |
109
109
  | How do I import Buildchain toolkit APIs from JavaScript build code? | [`node-api-reference.md`](node-api-reference.md) + [`../packages/core/README.md`](../packages/core/README.md) | use | stable |
110
+ | How are bounded Qualification Leases separated from exclusive merge-group Landing authority? | [`dev-delivery-qualification-landing-adr.md`](dev-delivery-qualification-landing-adr.md) + [`dev-delivery-warrant.md`](dev-delivery-warrant.md) | govern | accepted |
110
111
  | How do I initialize a new repository? | [`getting-started.md`](getting-started.md) + [`lifecycle-protocol.md`](lifecycle-protocol.md) | use | stable |
111
112
  | Why does Buildchain use branch-driven release governance? | [`release-governance.md`](release-governance.md) | why | stable |
112
113
  | What freezes the v4 dependency direction, writer authority, complexity budgets, exceptions, and N-1 qualification? | [`../architecture/v4-architecture-constitution.md`](../architecture/v4-architecture-constitution.md) | why/verify | preview |
@@ -118,6 +119,7 @@ replace them.
118
119
  | How do I report or safely apply branch and pull-request engineering hygiene? | [`engineering-housekeeper.md`](engineering-housekeeper.md) | use/verify | preview |
119
120
  | How does Buildchain decide patch, minor, and major release lines? | [`versioning.md`](versioning.md) | why | stable |
120
121
  | What exact branch/tag state machine runs on alpha, release, and major gate? | [`release-flow.md`](release-flow.md) | verify | stable |
122
+ | How does a completed Alpha remain successful while the following development version is prepared? | [`next-development-transition.md`](next-development-transition.md), [`../architecture/decisions/0002-next-development-transition.md`](../architecture/decisions/0002-next-development-transition.md) | verify/use | preview |
121
123
  | What did Buildchain migrate or retire from old action repositories? | [`migration-inventory.md`](migration-inventory.md) | verify | stable |
122
124
  | What is the active action and workflow source of truth? | [`ownership.md`](ownership.md) | verify | stable |
123
125
  | How do I declare version files and custom lifecycle commands? | [`lifecycle-protocol.md`](lifecycle-protocol.md) | use | stable |
@@ -127,6 +129,7 @@ replace them.
127
129
  | How do I collect and verify module/product build facts from Git source, version files, and outputs? | [`build-facts.md`](build-facts.md) + [`cli.md`](cli.md) | use/verify | stable |
128
130
  | How do I publish or verify release passport artifacts? | [`release-passport.md`](release-passport.md) | use | stable |
129
131
  | How do I keylessly attest Linux release artifacts with GitHub and bind them to a Release Passport? | [`github-artifact-attestation.md`](github-artifact-attestation.md) | verify/use | preview |
132
+ | How do I evaluate one project instance through an exact protocol driver and artifact profile without copying KFD semantics? | [`adopter-delivery-gate.md`](adopter-delivery-gate.md) | use/verify | preview |
130
133
  | How do I request detached, Developer ID, or Authenticode signing without consumer credentials? | [`reusable-build-surface.md`](reusable-build-surface.md#artifact-signing-authority) | verify/use | preview |
131
134
  | How do I seal exact artifact, identity, lifecycle, and KFD assessment roots for KFX admission? | [`artifact-verification-envelope.md`](artifact-verification-envelope.md) | verify/use | preview |
132
135
  | How is product publication authority sealed to an exact workflow, runner, control plane, nonce, and artifact? | [`publication-authority.md`](publication-authority.md) | verify | preview |
@@ -0,0 +1,106 @@
1
+ ---
2
+ status: active
3
+ period: ongoing
4
+ theme: adopter-delivery-gate
5
+ doc_type: technical-reference
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-12
12
+ ai_provenance:
13
+ model_family: GPT-5
14
+ product: Codex
15
+ generated_at: 2026-08-12
16
+ invisible_context: not asserted
17
+ ---
18
+
19
+ # Adopter Delivery Gate
20
+
21
+ Buildchain exposes one protocol-neutral delivery gate. A caller registers an
22
+ exact semantic protocol driver and an exact artifact profile, then evaluates a
23
+ rooted project instance request. The core does not branch on project identity
24
+ and does not infer KFD semantics.
25
+
26
+ ```js
27
+ import {
28
+ createAdopterDeliveryGate,
29
+ createPackageArtifactProfile,
30
+ } from "@kungfu-tech/buildchain/adopter-delivery-gate";
31
+ import { createKfdAdopterCategoryProtocolDriver } from "@kungfu-tech/buildchain/kfd-adopter-category-driver";
32
+
33
+ const gate = createAdopterDeliveryGate({
34
+ drivers: [createKfdAdopterCategoryProtocolDriver()],
35
+ artifactProfiles: [createPackageArtifactProfile()],
36
+ });
37
+ const result = gate.evaluate(request, {
38
+ adopterManifest,
39
+ verifiedAt: "2026-08-12T00:00:00.000Z",
40
+ maxAgeSeconds: 86400,
41
+ });
42
+ ```
43
+
44
+ The KFD driver consumes only the installed published `@kungfu-tech/kfd`
45
+ category catalog, manifest verifier, resolver and category-instance verifier.
46
+ Caller-supplied catalog overrides are ignored. The legacy driver is a separate
47
+ one-way adapter for the existing standard adopter manifest and support-matrix
48
+ projection; it is not KFD declaration authority.
49
+
50
+ ### Buildchain delivery-infrastructure instance
51
+
52
+ `@kungfu-tech/buildchain/buildchain-delivery-infrastructure` constructs the
53
+ Buildchain-owned project instance for the published
54
+ `kfd.adopter-category/delivery-infrastructure@1.0.0` profile. Callers provide a
55
+ release-bound full-cut adopter manifest plus exact source, package, release, and
56
+ project evidence coordinates. The constructor derives the selected obligation
57
+ set from published KFD bytes and stamps every evidence item with the same
58
+ project, adopter-manifest, package-cut, and category-selection roots.
59
+
60
+ The constructor rejects private or unknown requirement IDs instead of silently
61
+ extending the KFD profile. Verification delegates back to the published KFD
62
+ full-manifest and category-instance verifiers. A passing instance is still a
63
+ declaration-only, non-transferable result: it grants no runtime, publication,
64
+ promotion, or certification authority. Buildchain's anti-circular N-1 release
65
+ qualification remains a separate release gate.
66
+
67
+ ### Buildchain anti-circular bootstrap
68
+
69
+ `@kungfu-tech/buildchain/buildchain-delivery-bootstrap` verifies that one exact
70
+ candidate is supported by a distinct protected and publicly released N-1 cut,
71
+ its passed project gate result, and its merged Delivery Warrant evidence. The
72
+ candidate must name the exact authority version; source or package reuse is
73
+ rejected. Changes to the gate, protocol, or selected profile additionally need
74
+ content-rooted compatibility and independent-review evidence.
75
+
76
+ The result is evidence only. It always retains `qualifying: false`,
77
+ `selfCertified: false`, and `releaseAuthorized: false`; publication and release
78
+ authority remain with the protected delivery and release mechanisms.
79
+
80
+ ## Fail-closed boundaries
81
+
82
+ - Driver and artifact-profile selection require an exact `id@version` match.
83
+ - Package, Git commit and custom immutable artifact kinds use explicit profiles.
84
+ - Unknown fields, malformed roots, non-JSON declarations, driver exceptions,
85
+ ambiguous kinds, stale KFD cuts and substituted evidence fail closed.
86
+ - Every result retains `qualifying: false` and `selfCertified: false`.
87
+ - Category conformance never grants runtime permission, release authorization
88
+ or independent certification.
89
+
90
+ ## Release Passport binding
91
+
92
+ Use `@kungfu-tech/buildchain/adopter-delivery-passport` to create and validate
93
+ the exact binding. Release Passport and artifact evidence must contain the same
94
+ rooted gate closure; neither side may introduce or replace delivery evidence.
95
+
96
+ ## Offline vectors
97
+
98
+ `@kungfu-tech/buildchain/adopter-delivery-vectors` exports the immutable
99
+ `ADOPTER_DELIVERY_VECTOR_SUITE`. Its root binds golden two-driver replay,
100
+ unknown-driver rejection, published-KFD category conflict, evidence
101
+ substitution, stale package cut and driver-fault redaction. Consumers can call
102
+ `validateAdopterDeliveryVectorSuite()` before replay and use
103
+ `getAdopterDeliveryVector()` to select one named case.
104
+
105
+ The suite records KFD package and vector subpaths as authority coordinates. It
106
+ does not copy KFD category policy into Buildchain.
@@ -343,6 +343,11 @@ JIT SecureString under `/kungfu/burst/macos/`, then runs GitHub Actions Runner
343
343
  2.336.0 for exactly one job. The runner archive is pinned to the official
344
344
  macOS ARM64 SHA256. No GitHub, signing, notarization, publication, SSH, or
345
345
  static AWS credential is admitted to the instance.
346
+ The provider provenance step explicitly disables artifact-signing request
347
+ sealing for these qualification jobs, so consumer signing declarations cannot
348
+ turn a runner-profile smoke or full qualification into a signing-authority
349
+ dispatch. All other Buildchain lanes retain the default fail-closed signing
350
+ declaration behavior.
346
351
 
347
352
  The instance uses the exact retained Amazon EC2 macOS AMI, IMDSv2, an encrypted
348
353
  delete-on-termination root volume, no inbound security-group rule, and the
@@ -380,7 +385,7 @@ host, including at least one full run, plus proof that:
380
385
  ### Phase 3 lifecycle controller
381
386
 
382
387
  `scripts/aws-macos-jit-controller.mjs` is the operator boundary for the paid
383
- campaign. It has four explicit mutation modes:
388
+ campaign. It has five explicit mutation modes:
384
389
 
385
390
  - `launch-campaign` binds the exact repository source, AMI, availability zone,
386
391
  tagged Dedicated Host, and reusable instance. Before paid allocation it
@@ -390,6 +395,12 @@ campaign. It has four explicit mutation modes:
390
395
  a DryRun parameter for `AllocateHosts`, it requires an allowed IAM policy
391
396
  simulation for the exact tagged allocation before the real call, then a
392
397
  successful `RunInstances` DryRun before launching the instance.
398
+ - `rehydrate-instance` creates a replacement instance on the one already-paid,
399
+ empty campaign host after an interrupted or failed instance lifecycle. It
400
+ rechecks the exact account, disabled workflow, Budget, source, host identity
401
+ and allocation time, zero runner residue, zero active JIT instances, and no
402
+ other active Mac host in either admitted region. It then requires a
403
+ successful same-host `RunInstances` DryRun and never calls `AllocateHosts`.
393
404
  - `run-job` binds one queued exact-source GitHub job to the existing campaign
394
405
  host and instance. It writes the repository JIT configuration through a
395
406
  mode-0600 temporary file into a distinct SSM SecureString, sends only the
@@ -405,6 +416,16 @@ campaign. It has four explicit mutation modes:
405
416
  existing GitHub ref, emits a zero-allocation receipt, and compensates back to
406
417
  the prior source if the ref update or readback fails. It never calls
407
418
  `AllocateHosts`, `RunInstances`, or workflow dispatch.
419
+ - `rebind-campaign-after-failure` advances that same host and instance only
420
+ after the operator confirms the complete prior run-id inventory. Every named
421
+ run must be terminal with conclusion `failure`, all of its jobs must be
422
+ complete, and both GitHub artifacts and S3 bootstrap evidence must still be
423
+ present. The replacement source must remain a strict descendant on the same
424
+ ref, the workflow must be disabled, the next-source evidence prefix must be
425
+ empty, and runner plus SSM residue must be zero. The old evidence is retained
426
+ and included in the rebind receipt; the operation changes only the existing
427
+ source ref and resource tags, with the same compensated rollback and zero
428
+ allocation boundary as an unused-campaign rebind.
408
429
  - `close-campaign` refuses execution before the provider's 24-hour minimum,
409
430
  verifies the encrypted delete-on-termination root volume, removes scoped JIT
410
431
  residue, terminates the exact instance, and requires a `ReleaseHosts` DryRun
@@ -417,8 +438,14 @@ through `--confirm-source-sha` and `--confirm-campaign-id`. `run-job` also
417
438
  requires `--confirm-run-id`; `launch-campaign` additionally requires the
418
439
  expected workload account through `--account-id`. `rebind-campaign`
419
440
  additionally repeats the prior source, host, and instance identities and
420
- requires `--confirm-zero-allocation`. Omitting `--execute` emits a deterministic
421
- plan without changing AWS or GitHub state.
441
+ requires `--confirm-zero-allocation`. `rehydrate-instance` additionally repeats
442
+ the existing host and replaced instance identities and requires
443
+ `--confirm-no-host-allocation`. Omitting `--execute` emits a deterministic plan
444
+ without changing AWS or GitHub state.
445
+ `rebind-campaign-after-failure` additionally requires matching
446
+ `--terminal-failure-run-ids-json` and
447
+ `--confirm-terminal-failure-run-ids-json` arrays so an unobserved or newly
448
+ created run fails closed before any tag or ref mutation.
422
449
 
423
450
  ## Provider lifecycle
424
451
 
@@ -269,6 +269,127 @@ buildchain create runner-provenance --input-json <file-or-json> [--output <file>
269
269
  buildchain dev
270
270
  ```
271
271
 
272
+ ### `buildchain dev authority admit-merge-group`
273
+
274
+ - Help: `buildchain dev authority admit-merge-group --help`
275
+ - Canonical id: `dev`
276
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
277
+ - Syntax:
278
+
279
+ ```text
280
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
281
+ ```
282
+
283
+ ### `buildchain dev authority complete-qualification`
284
+
285
+ - Help: `buildchain dev authority complete-qualification --help`
286
+ - Canonical id: `dev`
287
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
288
+ - Syntax:
289
+
290
+ ```text
291
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
292
+ ```
293
+
294
+ ### `buildchain dev authority heartbeat-landing`
295
+
296
+ - Help: `buildchain dev authority heartbeat-landing --help`
297
+ - Canonical id: `dev`
298
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
299
+ - Syntax:
300
+
301
+ ```text
302
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
303
+ ```
304
+
305
+ ### `buildchain dev authority heartbeat-qualification`
306
+
307
+ - Help: `buildchain dev authority heartbeat-qualification --help`
308
+ - Canonical id: `dev`
309
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
310
+ - Syntax:
311
+
312
+ ```text
313
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
314
+ ```
315
+
316
+ ### `buildchain dev authority lease-landing`
317
+
318
+ - Help: `buildchain dev authority lease-landing --help`
319
+ - Canonical id: `dev`
320
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
321
+ - Syntax:
322
+
323
+ ```text
324
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
325
+ ```
326
+
327
+ ### `buildchain dev authority lease-qualification`
328
+
329
+ - Help: `buildchain dev authority lease-qualification --help`
330
+ - Canonical id: `dev`
331
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
332
+ - Syntax:
333
+
334
+ ```text
335
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
336
+ ```
337
+
338
+ ### `buildchain dev authority migrate`
339
+
340
+ - Help: `buildchain dev authority migrate --help`
341
+ - Canonical id: `dev`
342
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
343
+ - Syntax:
344
+
345
+ ```text
346
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
347
+ ```
348
+
349
+ ### `buildchain dev authority observe`
350
+
351
+ - Help: `buildchain dev authority observe --help`
352
+ - Canonical id: `dev`
353
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
354
+ - Syntax:
355
+
356
+ ```text
357
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
358
+ ```
359
+
360
+ ### `buildchain dev authority recover`
361
+
362
+ - Help: `buildchain dev authority recover --help`
363
+ - Canonical id: `dev`
364
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
365
+ - Syntax:
366
+
367
+ ```text
368
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
369
+ ```
370
+
371
+ ### `buildchain dev authority settle`
372
+
373
+ - Help: `buildchain dev authority settle --help`
374
+ - Canonical id: `dev`
375
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
376
+ - Syntax:
377
+
378
+ ```text
379
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
380
+ ```
381
+
382
+ ### `buildchain dev authority submit`
383
+
384
+ - Help: `buildchain dev authority submit --help`
385
+ - Canonical id: `dev`
386
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
387
+ - Syntax:
388
+
389
+ ```text
390
+ buildchain dev authority <migrate|submit|lease-qualification|heartbeat-qualification|complete-qualification|lease-landing|heartbeat-landing|recover|admit-merge-group|settle|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
391
+ ```
392
+
272
393
  ### `buildchain dev merge-queue`
273
394
 
274
395
  - Help: `buildchain dev merge-queue --help`
@@ -299,7 +420,18 @@ buildchain dev pr-admit --repository <owner/repo> --branch <dev/vN/vN.M> --pull-
299
420
  - Syntax:
300
421
 
301
422
  ```text
302
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
423
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
424
+ ```
425
+
426
+ ### `buildchain dev proof classify-native`
427
+
428
+ - Help: `buildchain dev proof classify-native --help`
429
+ - Canonical id: `dev`
430
+ - Options: `--json`, `--output`
431
+ - Syntax:
432
+
433
+ ```text
434
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
303
435
  ```
304
436
 
305
437
  ### `buildchain dev proof integration`
@@ -310,7 +442,18 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
310
442
  - Syntax:
311
443
 
312
444
  ```text
313
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
445
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
446
+ ```
447
+
448
+ ### `buildchain dev proof native`
449
+
450
+ - Help: `buildchain dev proof native --help`
451
+ - Canonical id: `dev`
452
+ - Options: `--json`, `--output`
453
+ - Syntax:
454
+
455
+ ```text
456
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
314
457
  ```
315
458
 
316
459
  ### `buildchain dev proof replay`
@@ -321,7 +464,7 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
321
464
  - Syntax:
322
465
 
323
466
  ```text
324
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
467
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
325
468
  ```
326
469
 
327
470
  ### `buildchain dev proof source`
@@ -332,7 +475,7 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
332
475
  - Syntax:
333
476
 
334
477
  ```text
335
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
478
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
336
479
  ```
337
480
 
338
481
  ### `buildchain dev proof verify-integration`
@@ -343,7 +486,29 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
343
486
  - Syntax:
344
487
 
345
488
  ```text
346
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
489
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
490
+ ```
491
+
492
+ ### `buildchain dev proof verify-native`
493
+
494
+ - Help: `buildchain dev proof verify-native --help`
495
+ - Canonical id: `dev`
496
+ - Options: `--json`, `--output`
497
+ - Syntax:
498
+
499
+ ```text
500
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
501
+ ```
502
+
503
+ ### `buildchain dev proof verify-native-reuse`
504
+
505
+ - Help: `buildchain dev proof verify-native-reuse --help`
506
+ - Canonical id: `dev`
507
+ - Options: `--json`, `--output`
508
+ - Syntax:
509
+
510
+ ```text
511
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
347
512
  ```
348
513
 
349
514
  ### `buildchain dev proof verify-source`
@@ -354,7 +519,18 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
354
519
  - Syntax:
355
520
 
356
521
  ```text
357
- buildchain dev proof <source|verify-source|classify|replay|integration|verify-integration> [--output <file>] [--json]
522
+ buildchain dev proof <source|verify-source|classify|native|verify-native|classify-native|verify-native-reuse|replay|integration|verify-integration> [--output <file>] [--json]
523
+ ```
524
+
525
+ ### `buildchain dev two-phase`
526
+
527
+ - Help: `buildchain dev two-phase --help`
528
+ - Canonical id: `dev`
529
+ - Options: `--branch`, `--expected-head`, `--native-command`, `--native-proof`, `--pull-request`, `--repository`, `--warrant-result`
530
+ - Syntax:
531
+
532
+ ```text
533
+ buildchain dev two-phase --repository <owner/repo> --branch <dev/vN/vN.M> --pull-request <n> --expected-head <sha> --warrant-result <file> [--native-proof <file>] [--native-command <command>]
358
534
  ```
359
535
 
360
536
  ### `buildchain dev warrant cancel-queued`
@@ -365,7 +541,7 @@ buildchain dev proof <source|verify-source|classify|replay|integration|verify-in
365
541
  - Syntax:
366
542
 
367
543
  ```text
368
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
544
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
369
545
  ```
370
546
 
371
547
  ### `buildchain dev warrant close`
@@ -376,7 +552,7 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
376
552
  - Syntax:
377
553
 
378
554
  ```text
379
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
555
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
380
556
  ```
381
557
 
382
558
  ### `buildchain dev warrant heartbeat`
@@ -387,7 +563,7 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
387
563
  - Syntax:
388
564
 
389
565
  ```text
390
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
566
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
391
567
  ```
392
568
 
393
569
  ### `buildchain dev warrant observe`
@@ -398,7 +574,18 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
398
574
  - Syntax:
399
575
 
400
576
  ```text
401
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
577
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
578
+ ```
579
+
580
+ ### `buildchain dev warrant qualify`
581
+
582
+ - Help: `buildchain dev warrant qualify --help`
583
+ - Canonical id: `dev`
584
+ - Options: `--branch`, `--execute`, `--json`, `--output`, `--repository`
585
+ - Syntax:
586
+
587
+ ```text
588
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
402
589
  ```
403
590
 
404
591
  ### `buildchain dev warrant recover`
@@ -409,7 +596,7 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
409
596
  - Syntax:
410
597
 
411
598
  ```text
412
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
599
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
413
600
  ```
414
601
 
415
602
  ### `buildchain dev warrant select`
@@ -420,7 +607,7 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
420
607
  - Syntax:
421
608
 
422
609
  ```text
423
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
610
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
424
611
  ```
425
612
 
426
613
  ### `buildchain dev warrant submit`
@@ -431,7 +618,7 @@ buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|obse
431
618
  - Syntax:
432
619
 
433
620
  ```text
434
- buildchain dev warrant <submit|select|heartbeat|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
621
+ buildchain dev warrant <submit|select|heartbeat|qualify|recover|close|cancel-queued|observe> --repository <owner/repo> --branch <dev/vN/vN.M> [--execute] [--output <file>] [--json]
435
622
  ```
436
623
 
437
624
  ## `diagnostics`
@@ -59,6 +59,14 @@ controller then compares the selected SHA to the exact Alpha head before it can
59
59
  be eligible, so a bounded scan cannot turn a commit outside the promotion
60
60
  ancestry into a candidate.
61
61
 
62
+ Generated next-development version preparation is not a product candidate. The
63
+ observer skips both the signed `chore(release): prepare ...` commit and its
64
+ two-parent integration commit. When later product work becomes qualified, the
65
+ nearest preparation becomes a reservation: Patrol reads every path changed by
66
+ that preparation at both exact SHAs and requires identical Git blob identities.
67
+ A missing or stale reserved path blocks selection before the Release Cut and
68
+ therefore before any heavy candidate build.
69
+
62
70
  The decision is `kungfu-buildchain-channel-candidate-decision/v1`. It records the
63
71
  source and target branches and SHAs, comparison distance, workflow paths, run
64
72
  identities and attempts, completion times, URLs, policy, and a canonical decision