@nakafa/aksara-contracts 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +185 -0
  2. package/README.md +73 -0
  3. package/dist/artifact/integrity.d.ts +29 -0
  4. package/dist/artifact/integrity.js +54 -0
  5. package/dist/artifact/limits.d.ts +26 -0
  6. package/dist/artifact/limits.js +46 -0
  7. package/dist/artifact/source.d.ts +21 -0
  8. package/dist/artifact/source.js +24 -0
  9. package/dist/artifact/spec.d.ts +148 -0
  10. package/dist/artifact/spec.js +92 -0
  11. package/dist/artifact/verify.d.ts +26 -0
  12. package/dist/artifact/verify.js +18 -0
  13. package/dist/cache/content.d.ts +52 -0
  14. package/dist/cache/content.js +80 -0
  15. package/dist/content.d.ts +168 -0
  16. package/dist/content.js +107 -0
  17. package/dist/country.d.ts +4 -0
  18. package/dist/country.js +8 -0
  19. package/dist/date.d.ts +24 -0
  20. package/dist/date.js +44 -0
  21. package/dist/decode.d.ts +4 -0
  22. package/dist/decode.js +8 -0
  23. package/dist/delivery.d.ts +4 -0
  24. package/dist/delivery.js +7 -0
  25. package/dist/errors.d.ts +10 -0
  26. package/dist/errors.js +8 -0
  27. package/dist/graph/family.d.ts +45 -0
  28. package/dist/graph/family.js +85 -0
  29. package/dist/graph/identity.d.ts +19 -0
  30. package/dist/graph/identity.js +39 -0
  31. package/dist/graph/spec.d.ts +20 -0
  32. package/dist/graph/spec.js +26 -0
  33. package/dist/hash/text.d.ts +10 -0
  34. package/dist/hash/text.js +20 -0
  35. package/dist/ids.d.ts +27 -0
  36. package/dist/ids.js +63 -0
  37. package/dist/limits.d.ts +10 -0
  38. package/dist/limits.js +10 -0
  39. package/dist/locale.d.ts +37 -0
  40. package/dist/locale.js +53 -0
  41. package/dist/material/domain.d.ts +4 -0
  42. package/dist/material/domain.js +8 -0
  43. package/dist/preview/artifact.d.ts +198 -0
  44. package/dist/preview/artifact.js +20 -0
  45. package/dist/preview/auth.d.ts +71 -0
  46. package/dist/preview/auth.js +49 -0
  47. package/dist/preview/document.d.ts +692 -0
  48. package/dist/preview/document.js +90 -0
  49. package/dist/preview/spec.d.ts +2517 -0
  50. package/dist/preview/spec.js +142 -0
  51. package/dist/preview/target.d.ts +172 -0
  52. package/dist/preview/target.js +70 -0
  53. package/dist/program/curriculum.d.ts +69 -0
  54. package/dist/program/curriculum.js +181 -0
  55. package/dist/program/snapshot/digest.d.ts +26 -0
  56. package/dist/program/snapshot/digest.js +220 -0
  57. package/dist/program/snapshot/hash.d.ts +31 -0
  58. package/dist/program/snapshot/hash.js +40 -0
  59. package/dist/program/snapshot/row-hash.d.ts +155 -0
  60. package/dist/program/snapshot/row-hash.js +34 -0
  61. package/dist/program/snapshot/row.d.ts +139 -0
  62. package/dist/program/snapshot/row.js +28 -0
  63. package/dist/program/snapshot/spec.d.ts +36 -0
  64. package/dist/program/snapshot/spec.js +39 -0
  65. package/dist/program/spec.d.ts +85 -0
  66. package/dist/program/spec.js +197 -0
  67. package/dist/projection/article.d.ts +145 -0
  68. package/dist/projection/article.js +150 -0
  69. package/dist/projection/digest.d.ts +261 -0
  70. package/dist/projection/digest.js +59 -0
  71. package/dist/projection/hash.d.ts +3 -0
  72. package/dist/projection/hash.js +10 -0
  73. package/dist/projection/material.d.ts +109 -0
  74. package/dist/projection/material.js +160 -0
  75. package/dist/projection/page.d.ts +112 -0
  76. package/dist/projection/page.js +106 -0
  77. package/dist/projection/question.d.ts +520 -0
  78. package/dist/projection/question.js +109 -0
  79. package/dist/projection/spec.d.ts +503 -0
  80. package/dist/projection/spec.js +56 -0
  81. package/dist/projection/verify.d.ts +281 -0
  82. package/dist/projection/verify.js +86 -0
  83. package/dist/question/identity.d.ts +175 -0
  84. package/dist/question/identity.js +205 -0
  85. package/dist/question/item.d.ts +453 -0
  86. package/dist/question/item.js +146 -0
  87. package/dist/question/response.d.ts +175 -0
  88. package/dist/question/response.js +150 -0
  89. package/dist/quran/attribution.d.ts +48 -0
  90. package/dist/quran/attribution.js +44 -0
  91. package/dist/quran/identity.d.ts +105 -0
  92. package/dist/quran/identity.js +100 -0
  93. package/dist/quran/notes.d.ts +56 -0
  94. package/dist/quran/notes.js +142 -0
  95. package/dist/quran/provenance.d.ts +257 -0
  96. package/dist/quran/provenance.js +144 -0
  97. package/dist/quran/snapshot/digest.d.ts +33 -0
  98. package/dist/quran/snapshot/digest.js +232 -0
  99. package/dist/quran/snapshot/hash.d.ts +51 -0
  100. package/dist/quran/snapshot/hash.js +50 -0
  101. package/dist/quran/snapshot/row/hash.d.ts +748 -0
  102. package/dist/quran/snapshot/row/hash.js +115 -0
  103. package/dist/quran/snapshot/row.d.ts +354 -0
  104. package/dist/quran/snapshot/row.js +91 -0
  105. package/dist/quran/snapshot/spec.d.ts +50 -0
  106. package/dist/quran/snapshot/spec.js +66 -0
  107. package/dist/quran/source.d.ts +206 -0
  108. package/dist/quran/source.js +153 -0
  109. package/dist/quran/spec.d.ts +47 -0
  110. package/dist/quran/spec.js +41 -0
  111. package/dist/quran/text.d.ts +7 -0
  112. package/dist/quran/text.js +11 -0
  113. package/dist/release/canonical.d.ts +23 -0
  114. package/dist/release/canonical.js +29 -0
  115. package/dist/release/current/evidence.d.ts +424 -0
  116. package/dist/release/current/evidence.js +41 -0
  117. package/dist/release/current/runtime.d.ts +4 -0
  118. package/dist/release/current/runtime.js +15 -0
  119. package/dist/release/current/state.d.ts +567 -0
  120. package/dist/release/current/state.js +91 -0
  121. package/dist/release/digest.d.ts +54 -0
  122. package/dist/release/digest.js +71 -0
  123. package/dist/release/hash.d.ts +72 -0
  124. package/dist/release/hash.js +14 -0
  125. package/dist/release/head.d.ts +206 -0
  126. package/dist/release/head.js +131 -0
  127. package/dist/release/items.d.ts +98 -0
  128. package/dist/release/items.js +114 -0
  129. package/dist/release/lifecycle.d.ts +297 -0
  130. package/dist/release/lifecycle.js +97 -0
  131. package/dist/release/origin.d.ts +30 -0
  132. package/dist/release/origin.js +24 -0
  133. package/dist/release/policy.d.ts +45 -0
  134. package/dist/release/policy.js +124 -0
  135. package/dist/release/result/digest.d.ts +127 -0
  136. package/dist/release/result/digest.js +140 -0
  137. package/dist/release/result/spec.d.ts +4 -0
  138. package/dist/release/result/spec.js +5 -0
  139. package/dist/release/rollback/digest.d.ts +126 -0
  140. package/dist/release/rollback/digest.js +92 -0
  141. package/dist/release/rollback/spec.d.ts +1729 -0
  142. package/dist/release/rollback/spec.js +156 -0
  143. package/dist/release/route/digest.d.ts +45 -0
  144. package/dist/release/route/digest.js +59 -0
  145. package/dist/release/route/page.d.ts +56 -0
  146. package/dist/release/route/page.js +46 -0
  147. package/dist/release/route/spec.d.ts +49 -0
  148. package/dist/release/route/spec.js +40 -0
  149. package/dist/release/route/verify.d.ts +66 -0
  150. package/dist/release/route/verify.js +67 -0
  151. package/dist/release/signing.d.ts +6 -0
  152. package/dist/release/signing.js +38 -0
  153. package/dist/release/snapshot/data.d.ts +475 -0
  154. package/dist/release/snapshot/data.js +74 -0
  155. package/dist/release/snapshot/evidence-requirement.d.ts +22 -0
  156. package/dist/release/snapshot/evidence-requirement.js +21 -0
  157. package/dist/release/snapshot/evidence.d.ts +58 -0
  158. package/dist/release/snapshot/evidence.js +14 -0
  159. package/dist/release/snapshot/program-evidence.d.ts +17 -0
  160. package/dist/release/snapshot/program-evidence.js +39 -0
  161. package/dist/release/snapshot/quran-evidence.d.ts +27 -0
  162. package/dist/release/snapshot/quran-evidence.js +43 -0
  163. package/dist/release/snapshot/scope.d.ts +60 -0
  164. package/dist/release/snapshot/scope.js +102 -0
  165. package/dist/release/snapshot/spec.d.ts +193 -0
  166. package/dist/release/snapshot/spec.js +139 -0
  167. package/dist/release/snapshot/tryout-evidence.d.ts +22 -0
  168. package/dist/release/snapshot/tryout-evidence.js +86 -0
  169. package/dist/release/snapshot/verify.d.ts +710 -0
  170. package/dist/release/snapshot/verify.js +147 -0
  171. package/dist/release/spec.d.ts +491 -0
  172. package/dist/release/spec.js +200 -0
  173. package/dist/release/verify.d.ts +98 -0
  174. package/dist/release/verify.js +70 -0
  175. package/dist/renderer/compatibility.d.ts +35 -0
  176. package/dist/renderer/compatibility.js +48 -0
  177. package/dist/renderer/component.d.ts +99 -0
  178. package/dist/renderer/component.js +102 -0
  179. package/dist/renderer/contract.d.ts +144 -0
  180. package/dist/renderer/contract.js +122 -0
  181. package/dist/renderer/domain.d.ts +6 -0
  182. package/dist/renderer/domain.js +18 -0
  183. package/dist/renderer/manifest.d.ts +86 -0
  184. package/dist/renderer/manifest.js +49 -0
  185. package/dist/renderer/selection.d.ts +39 -0
  186. package/dist/renderer/selection.js +87 -0
  187. package/dist/runtime/error.d.ts +8 -0
  188. package/dist/runtime/error.js +20 -0
  189. package/dist/runtime/protected/limits.d.ts +10 -0
  190. package/dist/runtime/protected/limits.js +15 -0
  191. package/dist/runtime/protected/spec.d.ts +328 -0
  192. package/dist/runtime/protected/spec.js +79 -0
  193. package/dist/runtime/protected/verify.d.ts +97 -0
  194. package/dist/runtime/protected/verify.js +72 -0
  195. package/dist/runtime/result.d.ts +12 -0
  196. package/dist/runtime/result.js +17 -0
  197. package/dist/runtime/spec.d.ts +705 -0
  198. package/dist/runtime/spec.js +61 -0
  199. package/dist/runtime/verify.d.ts +479 -0
  200. package/dist/runtime/verify.js +123 -0
  201. package/dist/signature/spec.d.ts +53 -0
  202. package/dist/signature/spec.js +29 -0
  203. package/dist/signature/trusted.d.ts +19 -0
  204. package/dist/signature/trusted.js +32 -0
  205. package/dist/signature/verify.d.ts +10 -0
  206. package/dist/signature/verify.js +82 -0
  207. package/dist/text/order.d.ts +2 -0
  208. package/dist/text/order.js +10 -0
  209. package/dist/text/syntax.d.ts +6 -0
  210. package/dist/text/syntax.js +15 -0
  211. package/dist/transport/batch.d.ts +971 -0
  212. package/dist/transport/batch.js +101 -0
  213. package/dist/transport/failure.d.ts +168 -0
  214. package/dist/transport/failure.js +194 -0
  215. package/dist/transport/group.d.ts +2946 -0
  216. package/dist/transport/group.js +47 -0
  217. package/dist/transport/limits.d.ts +30 -0
  218. package/dist/transport/limits.js +30 -0
  219. package/dist/transport/request.d.ts +9333 -0
  220. package/dist/transport/request.js +121 -0
  221. package/dist/transport/response.d.ts +6247 -0
  222. package/dist/transport/response.js +181 -0
  223. package/dist/transport/runtime.d.ts +77 -0
  224. package/dist/transport/runtime.js +33 -0
  225. package/dist/transport/snapshot.d.ts +978 -0
  226. package/dist/transport/snapshot.js +70 -0
  227. package/dist/tryout/canonical.d.ts +2 -0
  228. package/dist/tryout/canonical.js +11 -0
  229. package/dist/tryout/catalog-hash.d.ts +134 -0
  230. package/dist/tryout/catalog-hash.js +203 -0
  231. package/dist/tryout/catalog.d.ts +376 -0
  232. package/dist/tryout/catalog.js +147 -0
  233. package/dist/tryout/content-hash.d.ts +89 -0
  234. package/dist/tryout/content-hash.js +72 -0
  235. package/dist/tryout/identity.d.ts +12 -0
  236. package/dist/tryout/identity.js +46 -0
  237. package/dist/tryout/key.d.ts +4 -0
  238. package/dist/tryout/key.js +8 -0
  239. package/dist/tryout/language.d.ts +24 -0
  240. package/dist/tryout/language.js +32 -0
  241. package/dist/tryout/locale-closure.d.ts +20 -0
  242. package/dist/tryout/locale-closure.js +164 -0
  243. package/dist/tryout/placement-closure.d.ts +5 -0
  244. package/dist/tryout/placement-closure.js +30 -0
  245. package/dist/tryout/placement-hash.d.ts +11 -0
  246. package/dist/tryout/placement-hash.js +55 -0
  247. package/dist/tryout/placement.d.ts +280 -0
  248. package/dist/tryout/placement.js +82 -0
  249. package/dist/tryout/row-hash.d.ts +28 -0
  250. package/dist/tryout/row-hash.js +50 -0
  251. package/dist/tryout/runtime/canonical.d.ts +8 -0
  252. package/dist/tryout/runtime/canonical.js +33 -0
  253. package/dist/tryout/runtime/hash.d.ts +32 -0
  254. package/dist/tryout/runtime/hash.js +11 -0
  255. package/dist/tryout/runtime/source.d.ts +42 -0
  256. package/dist/tryout/runtime/source.js +47 -0
  257. package/dist/tryout/runtime/spec.d.ts +58 -0
  258. package/dist/tryout/runtime/spec.js +21 -0
  259. package/dist/tryout/runtime/verify.d.ts +61 -0
  260. package/dist/tryout/runtime/verify.js +69 -0
  261. package/dist/tryout/snapshot/canonical.d.ts +7 -0
  262. package/dist/tryout/snapshot/canonical.js +17 -0
  263. package/dist/tryout/snapshot/hash.d.ts +8 -0
  264. package/dist/tryout/snapshot/hash.js +19 -0
  265. package/dist/tryout/snapshot/spec.d.ts +46 -0
  266. package/dist/tryout/snapshot/spec.js +30 -0
  267. package/dist/tryout/spec.d.ts +13 -0
  268. package/dist/tryout/spec.js +15 -0
  269. package/package.json +506 -0
@@ -0,0 +1,424 @@
1
+ import { Schema } from "effect";
2
+ import { type RollbackContentReleaseBundle } from "#contracts/release/lifecycle";
3
+ /** Compares canonical signed locale lists without erasing their role. */
4
+ export declare function hasSameAppLocales(left: readonly string[], right: readonly string[]): boolean;
5
+ /** Exact active release retained for base selection and crash recovery. */
6
+ export declare const ActiveContentReleaseSchema: Schema.Struct<{
7
+ readonly release: Schema.Struct<{
8
+ readonly keyId: Schema.brand<Schema.String, "@NakafaAI/AksaraSigningKeyId">;
9
+ readonly manifest: Schema.Struct<{
10
+ readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
11
+ readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
12
+ readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
13
+ readonly baseResultCount: Schema.Finite;
14
+ readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
15
+ readonly deleteCount: Schema.Finite;
16
+ readonly itemCount: Schema.Finite;
17
+ readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
18
+ readonly origin: Schema.Union<readonly [Schema.Struct<{
19
+ readonly kind: Schema.Literal<"git">;
20
+ readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
21
+ }>, Schema.Struct<{
22
+ readonly kind: Schema.Literal<"rollback">;
23
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
24
+ }>]>;
25
+ readonly projectionCount: Schema.Finite;
26
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
27
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
28
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
29
+ readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
30
+ readonly resultCount: Schema.Finite;
31
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
32
+ readonly rollbackCount: Schema.Finite;
33
+ readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
34
+ readonly routeCount: Schema.Finite;
35
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
36
+ readonly scope: Schema.Struct<{
37
+ content: Schema.optional<Schema.$Array<Schema.Struct<{
38
+ readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
39
+ readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
40
+ readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
41
+ }>>>;
42
+ families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
43
+ snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
44
+ }>;
45
+ readonly snapshots: Schema.Struct<{
46
+ readonly program: Schema.Struct<{
47
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
48
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
49
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
50
+ readonly rowCount: Schema.Int;
51
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
52
+ }>;
53
+ readonly quran: Schema.Struct<{
54
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
55
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
56
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
57
+ readonly rowCount: Schema.Int;
58
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
59
+ }>;
60
+ readonly tryout: Schema.Struct<{
61
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
62
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
63
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
64
+ readonly rowCount: Schema.Int;
65
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
66
+ }>;
67
+ }>;
68
+ readonly upsertCount: Schema.Finite;
69
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
70
+ readonly format: Schema.Literal<"localized-content-release">;
71
+ }>;
72
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
73
+ readonly signature: Schema.brand<Schema.String, "@NakafaAI/AksaraEd25519Signature">;
74
+ }>;
75
+ readonly rendererManifest: Schema.Struct<{
76
+ readonly base: Schema.Struct<{
77
+ authoringComponents: Schema.$Array<Schema.Struct<{
78
+ readonly name: Schema.String;
79
+ readonly version: Schema.Finite;
80
+ }>>;
81
+ supportedComponents: Schema.$Array<Schema.Struct<{
82
+ readonly name: Schema.String;
83
+ readonly version: Schema.Finite;
84
+ }>>;
85
+ }>;
86
+ readonly domains: Schema.$Array<Schema.Struct<{
87
+ readonly authoringComponents: Schema.$Array<Schema.Struct<{
88
+ readonly name: Schema.String;
89
+ readonly version: Schema.Finite;
90
+ }>>;
91
+ readonly name: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
92
+ readonly supportedComponents: Schema.$Array<Schema.Struct<{
93
+ readonly name: Schema.String;
94
+ readonly version: Schema.Finite;
95
+ }>>;
96
+ }>>;
97
+ readonly format: Schema.Literal<"nakafa-mdx-renderer-v1">;
98
+ readonly hash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
99
+ readonly publishedDomains: Schema.$Array<Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>>;
100
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
101
+ }>;
102
+ readonly receipt: Schema.Struct<{
103
+ readonly activatedHeads: Schema.Finite;
104
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
105
+ readonly deletedHeads: Schema.Finite;
106
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
107
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
108
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
109
+ readonly resultCount: Schema.Finite;
110
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
111
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
112
+ readonly snapshots: Schema.Struct<{
113
+ readonly program: Schema.Struct<{
114
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
115
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
116
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
117
+ readonly rowCount: Schema.Int;
118
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
119
+ }>;
120
+ readonly quran: Schema.Struct<{
121
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
122
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
123
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
124
+ readonly rowCount: Schema.Int;
125
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
126
+ }>;
127
+ readonly tryout: Schema.Struct<{
128
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
129
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
130
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
131
+ readonly rowCount: Schema.Int;
132
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
133
+ }>;
134
+ }>;
135
+ readonly stagedArtifacts: Schema.Finite;
136
+ readonly stagedItems: Schema.Finite;
137
+ readonly stagedProjections: Schema.Finite;
138
+ readonly stagedRoutes: Schema.Finite;
139
+ readonly stagedSnapshotRows: Schema.Finite;
140
+ }>;
141
+ }>;
142
+ export type ActiveContentRelease = typeof ActiveContentReleaseSchema.Type;
143
+ /** Completed active release known to carry rollback provenance. */
144
+ export type ActiveRollbackContentRelease = ActiveContentRelease & RollbackContentReleaseBundle;
145
+ /** Historical terminal release accepted only when it is a rollback. */
146
+ export declare const ActiveRollbackContentReleaseSchema: Schema.refine<ActiveRollbackContentRelease, Schema.Struct<{
147
+ readonly release: Schema.Struct<{
148
+ readonly keyId: Schema.brand<Schema.String, "@NakafaAI/AksaraSigningKeyId">;
149
+ readonly manifest: Schema.Struct<{
150
+ readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
151
+ readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
152
+ readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
153
+ readonly baseResultCount: Schema.Finite;
154
+ readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
155
+ readonly deleteCount: Schema.Finite;
156
+ readonly itemCount: Schema.Finite;
157
+ readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
158
+ readonly origin: Schema.Union<readonly [Schema.Struct<{
159
+ readonly kind: Schema.Literal<"git">;
160
+ readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
161
+ }>, Schema.Struct<{
162
+ readonly kind: Schema.Literal<"rollback">;
163
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
164
+ }>]>;
165
+ readonly projectionCount: Schema.Finite;
166
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
167
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
168
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
169
+ readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
170
+ readonly resultCount: Schema.Finite;
171
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
172
+ readonly rollbackCount: Schema.Finite;
173
+ readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
174
+ readonly routeCount: Schema.Finite;
175
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
176
+ readonly scope: Schema.Struct<{
177
+ content: Schema.optional<Schema.$Array<Schema.Struct<{
178
+ readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
179
+ readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
180
+ readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
181
+ }>>>;
182
+ families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
183
+ snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
184
+ }>;
185
+ readonly snapshots: Schema.Struct<{
186
+ readonly program: Schema.Struct<{
187
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
188
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
189
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
190
+ readonly rowCount: Schema.Int;
191
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
192
+ }>;
193
+ readonly quran: Schema.Struct<{
194
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
195
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
196
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
197
+ readonly rowCount: Schema.Int;
198
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
199
+ }>;
200
+ readonly tryout: Schema.Struct<{
201
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
202
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
203
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
204
+ readonly rowCount: Schema.Int;
205
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
206
+ }>;
207
+ }>;
208
+ readonly upsertCount: Schema.Finite;
209
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
210
+ readonly format: Schema.Literal<"localized-content-release">;
211
+ }>;
212
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
213
+ readonly signature: Schema.brand<Schema.String, "@NakafaAI/AksaraEd25519Signature">;
214
+ }>;
215
+ readonly rendererManifest: Schema.Struct<{
216
+ readonly base: Schema.Struct<{
217
+ authoringComponents: Schema.$Array<Schema.Struct<{
218
+ readonly name: Schema.String;
219
+ readonly version: Schema.Finite;
220
+ }>>;
221
+ supportedComponents: Schema.$Array<Schema.Struct<{
222
+ readonly name: Schema.String;
223
+ readonly version: Schema.Finite;
224
+ }>>;
225
+ }>;
226
+ readonly domains: Schema.$Array<Schema.Struct<{
227
+ readonly authoringComponents: Schema.$Array<Schema.Struct<{
228
+ readonly name: Schema.String;
229
+ readonly version: Schema.Finite;
230
+ }>>;
231
+ readonly name: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
232
+ readonly supportedComponents: Schema.$Array<Schema.Struct<{
233
+ readonly name: Schema.String;
234
+ readonly version: Schema.Finite;
235
+ }>>;
236
+ }>>;
237
+ readonly format: Schema.Literal<"nakafa-mdx-renderer-v1">;
238
+ readonly hash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
239
+ readonly publishedDomains: Schema.$Array<Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>>;
240
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
241
+ }>;
242
+ readonly receipt: Schema.Struct<{
243
+ readonly activatedHeads: Schema.Finite;
244
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
245
+ readonly deletedHeads: Schema.Finite;
246
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
247
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
248
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
249
+ readonly resultCount: Schema.Finite;
250
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
251
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
252
+ readonly snapshots: Schema.Struct<{
253
+ readonly program: Schema.Struct<{
254
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
255
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
256
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
257
+ readonly rowCount: Schema.Int;
258
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
259
+ }>;
260
+ readonly quran: Schema.Struct<{
261
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
262
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
263
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
264
+ readonly rowCount: Schema.Int;
265
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
266
+ }>;
267
+ readonly tryout: Schema.Struct<{
268
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
269
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
270
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
271
+ readonly rowCount: Schema.Int;
272
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
273
+ }>;
274
+ }>;
275
+ readonly stagedArtifacts: Schema.Finite;
276
+ readonly stagedItems: Schema.Finite;
277
+ readonly stagedProjections: Schema.Finite;
278
+ readonly stagedRoutes: Schema.Finite;
279
+ readonly stagedSnapshotRows: Schema.Finite;
280
+ }>;
281
+ }>>;
282
+ /** Historical recovery lookup used for crash-safe terminal replay. */
283
+ export declare const RecoveryLookupSchema: Schema.Union<readonly [Schema.Struct<{
284
+ readonly kind: Schema.Literal<"missing">;
285
+ }>, Schema.Struct<{
286
+ readonly kind: Schema.Literal<"completed">;
287
+ readonly value: Schema.refine<ActiveRollbackContentRelease, Schema.Struct<{
288
+ readonly release: Schema.Struct<{
289
+ readonly keyId: Schema.brand<Schema.String, "@NakafaAI/AksaraSigningKeyId">;
290
+ readonly manifest: Schema.Struct<{
291
+ readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
292
+ readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
293
+ readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
294
+ readonly baseResultCount: Schema.Finite;
295
+ readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
296
+ readonly deleteCount: Schema.Finite;
297
+ readonly itemCount: Schema.Finite;
298
+ readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
299
+ readonly origin: Schema.Union<readonly [Schema.Struct<{
300
+ readonly kind: Schema.Literal<"git">;
301
+ readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
302
+ }>, Schema.Struct<{
303
+ readonly kind: Schema.Literal<"rollback">;
304
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
305
+ }>]>;
306
+ readonly projectionCount: Schema.Finite;
307
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
308
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
309
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
310
+ readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
311
+ readonly resultCount: Schema.Finite;
312
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
313
+ readonly rollbackCount: Schema.Finite;
314
+ readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
315
+ readonly routeCount: Schema.Finite;
316
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
317
+ readonly scope: Schema.Struct<{
318
+ content: Schema.optional<Schema.$Array<Schema.Struct<{
319
+ readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
320
+ readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
321
+ readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
322
+ }>>>;
323
+ families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
324
+ snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
325
+ }>;
326
+ readonly snapshots: Schema.Struct<{
327
+ readonly program: Schema.Struct<{
328
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
329
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
330
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
331
+ readonly rowCount: Schema.Int;
332
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
333
+ }>;
334
+ readonly quran: Schema.Struct<{
335
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
336
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
337
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
338
+ readonly rowCount: Schema.Int;
339
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
340
+ }>;
341
+ readonly tryout: Schema.Struct<{
342
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
343
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
344
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
345
+ readonly rowCount: Schema.Int;
346
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
347
+ }>;
348
+ }>;
349
+ readonly upsertCount: Schema.Finite;
350
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
351
+ readonly format: Schema.Literal<"localized-content-release">;
352
+ }>;
353
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
354
+ readonly signature: Schema.brand<Schema.String, "@NakafaAI/AksaraEd25519Signature">;
355
+ }>;
356
+ readonly rendererManifest: Schema.Struct<{
357
+ readonly base: Schema.Struct<{
358
+ authoringComponents: Schema.$Array<Schema.Struct<{
359
+ readonly name: Schema.String;
360
+ readonly version: Schema.Finite;
361
+ }>>;
362
+ supportedComponents: Schema.$Array<Schema.Struct<{
363
+ readonly name: Schema.String;
364
+ readonly version: Schema.Finite;
365
+ }>>;
366
+ }>;
367
+ readonly domains: Schema.$Array<Schema.Struct<{
368
+ readonly authoringComponents: Schema.$Array<Schema.Struct<{
369
+ readonly name: Schema.String;
370
+ readonly version: Schema.Finite;
371
+ }>>;
372
+ readonly name: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
373
+ readonly supportedComponents: Schema.$Array<Schema.Struct<{
374
+ readonly name: Schema.String;
375
+ readonly version: Schema.Finite;
376
+ }>>;
377
+ }>>;
378
+ readonly format: Schema.Literal<"nakafa-mdx-renderer-v1">;
379
+ readonly hash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
380
+ readonly publishedDomains: Schema.$Array<Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>>;
381
+ readonly rendererContractVersion: Schema.Literal<"1.0.0">;
382
+ }>;
383
+ readonly receipt: Schema.Struct<{
384
+ readonly activatedHeads: Schema.Finite;
385
+ readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
386
+ readonly deletedHeads: Schema.Finite;
387
+ readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
388
+ readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
389
+ readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
390
+ readonly resultCount: Schema.Finite;
391
+ readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
392
+ readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
393
+ readonly snapshots: Schema.Struct<{
394
+ readonly program: Schema.Struct<{
395
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
396
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
397
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
398
+ readonly rowCount: Schema.Int;
399
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
400
+ }>;
401
+ readonly quran: Schema.Struct<{
402
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
403
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
404
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
405
+ readonly rowCount: Schema.Int;
406
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
407
+ }>;
408
+ readonly tryout: Schema.Struct<{
409
+ readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
410
+ readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
411
+ readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
412
+ readonly rowCount: Schema.Int;
413
+ readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
414
+ }>;
415
+ }>;
416
+ readonly stagedArtifacts: Schema.Finite;
417
+ readonly stagedItems: Schema.Finite;
418
+ readonly stagedProjections: Schema.Finite;
419
+ readonly stagedRoutes: Schema.Finite;
420
+ readonly stagedSnapshotRows: Schema.Finite;
421
+ }>;
422
+ }>>;
423
+ }>]>;
424
+ export type RecoveryLookup = typeof RecoveryLookupSchema.Type;
@@ -0,0 +1,41 @@
1
+ import { Schema } from "effect";
2
+ import { ContentReleaseBundleSchema, } from "#contracts/release/lifecycle";
3
+ import { hasSameContentSnapshots, snapshotRowCount, } from "#contracts/release/snapshot/spec";
4
+ import { PublicationReceiptSchema } from "#contracts/release/spec";
5
+ /** Compares canonical signed locale lists without erasing their role. */
6
+ export function hasSameAppLocales(left, right) {
7
+ return (left.length === right.length &&
8
+ left.every((locale, index) => locale === right[index]));
9
+ }
10
+ /** Checks terminal receipt counts against its signed immutable manifest. */
11
+ function hasBoundCompletedReceipt(input) {
12
+ const { manifest } = input.release;
13
+ const { receipt } = input;
14
+ return (receipt.releaseId === manifest.releaseId &&
15
+ hasSameAppLocales(receipt.activeAppLocales, manifest.activeAppLocales) &&
16
+ receipt.manifestHash === input.release.manifestHash &&
17
+ receipt.stagedArtifacts === manifest.upsertCount &&
18
+ receipt.stagedItems === manifest.itemCount &&
19
+ receipt.stagedProjections === manifest.projectionCount &&
20
+ receipt.projectionDigest === manifest.projectionDigest &&
21
+ receipt.resultCount === manifest.resultCount &&
22
+ receipt.resultDigest === manifest.resultDigest &&
23
+ receipt.routeDigest === manifest.routeDigest &&
24
+ receipt.stagedRoutes === manifest.routeCount &&
25
+ hasSameContentSnapshots(receipt.snapshots, manifest.snapshots) &&
26
+ receipt.stagedSnapshotRows === snapshotRowCount(manifest.snapshots));
27
+ }
28
+ /** Exact active release retained for base selection and crash recovery. */
29
+ export const ActiveContentReleaseSchema = ContentReleaseBundleSchema.mapFields((fields) => ({ ...fields, receipt: PublicationReceiptSchema }), { unsafePreserveChecks: true }).pipe(Schema.check(Schema.makeFilter(hasBoundCompletedReceipt, {
30
+ message: "Expected the active receipt to match its signed release manifest.",
31
+ })));
32
+ /** Historical terminal release accepted only when it is a rollback. */
33
+ export const ActiveRollbackContentReleaseSchema = ActiveContentReleaseSchema.pipe(Schema.refine((release) => release.release.manifest.origin.kind === "rollback", { message: "Expected a completed rollback release." }));
34
+ /** Historical recovery lookup used for crash-safe terminal replay. */
35
+ export const RecoveryLookupSchema = Schema.Union([
36
+ Schema.Struct({ kind: Schema.Literal("missing") }),
37
+ Schema.Struct({
38
+ kind: Schema.Literal("completed"),
39
+ value: ActiveRollbackContentReleaseSchema,
40
+ }),
41
+ ]);
@@ -0,0 +1,4 @@
1
+ import type { ActiveContentRelease } from "#contracts/release/current/evidence";
2
+ import type { SignedTryoutRuntimeBundle } from "#contracts/tryout/runtime/spec";
3
+ /** Accepts only the permanent runtime bound to the active try-out snapshot. */
4
+ export declare function hasCurrentTryoutRuntimeBundle(active: ActiveContentRelease | null, bundle: SignedTryoutRuntimeBundle | null): boolean;
@@ -0,0 +1,15 @@
1
+ /** Accepts only the permanent runtime bound to the active try-out snapshot. */
2
+ export function hasCurrentTryoutRuntimeBundle(active, bundle) {
3
+ if (active === null) {
4
+ return bundle === null;
5
+ }
6
+ const snapshotId = active.release.manifest.snapshots.tryout.resultSnapshotId;
7
+ if (snapshotId === null || snapshotId === undefined) {
8
+ return bundle === null;
9
+ }
10
+ if (bundle === null) {
11
+ return false;
12
+ }
13
+ return (snapshotId === bundle.payload.snapshot.snapshotId &&
14
+ active.rendererManifest.hash === bundle.payload.rendererManifestHash);
15
+ }