@kungfu-tech/buildchain 4.0.2-alpha.30 → 4.0.2-alpha.32

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 (44) hide show
  1. package/architecture/agent-change-map.md +4 -1
  2. package/architecture/maintainability-debt.json +90 -58
  3. package/architecture/maintainability-policy.json +22 -23
  4. package/architecture/v4-architecture-constitution.md +23 -20
  5. package/architecture/v4-partial-mutation-recovery-qualification.json +4 -1
  6. package/architecture/v4-provider-operation-journal-contract.json +5 -2
  7. package/architecture/v4-release-activation-shadow-domain.json +5 -2
  8. package/architecture/v4-release-topology.json +17 -2
  9. package/architecture/v4-rust-wasm-production-authority.json +57 -0
  10. package/architecture/v4-stable-publication-fence.json +5 -2
  11. package/dist/site/buildchain-contract.json +5 -5
  12. package/dist/site/buildchain-site.json +44 -8
  13. package/dist/site/capability-registry.json +1 -1
  14. package/dist/site/kfd-claims.json +17 -5
  15. package/dist/site/kfd-upstream-aggregate.json +1 -1
  16. package/dist/site/manual-registry.json +1 -1
  17. package/dist/site/node-api-registry.json +27 -27
  18. package/dist/site/page-registry.json +39 -3
  19. package/dist/site/public-surface-audit.json +7 -3
  20. package/dist/site/publication-registry.json +4 -4
  21. package/dist/site/site-manifest.json +5 -5
  22. package/dist/site/workflow-registry.json +4 -4
  23. package/docs/node-api-reference.md +60 -60
  24. package/docs/v4-rust-wasm-production-authority.md +58 -0
  25. package/package.json +5 -3
  26. package/packages/core/buildchain-v4-domain.wasm +0 -0
  27. package/packages/core/dev-delivery-candidate-identity.js +48 -11
  28. package/packages/core/release-tail-provider-plane.js +68 -1048
  29. package/packages/core/v4-canonical-contracts.js +9 -75
  30. package/packages/core/v4-domain-wasm-artifact.js +7 -0
  31. package/packages/core/v4-domain-wasm.js +216 -0
  32. package/packages/core/v4-partial-mutation-recovery-qualification.js +9 -386
  33. package/packages/core/v4-product-publication.js +18 -384
  34. package/packages/core/v4-provider-operation-journal.js +18 -487
  35. package/packages/core/v4-provider-readback-idempotency.js +12 -97
  36. package/packages/core/v4-release-activation-shadow.js +13 -500
  37. package/packages/core/v4-release-invocation.js +28 -389
  38. package/packages/core/v4-stable-publication-fence.js +13 -342
  39. package/scripts/build-v4-domain-wasm.mjs +189 -0
  40. package/scripts/check-action-bundles.mjs +12 -2
  41. package/scripts/check-v4-release-topology.mjs +50 -25
  42. package/scripts/copy-v4-domain-wasm.mjs +14 -0
  43. package/scripts/dev-delivery-warrant.mjs +7 -3
  44. package/scripts/generate-v4-universal-workflow-facades.mjs +8 -3
@@ -0,0 +1,58 @@
1
+ ---
2
+ status: draft
3
+ period: 2026-09-04
4
+ theme: buildchain-v4-rust-wasm-production-authority
5
+ doc_type: architecture
6
+ source_level: local-files
7
+ confidence: high
8
+ sensitivity: public
9
+ evidence_grade: A
10
+ review_state: self-reviewed
11
+ last_reviewed: 2026-09-04
12
+ ai_provenance:
13
+ model_family: GPT-5
14
+ product: Codex
15
+ generated_at: 2026-09-04
16
+ invisible_context: not-claimed
17
+ ---
18
+
19
+ # Buildchain v4 Rust/WASM production authority
20
+
21
+ Buildchain v4 的确定性发布语义由
22
+ `crates/buildchain-v4-contracts` 编译出的同一份 WebAssembly artifact 执行。Node
23
+ 仍是 GitHub Action 和 npm 包的宿主,但只负责 provider SDK、文件系统、凭据、环境变量及
24
+ workflow 输入输出等副作用边界。权威契约见
25
+ `architecture/v4-rust-wasm-production-authority.json`。
26
+
27
+ ## 分发与调用
28
+
29
+ `packages/core/buildchain-v4-domain.wasm` 与 JavaScript 一起提交和发布。三个生产 Action
30
+ 在构建时把完全相同的字节复制到各自 `dist/`;运行时不进入调用方仓库寻找 Rust
31
+ 源码,也不要求安装 Rust。`packages/core/v4-domain-wasm.js` 从自身相邻路径同步读取
32
+ artifact,先核验生成元数据中的 SHA-256,再实例化 WebAssembly 并通过封闭 JSON/bytes
33
+ ABI 调用领域操作。
34
+
35
+ 缺失、被篡改、无法实例化、缺少导出、ABI 版本不符、trap 或非法响应都会失败关闭;
36
+ 不存在 JavaScript 领域算法回退。公共 JavaScript API 保留为薄 facade,调用者无须改成
37
+ 直接操作 WASM 内存。
38
+
39
+ ## 构建和审计
40
+
41
+ `pnpm run build:v4-wasm` 使用锁定的 Rust 工具链和 `wasm32-unknown-unknown` target 生成
42
+ artifact 与绑定元数据,并把 Cargo 依赖源目录映射到稳定的虚拟路径,禁止主机 Cargo
43
+ registry 路径进入 artifact。`pnpm run check:v4-wasm` 在干净临时 target 目录重新构建并逐字节
44
+ 比较已跟踪 artifact。这个检查不是生产运行时的重复编译:生产只加载已提交字节;检查
45
+ 用于证明这些字节仍能由当前 Rust 真相源和锁定工具链唯一导出,从而阻止源码、二进制或
46
+ 生成元数据静默漂移。
47
+
48
+ 受保护的 Verify 在 Linux 完成可复现构建,并在 Linux x64、macOS arm64 和 Windows x64
49
+ 上用 Node 24 直接加载同一提交中的 artifact。Action bundle 检查同时证明三个 `dist/`
50
+ 副本与核心 artifact 完全一致。
51
+
52
+ ## 权威边界
53
+
54
+ Rust/WASM 决定 canonical JSON/content root、release invocation、product publication、
55
+ provider journal/readback fold、activation、stable fence、partial-mutation recovery 与
56
+ release-tail 的计划、状态转换、重试/readback 和 receipt。Node 执行 Rust 返回的明确
57
+ instruction,把 provider observation 或归类后的 provider fault 回送给 Rust,由 Rust
58
+ 决定下一状态;Node 不写第二套相同领域规则。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "4.0.2-alpha.30",
3
+ "version": "4.0.2-alpha.32",
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",
@@ -156,10 +156,12 @@
156
156
  "scripts": {
157
157
  "precheck:static": "prettier --check architecture/decisions/0003-two-phase-delivery-warrant.md architecture/v4-delivery-authority-parity.json contracts/dev-delivery-authority-v2.schema.json dist/site/schemas/dev-delivery-authority-v2.schema.json docs/dev-delivery-qualification-landing-adr.md packages/core/dev-delivery-authority-candidate.js packages/core/dev-delivery-authority-evidence.js packages/core/dev-delivery-authority-landing.js packages/core/dev-delivery-authority-observation.js packages/core/dev-delivery-authority-qualification.js packages/core/dev-delivery-authority-settlement.js packages/core/dev-delivery-authority-state.js packages/core/dev-delivery-execution-failure.js packages/core/dev-delivery-execution-transfer.js packages/core/dev-delivery-landing-readback.js packages/core/dev-delivery-landing-terminal-evidence.js packages/core/dev-delivery-landing-testing-port.js packages/core/dev-delivery-native-execution.js packages/core/dev-delivery-native-proof.js packages/core/dev-delivery-process-boundary.js packages/core/dev-delivery-warrant-qualification.js packages/core/dev-delivery-warrant-state.js scripts/dev-delivery-authority-command-adapters.mjs scripts/dev-delivery-authority-provider.mjs scripts/dev-delivery-authority.mjs scripts/dev-delivery-native-run.mjs scripts/dev-delivery-process-boundary.mjs scripts/dev-delivery-two-phase-resume.mjs scripts/dev-delivery-two-phase.mjs scripts/dev-delivery-warrant-options.mjs scripts/dev-delivery-warrant-store.mjs templates/native-dev-delivery.yml",
158
158
  "operator:windows-jit": "bash scripts/aws-windows-jit-operator.sh",
159
- "check": "pnpm run check:static && node scripts/check-ci-lane-change-budget.mjs && node scripts/check-v4-public-dogfood-contract.mjs && node scripts/check-v4-floating-consumer-policy-contract.mjs && node scripts/check-v4-release-topology.mjs && node scripts/check-v4-universal-workflow-bootstrap.mjs && pnpm run check:v4-bridge && pnpm run check:v4-contracts && node scripts/check-maintainability.mjs && node scripts/check-internal-architecture.mjs && node scripts/generate-agent-change-map.mjs && node scripts/check-inventory.mjs && node scripts/check-core-mechanism-inventory.mjs && node scripts/check-v4-runtime-semantic-closure.mjs && node scripts/check-v3-v4-capability-inventory.mjs && node scripts/check-release-tail-contract.mjs && node scripts/v4-publication-rehearsal-fixture.mjs --check && node scripts/v4-architecture.mjs validate && node scripts/v4-warrant-shadow-plan.mjs validate && pnpm run check:site && pnpm run check:workflows && pnpm run test:unit && pnpm run check:golden-path && node scripts/check-action-bundles.mjs",
159
+ "check": "pnpm run check:static && node scripts/check-ci-lane-change-budget.mjs && node scripts/check-v4-public-dogfood-contract.mjs && node scripts/check-v4-floating-consumer-policy-contract.mjs && node scripts/check-v4-release-topology.mjs && node scripts/check-v4-universal-workflow-bootstrap.mjs && pnpm run check:v4-bridge && pnpm run check:v4-contracts && pnpm run check:v4-wasm && node scripts/check-maintainability.mjs && node scripts/check-internal-architecture.mjs && node scripts/generate-agent-change-map.mjs && node scripts/check-inventory.mjs && node scripts/check-core-mechanism-inventory.mjs && node scripts/check-v4-runtime-semantic-closure.mjs && node scripts/check-v3-v4-capability-inventory.mjs && node scripts/check-release-tail-contract.mjs && node scripts/v4-publication-rehearsal-fixture.mjs --check && node scripts/v4-architecture.mjs validate && node scripts/v4-warrant-shadow-plan.mjs validate && pnpm run check:site && pnpm run check:workflows && pnpm run test:unit && pnpm run check:golden-path && node scripts/check-action-bundles.mjs",
160
160
  "check:static": "node scripts/check-javascript-syntax.mjs && prettier --check architecture/*.json contracts/release-tail-provider-bindings-v1.schema.json contracts/v4-canonical-contracts-v1.schema.json contracts/v4-compatibility-facts-v1.schema.json contracts/v4-delivery-warrant-semantic-diff-report-v1.schema.json contracts/v4-delivery-warrant-trace-v1.schema.json contracts/v4-floating-consumer-policy-receipt-v1.schema.json contracts/v4-runtime-ref-resume-authority-v1.schema.json contracts/v4-tail-reseal-v1.schema.json contracts/v4-host-contract-v1.schema.json contracts/v4-provider-operation-journal-v1.schema.json contracts/v4-release-activation-shadow-v1.schema.json contracts/v4-stable-publication-fence-v1.schema.json contracts/v4-partial-mutation-recovery-v1.schema.json contracts/v4-stage-capsule-v1.schema.json contracts/v4-stage-capsule-store-v1.schema.json contracts/v4-stage-capsule-resume-v1.schema.json contracts/release-tail-capabilities-v1.schema.json contracts/fixtures/release-tail-capabilities-v1/*.json contracts/fixtures/v4-delivery-warrant-trace-v1/*.json contracts/fixtures/v4-floating-consumer-policy-v1/*.json contracts/fixtures/v4-runtime-ref-resume-authority-v1/*.json contracts/fixtures/v4-tail-reseal-v1/*.json contracts/fixtures/v4-compatibility-facts-v1/*.json contracts/fixtures/v4-provider-operation-journal-v1/*.json contracts/fixtures/v4-provider-readback-idempotency-v1/*.json contracts/fixtures/v4-release-activation-shadow-v1/*.json contracts/fixtures/v4-stable-publication-fence-v1/*.json contracts/fixtures/v4-partial-mutation-recovery-v1/*.json contracts/fixtures/v4-stage-capsule-v1/*.json contracts/fixtures/v4-stage-capsule-store-v1/*.json contracts/fixtures/v4-stage-capsule-resume-v1/*.json bin/internal/command-registry.mjs bin/internal/compatibility-facts-cli.mjs packages/core/v4-canonical-contracts.js packages/core/kungfu-temporal-fact.js packages/core/buildchain-compatibility-fact.js packages/core/buildchain-compatibility-authority.js packages/core/buildchain-compatibility-proof.js packages/core/v4-floating-consumer-evidence.js packages/core/v4-floating-consumer-policy.js packages/core/v4-floating-consumer-release-passport.js packages/core/v4-runtime-ref-resume-authority.js packages/core/v4-tail-reseal-contract.js packages/core/v4-tail-reseal-github.js packages/core/v4-tail-reseal-receipt.js packages/core/v4-tail-reseal.js packages/core/v4-runtime-selector-persistence.js packages/core/v4-provider-operation-journal.js packages/core/v4-provider-readback-idempotency.js packages/core/v4-release-activation-shadow.js packages/core/v4-stable-publication-fence.js packages/core/v4-partial-mutation-recovery-qualification.js packages/core/v4-stage-capsule.js packages/core/v4-stage-capsule-store.js packages/core/v4-stage-capsule-local-store.js packages/core/v4-platform-stage-checkpoints.js packages/core/v4-stage-capsule-resume-planner.js packages/core/v4-stage-capsule-qualification.js packages/core/v4-stage-capsule-qualification-campaign.js packages/core/v4-delivery-warrant-fixture-runner.js packages/core/v4-delivery-warrant-read-candidate.js packages/core/v4-delivery-warrant-semantic-diff-gate.js packages/core/v4-delivery-warrant-shadow-adapter.js scripts/authorize-promotion-runtime-override.cjs scripts/check-core-mechanism-inventory.mjs scripts/check-v4-runtime-semantic-closure.mjs scripts/check-release-tail-contract.mjs scripts/check-javascript-syntax.mjs scripts/check-maintainability.mjs scripts/dev-pr-prequeue-guard.mjs scripts/check-v4-public-dogfood-contract.mjs scripts/maintainability-metrics.mjs scripts/maintainability-domain-metrics.mjs scripts/maintainability-governance.mjs scripts/generate-agent-change-map.mjs scripts/public-reference.mjs scripts/site-reference-registry.mjs scripts/generate-public-reference.mjs scripts/v4-architecture.mjs scripts/v4-bridge-bootstrap.mjs scripts/v4-bridge-evidence.mjs scripts/v4-consumer-policy.mjs scripts/v4-host-adapter.mjs scripts/v4-platform-stage-checkpoint-rehearsal.mjs scripts/v4-stage-capsule-resume-rehearsal.mjs scripts/v4-stage-capsule-qualification.mjs scripts/v4-tail-reseal-macos-rehearsal.mjs scripts/v4-tail-reseal.mjs scripts/v4-warrant-shadow-plan.mjs scripts/verify-golden-path.mjs tests/authorize-promotion-runtime-override.test.mjs tests/command-registry.test.mjs tests/core-mechanism-inventory.test.mjs tests/release-tail-contract.test.mjs tests/maintainability.test.mjs tests/maintainability-governance.test.mjs tests/promotion-responsibilities.test.mjs tests/public-reference.test.mjs tests/v4-architecture.test.mjs tests/v4-bridge.test.mjs tests/v4-canonical-contracts.test.mjs tests/v4-delivery-warrant-fixture-runner.test.mjs tests/v4-delivery-warrant-read-candidate.test.mjs tests/v4-floating-consumer-policy.test.mjs tests/v4-runtime-ref-resume-authority.test.mjs tests/v4-runtime-semantic-closure.test.mjs tests/v4-tail-reseal.test.mjs tests/v4-tail-reseal-parity.test.mjs tests/v4-compatibility-facts.test.mjs tests/v4-platform-stage-checkpoints.test.mjs tests/v4-provider-operation-journal.test.mjs tests/v4-provider-readback-idempotency.test.mjs tests/v4-public-dogfood-contract.test.mjs tests/v4-release-activation-shadow.test.mjs tests/v4-stable-publication-fence.test.mjs tests/v4-partial-mutation-recovery-qualification.test.mjs tests/v4-stage-capsule.test.mjs tests/v4-stage-capsule-store.test.mjs tests/v4-stage-capsule-resume-planner.test.mjs tests/v4-stage-capsule-qualification.test.mjs tests/v4-warrant-shadow-plan.test.mjs",
161
161
  "check:v4-bridge": "cargo fmt --manifest-path crates/buildchain-v4-bridge/Cargo.toml -- --check && cargo clippy --locked --manifest-path crates/buildchain-v4-bridge/Cargo.toml -- -D warnings && cargo test --locked --manifest-path crates/buildchain-v4-bridge/Cargo.toml",
162
- "check:v4-contracts": "cargo fmt --manifest-path crates/buildchain-v4-contracts/Cargo.toml -- --check && cargo clippy --locked --manifest-path crates/buildchain-v4-contracts/Cargo.toml -- -D warnings && cargo test --locked --manifest-path crates/buildchain-v4-contracts/Cargo.toml && node --test tests/v4-canonical-contracts.test.mjs tests/v4-delivery-warrant-fixture-runner.test.mjs tests/v4-delivery-warrant-read-candidate.test.mjs tests/v4-floating-consumer-policy-contract.test.mjs tests/v4-floating-consumer-policy.test.mjs tests/v4-runtime-ref-resume-authority.test.mjs tests/v4-tail-reseal.test.mjs tests/v4-tail-reseal-parity.test.mjs tests/v4-compatibility-facts.test.mjs tests/v4-publication-rehearsal.test.mjs tests/v4-platform-stage-checkpoints.test.mjs tests/v4-provider-operation-journal.test.mjs tests/v4-provider-readback-idempotency.test.mjs tests/v4-public-dogfood-contract.test.mjs tests/v4-release-activation-shadow.test.mjs tests/v4-stable-publication-fence.test.mjs tests/v4-partial-mutation-recovery-qualification.test.mjs tests/v4-stage-capsule.test.mjs tests/v4-stage-capsule-store.test.mjs tests/v4-stage-capsule-resume-planner.test.mjs tests/v4-stage-capsule-qualification.test.mjs",
162
+ "check:v4-contracts": "cargo fmt --manifest-path crates/buildchain-v4-contracts/Cargo.toml -- --check && cargo clippy --locked --manifest-path crates/buildchain-v4-contracts/Cargo.toml -- -D warnings && cargo test --locked --manifest-path crates/buildchain-v4-contracts/Cargo.toml && node --test tests/v4-canonical-contracts.test.mjs tests/v4-delivery-warrant-fixture-runner.test.mjs tests/v4-delivery-warrant-read-candidate.test.mjs tests/v4-domain-wasm.test.mjs tests/v4-floating-consumer-policy-contract.test.mjs tests/v4-floating-consumer-policy.test.mjs tests/v4-runtime-ref-resume-authority.test.mjs tests/v4-tail-reseal.test.mjs tests/v4-tail-reseal-parity.test.mjs tests/v4-compatibility-facts.test.mjs tests/v4-publication-rehearsal.test.mjs tests/v4-platform-stage-checkpoints.test.mjs tests/v4-provider-operation-journal.test.mjs tests/v4-provider-readback-idempotency.test.mjs tests/v4-public-dogfood-contract.test.mjs tests/v4-release-activation-shadow.test.mjs tests/v4-stable-publication-fence.test.mjs tests/v4-partial-mutation-recovery-qualification.test.mjs tests/v4-stage-capsule.test.mjs tests/v4-stage-capsule-store.test.mjs tests/v4-stage-capsule-resume-planner.test.mjs tests/v4-stage-capsule-qualification.test.mjs",
163
+ "build:v4-wasm": "node scripts/build-v4-domain-wasm.mjs",
164
+ "check:v4-wasm": "prettier --check packages/core/v4-domain-wasm.js packages/core/v4-domain-wasm-artifact.js scripts/build-v4-domain-wasm.mjs scripts/copy-v4-domain-wasm.mjs tests/v4-domain-wasm.test.mjs && node scripts/build-v4-domain-wasm.mjs --check",
163
165
  "check:workflows": "bash scripts/check-workflows.sh",
164
166
  "generate:reference": "node scripts/generate-public-reference.mjs",
165
167
  "check:reference": "node scripts/generate-public-reference.mjs --check",
@@ -21,9 +21,18 @@ export const EXACT_DEV_DELIVERY_PROOF_FIELDS = Object.freeze([
21
21
  "sourceWorkflowRunId",
22
22
  ]);
23
23
  export function devDeliverySourceBinding(input = {}) {
24
- const [sourceRoot, assignmentRoot, initiativeRoot] = ["sourceRoot", "assignmentRoot", "initiativeRoot"].map((field) => String(input[field] || "").trim());
25
- if (sourceRoot && !assignmentRoot && !initiativeRoot) return { sourceRoot: exactRoot(sourceRoot, "sourceRoot") };
26
- if (!sourceRoot && assignmentRoot && initiativeRoot) return { assignmentRoot: exactRoot(assignmentRoot, "assignmentRoot"), initiativeRoot: exactRoot(initiativeRoot, "initiativeRoot") };
24
+ const [sourceRoot, assignmentRoot, initiativeRoot] = [
25
+ "sourceRoot",
26
+ "assignmentRoot",
27
+ "initiativeRoot",
28
+ ].map((field) => String(input[field] || "").trim());
29
+ if (sourceRoot && !assignmentRoot && !initiativeRoot)
30
+ return { sourceRoot: exactRoot(sourceRoot, "sourceRoot") };
31
+ if (!sourceRoot && assignmentRoot && initiativeRoot)
32
+ return {
33
+ assignmentRoot: exactRoot(assignmentRoot, "assignmentRoot"),
34
+ initiativeRoot: exactRoot(initiativeRoot, "initiativeRoot"),
35
+ };
27
36
  throw new Error("provide sourceRoot alone or both historical roots");
28
37
  }
29
38
  export function matchesExactDevDeliveryCandidate(existing, attempted) {
@@ -43,10 +52,22 @@ export function matchesExactDevDeliveryCandidate(existing, attempted) {
43
52
  );
44
53
  }
45
54
  export function reuseExactActiveDevDeliverySourceProof(active, input) {
55
+ const phaseCompatible =
56
+ ["provisional", "qualified"].includes(active?.phase) ||
57
+ (!Object.hasOwn(active || {}, "phase") &&
58
+ active?.deliveryClass === "non-native-fast" &&
59
+ !Object.hasOwn(active || {}, "environmentRoot"));
46
60
  const exact =
47
- ["provisional", "qualified"].includes(active?.phase) &&
48
- ["sourceRoot", "assignmentRoot", "initiativeRoot"].every((field) => active[field] === input[field]) &&
49
- ["pullRequestNumber", "sourceIdentityRoot", "deliveryClass", "priority"].every((field) => active[field] === input[field]) &&
61
+ phaseCompatible &&
62
+ ["sourceRoot", "assignmentRoot", "initiativeRoot"].every(
63
+ (field) => active[field] === input[field],
64
+ ) &&
65
+ [
66
+ "pullRequestNumber",
67
+ "sourceIdentityRoot",
68
+ "deliveryClass",
69
+ "priority",
70
+ ].every((field) => active[field] === input[field]) &&
50
71
  matchesExactDevDeliveryCandidate(active, {
51
72
  ...input,
52
73
  sourceProofRoot: active.sourceProofRoot,
@@ -54,19 +75,35 @@ export function reuseExactActiveDevDeliverySourceProof(active, input) {
54
75
  return exact ? { ...input, sourceProofRoot: active.sourceProofRoot } : input;
55
76
  }
56
77
 
57
- export function createDevDeliveryCandidateIdentity(input, expected, deliveryClass) {
78
+ export function createDevDeliveryCandidateIdentity(
79
+ input,
80
+ expected,
81
+ deliveryClass,
82
+ ) {
58
83
  const identity = {
59
84
  repository: expected.repository,
60
85
  protectedBase: expected.protectedBase,
61
- pullRequestNumber: positiveInteger(input.pullRequestNumber, "pullRequestNumber"),
86
+ pullRequestNumber: positiveInteger(
87
+ input.pullRequestNumber,
88
+ "pullRequestNumber",
89
+ ),
62
90
  ...devDeliverySourceBinding(input),
63
- sourceIdentityRoot: exactRoot(input.sourceIdentityRoot, "sourceIdentityRoot"),
91
+ sourceIdentityRoot: exactRoot(
92
+ input.sourceIdentityRoot,
93
+ "sourceIdentityRoot",
94
+ ),
64
95
  deliveryClass: deliveryClass(input.deliveryClass),
65
96
  };
66
97
  if (input.identitySemantics) {
67
- if (text(input.identitySemantics) !== CHAINED_ATTEMPT_IDENTITY) throw new Error(`unsupported candidate identity semantics ${input.identitySemantics}`);
98
+ if (text(input.identitySemantics) !== CHAINED_ATTEMPT_IDENTITY)
99
+ throw new Error(
100
+ `unsupported candidate identity semantics ${input.identitySemantics}`,
101
+ );
68
102
  identity.identitySemantics = CHAINED_ATTEMPT_IDENTITY;
69
- identity.predecessorCandidateId = exactRoot(input.predecessorCandidateId, "predecessorCandidateId");
103
+ identity.predecessorCandidateId = exactRoot(
104
+ input.predecessorCandidateId,
105
+ "predecessorCandidateId",
106
+ );
70
107
  }
71
108
  return { ...identity, candidateId: devDeliveryContentRoot(identity) };
72
109
  }