@kungfu-tech/buildchain 4.1.3-alpha.9 → 4.1.4-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/AGENTS.md +11 -13
  2. package/CONTRIBUTING.md +32 -9
  3. package/README.md +56 -140
  4. package/actions/release/promotion/ref/README.md +1 -1
  5. package/architecture/action-taxonomy.json +1 -1
  6. package/architecture/agent-change-map.md +32 -45
  7. package/architecture/build-orchestration.json +1 -1
  8. package/architecture/capability-state-machine-manifest.json +5 -5
  9. package/architecture/ci-lane-change-budget.json +92 -92
  10. package/architecture/code-layout.json +2 -12
  11. package/architecture/core-mechanisms.json +38 -39
  12. package/architecture/cross-platform-adopter-qualification.json +1 -1
  13. package/architecture/dev-delivery-orchestration.json +2 -2
  14. package/architecture/floating-consumer-policy.json +3 -3
  15. package/architecture/internal-capabilities.json +27 -28
  16. package/architecture/maintainability-debt.json +60 -94
  17. package/architecture/maintainability-policy.json +7 -13
  18. package/architecture/minimal-consumer-migration.json +43 -5014
  19. package/architecture/platform-stage-checkpoints.json +1 -1
  20. package/architecture/release-tail-contract.json +2 -2
  21. package/architecture/release-topology.json +33 -25
  22. package/architecture/stage-capsule-qualification.json +1 -1
  23. package/architecture/universal-workflow-bootstrap.json +60 -60
  24. package/architecture/universal-workflow-capability-policy.json +3 -3
  25. package/architecture/universal-workflow-fault-campaign.json +7 -7
  26. package/architecture/workflow-taxonomy.json +59 -60
  27. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  28. package/dist/site/buildchain-contract.json +138 -66
  29. package/dist/site/buildchain-site.json +257 -331
  30. package/dist/site/capability-registry.json +4 -4
  31. package/dist/site/cli-registry.json +6 -142
  32. package/dist/site/controller-registry.json +19 -19
  33. package/dist/site/kfd-claims.json +481 -529
  34. package/dist/site/kfd-upstream-aggregate.json +1 -1
  35. package/dist/site/manual-registry.json +22 -22
  36. package/dist/site/node-api-registry.json +82 -339
  37. package/dist/site/page-registry.json +229 -304
  38. package/dist/site/public-surface-audit.json +544 -754
  39. package/dist/site/publication-authority-registry.json +316 -316
  40. package/dist/site/publication-registry.json +1 -1
  41. package/dist/site/site-manifest.json +23 -23
  42. package/dist/site/workflow-registry.json +1071 -1027
  43. package/docs/MAP.md +28 -20
  44. package/docs/auditable-demo.md +17 -49
  45. package/docs/bootstrap-recovery.md +46 -37
  46. package/docs/cli-reference.md +2 -46
  47. package/docs/cli.md +97 -186
  48. package/docs/code-organization.md +7 -5
  49. package/docs/dev-alpha-candidate-patrol.md +19 -42
  50. package/docs/dev-delivery-orchestration.md +15 -11
  51. package/docs/dev-delivery-qualification-landing-adr.md +10 -9
  52. package/docs/dev-delivery-warrant.md +17 -16
  53. package/docs/dev-qualification-patrol.md +25 -20
  54. package/docs/getting-started.md +80 -139
  55. package/docs/github-artifact-attestation.md +31 -81
  56. package/docs/install.md +66 -30
  57. package/docs/lifecycle-protocol.md +19 -57
  58. package/docs/migration-inventory.md +17 -45
  59. package/docs/next-development-transition.md +13 -13
  60. package/docs/node-api-reference.md +122 -138
  61. package/docs/oci-publication.md +13 -10
  62. package/docs/publication-artifacts.md +128 -486
  63. package/docs/publication-authority.md +15 -45
  64. package/docs/publish-transaction.md +13 -11
  65. package/docs/release-candidate.md +126 -355
  66. package/docs/release-discussions.md +36 -67
  67. package/docs/release-flow.md +80 -339
  68. package/docs/release-governance.md +114 -962
  69. package/docs/release-promotion-request.md +45 -43
  70. package/docs/release-propagation.md +13 -27
  71. package/docs/release-tail-provider-plane.md +38 -65
  72. package/docs/reusable-build-surface.md +78 -196
  73. package/docs/runtime-train-validation.md +8 -6
  74. package/docs/stable-candidate-patrol.md +13 -66
  75. package/docs/v4-adopter-delivery.md +15 -15
  76. package/docs/v4-declarative-release-tail-migration.md +19 -17
  77. package/docs/v4-production-release.md +11 -6
  78. package/docs/v4-publication-rehearsal.md +12 -27
  79. package/docs/v4-stage-capsule.md +14 -20
  80. package/docs/v4-tail-reseal.md +34 -20
  81. package/docs/web-surface-deployments.md +26 -264
  82. package/docs/workflow-catalog.md +31 -31
  83. package/docs/workflow-path-migration.md +10 -4
  84. package/package.json +5 -4
  85. package/packages/core/adoption/buildchain-kfd-claims.js +7 -7
  86. package/packages/core/adoption/cli/output.mjs +1 -9
  87. package/packages/core/adoption/cli/product-gate.mjs +1 -15
  88. package/packages/core/adoption/cli/project.mjs +9 -10
  89. package/packages/core/adoption/cli/standards.mjs +1 -14
  90. package/packages/core/adoption/cli/support.mjs +0 -2
  91. package/packages/core/adoption/cli/surface-register.mjs +0 -2
  92. package/packages/core/adoption/commands/init-repo.mjs +77 -485
  93. package/packages/core/adoption/consumer-init.js +279 -0
  94. package/packages/core/adoption/qualification/admission.js +1 -1
  95. package/packages/core/build/cli/cache.mjs +0 -2
  96. package/packages/core/build/cli/facts.mjs +0 -3
  97. package/packages/core/build/cli/homebrew.mjs +0 -4
  98. package/packages/core/build/cli/lifecycle.mjs +0 -3
  99. package/packages/core/build/github-artifact-attestation.js +2 -2
  100. package/packages/core/build/platform-stage-checkpoints.js +1 -1
  101. package/packages/core/build/signing/dispatch.js +1 -1
  102. package/packages/core/consumer/buildchain-config.js +9 -0
  103. package/packages/core/consumer/contract/inspection.js +351 -9
  104. package/packages/core/consumer/contract/javascript-syntax.js +439 -0
  105. package/packages/core/consumer/contract/javascript-values.js +61 -0
  106. package/packages/core/consumer/contract/javascript.js +555 -0
  107. package/packages/core/consumer/contract/local-validation.js +84 -0
  108. package/packages/core/contracts/buildchain-contract.js +39 -8
  109. package/packages/core/contracts/cli/introspection.mjs +1 -9
  110. package/packages/core/contracts/public-surface-cli.js +0 -1
  111. package/packages/core/dev-delivery/dev-delivery-contract-surface.js +2 -2
  112. package/packages/core/governance/buildchain-publication-authority.js +24 -24
  113. package/packages/core/governance/cli/doctor.mjs +58 -42
  114. package/packages/core/governance/commands/architecture.mjs +6 -1
  115. package/packages/core/governance/commands/audit-publication-control-plane.mjs +1 -1
  116. package/packages/core/governance/commands/workflow-friction-report.mjs +1 -1
  117. package/packages/core/governance/github-governance-authority.js +2 -2
  118. package/packages/core/governance/publication/collection.js +1 -1
  119. package/packages/core/index.js +1 -3
  120. package/packages/core/observability/cli/candidate.mjs +0 -2
  121. package/packages/core/observability/cli/context.mjs +0 -5
  122. package/packages/core/observability/cli/diagnostics.mjs +0 -7
  123. package/packages/core/observability/cli/events.mjs +2 -10
  124. package/packages/core/paper/commands/paper-work-fleet-cli.mjs +1 -1
  125. package/packages/core/paper/commands/paper.mjs +33 -422
  126. package/packages/core/paper/consumer-status.js +72 -0
  127. package/packages/core/paper/operations/identity.js +0 -3
  128. package/packages/core/paper/operations/migration.js +460 -0
  129. package/packages/core/paper/operations/preflight-checks.js +8 -68
  130. package/packages/core/paper/operations/scaffold.js +16 -326
  131. package/packages/core/paper/operations/status.js +27 -53
  132. package/packages/core/paper/paper-agent-entry.js +36 -147
  133. package/packages/core/paper/paper-fleet.js +24 -39
  134. package/packages/core/paper/paper-repository.js +16 -0
  135. package/packages/core/paper/paper-runtime-channels.js +1 -1
  136. package/packages/core/paper/paper-scaffold-content.js +153 -162
  137. package/packages/core/paper/paper-work.js +3 -10
  138. package/packages/core/paper/paper.js +43 -5
  139. package/packages/core/providers/github/artifact-attestation.js +1 -1
  140. package/packages/core/providers/github/pipeline-context-artifacts.js +172 -0
  141. package/packages/core/providers/github/pipeline-release-evidence.js +17 -98
  142. package/packages/core/providers/github/pipeline-stable-baseline.js +86 -0
  143. package/packages/core/providers/github/pipeline-stable-source.js +22 -4
  144. package/packages/core/providers/github/release-evidence-assets.js +97 -0
  145. package/packages/core/publication/authority/control-plane.js +2 -2
  146. package/packages/core/publication/authority/seal.js +1 -1
  147. package/packages/core/publication/cli/dispatch.mjs +1 -12
  148. package/packages/core/publication/pipeline/actions.js +16 -9
  149. package/packages/core/publication/pipeline/apply.js +17 -9
  150. package/packages/core/publication/pipeline/context.js +29 -0
  151. package/packages/core/publication/pipeline/journal.js +13 -1
  152. package/packages/core/publication/pipeline/prepare.js +15 -6
  153. package/packages/core/publication/pipeline/recovery-import.js +1 -1
  154. package/packages/core/publication/pipeline/recovery-materials.js +63 -1
  155. package/packages/core/publication/pipeline/recovery-prepare.js +21 -9
  156. package/packages/core/publication/pipeline/stable-entry.js +12 -3
  157. package/packages/core/publication/pipeline/stable-products.js +21 -19
  158. package/packages/core/publication/pipeline/version-actions.js +15 -6
  159. package/packages/core/publication/publication-rehearsal-projection.js +0 -9
  160. package/packages/core/release/cli/dispatch.mjs +1 -4
  161. package/packages/core/release/cli/inspection-handlers.mjs +1 -33
  162. package/packages/core/release/cli/release-handlers.mjs +2 -19
  163. package/packages/core/release/cli/verification-handlers.mjs +4 -25
  164. package/packages/core/release/next-development-projection.js +13 -13
  165. package/packages/core/release/passport/locations.js +13 -8
  166. package/packages/core/release/release-passport.js +70 -5
  167. package/packages/core/web/cli/badges.mjs +0 -4
  168. package/packages/core/web/publication-admission.js +1 -1
  169. package/packages/core/web/publication-capability.js +1 -1
  170. package/packages/core/web/readme-badges.js +1 -1
  171. package/packages/core/workflow/cli/main.mjs +1 -4
  172. package/packages/core/workflow/cli/process.mjs +1 -1
  173. package/packages/core/workflow/commands/buildchain-cli-help.mjs +2 -8
  174. package/packages/core/workflow/engine/conformance.js +1 -1
  175. package/packages/core/workflow/pipeline/build.js +21 -1
  176. package/packages/core/workflow/pipeline/delivery-observation.js +6 -2
  177. package/packages/core/workflow/workflow-taxonomy.mjs +61 -17
  178. package/scripts/check-code-layout.mjs +2 -0
  179. package/scripts/check-core-mechanism-inventory.mjs +29 -13
  180. package/scripts/check-floating-consumer-policy-contract.mjs +3 -3
  181. package/scripts/check-inventory.mjs +27 -27
  182. package/scripts/check-maintainability.mjs +28 -5
  183. package/scripts/check-public-dogfood-contract.mjs +3 -3
  184. package/scripts/check-release-topology.mjs +1 -1
  185. package/scripts/check-self-consumer-contract.mjs +7 -7
  186. package/scripts/check-universal-workflow-bootstrap.mjs +1 -1
  187. package/scripts/generate-channel-promotion-workflow.mjs +1 -1
  188. package/scripts/generate-minimal-consumer-contract.mjs +21 -1
  189. package/scripts/generate-site-bundle.mjs +2 -1
  190. package/scripts/generate-tail-reseal-fixture.mjs +3 -3
  191. package/scripts/inventory/promotion.mjs +1 -1
  192. package/scripts/next-development-self-dogfood-harness.mjs +1 -1
  193. package/scripts/next-development-self-dogfood.mjs +4 -4
  194. package/scripts/site-capability-metadata.mjs +2 -6
  195. package/scripts/source-metric-lineage.mjs +62 -7
  196. package/scripts/verify-golden-path.mjs +31 -35
  197. package/templates/native-dev-delivery.yml +1 -1
  198. package/templates/universal-buildchain-bootstrap.yml +1 -1
  199. package/packages/core/paper/operations/bootstrap.js +0 -75
  200. package/packages/core/paper/operations/plans.js +0 -213
  201. package/packages/core/paper/operations/provisioning.js +0 -113
  202. package/packages/core/paper/operations/scaffold-config.js +0 -77
  203. package/packages/core/paper/operations/scaffold-workflows.js +0 -116
  204. package/packages/core/paper/operations/workspace.js +0 -60
  205. package/packages/core/paper/paper-npm-bootstrap.js +0 -492
@@ -8,16 +8,23 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-09-11
11
+ last_reviewed: 2026-09-20
12
12
  ai_provenance:
13
13
  model_family: GPT-6
14
14
  product: Codex
15
- generated_at: 2026-09-09
15
+ generated_at: 2026-09-20
16
16
  invisible_context_boundary: No credentials, private logs, or unpublished deployment values are included.
17
+ visible_context: Current two-entry consumer contract and retained internal implementation references.
17
18
  ---
18
19
 
19
20
  # Web-Surface Deployment Contract
20
21
 
22
+ This is a reference for the retained internal web deployment engine. It is not
23
+ schema-2 consumer onboarding: web is not an additional product type or public
24
+ reusable entry in the minimal contract. Current consumers use the shared
25
+ normal/recovery pair. The deployment configurations, request envelopes and
26
+ provider ports below belong to the internal engine or historical integrations.
27
+
21
28
  Buildchain supports `project.type = "web-surface"` for repositories that publish
22
29
  sites, docs, product pages, operator consoles, or browser apps. These projects
23
30
  need auditable deployment semantics, but they are not package release lines and
@@ -179,18 +186,8 @@ Buildchain validates these hard constraints:
179
186
 
180
187
  ### Floating Runtime Contract Lock
181
188
 
182
- Web-surface repositories can consume the stable Buildchain workflow shell with a
183
- floating ref, such as:
184
-
185
- ```yaml
186
- jobs:
187
- web:
188
- uses: kungfu-systems/buildchain/.github/workflows/public-release-web.yml@v4
189
- with:
190
- contract-lock: .buildchain/contract-lock.json
191
- build-command: pnpm build
192
- artifact-path: dist
193
- ```
189
+ The internal web component retains runtime-lock validation before build or
190
+ provider planning. It is not invoked through a separate consumer web caller.
194
191
 
195
192
  The caller repository commits `.buildchain/contract-lock.json` after reviewing an
196
193
  accepted Buildchain runtime SHA and contract digest. The reusable workflow then
@@ -737,259 +734,24 @@ cleanup can derive `pr-N` from `--pull-number`, records the event, source SHA,
737
734
  actor, run id, preview bucket/prefix, manifest key, and adapter steps, and is an
738
735
  auditable no-op when no aliases are requested.
739
736
 
740
- ## Reusable Workflow Shape
741
-
742
- Buildchain ships `.github/workflows/public-release-web.yml` for repositories that want
743
- the standard PR review and promotion flow without copying bespoke glue:
744
-
745
- ```yaml
746
- jobs:
747
- web-surface:
748
- uses: kungfu-systems/buildchain/.github/workflows/public-release-web.yml@v4
749
- with:
750
- build-command: npm run build
751
- verify-command: npm run check
752
- artifact-path: dist
753
- ```
754
-
755
- The reusable workflow maps GitHub events to Buildchain web-surface semantics:
756
-
757
- | Event | Buildchain behavior |
758
- | --- | --- |
759
- | `pull_request` opened / synchronized / reopened | validate, build, verify, and plan `preview` for `pr-N` |
760
- | `pull_request` closed | plan apply-mode cleanup for the `pr-N` preview alias and manifest |
761
- | `pull_request` closed for a matching release PR | verify the release intent, then wait for the protected `main` push; do not plan or apply production from `refs/pull/*/merge` |
762
- | `push` to `main` | validate, build, verify, plan and apply `staging` from the merged `main` SHA, then optionally open a production release PR |
763
- | `push` to `main` from a matching release PR merge | validate the associated release PR, plan `production`, and enter the configured GitHub Environment gate from the protected mainline ref |
764
- | `workflow_dispatch` with `production-approved = true` | plan `production` and enter the configured GitHub Environment gate |
765
-
766
- The optional `runtime-ref` parameter selects a transient execution runtime.
767
- An empty value uses the selected consumer contract lock or entry default.
768
- All preparation goes through the shared [Runtime entry](runtime-entry.md).
769
- A maintainer can expose a manual input for train validation or repair:
770
-
771
- ```yaml
772
- on:
773
- workflow_dispatch:
774
- inputs:
775
- runtime-ref:
776
- description: "Temporary Buildchain runtime ref for trusted manual validation"
777
- required: false
778
- default: ""
779
-
780
- jobs:
781
- web-surface:
782
- uses: kungfu-systems/buildchain/.github/workflows/public-release-web.yml@v4
783
- with:
784
- runtime-ref: ${{ inputs.runtime-ref || '' }}
785
- build-command: pnpm run build
786
- verify-command: pnpm run check
787
- artifact-path: dist
788
- ```
789
-
790
- Only repository actors with write,
791
- maintain, or admin permission may use a non-empty runtime override. Train refs
792
- such as `train/v4/v4.1/site-source-of-truth` are temporary validation refs, not
793
- stable production dependencies or pending merge targets. They may remain for a
794
- retention window after release as a fast-use and rollback channel, with old
795
- trains handled by periodic Buildchain cleanup. The web-surface deployment
796
- manifest records the resolved runtime SHA as `runtimeId` and the stable
797
- rollback ref as `rollbackPointer`.
798
-
799
- The workflow deliberately plans and emits manifests by default. Live mutation is
800
- opt-in per channel:
801
-
802
- ```yaml
803
- permissions:
804
- contents: read
805
- id-token: write
806
- pull-requests: write
807
-
808
- jobs:
809
- web-surface:
810
- uses: kungfu-systems/buildchain/.github/workflows/public-release-web.yml@v4
811
- with:
812
- build-command: pnpm run build
813
- verify-command: pnpm run check
814
- artifact-path: dist
815
- preview-apply: true
816
- preview-cleanup-apply: true
817
- preview-aws-role-arn: arn:aws:iam::123456789012:role/site-preview-github-actions
818
- staging-apply: true
819
- staging-aws-role-arn: arn:aws:iam::123456789012:role/site-staging-github-actions
820
- production-apply: false
821
- production-release-on-main: false
822
- production-aws-role-arn: arn:aws:iam::123456789012:role/site-production-github-actions
823
- production-environment: production
824
- release-feedback-actor-privacy: public
825
- ```
826
-
827
- When enabled, Buildchain owns the full release apply state machine:
828
-
829
- - PR preview deploys run `deploy-apply --dry-run false` with the preview role
830
- and update a single idempotent PR comment.
831
- - Closed PR cleanup runs `cleanup-apply --dry-run false` with the preview role
832
- only.
833
- - Pushes to `main` run staging `deploy-apply --dry-run false` with the staging
834
- role, then write a staging release feedback passport artifact and comment the
835
- associated merged PR with the staging URL, source SHA, artifact identity, run
836
- URL, and failure context when apply did not complete.
837
- - When `production-release-on-main=true`, successful staging applies open or
838
- update a Buildchain-owned release PR from
839
- `release/<channel>-<short-sha>` to `main`, unless the current push already
840
- came from a matching release PR merge. The release PR contains one empty
841
- release-intent commit, carries `production-release-label`, and includes the
842
- staging URLs, source SHA, artifact hash, and staging release-passport artifact
843
- link in the PR body.
844
- - Production release PR handoff is permission-aware. Staging apply and staging
845
- health remain successful even when the repository or organization has
846
- GitHub Actions workflow permissions set to read-only. In that case Buildchain
847
- records `release-pr-status=permission-denied`, uploads the release PR handoff
848
- summary/body plus staging release passport artifacts, and writes an exact
849
- manual `gh pr create` command to the step summary. Set
850
- `fail-on-release-pr-error=true` only when PR creation failure should fail the
851
- whole workflow.
852
- - Release pull requests that match the configured production gate get a
853
- Buildchain review comment with the staging URL and production target, so the
854
- operator can verify staging from the PR page and use merge as the approval
855
- action. Consumers do not need to hand-write `gh pr create` or production
856
- release-intent glue.
857
- - `production-apply=true` enables the production capability; it does not request
858
- production for every event. Ordinary `main` pushes remain staging-only and
859
- can create or update a release PR. Production runs only when the capability
860
- is enabled and either:
861
- - a `workflow_dispatch` passes `production-approved=true` and the triggering
862
- actor currently has `write`, `maintain`, or `admin` permission; or
863
- - `production-release-on-main=true` and the `main` push commit is associated
864
- with exactly one same-repository, merged release pull request matching
865
- `production-release-label` and `production-release-head-prefix`.
866
- The production job is then gated by the configured GitHub Environment.
867
- - Before production artifact download, Buildchain assembles a managed sealed
868
- publication capability from the exact source/runtime SHAs, production plan
869
- and artifact hash, a qualifying pre-publication controller receipt, the
870
- trusted manual or reviewed-release-PR decision, production Environment and
871
- AWS role target, an ephemeral-runner receipt, and a fresh nonce. Production
872
- revalidates that capability against the downloaded plan before it downloads
873
- product bytes. The later AWS OIDC exchange remains the provider's final
874
- transaction-time authorization decision and fails closed before deploy apply.
875
- - The `publication-*-json` inputs are an advanced external-evidence
876
- compatibility path, not a prerequisite for the standard release-PR or trusted
877
- manual mechanisms. External evidence must now include
878
- `publication-gate-aggregate-json`; supplying only a partial set still fails
879
- closed.
880
- - Production apply writes a production release feedback passport artifact and
881
- comments the release PR with the production URL, source SHA, artifact
882
- identity, run URL, rollback pointer, and failure context when apply did not
883
- complete.
884
-
885
- The feedback passport records the release responsibility chain:
886
-
887
- - human decision actor;
888
- - trigger actor;
889
- - runner/execution actor;
890
- - OIDC/deploy identity reference;
891
- - decision type and time;
892
- - source event, PR number, merge commit, and required gate label/head-prefix.
893
-
894
- `release-feedback-actor-privacy` controls actor values in the passport and
895
- comments. `public` records GitHub actor names, `redacted` records only the actor
896
- role, and `private-ref` records a stable private reference hash without exposing
897
- the actor name.
898
-
899
- For release-PR publishing, callers opt in explicitly:
900
-
901
- ```yaml
902
- jobs:
903
- web-surface:
904
- uses: kungfu-systems/buildchain/.github/workflows/public-release-web.yml@v4
905
- with:
906
- build-command: npm run build
907
- verify-command: npm run check
908
- artifact-path: dist
909
- production-apply: true
910
- production-release-on-main: true
911
- production-release-label: buildchain-release
912
- production-release-head-prefix: release/
913
- production-release-branch-channel: production
914
- production-release-pr-mode: auto
915
- production-aws-role-arn: arn:aws:iam::123456789012:role/site-production-github-actions
916
- production-environment: production
917
- ```
918
-
919
- Keep `production-apply` enabled in the caller when the repository supports
920
- production. Buildchain derives whether the current event may use that
921
- capability: an ordinary `main` push plans and applies staging, a matching
922
- reviewed release PR merge authorizes production, and an approved trusted manual
923
- dispatch authorizes production. Inputs from an untrusted event cannot turn that
924
- decision on.
925
-
926
- `production-release-pr-mode` controls the post-staging handoff:
737
+ ## Internal workflow authority
927
738
 
928
- | Mode | Behavior |
929
- | --- | --- |
930
- | `auto` | Generate release PR facts, create/update the empty release-intent branch and PR, and label it when token permissions allow. This is the default. |
931
- | `summary-only` | Generate and upload release PR facts, body, passport evidence, and manual command, but do not call the GitHub PR API. |
932
- | `disabled` | Record a disabled handoff and skip release PR API calls. |
933
-
934
- Automatic release PR creation normally uses the workflow `github.token`.
935
- Consumers that cannot enable "GitHub Actions can create and approve pull
936
- requests" globally should prefer the first-class GitHub App path. Pass the App
937
- client id as an input and the private key as a reusable workflow secret; Buildchain
938
- creates an installation token inside the release PR job and uses it only for the
939
- release-intent branch, PR, and label operations:
940
-
941
- ```yaml
942
- with:
943
- production-release-app-client-id: ${{ vars.KUNGFU_RELEASE_APP_CLIENT_ID }}
944
- secrets:
945
- production-release-app-private-key: ${{ secrets.KUNGFU_RELEASE_APP_PRIVATE_KEY }}
946
- ```
947
-
948
- When either side of the App configuration is missing, Buildchain does not hide
949
- that behind the fallback `github.token`. The handoff JSON and job summary report
950
- `status: "app-token-unavailable"` with an `appTokenStatus` such as
951
- `missing-client-id`, `missing-private-key`, or `create-failed`, and still include
952
- the manual PR creation command. If the repository intentionally uses another
953
- narrow token, pass it through `production-release-pr-token`.
739
+ `.release-web.yml` retains the web engine's job and credential boundaries.
740
+ It is an internal component, without a public product-specific alias. Its source,
741
+ artifact, runtime, deployment-plan and environment ports must come from admitted
742
+ runtime state; consumers do not write a third web workflow or pass these ports
743
+ through their generated normal/recovery pair.
954
744
 
955
- If a repository already generates its own narrow token or PAT, it can still pass
956
- that through `production-release-pr-token`:
957
-
958
- ```yaml
959
- secrets:
960
- production-release-pr-token: ${{ secrets.BUILDCHAIN_RELEASE_PR_TOKEN }}
961
- ```
745
+ Preview, staging and production keep separate provider permissions and evidence.
746
+ Production requires exact source/artifact identity and independent admission;
747
+ untrusted event inputs cannot grant provider mutation. A successful staging
748
+ receipt does not prove production, and an API response does not replace provider
749
+ readback. Provider failures preserve the previously valid public authority.
962
750
 
963
- Token priority is: generated GitHub App installation token,
964
- `production-release-pr-token`, then `github.token`.
965
-
966
- The merge button becomes the production approval only for a PR that carries the
967
- release label and comes from the configured source-branch prefix. Ordinary pull
968
- requests merged into `main` deploy staging and open a release-intent PR; merging
969
- that release PR triggers production. A release PR merge push does not open
970
- another release PR.
971
-
972
- Apply-only inputs are validated before the caller build or verification command
973
- runs. If the current event would run preview, staging, or production apply,
974
- missing role inputs, a production apply without `production-approved=true` on
975
- manual dispatch, or a manual actor without repository write authority fail
976
- immediately instead of spending the build and plan jobs first.
977
-
978
- Callers must grant `id-token: write` for OIDC role assumption. Preview comments
979
- need `pull-requests: write`. Automatic release PR creation also needs
980
- `contents: write`, `pull-requests: write`, and `issues: write` so Buildchain can
981
- create the release branch, write the empty release-intent commit, open or update
982
- the PR, and apply the release label. If these permissions are unavailable,
983
- Buildchain degrades the release handoff instead of marking a successful staging
984
- deployment as failed, unless `fail-on-release-pr-error=true`. The AWS roles remain caller-owned and
985
- should be scoped by channel: preview can mutate only preview resources, staging
986
- can mutate only staging resources, and production can mutate only production
987
- resources.
988
-
989
- Apply mode fails closed when the deploy config still contains placeholder AWS
990
- targets such as `pending-preview-distribution`. Planning can use placeholders
991
- for dry-run-only design work, but live apply requires concrete bucket and
992
- CloudFront distribution identifiers.
751
+ The component's historical release-PR, cleanup and feedback mechanisms remain
752
+ internal implementation contracts. Their workflow inputs are not schema-2 TOML
753
+ fields or recommended consumer setup. Provider configuration still requires its
754
+ own explicit authority and cannot be inferred from product metadata or evidence.
993
755
 
994
756
  ## Site Repository Shape
995
757
 
@@ -21,9 +21,9 @@ ai_provenance:
21
21
 
22
22
  Generated from `architecture/workflow-taxonomy.json`. Every workflow has one canonical implementation; alternate paths and historical forwarding aliases are rejected.
23
23
 
24
- Public workflows own the consumer API. Component workflows own reusable multi-job topology. Self workflows own Buildchain repository automation. Actions own execution steps; JS adapters and Rust/WASM own implementation.
24
+ The two public workflows own normal pipeline execution and exact-attempt recovery. Component workflows are internal runtime implementation, including once-only setup and the dispatch signing service; consumers do not wire these components. Self workflows are the generated consumer pair. Actions own execution steps; JS adapters and Rust/WASM own implementation.
25
25
 
26
- Names use `public-<category>-<purpose>.yml`, `.<category>-<purpose>.yml`, and the generated self callers `buildchain.yml` and `buildchain-recover.yml`, with categories `build`, `release`, and `ops`. The primary build API and backbone use `build.yml` and `.build.yml`.
26
+ Names use `public-ops-pipeline.yml`, `public-ops-recover.yml`, internal `.<category>-<purpose>.yml`, and the generated self callers `buildchain.yml` and `buildchain-recover.yml`. Categories are `build`, `release`, and `ops`; the internal build engine retains `.build.yml`.
27
27
 
28
28
  Register ownership before adding a workflow. `pnpm run check:workflows` validates source, calls, required CI integration and independent review ownership. `pnpm run generate:workflows` regenerates this catalog.
29
29
 
@@ -31,53 +31,53 @@ Register ownership before adding a workflow. `pnpm run check:workflows` validate
31
31
 
32
32
  | Workflow | Category | Invocation | Status | Purpose |
33
33
  | --- | --- | --- | --- | --- |
34
- | [build.yml](../.github/workflows/build.yml) | build | reusable | active | Buildchain Channel Build |
35
- | [public-build-adopter-qualification.yml](../.github/workflows/public-build-adopter-qualification.yml) | build | reusable | active | V4 Adopter Delivery |
36
- | [public-build-check.yml](../.github/workflows/public-build-check.yml) | build | reusable | active | Buildchain Check |
37
- | [public-build-demo.yml](../.github/workflows/public-build-demo.yml) | build | reusable | active | Buildchain Declarative Binary Auditable Demo |
38
- | [public-build-publication.yml](../.github/workflows/public-build-publication.yml) | build | reusable | active | Buildchain Publication Artifact |
39
- | [public-build-stage-capsule-canary.yml](../.github/workflows/public-build-stage-capsule-canary.yml) | build | reusable | active | V4 Stage Capsule Canary |
40
- | [public-ops-alpha-candidate-patrol.yml](../.github/workflows/public-ops-alpha-candidate-patrol.yml) | ops | reusable | active | Buildchain Dev to Alpha Candidate Patrol |
41
- | [public-ops-bootstrap.yml](../.github/workflows/public-ops-bootstrap.yml) | ops | reusable | active | Buildchain Universal Bootstrap |
42
- | [public-ops-dev-auto-merge.yml](../.github/workflows/public-ops-dev-auto-merge.yml) | ops | reusable | active | Dev PR Auto Merge |
43
- | [public-ops-dev-qualification-patrol.yml](../.github/workflows/public-ops-dev-qualification-patrol.yml) | ops | reusable | active | Buildchain Dev Qualification Patrol |
44
- | [public-ops-housekeeping.yml](../.github/workflows/public-ops-housekeeping.yml) | ops | reusable | active | Engineering Housekeeper |
45
- | [public-ops-observed-evidence.yml](../.github/workflows/public-ops-observed-evidence.yml) | ops | reusable | active | Patrol Observed Evidence |
46
- | [public-ops-patrol-daily.yml](../.github/workflows/public-ops-patrol-daily.yml) | ops | reusable | active | Buildchain Patrol Daily |
47
- | [public-ops-patrol-monthly.yml](../.github/workflows/public-ops-patrol-monthly.yml) | ops | reusable | active | Buildchain Patrol Monthly |
48
- | [public-ops-patrol-weekly.yml](../.github/workflows/public-ops-patrol-weekly.yml) | ops | reusable | active | Buildchain Patrol Weekly |
49
- | [public-ops-patrol.yml](../.github/workflows/public-ops-patrol.yml) | ops | reusable | active | Buildchain Patrol |
50
34
  | [public-ops-pipeline.yml](../.github/workflows/public-ops-pipeline.yml) | ops | reusable | active | Buildchain pipeline |
51
35
  | [public-ops-recover.yml](../.github/workflows/public-ops-recover.yml) | ops | reusable | active | Buildchain recovery |
52
- | [public-ops-release-governance.yml](../.github/workflows/public-ops-release-governance.yml) | ops | reusable | active | Release Governance Reconcile |
53
- | [public-ops-stable-candidate-patrol.yml](../.github/workflows/public-ops-stable-candidate-patrol.yml) | ops | reusable | active | Buildchain Stable Candidate Patrol |
54
- | [public-ops-tail-reseal.yml](../.github/workflows/public-ops-tail-reseal.yml) | ops | reusable | active | V4 Retained Candidate Tail Reseal |
55
- | [public-ops-warrant-cancel.yml](../.github/workflows/public-ops-warrant-cancel.yml) | ops | reusable | active | Dev Delivery Warrant Queued Candidate Cancel |
56
- | [public-ops-warrant-close.yml](../.github/workflows/public-ops-warrant-close.yml) | ops | reusable | active | Dev Delivery Warrant Close |
57
- | [public-release-artifact-attestation.yml](../.github/workflows/public-release-artifact-attestation.yml) | release | reusable | active | Buildchain GitHub Artifact Attestation |
58
- | [public-release-oci-compose-preview.yml](../.github/workflows/public-release-oci-compose-preview.yml) | release | reusable | active | Buildchain OCI Compose Preview |
59
- | [public-release-paper.yml](../.github/workflows/public-release-paper.yml) | release | reusable | active | Buildchain Paper Release |
60
- | [public-release-promote.yml](../.github/workflows/public-release-promote.yml) | release | reusable | active | Release Candidate Promote |
61
- | [public-release-propagation.yml](../.github/workflows/public-release-propagation.yml) | release | reusable | active | Release Propagation |
62
- | [public-release-signing-authority.yml](../.github/workflows/public-release-signing-authority.yml) | release | dispatch-service | active | Buildchain Artifact Signing Authority |
63
- | [public-release-tail.yml](../.github/workflows/public-release-tail.yml) | release | reusable | active | Declarative Release Tail |
64
- | [public-release-web.yml](../.github/workflows/public-release-web.yml) | release | reusable | active | Buildchain Web Surface |
65
36
 
66
37
  ## component
67
38
 
68
39
  | Workflow | Category | Invocation | Status | Purpose |
69
40
  | --- | --- | --- | --- | --- |
41
+ | [.build-adopter-qualification.yml](../.github/workflows/.build-adopter-qualification.yml) | build | reusable | active | V4 Adopter Delivery |
42
+ | [.build-candidate.yml](../.github/workflows/.build-candidate.yml) | build | reusable | active | Buildchain Channel Build |
43
+ | [.build-check.yml](../.github/workflows/.build-check.yml) | build | reusable | active | Buildchain Check |
70
44
  | [.build-demo-adapter.yml](../.github/workflows/.build-demo-adapter.yml) | build | reusable | active | Buildchain Auditable Demo |
45
+ | [.build-demo.yml](../.github/workflows/.build-demo.yml) | build | reusable | active | Buildchain Declarative Binary Auditable Demo |
71
46
  | [.build-gate-profile.yml](../.github/workflows/.build-gate-profile.yml) | build | reusable | active | Buildchain Shifu Gate Profile |
47
+ | [.build-publication.yml](../.github/workflows/.build-publication.yml) | build | reusable | active | Buildchain Publication Artifact |
48
+ | [.build-stage-capsule-canary.yml](../.github/workflows/.build-stage-capsule-canary.yml) | build | reusable | active | V4 Stage Capsule Canary |
72
49
  | [.build.yml](../.github/workflows/.build.yml) | build | reusable | active | Buildchain Build |
50
+ | [.ops-alpha-candidate-patrol.yml](../.github/workflows/.ops-alpha-candidate-patrol.yml) | ops | reusable | active | Buildchain Dev to Alpha Candidate Patrol |
51
+ | [.ops-bootstrap.yml](../.github/workflows/.ops-bootstrap.yml) | ops | reusable | active | Buildchain Universal Bootstrap |
52
+ | [.ops-dev-auto-merge.yml](../.github/workflows/.ops-dev-auto-merge.yml) | ops | reusable | active | Dev PR Auto Merge |
53
+ | [.ops-dev-qualification-patrol.yml](../.github/workflows/.ops-dev-qualification-patrol.yml) | ops | reusable | active | Buildchain Dev Qualification Patrol |
73
54
  | [.ops-git-sync.yml](../.github/workflows/.ops-git-sync.yml) | ops | reusable | active | sync remote git |
55
+ | [.ops-housekeeping.yml](../.github/workflows/.ops-housekeeping.yml) | ops | reusable | active | Engineering Housekeeper |
56
+ | [.ops-observed-evidence.yml](../.github/workflows/.ops-observed-evidence.yml) | ops | reusable | active | Patrol Observed Evidence |
57
+ | [.ops-patrol-daily.yml](../.github/workflows/.ops-patrol-daily.yml) | ops | reusable | active | Buildchain Patrol Daily |
58
+ | [.ops-patrol-monthly.yml](../.github/workflows/.ops-patrol-monthly.yml) | ops | reusable | active | Buildchain Patrol Monthly |
59
+ | [.ops-patrol-weekly.yml](../.github/workflows/.ops-patrol-weekly.yml) | ops | reusable | active | Buildchain Patrol Weekly |
60
+ | [.ops-patrol.yml](../.github/workflows/.ops-patrol.yml) | ops | reusable | active | Buildchain Patrol |
74
61
  | [.ops-pipeline-delivery.yml](../.github/workflows/.ops-pipeline-delivery.yml) | ops | reusable | active | Internal pipeline delivery |
75
62
  | [.ops-pipeline-execute.yml](../.github/workflows/.ops-pipeline-execute.yml) | ops | reusable | active | Internal pipeline execution |
63
+ | [.ops-release-governance.yml](../.github/workflows/.ops-release-governance.yml) | ops | reusable | active | Release Governance Reconcile |
64
+ | [.ops-stable-candidate-patrol.yml](../.github/workflows/.ops-stable-candidate-patrol.yml) | ops | reusable | active | Buildchain Stable Candidate Patrol |
65
+ | [.ops-tail-reseal.yml](../.github/workflows/.ops-tail-reseal.yml) | ops | reusable | active | V4 Retained Candidate Tail Reseal |
66
+ | [.ops-warrant-cancel.yml](../.github/workflows/.ops-warrant-cancel.yml) | ops | reusable | active | Dev Delivery Warrant Queued Candidate Cancel |
67
+ | [.ops-warrant-close.yml](../.github/workflows/.ops-warrant-close.yml) | ops | reusable | active | Dev Delivery Warrant Close |
68
+ | [.release-artifact-attestation.yml](../.github/workflows/.release-artifact-attestation.yml) | release | reusable | active | Buildchain GitHub Artifact Attestation |
76
69
  | [.release-authority.yml](../.github/workflows/.release-authority.yml) | release | reusable | active | Buildchain Sealed Publication Authority |
77
70
  | [.release-binary-assets.yml](../.github/workflows/.release-binary-assets.yml) | release | reusable | active | Buildchain Binary Release Assets |
71
+ | [.release-candidate-promote.yml](../.github/workflows/.release-candidate-promote.yml) | release | reusable | active | Release Candidate Promote |
72
+ | [.release-oci-compose-preview.yml](../.github/workflows/.release-oci-compose-preview.yml) | release | reusable | active | Buildchain OCI Compose Preview |
73
+ | [.release-paper.yml](../.github/workflows/.release-paper.yml) | release | reusable | active | Buildchain Paper Release |
78
74
  | [.release-pipeline-products.yml](../.github/workflows/.release-pipeline-products.yml) | release | reusable | active | Internal pipeline product publication |
79
75
  | [.release-pipeline-version.yml](../.github/workflows/.release-pipeline-version.yml) | release | reusable | active | Internal pipeline version preparation |
80
76
  | [.release-promote.yml](../.github/workflows/.release-promote.yml) | release | reusable | active | Release Candidate Promote Advanced |
77
+ | [.release-propagation.yml](../.github/workflows/.release-propagation.yml) | release | reusable | active | Release Propagation |
78
+ | [.release-signing-authority.yml](../.github/workflows/.release-signing-authority.yml) | release | dispatch-service | active | Buildchain Artifact Signing Authority |
79
+ | [.release-tail.yml](../.github/workflows/.release-tail.yml) | release | reusable | active | Declarative Release Tail |
80
+ | [.release-web.yml](../.github/workflows/.release-web.yml) | release | reusable | active | Buildchain Web Surface |
81
81
 
82
82
  ## self
83
83
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- status: draft
2
+ status: historical
3
3
  period: ongoing
4
4
  theme: workflow-path-migration
5
5
  doc_type: migration-guide
@@ -8,22 +8,28 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: B
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-09-06
11
+ last_reviewed: 2026-09-20
12
12
  ai_provenance:
13
13
  model_family: GPT-6
14
14
  product: Codex
15
- generated_at: 2026-09-05
15
+ generated_at: 2026-09-20
16
16
  visible_context: Exact GitHub channel refs and workflow files on 23 organization default branches
17
17
  invisible_context_boundary: Other branches, private or unlisted consumers and future floating ref updates were not established by this audit
18
18
  ---
19
19
 
20
20
  # Version-prefixed workflow path migration
21
21
 
22
+ This page retains the dated 2026-09-05/06 migration observations. Its paths and
23
+ channel readbacks are historical, not current consumer instructions. The current
24
+ contract uses `public-ops-pipeline.yml` and `public-ops-recover.yml`; see
25
+ [Getting started](getting-started.md). Former product-specific public workflows
26
+ are now internal components, with no consumer compatibility aliases.
27
+
22
28
  This source change retires three filenames. Their reusable capabilities, inputs,
23
29
  outputs, jobs and permission envelopes remain at the canonical paths below.
24
30
  Keep the existing channel selector and dual contract-lock policy when migrating.
25
31
 
26
- | Retired path | Canonical path |
32
+ | Retired path at that migration | Replacement observed at that migration |
27
33
  | --- | --- |
28
34
  | `v4-adopter-delivery.yml` | `public-build-adopter-qualification.yml` |
29
35
  | `v4-stage-capsule-canary.yml` | `public-build-stage-capsule-canary.yml` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "4.1.3-alpha.9",
3
+ "version": "4.1.4-alpha.0",
4
4
  "private": false,
5
5
  "description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
6
6
  "repository": "https://github.com/kungfu-systems/buildchain",
@@ -192,8 +192,7 @@
192
192
  "ajv": "8.17.1",
193
193
  "prettier": "^3.9.0",
194
194
  "tsup": "^8.5.0",
195
- "typescript": "^5.9.0",
196
- "yaml": "2.8.2"
195
+ "typescript": "^5.9.0"
197
196
  },
198
197
  "dependencies": {
199
198
  "@actions/artifact": "6.2.1",
@@ -202,6 +201,8 @@
202
201
  "@actions/glob": "0.7.0",
203
202
  "@electron/osx-sign": "1.3.3",
204
203
  "@kungfu-tech/kfd": "1.0.0-alpha.62",
205
- "smol-toml": "1.7.0"
204
+ "acorn": "8.17.0",
205
+ "smol-toml": "1.7.0",
206
+ "yaml": "2.8.2"
206
207
  }
207
208
  }
@@ -57,15 +57,15 @@ const SCHEMA_AND_STANDARD_FILES = Object.freeze([
57
57
  const WORKFLOW_AND_ACTION_FILES = Object.freeze([
58
58
  ".github/workflows/.build.yml",
59
59
  ".github/workflows/.release-promote.yml",
60
- ".github/workflows/public-release-promote.yml",
60
+ ".github/workflows/.release-candidate-promote.yml",
61
61
  ".github/workflows/buildchain.yml",
62
62
  ".github/workflows/buildchain-recover.yml",
63
63
  ".github/workflows/public-ops-pipeline.yml",
64
64
  ".github/workflows/public-ops-recover.yml",
65
- ".github/workflows/public-release-artifact-attestation.yml",
65
+ ".github/workflows/.release-artifact-attestation.yml",
66
66
  "actions/build/artifact/prepare-attestation/action.yml",
67
67
  "actions/build/artifact/prepare-attestation/index.js",
68
- ".github/workflows/public-release-propagation.yml",
68
+ ".github/workflows/.release-propagation.yml",
69
69
  "actions/build/credential/macos-island/action.yml",
70
70
  "actions/build/credential/macos-island/index.js",
71
71
  "actions/release/promotion/ref/action.yml",
@@ -354,7 +354,7 @@ export function createBuildchainPublicClaimDefinitions() {
354
354
  "packages/core/contracts/commands/buildchain-contract-lock.mjs",
355
355
  ".github/workflows/.build.yml",
356
356
  ".github/workflows/.release-promote.yml",
357
- ".github/workflows/public-release-promote.yml",
357
+ ".github/workflows/.release-candidate-promote.yml",
358
358
  "docs/reusable-build-surface.md",
359
359
  ],
360
360
  artifactPaths: [
@@ -370,7 +370,7 @@ export function createBuildchainPublicClaimDefinitions() {
370
370
  "actions/release/promotion/ref/action.yml",
371
371
  "packages/core/release/commands/ensure-github-release.mjs",
372
372
  ".github/workflows/.release-promote.yml",
373
- ".github/workflows/public-release-promote.yml",
373
+ ".github/workflows/.release-candidate-promote.yml",
374
374
  "docs/release-governance.md",
375
375
  ],
376
376
  artifactPaths: [
@@ -384,7 +384,7 @@ export function createBuildchainPublicClaimDefinitions() {
384
384
  sourcePaths: [
385
385
  "packages/core/release/release-propagation.js",
386
386
  "packages/core/release/commands/release-propagation.mjs",
387
- ".github/workflows/public-release-propagation.yml",
387
+ ".github/workflows/.release-propagation.yml",
388
388
  "docs/release-propagation.md",
389
389
  ],
390
390
  artifactPaths: [
@@ -399,7 +399,7 @@ export function createBuildchainPublicClaimDefinitions() {
399
399
  "packages/core/publication/commands/npm-publish-transaction.mjs",
400
400
  "actions/release/promotion/ref/index.js",
401
401
  ".github/workflows/.release-promote.yml",
402
- ".github/workflows/public-release-promote.yml",
402
+ ".github/workflows/.release-candidate-promote.yml",
403
403
  "docs/publish-transaction.md",
404
404
  ],
405
405
  artifactPaths: [
@@ -1,12 +1,4 @@
1
- import {
2
- printJson,
3
- readBooleanFlag,
4
- readFlag,
5
- readJsonInput,
6
- readRepeatedFlag,
7
- readRepeatedJsonInputs,
8
- writeJsonFile,
9
- } from "../../contracts/cli/options.mjs";
1
+ import { printJson } from "../../contracts/cli/options.mjs";
10
2
 
11
3
  export function printKfdSchemaOrJson({ result, json }) {
12
4
  if (json) {
@@ -1,17 +1,5 @@
1
1
  import path from "node:path";
2
- import {
3
- checkKfdUpstreamFacts,
4
- collectKfdAggregate,
5
- collectKfdStatus,
6
- collectKfdUpstreamFacts,
7
- kfd1,
8
- kfd2,
9
- layout as buildchainLayout,
10
- listKfdUpstreamRoles,
11
- listKfdSchemas,
12
- normalizeKfdStandardId,
13
- readKfdSchema,
14
- } from "../kfd.js";
2
+ import { readKfdSchema } from "../kfd.js";
15
3
  import {
16
4
  evaluateKfdProductGate,
17
5
  validateKfdProductGateResult,
@@ -21,8 +9,6 @@ import {
21
9
  readBooleanFlag,
22
10
  readFlag,
23
11
  readJsonInput,
24
- readRepeatedFlag,
25
- readRepeatedJsonInputs,
26
12
  writeJsonFile,
27
13
  } from "../../contracts/cli/options.mjs";
28
14
  import { printKfdSchemaOrJson } from "./output.mjs";
@@ -1,13 +1,10 @@
1
1
  import { initBuildchainRepo } from "../commands/init-repo.mjs";
2
2
  import { validateBuildchainConfig } from "../../consumer/buildchain-config.js";
3
+ import { validateConsumerWiring } from "../../consumer/contract/local-validation.js";
3
4
  import {
4
5
  printJson,
5
6
  readBooleanFlag,
6
7
  readFlag,
7
- readJsonInput,
8
- readRepeatedFlag,
9
- readRepeatedJsonInputs,
10
- writeJsonFile,
11
8
  } from "../../contracts/cli/options.mjs";
12
9
 
13
10
  export async function handleInitCommand(args) {
@@ -28,11 +25,13 @@ export async function handleValidateCommand(args) {
28
25
  .split(",")
29
26
  .map((entry) => entry.trim())
30
27
  .filter(Boolean);
31
- printJson(
32
- validateBuildchainConfig(readFlag(args, "cwd", process.cwd()), {
33
- requireVersionState: readBooleanFlag(args, "require-version-state"),
34
- requireLifecycleStages: lifecycleStages,
35
- }),
36
- );
28
+ const cwd = readFlag(args, "cwd", process.cwd());
29
+ const result = validateBuildchainConfig(cwd, {
30
+ requireVersionState: readBooleanFlag(args, "require-version-state"),
31
+ requireLifecycleStages: lifecycleStages,
32
+ });
33
+ if (result.config?.schema === 2)
34
+ result.consumer = validateConsumerWiring(cwd, result.config.path);
35
+ printJson(result);
37
36
  return;
38
37
  }
@@ -1,23 +1,10 @@
1
1
  import path from "node:path";
2
- import {
3
- checkKfdUpstreamFacts,
4
- collectKfdAggregate,
5
- collectKfdStatus,
6
- collectKfdUpstreamFacts,
7
- kfd1,
8
- kfd2,
9
- layout as buildchainLayout,
10
- listKfdUpstreamRoles,
11
- listKfdSchemas,
12
- normalizeKfdStandardId,
13
- readKfdSchema,
14
- } from "../kfd.js";
2
+ import { kfd1, kfd2, readKfdSchema } from "../kfd.js";
15
3
  import {
16
4
  printJson,
17
5
  readBooleanFlag,
18
6
  readFlag,
19
7
  readJsonInput,
20
- readRepeatedFlag,
21
8
  readRepeatedJsonInputs,
22
9
  writeJsonFile,
23
10
  } from "../../contracts/cli/options.mjs";