@kungfu-tech/buildchain 4.0.2-alpha.9 → 4.0.3-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +14 -5
- package/CONTRIBUTING.md +58 -0
- package/README.md +3 -3
- package/actions/promote-buildchain-ref/README.md +1 -1
- package/actions/release-candidate-promote/README.md +31 -0
- package/architecture/agent-change-map.md +190 -126
- package/architecture/{v4-architecture-constitution.md → architecture-constitution.md} +33 -30
- package/architecture/{v3-core-mechanism-inventory.md → baseline-core-mechanism-inventory.md} +1 -1
- package/architecture/{v4-bootstrap-authority.json → bootstrap-authority.json} +3 -3
- package/architecture/{v3-v4-capability-closure.md → capability-parity-closure.md} +3 -3
- package/architecture/{v3-v4-live-capability-inventory.json → capability-parity-live-capability-inventory.json} +4 -4
- package/architecture/{v4-capability-state-machine-manifest.json → capability-state-machine-manifest.json} +2 -2
- package/architecture/{v4-capability-state-machine-manifest.schema.json → capability-state-machine-manifest.schema.json} +2 -2
- package/architecture/ci-lane-change-budget.json +384 -0
- package/architecture/{v4-cross-platform-adopter-qualification.json → cross-platform-adopter-qualification.json} +4 -4
- package/architecture/{v4-delivery-authority-parity.json → delivery-authority-parity.json} +17 -17
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.json → delivery-warrant-shadow-bootstrap-plan.json} +4 -4
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.md → delivery-warrant-shadow-bootstrap-plan.md} +7 -7
- package/architecture/{v4-floating-consumer-policy.json → floating-consumer-policy.json} +2 -2
- package/architecture/{v4-floating-consumer-policy.md → floating-consumer-policy.md} +1 -1
- package/architecture/implementation-naming.json +1273 -0
- package/architecture/internal-capabilities.json +201 -154
- package/architecture/maintainability-debt.json +205 -146
- package/architecture/maintainability-policy.json +37 -33
- package/architecture/{v4-next-development-parity.json → next-development-parity.json} +12 -12
- package/architecture/{v4-partial-mutation-recovery-qualification.json → partial-mutation-recovery-qualification.json} +8 -5
- package/architecture/{v4-platform-stage-checkpoints.json → platform-stage-checkpoints.json} +3 -3
- package/architecture/{v4-provider-operation-journal-contract.json → provider-operation-journal-contract.json} +10 -7
- package/architecture/publication-facade-patches.json +64 -0
- package/architecture/{v4-publication-rehearsal-parity.json → publication-rehearsal-parity.json} +4 -4
- package/architecture/{v4-release-activation-shadow-domain.json → release-activation-shadow-domain.json} +9 -6
- package/architecture/release-tail-contract-inventory.json +6 -6
- package/architecture/{v4-release-topology.json → release-topology.json} +163 -72
- package/architecture/{v4-release-train-parity.json → release-train-parity.json} +2 -2
- package/architecture/{v4-runtime-ref-resume-authority.json → runtime-ref-resume-authority.json} +1 -1
- package/architecture/{v4-runtime-semantic-closure.json → runtime-semantic-closure.json} +2 -2
- package/architecture/{v4-rust-libnode-bridge-evaluation.json → rust-libnode-bridge-evaluation.json} +3 -3
- package/architecture/{v4-rust-libnode-bridge-spike.md → rust-libnode-bridge-spike.md} +6 -6
- package/architecture/rust-wasm-production-authority.json +58 -0
- package/architecture/{v4-stable-publication-fence.json → stable-publication-fence.json} +7 -4
- package/architecture/{v4-stage-capsule-contract.json → stage-capsule-contract.json} +1 -1
- package/architecture/{v4-stage-capsule-qualification.json → stage-capsule-qualification.json} +8 -8
- package/architecture/{v4-stage-capsule-resume-planner.json → stage-capsule-resume-planner.json} +2 -2
- package/architecture/{v4-stage-capsule-store-contract.json → stage-capsule-store-contract.json} +4 -4
- package/architecture/{v4-tail-reseal-parity.json → tail-reseal-parity.json} +35 -33
- package/architecture/universal-workflow-bootstrap.json +176 -0
- package/architecture/universal-workflow-fault-campaign.json +72 -0
- package/architecture/universal-workflow-train-admission.json +40 -0
- package/architecture/workflow-taxonomy.json +1462 -0
- package/bin/buildchain.mjs +10 -10
- package/bin/internal/adopter-delivery-cli.mjs +9 -9
- package/contracts/buildchain-v2-residuals-v1.json +57 -48
- package/contracts/dev-delivery-authority-v2.schema.json +16 -2
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
- package/contracts/v4-canonical-contracts-v1.schema.json +1 -0
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.lock +1 -1
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.toml +1 -1
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/src/main.rs +3 -3
- package/dist/site/buildchain-contract.json +98 -53
- package/dist/site/buildchain-site.json +351 -102
- package/dist/site/capability-registry.json +7 -7
- package/dist/site/controller-registry.json +50 -13
- package/dist/site/kfd-claims.json +2773 -1052
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +14 -14
- package/dist/site/node-api-registry.json +13176 -10733
- package/dist/site/page-registry.json +332 -83
- package/dist/site/public-surface-audit.json +3227 -1222
- package/dist/site/publication-authority-registry.json +1135 -363
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +18 -9
- package/dist/site/schemas/dev-delivery-authority-v2.schema.json +16 -2
- package/dist/site/site-manifest.json +18 -18
- package/dist/site/workflow-registry.json +5367 -1931
- package/docs/MAP.md +5 -3
- package/docs/auditable-demo.md +1 -1
- package/docs/cli.md +21 -8
- package/docs/dev-delivery-warrant.md +1 -1
- package/docs/engineering-housekeeper.md +3 -3
- package/docs/kfd-support.md +26 -2
- package/docs/next-development-transition.md +26 -3
- package/docs/node-api-reference.md +618 -358
- package/docs/oci-publication.md +173 -0
- package/docs/publication-authority.md +2 -2
- package/docs/publish-transaction.md +36 -3
- package/docs/release-candidate.md +3 -3
- package/docs/release-flow.md +67 -19
- package/docs/release-governance.md +8 -8
- package/docs/release-passport.md +27 -2
- package/docs/reusable-build-surface.md +17 -1
- package/docs/v4-adopter-delivery.md +4 -4
- package/docs/v4-canonical-contracts.md +7 -7
- package/docs/v4-delivery-warrant-read-candidate.md +3 -3
- package/docs/v4-delivery-warrant-semantic-diff.md +3 -3
- package/docs/v4-production-release.md +77 -8
- package/docs/v4-publication-rehearsal.md +3 -3
- package/docs/v4-runtime-ref-resume-authority.md +2 -2
- package/docs/v4-rust-wasm-production-authority.md +58 -0
- package/docs/v4-stage-capsule.md +9 -9
- package/docs/v4-tail-reseal.md +2 -2
- package/docs/workflow-catalog.md +155 -0
- package/docs/workflow-path-migration.md +109 -0
- package/package.json +39 -24
- package/packages/compatibility/adopter-delivery.js +16 -0
- package/packages/compatibility/cross-platform-adopter-qualification.js +12 -0
- package/packages/compatibility/floating-consumer-policy.js +14 -0
- package/packages/compatibility/publication-qualification.js +11 -0
- package/packages/compatibility/publication-rehearsal.js +18 -0
- package/packages/compatibility/runtime-ref-resume-authority.js +13 -0
- package/packages/compatibility/tail-reseal-receipt.js +7 -0
- package/packages/compatibility/tail-reseal.js +11 -0
- package/packages/core/{v4-adopter-delivery-parity.js → adopter-delivery-parity.js} +12 -12
- package/packages/core/{v4-adopter-delivery.js → adopter-delivery.js} +24 -24
- package/packages/core/artifact-verification-envelope.js +5 -5
- package/packages/core/buildchain-contract.js +6 -6
- package/packages/core/buildchain-domain.wasm +0 -0
- package/packages/core/buildchain-kfd-claims.js +2 -2
- package/packages/core/buildchain-publication-authority.js +43 -26
- package/packages/core/{v4-canonical-contracts.js → canonical-contracts.js} +39 -103
- package/packages/core/ci-lane-change-budget.js +14 -1
- package/packages/core/controller-evidence.js +4 -1
- package/packages/core/{v4-cross-platform-adopter-qualification.js → cross-platform-adopter-qualification.js} +19 -19
- package/packages/core/{v4-delivery-warrant-fixture-runner.js → delivery-warrant-fixture-runner.js} +36 -32
- package/packages/core/{v4-delivery-warrant-read-candidate.js → delivery-warrant-read-candidate.js} +40 -40
- package/packages/core/{v4-delivery-warrant-semantic-diff-gate.js → delivery-warrant-semantic-diff-gate.js} +58 -59
- package/packages/core/{v4-delivery-warrant-shadow-adapter.js → delivery-warrant-shadow-adapter.js} +15 -15
- package/packages/core/dev-delivery-candidate-identity.js +40 -6
- package/packages/core/dev-delivery-execution-transfer.js +6 -6
- package/packages/core/dev-delivery-native-proof.js +12 -8
- package/packages/core/dev-delivery-warrant-legacy-recovery.js +1 -1
- package/packages/core/dev-delivery-warrant-native-compatibility.js +4 -4
- package/packages/core/dev-delivery-warrant-state.js +14 -15
- package/packages/core/dev-delivery-warrant.js +15 -5
- package/packages/core/domain-wasm-artifact.js +7 -0
- package/packages/core/domain-wasm.js +216 -0
- package/packages/core/{v4-floating-consumer-evidence.js → floating-consumer-evidence.js} +14 -14
- package/packages/core/{v4-floating-consumer-policy.js → floating-consumer-policy.js} +28 -30
- package/packages/core/{v4-floating-consumer-release-passport.js → floating-consumer-release-passport.js} +25 -25
- package/packages/core/github-governance-authority.js +4 -4
- package/packages/core/index.js +4 -8
- package/packages/core/kfd-adopter-manifest.js +46 -47
- package/packages/core/next-development-projection.js +26 -3
- package/packages/core/next-development-transition.js +5 -6
- package/packages/core/oci-compose-qualification.js +143 -0
- package/packages/core/oci-publication-bundle.js +281 -0
- package/packages/core/oci-publication-graph.js +206 -0
- package/packages/core/paper-agent-entry.js +30 -4
- package/packages/core/paper-fleet.js +1 -1
- package/packages/core/paper-runtime-channels.js +348 -0
- package/packages/core/paper-scaffold-content.js +10 -0
- package/packages/core/paper.js +37 -71
- package/packages/core/partial-mutation-recovery-qualification.js +18 -0
- package/packages/core/{v4-platform-stage-checkpoints.js → platform-stage-checkpoints.js} +37 -37
- package/packages/core/product-publication.js +59 -0
- package/packages/core/{v4-protected-publication-source.js → protected-publication-source.js} +22 -24
- package/packages/core/provider-operation-journal.js +62 -0
- package/packages/core/{v4-provider-readback-idempotency.js → provider-readback-idempotency.js} +40 -125
- package/packages/core/public-export-compatibility.js +33 -0
- package/packages/core/publication-development.js +72 -0
- package/packages/core/{v4-publication-qualification.js → publication-qualification.js} +17 -17
- package/packages/core/{v4-publication-rehearsal-capsule.js → publication-rehearsal-capsule.js} +23 -23
- package/packages/core/publication-rehearsal-projection.js +2 -2
- package/packages/core/{v4-publication-rehearsal-provider-bindings.js → publication-rehearsal-provider-bindings.js} +4 -4
- package/packages/core/publication-rehearsal-runtime.js +21 -21
- package/packages/core/{v4-publication-rehearsal.js → publication-rehearsal.js} +33 -33
- package/packages/core/publication-sealed-bundle.js +78 -13
- package/packages/core/release-activation-shadow.js +32 -0
- package/packages/core/release-candidate.js +6 -6
- package/packages/core/release-invocation.js +64 -0
- package/packages/core/release-line-dry-run.js +1 -1
- package/packages/core/release-passport-contract.js +5 -5
- package/packages/core/release-passport.js +41 -40
- package/packages/core/release-tail-product-capabilities.js +9 -0
- package/packages/core/release-tail-provider-plane.js +68 -1048
- package/packages/core/{v4-runtime-ref-resume-authority.js → runtime-ref-resume-authority.js} +36 -40
- package/packages/core/{v4-runtime-selector-persistence.js → runtime-selector-persistence.js} +7 -7
- package/packages/core/stable-publication-fence.js +28 -0
- package/packages/core/{v4-stage-capsule-local-store.js → stage-capsule-local-store.js} +56 -54
- package/packages/core/{v4-stage-capsule-qualification-campaign.js → stage-capsule-qualification-campaign.js} +37 -38
- package/packages/core/{v4-stage-capsule-qualification.js → stage-capsule-qualification.js} +28 -29
- package/packages/core/{v4-stage-capsule-resume-planner.js → stage-capsule-resume-planner.js} +29 -29
- package/packages/core/{v4-stage-capsule-store.js → stage-capsule-store.js} +59 -56
- package/packages/core/{v4-stage-capsule.js → stage-capsule.js} +45 -45
- package/packages/core/{v4-tail-reseal-contract.js → tail-reseal-contract.js} +6 -6
- package/packages/core/{v4-tail-reseal-github.js → tail-reseal-github.js} +12 -12
- package/packages/core/{v4-tail-reseal-receipt.js → tail-reseal-receipt.js} +22 -22
- package/packages/core/{v4-tail-reseal.js → tail-reseal.js} +29 -29
- package/packages/core/universal-workflow-bootstrap.js +586 -0
- package/scripts/{v4-architecture.mjs → architecture.mjs} +6 -6
- package/scripts/binary-publication-evidence.mjs +135 -0
- package/scripts/{v4-bridge-bootstrap.mjs → bridge-bootstrap.mjs} +14 -18
- package/scripts/{v4-bridge-evidence.mjs → bridge-evidence.mjs} +8 -8
- package/scripts/build-contract-core.mjs +1 -14
- package/scripts/build-domain-wasm.mjs +177 -0
- package/scripts/{v3-v4-capability-catalog.mjs → capability-parity-catalog.mjs} +19 -19
- package/scripts/check-action-bundles.mjs +12 -2
- package/scripts/{check-v3-v4-capability-inventory.mjs → check-capability-parity-inventory.mjs} +42 -42
- package/scripts/check-ci-lane-change-budget.mjs +4 -1
- package/scripts/check-core-mechanism-inventory.mjs +8 -4
- package/scripts/{check-v4-floating-consumer-policy-contract.mjs → check-floating-consumer-policy-contract.mjs} +10 -10
- package/scripts/check-implementation-naming.mjs +135 -0
- package/scripts/check-inventory.mjs +39 -47
- package/scripts/check-maintainability.mjs +25 -115
- package/scripts/{check-v4-public-dogfood-contract.mjs → check-public-dogfood-contract.mjs} +37 -24
- package/scripts/{check-v4-release-topology.mjs → check-release-topology.mjs} +131 -52
- package/scripts/{check-v4-runtime-semantic-closure.mjs → check-runtime-semantic-closure.mjs} +23 -17
- package/scripts/check-universal-workflow-bootstrap.mjs +266 -0
- package/scripts/check-workflow-taxonomy.mjs +6 -0
- package/scripts/{v4-consumer-policy.mjs → consumer-policy.mjs} +15 -15
- package/scripts/copy-domain-wasm.mjs +14 -0
- package/scripts/{v4-cross-platform-adopter-qualification.mjs → cross-platform-adopter-qualification.mjs} +9 -9
- package/scripts/{v4-declarative-promotion-admission.mjs → declarative-promotion-admission.mjs} +4 -4
- package/scripts/dev-delivery-authority-command-adapters.mjs +1 -1
- package/scripts/dev-delivery-authority.mjs +8 -8
- package/scripts/dev-delivery-source-proof-reuse.mjs +2 -1
- package/scripts/dev-delivery-warrant-options.mjs +15 -10
- package/scripts/dev-delivery-warrant-store.mjs +98 -13
- package/scripts/dev-delivery-warrant-transition.mjs +109 -0
- package/scripts/dev-delivery-warrant.mjs +80 -103
- package/scripts/dev-pr-auto-merge.mjs +15 -15
- package/scripts/dev-pr-delivery-warrant.mjs +1 -1
- package/scripts/generate-channel-build-workflow.mjs +7 -2
- package/scripts/generate-channel-promotion-workflow.mjs +19 -34
- package/scripts/generate-release-candidate-passport.mjs +23 -23
- package/scripts/generate-site-bundle.mjs +28 -28
- package/scripts/generate-universal-workflow-facades.mjs +498 -0
- package/scripts/generate-workflow-taxonomy.mjs +25 -0
- package/scripts/github-output.mjs +31 -0
- package/scripts/{v4-host-adapter.mjs → host-adapter.mjs} +1 -1
- package/scripts/implementation-references.mjs +25 -0
- package/scripts/init-repo.mjs +1 -1
- package/scripts/maintainability-metrics.mjs +16 -5
- package/scripts/maintainability-public-surface.mjs +115 -0
- package/scripts/next-development-review.mjs +313 -0
- package/scripts/oci-compose-preview.mjs +261 -0
- package/scripts/paper-work-fleet-cli.mjs +2 -0
- package/scripts/{v4-platform-stage-checkpoint-rehearsal.mjs → platform-stage-checkpoint-rehearsal.mjs} +17 -17
- package/scripts/{v4-product-publication-intent.mjs → product-publication-intent.mjs} +28 -13
- package/scripts/publication-candidate-kind.mjs +93 -0
- package/scripts/publication-candidate-sealer.mjs +16 -1
- package/scripts/{v4-publication-rehearsal-fixture.mjs → publication-rehearsal-fixture.mjs} +5 -5
- package/scripts/publication-settlement.mjs +211 -0
- package/scripts/release-asset-client.mjs +91 -0
- package/scripts/{v4-release-candidate-adapter.mjs → release-candidate-adapter.mjs} +4 -4
- package/scripts/release-candidate-resolver.mjs +24 -35
- package/scripts/release-tail.mjs +5 -5
- package/scripts/resume-from-candidate-run.mjs +35 -42
- package/scripts/site-capability-metadata.mjs +9 -0
- package/scripts/source-verification-evidence.mjs +344 -0
- package/scripts/stable-candidate-qualification.mjs +1 -1
- package/scripts/{v4-stage-capsule-qualification.mjs → stage-capsule-qualification.mjs} +62 -62
- package/scripts/{v4-stage-capsule-resume-rehearsal.mjs → stage-capsule-resume-rehearsal.mjs} +6 -6
- package/scripts/{v4-tail-reseal-macos-rehearsal.mjs → tail-reseal-macos-rehearsal.mjs} +9 -9
- package/scripts/{v4-tail-reseal.mjs → tail-reseal.mjs} +19 -19
- package/scripts/universal-facade-maintainability.mjs +91 -0
- package/scripts/universal-workflow-backflow.mjs +212 -0
- package/scripts/universal-workflow-engine.mjs +620 -0
- package/scripts/universal-workflow-self-dogfood.mjs +205 -0
- package/scripts/verify-version-state-delta.mjs +175 -0
- package/scripts/{v4-warrant-shadow-plan.mjs → warrant-shadow-plan.mjs} +6 -6
- package/scripts/workflow-taxonomy.mjs +507 -0
- package/templates/native-dev-delivery.yml +4 -7
- package/templates/universal-buildchain-bootstrap-recovery.yml +282 -0
- package/templates/universal-buildchain-bootstrap.yml +28 -0
- package/actions/v4-release-candidate-promote/README.md +0 -3
- package/packages/core/v4-partial-mutation-recovery-qualification.js +0 -395
- package/packages/core/v4-product-publication.js +0 -387
- package/packages/core/v4-provider-operation-journal.js +0 -531
- package/packages/core/v4-release-activation-shadow.js +0 -519
- package/packages/core/v4-release-invocation.js +0 -425
- package/packages/core/v4-stable-publication-fence.js +0 -357
- /package/architecture/{v4-adopter-delivery-parity.json → adopter-delivery-parity.json} +0 -0
- /package/architecture/{v3-core-mechanism-inventory.json → baseline-core-mechanism-inventory.json} +0 -0
- /package/architecture/{v4-canonical-contract-fixtures.json → canonical-contract-fixtures.json} +0 -0
- /package/architecture/{v4-compatibility-facts-parity.json → compatibility-facts-parity.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.schema.json → delivery-warrant-shadow-bootstrap-plan.schema.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-fixtures.json → delivery-warrant-shadow-fixtures.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-fixtures.schema.json → delivery-warrant-shadow-fixtures.schema.json} +0 -0
- /package/architecture/{v4-exception-ledger.json → exception-ledger.json} +0 -0
- /package/architecture/{v4-exception-ledger.schema.json → exception-ledger.schema.json} +0 -0
- /package/architecture/{v4-release-invocation-fixtures.json → release-invocation-fixtures.json} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import fs from "node:fs";
|
|
4
|
+
import { writeWorkflowSource } from "./workflow-taxonomy.mjs";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { migrateUniversalWorkflowFacade } from "./generate-universal-workflow-facades.mjs";
|
|
6
8
|
|
|
7
9
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
8
10
|
const sourcePath = path.join(root, ".github/workflows/.release-candidate-promote.yml");
|
|
@@ -208,29 +210,29 @@ function consumerAdmissionJob() {
|
|
|
208
210
|
with:
|
|
209
211
|
repository: \${{ inputs.buildchain-repository }}
|
|
210
212
|
ref: \${{ needs.resolve-promotion.outputs.router-sha }}
|
|
211
|
-
path: .buildchain/
|
|
213
|
+
path: .buildchain/policy-runtime
|
|
212
214
|
persist-credentials: false
|
|
213
215
|
- name: Enforce v4 floating consumer policy
|
|
214
216
|
id: policy
|
|
215
217
|
env:
|
|
216
218
|
BUILDCHAIN_CONSUMER_ROOT: .buildchain/consumer
|
|
217
|
-
BUILDCHAIN_INVOCATION_SOURCE_PATH: \${{ inputs.publication-publisher-workflow-path == '.github/workflows/
|
|
219
|
+
BUILDCHAIN_INVOCATION_SOURCE_PATH: \${{ inputs.publication-publisher-workflow-path == '.github/workflows/self-ops-promotion-recovery.yml' && '.github/workflows/release-candidate-promote.yml' || inputs.publication-publisher-workflow-path }}
|
|
218
220
|
BUILDCHAIN_EXPECTED_INVOCATION_CHANNEL: \${{ needs.resolve-promotion.outputs.channel }}
|
|
219
|
-
BUILDCHAIN_INVOKED_WORKFLOW: \${{ inputs.publication-publisher-workflow-path == '.github/workflows/
|
|
221
|
+
BUILDCHAIN_INVOKED_WORKFLOW: \${{ inputs.publication-publisher-workflow-path == '.github/workflows/self-ops-promotion-recovery.yml' && '.github/workflows/.release-candidate-promote.yml' || '.github/workflows/release-candidate-promote.yml' }}
|
|
220
222
|
BUILDCHAIN_WORKFLOW_SHA: \${{ needs.resolve-promotion.outputs.router-sha }}
|
|
221
223
|
BUILDCHAIN_RUNTIME_SHA: \${{ needs.resolve-promotion.outputs.router-sha }}
|
|
222
224
|
BUILDCHAIN_STABLE_CONTRACT_LOCK_PATH: \${{ inputs.buildchain-stable-contract-lock-path }}
|
|
223
225
|
BUILDCHAIN_ALPHA_CONTRACT_LOCK_PATH: \${{ inputs.buildchain-alpha-contract-lock-path }}
|
|
224
|
-
BUILDCHAIN_V4_POLICY_RECEIPT_PATH: .buildchain/evidence/
|
|
226
|
+
BUILDCHAIN_V4_POLICY_RECEIPT_PATH: .buildchain/evidence/consumer-policy-receipt.json
|
|
225
227
|
run: >-
|
|
226
|
-
node .buildchain/
|
|
228
|
+
node .buildchain/policy-runtime/scripts/consumer-policy.mjs scan
|
|
227
229
|
--source-sha "\${{ inputs.target-sha || github.sha }}"
|
|
228
230
|
|
|
229
231
|
- name: Upload rooted consumer admission receipt
|
|
230
232
|
uses: actions/upload-artifact@v7.0.1
|
|
231
233
|
with:
|
|
232
234
|
name: v4-consumer-policy-release-candidate-promote-\${{ github.sha }}
|
|
233
|
-
path: .buildchain/consumer/.buildchain/evidence/
|
|
235
|
+
path: .buildchain/consumer/.buildchain/evidence/consumer-policy-receipt.json
|
|
234
236
|
if-no-files-found: error
|
|
235
237
|
|
|
236
238
|
- name: Authorize transient v4 runtime selection
|
|
@@ -238,18 +240,18 @@ function consumerAdmissionJob() {
|
|
|
238
240
|
if: \${{ needs.resolve-promotion.outputs.override-used == 'true' }}
|
|
239
241
|
uses: actions/github-script@v8
|
|
240
242
|
env:
|
|
241
|
-
BUILDCHAIN_RUNTIME_AUTHORIZATION_PATH: .buildchain/consumer/.buildchain/evidence/
|
|
243
|
+
BUILDCHAIN_RUNTIME_AUTHORIZATION_PATH: .buildchain/consumer/.buildchain/evidence/runtime-authorization.json
|
|
242
244
|
with:
|
|
243
245
|
script: |
|
|
244
|
-
const script = require(process.env.GITHUB_WORKSPACE + "/.buildchain/
|
|
246
|
+
const script = require(process.env.GITHUB_WORKSPACE + "/.buildchain/policy-runtime/scripts/authorize-promotion-runtime-override.cjs");
|
|
245
247
|
const result = await script.authorizePromotionRuntimeOverride({
|
|
246
248
|
github,
|
|
247
249
|
context,
|
|
248
250
|
request: {
|
|
249
251
|
consumerRoot: process.env.GITHUB_WORKSPACE + "/.buildchain/consumer",
|
|
250
|
-
runtimeModulePath: process.env.GITHUB_WORKSPACE + "/.buildchain/
|
|
252
|
+
runtimeModulePath: process.env.GITHUB_WORKSPACE + "/.buildchain/policy-runtime/packages/core/runtime-ref-resume-authority.js",
|
|
251
253
|
runtimeRepository: "\${{ inputs.buildchain-repository }}",
|
|
252
|
-
consumerPolicyReceiptPath: process.env.GITHUB_WORKSPACE + "/.buildchain/consumer/.buildchain/evidence/
|
|
254
|
+
consumerPolicyReceiptPath: process.env.GITHUB_WORKSPACE + "/.buildchain/consumer/.buildchain/evidence/consumer-policy-receipt.json",
|
|
253
255
|
consumerPolicyReceiptRoot: "\${{ steps.policy.outputs.v4-consumer-policy-receipt-root }}",
|
|
254
256
|
sourceSha: "\${{ inputs.target-sha || github.sha }}",
|
|
255
257
|
requestedRef: "\${{ needs.resolve-promotion.outputs.runtime-ref }}",
|
|
@@ -270,7 +272,7 @@ function consumerAdmissionJob() {
|
|
|
270
272
|
uses: actions/upload-artifact@v7.0.1
|
|
271
273
|
with:
|
|
272
274
|
name: v4-runtime-authorization-release-candidate-promote-\${{ github.run_id }}
|
|
273
|
-
path: .buildchain/consumer/.buildchain/evidence/
|
|
275
|
+
path: .buildchain/consumer/.buildchain/evidence/runtime-authorization.json
|
|
274
276
|
if-no-files-found: error
|
|
275
277
|
`;
|
|
276
278
|
}
|
|
@@ -302,7 +304,7 @@ export function generateChannelPromotionWorkflow(source, { major = 2, shellRouti
|
|
|
302
304
|
if (!inputNames.includes(required)) throw new Error(`advanced promotion workflow missing input: ${required}`);
|
|
303
305
|
}
|
|
304
306
|
const invokeForwarded = routedInputs(inputNames, alphaRoute, major);
|
|
305
|
-
return `# Generated by scripts/generate-channel-promotion-workflow.mjs. Do not edit directly.
|
|
307
|
+
return migrateUniversalWorkflowFacade(`# Generated by scripts/generate-channel-promotion-workflow.mjs. Do not edit directly.
|
|
306
308
|
name: Release Candidate Promote
|
|
307
309
|
|
|
308
310
|
on:
|
|
@@ -314,16 +316,7 @@ ${secrets.trimEnd()}
|
|
|
314
316
|
outputs:
|
|
315
317
|
${publicOutputs(outputs)}
|
|
316
318
|
|
|
317
|
-
|
|
318
|
-
actions: write
|
|
319
|
-
artifact-metadata: write
|
|
320
|
-
attestations: write
|
|
321
|
-
checks: write
|
|
322
|
-
contents: write
|
|
323
|
-
id-token: write
|
|
324
|
-
issues: write
|
|
325
|
-
pull-requests: write
|
|
326
|
-
|
|
319
|
+
# Provider authority is inherited from the explicit caller envelope.
|
|
327
320
|
jobs:
|
|
328
321
|
resolve-promotion:
|
|
329
322
|
name: Resolve promotion workflow shell and runtime
|
|
@@ -358,7 +351,7 @@ jobs:
|
|
|
358
351
|
run: |
|
|
359
352
|
set -euo pipefail
|
|
360
353
|
repository="\${BUILDCHAIN_ROUTER_REPOSITORY}"
|
|
361
|
-
ref="\${BUILDCHAIN_ROUTER_REF}"
|
|
354
|
+
ref="\${BUILDCHAIN_ROUTER_REF:-${alphaRoute.logicalRef}}"
|
|
362
355
|
ref="\${ref#refs/heads/}"
|
|
363
356
|
ref="\${ref#refs/tags/}"
|
|
364
357
|
if [[ ! "\${repository}" =~ ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ || -z "\${ref}" || "\${ref}" = /* || "\${ref}" = *..* ]]; then
|
|
@@ -501,19 +494,11 @@ ${consumerAdmissionJob()}
|
|
|
501
494
|
name: Invoke the single v4 publisher adapter
|
|
502
495
|
needs: [resolve-promotion, consumer-admission]
|
|
503
496
|
uses: kungfu-systems/buildchain/${alphaRoute.workflowPath}@${alphaRoute.callRef}
|
|
504
|
-
|
|
505
|
-
actions: write
|
|
506
|
-
artifact-metadata: write
|
|
507
|
-
attestations: write
|
|
508
|
-
checks: write
|
|
509
|
-
contents: write
|
|
510
|
-
id-token: write
|
|
511
|
-
issues: write
|
|
512
|
-
pull-requests: write
|
|
497
|
+
# Provider authority is inherited from the explicit caller envelope.
|
|
513
498
|
with:
|
|
514
499
|
${invokeForwarded}
|
|
515
500
|
secrets: inherit
|
|
516
|
-
|
|
501
|
+
`, ".github/workflows/release-candidate-promote.yml");
|
|
517
502
|
}
|
|
518
503
|
|
|
519
504
|
function main() {
|
|
@@ -531,7 +516,7 @@ function main() {
|
|
|
531
516
|
}
|
|
532
517
|
return;
|
|
533
518
|
}
|
|
534
|
-
|
|
519
|
+
writeWorkflowSource(root, path.relative(root, targetPath), generated);
|
|
535
520
|
}
|
|
536
521
|
|
|
537
522
|
const isMain = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
@@ -4,11 +4,11 @@ import path from "node:path";
|
|
|
4
4
|
import { execFileSync } from "node:child_process";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
6
6
|
import { createReleaseCandidatePassport, validateReleaseCandidatePassport } from "../packages/core/release-candidate.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
7
|
+
import { scanFloatingConsumerPolicy, consumerPolicyScannerRoot } from "../packages/core/floating-consumer-policy.js";
|
|
8
|
+
import { domainContentRoot } from "../packages/core/canonical-contracts.js";
|
|
9
|
+
import { STAGE_CAPSULE_CONTRACT, STAGE_CAPSULE_IDENTITY_CONTRACT, stageCapsuleIdentityRoot, stageCapsuleRoot, validateStageCapsule } from "../packages/core/stage-capsule.js";
|
|
10
|
+
import { runtimeResumeDocumentRoot } from "../packages/core/runtime-ref-resume-authority.js";
|
|
11
|
+
import { createDomainPublicationQualificationReceipt } from "../packages/core/publication-qualification.js";
|
|
12
12
|
import { writeGitHubOutputs } from "./build-contract-core.mjs";
|
|
13
13
|
|
|
14
14
|
const env = (name, fallback = "") => process.env[name] || fallback;
|
|
@@ -37,12 +37,12 @@ export function createReleaseCandidateStageCapsules({
|
|
|
37
37
|
const coordinate = coordinateByPlatform.get(platform.platformId);
|
|
38
38
|
if (!coordinate || coordinate.name !== platform.artifactName) throw new Error(`Stage Capsule coordinate missing for ${platform.platformId}`);
|
|
39
39
|
const manifest = readJsonFile(platform.manifestPath);
|
|
40
|
-
return { role: platform.artifactName, platform: platform.platformId, artifactRoot: coordinate.digest, manifestRoot:
|
|
40
|
+
return { role: platform.artifactName, platform: platform.platformId, artifactRoot: coordinate.digest, manifestRoot: domainContentRoot("stage-capsule-artifact-manifest", manifest) };
|
|
41
41
|
});
|
|
42
42
|
const qualificationExpiresAt = coordinates.artifacts.map((entry) => entry.expiresAt).sort((left, right) => Date.parse(left) - Date.parse(right))[0];
|
|
43
|
-
const qualificationReceipt =
|
|
43
|
+
const qualificationReceipt = createDomainPublicationQualificationReceipt({
|
|
44
44
|
repository: passport.repository, candidateRoot: `sha256:${passport.candidateHash}`,
|
|
45
|
-
sourceSha: passport.source.headSha, sourceRoot:
|
|
45
|
+
sourceSha: passport.source.headSha, sourceRoot: domainContentRoot("candidate-identity", passport.source),
|
|
46
46
|
policyDigest: passport.consumerPolicy.receiptRoot, artifacts: qualificationArtifacts,
|
|
47
47
|
issuedAt: passport.createdAt || new Date(Date.parse(qualificationExpiresAt) - 86_400_000).toISOString(), expiresAt: qualificationExpiresAt,
|
|
48
48
|
});
|
|
@@ -57,13 +57,13 @@ export function createReleaseCandidateStageCapsules({
|
|
|
57
57
|
}
|
|
58
58
|
const manifest = readJsonFile(platform.manifestPath);
|
|
59
59
|
const identity = {
|
|
60
|
-
schema:
|
|
61
|
-
sourceRoot:
|
|
60
|
+
schema: STAGE_CAPSULE_IDENTITY_CONTRACT,
|
|
61
|
+
sourceRoot: domainContentRoot("candidate-identity", passport.source),
|
|
62
62
|
platform: platform.platformId,
|
|
63
|
-
platformRoot:
|
|
63
|
+
platformRoot: domainContentRoot("candidate-identity", manifest.platform),
|
|
64
64
|
stage: "verify",
|
|
65
65
|
toolchainRoots: [],
|
|
66
|
-
runtimeRoot:
|
|
66
|
+
runtimeRoot: domainContentRoot("candidate-identity", {
|
|
67
67
|
sha: passport.buildchain.sha,
|
|
68
68
|
}),
|
|
69
69
|
policyRoot: passport.consumerPolicy.receiptRoot,
|
|
@@ -73,11 +73,11 @@ export function createReleaseCandidateStageCapsules({
|
|
|
73
73
|
root: `sha256:${passport.candidateHash}`,
|
|
74
74
|
},
|
|
75
75
|
],
|
|
76
|
-
transformationRoot:
|
|
76
|
+
transformationRoot: domainContentRoot("candidate-identity", {
|
|
77
77
|
lifecycle: manifest.lifecycle,
|
|
78
78
|
summary: platform.summary,
|
|
79
79
|
}),
|
|
80
|
-
outputManifestRoot:
|
|
80
|
+
outputManifestRoot: domainContentRoot(
|
|
81
81
|
"stage-capsule-artifact-manifest",
|
|
82
82
|
{ artifact: coordinate, manifest },
|
|
83
83
|
),
|
|
@@ -85,24 +85,24 @@ export function createReleaseCandidateStageCapsules({
|
|
|
85
85
|
observationRoots: [
|
|
86
86
|
{
|
|
87
87
|
name: "provider-coordinate",
|
|
88
|
-
root:
|
|
88
|
+
root: domainContentRoot("provider-readback-sample", coordinate),
|
|
89
89
|
},
|
|
90
90
|
],
|
|
91
91
|
};
|
|
92
92
|
const capsule = {
|
|
93
|
-
schema:
|
|
93
|
+
schema: STAGE_CAPSULE_CONTRACT,
|
|
94
94
|
writerAuthority: "typescript-v3",
|
|
95
95
|
rustAuthority: "validation-only",
|
|
96
96
|
identity,
|
|
97
|
-
identityRoot:
|
|
97
|
+
identityRoot: stageCapsuleIdentityRoot(identity),
|
|
98
98
|
retentionPromise: {
|
|
99
99
|
class: "github-artifact",
|
|
100
100
|
retainUntil: coordinate.expiresAt,
|
|
101
101
|
},
|
|
102
102
|
capsuleRoot: `sha256:${"0".repeat(64)}`,
|
|
103
103
|
};
|
|
104
|
-
capsule.capsuleRoot =
|
|
105
|
-
|
|
104
|
+
capsule.capsuleRoot = stageCapsuleRoot(capsule);
|
|
105
|
+
validateStageCapsule(capsule);
|
|
106
106
|
return {
|
|
107
107
|
platform: platform.platformId,
|
|
108
108
|
artifactName: coordinate.name,
|
|
@@ -133,7 +133,7 @@ export function createReleaseCandidateStageCapsules({
|
|
|
133
133
|
publicationQualificationReceipt: qualificationReceipt,
|
|
134
134
|
capsules: entries,
|
|
135
135
|
};
|
|
136
|
-
return { ...body, root:
|
|
136
|
+
return { ...body, root: runtimeResumeDocumentRoot(body) };
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
function writeReleaseCandidateStageCapsules({
|
|
@@ -188,12 +188,12 @@ export function resolveLegacyConsumerPolicyReceipt(options = {}) {
|
|
|
188
188
|
if (!/^[0-9a-f]{40}$/u.test(options.runtimeRef || "") || options.runtimeRef !== options.runtimeSha || options.sourceTreeHash !== options.runtimeTreeHash()) return undefined;
|
|
189
189
|
const root = path.resolve(options.root || ".buildchain/runtime");
|
|
190
190
|
const alphaLock = readJsonFile(path.join(root, ".buildchain/alpha-contract-lock.json"));
|
|
191
|
-
const result =
|
|
191
|
+
const result = scanFloatingConsumerPolicy({
|
|
192
192
|
root, repository: options.repository, sourceSha: options.sourceSha,
|
|
193
193
|
invokedWorkflow: options.invokedWorkflow || ".github/workflows/build.yml", invocationSourcePath: options.invocationSourcePath,
|
|
194
194
|
expectedInvocationChannel: "alpha", resolvedWorkflowSha: alphaLock.buildchain?.resolvedSha,
|
|
195
|
-
resolvedRuntimeSha: options.runtimeSha, scannerRoot:
|
|
196
|
-
policy: readJsonFile(path.resolve(import.meta.dirname, "../architecture/
|
|
195
|
+
resolvedRuntimeSha: options.runtimeSha, scannerRoot: consumerPolicyScannerRoot(),
|
|
196
|
+
policy: readJsonFile(path.resolve(import.meta.dirname, "../architecture/floating-consumer-policy.json")),
|
|
197
197
|
});
|
|
198
198
|
if (!result.ok) throw new Error(`legacy floating-shell policy receipt invalid: ${result.failures.map(({ code }) => code).join(", ")}`);
|
|
199
199
|
return { receipt: result.receipt, receiptRoot: result.receiptRoot };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readWorkflowTaxonomy, workflowPath } from "./workflow-taxonomy.mjs";
|
|
2
3
|
import fs from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import crypto from "node:crypto";
|
|
@@ -50,31 +51,31 @@ const DEV_DELIVERY_AUTHORITY_SCHEMA =
|
|
|
50
51
|
"schemas/dev-delivery-authority-v2.schema.json";
|
|
51
52
|
const DEV_DELIVERY_AUTHORITY_SCHEMA_SOURCE =
|
|
52
53
|
"contracts/dev-delivery-authority-v2.schema.json";
|
|
53
|
-
const
|
|
54
|
+
const COMPATIBILITY_FACTS_SCHEMA =
|
|
54
55
|
"schemas/v4-compatibility-facts-v1.schema.json";
|
|
55
|
-
const
|
|
56
|
+
const COMPATIBILITY_FACTS_SCHEMA_SOURCE =
|
|
56
57
|
"contracts/v4-compatibility-facts-v1.schema.json";
|
|
57
|
-
const
|
|
58
|
+
const PUBLICATION_REHEARSAL_SCHEMA =
|
|
58
59
|
"schemas/v4-publication-rehearsal-capsule-v1.schema.json";
|
|
59
|
-
const
|
|
60
|
+
const PUBLICATION_REHEARSAL_SCHEMA_SOURCE =
|
|
60
61
|
"contracts/v4-publication-rehearsal-capsule-v1.schema.json";
|
|
61
|
-
const
|
|
62
|
+
const ADOPTER_DELIVERY_SCHEMA =
|
|
62
63
|
"schemas/v4-adopter-delivery-v1.schema.json";
|
|
63
|
-
const
|
|
64
|
+
const ADOPTER_DELIVERY_SCHEMA_SOURCE =
|
|
64
65
|
"contracts/v4-adopter-delivery-v1.schema.json";
|
|
65
66
|
const RELEASE_TAIL_CAPABILITIES_SCHEMA =
|
|
66
67
|
"schemas/release-tail-capabilities-v1.schema.json";
|
|
67
68
|
const RELEASE_TAIL_CAPABILITIES_SCHEMA_SOURCE =
|
|
68
69
|
"contracts/release-tail-capabilities-v1.schema.json";
|
|
69
|
-
const
|
|
70
|
+
const PUBLICATION_QUALIFICATION_SCHEMA =
|
|
70
71
|
"schemas/v4-publication-qualification-v1.schema.json";
|
|
71
|
-
const
|
|
72
|
+
const PUBLICATION_QUALIFICATION_SCHEMA_SOURCE =
|
|
72
73
|
"contracts/v4-publication-qualification-v1.schema.json";
|
|
73
74
|
const PUBLICATION_REHEARSAL_SITE_SCHEMAS = [
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
PUBLICATION_REHEARSAL_SCHEMA,
|
|
76
|
+
ADOPTER_DELIVERY_SCHEMA,
|
|
76
77
|
RELEASE_TAIL_CAPABILITIES_SCHEMA,
|
|
77
|
-
|
|
78
|
+
PUBLICATION_QUALIFICATION_SCHEMA,
|
|
78
79
|
];
|
|
79
80
|
const root = path.resolve(import.meta.dirname, "..");
|
|
80
81
|
const outputDir = path.join(root, "dist", "site");
|
|
@@ -105,10 +106,10 @@ function stableJson(value) {
|
|
|
105
106
|
|
|
106
107
|
function siteFileBytes(name, value) {
|
|
107
108
|
if (name === DEV_DELIVERY_AUTHORITY_SCHEMA) return readText(DEV_DELIVERY_AUTHORITY_SCHEMA_SOURCE);
|
|
108
|
-
if (name ===
|
|
109
|
-
if (name ===
|
|
110
|
-
if (name ===
|
|
111
|
-
if (name ===
|
|
109
|
+
if (name === COMPATIBILITY_FACTS_SCHEMA) return readText(COMPATIBILITY_FACTS_SCHEMA_SOURCE);
|
|
110
|
+
if (name === PUBLICATION_REHEARSAL_SCHEMA) return readText(PUBLICATION_REHEARSAL_SCHEMA_SOURCE);
|
|
111
|
+
if (name === PUBLICATION_QUALIFICATION_SCHEMA) return readText(PUBLICATION_QUALIFICATION_SCHEMA_SOURCE);
|
|
112
|
+
if (name === ADOPTER_DELIVERY_SCHEMA) return readText(ADOPTER_DELIVERY_SCHEMA_SOURCE);
|
|
112
113
|
if (name === RELEASE_TAIL_CAPABILITIES_SCHEMA) return readText(RELEASE_TAIL_CAPABILITIES_SCHEMA_SOURCE);
|
|
113
114
|
return stableJson(value);
|
|
114
115
|
}
|
|
@@ -755,9 +756,7 @@ function buildSiteBundle() {
|
|
|
755
756
|
timestampFieldsParticipateInArtifactDigest: true,
|
|
756
757
|
artifactDigestScope: "npm package dist/site JSON files",
|
|
757
758
|
});
|
|
758
|
-
|
|
759
759
|
const cliRegistry = createCliRegistry(packageJson);
|
|
760
|
-
|
|
761
760
|
const manualRegistry = {
|
|
762
761
|
schemaVersion: 1,
|
|
763
762
|
contract: "kungfu-buildchain-agent-manual-registry",
|
|
@@ -805,7 +804,6 @@ function buildSiteBundle() {
|
|
|
805
804
|
],
|
|
806
805
|
guidance: "Agent consumers should use this registry to find packaged Buildchain manuals before inferring behavior from workflow snippets or release notes.",
|
|
807
806
|
};
|
|
808
|
-
|
|
809
807
|
const pageRegistry = {
|
|
810
808
|
schemaVersion: 1,
|
|
811
809
|
contract: "kungfu-buildchain-site-page-registry",
|
|
@@ -821,14 +819,15 @@ function buildSiteBundle() {
|
|
|
821
819
|
capabilityGroups: CAPABILITY_GROUPS.map((group) => group.id),
|
|
822
820
|
pages,
|
|
823
821
|
};
|
|
824
|
-
|
|
825
822
|
const nodeApiRegistry = createSiteNodeApiRegistry({ root, packageJson, nodeApiMeta, sha256File, publicSurfaceLifecycle });
|
|
826
|
-
|
|
823
|
+
const taxonomy = readWorkflowTaxonomy(root);
|
|
827
824
|
const workflowRegistry = {
|
|
828
825
|
schemaVersion: 1,
|
|
829
826
|
contract: "kungfu-buildchain-workflow-registry",
|
|
830
827
|
workflowSource: ".github/workflows reverse input enumeration",
|
|
831
828
|
workflows: enumerateWorkflowInputs({ root }).map((entry) => {
|
|
829
|
+
const classification = taxonomy?.entries.find((item) => workflowPath(item) === entry.path || item.compatibility?.path === entry.path);
|
|
830
|
+
const semanticId = classification?.id || entry.id;
|
|
832
831
|
const surfaceById = new Map([
|
|
833
832
|
["build", "channel-build-router"],
|
|
834
833
|
[".build", "reusable-build"],
|
|
@@ -878,18 +877,19 @@ function buildSiteBundle() {
|
|
|
878
877
|
["engineering-housekeeper-monthly", "preview"],
|
|
879
878
|
["self-hosted-runner-smoke", "compatibility-fixture"],
|
|
880
879
|
]);
|
|
881
|
-
const engineeringHousekeeper =
|
|
880
|
+
const engineeringHousekeeper = semanticId.startsWith("engineering-housekeeper");
|
|
882
881
|
return {
|
|
883
882
|
...entry,
|
|
884
|
-
|
|
883
|
+
...(classification ? { taxonomy: { id: classification.id, role: classification.role, category: classification.category, purpose: classification.purpose, status: classification.status, canonicalPath: workflowPath(classification), ...(classification.role === "self" && classification.migration ? { contractPath: classification.migration.previousPath } : {}), compatibilityAlias: entry.path !== workflowPath(classification) } } : {}),
|
|
884
|
+
surface: surfaceById.get(semanticId) || (entry.path.includes("/.") ? "reusable-workflow" : "repository-workflow"),
|
|
885
885
|
capabilityGroup: workflowCapabilityGroup({
|
|
886
|
-
...entry,
|
|
887
|
-
status: statusById.get(
|
|
886
|
+
...entry, id: semanticId,
|
|
887
|
+
status: statusById.get(semanticId) || "active",
|
|
888
888
|
}),
|
|
889
|
-
status: statusById.get(
|
|
889
|
+
status: statusById.get(semanticId) || "active",
|
|
890
890
|
...publicSurfaceLifecycle({
|
|
891
891
|
owner: "buildchain-workflows",
|
|
892
|
-
maturity: statusById.get(
|
|
892
|
+
maturity: statusById.get(semanticId) || "active",
|
|
893
893
|
introducedVersion: engineeringHousekeeper ? packageJson.version : undefined,
|
|
894
894
|
nonDuplicationRationale: engineeringHousekeeper
|
|
895
895
|
? "One reusable policy and evidence boundary owns Engineering Housekeeper execution; scheduled callers contain cadence values only."
|
|
@@ -1331,8 +1331,8 @@ function buildSiteBundle() {
|
|
|
1331
1331
|
[DEV_DELIVERY_AUTHORITY_SCHEMA]: readJson(
|
|
1332
1332
|
DEV_DELIVERY_AUTHORITY_SCHEMA_SOURCE,
|
|
1333
1333
|
),
|
|
1334
|
-
[
|
|
1335
|
-
|
|
1334
|
+
[COMPATIBILITY_FACTS_SCHEMA]: readJson(
|
|
1335
|
+
COMPATIBILITY_FACTS_SCHEMA_SOURCE,
|
|
1336
1336
|
),
|
|
1337
1337
|
...Object.fromEntries(
|
|
1338
1338
|
PUBLICATION_REHEARSAL_SITE_SCHEMAS.map((name) => [
|