@emilia-protocol/gate 0.11.0 → 0.14.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 (425) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +310 -0
  3. package/action-control-manifest.js +3 -268
  4. package/action-escrow-custodian.js +3 -394
  5. package/action-escrow-evidence.js +3 -858
  6. package/action-escrow-package.js +3 -1668
  7. package/action-escrow-postgres.js +3 -337
  8. package/action-escrow-state.js +3 -396
  9. package/action-escrow-verifiers.js +3 -331
  10. package/action-escrow.js +3 -2447
  11. package/action-packs.js +3 -140
  12. package/adapters/_kit.js +3 -104
  13. package/adapters/aws.js +3 -108
  14. package/adapters/cloudflare.js +3 -54
  15. package/adapters/gcp.js +3 -70
  16. package/adapters/github.js +3 -109
  17. package/adapters/jira.js +3 -55
  18. package/adapters/k8s.js +3 -70
  19. package/adapters/linear.js +3 -55
  20. package/adapters/salesforce.js +3 -55
  21. package/adapters/stripe.js +3 -81
  22. package/adapters/supabase.js +3 -121
  23. package/adapters/terraform.js +3 -59
  24. package/adapters/vercel.js +3 -84
  25. package/aec-execution.js +3 -312
  26. package/breakglass.js +3 -582
  27. package/capability-receipt.js +4 -0
  28. package/cf1-conformance.js +3 -106
  29. package/challenge-store.js +3 -69
  30. package/control-plane.js +3 -340
  31. package/coverage.js +3 -721
  32. package/demo.mjs +1 -1
  33. package/deployment-attestation.js +3 -247
  34. package/dist/action-control-manifest.d.ts +82 -0
  35. package/dist/action-control-manifest.d.ts.map +1 -0
  36. package/dist/action-control-manifest.js +422 -0
  37. package/dist/action-control-manifest.js.map +1 -0
  38. package/dist/action-escrow-custodian.d.ts +74 -0
  39. package/dist/action-escrow-custodian.d.ts.map +1 -0
  40. package/dist/action-escrow-custodian.js +363 -0
  41. package/dist/action-escrow-custodian.js.map +1 -0
  42. package/dist/action-escrow-evidence.d.ts +130 -0
  43. package/dist/action-escrow-evidence.d.ts.map +1 -0
  44. package/dist/action-escrow-evidence.js +1012 -0
  45. package/dist/action-escrow-evidence.js.map +1 -0
  46. package/dist/action-escrow-package.d.ts +10 -0
  47. package/dist/action-escrow-package.d.ts.map +1 -0
  48. package/dist/action-escrow-package.js +1583 -0
  49. package/dist/action-escrow-package.js.map +1 -0
  50. package/dist/action-escrow-postgres.d.ts +62 -0
  51. package/dist/action-escrow-postgres.d.ts.map +1 -0
  52. package/dist/action-escrow-postgres.js +339 -0
  53. package/dist/action-escrow-postgres.js.map +1 -0
  54. package/dist/action-escrow-state.d.ts +141 -0
  55. package/dist/action-escrow-state.d.ts.map +1 -0
  56. package/dist/action-escrow-state.js +413 -0
  57. package/dist/action-escrow-state.js.map +1 -0
  58. package/dist/action-escrow-verifiers.d.ts +65 -0
  59. package/dist/action-escrow-verifiers.d.ts.map +1 -0
  60. package/dist/action-escrow-verifiers.js +421 -0
  61. package/dist/action-escrow-verifiers.js.map +1 -0
  62. package/dist/action-escrow.d.ts +112 -0
  63. package/dist/action-escrow.d.ts.map +1 -0
  64. package/dist/action-escrow.js +2661 -0
  65. package/dist/action-escrow.js.map +1 -0
  66. package/dist/action-packs.d.ts +54 -0
  67. package/dist/action-packs.d.ts.map +1 -0
  68. package/dist/action-packs.js +143 -0
  69. package/dist/action-packs.js.map +1 -0
  70. package/dist/adapters/_kit.d.ts +50 -0
  71. package/dist/adapters/_kit.d.ts.map +1 -0
  72. package/dist/adapters/_kit.js +98 -0
  73. package/dist/adapters/_kit.js.map +1 -0
  74. package/dist/adapters/aws.d.ts +158 -0
  75. package/dist/adapters/aws.d.ts.map +1 -0
  76. package/dist/adapters/aws.js +136 -0
  77. package/dist/adapters/aws.js.map +1 -0
  78. package/dist/adapters/cloudflare.d.ts +116 -0
  79. package/dist/adapters/cloudflare.d.ts.map +1 -0
  80. package/dist/adapters/cloudflare.js +75 -0
  81. package/dist/adapters/cloudflare.js.map +1 -0
  82. package/dist/adapters/gcp.d.ts +139 -0
  83. package/dist/adapters/gcp.d.ts.map +1 -0
  84. package/dist/adapters/gcp.js +69 -0
  85. package/dist/adapters/gcp.js.map +1 -0
  86. package/dist/adapters/github.d.ts +123 -0
  87. package/dist/adapters/github.d.ts.map +1 -0
  88. package/dist/adapters/github.js +105 -0
  89. package/dist/adapters/github.js.map +1 -0
  90. package/dist/adapters/jira.d.ts +109 -0
  91. package/dist/adapters/jira.d.ts.map +1 -0
  92. package/dist/adapters/jira.js +54 -0
  93. package/dist/adapters/jira.js.map +1 -0
  94. package/dist/adapters/k8s.d.ts +139 -0
  95. package/dist/adapters/k8s.d.ts.map +1 -0
  96. package/dist/adapters/k8s.js +69 -0
  97. package/dist/adapters/k8s.js.map +1 -0
  98. package/dist/adapters/linear.d.ts +109 -0
  99. package/dist/adapters/linear.d.ts.map +1 -0
  100. package/dist/adapters/linear.js +54 -0
  101. package/dist/adapters/linear.js.map +1 -0
  102. package/dist/adapters/salesforce.d.ts +109 -0
  103. package/dist/adapters/salesforce.d.ts.map +1 -0
  104. package/dist/adapters/salesforce.js +54 -0
  105. package/dist/adapters/salesforce.js.map +1 -0
  106. package/dist/adapters/stripe.d.ts +116 -0
  107. package/dist/adapters/stripe.d.ts.map +1 -0
  108. package/dist/adapters/stripe.js +77 -0
  109. package/dist/adapters/stripe.js.map +1 -0
  110. package/dist/adapters/supabase.d.ts +127 -0
  111. package/dist/adapters/supabase.d.ts.map +1 -0
  112. package/dist/adapters/supabase.js +112 -0
  113. package/dist/adapters/supabase.js.map +1 -0
  114. package/dist/adapters/terraform.d.ts +109 -0
  115. package/dist/adapters/terraform.d.ts.map +1 -0
  116. package/dist/adapters/terraform.js +58 -0
  117. package/dist/adapters/terraform.js.map +1 -0
  118. package/dist/adapters/vercel.d.ts +114 -0
  119. package/dist/adapters/vercel.d.ts.map +1 -0
  120. package/dist/adapters/vercel.js +81 -0
  121. package/dist/adapters/vercel.js.map +1 -0
  122. package/dist/aec-execution.d.ts +107 -0
  123. package/dist/aec-execution.d.ts.map +1 -0
  124. package/dist/aec-execution.js +334 -0
  125. package/dist/aec-execution.js.map +1 -0
  126. package/dist/breakglass.d.ts +205 -0
  127. package/dist/breakglass.d.ts.map +1 -0
  128. package/dist/breakglass.js +627 -0
  129. package/dist/breakglass.js.map +1 -0
  130. package/dist/capability-receipt.d.ts +601 -0
  131. package/dist/capability-receipt.d.ts.map +1 -0
  132. package/dist/capability-receipt.js +1177 -0
  133. package/dist/capability-receipt.js.map +1 -0
  134. package/dist/cf1-conformance.d.ts +83 -0
  135. package/dist/cf1-conformance.d.ts.map +1 -0
  136. package/dist/cf1-conformance.js +94 -0
  137. package/dist/cf1-conformance.js.map +1 -0
  138. package/dist/challenge-store.d.ts +20 -0
  139. package/dist/challenge-store.d.ts.map +1 -0
  140. package/dist/challenge-store.js +62 -0
  141. package/dist/challenge-store.js.map +1 -0
  142. package/dist/control-plane.d.ts +136 -0
  143. package/dist/control-plane.d.ts.map +1 -0
  144. package/dist/control-plane.js +349 -0
  145. package/dist/control-plane.js.map +1 -0
  146. package/dist/coverage.d.ts +156 -0
  147. package/dist/coverage.d.ts.map +1 -0
  148. package/dist/coverage.js +768 -0
  149. package/dist/coverage.js.map +1 -0
  150. package/dist/deployment-attestation.d.ts +93 -0
  151. package/dist/deployment-attestation.d.ts.map +1 -0
  152. package/dist/deployment-attestation.js +262 -0
  153. package/dist/deployment-attestation.js.map +1 -0
  154. package/dist/eg1-conformance.d.ts +286 -0
  155. package/dist/eg1-conformance.d.ts.map +1 -0
  156. package/dist/eg1-conformance.js +379 -0
  157. package/dist/eg1-conformance.js.map +1 -0
  158. package/dist/enterprise.d.ts +88 -0
  159. package/dist/enterprise.d.ts.map +1 -0
  160. package/dist/enterprise.js +194 -0
  161. package/dist/enterprise.js.map +1 -0
  162. package/dist/evidence-postgres.d.ts +123 -0
  163. package/dist/evidence-postgres.d.ts.map +1 -0
  164. package/dist/evidence-postgres.js +343 -0
  165. package/dist/evidence-postgres.js.map +1 -0
  166. package/dist/evidence.d.ts +113 -0
  167. package/dist/evidence.d.ts.map +1 -0
  168. package/dist/evidence.js +369 -0
  169. package/dist/evidence.js.map +1 -0
  170. package/dist/execution-binding.d.ts +49 -0
  171. package/dist/execution-binding.d.ts.map +1 -0
  172. package/dist/execution-binding.js +243 -0
  173. package/dist/execution-binding.js.map +1 -0
  174. package/dist/formal-runtime-map.d.ts +42 -0
  175. package/dist/formal-runtime-map.d.ts.map +1 -0
  176. package/dist/formal-runtime-map.js +23 -0
  177. package/dist/formal-runtime-map.js.map +1 -0
  178. package/dist/index.d.ts +1003 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +1737 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/key-registry.d.ts +60 -0
  183. package/dist/key-registry.d.ts.map +1 -0
  184. package/dist/key-registry.js +144 -0
  185. package/dist/key-registry.js.map +1 -0
  186. package/dist/mcp.d.ts +53 -0
  187. package/dist/mcp.d.ts.map +1 -0
  188. package/dist/mcp.js +112 -0
  189. package/dist/mcp.js.map +1 -0
  190. package/dist/metering.d.ts +80 -0
  191. package/dist/metering.d.ts.map +1 -0
  192. package/dist/metering.js +227 -0
  193. package/dist/metering.js.map +1 -0
  194. package/dist/metrics.d.ts +68 -0
  195. package/dist/metrics.d.ts.map +1 -0
  196. package/dist/metrics.js +242 -0
  197. package/dist/metrics.js.map +1 -0
  198. package/dist/network-witness.d.ts +167 -0
  199. package/dist/network-witness.d.ts.map +1 -0
  200. package/dist/network-witness.js +520 -0
  201. package/dist/network-witness.js.map +1 -0
  202. package/dist/proposal-to-effect.d.ts +146 -0
  203. package/dist/proposal-to-effect.d.ts.map +1 -0
  204. package/dist/proposal-to-effect.js +427 -0
  205. package/dist/proposal-to-effect.js.map +1 -0
  206. package/dist/protocol-state.d.ts +141 -0
  207. package/dist/protocol-state.d.ts.map +1 -0
  208. package/dist/protocol-state.js +106 -0
  209. package/dist/protocol-state.js.map +1 -0
  210. package/dist/receipt-program.d.ts +59 -0
  211. package/dist/receipt-program.d.ts.map +1 -0
  212. package/dist/receipt-program.js +1053 -0
  213. package/dist/receipt-program.js.map +1 -0
  214. package/dist/reliance-kernel.d.ts +66 -0
  215. package/dist/reliance-kernel.d.ts.map +1 -0
  216. package/dist/reliance-kernel.js +103 -0
  217. package/dist/reliance-kernel.js.map +1 -0
  218. package/dist/reliance-packet.d.ts +67 -0
  219. package/dist/reliance-packet.d.ts.map +1 -0
  220. package/dist/reliance-packet.js +176 -0
  221. package/dist/reliance-packet.js.map +1 -0
  222. package/dist/remedy-program-postgres.d.ts +37 -0
  223. package/dist/remedy-program-postgres.d.ts.map +1 -0
  224. package/dist/remedy-program-postgres.js +291 -0
  225. package/dist/remedy-program-postgres.js.map +1 -0
  226. package/dist/remedy-program-receipt.d.ts +97 -0
  227. package/dist/remedy-program-receipt.d.ts.map +1 -0
  228. package/dist/remedy-program-receipt.js +817 -0
  229. package/dist/remedy-program-receipt.js.map +1 -0
  230. package/dist/remedy-program.d.ts +76 -0
  231. package/dist/remedy-program.d.ts.map +1 -0
  232. package/dist/remedy-program.js +1346 -0
  233. package/dist/remedy-program.js.map +1 -0
  234. package/dist/reports/art14.d.ts +101 -0
  235. package/dist/reports/art14.d.ts.map +1 -0
  236. package/dist/reports/art14.js +340 -0
  237. package/dist/reports/art14.js.map +1 -0
  238. package/dist/reports/assurance-package.d.ts +197 -0
  239. package/dist/reports/assurance-package.d.ts.map +1 -0
  240. package/dist/reports/assurance-package.js +313 -0
  241. package/dist/reports/assurance-package.js.map +1 -0
  242. package/dist/reports/auditor-workpaper.d.ts +194 -0
  243. package/dist/reports/auditor-workpaper.d.ts.map +1 -0
  244. package/dist/reports/auditor-workpaper.js +545 -0
  245. package/dist/reports/auditor-workpaper.js.map +1 -0
  246. package/dist/reports/external-verification.d.ts +76 -0
  247. package/dist/reports/external-verification.d.ts.map +1 -0
  248. package/dist/reports/external-verification.js +209 -0
  249. package/dist/reports/external-verification.js.map +1 -0
  250. package/dist/reports/reperform.d.ts +122 -0
  251. package/dist/reports/reperform.d.ts.map +1 -0
  252. package/dist/reports/reperform.js +432 -0
  253. package/dist/reports/reperform.js.map +1 -0
  254. package/dist/reports/underwriter.d.ts +127 -0
  255. package/dist/reports/underwriter.d.ts.map +1 -0
  256. package/dist/reports/underwriter.js +348 -0
  257. package/dist/reports/underwriter.js.map +1 -0
  258. package/dist/retention.d.ts +88 -0
  259. package/dist/retention.d.ts.map +1 -0
  260. package/dist/retention.js +90 -0
  261. package/dist/retention.js.map +1 -0
  262. package/dist/roster.d.ts +113 -0
  263. package/dist/roster.d.ts.map +1 -0
  264. package/dist/roster.js +261 -0
  265. package/dist/roster.js.map +1 -0
  266. package/dist/runtime-monitor.d.ts +132 -0
  267. package/dist/runtime-monitor.d.ts.map +1 -0
  268. package/dist/runtime-monitor.js +197 -0
  269. package/dist/runtime-monitor.js.map +1 -0
  270. package/dist/settlement.d.ts +68 -0
  271. package/dist/settlement.d.ts.map +1 -0
  272. package/dist/settlement.js +306 -0
  273. package/dist/settlement.js.map +1 -0
  274. package/dist/siem.d.ts +261 -0
  275. package/dist/siem.d.ts.map +1 -0
  276. package/dist/siem.js +247 -0
  277. package/dist/siem.js.map +1 -0
  278. package/dist/store-postgres.d.ts +107 -0
  279. package/dist/store-postgres.d.ts.map +1 -0
  280. package/dist/store-postgres.js +152 -0
  281. package/dist/store-postgres.js.map +1 -0
  282. package/dist/store.d.ts +95 -0
  283. package/dist/store.d.ts.map +1 -0
  284. package/dist/store.js +202 -0
  285. package/dist/store.js.map +1 -0
  286. package/dist/strict-json.d.ts +14 -0
  287. package/dist/strict-json.d.ts.map +1 -0
  288. package/dist/strict-json.js +132 -0
  289. package/dist/strict-json.js.map +1 -0
  290. package/dist/trust-program-adapters.d.ts +122 -0
  291. package/dist/trust-program-adapters.d.ts.map +1 -0
  292. package/dist/trust-program-adapters.js +802 -0
  293. package/dist/trust-program-adapters.js.map +1 -0
  294. package/dist/trust-program-postgres.d.ts +41 -0
  295. package/dist/trust-program-postgres.d.ts.map +1 -0
  296. package/dist/trust-program-postgres.js +346 -0
  297. package/dist/trust-program-postgres.js.map +1 -0
  298. package/dist/trust-program-revocation.d.ts +206 -0
  299. package/dist/trust-program-revocation.d.ts.map +1 -0
  300. package/dist/trust-program-revocation.js +600 -0
  301. package/dist/trust-program-revocation.js.map +1 -0
  302. package/dist/trust-program.d.ts +197 -0
  303. package/dist/trust-program.d.ts.map +1 -0
  304. package/dist/trust-program.js +1351 -0
  305. package/dist/trust-program.js.map +1 -0
  306. package/dist/witness-postgres.d.ts +43 -0
  307. package/dist/witness-postgres.d.ts.map +1 -0
  308. package/dist/witness-postgres.js +92 -0
  309. package/dist/witness-postgres.js.map +1 -0
  310. package/dist/zk-range-proof.d.ts +78 -0
  311. package/dist/zk-range-proof.d.ts.map +1 -0
  312. package/dist/zk-range-proof.js +228 -0
  313. package/dist/zk-range-proof.js.map +1 -0
  314. package/eg1-conformance.js +3 -404
  315. package/enterprise.js +3 -180
  316. package/ep-assure.mjs +1 -0
  317. package/evidence-postgres.js +3 -356
  318. package/evidence.js +4 -360
  319. package/execution-binding.js +3 -212
  320. package/formal-runtime-map.js +4 -0
  321. package/index.js +4 -1249
  322. package/key-registry.js +3 -134
  323. package/mcp.js +3 -109
  324. package/metering.js +3 -226
  325. package/metrics.js +3 -231
  326. package/network-witness.js +3 -499
  327. package/package.json +35 -4
  328. package/proposal-to-effect.js +4 -0
  329. package/receipt-program.js +4 -0
  330. package/reliance-kernel.js +3 -112
  331. package/reliance-packet.js +3 -175
  332. package/remedy-program-postgres.js +4 -0
  333. package/remedy-program-receipt.js +4 -0
  334. package/remedy-program.js +4 -0
  335. package/reports/art14.js +0 -0
  336. package/reports/assurance-package.js +2 -312
  337. package/reports/auditor-workpaper.js +3 -537
  338. package/reports/external-verification.js +3 -222
  339. package/reports/reperform.js +3 -424
  340. package/reports/underwriter.js +3 -339
  341. package/retention.js +3 -84
  342. package/roster.js +3 -264
  343. package/runtime-monitor.js +4 -0
  344. package/settlement.js +3 -299
  345. package/siem.js +3 -235
  346. package/src/action-control-manifest.ts +424 -0
  347. package/src/action-escrow-custodian.ts +427 -0
  348. package/src/action-escrow-evidence.ts +1178 -0
  349. package/src/action-escrow-package.ts +1821 -0
  350. package/src/action-escrow-postgres.ts +366 -0
  351. package/src/action-escrow-state.ts +498 -0
  352. package/src/action-escrow-verifiers.ts +484 -0
  353. package/src/action-escrow.ts +3039 -0
  354. package/src/action-packs.ts +170 -0
  355. package/src/adapters/_kit.ts +117 -0
  356. package/src/adapters/aws.ts +142 -0
  357. package/src/adapters/cloudflare.ts +78 -0
  358. package/src/adapters/gcp.ts +71 -0
  359. package/src/adapters/github.ts +110 -0
  360. package/src/adapters/jira.ts +56 -0
  361. package/src/adapters/k8s.ts +71 -0
  362. package/src/adapters/linear.ts +56 -0
  363. package/src/adapters/salesforce.ts +56 -0
  364. package/src/adapters/stripe.ts +82 -0
  365. package/src/adapters/supabase.ts +122 -0
  366. package/src/adapters/terraform.ts +60 -0
  367. package/src/adapters/vercel.ts +85 -0
  368. package/src/aec-execution.ts +354 -0
  369. package/src/breakglass.ts +647 -0
  370. package/src/capability-receipt.ts +1258 -0
  371. package/src/cf1-conformance.ts +120 -0
  372. package/src/challenge-store.ts +70 -0
  373. package/src/control-plane.ts +374 -0
  374. package/src/coverage.ts +832 -0
  375. package/src/deployment-attestation.ts +259 -0
  376. package/src/eg1-conformance.ts +471 -0
  377. package/src/enterprise.ts +195 -0
  378. package/src/evidence-postgres.ts +374 -0
  379. package/src/evidence.ts +367 -0
  380. package/src/execution-binding.ts +236 -0
  381. package/src/formal-runtime-map.ts +24 -0
  382. package/src/index.ts +2127 -0
  383. package/src/key-registry.ts +150 -0
  384. package/src/mcp.ts +120 -0
  385. package/src/metering.ts +237 -0
  386. package/src/metrics.ts +232 -0
  387. package/src/network-witness.ts +585 -0
  388. package/src/proposal-to-effect.ts +571 -0
  389. package/src/protocol-state.ts +143 -0
  390. package/src/protocol-state.typecheck.ts +94 -0
  391. package/src/receipt-program.ts +1105 -0
  392. package/src/reliance-kernel.ts +119 -0
  393. package/src/reliance-packet.ts +206 -0
  394. package/src/remedy-program-postgres.ts +367 -0
  395. package/src/remedy-program-receipt.ts +891 -0
  396. package/src/remedy-program.ts +1388 -0
  397. package/src/reports/art14.ts +361 -0
  398. package/src/reports/assurance-package.ts +330 -0
  399. package/src/reports/auditor-workpaper.ts +558 -0
  400. package/src/reports/external-verification.ts +232 -0
  401. package/src/reports/reperform.ts +441 -0
  402. package/src/reports/underwriter.ts +356 -0
  403. package/src/retention.ts +100 -0
  404. package/src/roster.ts +273 -0
  405. package/src/runtime-monitor.ts +217 -0
  406. package/src/settlement.ts +313 -0
  407. package/src/siem.ts +247 -0
  408. package/src/store-postgres.ts +167 -0
  409. package/src/store.ts +214 -0
  410. package/src/strict-json.ts +115 -0
  411. package/src/trust-program-adapters.ts +847 -0
  412. package/src/trust-program-postgres.ts +429 -0
  413. package/src/trust-program-revocation.ts +751 -0
  414. package/src/trust-program.ts +1460 -0
  415. package/src/witness-postgres.ts +106 -0
  416. package/src/zk-range-proof.ts +250 -0
  417. package/store-postgres.js +3 -161
  418. package/store.js +4 -198
  419. package/strict-json.js +3 -102
  420. package/trust-program-adapters.js +4 -0
  421. package/trust-program-postgres.js +4 -0
  422. package/trust-program-revocation.js +4 -0
  423. package/trust-program.js +4 -0
  424. package/witness-postgres.js +3 -96
  425. package/zk-range-proof.js +4 -0
@@ -0,0 +1,143 @@
1
+ /**
2
+ * EP Protocol-State — brand-typed handshake lifecycle (GAP-4).
3
+ *
4
+ * Purpose: make an ILLEGAL protocol-state transition a COMPILE error, not a
5
+ * runtime failure. Each lifecycle state is a distinct nominal (branded) type,
6
+ * and every transition is a function whose parameter type admits ONLY its legal
7
+ * predecessor state(s) and whose return type is exactly its legal successor.
8
+ * Passing the wrong state to a transition (e.g. `consume(initiated)` — consuming
9
+ * before verification) is rejected by `tsc` before the code ever runs.
10
+ *
11
+ * ── Source of truth ─────────────────────────────────────────────────────────
12
+ * The state graph mirrors the formally-verified model, not a toy:
13
+ * formal/ep_handshake.tla — abstract lifecycle + transition guards
14
+ * lib/handshake/invariants.js (HANDSHAKE_STATUSES) — the 6 persisted statuses
15
+ * lib/handshake/create.js — status:'initiated' (T1 Initiate)
16
+ * lib/handshake/present.js — initiated → pending_verification (T2 Present)
17
+ * lib/handshake/verify.js — outcome accepted/rejected/expired (T3/T4/T7)
18
+ * lib/handshake/consume.js — verified → consumed (T5 Consume)
19
+ * lib/handshake/finalize.js — → revoked (T6 Revoke)
20
+ *
21
+ * ── States (TLA `state` domain) ─────────────────────────────────────────────
22
+ * none | initiated | pending_verification | verified
23
+ * | rejected | expired | revoked | consumed
24
+ *
25
+ * Two of these are ABSTRACT lifecycle states, not DB status values:
26
+ * - `none` : pre-initiation. There is no persisted row yet.
27
+ * - `consumed` : a verified handshake that has an entry in the
28
+ * `handshake_consumptions` table. Consumption does NOT rewrite
29
+ * `handshakes.status` (it stays 'verified'); it is recorded
30
+ * atomically in a side table by `consume_handshake_atomic`.
31
+ * The TLA model abstracts (status='verified' ∧ h∈consumptions)
32
+ * as the distinct terminal state `consumed`. This module keeps
33
+ * that abstraction so "consume-once" and "no-verify-after-consume"
34
+ * are expressible in the type system.
35
+ *
36
+ * The other six are exactly `HANDSHAKE_STATUSES` from invariants.js and carry a
37
+ * `dbStatus` field equal to the persisted `handshakes.status` value.
38
+ *
39
+ * ── Legal transition graph (the ONLY edges; everything else is a type error) ─
40
+ * genesis() -> None
41
+ * initiate(None) -> Initiated
42
+ * present(Initiated) -> PendingVerification
43
+ * verifyAccept(PendingVerification) -> Verified
44
+ * verifyReject(PendingVerification) -> Rejected (terminal)
45
+ * consume(Verified) -> Consumed (terminal)
46
+ * revoke(Initiated|PendingVerification|Verified) -> Revoked (terminal)
47
+ * expire(Initiated|PendingVerification|Verified) -> Expired (terminal)
48
+ *
49
+ * Terminal states (Rejected, Expired, Revoked, Consumed) are accepted by NO
50
+ * transition function, so any move out of a terminal state is a compile error.
51
+ *
52
+ * Branding note: each state is nominally distinguished by a private, readonly
53
+ * string-literal `tag`. Distinct tags make each state a distinct type, so no
54
+ * legal predecessor of one transition is accidentally assignable to another.
55
+ * The runtime value literally is `{ tag, dbStatus }`; there is no phantom-only
56
+ * field, so no casts are needed and the runtime and the types cannot drift.
57
+ *
58
+ * This module is intentionally free of I/O. It is the compile-time spine that
59
+ * the runtime state machine (verify.js / consume.js / finalize.js) is expected
60
+ * to obey; it does not replace those code paths' own DB-level guards.
61
+ *
62
+ * @license Apache-2.0
63
+ */
64
+
65
+ /**
66
+ * The six persisted `handshakes.status` values (single source: invariants.js
67
+ * HANDSHAKE_STATUSES). `none` and `consumed` are abstract and have no row status.
68
+ */
69
+ export type DbHandshakeStatus = 'initiated' | 'pending_verification' | 'verified' | 'rejected' | 'expired' | 'revoked';
70
+
71
+ /** Pre-initiation. No persisted handshake exists yet. */
72
+ export type None = { readonly tag: 'none'; readonly dbStatus: null };
73
+ /** A handshake row was created (T1). DB status 'initiated'. */
74
+ export type Initiated = { readonly tag: 'initiated'; readonly dbStatus: 'initiated' };
75
+ /** A presentation was added and verification is pending (T2). DB 'pending_verification'. */
76
+ export type PendingVerification = { readonly tag: 'pending_verification'; readonly dbStatus: 'pending_verification' };
77
+ /** Verification accepted (T3). DB 'verified'. Only state from which consume is legal. */
78
+ export type Verified = { readonly tag: 'verified'; readonly dbStatus: 'verified' };
79
+ /** Verification rejected (T4). Terminal. DB 'rejected'. */
80
+ export type Rejected = { readonly tag: 'rejected'; readonly dbStatus: 'rejected' };
81
+ /** Binding expired (T7). Terminal. DB 'expired'. */
82
+ export type Expired = { readonly tag: 'expired'; readonly dbStatus: 'expired' };
83
+ /** Revoked by a party (T6). Terminal. DB 'revoked'. */
84
+ export type Revoked = { readonly tag: 'revoked'; readonly dbStatus: 'revoked' };
85
+ /**
86
+ * Consumed exactly once (T5). Terminal abstract state; the row keeps DB status
87
+ * 'verified' and gains a `handshake_consumptions` record.
88
+ */
89
+ export type Consumed = { readonly tag: 'consumed'; readonly dbStatus: 'verified' };
90
+
91
+ /** Any state in the lifecycle. */
92
+ export type ProtocolState = None | Initiated | PendingVerification | Verified | Rejected | Expired | Revoked | Consumed;
93
+ /** States a still-active handshake can be revoked or expired from (T6/T7 domain). */
94
+ export type Active = Initiated | PendingVerification | Verified;
95
+
96
+ /** T0: genesis — the empty pre-initiation state. */
97
+ export function genesis(): None {
98
+ return { tag: 'none', dbStatus: null };
99
+ }
100
+
101
+ /** T1 Initiate: none -> initiated. Maps to create.js status:'initiated'. */
102
+ export function initiate(_s: None): Initiated {
103
+ return { tag: 'initiated', dbStatus: 'initiated' };
104
+ }
105
+
106
+ /** T2 Present: initiated -> pending_verification. Maps to present.js. */
107
+ export function present(_s: Initiated): PendingVerification {
108
+ return { tag: 'pending_verification', dbStatus: 'pending_verification' };
109
+ }
110
+
111
+ /** T3 VerifyAccept: pending_verification -> verified. verify.js outcome='accepted'. */
112
+ export function verifyAccept(_s: PendingVerification): Verified {
113
+ return { tag: 'verified', dbStatus: 'verified' };
114
+ }
115
+
116
+ /** T4 VerifyReject: pending_verification -> rejected (terminal). verify.js outcome='rejected'. */
117
+ export function verifyReject(_s: PendingVerification): Rejected {
118
+ return { tag: 'rejected', dbStatus: 'rejected' };
119
+ }
120
+
121
+ /**
122
+ * T5 Consume: verified -> consumed (terminal). consume.js requires 'verified' state
123
+ * and enforces consume-once at the DB level.
124
+ */
125
+ export function consume(_s: Verified): Consumed {
126
+ return { tag: 'consumed', dbStatus: 'verified' };
127
+ }
128
+
129
+ /**
130
+ * T6 Revoke: {initiated|pending_verification|verified} -> revoked (terminal).
131
+ * finalize.js. Legal only from an active (pre-terminal) state.
132
+ */
133
+ export function revoke(_s: Active): Revoked {
134
+ return { tag: 'revoked', dbStatus: 'revoked' };
135
+ }
136
+
137
+ /**
138
+ * T7 Expire: {initiated|pending_verification|verified} -> expired (terminal).
139
+ * verify.js outcome='expired'. Legal only from an active (pre-terminal) state.
140
+ */
141
+ export function expire(_s: Active): Expired {
142
+ return { tag: 'expired', dbStatus: 'expired' };
143
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * EP Protocol-State — TYPE-LEVEL conformance test (GAP-4).
3
+ *
4
+ * This file is checked by `tsc` under tsconfig.core.json, not run as a unit
5
+ * test. It asserts, at compile time, that the ONLY legal transitions of the
6
+ * handshake lifecycle are the ones the formal model permits:
7
+ *
8
+ * - The "legal sequences" section MUST type-check with no errors.
9
+ * - Every `// @ts-expect-error` line guards a transition that MUST be illegal.
10
+ * If any such transition ever becomes legal (a regression in the brand
11
+ * types), tsc reports the `@ts-expect-error` as UNUSED and the type-gate
12
+ * fails. This is the tripwire.
13
+ *
14
+ * These are type-only assertions; the functions are pure and the file is safe
15
+ * to load, but nothing here is intended to run.
16
+ *
17
+ * @license Apache-2.0
18
+ */
19
+
20
+ import {
21
+ genesis, initiate, present, verifyAccept, verifyReject, consume, revoke, expire,
22
+ } from './protocol-state.js';
23
+
24
+ /* eslint-disable no-unused-vars */
25
+
26
+ // ── LEGAL SEQUENCES (must compile) ──────────────────────────────────────────
27
+
28
+ // Full happy path: none → initiated → pending_verification → verified → consumed
29
+ const _consumed = consume(verifyAccept(present(initiate(genesis()))));
30
+
31
+ // Reject branch: … → pending_verification → rejected
32
+ const _rejected = verifyReject(present(initiate(genesis())));
33
+
34
+ // Revoke is legal from every active (pre-terminal) state:
35
+ const _revokedFromInitiated = revoke(initiate(genesis()));
36
+ const _revokedFromPending = revoke(present(initiate(genesis())));
37
+ const _revokedFromVerified = revoke(verifyAccept(present(initiate(genesis()))));
38
+
39
+ // Expire is legal from every active (pre-terminal) state:
40
+ const _expiredFromInitiated = expire(initiate(genesis()));
41
+ const _expiredFromPending = expire(present(initiate(genesis())));
42
+ const _expiredFromVerified = expire(verifyAccept(present(initiate(genesis()))));
43
+
44
+ // Convenience handles to well-typed states for the illegal section below.
45
+ const none = genesis();
46
+ const initiated = initiate(none);
47
+ const pending = present(initiated);
48
+ const verified = verifyAccept(pending);
49
+ const consumedState = consume(verified);
50
+ const revokedState = revoke(initiated);
51
+ const rejectedState = verifyReject(pending);
52
+ const expiredState = expire(initiated);
53
+
54
+ // ── ILLEGAL TRANSITIONS (each MUST be a type error) ─────────────────────────
55
+
56
+ // Consume before verification — the canonical GAP-4 violation.
57
+ // @ts-expect-error consume requires Verified, not None
58
+ consume(none);
59
+ // @ts-expect-error consume requires Verified, not Initiated
60
+ consume(initiated);
61
+ // @ts-expect-error consume requires Verified, not PendingVerification
62
+ consume(pending);
63
+
64
+ // Skipping the presentation step (initiated → verified directly).
65
+ // @ts-expect-error verifyAccept requires PendingVerification, not Initiated
66
+ verifyAccept(initiated);
67
+ // @ts-expect-error verifyReject requires PendingVerification, not Initiated
68
+ verifyReject(initiated);
69
+
70
+ // Presenting after the handshake already left the initiated state.
71
+ // @ts-expect-error present requires Initiated, not PendingVerification
72
+ present(pending);
73
+ // @ts-expect-error present requires Initiated, not Verified
74
+ present(verified);
75
+
76
+ // Re-initiating something that already exists.
77
+ // @ts-expect-error initiate requires None, not Verified
78
+ initiate(verified);
79
+
80
+ // No transition may leave a TERMINAL state (consumed/revoked/rejected/expired).
81
+ // @ts-expect-error cannot consume a Consumed handshake (consume-once)
82
+ consume(consumedState);
83
+ // @ts-expect-error cannot revoke a Consumed handshake
84
+ revoke(consumedState);
85
+ // @ts-expect-error cannot expire a Consumed handshake
86
+ expire(consumedState);
87
+ // @ts-expect-error cannot verify a Revoked handshake
88
+ verifyAccept(revokedState);
89
+ // @ts-expect-error cannot revoke an already-Revoked handshake
90
+ revoke(revokedState);
91
+ // @ts-expect-error cannot consume a Rejected handshake
92
+ consume(rejectedState);
93
+ // @ts-expect-error cannot revoke an Expired handshake
94
+ revoke(expiredState);