@fungi.computer/puffball 0.0.0-stage → 0.0.1

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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +443 -2
  3. package/dist/app-api.d.ts +7 -0
  4. package/dist/app-api.js +61 -0
  5. package/dist/app-backend-binding-vocabulary.d.ts +299 -0
  6. package/dist/app-backend-binding-vocabulary.js +257 -0
  7. package/dist/app-backend-bindings.d.ts +21 -0
  8. package/dist/app-backend-bindings.js +47 -0
  9. package/dist/app-declaration.d.ts +46 -0
  10. package/dist/app-declaration.js +115 -0
  11. package/dist/app-event-facts.d.ts +40 -0
  12. package/dist/app-event-facts.js +28 -0
  13. package/dist/app-method-context.d.ts +109 -0
  14. package/dist/app-method-context.js +9 -0
  15. package/dist/app-method-runtime.d.ts +86 -0
  16. package/dist/app-method-runtime.js +122 -0
  17. package/dist/app-origin-paths.d.ts +6 -0
  18. package/dist/app-origin-paths.js +6 -0
  19. package/dist/app-vocabulary.d.ts +189 -0
  20. package/dist/app-vocabulary.js +103 -0
  21. package/dist/app.d.ts +379 -0
  22. package/dist/app.js +71 -0
  23. package/dist/artifact-dispositions.d.ts +115 -0
  24. package/dist/artifact-dispositions.js +234 -0
  25. package/dist/assets.d.ts +54 -0
  26. package/dist/assets.js +89 -0
  27. package/dist/backend.d.ts +41 -0
  28. package/dist/backend.js +29 -0
  29. package/dist/background-replay.d.ts +115 -0
  30. package/dist/background-replay.js +175 -0
  31. package/dist/buyer-references.d.ts +69 -0
  32. package/dist/buyer-references.js +154 -0
  33. package/dist/cloudflare-assets.d.ts +48 -0
  34. package/dist/cloudflare-assets.js +105 -0
  35. package/dist/cloudflare.d.ts +254 -0
  36. package/dist/cloudflare.js +1619 -0
  37. package/dist/effect.d.ts +73 -0
  38. package/dist/effect.js +325 -0
  39. package/dist/git-representation.d.ts +13 -0
  40. package/dist/git-representation.js +16 -0
  41. package/dist/inbox.d.ts +132 -0
  42. package/dist/inbox.js +81 -0
  43. package/dist/index.d.ts +31 -0
  44. package/dist/index.js +85 -0
  45. package/dist/internal/app-description.d.ts +14 -0
  46. package/dist/internal/app-description.js +98 -0
  47. package/dist/internal/app-release-artifact-reader.d.ts +26 -0
  48. package/dist/internal/app-release-artifact-reader.js +1 -0
  49. package/dist/internal/app-release-contract.d.ts +540 -0
  50. package/dist/internal/app-release-contract.js +169 -0
  51. package/dist/internal/app-release-schema.d.ts +1676 -0
  52. package/dist/internal/app-release-schema.js +386 -0
  53. package/dist/internal/app-release-store.d.ts +47 -0
  54. package/dist/internal/app-release-store.js +1 -0
  55. package/dist/internal/background-sync.d.ts +7 -0
  56. package/dist/internal/background-sync.js +10 -0
  57. package/dist/internal/deterministic-memory-app-release-store.d.ts +14 -0
  58. package/dist/internal/deterministic-memory-app-release-store.js +319 -0
  59. package/dist/internal/failure.d.ts +2 -0
  60. package/dist/internal/failure.js +9 -0
  61. package/dist/internal/immutable-release-material.d.ts +3 -0
  62. package/dist/internal/immutable-release-material.js +13 -0
  63. package/dist/internal/promise-app-release-store-adapter.d.ts +9 -0
  64. package/dist/internal/promise-app-release-store-adapter.js +65 -0
  65. package/dist/internal/promise-artifact-reader-adapter.d.ts +9 -0
  66. package/dist/internal/promise-artifact-reader-adapter.js +18 -0
  67. package/dist/internal/public-route-sql.d.ts +10 -0
  68. package/dist/internal/public-route-sql.js +239 -0
  69. package/dist/internal/public-website-authority.d.ts +338 -0
  70. package/dist/internal/public-website-authority.js +50 -0
  71. package/dist/internal/public-website-delivery.d.ts +59 -0
  72. package/dist/internal/public-website-delivery.js +232 -0
  73. package/dist/internal/public-website-fetch.d.ts +8 -0
  74. package/dist/internal/public-website-fetch.js +54 -0
  75. package/dist/internal/release-transition-material.d.ts +3 -0
  76. package/dist/internal/release-transition-material.js +11 -0
  77. package/dist/internal/verified-artifact-snapshot.d.ts +41 -0
  78. package/dist/internal/verified-artifact-snapshot.js +91 -0
  79. package/dist/public-route-moderation.d.ts +83 -0
  80. package/dist/public-route-moderation.js +236 -0
  81. package/dist/public-route-policy.d.ts +51 -0
  82. package/dist/public-route-policy.js +88 -0
  83. package/dist/public-routes.d.ts +34 -0
  84. package/dist/public-routes.js +136 -0
  85. package/dist/publisher.d.ts +61 -0
  86. package/dist/publisher.js +16 -0
  87. package/dist/safety-takedown.d.ts +56 -0
  88. package/dist/safety-takedown.js +146 -0
  89. package/dist/seller-closure-notice.d.ts +14 -0
  90. package/dist/seller-closure-notice.js +14 -0
  91. package/dist/seller-closure.d.ts +15 -0
  92. package/dist/seller-closure.js +31 -0
  93. package/dist/testing.d.ts +8 -0
  94. package/dist/testing.js +47 -0
  95. package/docs/api/README.md +26 -0
  96. package/docs/api/app-backend-binding-vocabulary.md +276 -0
  97. package/docs/api/app-backend-bindings.md +141 -0
  98. package/docs/api/app-event-facts.md +110 -0
  99. package/docs/api/app-method-context.md +166 -0
  100. package/docs/api/app-method-runtime.md +330 -0
  101. package/docs/api/backend.md +108 -0
  102. package/docs/api/background-replay.md +516 -0
  103. package/docs/api/cloudflare.md +1044 -0
  104. package/docs/api/effect.md +2429 -0
  105. package/docs/api/git-representation.md +56 -0
  106. package/docs/api/inbox.md +289 -0
  107. package/docs/api/index.md +2868 -0
  108. package/docs/api/publisher.md +147 -0
  109. package/docs/api/testing.md +31 -0
  110. package/package.json +158 -3
@@ -0,0 +1,2429 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/puffball**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/puffball](README.md) / effect
8
+
9
+ # effect
10
+
11
+ ## Type Aliases
12
+
13
+ ### AppReleaseCoreFailure
14
+
15
+ ```ts
16
+ type AppReleaseCoreFailure =
17
+ | AppReleaseImmutableConflictError
18
+ | AppReleaseOwnerAppAbsentError
19
+ | AppReleaseSurfaceOwnerAppAbsentError
20
+ | AppReleaseStoreUnavailableError
21
+ | AppReleaseReleaseAbsentError
22
+ | AppReleaseArtifactUnavailableError
23
+ | AppReleaseArtifactMissingError
24
+ | AppReleaseArtifactDigestMismatchError
25
+ | AppReleaseArtifactInvalidSnapshotError
26
+ | AppReleaseCommandInputError
27
+ | AppReleaseInvalidStoreResultError
28
+ | AppReleaseTransitionIdempotencyConflictError
29
+ | AppReleaseTransitionOwnershipConflictError
30
+ | AppReleaseTransitionReleaseAbsentError
31
+ | AppReleaseTransitionReleaseRevokedError
32
+ | AppReleaseTransitionReleaseUnverifiedError
33
+ | AppReleaseTransitionArtifactIncompatibleError
34
+ | AppReleaseTransitionSurfaceAbsentError
35
+ | AppReleaseTransitionIdUnavailableError
36
+ | AppReleasePublicWebsiteNotFoundError
37
+ | AppReleasePublicWebsiteUnavailableError;
38
+ ```
39
+
40
+ Closed domain failures that the core maps from store outcomes.
41
+
42
+ ---
43
+
44
+ ### AppReleaseCore
45
+
46
+ ```ts
47
+ type AppReleaseCore = object;
48
+ ```
49
+
50
+ Effect-native core for the narrow App and immutable Release catalog facts.
51
+
52
+ #### Methods
53
+
54
+ ##### createApp()
55
+
56
+ ```ts
57
+ createApp(app): Effect<App, AppReleaseCoreFailure>;
58
+ ```
59
+
60
+ Create or observe one Global App through the owned store port.
61
+
62
+ ###### Parameters
63
+
64
+ | Parameter | Type |
65
+ | --------- | --------------------- |
66
+ | `app` | [`App`](index.md#app) |
67
+
68
+ ###### Returns
69
+
70
+ `Effect`\<[`App`](index.md#app),
71
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
72
+
73
+ ##### createRelease()
74
+
75
+ ```ts
76
+ createRelease(release): Effect<Release, AppReleaseCoreFailure>;
77
+ ```
78
+
79
+ Create or observe one immutable Release through the owned store port.
80
+
81
+ ###### Parameters
82
+
83
+ | Parameter | Type |
84
+ | --------- | ----------------------------- |
85
+ | `release` | [`Release`](index.md#release) |
86
+
87
+ ###### Returns
88
+
89
+ `Effect`\<[`Release`](index.md#release),
90
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
91
+
92
+ ##### verifyReleaseArtifact()
93
+
94
+ ```ts
95
+ verifyReleaseArtifact(releaseId): Effect<VerifiedArtifactRead, AppReleaseCoreFailure>;
96
+ ```
97
+
98
+ Verify the immutable artifact bound to one Release.
99
+
100
+ ###### Parameters
101
+
102
+ | Parameter | Type |
103
+ | ----------- | --------------------------------- |
104
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
105
+
106
+ ###### Returns
107
+
108
+ `Effect`\<[`VerifiedArtifactRead`](index.md#verifiedartifactread),
109
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
110
+
111
+ ##### resolveEligibleReleaseArtifact()
112
+
113
+ ```ts
114
+ resolveEligibleReleaseArtifact(releaseId): Effect<VerifiedArtifactRead & object, AppReleaseCoreFailure>;
115
+ ```
116
+
117
+ Read and recheck one eligible snapshot before each authorized use.
118
+
119
+ ###### Parameters
120
+
121
+ | Parameter | Type |
122
+ | ----------- | --------------------------------- |
123
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
124
+
125
+ ###### Returns
126
+
127
+ `Effect`\<[`VerifiedArtifactRead`](index.md#verifiedartifactread) & `object`,
128
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
129
+
130
+ ##### resolveEligibleApp()
131
+
132
+ ```ts
133
+ resolveEligibleApp(releaseId): Effect<ResolvedApp, AppReleaseCoreFailure>;
134
+ ```
135
+
136
+ Resolve UI and backend together, checking eligibility around all child reads.
137
+
138
+ ###### Parameters
139
+
140
+ | Parameter | Type |
141
+ | ----------- | --------------------------------- |
142
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
143
+
144
+ ###### Returns
145
+
146
+ `Effect`\<[`ResolvedApp`](index.md#resolvedapp),
147
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
148
+
149
+ ##### resolveEligibleAppMetadata()
150
+
151
+ ```ts
152
+ resolveEligibleAppMetadata(releaseId): Effect<Readonly<{
153
+ release: Release;
154
+ digest: Sha256Digest;
155
+ description: VerifiedAppDescription;
156
+ }>, AppReleaseCoreFailure>;
157
+ ```
158
+
159
+ Resolve verified App metadata without reading any artifact body.
160
+
161
+ ###### Parameters
162
+
163
+ | Parameter | Type |
164
+ | ----------- | --------------------------------- |
165
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
166
+
167
+ ###### Returns
168
+
169
+ `Effect`\<`Readonly`\<\{ `release`: [`Release`](index.md#release); `digest`:
170
+ [`Sha256Digest`](index.md#sha256digest); `description`:
171
+ [`VerifiedAppDescription`](index.md#verifiedappdescription); \}\>,
172
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
173
+
174
+ ##### resolvePublicSurfaceAuthority()
175
+
176
+ ```ts
177
+ resolvePublicSurfaceAuthority(stableRoute): Effect<Readonly<{
178
+ currentReleaseId: ReleaseId;
179
+ sequence: number;
180
+ app: App;
181
+ release: Release;
182
+ surface: PublicSurface;
183
+ digest: Sha256Digest;
184
+ revocation: ReleaseRevocation;
185
+ description: VerifiedAppDescription;
186
+ }>, AppReleaseCoreFailure>;
187
+ ```
188
+
189
+ Resolve one selected Surface's current metadata authority without bodies.
190
+
191
+ ###### Parameters
192
+
193
+ | Parameter | Type |
194
+ | ------------- | ------------------------------------- |
195
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
196
+
197
+ ###### Returns
198
+
199
+ `Effect`\<`Readonly`\<\{ `currentReleaseId`: [`ReleaseId`](index.md#releaseid);
200
+ `sequence`: `number`; `app`: [`App`](index.md#app); `release`:
201
+ [`Release`](index.md#release); `surface`:
202
+ [`PublicSurface`](index.md#publicsurface); `digest`:
203
+ [`Sha256Digest`](index.md#sha256digest); `revocation`:
204
+ [`ReleaseRevocation`](index.md#releaserevocation); `description`:
205
+ [`VerifiedAppDescription`](index.md#verifiedappdescription); \}\>,
206
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
207
+
208
+ ##### resolvePublicSurfaceAuthorityVersion()
209
+
210
+ ```ts
211
+ resolvePublicSurfaceAuthorityVersion(stableRoute, releaseId): Effect<Readonly<{
212
+ currentReleaseId: ReleaseId;
213
+ sequence: number;
214
+ app: App;
215
+ release: Release;
216
+ surface: PublicSurface;
217
+ digest: Sha256Digest;
218
+ revocation: ReleaseRevocation;
219
+ description: VerifiedAppDescription;
220
+ }>, AppReleaseCoreFailure>;
221
+ ```
222
+
223
+ Resolve one previously selected Release's current metadata authority.
224
+
225
+ ###### Parameters
226
+
227
+ | Parameter | Type |
228
+ | ------------- | ------------------------------------- |
229
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
230
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
231
+
232
+ ###### Returns
233
+
234
+ `Effect`\<`Readonly`\<\{ `currentReleaseId`: [`ReleaseId`](index.md#releaseid);
235
+ `sequence`: `number`; `app`: [`App`](index.md#app); `release`:
236
+ [`Release`](index.md#release); `surface`:
237
+ [`PublicSurface`](index.md#publicsurface); `digest`:
238
+ [`Sha256Digest`](index.md#sha256digest); `revocation`:
239
+ [`ReleaseRevocation`](index.md#releaserevocation); `description`:
240
+ [`VerifiedAppDescription`](index.md#verifiedappdescription); \}\>,
241
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
242
+
243
+ ##### resolvePublicAssetBuild()
244
+
245
+ ```ts
246
+ resolvePublicAssetBuild(stableRoute): Effect<PublicAssetBuildRepresentation, AppReleaseCoreFailure>;
247
+ ```
248
+
249
+ Resolve a multi-file root through existing Surface selection and eligibility.
250
+
251
+ ###### Parameters
252
+
253
+ | Parameter | Type |
254
+ | ------------- | ------------------------------------- |
255
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
256
+
257
+ ###### Returns
258
+
259
+ `Effect`\<[`PublicAssetBuildRepresentation`](index.md#publicassetbuildrepresentation),
260
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
261
+
262
+ ##### createPublicSurface()
263
+
264
+ ```ts
265
+ createPublicSurface(surface): Effect<PublicSurface, AppReleaseCoreFailure>;
266
+ ```
267
+
268
+ Create or observe one App-owned anonymous public Surface.
269
+
270
+ ###### Parameters
271
+
272
+ | Parameter | Type |
273
+ | --------- | ------------------------------------------------------------- |
274
+ | `surface` | [`PublicSurfaceDefinition`](index.md#publicsurfacedefinition) |
275
+
276
+ ###### Returns
277
+
278
+ `Effect`\<[`PublicSurface`](index.md#publicsurface),
279
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
280
+
281
+ ##### transition()
282
+
283
+ ```ts
284
+ transition(request): Effect<TransitionReceipt, AppReleaseCoreFailure>;
285
+ ```
286
+
287
+ Apply one owner-issued transition with an idempotent terminal receipt.
288
+
289
+ ###### Parameters
290
+
291
+ | Parameter | Type |
292
+ | --------- | ------------------------------------------------- |
293
+ | `request` | [`ReleaseTransition`](index.md#releasetransition) |
294
+
295
+ ###### Returns
296
+
297
+ `Effect`\<[`TransitionReceipt`](index.md#transitionreceipt),
298
+ [`AppReleaseCoreFailure`](#appreleasecorefailure)\>
299
+
300
+ ##### resolveEligibleSurfaceRelease()
301
+
302
+ ```ts
303
+ resolveEligibleSurfaceRelease(stableRoute): Effect<Readonly<{
304
+ appId: Release["appId"];
305
+ releaseId: Release["releaseId"];
306
+ stableRoute: StableRoute;
307
+ artifactDigest: Sha256Digest;
308
+ mediaType: "application/vnd.fungi.app+json";
309
+ }>,
310
+ | AppReleasePublicWebsiteNotFoundError
311
+ | AppReleasePublicWebsiteUnavailableError>;
312
+ ```
313
+
314
+ Resolve the current eligible Surface Release without reading artifact bytes.
315
+
316
+ ###### Parameters
317
+
318
+ | Parameter | Type |
319
+ | ------------- | ------------------------------------- |
320
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
321
+
322
+ ###### Returns
323
+
324
+ `Effect`\<`Readonly`\<\{ `appId`: [`Release`](index.md#release)\[`"appId"`\];
325
+ `releaseId`: [`Release`](index.md#release)\[`"releaseId"`\]; `stableRoute`:
326
+ [`StableRoute`](index.md#stableroute); `artifactDigest`:
327
+ [`Sha256Digest`](index.md#sha256digest); `mediaType`:
328
+ `"application/vnd.fungi.app+json"`; \}\>, \|
329
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
330
+ \|
331
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
332
+
333
+ ##### resolveEligibleSurfaceReleases()
334
+
335
+ ```ts
336
+ resolveEligibleSurfaceReleases(stableRoutes): Effect<readonly Result<Readonly<{
337
+ appId: Release["appId"];
338
+ releaseId: Release["releaseId"];
339
+ stableRoute: StableRoute;
340
+ artifactDigest: Sha256Digest;
341
+ mediaType: "application/vnd.fungi.app+json";
342
+ }>,
343
+ | AppReleasePublicWebsiteNotFoundError
344
+ | AppReleasePublicWebsiteUnavailableError>[],
345
+ | AppReleasePublicWebsiteNotFoundError
346
+ | AppReleasePublicWebsiteUnavailableError>;
347
+ ```
348
+
349
+ Read up to 100 current Surface selections in one atomic metadata batch. Each
350
+ entry reports its eligibility; failure of the read fails the Effect.
351
+
352
+ ###### Parameters
353
+
354
+ | Parameter | Type |
355
+ | -------------- | ------------------------------------------------ |
356
+ | `stableRoutes` | readonly [`StableRoute`](index.md#stableroute)[] |
357
+
358
+ ###### Returns
359
+
360
+ `Effect`\<readonly `Result`\<`Readonly`\<\{ `appId`:
361
+ [`Release`](index.md#release)\[`"appId"`\]; `releaseId`:
362
+ [`Release`](index.md#release)\[`"releaseId"`\]; `stableRoute`:
363
+ [`StableRoute`](index.md#stableroute); `artifactDigest`:
364
+ [`Sha256Digest`](index.md#sha256digest); `mediaType`:
365
+ `"application/vnd.fungi.app+json"`; \}\>, \|
366
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
367
+ \|
368
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>[],
369
+ \|
370
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
371
+ \|
372
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
373
+
374
+ ##### resolveEligibleSurfaceVersion()
375
+
376
+ ```ts
377
+ resolveEligibleSurfaceVersion(stableRoute, releaseId): Effect<Readonly<{
378
+ appId: Release["appId"];
379
+ releaseId: Release["releaseId"];
380
+ stableRoute: StableRoute;
381
+ artifactDigest: Sha256Digest;
382
+ mediaType: "application/vnd.fungi.app+json";
383
+ }>,
384
+ | AppReleasePublicWebsiteNotFoundError
385
+ | AppReleasePublicWebsiteUnavailableError>;
386
+ ```
387
+
388
+ Resolve one eligible Release previously selected on this Surface.
389
+
390
+ ###### Parameters
391
+
392
+ | Parameter | Type |
393
+ | ------------- | ------------------------------------- |
394
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
395
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
396
+
397
+ ###### Returns
398
+
399
+ `Effect`\<`Readonly`\<\{ `appId`: [`Release`](index.md#release)\[`"appId"`\];
400
+ `releaseId`: [`Release`](index.md#release)\[`"releaseId"`\]; `stableRoute`:
401
+ [`StableRoute`](index.md#stableroute); `artifactDigest`:
402
+ [`Sha256Digest`](index.md#sha256digest); `mediaType`:
403
+ `"application/vnd.fungi.app+json"`; \}\>, \|
404
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
405
+ \|
406
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
407
+
408
+ ##### resolvePublicSurface()
409
+
410
+ ```ts
411
+ resolvePublicSurface(stableRoute): Effect<PublicSurface,
412
+ | AppReleasePublicWebsiteNotFoundError
413
+ | AppReleasePublicWebsiteUnavailableError>;
414
+ ```
415
+
416
+ Resolve one stable route's immutable Surface owner without selecting a Release.
417
+
418
+ ###### Parameters
419
+
420
+ | Parameter | Type |
421
+ | ------------- | ------------------------------------- |
422
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
423
+
424
+ ###### Returns
425
+
426
+ `Effect`\<[`PublicSurface`](index.md#publicsurface), \|
427
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
428
+ \|
429
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
430
+
431
+ ##### resolvePublicWebsite()
432
+
433
+ ```ts
434
+ resolvePublicWebsite(stableRoute): Effect<Readonly<{
435
+ releaseId: ReleaseId;
436
+ digest: Sha256Digest;
437
+ mediaType: "text/html; charset=utf-8";
438
+ byteLength: number;
439
+ bytes: ImmutableArtifactBytes;
440
+ }>,
441
+ | AppReleasePublicWebsiteNotFoundError
442
+ | AppReleasePublicWebsiteUnavailableError>;
443
+ ```
444
+
445
+ Resolve the current eligible immutable website representation.
446
+
447
+ ###### Parameters
448
+
449
+ | Parameter | Type |
450
+ | ------------- | ------------------------------------- |
451
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
452
+
453
+ ###### Returns
454
+
455
+ `Effect`\<`Readonly`\<\{ `releaseId`: [`ReleaseId`](index.md#releaseid);
456
+ `digest`: [`Sha256Digest`](index.md#sha256digest); `mediaType`:
457
+ `"text/html; charset=utf-8"`; `byteLength`: `number`; `bytes`:
458
+ [`ImmutableArtifactBytes`](index.md#immutableartifactbytes); \}\>, \|
459
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
460
+ \|
461
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
462
+
463
+ ##### resolvePublicWebsiteVersion()
464
+
465
+ ```ts
466
+ resolvePublicWebsiteVersion(stableRoute, releaseId): Effect<Readonly<{
467
+ releaseId: ReleaseId;
468
+ digest: Sha256Digest;
469
+ mediaType: "text/html; charset=utf-8";
470
+ byteLength: number;
471
+ bytes: ImmutableArtifactBytes;
472
+ }>,
473
+ | AppReleasePublicWebsiteNotFoundError
474
+ | AppReleasePublicWebsiteUnavailableError>;
475
+ ```
476
+
477
+ Resolve a pinned eligible immutable website representation.
478
+
479
+ ###### Parameters
480
+
481
+ | Parameter | Type |
482
+ | ------------- | ------------------------------------- |
483
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
484
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
485
+
486
+ ###### Returns
487
+
488
+ `Effect`\<`Readonly`\<\{ `releaseId`: [`ReleaseId`](index.md#releaseid);
489
+ `digest`: [`Sha256Digest`](index.md#sha256digest); `mediaType`:
490
+ `"text/html; charset=utf-8"`; `byteLength`: `number`; `bytes`:
491
+ [`ImmutableArtifactBytes`](index.md#immutableartifactbytes); \}\>, \|
492
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
493
+ \|
494
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
495
+
496
+ ##### resolvePublicAssetBuildVersion()
497
+
498
+ ```ts
499
+ resolvePublicAssetBuildVersion(stableRoute, releaseId): Effect<PublicAssetBuildRepresentation,
500
+ | AppReleasePublicWebsiteNotFoundError
501
+ | AppReleasePublicWebsiteUnavailableError>;
502
+ ```
503
+
504
+ Resolve a pinned asset-build root through Surface authority.
505
+
506
+ ###### Parameters
507
+
508
+ | Parameter | Type |
509
+ | ------------- | ------------------------------------- |
510
+ | `stableRoute` | [`StableRoute`](index.md#stableroute) |
511
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
512
+
513
+ ###### Returns
514
+
515
+ `Effect`\<[`PublicAssetBuildRepresentation`](index.md#publicassetbuildrepresentation),
516
+ \|
517
+ [`AppReleasePublicWebsiteNotFoundError`](index.md#appreleasepublicwebsitenotfounderror)
518
+ \|
519
+ [`AppReleasePublicWebsiteUnavailableError`](index.md#appreleasepublicwebsiteunavailableerror)\>
520
+
521
+ ---
522
+
523
+ ### AppReleaseArtifactReaderUnavailable
524
+
525
+ ```ts
526
+ type AppReleaseArtifactReaderUnavailable = object;
527
+ ```
528
+
529
+ Closed infrastructure failure at the hostile artifact-reader boundary.
530
+
531
+ #### Properties
532
+
533
+ ##### kind
534
+
535
+ ```ts
536
+ readonly kind: "unavailable";
537
+ ```
538
+
539
+ ---
540
+
541
+ ### AppReleaseArtifactReader
542
+
543
+ ```ts
544
+ type AppReleaseArtifactReader = object;
545
+ ```
546
+
547
+ Effect-native artifact reader port.
548
+
549
+ A reader result is hostile until the App Release core decodes it through its
550
+ canonical schema. This port owns the only direct unknown success value.
551
+
552
+ #### Methods
553
+
554
+ ##### read()
555
+
556
+ ```ts
557
+ read(input): Effect<unknown, AppReleaseArtifactReaderUnavailable>;
558
+ ```
559
+
560
+ Resolve one stored artifact reference for its expected immutable digest.
561
+
562
+ ###### Parameters
563
+
564
+ | Parameter | Type | Description |
565
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
566
+ | `input` | \{ `artifactRef`: [`ArtifactRef`](index.md#artifactref); `expectedDigest`: [`Sha256Digest`](index.md#sha256digest); `expectedObject?`: \{ `version`: `string`; `byteLength`: `number`; \}; `verification?`: [`ArtifactVerificationIntent`](index.md#artifactverificationintent); \} | - |
567
+ | `input.artifactRef` | [`ArtifactRef`](index.md#artifactref) | - |
568
+ | `input.expectedDigest` | [`Sha256Digest`](index.md#sha256digest) | - |
569
+ | `input.expectedObject?` | \{ `version`: `string`; `byteLength`: `number`; \} | Native version and size of a child named by a verified App root. |
570
+ | `input.expectedObject.version` | `string` | - |
571
+ | `input.expectedObject.byteLength` | `number` | - |
572
+ | `input.verification?` | [`ArtifactVerificationIntent`](index.md#artifactverificationintent) | Publication additionally verifies every object named by an asset manifest. |
573
+
574
+ ###### Returns
575
+
576
+ `Effect`\<`unknown`,
577
+ [`AppReleaseArtifactReaderUnavailable`](#appreleaseartifactreaderunavailable)\>
578
+
579
+ ---
580
+
581
+ ### AppReleaseStorePortFailure
582
+
583
+ ```ts
584
+ type AppReleaseStorePortFailure =
585
+ | AppReleaseStoreFailure
586
+ | {
587
+ kind: "invalid-store-result";
588
+ };
589
+ ```
590
+
591
+ Closed failures emitted by the owned Effect Store port.
592
+
593
+ The invalid-result sentinel lets the outer Promise adapter fail closed when a
594
+ foreign fulfilled value is not one of the catalog's durable outcomes.
595
+
596
+ ---
597
+
598
+ ### AppReleaseStore
599
+
600
+ ```ts
601
+ type AppReleaseStore = object;
602
+ ```
603
+
604
+ Canonical Effect-owned persistence port for the narrow App/Release catalog.
605
+
606
+ Implementations own atomicity; the catalog owns the interpretation of these
607
+ explicit outcomes. This port intentionally has no generic query or mutation
608
+ escape hatch.
609
+
610
+ #### Properties
611
+
612
+ ##### readReleaseLifecycle?
613
+
614
+ ```ts
615
+ readonly optional readReleaseLifecycle?: (releaseId) => Effect.Effect<ReleaseLifecycle, AppReleaseStorePortFailure>;
616
+ ```
617
+
618
+ Read the Release facts relevant to transition eligibility.
619
+
620
+ ###### Parameters
621
+
622
+ | Parameter | Type |
623
+ | ----------- | --------------------------------- |
624
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
625
+
626
+ ###### Returns
627
+
628
+ `Effect.Effect`\<[`ReleaseLifecycle`](index.md#releaselifecycle),
629
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
630
+
631
+ ##### recordReleaseVerification?
632
+
633
+ ```ts
634
+ readonly optional recordReleaseVerification?: (input) => Effect.Effect<{
635
+ kind: "recorded";
636
+ }, AppReleaseStorePortFailure>;
637
+ ```
638
+
639
+ Retain a verified artifact fact after core validation succeeds.
640
+
641
+ ###### Parameters
642
+
643
+ | Parameter | Type |
644
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
645
+ | `input` | \{ `releaseId`: [`ReleaseId`](index.md#releaseid); `digest`: [`Sha256Digest`](index.md#sha256digest); `mediaType`: `"application/vnd.fungi.app+json"`; `description`: [`VerifiedAppDescription`](index.md#verifiedappdescription); \} |
646
+ | `input.releaseId` | [`ReleaseId`](index.md#releaseid) |
647
+ | `input.digest` | [`Sha256Digest`](index.md#sha256digest) |
648
+ | `input.mediaType` | `"application/vnd.fungi.app+json"` |
649
+ | `input.description` | [`VerifiedAppDescription`](index.md#verifiedappdescription) |
650
+
651
+ ###### Returns
652
+
653
+ `Effect.Effect`\<\{ `kind`: `"recorded"`; \},
654
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
655
+
656
+ ##### readTransition?
657
+
658
+ ```ts
659
+ readonly optional readTransition?: (request) => Effect.Effect<TransitionLookup, AppReleaseStorePortFailure>;
660
+ ```
661
+
662
+ Read a receipt or idempotency conflict before transition policy.
663
+
664
+ ###### Parameters
665
+
666
+ | Parameter | Type |
667
+ | --------- | ------------------------------------------------- |
668
+ | `request` | [`ReleaseTransition`](index.md#releasetransition) |
669
+
670
+ ###### Returns
671
+
672
+ `Effect.Effect`\<[`TransitionLookup`](index.md#transitionlookup),
673
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
674
+
675
+ ##### persistTransition?
676
+
677
+ ```ts
678
+ readonly optional persistTransition?: (request, receipt) => Effect.Effect<TransitionPersistence, AppReleaseStorePortFailure>;
679
+ ```
680
+
681
+ Atomically persist a policy-approved transition and receipt.
682
+
683
+ ###### Parameters
684
+
685
+ | Parameter | Type |
686
+ | --------- | ------------------------------------------------- |
687
+ | `request` | [`ReleaseTransition`](index.md#releasetransition) |
688
+ | `receipt` | [`TransitionReceipt`](index.md#transitionreceipt) |
689
+
690
+ ###### Returns
691
+
692
+ `Effect.Effect`\<[`TransitionPersistence`](index.md#transitionpersistence),
693
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
694
+
695
+ #### Methods
696
+
697
+ ##### readApp()
698
+
699
+ ```ts
700
+ readApp(appId): Effect<AppRead, AppReleaseStorePortFailure>;
701
+ ```
702
+
703
+ Look up exactly one Global App.
704
+
705
+ ###### Parameters
706
+
707
+ | Parameter | Type |
708
+ | --------- | ------------------------- |
709
+ | `appId` | [`AppId`](index.md#appid) |
710
+
711
+ ###### Returns
712
+
713
+ `Effect`\<[`AppRead`](index.md#appread),
714
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
715
+
716
+ ##### createAppIfAbsent()
717
+
718
+ ```ts
719
+ createAppIfAbsent(app): Effect<AppCreate, AppReleaseStorePortFailure>;
720
+ ```
721
+
722
+ Atomically create or observe exactly one Global App.
723
+
724
+ ###### Parameters
725
+
726
+ | Parameter | Type |
727
+ | --------- | --------------------- |
728
+ | `app` | [`App`](index.md#app) |
729
+
730
+ ###### Returns
731
+
732
+ `Effect`\<[`AppCreate`](index.md#appcreate),
733
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
734
+
735
+ ##### readRelease()
736
+
737
+ ```ts
738
+ readRelease(releaseId): Effect<ReleaseRead, AppReleaseStorePortFailure>;
739
+ ```
740
+
741
+ Look up exactly one immutable Release.
742
+
743
+ ###### Parameters
744
+
745
+ | Parameter | Type |
746
+ | ----------- | --------------------------------- |
747
+ | `releaseId` | [`ReleaseId`](index.md#releaseid) |
748
+
749
+ ###### Returns
750
+
751
+ `Effect`\<[`ReleaseRead`](index.md#releaseread),
752
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
753
+
754
+ ##### createReleaseIfAbsent()
755
+
756
+ ```ts
757
+ createReleaseIfAbsent(release): Effect<ReleaseCreate, AppReleaseStorePortFailure>;
758
+ ```
759
+
760
+ Atomically create or observe exactly one immutable Release.
761
+
762
+ ###### Parameters
763
+
764
+ | Parameter | Type |
765
+ | --------- | ----------------------------- |
766
+ | `release` | [`Release`](index.md#release) |
767
+
768
+ ###### Returns
769
+
770
+ `Effect`\<[`ReleaseCreate`](index.md#releasecreate),
771
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
772
+
773
+ ##### readPublicSurface()
774
+
775
+ ```ts
776
+ readPublicSurface(publicSurfaceId): Effect<PublicSurfaceRead, AppReleaseStorePortFailure>;
777
+ ```
778
+
779
+ Look up exactly one App-owned anonymous public Surface.
780
+
781
+ ###### Parameters
782
+
783
+ | Parameter | Type |
784
+ | ----------------- | --------------------------------------------- |
785
+ | `publicSurfaceId` | [`PublicSurfaceId`](index.md#publicsurfaceid) |
786
+
787
+ ###### Returns
788
+
789
+ `Effect`\<[`PublicSurfaceRead`](index.md#publicsurfaceread),
790
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
791
+
792
+ ##### createPublicSurfaceIfAbsent()
793
+
794
+ ```ts
795
+ createPublicSurfaceIfAbsent(surface): Effect<PublicSurfaceCreate, AppReleaseStorePortFailure>;
796
+ ```
797
+
798
+ Atomically create or observe one App-owned anonymous public Surface.
799
+
800
+ ###### Parameters
801
+
802
+ | Parameter | Type |
803
+ | --------- | ------------------------------------------------------------- |
804
+ | `surface` | [`PublicSurfaceDefinition`](index.md#publicsurfacedefinition) |
805
+
806
+ ###### Returns
807
+
808
+ `Effect`\<[`PublicSurfaceCreate`](index.md#publicsurfacecreate),
809
+ [`AppReleaseStorePortFailure`](#appreleasestoreportfailure)\>
810
+
811
+ ## Variables
812
+
813
+ ### appIdSchema
814
+
815
+ ```ts
816
+ const appIdSchema: refine<AppId, String>;
817
+ ```
818
+
819
+ Canonical Effect Schema for one Global App identifier.
820
+
821
+ ---
822
+
823
+ ### releaseIdSchema
824
+
825
+ ```ts
826
+ const releaseIdSchema: refine<ReleaseId, String>;
827
+ ```
828
+
829
+ Canonical Effect Schema for one immutable Release identifier.
830
+
831
+ ---
832
+
833
+ ### publicSurfaceIdSchema
834
+
835
+ ```ts
836
+ const publicSurfaceIdSchema: refine<PublicSurfaceId, String>;
837
+ ```
838
+
839
+ Canonical Effect Schema for one anonymous public-Surface identifier.
840
+
841
+ ---
842
+
843
+ ### artifactRefSchema
844
+
845
+ ```ts
846
+ const artifactRefSchema: refine<ArtifactRef, String>;
847
+ ```
848
+
849
+ Canonical Effect Schema for one bounded artifact reference.
850
+
851
+ ---
852
+
853
+ ### idempotencyKeySchema
854
+
855
+ ```ts
856
+ const idempotencyKeySchema: refine<IdempotencyKey, String>;
857
+ ```
858
+
859
+ Canonical Effect Schema for one caller-provided idempotency key.
860
+
861
+ ---
862
+
863
+ ### sourceRevisionSchema
864
+
865
+ ```ts
866
+ const sourceRevisionSchema: refine<SourceRevision, String>;
867
+ ```
868
+
869
+ Canonical Effect Schema for one pinned lowercase Git source revision.
870
+
871
+ ---
872
+
873
+ ### sha256DigestSchema
874
+
875
+ ```ts
876
+ const sha256DigestSchema: refine<Sha256Digest, String>;
877
+ ```
878
+
879
+ Canonical Effect Schema for one lowercase SHA-256 digest.
880
+
881
+ ---
882
+
883
+ ### stableRouteSchema
884
+
885
+ ```ts
886
+ const stableRouteSchema: refine<StableRoute, String>;
887
+ ```
888
+
889
+ Canonical Effect Schema for one canonical local stable route.
890
+
891
+ ---
892
+
893
+ ### appSchema
894
+
895
+ ```ts
896
+ const appSchema: Struct<{
897
+ appId: refine<AppId, String>;
898
+ }>;
899
+ ```
900
+
901
+ Canonical Effect Schema for a Global App record.
902
+
903
+ ---
904
+
905
+ ### artifactProvenanceSchema
906
+
907
+ ```ts
908
+ const artifactProvenanceSchema: Struct<{
909
+ sourceRevision: refine<SourceRevision, String>;
910
+ sourceTreeDigest: refine<Sha256Digest, String>;
911
+ buildRecipeDigest: refine<Sha256Digest, String>;
912
+ }>;
913
+ ```
914
+
915
+ Canonical Effect Schema for immutable source and build provenance.
916
+
917
+ ---
918
+
919
+ ### releaseArtifactSchema
920
+
921
+ ```ts
922
+ const releaseArtifactSchema: Struct<{
923
+ artifactRef: refine<ArtifactRef, String>;
924
+ artifactDigest: refine<Sha256Digest, String>;
925
+ provenance: Struct<{
926
+ sourceRevision: refine<SourceRevision, String>;
927
+ sourceTreeDigest: refine<Sha256Digest, String>;
928
+ buildRecipeDigest: refine<Sha256Digest, String>;
929
+ }>;
930
+ }>;
931
+ ```
932
+
933
+ Canonical Effect Schema for immutable artifact identity and provenance.
934
+
935
+ ---
936
+
937
+ ### releaseSchema
938
+
939
+ ```ts
940
+ const releaseSchema: Struct<{
941
+ releaseId: refine<ReleaseId, String>;
942
+ appId: refine<AppId, String>;
943
+ artifact: Struct<{
944
+ artifactRef: refine<ArtifactRef, String>;
945
+ artifactDigest: refine<Sha256Digest, String>;
946
+ provenance: Struct<{
947
+ sourceRevision: refine<SourceRevision, String>;
948
+ sourceTreeDigest: refine<Sha256Digest, String>;
949
+ buildRecipeDigest: refine<Sha256Digest, String>;
950
+ }>;
951
+ }>;
952
+ }>;
953
+ ```
954
+
955
+ Canonical Effect Schema for one immutable App Release.
956
+
957
+ ---
958
+
959
+ ### publicSurfaceSchema
960
+
961
+ ```ts
962
+ const publicSurfaceSchema: Struct<{
963
+ publicSurfaceId: refine<PublicSurfaceId, String>;
964
+ appId: refine<AppId, String>;
965
+ stableRoute: refine<StableRoute, String>;
966
+ }>;
967
+ ```
968
+
969
+ Canonical Effect Schema for one App-owned anonymous public Surface.
970
+
971
+ ---
972
+
973
+ ### verifiedArtifactReadSchema
974
+
975
+ ```ts
976
+ const verifiedArtifactReadSchema: Struct<{
977
+ kind: Literal<"verified">;
978
+ digest: refine<Sha256Digest, String>;
979
+ mediaType: Literals<
980
+ readonly [
981
+ "text/html; charset=utf-8",
982
+ "application/vnd.fungi.app-backend+json",
983
+ "application/vnd.fungi.app-assets+json",
984
+ "application/vnd.fungi.app+json",
985
+ ]
986
+ >;
987
+ bytes: refine<
988
+ object & ImmutableArtifactBytes,
989
+ Struct<{
990
+ byteLength: Number;
991
+ copy: instanceOf<Function, unknown>;
992
+ }>
993
+ >;
994
+ byteLength: Number;
995
+ }>;
996
+ ```
997
+
998
+ Canonical Effect Schema for a verified immutable artifact snapshot.
999
+
1000
+ ---
1001
+
1002
+ ### artifactReadResultSchema
1003
+
1004
+ ```ts
1005
+ const artifactReadResultSchema: Union<
1006
+ readonly [
1007
+ Struct<{
1008
+ kind: Literal<"verified">;
1009
+ digest: refine<Sha256Digest, String>;
1010
+ mediaType: Literals<
1011
+ readonly [
1012
+ "text/html; charset=utf-8",
1013
+ "application/vnd.fungi.app-backend+json",
1014
+ "application/vnd.fungi.app-assets+json",
1015
+ "application/vnd.fungi.app+json",
1016
+ ]
1017
+ >;
1018
+ bytes: refine<
1019
+ object & ImmutableArtifactBytes,
1020
+ Struct<{
1021
+ byteLength: Number;
1022
+ copy: instanceOf<Function, unknown>;
1023
+ }>
1024
+ >;
1025
+ byteLength: Number;
1026
+ }>,
1027
+ Struct<{
1028
+ kind: Literal<"unavailable">;
1029
+ }>,
1030
+ Struct<{
1031
+ kind: Literal<"missing">;
1032
+ }>,
1033
+ Struct<{
1034
+ kind: Literal<"digest-mismatch">;
1035
+ actualDigest: refine<Sha256Digest, String>;
1036
+ }>,
1037
+ ]
1038
+ >;
1039
+ ```
1040
+
1041
+ Canonical Effect Schema for the complete hostile artifact-reader result.
1042
+
1043
+ ---
1044
+
1045
+ ### appReadSchema
1046
+
1047
+ ```ts
1048
+ const appReadSchema: Union<
1049
+ readonly [
1050
+ Struct<{
1051
+ kind: Literal<"found">;
1052
+ app: Struct<{
1053
+ appId: refine<AppId, String>;
1054
+ }>;
1055
+ }>,
1056
+ Struct<{
1057
+ kind: Literal<"absent">;
1058
+ }>,
1059
+ ]
1060
+ >;
1061
+ ```
1062
+
1063
+ Canonical Effect Schema for one explicit App lookup result.
1064
+
1065
+ ---
1066
+
1067
+ ### appCreateSchema
1068
+
1069
+ ```ts
1070
+ const appCreateSchema: Union<
1071
+ readonly [
1072
+ Struct<{
1073
+ kind: Literal<"created">;
1074
+ app: Struct<{
1075
+ appId: refine<AppId, String>;
1076
+ }>;
1077
+ }>,
1078
+ Struct<{
1079
+ kind: Literal<"existing">;
1080
+ app: Struct<{
1081
+ appId: refine<AppId, String>;
1082
+ }>;
1083
+ }>,
1084
+ ]
1085
+ >;
1086
+ ```
1087
+
1088
+ Canonical Effect Schema for one explicit App create-or-observe result.
1089
+
1090
+ ---
1091
+
1092
+ ### releaseReadSchema
1093
+
1094
+ ```ts
1095
+ const releaseReadSchema: Union<readonly [Struct<{
1096
+ kind: Literal<"found">;
1097
+ release: Struct<{
1098
+ releaseId: refine<ReleaseId, String>;
1099
+ appId: refine<AppId, String>;
1100
+ artifact: Struct<{
1101
+ artifactRef: refine<ArtifactRef, String>;
1102
+ artifactDigest: refine<Sha256Digest, String>;
1103
+ provenance: Struct<{
1104
+ sourceRevision: refine<..., ...>;
1105
+ sourceTreeDigest: refine<..., ...>;
1106
+ buildRecipeDigest: refine<..., ...>;
1107
+ }>;
1108
+ }>;
1109
+ }>;
1110
+ }>, Struct<{
1111
+ kind: Literal<"absent">;
1112
+ }>]>;
1113
+ ```
1114
+
1115
+ Canonical Effect Schema for one explicit Release lookup result.
1116
+
1117
+ ---
1118
+
1119
+ ### releaseCreateSchema
1120
+
1121
+ ```ts
1122
+ const releaseCreateSchema: Union<readonly [Struct<{
1123
+ kind: Literal<"created">;
1124
+ release: Struct<{
1125
+ releaseId: refine<ReleaseId, String>;
1126
+ appId: refine<AppId, String>;
1127
+ artifact: Struct<{
1128
+ artifactRef: refine<ArtifactRef, String>;
1129
+ artifactDigest: refine<Sha256Digest, String>;
1130
+ provenance: Struct<{
1131
+ sourceRevision: refine<..., ...>;
1132
+ sourceTreeDigest: refine<..., ...>;
1133
+ buildRecipeDigest: refine<..., ...>;
1134
+ }>;
1135
+ }>;
1136
+ }>;
1137
+ }>, Struct<{
1138
+ kind: Literal<"existing">;
1139
+ release: Struct<{
1140
+ releaseId: refine<ReleaseId, String>;
1141
+ appId: refine<AppId, String>;
1142
+ artifact: Struct<{
1143
+ artifactRef: refine<ArtifactRef, String>;
1144
+ artifactDigest: refine<Sha256Digest, String>;
1145
+ provenance: Struct<{
1146
+ sourceRevision: refine<..., ...>;
1147
+ sourceTreeDigest: refine<..., ...>;
1148
+ buildRecipeDigest: refine<..., ...>;
1149
+ }>;
1150
+ }>;
1151
+ }>;
1152
+ }>]>;
1153
+ ```
1154
+
1155
+ Canonical Effect Schema for one explicit Release create-or-observe result.
1156
+
1157
+ ---
1158
+
1159
+ ### publicSurfaceReadSchema
1160
+
1161
+ ```ts
1162
+ const publicSurfaceReadSchema: Union<
1163
+ readonly [
1164
+ Struct<{
1165
+ kind: Literal<"found">;
1166
+ surface: Struct<{
1167
+ publicSurfaceId: refine<PublicSurfaceId, String>;
1168
+ appId: refine<AppId, String>;
1169
+ stableRoute: refine<StableRoute, String>;
1170
+ }>;
1171
+ }>,
1172
+ Struct<{
1173
+ kind: Literal<"absent">;
1174
+ }>,
1175
+ ]
1176
+ >;
1177
+ ```
1178
+
1179
+ Canonical Effect Schema for one explicit public-Surface lookup result.
1180
+
1181
+ ---
1182
+
1183
+ ### publicSurfaceCreateSchema
1184
+
1185
+ ```ts
1186
+ const publicSurfaceCreateSchema: Union<
1187
+ readonly [
1188
+ Struct<{
1189
+ kind: Literal<"created">;
1190
+ surface: Struct<{
1191
+ publicSurfaceId: refine<PublicSurfaceId, String>;
1192
+ appId: refine<AppId, String>;
1193
+ stableRoute: refine<StableRoute, String>;
1194
+ }>;
1195
+ }>,
1196
+ Struct<{
1197
+ kind: Literal<"existing">;
1198
+ surface: Struct<{
1199
+ publicSurfaceId: refine<PublicSurfaceId, String>;
1200
+ appId: refine<AppId, String>;
1201
+ stableRoute: refine<StableRoute, String>;
1202
+ }>;
1203
+ }>,
1204
+ Struct<{
1205
+ kind: Literal<"conflict">;
1206
+ }>,
1207
+ ]
1208
+ >;
1209
+ ```
1210
+
1211
+ Canonical Effect Schema for one public-Surface create-or-observe result.
1212
+
1213
+ ---
1214
+
1215
+ ### appTransitionIdSchema
1216
+
1217
+ ```ts
1218
+ const appTransitionIdSchema: declare<AppTransitionId, AppTransitionId>;
1219
+ ```
1220
+
1221
+ The sole Effect Schema wrapper around Cairn's transition codec parser.
1222
+
1223
+ ---
1224
+
1225
+ ### appReleaseStoreFailureSchema
1226
+
1227
+ ```ts
1228
+ const appReleaseStoreFailureSchema: Struct<{
1229
+ kind: Literal<"unavailable">;
1230
+ }>;
1231
+ ```
1232
+
1233
+ Canonical Effect Schema for a closed App Release store infrastructure failure.
1234
+
1235
+ ---
1236
+
1237
+ ### appReadStoreResultSchema
1238
+
1239
+ ```ts
1240
+ const appReadStoreResultSchema: Union<
1241
+ readonly [
1242
+ Struct<{
1243
+ kind: Literal<"success">;
1244
+ value: Codec<
1245
+ | {
1246
+ kind: "found";
1247
+ app: {
1248
+ appId: AppId;
1249
+ };
1250
+ }
1251
+ | {
1252
+ kind: "absent";
1253
+ },
1254
+ | {
1255
+ kind: "found";
1256
+ app: {
1257
+ appId: string;
1258
+ };
1259
+ }
1260
+ | {
1261
+ kind: "absent";
1262
+ },
1263
+ never,
1264
+ never
1265
+ >;
1266
+ }>,
1267
+ Struct<{
1268
+ kind: Literal<"failure">;
1269
+ failure: Struct<{
1270
+ kind: Literal<"unavailable">;
1271
+ }>;
1272
+ }>,
1273
+ ]
1274
+ >;
1275
+ ```
1276
+
1277
+ Canonical Effect Schema for a closed App-read store result envelope.
1278
+
1279
+ ---
1280
+
1281
+ ### appCreateStoreResultSchema
1282
+
1283
+ ```ts
1284
+ const appCreateStoreResultSchema: Union<
1285
+ readonly [
1286
+ Struct<{
1287
+ kind: Literal<"success">;
1288
+ value: Codec<
1289
+ | {
1290
+ kind: "created";
1291
+ app: {
1292
+ appId: AppId;
1293
+ };
1294
+ }
1295
+ | {
1296
+ kind: "existing";
1297
+ app: {
1298
+ appId: AppId;
1299
+ };
1300
+ },
1301
+ | {
1302
+ kind: "created";
1303
+ app: {
1304
+ appId: string;
1305
+ };
1306
+ }
1307
+ | {
1308
+ kind: "existing";
1309
+ app: {
1310
+ appId: string;
1311
+ };
1312
+ },
1313
+ never,
1314
+ never
1315
+ >;
1316
+ }>,
1317
+ Struct<{
1318
+ kind: Literal<"failure">;
1319
+ failure: Struct<{
1320
+ kind: Literal<"unavailable">;
1321
+ }>;
1322
+ }>,
1323
+ ]
1324
+ >;
1325
+ ```
1326
+
1327
+ Canonical Effect Schema for a closed App-create store result envelope.
1328
+
1329
+ ---
1330
+
1331
+ ### releaseReadStoreResultSchema
1332
+
1333
+ ```ts
1334
+ const releaseReadStoreResultSchema: Union<
1335
+ readonly [
1336
+ Struct<{
1337
+ kind: Literal<"success">;
1338
+ value: Codec<
1339
+ | {
1340
+ kind: "found";
1341
+ release: {
1342
+ releaseId: ReleaseId;
1343
+ appId: AppId;
1344
+ artifact: {
1345
+ artifactRef: ArtifactRef;
1346
+ artifactDigest: Sha256Digest;
1347
+ provenance: {
1348
+ sourceRevision: SourceRevision;
1349
+ sourceTreeDigest: Sha256Digest;
1350
+ buildRecipeDigest: Sha256Digest;
1351
+ };
1352
+ };
1353
+ };
1354
+ }
1355
+ | {
1356
+ kind: "absent";
1357
+ },
1358
+ | {
1359
+ kind: "found";
1360
+ release: {
1361
+ releaseId: string;
1362
+ appId: string;
1363
+ artifact: {
1364
+ artifactRef: string;
1365
+ artifactDigest: string;
1366
+ provenance: {
1367
+ sourceRevision: string;
1368
+ sourceTreeDigest: string;
1369
+ buildRecipeDigest: string;
1370
+ };
1371
+ };
1372
+ };
1373
+ }
1374
+ | {
1375
+ kind: "absent";
1376
+ },
1377
+ never,
1378
+ never
1379
+ >;
1380
+ }>,
1381
+ Struct<{
1382
+ kind: Literal<"failure">;
1383
+ failure: Struct<{
1384
+ kind: Literal<"unavailable">;
1385
+ }>;
1386
+ }>,
1387
+ ]
1388
+ >;
1389
+ ```
1390
+
1391
+ Canonical Effect Schema for a closed Release-read store result envelope.
1392
+
1393
+ ---
1394
+
1395
+ ### releaseCreateStoreResultSchema
1396
+
1397
+ ```ts
1398
+ const releaseCreateStoreResultSchema: Union<
1399
+ readonly [
1400
+ Struct<{
1401
+ kind: Literal<"success">;
1402
+ value: Codec<
1403
+ | {
1404
+ kind: "created";
1405
+ release: {
1406
+ releaseId: ReleaseId;
1407
+ appId: AppId;
1408
+ artifact: {
1409
+ artifactRef: ArtifactRef;
1410
+ artifactDigest: Sha256Digest;
1411
+ provenance: {
1412
+ sourceRevision: SourceRevision;
1413
+ sourceTreeDigest: Sha256Digest;
1414
+ buildRecipeDigest: Sha256Digest;
1415
+ };
1416
+ };
1417
+ };
1418
+ }
1419
+ | {
1420
+ kind: "existing";
1421
+ release: {
1422
+ releaseId: ReleaseId;
1423
+ appId: AppId;
1424
+ artifact: {
1425
+ artifactRef: ArtifactRef;
1426
+ artifactDigest: Sha256Digest;
1427
+ provenance: {
1428
+ sourceRevision: SourceRevision;
1429
+ sourceTreeDigest: Sha256Digest;
1430
+ buildRecipeDigest: Sha256Digest;
1431
+ };
1432
+ };
1433
+ };
1434
+ },
1435
+ | {
1436
+ kind: "created";
1437
+ release: {
1438
+ releaseId: string;
1439
+ appId: string;
1440
+ artifact: {
1441
+ artifactRef: string;
1442
+ artifactDigest: string;
1443
+ provenance: {
1444
+ sourceRevision: string;
1445
+ sourceTreeDigest: string;
1446
+ buildRecipeDigest: string;
1447
+ };
1448
+ };
1449
+ };
1450
+ }
1451
+ | {
1452
+ kind: "existing";
1453
+ release: {
1454
+ releaseId: string;
1455
+ appId: string;
1456
+ artifact: {
1457
+ artifactRef: string;
1458
+ artifactDigest: string;
1459
+ provenance: {
1460
+ sourceRevision: string;
1461
+ sourceTreeDigest: string;
1462
+ buildRecipeDigest: string;
1463
+ };
1464
+ };
1465
+ };
1466
+ },
1467
+ never,
1468
+ never
1469
+ >;
1470
+ }>,
1471
+ Struct<{
1472
+ kind: Literal<"failure">;
1473
+ failure: Struct<{
1474
+ kind: Literal<"unavailable">;
1475
+ }>;
1476
+ }>,
1477
+ ]
1478
+ >;
1479
+ ```
1480
+
1481
+ Canonical Effect Schema for a closed Release-create store result envelope.
1482
+
1483
+ ---
1484
+
1485
+ ### publicSurfaceReadStoreResultSchema
1486
+
1487
+ ```ts
1488
+ const publicSurfaceReadStoreResultSchema: Union<
1489
+ readonly [
1490
+ Struct<{
1491
+ kind: Literal<"success">;
1492
+ value: Codec<
1493
+ | {
1494
+ kind: "found";
1495
+ surface: {
1496
+ publicSurfaceId: PublicSurfaceId;
1497
+ appId: AppId;
1498
+ stableRoute: StableRoute;
1499
+ };
1500
+ }
1501
+ | {
1502
+ kind: "absent";
1503
+ },
1504
+ | {
1505
+ kind: "found";
1506
+ surface: {
1507
+ publicSurfaceId: string;
1508
+ appId: string;
1509
+ stableRoute: string;
1510
+ };
1511
+ }
1512
+ | {
1513
+ kind: "absent";
1514
+ },
1515
+ never,
1516
+ never
1517
+ >;
1518
+ }>,
1519
+ Struct<{
1520
+ kind: Literal<"failure">;
1521
+ failure: Struct<{
1522
+ kind: Literal<"unavailable">;
1523
+ }>;
1524
+ }>,
1525
+ ]
1526
+ >;
1527
+ ```
1528
+
1529
+ Canonical Effect Schema for a closed public-Surface-read store result envelope.
1530
+
1531
+ ---
1532
+
1533
+ ### publicSurfaceCreateStoreResultSchema
1534
+
1535
+ ```ts
1536
+ const publicSurfaceCreateStoreResultSchema: Union<
1537
+ readonly [
1538
+ Struct<{
1539
+ kind: Literal<"success">;
1540
+ value: Codec<
1541
+ | {
1542
+ kind: "created";
1543
+ surface: {
1544
+ publicSurfaceId: PublicSurfaceId;
1545
+ appId: AppId;
1546
+ stableRoute: StableRoute;
1547
+ };
1548
+ }
1549
+ | {
1550
+ kind: "existing";
1551
+ surface: {
1552
+ publicSurfaceId: PublicSurfaceId;
1553
+ appId: AppId;
1554
+ stableRoute: StableRoute;
1555
+ };
1556
+ }
1557
+ | {
1558
+ kind: "conflict";
1559
+ },
1560
+ | {
1561
+ kind: "created";
1562
+ surface: {
1563
+ publicSurfaceId: string;
1564
+ appId: string;
1565
+ stableRoute: string;
1566
+ };
1567
+ }
1568
+ | {
1569
+ kind: "existing";
1570
+ surface: {
1571
+ publicSurfaceId: string;
1572
+ appId: string;
1573
+ stableRoute: string;
1574
+ };
1575
+ }
1576
+ | {
1577
+ kind: "conflict";
1578
+ },
1579
+ never,
1580
+ never
1581
+ >;
1582
+ }>,
1583
+ Struct<{
1584
+ kind: Literal<"failure">;
1585
+ failure: Struct<{
1586
+ kind: Literal<"unavailable">;
1587
+ }>;
1588
+ }>,
1589
+ ]
1590
+ >;
1591
+ ```
1592
+
1593
+ Canonical Effect Schema for a closed public-Surface-create store result
1594
+ envelope.
1595
+
1596
+ ---
1597
+
1598
+ ### decodeAppId
1599
+
1600
+ ```ts
1601
+ const decodeAppId: (input, options?) => Result<AppId, SchemaError>;
1602
+ ```
1603
+
1604
+ Decode one Global App identifier through its canonical closed Effect Schema.
1605
+
1606
+ #### Parameters
1607
+
1608
+ | Parameter | Type |
1609
+ | ---------- | -------------- |
1610
+ | `input` | `unknown` |
1611
+ | `options?` | `ParseOptions` |
1612
+
1613
+ #### Returns
1614
+
1615
+ `Result`\<[`AppId`](index.md#appid), `SchemaError`\>
1616
+
1617
+ ---
1618
+
1619
+ ### decodeReleaseId
1620
+
1621
+ ```ts
1622
+ const decodeReleaseId: (input, options?) => Result<ReleaseId, SchemaError>;
1623
+ ```
1624
+
1625
+ Decode one immutable Release identifier through its canonical closed Effect
1626
+ Schema.
1627
+
1628
+ #### Parameters
1629
+
1630
+ | Parameter | Type |
1631
+ | ---------- | -------------- |
1632
+ | `input` | `unknown` |
1633
+ | `options?` | `ParseOptions` |
1634
+
1635
+ #### Returns
1636
+
1637
+ `Result`\<[`ReleaseId`](index.md#releaseid), `SchemaError`\>
1638
+
1639
+ ---
1640
+
1641
+ ### decodePublicSurfaceId
1642
+
1643
+ ```ts
1644
+ const decodePublicSurfaceId: (
1645
+ input,
1646
+ options?,
1647
+ ) => Result<PublicSurfaceId, SchemaError>;
1648
+ ```
1649
+
1650
+ Decode one public-Surface identifier through its canonical closed Effect Schema.
1651
+
1652
+ #### Parameters
1653
+
1654
+ | Parameter | Type |
1655
+ | ---------- | -------------- |
1656
+ | `input` | `unknown` |
1657
+ | `options?` | `ParseOptions` |
1658
+
1659
+ #### Returns
1660
+
1661
+ `Result`\<[`PublicSurfaceId`](index.md#publicsurfaceid), `SchemaError`\>
1662
+
1663
+ ---
1664
+
1665
+ ### decodeArtifactRef
1666
+
1667
+ ```ts
1668
+ const decodeArtifactRef: (input, options?) => Result<ArtifactRef, SchemaError>;
1669
+ ```
1670
+
1671
+ Decode one bounded artifact reference through its canonical closed Effect
1672
+ Schema.
1673
+
1674
+ #### Parameters
1675
+
1676
+ | Parameter | Type |
1677
+ | ---------- | -------------- |
1678
+ | `input` | `unknown` |
1679
+ | `options?` | `ParseOptions` |
1680
+
1681
+ #### Returns
1682
+
1683
+ `Result`\<[`ArtifactRef`](index.md#artifactref), `SchemaError`\>
1684
+
1685
+ ---
1686
+
1687
+ ### decodeIdempotencyKey
1688
+
1689
+ ```ts
1690
+ const decodeIdempotencyKey: (
1691
+ input,
1692
+ options?,
1693
+ ) => Result<IdempotencyKey, SchemaError>;
1694
+ ```
1695
+
1696
+ Decode one idempotency key through its canonical closed Effect Schema.
1697
+
1698
+ #### Parameters
1699
+
1700
+ | Parameter | Type |
1701
+ | ---------- | -------------- |
1702
+ | `input` | `unknown` |
1703
+ | `options?` | `ParseOptions` |
1704
+
1705
+ #### Returns
1706
+
1707
+ `Result`\<[`IdempotencyKey`](index.md#idempotencykey), `SchemaError`\>
1708
+
1709
+ ---
1710
+
1711
+ ### decodeSourceRevision
1712
+
1713
+ ```ts
1714
+ const decodeSourceRevision: (
1715
+ input,
1716
+ options?,
1717
+ ) => Result<SourceRevision, SchemaError>;
1718
+ ```
1719
+
1720
+ Decode one pinned source revision through its canonical closed Effect Schema.
1721
+
1722
+ #### Parameters
1723
+
1724
+ | Parameter | Type |
1725
+ | ---------- | -------------- |
1726
+ | `input` | `unknown` |
1727
+ | `options?` | `ParseOptions` |
1728
+
1729
+ #### Returns
1730
+
1731
+ `Result`\<[`SourceRevision`](index.md#sourcerevision), `SchemaError`\>
1732
+
1733
+ ---
1734
+
1735
+ ### decodeSha256Digest
1736
+
1737
+ ```ts
1738
+ const decodeSha256Digest: (
1739
+ input,
1740
+ options?,
1741
+ ) => Result<Sha256Digest, SchemaError>;
1742
+ ```
1743
+
1744
+ Decode one SHA-256 digest through its canonical closed Effect Schema.
1745
+
1746
+ #### Parameters
1747
+
1748
+ | Parameter | Type |
1749
+ | ---------- | -------------- |
1750
+ | `input` | `unknown` |
1751
+ | `options?` | `ParseOptions` |
1752
+
1753
+ #### Returns
1754
+
1755
+ `Result`\<[`Sha256Digest`](index.md#sha256digest), `SchemaError`\>
1756
+
1757
+ ---
1758
+
1759
+ ### decodeStableRoute
1760
+
1761
+ ```ts
1762
+ const decodeStableRoute: (input, options?) => Result<StableRoute, SchemaError>;
1763
+ ```
1764
+
1765
+ Decode one local stable route through its canonical closed Effect Schema.
1766
+
1767
+ #### Parameters
1768
+
1769
+ | Parameter | Type |
1770
+ | ---------- | -------------- |
1771
+ | `input` | `unknown` |
1772
+ | `options?` | `ParseOptions` |
1773
+
1774
+ #### Returns
1775
+
1776
+ `Result`\<[`StableRoute`](index.md#stableroute), `SchemaError`\>
1777
+
1778
+ ---
1779
+
1780
+ ### decodeAppTransitionId
1781
+
1782
+ ```ts
1783
+ const decodeAppTransitionId: (
1784
+ input,
1785
+ options?,
1786
+ ) => Result<AppTransitionId, SchemaError>;
1787
+ ```
1788
+
1789
+ Decode a Cairn-issued App transition identity through its sole wrapper.
1790
+
1791
+ #### Parameters
1792
+
1793
+ | Parameter | Type |
1794
+ | ---------- | -------------- |
1795
+ | `input` | `unknown` |
1796
+ | `options?` | `ParseOptions` |
1797
+
1798
+ #### Returns
1799
+
1800
+ `Result`\<[`AppTransitionId`](index.md#apptransitionid), `SchemaError`\>
1801
+
1802
+ ---
1803
+
1804
+ ### decodeArtifactReadResult
1805
+
1806
+ ```ts
1807
+ const decodeArtifactReadResult: (
1808
+ input,
1809
+ options?,
1810
+ ) => Effect<
1811
+ | {
1812
+ kind: "verified";
1813
+ digest: Sha256Digest;
1814
+ mediaType:
1815
+ | "text/html; charset=utf-8"
1816
+ | "application/vnd.fungi.app-backend+json"
1817
+ | "application/vnd.fungi.app-assets+json"
1818
+ | "application/vnd.fungi.app+json";
1819
+ bytes: object & ImmutableArtifactBytes;
1820
+ byteLength: number;
1821
+ }
1822
+ | {
1823
+ kind: "unavailable";
1824
+ }
1825
+ | {
1826
+ kind: "missing";
1827
+ }
1828
+ | {
1829
+ kind: "digest-mismatch";
1830
+ actualDigest: Sha256Digest;
1831
+ },
1832
+ SchemaError,
1833
+ never
1834
+ >;
1835
+ ```
1836
+
1837
+ Decode a hostile artifact-reader result through its canonical closed schema.
1838
+
1839
+ #### Parameters
1840
+
1841
+ | Parameter | Type |
1842
+ | ---------- | -------------- |
1843
+ | `input` | `unknown` |
1844
+ | `options?` | `ParseOptions` |
1845
+
1846
+ #### Returns
1847
+
1848
+ `Effect`\< \| \{ `kind`: `"verified"`; `digest`:
1849
+ [`Sha256Digest`](index.md#sha256digest); `mediaType`: \|
1850
+ `"text/html; charset=utf-8"` \| `"application/vnd.fungi.app-backend+json"` \|
1851
+ `"application/vnd.fungi.app-assets+json"` \| `"application/vnd.fungi.app+json"`;
1852
+ `bytes`: `object` & [`ImmutableArtifactBytes`](index.md#immutableartifactbytes);
1853
+ `byteLength`: `number`; \} \| \{ `kind`: `"unavailable"`; \} \| \{ `kind`:
1854
+ `"missing"`; \} \| \{ `kind`: `"digest-mismatch"`; `actualDigest`:
1855
+ [`Sha256Digest`](index.md#sha256digest); \}, `SchemaError`, `never`\>
1856
+
1857
+ ---
1858
+
1859
+ ### decodeApp
1860
+
1861
+ ```ts
1862
+ const decodeApp: (
1863
+ input,
1864
+ options?,
1865
+ ) => Result<
1866
+ {
1867
+ appId: AppId;
1868
+ },
1869
+ SchemaError
1870
+ >;
1871
+ ```
1872
+
1873
+ Decode a hostile App record through its canonical closed schema.
1874
+
1875
+ #### Parameters
1876
+
1877
+ | Parameter | Type |
1878
+ | ---------- | -------------- |
1879
+ | `input` | `unknown` |
1880
+ | `options?` | `ParseOptions` |
1881
+
1882
+ #### Returns
1883
+
1884
+ `Result`\<\{ `appId`: [`AppId`](index.md#appid); \}, `SchemaError`\>
1885
+
1886
+ ---
1887
+
1888
+ ### decodeRelease
1889
+
1890
+ ```ts
1891
+ const decodeRelease: (
1892
+ input,
1893
+ options?,
1894
+ ) => Result<
1895
+ {
1896
+ releaseId: ReleaseId;
1897
+ appId: AppId;
1898
+ artifact: {
1899
+ artifactRef: ArtifactRef;
1900
+ artifactDigest: Sha256Digest;
1901
+ provenance: {
1902
+ sourceRevision: SourceRevision;
1903
+ sourceTreeDigest: Sha256Digest;
1904
+ buildRecipeDigest: Sha256Digest;
1905
+ };
1906
+ };
1907
+ },
1908
+ SchemaError
1909
+ >;
1910
+ ```
1911
+
1912
+ Decode a hostile Release record through its canonical closed schema.
1913
+
1914
+ #### Parameters
1915
+
1916
+ | Parameter | Type |
1917
+ | ---------- | -------------- |
1918
+ | `input` | `unknown` |
1919
+ | `options?` | `ParseOptions` |
1920
+
1921
+ #### Returns
1922
+
1923
+ `Result`\<\{ `releaseId`: [`ReleaseId`](index.md#releaseid); `appId`:
1924
+ [`AppId`](index.md#appid); `artifact`: \{ `artifactRef`:
1925
+ [`ArtifactRef`](index.md#artifactref); `artifactDigest`:
1926
+ [`Sha256Digest`](index.md#sha256digest); `provenance`: \{ `sourceRevision`:
1927
+ [`SourceRevision`](index.md#sourcerevision); `sourceTreeDigest`:
1928
+ [`Sha256Digest`](index.md#sha256digest); `buildRecipeDigest`:
1929
+ [`Sha256Digest`](index.md#sha256digest); \}; \}; \}, `SchemaError`\>
1930
+
1931
+ ---
1932
+
1933
+ ### decodePublicSurface
1934
+
1935
+ ```ts
1936
+ const decodePublicSurface: (
1937
+ input,
1938
+ options?,
1939
+ ) => Result<
1940
+ {
1941
+ publicSurfaceId: PublicSurfaceId;
1942
+ appId: AppId;
1943
+ stableRoute: StableRoute;
1944
+ },
1945
+ SchemaError
1946
+ >;
1947
+ ```
1948
+
1949
+ Decode a hostile public Surface through its canonical closed schema.
1950
+
1951
+ #### Parameters
1952
+
1953
+ | Parameter | Type |
1954
+ | ---------- | -------------- |
1955
+ | `input` | `unknown` |
1956
+ | `options?` | `ParseOptions` |
1957
+
1958
+ #### Returns
1959
+
1960
+ `Result`\<\{ `publicSurfaceId`: [`PublicSurfaceId`](index.md#publicsurfaceid);
1961
+ `appId`: [`AppId`](index.md#appid); `stableRoute`:
1962
+ [`StableRoute`](index.md#stableroute); \}, `SchemaError`\>
1963
+
1964
+ ---
1965
+
1966
+ ### decodeAppReadStoreResult
1967
+
1968
+ ```ts
1969
+ const decodeAppReadStoreResult: (
1970
+ input,
1971
+ options?,
1972
+ ) => Result<
1973
+ | {
1974
+ kind: "success";
1975
+ value:
1976
+ | {
1977
+ kind: "found";
1978
+ app: {
1979
+ appId: AppId;
1980
+ };
1981
+ }
1982
+ | {
1983
+ kind: "absent";
1984
+ };
1985
+ }
1986
+ | {
1987
+ kind: "failure";
1988
+ failure: {
1989
+ kind: "unavailable";
1990
+ };
1991
+ },
1992
+ SchemaError
1993
+ >;
1994
+ ```
1995
+
1996
+ Decode a hostile App-read store result through its canonical closed schema.
1997
+
1998
+ #### Parameters
1999
+
2000
+ | Parameter | Type |
2001
+ | ---------- | -------------- |
2002
+ | `input` | `unknown` |
2003
+ | `options?` | `ParseOptions` |
2004
+
2005
+ #### Returns
2006
+
2007
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"found"`; `app`:
2008
+ \{ `appId`: [`AppId`](index.md#appid); \}; \} \| \{ `kind`: `"absent"`; \}; \}
2009
+ \| \{ `kind`: `"failure"`; `failure`: \{ `kind`: `"unavailable"`; \}; \},
2010
+ `SchemaError`\>
2011
+
2012
+ ---
2013
+
2014
+ ### decodeAppCreateStoreResult
2015
+
2016
+ ```ts
2017
+ const decodeAppCreateStoreResult: (
2018
+ input,
2019
+ options?,
2020
+ ) => Result<
2021
+ | {
2022
+ kind: "success";
2023
+ value:
2024
+ | {
2025
+ kind: "created";
2026
+ app: {
2027
+ appId: AppId;
2028
+ };
2029
+ }
2030
+ | {
2031
+ kind: "existing";
2032
+ app: {
2033
+ appId: AppId;
2034
+ };
2035
+ };
2036
+ }
2037
+ | {
2038
+ kind: "failure";
2039
+ failure: {
2040
+ kind: "unavailable";
2041
+ };
2042
+ },
2043
+ SchemaError
2044
+ >;
2045
+ ```
2046
+
2047
+ Decode a hostile App-create store result through its canonical closed schema.
2048
+
2049
+ #### Parameters
2050
+
2051
+ | Parameter | Type |
2052
+ | ---------- | -------------- |
2053
+ | `input` | `unknown` |
2054
+ | `options?` | `ParseOptions` |
2055
+
2056
+ #### Returns
2057
+
2058
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"created"`; `app`:
2059
+ \{ `appId`: [`AppId`](index.md#appid); \}; \} \| \{ `kind`: `"existing"`; `app`:
2060
+ \{ `appId`: [`AppId`](index.md#appid); \}; \}; \} \| \{ `kind`: `"failure"`;
2061
+ `failure`: \{ `kind`: `"unavailable"`; \}; \}, `SchemaError`\>
2062
+
2063
+ ---
2064
+
2065
+ ### decodeReleaseReadStoreResult
2066
+
2067
+ ```ts
2068
+ const decodeReleaseReadStoreResult: (
2069
+ input,
2070
+ options?,
2071
+ ) => Result<
2072
+ | {
2073
+ kind: "success";
2074
+ value:
2075
+ | {
2076
+ kind: "found";
2077
+ release: {
2078
+ releaseId: ReleaseId;
2079
+ appId: AppId;
2080
+ artifact: {
2081
+ artifactRef: ArtifactRef;
2082
+ artifactDigest: Sha256Digest;
2083
+ provenance: {
2084
+ sourceRevision: SourceRevision;
2085
+ sourceTreeDigest: Sha256Digest;
2086
+ buildRecipeDigest: Sha256Digest;
2087
+ };
2088
+ };
2089
+ };
2090
+ }
2091
+ | {
2092
+ kind: "absent";
2093
+ };
2094
+ }
2095
+ | {
2096
+ kind: "failure";
2097
+ failure: {
2098
+ kind: "unavailable";
2099
+ };
2100
+ },
2101
+ SchemaError
2102
+ >;
2103
+ ```
2104
+
2105
+ Decode a hostile Release-read store result through its canonical closed schema.
2106
+
2107
+ #### Parameters
2108
+
2109
+ | Parameter | Type |
2110
+ | ---------- | -------------- |
2111
+ | `input` | `unknown` |
2112
+ | `options?` | `ParseOptions` |
2113
+
2114
+ #### Returns
2115
+
2116
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"found"`;
2117
+ `release`: \{ `releaseId`: [`ReleaseId`](index.md#releaseid); `appId`:
2118
+ [`AppId`](index.md#appid); `artifact`: \{ `artifactRef`:
2119
+ [`ArtifactRef`](index.md#artifactref); `artifactDigest`:
2120
+ [`Sha256Digest`](index.md#sha256digest); `provenance`: \{ `sourceRevision`:
2121
+ [`SourceRevision`](index.md#sourcerevision); `sourceTreeDigest`:
2122
+ [`Sha256Digest`](index.md#sha256digest); `buildRecipeDigest`:
2123
+ [`Sha256Digest`](index.md#sha256digest); \}; \}; \}; \} \| \{ `kind`:
2124
+ `"absent"`; \}; \} \| \{ `kind`: `"failure"`; `failure`: \{ `kind`:
2125
+ `"unavailable"`; \}; \}, `SchemaError`\>
2126
+
2127
+ ---
2128
+
2129
+ ### decodeReleaseCreateStoreResult
2130
+
2131
+ ```ts
2132
+ const decodeReleaseCreateStoreResult: (
2133
+ input,
2134
+ options?,
2135
+ ) => Result<
2136
+ | {
2137
+ kind: "success";
2138
+ value:
2139
+ | {
2140
+ kind: "created";
2141
+ release: {
2142
+ releaseId: ReleaseId;
2143
+ appId: AppId;
2144
+ artifact: {
2145
+ artifactRef: ArtifactRef;
2146
+ artifactDigest: Sha256Digest;
2147
+ provenance: {
2148
+ sourceRevision: SourceRevision;
2149
+ sourceTreeDigest: Sha256Digest;
2150
+ buildRecipeDigest: Sha256Digest;
2151
+ };
2152
+ };
2153
+ };
2154
+ }
2155
+ | {
2156
+ kind: "existing";
2157
+ release: {
2158
+ releaseId: ReleaseId;
2159
+ appId: AppId;
2160
+ artifact: {
2161
+ artifactRef: ArtifactRef;
2162
+ artifactDigest: Sha256Digest;
2163
+ provenance: {
2164
+ sourceRevision: SourceRevision;
2165
+ sourceTreeDigest: Sha256Digest;
2166
+ buildRecipeDigest: Sha256Digest;
2167
+ };
2168
+ };
2169
+ };
2170
+ };
2171
+ }
2172
+ | {
2173
+ kind: "failure";
2174
+ failure: {
2175
+ kind: "unavailable";
2176
+ };
2177
+ },
2178
+ SchemaError
2179
+ >;
2180
+ ```
2181
+
2182
+ Decode a hostile Release-create store result through its canonical closed
2183
+ schema.
2184
+
2185
+ #### Parameters
2186
+
2187
+ | Parameter | Type |
2188
+ | ---------- | -------------- |
2189
+ | `input` | `unknown` |
2190
+ | `options?` | `ParseOptions` |
2191
+
2192
+ #### Returns
2193
+
2194
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"created"`;
2195
+ `release`: \{ `releaseId`: [`ReleaseId`](index.md#releaseid); `appId`:
2196
+ [`AppId`](index.md#appid); `artifact`: \{ `artifactRef`:
2197
+ [`ArtifactRef`](index.md#artifactref); `artifactDigest`:
2198
+ [`Sha256Digest`](index.md#sha256digest); `provenance`: \{ `sourceRevision`:
2199
+ [`SourceRevision`](index.md#sourcerevision); `sourceTreeDigest`:
2200
+ [`Sha256Digest`](index.md#sha256digest); `buildRecipeDigest`:
2201
+ [`Sha256Digest`](index.md#sha256digest); \}; \}; \}; \} \| \{ `kind`:
2202
+ `"existing"`; `release`: \{ `releaseId`: [`ReleaseId`](index.md#releaseid);
2203
+ `appId`: [`AppId`](index.md#appid); `artifact`: \{ `artifactRef`:
2204
+ [`ArtifactRef`](index.md#artifactref); `artifactDigest`:
2205
+ [`Sha256Digest`](index.md#sha256digest); `provenance`: \{ `sourceRevision`:
2206
+ [`SourceRevision`](index.md#sourcerevision); `sourceTreeDigest`:
2207
+ [`Sha256Digest`](index.md#sha256digest); `buildRecipeDigest`:
2208
+ [`Sha256Digest`](index.md#sha256digest); \}; \}; \}; \}; \} \| \{ `kind`:
2209
+ `"failure"`; `failure`: \{ `kind`: `"unavailable"`; \}; \}, `SchemaError`\>
2210
+
2211
+ ---
2212
+
2213
+ ### decodePublicSurfaceReadStoreResult
2214
+
2215
+ ```ts
2216
+ const decodePublicSurfaceReadStoreResult: (
2217
+ input,
2218
+ options?,
2219
+ ) => Result<
2220
+ | {
2221
+ kind: "success";
2222
+ value:
2223
+ | {
2224
+ kind: "found";
2225
+ surface: {
2226
+ publicSurfaceId: PublicSurfaceId;
2227
+ appId: AppId;
2228
+ stableRoute: StableRoute;
2229
+ };
2230
+ }
2231
+ | {
2232
+ kind: "absent";
2233
+ };
2234
+ }
2235
+ | {
2236
+ kind: "failure";
2237
+ failure: {
2238
+ kind: "unavailable";
2239
+ };
2240
+ },
2241
+ SchemaError
2242
+ >;
2243
+ ```
2244
+
2245
+ Decode a hostile public-Surface-read store result through its canonical closed
2246
+ schema.
2247
+
2248
+ #### Parameters
2249
+
2250
+ | Parameter | Type |
2251
+ | ---------- | -------------- |
2252
+ | `input` | `unknown` |
2253
+ | `options?` | `ParseOptions` |
2254
+
2255
+ #### Returns
2256
+
2257
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"found"`;
2258
+ `surface`: \{ `publicSurfaceId`: [`PublicSurfaceId`](index.md#publicsurfaceid);
2259
+ `appId`: [`AppId`](index.md#appid); `stableRoute`:
2260
+ [`StableRoute`](index.md#stableroute); \}; \} \| \{ `kind`: `"absent"`; \}; \}
2261
+ \| \{ `kind`: `"failure"`; `failure`: \{ `kind`: `"unavailable"`; \}; \},
2262
+ `SchemaError`\>
2263
+
2264
+ ---
2265
+
2266
+ ### decodePublicSurfaceCreateStoreResult
2267
+
2268
+ ```ts
2269
+ const decodePublicSurfaceCreateStoreResult: (
2270
+ input,
2271
+ options?,
2272
+ ) => Result<
2273
+ | {
2274
+ kind: "success";
2275
+ value:
2276
+ | {
2277
+ kind: "created";
2278
+ surface: {
2279
+ publicSurfaceId: PublicSurfaceId;
2280
+ appId: AppId;
2281
+ stableRoute: StableRoute;
2282
+ };
2283
+ }
2284
+ | {
2285
+ kind: "existing";
2286
+ surface: {
2287
+ publicSurfaceId: PublicSurfaceId;
2288
+ appId: AppId;
2289
+ stableRoute: StableRoute;
2290
+ };
2291
+ }
2292
+ | {
2293
+ kind: "conflict";
2294
+ };
2295
+ }
2296
+ | {
2297
+ kind: "failure";
2298
+ failure: {
2299
+ kind: "unavailable";
2300
+ };
2301
+ },
2302
+ SchemaError
2303
+ >;
2304
+ ```
2305
+
2306
+ Decode a hostile public-Surface-create store result through its canonical closed
2307
+ schema.
2308
+
2309
+ #### Parameters
2310
+
2311
+ | Parameter | Type |
2312
+ | ---------- | -------------- |
2313
+ | `input` | `unknown` |
2314
+ | `options?` | `ParseOptions` |
2315
+
2316
+ #### Returns
2317
+
2318
+ `Result`\< \| \{ `kind`: `"success"`; `value`: \| \{ `kind`: `"created"`;
2319
+ `surface`: \{ `publicSurfaceId`: [`PublicSurfaceId`](index.md#publicsurfaceid);
2320
+ `appId`: [`AppId`](index.md#appid); `stableRoute`:
2321
+ [`StableRoute`](index.md#stableroute); \}; \} \| \{ `kind`: `"existing"`;
2322
+ `surface`: \{ `publicSurfaceId`: [`PublicSurfaceId`](index.md#publicsurfaceid);
2323
+ `appId`: [`AppId`](index.md#appid); `stableRoute`:
2324
+ [`StableRoute`](index.md#stableroute); \}; \} \| \{ `kind`: `"conflict"`; \}; \}
2325
+ \| \{ `kind`: `"failure"`; `failure`: \{ `kind`: `"unavailable"`; \}; \},
2326
+ `SchemaError`\>
2327
+
2328
+ ## Functions
2329
+
2330
+ ### createAppReleaseCore()
2331
+
2332
+ ```ts
2333
+ function createAppReleaseCore(options): AppReleaseCore;
2334
+ ```
2335
+
2336
+ Compose the Effect-native App Release core.
2337
+
2338
+ A Release is first compared with its existing immutable record. Only an absent
2339
+ Release requires an owner App lookup and an atomic create-or-observe. Every
2340
+ closed store failure is mapped at this boundary.
2341
+
2342
+ #### Parameters
2343
+
2344
+ | Parameter | Type |
2345
+ | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2346
+ | `options` | \{ `store`: [`AppReleaseStore`](#appreleasestore); `artifactReader`: [`AppReleaseArtifactReader`](#appreleaseartifactreader); `artifactPolicy?`: `Readonly`\<\{ `maxBytes`: `number`; `maxManifestBytes?`: `number`; \}\>; \} |
2347
+ | `options.store` | [`AppReleaseStore`](#appreleasestore) |
2348
+ | `options.artifactReader` | [`AppReleaseArtifactReader`](#appreleaseartifactreader) |
2349
+ | `options.artifactPolicy?` | `Readonly`\<\{ `maxBytes`: `number`; `maxManifestBytes?`: `number`; \}\> |
2350
+
2351
+ #### Returns
2352
+
2353
+ [`AppReleaseCore`](#appreleasecore)
2354
+
2355
+ ---
2356
+
2357
+ ### createDeterministicMemoryAppReleaseStore()
2358
+
2359
+ ```ts
2360
+ function createDeterministicMemoryAppReleaseStore(
2361
+ options?,
2362
+ ): PromiseAppReleaseStore;
2363
+ ```
2364
+
2365
+ Compose an in-process deterministic store for the narrow App/Release port.
2366
+
2367
+ Store methods mutate only the private collections below. Decisions remain in
2368
+ pure helpers, and every returned record is copied, so callers cannot mutate
2369
+ retained state after an atomic create-or-observe operation.
2370
+
2371
+ #### Parameters
2372
+
2373
+ | Parameter | Type |
2374
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2375
+ | `options` | \{ `routes`: \{ `platformRoutes`: readonly `object`[]; `structuralRoutes`: readonly [`StableRoute`](index.md#stableroute)[]; \}; `publishers?`: readonly `object`[]; \} |
2376
+ | `options.routes` | \{ `platformRoutes`: readonly `object`[]; `structuralRoutes`: readonly [`StableRoute`](index.md#stableroute)[]; \} |
2377
+ | `options.routes.platformRoutes` | readonly `object`[] |
2378
+ | `options.routes.structuralRoutes` | readonly [`StableRoute`](index.md#stableroute)[] |
2379
+ | `options.publishers?` | readonly `object`[] |
2380
+
2381
+ #### Returns
2382
+
2383
+ [`PromiseAppReleaseStore`](index.md#promiseappreleasestore)
2384
+
2385
+ ---
2386
+
2387
+ ### adaptPromiseAppReleaseStore()
2388
+
2389
+ ```ts
2390
+ function adaptPromiseAppReleaseStore(projection): AppReleaseStore;
2391
+ ```
2392
+
2393
+ Adapt the Promise store projection at the one outer edge.
2394
+
2395
+ Rejected Promise work is deliberately collapsed into the closed unavailable
2396
+ store outcome; infrastructure detail never crosses into catalog policy.
2397
+
2398
+ #### Parameters
2399
+
2400
+ | Parameter | Type |
2401
+ | ------------ | ----------------------------------------------------------- |
2402
+ | `projection` | [`PromiseAppReleaseStore`](index.md#promiseappreleasestore) |
2403
+
2404
+ #### Returns
2405
+
2406
+ [`AppReleaseStore`](#appreleasestore)
2407
+
2408
+ ---
2409
+
2410
+ ### adaptPromiseArtifactReader()
2411
+
2412
+ ```ts
2413
+ function adaptPromiseArtifactReader(projection): AppReleaseArtifactReader;
2414
+ ```
2415
+
2416
+ Adapt the Promise artifact-reader projection at the one outer edge.
2417
+
2418
+ Successful values remain hostile until the core's canonical schema decodes them.
2419
+ A rejected Promise is closed to the reader's unavailable failure.
2420
+
2421
+ #### Parameters
2422
+
2423
+ | Parameter | Type |
2424
+ | ------------ | ------------------------------------------- |
2425
+ | `projection` | [`ArtifactReader`](index.md#artifactreader) |
2426
+
2427
+ #### Returns
2428
+
2429
+ [`AppReleaseArtifactReader`](#appreleaseartifactreader)