@kungfu-tech/buildchain 4.0.2-alpha.7 → 4.0.2-alpha.8

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.
@@ -166,9 +166,11 @@ Safe change route: Reduce one owned responsibility behind the stable facade, run
166
166
  - `.github/workflows/release-candidate-promote.yml`
167
167
  - `actions/promote-buildchain-ref/lib.js`
168
168
  - `actions/v4-release-candidate-promote/index.js`
169
+ - `actions/v4-release-candidate-promote/product-provider.js`
169
170
  - `scripts/check-inventory.mjs`
170
171
  - `tests/promote-buildchain-ref.test.mjs`
171
172
  - `tests/promotion-channel-router.test.mjs`
173
+ - `tests/v4-release-topology.test.mjs`
172
174
  - `scripts/site-capability-metadata.mjs`
173
175
  - `tests/v4-floating-consumer-policy.test.mjs`
174
176
  - `tests/v4-declarative-promotion-mode.test.mjs`
@@ -383,6 +385,7 @@ Owner: Buildchain action maintainers
383
385
 
384
386
  ### Implementation
385
387
 
388
+ - `actions/promote-buildchain-ref/internal/contained-published-version-state.js`
386
389
  - `actions/promote-buildchain-ref/internal/promote-alpha-channel.js`
387
390
  - `actions/promote-buildchain-ref/internal/promote-major-channel.js`
388
391
  - `actions/promote-buildchain-ref/internal/promote-release-channel.js`
@@ -394,6 +397,7 @@ Owner: Buildchain action maintainers
394
397
 
395
398
  ### Tests
396
399
 
400
+ - `tests/promote-buildchain-ref-contained-published-version-state.test.mjs`
397
401
  - `tests/promote-buildchain-ref.test.mjs`
398
402
  - `tests/promote-buildchain-ref-recovery.test.mjs`
399
403
  - `tests/promote-buildchain-ref-governance.test.mjs`
@@ -405,7 +409,7 @@ Owner: Buildchain action maintainers
405
409
 
406
410
  ### Minimal validation
407
411
 
408
- - `node --test tests/promote-buildchain-ref.test.mjs tests/promote-buildchain-ref-recovery.test.mjs tests/promote-buildchain-ref-governance.test.mjs tests/promotion-responsibilities.test.mjs`
412
+ - `node --test tests/promote-buildchain-ref-contained-published-version-state.test.mjs tests/promote-buildchain-ref.test.mjs tests/promote-buildchain-ref-recovery.test.mjs tests/promote-buildchain-ref-governance.test.mjs tests/promotion-responsibilities.test.mjs`
409
413
 
410
414
  ## promotion-github-transaction-store
411
415
 
@@ -271,11 +271,13 @@
271
271
  "id": "promotion-channel-orchestration",
272
272
  "owner": "Buildchain action maintainers",
273
273
  "implementation": [
274
+ "actions/promote-buildchain-ref/internal/contained-published-version-state.js",
274
275
  "actions/promote-buildchain-ref/internal/promote-alpha-channel.js",
275
276
  "actions/promote-buildchain-ref/internal/promote-major-channel.js",
276
277
  "actions/promote-buildchain-ref/internal/promote-release-channel.js"
277
278
  ],
278
279
  "tests": [
280
+ "tests/promote-buildchain-ref-contained-published-version-state.test.mjs",
279
281
  "tests/promote-buildchain-ref.test.mjs",
280
282
  "tests/promote-buildchain-ref-recovery.test.mjs",
281
283
  "tests/promote-buildchain-ref-governance.test.mjs",
@@ -287,7 +289,7 @@
287
289
  ],
288
290
  "generatedOutputs": ["actions/promote-buildchain-ref/dist/index.js"],
289
291
  "validationCommands": [
290
- "node --test tests/promote-buildchain-ref.test.mjs tests/promote-buildchain-ref-recovery.test.mjs tests/promote-buildchain-ref-governance.test.mjs tests/promotion-responsibilities.test.mjs"
292
+ "node --test tests/promote-buildchain-ref-contained-published-version-state.test.mjs tests/promote-buildchain-ref.test.mjs tests/promote-buildchain-ref-recovery.test.mjs tests/promote-buildchain-ref-governance.test.mjs tests/promotion-responsibilities.test.mjs"
291
293
  ]
292
294
  },
293
295
  {
@@ -7,8 +7,8 @@
7
7
  },
8
8
  "totalExcessLedger": {
9
9
  "metric": "calibrated-full-dimensional-excess-v1",
10
- "measuredExcess": 64321,
11
- "current": 56260
10
+ "measuredExcess": 64348,
11
+ "current": 56287
12
12
  },
13
13
  "defaults": {
14
14
  "owner": "Buildchain architecture maintainers",
@@ -1683,19 +1683,19 @@
1683
1683
  "lines": 309,
1684
1684
  "complexity": 62
1685
1685
  },
1686
- "resolveReleaseCandidateArtifactsCli@785": {
1686
+ "resolveReleaseCandidateArtifactsCli@784": {
1687
1687
  "complexity": 29
1688
1688
  }
1689
1689
  }
1690
1690
  },
1691
1691
  "current": {
1692
- "lines": 854,
1692
+ "lines": 853,
1693
1693
  "functions": {
1694
1694
  "resolveReleaseCandidateArtifacts@475": {
1695
- "lines": 309,
1695
+ "lines": 308,
1696
1696
  "complexity": 61
1697
1697
  },
1698
- "resolveReleaseCandidateArtifactsCli@785": {
1698
+ "resolveReleaseCandidateArtifactsCli@784": {
1699
1699
  "complexity": 29
1700
1700
  }
1701
1701
  }
@@ -1707,7 +1707,7 @@
1707
1707
  "lines": 180,
1708
1708
  "complexity": 25
1709
1709
  },
1710
- "resolveReleaseCandidateArtifactsCli@785": {
1710
+ "resolveReleaseCandidateArtifactsCli@784": {
1711
1711
  "complexity": 25
1712
1712
  }
1713
1713
  }
@@ -2937,7 +2937,7 @@
2937
2937
  "lines": 2736
2938
2938
  },
2939
2939
  "current": {
2940
- "lines": 1118
2940
+ "lines": 1147
2941
2941
  },
2942
2942
  "target": {
2943
2943
  "lines": 600
@@ -3099,9 +3099,11 @@
3099
3099
  ".github/workflows/release-candidate-promote.yml",
3100
3100
  "actions/promote-buildchain-ref/lib.js",
3101
3101
  "actions/v4-release-candidate-promote/index.js",
3102
+ "actions/v4-release-candidate-promote/product-provider.js",
3102
3103
  "scripts/check-inventory.mjs",
3103
3104
  "tests/promote-buildchain-ref.test.mjs",
3104
3105
  "tests/promotion-channel-router.test.mjs",
3106
+ "tests/v4-release-topology.test.mjs",
3105
3107
  "scripts/site-capability-metadata.mjs",
3106
3108
  "tests/v4-floating-consumer-policy.test.mjs",
3107
3109
  "tests/v4-declarative-promotion-mode.test.mjs",
@@ -3137,7 +3139,7 @@
3137
3139
  "path": ".github/workflows/.release-candidate-promote.yml",
3138
3140
  "metric": "lines",
3139
3141
  "baseline": 2736,
3140
- "current": 1118
3142
+ "current": 1147
3141
3143
  },
3142
3144
  {
3143
3145
  "domain": "sources",
@@ -26,12 +26,12 @@
26
26
  },
27
27
  "repositoryBudgets": {
28
28
  "baselineRevision": "858dbe00b6206a8f356b4a12d2659bee7a72e71b",
29
- "maxHandMaintainedSourceFiles": 448,
30
- "maxHandMaintainedSourceLines": 165936,
29
+ "maxHandMaintainedSourceFiles": 454,
30
+ "maxHandMaintainedSourceLines": 167749,
31
31
  "maxWorkflowFiles": 77,
32
32
  "maxWorkflowLines": 26791,
33
- "latestTransition": "Protected alpha finalization and its pinned provider runtime are portable across the qualified platform set.",
34
- "latestTransitionRationale": "One bounded finalization seam advances the exact dev line through its protected pull-request fallback after the alpha version-state result lands. A pending dev convergence remains explicitly finalization-needed; floating alpha tags and the durable complete state are withheld until live dev readback reaches that exact channel SHA. The action also carries an optional exact transaction identity through the canonical provider boundary so a mismatched recovery fails before mutation. Provider verification now creates both POSIX and Windows command shims for the same pinned pnpm version; the four added source lines close the Windows adopter failure without widening runtime selection authority.",
33
+ "latestTransition": "The v4 train owns one rooted product-publication plan and a closed provider effect/readback boundary before any credentialed APPLY mutation.",
34
+ "latestTransitionRationale": "The bounded growth replaces the v4 action's transitive call into the legacy promotion engine with a pure QUALIFY-time publication intent, one canonical plan, split GitHub and npm provider adapters, and exact replay from provider readback. Unsupported historical publication modes fail before mutation, an existing npm version with conflicting integrity terminates without republishing, protected-ref recovery resumes from live refs without repeating npm publication, and any declared recovery transaction identity must match its rooted recovery receipt before provider mutation. The latest protected development recovery adapters are absorbed without restoring a legacy engine edge: target and sealed-input compatibility stays on the pre-admission adapter boundary, the privileged closure remains independently enumerable, and each provider source stays below the default file and function budgets. The repository ceilings bind the exact combined development and topology-convergence source inventory rather than hiding growth in a debt or exception transition.",
35
35
  "rationale": "Bounded modules separate candidate, evidence, native proof and execution, canonical failure verification, closed-set execution transfer, process-boundary verification, Warrant state and qualification, authority state, qualification, Landing acquisition, verified-attempt admission, Landing settlement and fence validation, provider attempt and heartbeat readback, sealed terminal evidence, hosted heartbeat, resume, store, options, command-specific adapters, and CLI orchestration responsibilities. The protected delivery workflow gives candidate and seal jobs no provider write credential, recursively rejects transfer drift, scopes every transfer artifact to the exact provider run attempt, chains every durable heartbeat state and receipt root on a distinct hosted runner domain, and permits qualification or exact failure settlement only after the finalizer verifies live jobs and the latest durable authority state. Public Landing admission and heartbeat always perform non-injectable fresh exact-attempt provider readback, tolerate only a not-yet-materialized seal job while retaining exact native and duplicate-job rejection, and heartbeat-loss coordination never invokes GitHub's run-scoped cancellation API where a successor rerun could race. The hosted process boundary anchors trust in the kernel-resolved versioned Runner.Worker path while accepting an equivalent argv-zero spelling with the same basename; its public boundary marker is allowed only at the one exact non-secret value, so a forged value under the same credential-like name still fails closed. The credentialless transfer seal validates the rooted native reuse decision against the Warrant-bound source, closure, dependency, toolchain, environment and command inputs; qualifiedBase stays in the proof and decision where it is rooted and later independently rechecked, rather than being assumed on the Warrant schema. V2 mutation cannot initialize a second empty authority beside a legacy ref: migration reads and roots the canonical live v1 ref, rechecks it, applies the explicit configured v2 policy, and atomically replaces its bytes through one expected-old non-force update, so old v1 controllers fail closed while the prior commit remains immutable history. Candidate ancestry classifies the GitHub artifact runtime token as credential authority. Every Landing settlement, including an unexpired fence, requires product-owned terminal readback. Terminal cleanup reads the immutable historical attempt, derives workflow and hosted Landing job identity from live run data, reads the exact protected ref head and compares containment against that immutable SHA, and seals merged only when the admitted merge-group head is contained by that protected base; a later different-head merge settles the old attempt as dequeued. Terminal normalization preserves transfer, finalizer boundary, native and seal job, admitted provider attempt, protected-base head, containment result, and terminal readback coordinates. The public reusable workflow truthfully retains its single-flight v1 authority without advertising v2 migration, while bounded v2 remains a separate opt-in CLI, Node API, and schema contract; the tracked self-caller stays on public v4-alpha with matching stable and alpha locks, and transient train selection is dispatch-only. Next-development parity adds one versioned transition authority, one durable controller, one bounded reservation adapter, and pure public-contract recovery evidence while retaining the existing thin floating-channel callers byte-for-byte. The floating-consumer gate reuses the existing contract-world evaluator so SHA drift passes only under the selected lock's compatibility policy, breaking surface drift still fails closed, and external certification reconstructs the receipt from the observed workflow SHA rather than the lock's historical evidence SHA. Tail reseal adds no Stage Capsule effect or general rebuild authority: it verifies the exact retained four-platform bytes, admits one known macOS tail failure through live provider readback, fences signing and finalization to explicit credentials and Warrant identity, and requires standard candidate Passport plus provider and protected readback. Compatibility Facts parity isolates canonical encoding, temporal verification, lifecycle validation, fixture projection, public authority projection, and CLI adaptation into bounded modules; legacy digest and proof arrays are derived only from exact current Fact lineage. Publication Rehearsal adds no production release authority: the content-addressed capsule contract binds source, candidate, manifest, config, canonical data-only provider bindings, provider policy, observations and core version separately from filesystem, runtime and rehearsal-only provider authority; simulate, replay and explicitly authorized provider rehearsal all reuse the release-tail planner, while same-commit local dogfood resolves the new reusable contract and exact current runtime before external callers remain on floating v4-alpha. Cross-runtime candidate recovery preserves original runtime and provider roots and creates resume lineage only after exact public ref, tag, ancestry, npm version and integrity readback. Adopter Delivery restores the reviewed public v3 gate, drivers, Passport binding, N-1 bootstrap and exact archive loader through one public v4 surface while keeping provider and release authority explicit non-claims. Floating Alpha bootstrap uses only the existing exact resolver and protected Alpha private shell to move an otherwise stale floating shell, retains public v4 stable promotion, and removes itself after protected readback. CI lane change-budget enforcement adds a bounded parser, evaluator, guard, and tests without creating another merge authority.",
36
36
  "governance": "legacy-debt-sunset-2026q4"
37
37
  },
@@ -210,8 +210,8 @@
210
210
  "governance": "legacy-debt-sunset-2026q4"
211
211
  },
212
212
  "scripts/release-candidate-resolver.mjs": {
213
- "maxLines": 854,
214
- "maxFunctionLines": 309,
213
+ "maxLines": 853,
214
+ "maxFunctionLines": 308,
215
215
  "maxFunctionComplexity": 61,
216
216
  "rationale": "The shared candidate resolver retains bounded archive streaming, payload size and sha256 validation while locating and validating candidate-bound Stage Capsule and publication qualification evidence. Exact publication version selection now prefers the sealed npm bundle without widening the orchestration function, and these lower exact ceilings cannot grow implicitly.",
217
217
  "governance": "legacy-debt-sunset-2026q4"
@@ -70,12 +70,15 @@
70
70
  "actions/promote-buildchain-ref/v4-provider-plane.js",
71
71
  "actions/release-tail/index.js",
72
72
  "actions/v4-release-candidate-promote/index.js",
73
+ "actions/v4-release-candidate-promote/product-provider-adapters.js",
74
+ "actions/v4-release-candidate-promote/product-provider-github-adapters.js",
73
75
  "actions/v4-release-candidate-promote/product-provider.js",
74
76
  "packages/core/buildchain-agent-manuals.js",
75
77
  "packages/core/index.js",
76
78
  "packages/core/publication-rehearsal-runtime.js",
77
79
  "packages/core/release-tail-provider-adapters.js",
78
80
  "packages/core/release-tail-provider-plane.js",
81
+ "packages/core/v4-product-publication.js",
79
82
  "packages/core/v4-publication-rehearsal-capsule.js",
80
83
  "packages/core/v4-publication-rehearsal.js"
81
84
  ],
@@ -110,6 +113,76 @@
110
113
  "actions/v4-release-candidate-promote/index.js",
111
114
  "packages/core/v4-release-invocation.js"
112
115
  ],
116
+ "privilegedExecutableClosure": {
117
+ "entrypoints": ["actions/v4-release-candidate-promote/index.js"],
118
+ "modules": [
119
+ "actions/promote-buildchain-ref/github-release.js",
120
+ "actions/promote-buildchain-ref/internal/version-state.js",
121
+ "actions/promote-buildchain-ref/reuse-complete-release.js",
122
+ "actions/promote-buildchain-ref/v4-provider-plane.js",
123
+ "actions/v4-release-candidate-promote/index.js",
124
+ "actions/v4-release-candidate-promote/product-provider-adapters.js",
125
+ "actions/v4-release-candidate-promote/product-provider-github-adapters.js",
126
+ "actions/v4-release-candidate-promote/product-provider.js",
127
+ "packages/core/adopter-delivery-gate.js",
128
+ "packages/core/adopter-delivery-json.js",
129
+ "packages/core/adopter-delivery-passport.js",
130
+ "packages/core/artifact-verification-envelope.js",
131
+ "packages/core/buildchain-channel-identity.js",
132
+ "packages/core/buildchain-compatibility-authority.js",
133
+ "packages/core/buildchain-compatibility-fact.js",
134
+ "packages/core/buildchain-compatibility-facts.json",
135
+ "packages/core/buildchain-compatibility-proof.js",
136
+ "packages/core/buildchain-config.js",
137
+ "packages/core/buildchain-contract.js",
138
+ "packages/core/buildchain-layout.js",
139
+ "packages/core/controller-evidence.js",
140
+ "packages/core/dev-delivery-common.js",
141
+ "packages/core/dev-delivery-contract-surface.js",
142
+ "packages/core/github-artifact-attestation.js",
143
+ "packages/core/kfd-adopter-manifest.js",
144
+ "packages/core/kfd-gate.js",
145
+ "packages/core/kfd-product-gates.js",
146
+ "packages/core/kungfu-temporal-fact.js",
147
+ "packages/core/package-manager.js",
148
+ "packages/core/public-surface-audit.js",
149
+ "packages/core/public-surface-cli.js",
150
+ "packages/core/publication-artifact-candidate.js",
151
+ "packages/core/publication-authority.js",
152
+ "packages/core/publication-sealed-bundle.js",
153
+ "packages/core/publish-transaction.js",
154
+ "packages/core/release-candidate-recovery.js",
155
+ "packages/core/release-candidate.js",
156
+ "packages/core/release-passport-contract.js",
157
+ "packages/core/release-passport.js",
158
+ "packages/core/release-tail-product-capabilities.js",
159
+ "packages/core/release-tail-provider-adapters.js",
160
+ "packages/core/release-tail-provider-plane.js",
161
+ "packages/core/spawn-command.js",
162
+ "packages/core/surface-manifest.js",
163
+ "packages/core/v4-canonical-contracts.js",
164
+ "packages/core/v4-floating-consumer-evidence.js",
165
+ "packages/core/v4-floating-consumer-policy.js",
166
+ "packages/core/v4-floating-consumer-release-passport.js",
167
+ "packages/core/v4-product-publication.js",
168
+ "packages/core/v4-protected-publication-source.js",
169
+ "packages/core/v4-publication-qualification.js",
170
+ "packages/core/v4-release-invocation.js",
171
+ "packages/core/v4-runtime-ref-resume-authority.js",
172
+ "packages/core/v4-runtime-selector-persistence.js",
173
+ "packages/core/web-surface-publication-candidate.js",
174
+ "packages/core/workflow-yaml-contract.js",
175
+ "scripts/ensure-github-release.mjs"
176
+ ],
177
+ "root": "sha256:31d13d74b8b3dadbfe4b5061c99f6f6711be6c3b06449114f2708427374f9c85"
178
+ },
179
+ "legacyEngineModules": [
180
+ "actions/promote-buildchain-ref/internal/durable-transaction-operations.js",
181
+ "actions/promote-buildchain-ref/internal/promote-alpha-channel.js",
182
+ "actions/promote-buildchain-ref/internal/promote-major-channel.js",
183
+ "actions/promote-buildchain-ref/internal/promote-release-channel.js",
184
+ "actions/promote-buildchain-ref/lib.js"
185
+ ],
113
186
  "freshEntry": ".github/workflows/release-candidate-promote.yml",
114
187
  "recoveryEntry": ".github/workflows/buildchain-ref-promotion-recovery.yml",
115
188
  "forbiddenLegacyEnginePatterns": [
@@ -4,7 +4,7 @@
4
4
  "product": {
5
5
  "name": "Buildchain",
6
6
  "package": "@kungfu-tech/buildchain",
7
- "version": "4.0.2-alpha.7",
7
+ "version": "4.0.2-alpha.8",
8
8
  "repository": "https://github.com/kungfu-systems/buildchain"
9
9
  },
10
10
  "majorLine": "v4",
@@ -1646,7 +1646,7 @@
1646
1646
  "resume-from-candidate-run is fail-closed and uses a fresh caller event instead of rerunning a frozen startup graph"
1647
1647
  ],
1648
1648
  "breakingDigest": "sha256:9db8dd07152855d03ff30f9c571438593c689d3e8139fa45431d000f548242f5",
1649
- "auditDigest": "sha256:d218de8c047af98b00483cfca7e4c6e61e889a2df281259a3988c4026f0b65d7",
1649
+ "auditDigest": "sha256:8bdd3d18af0b2b54262691ca92d0ca1f8d1d7c8e4b24eaf4332050c535ecbf93",
1650
1650
  "compatibleBreakingDigests": [
1651
1651
  "sha256:aa30f22e3af0a89841310bdbdc900844dd95a66974db173fa140a71bbd7e82c0"
1652
1652
  ],
@@ -1863,7 +1863,7 @@
1863
1863
  "no consumer command, script, shell, checkout, or executable tail hook is accepted"
1864
1864
  ],
1865
1865
  "breakingDigest": "sha256:9229eb3a000fb408feb6b8793c209c77afbf9327026467d68954470e22e4f8f4",
1866
- "auditDigest": "sha256:b297931166d06249a7d482d6c2ef1e95e60602503113775c868f4fd62e2d6e65"
1866
+ "auditDigest": "sha256:a8c58825798d6bc078154c063db2d705c5b5cb6eadd58c8fc7a075d8c3948429"
1867
1867
  },
1868
1868
  {
1869
1869
  "contractVersion": 1,
@@ -2257,7 +2257,7 @@
2257
2257
  "manual entries carry source file digests so downstream sites and agents can detect stale hand-written documentation"
2258
2258
  ],
2259
2259
  "breakingDigest": "sha256:7d0d2819e3a3e72989d9c57b5efe9d0bc0a79bc0f2c82a0c7b9d6c5a211a91f2",
2260
- "auditDigest": "sha256:27bcd57f554c2f254fb350097e15fe8f3954bafb2fc04c72f725bdaf444fbea7"
2260
+ "auditDigest": "sha256:6a417249435e6f54a6018a618005b3d92420e87ea362e7970393f73fb692bead"
2261
2261
  },
2262
2262
  {
2263
2263
  "contractVersion": 1,
@@ -2279,7 +2279,7 @@
2279
2279
  "agents can discover supported Node APIs without importing internal file paths"
2280
2280
  ],
2281
2281
  "breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
2282
- "auditDigest": "sha256:1c6b63d2359c9d04f83081ddfbfc2a7cb66ccbba5795471c98980775d2bebf2c"
2282
+ "auditDigest": "sha256:ca80bdacfdfbfca0211b9b79e91767da5bb71a8e7626faaf9d681306854a5ff3"
2283
2283
  },
2284
2284
  {
2285
2285
  "contractVersion": 1,
@@ -5173,7 +5173,7 @@
5173
5173
  "missing receipts are non-qualifying and must not be represented as a successful controller run"
5174
5174
  ],
5175
5175
  "breakingDigest": "sha256:015d8de793adbd4c539416be7d7512e18cc92097e629b0203fa06d2c183e98bd",
5176
- "auditDigest": "sha256:d218de8c047af98b00483cfca7e4c6e61e889a2df281259a3988c4026f0b65d7"
5176
+ "auditDigest": "sha256:8bdd3d18af0b2b54262691ca92d0ca1f8d1d7c8e4b24eaf4332050c535ecbf93"
5177
5177
  },
5178
5178
  {
5179
5179
  "contractVersion": 1,
@@ -5399,5 +5399,5 @@
5399
5399
  "compatibilityFactCutRoot": "sha256:f61b975d4a96c921cc4bd37fb3ed9a0596b47004fe34dc7219979d697e3707f9",
5400
5400
  "compatibilityProofRegistryRoot": "sha256:b7194b811e4d3af2df4390bc4d1731e16a86215bd64ee18cb630dd5492f4fb63",
5401
5401
  "compatibilityDigest": "sha256:20411029d83211dff426fb6535a608902129844a5ccb4788db77d3f81becb839",
5402
- "contractDigest": "sha256:a524c48f562e1e256452aa51b39ea7c0912e7f20e7cdec6746eed05fdf7c57f1"
5402
+ "contractDigest": "sha256:95398d672549a3fde53d3da3c9b4e042578b7dacf99587b6139faa6f22c10453"
5403
5403
  }