worldvm 0.0.0-stage → 0.1.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 (426) hide show
  1. package/AUTHORING.md +833 -0
  2. package/README.md +154 -2
  3. package/bin/worldvm.mjs +3 -0
  4. package/dist/_internal/forma/index.d.ts +1 -0
  5. package/dist/_internal/forma/index.js +1 -0
  6. package/dist/_internal/forma/world/authoring-help.d.ts +25 -0
  7. package/dist/_internal/forma/world/authoring-help.js +130 -0
  8. package/dist/_internal/forma/world/citations.d.ts +3 -0
  9. package/dist/_internal/forma/world/citations.js +26 -0
  10. package/dist/_internal/forma/world/clock-bindings.d.ts +4 -0
  11. package/dist/_internal/forma/world/clock-bindings.js +45 -0
  12. package/dist/_internal/forma/world/compile.d.ts +13 -0
  13. package/dist/_internal/forma/world/compile.js +190 -0
  14. package/dist/_internal/forma/world/coverage.d.ts +10 -0
  15. package/dist/_internal/forma/world/coverage.js +242 -0
  16. package/dist/_internal/forma/world/digest.d.ts +1 -0
  17. package/dist/_internal/forma/world/digest.js +1 -0
  18. package/dist/_internal/forma/world/documentation.d.ts +3 -0
  19. package/dist/_internal/forma/world/documentation.js +38 -0
  20. package/dist/_internal/forma/world/homes.d.ts +4 -0
  21. package/dist/_internal/forma/world/homes.js +202 -0
  22. package/dist/_internal/forma/world/index.d.ts +6 -0
  23. package/dist/_internal/forma/world/index.js +5 -0
  24. package/dist/_internal/forma/world/lowering/accounts.d.ts +4 -0
  25. package/dist/_internal/forma/world/lowering/accounts.js +36 -0
  26. package/dist/_internal/forma/world/lowering/action-policy.d.ts +5 -0
  27. package/dist/_internal/forma/world/lowering/action-policy.js +16 -0
  28. package/dist/_internal/forma/world/lowering/agents.d.ts +6 -0
  29. package/dist/_internal/forma/world/lowering/agents.js +116 -0
  30. package/dist/_internal/forma/world/lowering/bundles.d.ts +3 -0
  31. package/dist/_internal/forma/world/lowering/bundles.js +13 -0
  32. package/dist/_internal/forma/world/lowering/child-parameters.d.ts +14 -0
  33. package/dist/_internal/forma/world/lowering/child-parameters.js +36 -0
  34. package/dist/_internal/forma/world/lowering/collects.d.ts +3 -0
  35. package/dist/_internal/forma/world/lowering/collects.js +51 -0
  36. package/dist/_internal/forma/world/lowering/component-operations.d.ts +6 -0
  37. package/dist/_internal/forma/world/lowering/component-operations.js +26 -0
  38. package/dist/_internal/forma/world/lowering/components.d.ts +7 -0
  39. package/dist/_internal/forma/world/lowering/components.js +236 -0
  40. package/dist/_internal/forma/world/lowering/connectors.d.ts +4 -0
  41. package/dist/_internal/forma/world/lowering/connectors.js +31 -0
  42. package/dist/_internal/forma/world/lowering/context.d.ts +80 -0
  43. package/dist/_internal/forma/world/lowering/context.js +316 -0
  44. package/dist/_internal/forma/world/lowering/contracts.d.ts +7 -0
  45. package/dist/_internal/forma/world/lowering/contracts.js +73 -0
  46. package/dist/_internal/forma/world/lowering/decisions.d.ts +3 -0
  47. package/dist/_internal/forma/world/lowering/decisions.js +164 -0
  48. package/dist/_internal/forma/world/lowering/derives.d.ts +3 -0
  49. package/dist/_internal/forma/world/lowering/derives.js +22 -0
  50. package/dist/_internal/forma/world/lowering/discretionary.d.ts +7 -0
  51. package/dist/_internal/forma/world/lowering/discretionary.js +15 -0
  52. package/dist/_internal/forma/world/lowering/documents.d.ts +3 -0
  53. package/dist/_internal/forma/world/lowering/documents.js +68 -0
  54. package/dist/_internal/forma/world/lowering/effective.d.ts +5 -0
  55. package/dist/_internal/forma/world/lowering/effective.js +26 -0
  56. package/dist/_internal/forma/world/lowering/entities.d.ts +3 -0
  57. package/dist/_internal/forma/world/lowering/entities.js +43 -0
  58. package/dist/_internal/forma/world/lowering/escalations.d.ts +6 -0
  59. package/dist/_internal/forma/world/lowering/escalations.js +31 -0
  60. package/dist/_internal/forma/world/lowering/evidence.d.ts +3 -0
  61. package/dist/_internal/forma/world/lowering/evidence.js +75 -0
  62. package/dist/_internal/forma/world/lowering/files.d.ts +4 -0
  63. package/dist/_internal/forma/world/lowering/files.js +56 -0
  64. package/dist/_internal/forma/world/lowering/holds.d.ts +6 -0
  65. package/dist/_internal/forma/world/lowering/holds.js +35 -0
  66. package/dist/_internal/forma/world/lowering/index.d.ts +89 -0
  67. package/dist/_internal/forma/world/lowering/index.js +115 -0
  68. package/dist/_internal/forma/world/lowering/interactions.d.ts +7 -0
  69. package/dist/_internal/forma/world/lowering/interactions.js +190 -0
  70. package/dist/_internal/forma/world/lowering/library.d.ts +5 -0
  71. package/dist/_internal/forma/world/lowering/library.js +41 -0
  72. package/dist/_internal/forma/world/lowering/milestones.d.ts +6 -0
  73. package/dist/_internal/forma/world/lowering/milestones.js +17 -0
  74. package/dist/_internal/forma/world/lowering/notices.d.ts +3 -0
  75. package/dist/_internal/forma/world/lowering/notices.js +33 -0
  76. package/dist/_internal/forma/world/lowering/param-bounds.d.ts +15 -0
  77. package/dist/_internal/forma/world/lowering/param-bounds.js +71 -0
  78. package/dist/_internal/forma/world/lowering/policies.d.ts +6 -0
  79. package/dist/_internal/forma/world/lowering/policies.js +95 -0
  80. package/dist/_internal/forma/world/lowering/principals.d.ts +62 -0
  81. package/dist/_internal/forma/world/lowering/principals.js +32 -0
  82. package/dist/_internal/forma/world/lowering/recurrences.d.ts +9 -0
  83. package/dist/_internal/forma/world/lowering/recurrences.js +56 -0
  84. package/dist/_internal/forma/world/lowering/renewal.d.ts +5 -0
  85. package/dist/_internal/forma/world/lowering/renewal.js +21 -0
  86. package/dist/_internal/forma/world/lowering/resources.d.ts +6 -0
  87. package/dist/_internal/forma/world/lowering/resources.js +19 -0
  88. package/dist/_internal/forma/world/lowering/reuse.d.ts +5 -0
  89. package/dist/_internal/forma/world/lowering/reuse.js +75 -0
  90. package/dist/_internal/forma/world/lowering/sources.d.ts +10 -0
  91. package/dist/_internal/forma/world/lowering/sources.js +47 -0
  92. package/dist/_internal/forma/world/lowering/syntax.d.ts +84 -0
  93. package/dist/_internal/forma/world/lowering/syntax.js +94 -0
  94. package/dist/_internal/forma/world/lowering/vaults.d.ts +11 -0
  95. package/dist/_internal/forma/world/lowering/vaults.js +148 -0
  96. package/dist/_internal/forma/world/prelude.generated.d.ts +1 -0
  97. package/dist/_internal/forma/world/prelude.generated.js +2 -0
  98. package/dist/_internal/forma/world/properties.d.ts +9 -0
  99. package/dist/_internal/forma/world/properties.js +387 -0
  100. package/dist/_internal/forma/world/scenarios.d.ts +10 -0
  101. package/dist/_internal/forma/world/scenarios.js +757 -0
  102. package/dist/_internal/forma/world/sensitivity.d.ts +3 -0
  103. package/dist/_internal/forma/world/sensitivity.js +118 -0
  104. package/dist/_internal/forma/world/source-syntax.d.ts +6 -0
  105. package/dist/_internal/forma/world/source-syntax.js +27 -0
  106. package/dist/_internal/forma/world/status-handling.d.ts +3 -0
  107. package/dist/_internal/forma/world/status-handling.js +143 -0
  108. package/dist/_internal/forma/world/surface.d.ts +30 -0
  109. package/dist/_internal/forma/world/surface.js +213 -0
  110. package/dist/_internal/forma/world/table-expressions.d.ts +3 -0
  111. package/dist/_internal/forma/world/table-expressions.js +41 -0
  112. package/dist/_internal/forma-tools/index.d.ts +17 -0
  113. package/dist/_internal/forma-tools/index.js +124 -0
  114. package/dist/_internal/ir-checks/advances.d.ts +7 -0
  115. package/dist/_internal/ir-checks/advances.js +6 -0
  116. package/dist/_internal/ir-checks/agent-reads.d.ts +14 -0
  117. package/dist/_internal/ir-checks/agent-reads.js +118 -0
  118. package/dist/_internal/ir-checks/amendments.d.ts +3 -0
  119. package/dist/_internal/ir-checks/amendments.js +21 -0
  120. package/dist/_internal/ir-checks/canonical-json.d.ts +3 -0
  121. package/dist/_internal/ir-checks/canonical-json.js +85 -0
  122. package/dist/_internal/ir-checks/child-parameters.d.ts +2 -0
  123. package/dist/_internal/ir-checks/child-parameters.js +43 -0
  124. package/dist/_internal/ir-checks/clock-bindings.d.ts +3 -0
  125. package/dist/_internal/ir-checks/clock-bindings.js +43 -0
  126. package/dist/_internal/ir-checks/collect-types.d.ts +14 -0
  127. package/dist/_internal/ir-checks/collect-types.js +34 -0
  128. package/dist/_internal/ir-checks/component-operations.d.ts +4 -0
  129. package/dist/_internal/ir-checks/component-operations.js +23 -0
  130. package/dist/_internal/ir-checks/content-digest.d.ts +4 -0
  131. package/dist/_internal/ir-checks/content-digest.js +78 -0
  132. package/dist/_internal/ir-checks/contract-validation.d.ts +3 -0
  133. package/dist/_internal/ir-checks/contract-validation.js +307 -0
  134. package/dist/_internal/ir-checks/contracts.d.ts +25 -0
  135. package/dist/_internal/ir-checks/contracts.js +80 -0
  136. package/dist/_internal/ir-checks/dates.d.ts +2 -0
  137. package/dist/_internal/ir-checks/dates.js +7 -0
  138. package/dist/_internal/ir-checks/documents.d.ts +3 -0
  139. package/dist/_internal/ir-checks/documents.js +45 -0
  140. package/dist/_internal/ir-checks/evidence.d.ts +20 -0
  141. package/dist/_internal/ir-checks/evidence.js +56 -0
  142. package/dist/_internal/ir-checks/files.d.ts +7 -0
  143. package/dist/_internal/ir-checks/files.js +47 -0
  144. package/dist/_internal/ir-checks/index.d.ts +59 -0
  145. package/dist/_internal/ir-checks/index.js +166 -0
  146. package/dist/_internal/ir-checks/instants.d.ts +7 -0
  147. package/dist/_internal/ir-checks/instants.js +61 -0
  148. package/dist/_internal/ir-checks/notices.d.ts +4 -0
  149. package/dist/_internal/ir-checks/notices.js +58 -0
  150. package/dist/_internal/ir-checks/policy-bounds.d.ts +5 -0
  151. package/dist/_internal/ir-checks/policy-bounds.js +28 -0
  152. package/dist/_internal/ir-checks/principals.d.ts +26 -0
  153. package/dist/_internal/ir-checks/principals.js +162 -0
  154. package/dist/_internal/ir-checks/prior-cycle.d.ts +41 -0
  155. package/dist/_internal/ir-checks/prior-cycle.js +21 -0
  156. package/dist/_internal/ir-checks/read-classification.d.ts +12 -0
  157. package/dist/_internal/ir-checks/read-classification.js +67 -0
  158. package/dist/_internal/ir-checks/read-types.d.ts +2 -0
  159. package/dist/_internal/ir-checks/read-types.js +40 -0
  160. package/dist/_internal/ir-checks/resource-proofs.d.ts +4 -0
  161. package/dist/_internal/ir-checks/resource-proofs.js +98 -0
  162. package/dist/_internal/ir-checks/resources.d.ts +3 -0
  163. package/dist/_internal/ir-checks/resources.js +30 -0
  164. package/dist/_internal/ir-checks/reuse.d.ts +10 -0
  165. package/dist/_internal/ir-checks/reuse.js +99 -0
  166. package/dist/_internal/ir-checks/sealing.d.ts +14 -0
  167. package/dist/_internal/ir-checks/sealing.js +123 -0
  168. package/dist/_internal/ir-checks/sensitive-flow.d.ts +4 -0
  169. package/dist/_internal/ir-checks/sensitive-flow.js +240 -0
  170. package/dist/_internal/ir-checks/sensitivity.d.ts +19 -0
  171. package/dist/_internal/ir-checks/sensitivity.js +133 -0
  172. package/dist/_internal/ir-checks/signatures.d.ts +4 -0
  173. package/dist/_internal/ir-checks/signatures.js +22 -0
  174. package/dist/_internal/ir-checks/vaults.d.ts +10 -0
  175. package/dist/_internal/ir-checks/vaults.js +140 -0
  176. package/dist/_internal/protocol/index.d.ts +1234 -0
  177. package/dist/_internal/protocol/index.js +215 -0
  178. package/dist/_internal/reconciler/action-intents.d.ts +17 -0
  179. package/dist/_internal/reconciler/action-intents.js +161 -0
  180. package/dist/_internal/reconciler/actions.d.ts +7 -0
  181. package/dist/_internal/reconciler/actions.js +134 -0
  182. package/dist/_internal/reconciler/amendments.d.ts +12 -0
  183. package/dist/_internal/reconciler/amendments.js +52 -0
  184. package/dist/_internal/reconciler/basis.d.ts +253 -0
  185. package/dist/_internal/reconciler/basis.js +16 -0
  186. package/dist/_internal/reconciler/bundles.d.ts +22 -0
  187. package/dist/_internal/reconciler/bundles.js +110 -0
  188. package/dist/_internal/reconciler/change-detection.d.ts +5 -0
  189. package/dist/_internal/reconciler/change-detection.js +82 -0
  190. package/dist/_internal/reconciler/collection-rules.d.ts +7 -0
  191. package/dist/_internal/reconciler/collection-rules.js +46 -0
  192. package/dist/_internal/reconciler/collection-state.d.ts +11 -0
  193. package/dist/_internal/reconciler/collection-state.js +62 -0
  194. package/dist/_internal/reconciler/collection-values.d.ts +5 -0
  195. package/dist/_internal/reconciler/collection-values.js +60 -0
  196. package/dist/_internal/reconciler/collections.d.ts +35 -0
  197. package/dist/_internal/reconciler/collections.js +141 -0
  198. package/dist/_internal/reconciler/commands.d.ts +60 -0
  199. package/dist/_internal/reconciler/commands.js +468 -0
  200. package/dist/_internal/reconciler/component-operations.d.ts +48 -0
  201. package/dist/_internal/reconciler/component-operations.js +256 -0
  202. package/dist/_internal/reconciler/context.d.ts +38 -0
  203. package/dist/_internal/reconciler/context.js +44 -0
  204. package/dist/_internal/reconciler/coverage.d.ts +31 -0
  205. package/dist/_internal/reconciler/coverage.js +124 -0
  206. package/dist/_internal/reconciler/dates.d.ts +38 -0
  207. package/dist/_internal/reconciler/dates.js +121 -0
  208. package/dist/_internal/reconciler/decide.d.ts +25 -0
  209. package/dist/_internal/reconciler/decide.js +263 -0
  210. package/dist/_internal/reconciler/decision-evaluation.d.ts +9 -0
  211. package/dist/_internal/reconciler/decision-evaluation.js +67 -0
  212. package/dist/_internal/reconciler/decision-records.d.ts +14 -0
  213. package/dist/_internal/reconciler/decision-records.js +77 -0
  214. package/dist/_internal/reconciler/decision-release.d.ts +3 -0
  215. package/dist/_internal/reconciler/decision-release.js +12 -0
  216. package/dist/_internal/reconciler/dependencies.d.ts +179 -0
  217. package/dist/_internal/reconciler/dependencies.js +372 -0
  218. package/dist/_internal/reconciler/discovery.d.ts +9 -0
  219. package/dist/_internal/reconciler/discovery.js +65 -0
  220. package/dist/_internal/reconciler/document-corrections.d.ts +18 -0
  221. package/dist/_internal/reconciler/document-corrections.js +59 -0
  222. package/dist/_internal/reconciler/documents.d.ts +26 -0
  223. package/dist/_internal/reconciler/documents.js +88 -0
  224. package/dist/_internal/reconciler/effective.d.ts +6 -0
  225. package/dist/_internal/reconciler/effective.js +17 -0
  226. package/dist/_internal/reconciler/escalations.d.ts +4 -0
  227. package/dist/_internal/reconciler/escalations.js +76 -0
  228. package/dist/_internal/reconciler/evaluation.d.ts +56 -0
  229. package/dist/_internal/reconciler/evaluation.js +704 -0
  230. package/dist/_internal/reconciler/evidence-authority.d.ts +6 -0
  231. package/dist/_internal/reconciler/evidence-authority.js +70 -0
  232. package/dist/_internal/reconciler/evidence-history.d.ts +5 -0
  233. package/dist/_internal/reconciler/evidence-history.js +22 -0
  234. package/dist/_internal/reconciler/evidence-validity.d.ts +17 -0
  235. package/dist/_internal/reconciler/evidence-validity.js +135 -0
  236. package/dist/_internal/reconciler/fact-validation.d.ts +5 -0
  237. package/dist/_internal/reconciler/fact-validation.js +49 -0
  238. package/dist/_internal/reconciler/files.d.ts +9 -0
  239. package/dist/_internal/reconciler/files.js +56 -0
  240. package/dist/_internal/reconciler/graph.d.ts +40 -0
  241. package/dist/_internal/reconciler/graph.js +298 -0
  242. package/dist/_internal/reconciler/holds.d.ts +6 -0
  243. package/dist/_internal/reconciler/holds.js +18 -0
  244. package/dist/_internal/reconciler/home-definitions.d.ts +11 -0
  245. package/dist/_internal/reconciler/home-definitions.js +25 -0
  246. package/dist/_internal/reconciler/homes.d.ts +6 -0
  247. package/dist/_internal/reconciler/homes.js +32 -0
  248. package/dist/_internal/reconciler/index.d.ts +42 -0
  249. package/dist/_internal/reconciler/index.js +58 -0
  250. package/dist/_internal/reconciler/instants.d.ts +17 -0
  251. package/dist/_internal/reconciler/instants.js +56 -0
  252. package/dist/_internal/reconciler/interaction-fields.d.ts +10 -0
  253. package/dist/_internal/reconciler/interaction-fields.js +30 -0
  254. package/dist/_internal/reconciler/invariants.d.ts +8 -0
  255. package/dist/_internal/reconciler/invariants.js +34 -0
  256. package/dist/_internal/reconciler/journal.d.ts +3 -0
  257. package/dist/_internal/reconciler/journal.js +4 -0
  258. package/dist/_internal/reconciler/linking.d.ts +10 -0
  259. package/dist/_internal/reconciler/linking.js +259 -0
  260. package/dist/_internal/reconciler/memory.d.ts +32 -0
  261. package/dist/_internal/reconciler/memory.js +190 -0
  262. package/dist/_internal/reconciler/milestones.d.ts +7 -0
  263. package/dist/_internal/reconciler/milestones.js +58 -0
  264. package/dist/_internal/reconciler/missing.d.ts +18 -0
  265. package/dist/_internal/reconciler/missing.js +79 -0
  266. package/dist/_internal/reconciler/model.d.ts +350 -0
  267. package/dist/_internal/reconciler/model.js +9 -0
  268. package/dist/_internal/reconciler/notices.d.ts +14 -0
  269. package/dist/_internal/reconciler/notices.js +80 -0
  270. package/dist/_internal/reconciler/occurrences.d.ts +3 -0
  271. package/dist/_internal/reconciler/occurrences.js +30 -0
  272. package/dist/_internal/reconciler/outputs.d.ts +12 -0
  273. package/dist/_internal/reconciler/outputs.js +132 -0
  274. package/dist/_internal/reconciler/parameters.d.ts +4 -0
  275. package/dist/_internal/reconciler/parameters.js +27 -0
  276. package/dist/_internal/reconciler/policies.d.ts +22 -0
  277. package/dist/_internal/reconciler/policies.js +94 -0
  278. package/dist/_internal/reconciler/policy-edits.d.ts +11 -0
  279. package/dist/_internal/reconciler/policy-edits.js +42 -0
  280. package/dist/_internal/reconciler/policy-linking.d.ts +4 -0
  281. package/dist/_internal/reconciler/policy-linking.js +104 -0
  282. package/dist/_internal/reconciler/principal-types.d.ts +2 -0
  283. package/dist/_internal/reconciler/principal-types.js +38 -0
  284. package/dist/_internal/reconciler/prior-decisions.d.ts +3 -0
  285. package/dist/_internal/reconciler/prior-decisions.js +34 -0
  286. package/dist/_internal/reconciler/projections.d.ts +4 -0
  287. package/dist/_internal/reconciler/projections.js +85 -0
  288. package/dist/_internal/reconciler/proofs.d.ts +9 -0
  289. package/dist/_internal/reconciler/proofs.js +24 -0
  290. package/dist/_internal/reconciler/properties.d.ts +25 -0
  291. package/dist/_internal/reconciler/properties.js +67 -0
  292. package/dist/_internal/reconciler/property-eval.d.ts +5 -0
  293. package/dist/_internal/reconciler/property-eval.js +101 -0
  294. package/dist/_internal/reconciler/property-generator.d.ts +9 -0
  295. package/dist/_internal/reconciler/property-generator.js +288 -0
  296. package/dist/_internal/reconciler/property-shrink.d.ts +14 -0
  297. package/dist/_internal/reconciler/property-shrink.js +183 -0
  298. package/dist/_internal/reconciler/provenance.d.ts +8 -0
  299. package/dist/_internal/reconciler/provenance.js +61 -0
  300. package/dist/_internal/reconciler/reconcile.d.ts +32 -0
  301. package/dist/_internal/reconciler/reconcile.js +164 -0
  302. package/dist/_internal/reconciler/recurrence.d.ts +9 -0
  303. package/dist/_internal/reconciler/recurrence.js +44 -0
  304. package/dist/_internal/reconciler/requirements.d.ts +5 -0
  305. package/dist/_internal/reconciler/requirements.js +331 -0
  306. package/dist/_internal/reconciler/resource-generation.d.ts +9 -0
  307. package/dist/_internal/reconciler/resource-generation.js +17 -0
  308. package/dist/_internal/reconciler/resource-scenarios.d.ts +26 -0
  309. package/dist/_internal/reconciler/resource-scenarios.js +78 -0
  310. package/dist/_internal/reconciler/resources.d.ts +24 -0
  311. package/dist/_internal/reconciler/resources.js +178 -0
  312. package/dist/_internal/reconciler/result-digest.d.ts +13 -0
  313. package/dist/_internal/reconciler/result-digest.js +66 -0
  314. package/dist/_internal/reconciler/reuse.d.ts +16 -0
  315. package/dist/_internal/reconciler/reuse.js +119 -0
  316. package/dist/_internal/reconciler/scenarios.d.ts +32 -0
  317. package/dist/_internal/reconciler/scenarios.js +442 -0
  318. package/dist/_internal/reconciler/scheduling.d.ts +9 -0
  319. package/dist/_internal/reconciler/scheduling.js +203 -0
  320. package/dist/_internal/reconciler/sha256.d.ts +1 -0
  321. package/dist/_internal/reconciler/sha256.js +1 -0
  322. package/dist/_internal/reconciler/signatures.d.ts +13 -0
  323. package/dist/_internal/reconciler/signatures.js +37 -0
  324. package/dist/_internal/reconciler/temporal.d.ts +10 -0
  325. package/dist/_internal/reconciler/temporal.js +46 -0
  326. package/dist/_internal/reconciler/upgrades.d.ts +6 -0
  327. package/dist/_internal/reconciler/upgrades.js +65 -0
  328. package/dist/_internal/reconciler/wire.d.ts +2 -0
  329. package/dist/_internal/reconciler/wire.js +5 -0
  330. package/dist/_internal/reconciler/work.d.ts +32 -0
  331. package/dist/_internal/reconciler/work.js +101 -0
  332. package/dist/_internal/world-ir/schema.generated.d.ts +180 -0
  333. package/dist/_internal/world-ir/schema.generated.js +1127 -0
  334. package/dist/_internal/world-ir/types.generated.d.ts +1011 -0
  335. package/dist/_internal/world-ir/types.generated.js +1 -0
  336. package/dist/authoring.d.ts +9 -0
  337. package/dist/authoring.js +10 -0
  338. package/dist/catalogue.d.ts +20 -0
  339. package/dist/catalogue.js +531 -0
  340. package/dist/cli.d.ts +2 -0
  341. package/dist/cli.js +553 -0
  342. package/dist/codegen.d.ts +6 -0
  343. package/dist/codegen.js +89 -0
  344. package/dist/coverage.d.ts +60 -0
  345. package/dist/coverage.js +128 -0
  346. package/dist/deploy.d.ts +21 -0
  347. package/dist/deploy.js +72 -0
  348. package/dist/diagnostics.d.ts +9 -0
  349. package/dist/diagnostics.js +37 -0
  350. package/dist/diff.d.ts +17 -0
  351. package/dist/diff.js +19 -0
  352. package/dist/durable-object.d.ts +14 -0
  353. package/dist/durable-object.js +30 -0
  354. package/dist/explain.d.ts +113 -0
  355. package/dist/explain.js +225 -0
  356. package/dist/fixes.d.ts +4 -0
  357. package/dist/fixes.js +70 -0
  358. package/dist/fmt.d.ts +12 -0
  359. package/dist/fmt.js +39 -0
  360. package/dist/handle/open.d.ts +18 -0
  361. package/dist/handle/open.js +28 -0
  362. package/dist/handle/protocol.d.ts +12 -0
  363. package/dist/handle/protocol.js +96 -0
  364. package/dist/handle/store.d.ts +31 -0
  365. package/dist/handle/store.js +11 -0
  366. package/dist/handle/types.d.ts +37 -0
  367. package/dist/handle/types.js +1 -0
  368. package/dist/handle/world.d.ts +190 -0
  369. package/dist/handle/world.js +533 -0
  370. package/dist/http.d.ts +3 -0
  371. package/dist/http.js +72 -0
  372. package/dist/impact.d.ts +21 -0
  373. package/dist/impact.js +57 -0
  374. package/dist/index.d.ts +30 -0
  375. package/dist/index.js +43 -0
  376. package/dist/init.d.ts +13 -0
  377. package/dist/init.js +99 -0
  378. package/dist/ir-schema.json +4213 -0
  379. package/dist/lints.d.ts +8 -0
  380. package/dist/lints.js +154 -0
  381. package/dist/lsp.d.ts +14 -0
  382. package/dist/lsp.js +380 -0
  383. package/dist/manual/catalog.d.ts +12 -0
  384. package/dist/manual/catalog.js +23 -0
  385. package/dist/manual/examples.d.ts +15 -0
  386. package/dist/manual/examples.js +39 -0
  387. package/dist/manual/projections.d.ts +77 -0
  388. package/dist/manual/projections.js +344 -0
  389. package/dist/manual/prose.d.ts +19 -0
  390. package/dist/manual/prose.js +215 -0
  391. package/dist/manual/render.d.ts +76 -0
  392. package/dist/manual/render.js +250 -0
  393. package/dist/manual/text.d.ts +7 -0
  394. package/dist/manual/text.js +15 -0
  395. package/dist/mcp.d.ts +32 -0
  396. package/dist/mcp.js +269 -0
  397. package/dist/mutate.d.ts +36 -0
  398. package/dist/mutate.js +123 -0
  399. package/dist/project.d.ts +26 -0
  400. package/dist/project.js +80 -0
  401. package/dist/refine.d.ts +18 -0
  402. package/dist/refine.js +197 -0
  403. package/dist/release/diff.d.ts +45 -0
  404. package/dist/release/diff.js +103 -0
  405. package/dist/release/impact.d.ts +83 -0
  406. package/dist/release/impact.js +214 -0
  407. package/dist/release/nodes.d.ts +20 -0
  408. package/dist/release/nodes.js +118 -0
  409. package/dist/render.d.ts +19 -0
  410. package/dist/render.js +43 -0
  411. package/dist/serve.d.ts +18 -0
  412. package/dist/serve.js +140 -0
  413. package/dist/snapshot.d.ts +19 -0
  414. package/dist/snapshot.js +45 -0
  415. package/dist/sqlite.d.ts +16 -0
  416. package/dist/sqlite.js +151 -0
  417. package/dist/test.d.ts +54 -0
  418. package/dist/test.js +131 -0
  419. package/dist/world.d.ts +7 -0
  420. package/dist/world.js +5 -0
  421. package/docs/authoring/vendor-risk/example.forma +11 -0
  422. package/docs/authoring/vendor-risk/library/vendor.forma +76 -0
  423. package/docs/authoring/vendor-risk/scenarios/reviews.forma +107 -0
  424. package/docs/protocol.md +195 -0
  425. package/docs/reference.md +258 -0
  426. package/package.json +81 -3
@@ -0,0 +1,60 @@
1
+ import { type IR, type RequirementCoverage } from "./_internal/reconciler/index.js";
2
+ import { type TestOptions, type TestReport } from "./test.js";
3
+ import { type CliDiagnostic } from "./project.js";
4
+ import { type MutationReport } from "./mutate.js";
5
+ export interface CoverageReference {
6
+ readonly kind: "scenario" | "property";
7
+ readonly name: string;
8
+ }
9
+ export interface CoverageDefinition {
10
+ readonly key: string;
11
+ readonly component: string;
12
+ readonly name: string;
13
+ readonly kind: "requirement" | "invariant" | "retention";
14
+ readonly at: IR.Span;
15
+ readonly cites: readonly IR.Citation[];
16
+ readonly references: readonly CoverageReference[];
17
+ }
18
+ export interface CoverageReport {
19
+ readonly format: "worldvm/coverage@2";
20
+ readonly command: "coverage";
21
+ readonly mode: "branches";
22
+ readonly branchCoverage: {
23
+ readonly seed: number;
24
+ readonly cases: number;
25
+ readonly requirements: readonly RequirementCoverage[];
26
+ readonly clauses: readonly {
27
+ readonly source: string;
28
+ readonly clause: string;
29
+ readonly requirements: readonly RequirementCoverage[];
30
+ }[];
31
+ readonly tests: TestReport;
32
+ } | null;
33
+ readonly directory: string;
34
+ readonly ok: boolean;
35
+ readonly diagnostics: readonly CliDiagnostic[];
36
+ readonly definitions: readonly CoverageDefinition[];
37
+ readonly sources: readonly {
38
+ readonly name: string;
39
+ readonly kind: string;
40
+ readonly url: string;
41
+ readonly asOf: string;
42
+ readonly clauses: readonly {
43
+ readonly clause: string;
44
+ readonly definitions: readonly string[];
45
+ readonly references: readonly CoverageReference[];
46
+ }[];
47
+ }[];
48
+ /** Present with { mutate: true }: semantic mutants and whether any test caught them. */
49
+ readonly mutation?: MutationReport;
50
+ readonly totals: {
51
+ readonly requirements: number;
52
+ readonly requirementsReferenced: number;
53
+ readonly clauses: number;
54
+ readonly clausesReferenced: number;
55
+ };
56
+ }
57
+ /** Definition references deliberately over-approximate possible execution; branches are separate. */
58
+ export declare const coverageDirectory: (directory: string, options?: Pick<TestOptions, "seed" | "cases"> & {
59
+ readonly mutate?: boolean;
60
+ }) => Promise<CoverageReport>;
@@ -0,0 +1,128 @@
1
+ import { definitionReferences } from "./_internal/forma/world/index.js";
2
+ import { createCoverageCollector, validatePropertyOptions, } from "./_internal/reconciler/index.js";
3
+ import { runTests } from "./test.js";
4
+ import { loadProject } from "./project.js";
5
+ import { mutationTest } from "./mutate.js";
6
+ const references = (set) => [...set].sort().map((key) => {
7
+ const split = key.indexOf("\0");
8
+ return { kind: key.slice(0, split), name: key.slice(split + 1) };
9
+ });
10
+ /** Definition references deliberately over-approximate possible execution; branches are separate. */
11
+ export const coverageDirectory = async (directory, options = {}) => {
12
+ const budgets = { seed: options.seed ?? 0, cases: options.cases ?? 100 };
13
+ validatePropertyOptions(budgets);
14
+ const project = await loadProject(directory), ir = project.ir;
15
+ const empty = {
16
+ format: "worldvm/coverage@2",
17
+ command: "coverage",
18
+ mode: "branches",
19
+ branchCoverage: null,
20
+ directory: project.directory,
21
+ ok: false,
22
+ diagnostics: project.diagnostics,
23
+ definitions: [],
24
+ sources: [],
25
+ totals: { requirements: 0, requirementsReferenced: 0, clauses: 0, clausesReferenced: 0 },
26
+ };
27
+ if (!ir || project.diagnostics.some((d) => d.severity === "error"))
28
+ return empty;
29
+ const rows = new Map();
30
+ for (const c of ir.components) {
31
+ for (const r of c.requirements)
32
+ rows.set(`${c.name}/${r.name}`, {
33
+ key: `${c.name}/${r.name}`,
34
+ component: c.name,
35
+ name: r.name,
36
+ kind: "requirement",
37
+ at: r.at,
38
+ cites: r.cites ?? [],
39
+ refs: new Set(),
40
+ });
41
+ for (const r of c.invariants)
42
+ rows.set(`${c.name}/invariant:${r.name}`, {
43
+ key: `${c.name}/invariant:${r.name}`,
44
+ component: c.name,
45
+ name: r.name,
46
+ kind: "invariant",
47
+ at: r.at,
48
+ cites: r.cites ?? [],
49
+ refs: new Set(),
50
+ });
51
+ if (c.retention)
52
+ rows.set(`${c.name}/retention`, {
53
+ key: `${c.name}/retention`,
54
+ component: c.name,
55
+ name: "retention",
56
+ kind: "retention",
57
+ at: c.retention.at,
58
+ cites: c.retention.cites ?? [],
59
+ refs: new Set(),
60
+ });
61
+ }
62
+ for (const [key, refs] of definitionReferences(ir))
63
+ for (const ref of refs)
64
+ rows.get(key)?.refs.add(`${ref.kind}\0${ref.name}`);
65
+ const definitions = [...rows.values()]
66
+ .sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0))
67
+ .map(({ refs, ...row }) => ({ ...row, references: references(refs) }));
68
+ const sources = (ir.references ?? []).map((source) => {
69
+ const clauses = new Map();
70
+ for (const row of rows.values())
71
+ for (const cite of row.cites)
72
+ if (cite.source === source.name) {
73
+ let clause = clauses.get(cite.clause);
74
+ if (!clause)
75
+ clauses.set(cite.clause, (clause = { definitions: new Set(), refs: new Set() }));
76
+ clause.definitions.add(row.key);
77
+ row.refs.forEach((r) => clause.refs.add(r));
78
+ }
79
+ return {
80
+ name: source.name,
81
+ kind: source.kind,
82
+ url: source.url,
83
+ asOf: source.asOf,
84
+ clauses: [...clauses]
85
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
86
+ .map(([clause, value]) => ({
87
+ clause,
88
+ definitions: [...value.definitions].sort(),
89
+ references: references(value.refs),
90
+ })),
91
+ };
92
+ });
93
+ const requirements = definitions.filter((d) => d.kind === "requirement");
94
+ const collector = createCoverageCollector(ir);
95
+ const tests = runTests(project, budgets, (recon, ref) => collector.observe(recon, ref));
96
+ const measured = collector.report(), byKey = new Map(measured.map((row) => [row.key, row]));
97
+ const diagnostics = [
98
+ ...tests.diagnostics,
99
+ ...tests.scenarios.flatMap((s) => s.failures),
100
+ ...tests.properties.flatMap((p) => (p.failure ? [p.failure] : [])),
101
+ ];
102
+ // Mutants only mean something against a passing baseline.
103
+ const mutation = options.mutate && tests.ok ? { mutation: mutationTest(project, budgets) } : {};
104
+ return {
105
+ ...empty,
106
+ ...mutation,
107
+ ok: tests.ok,
108
+ diagnostics,
109
+ branchCoverage: {
110
+ ...budgets,
111
+ requirements: measured,
112
+ clauses: sources.flatMap((source) => source.clauses.map((clause) => ({
113
+ source: source.name,
114
+ clause: clause.clause,
115
+ requirements: clause.definitions.flatMap((key) => byKey.has(key) ? [byKey.get(key)] : []),
116
+ }))),
117
+ tests,
118
+ },
119
+ definitions,
120
+ sources,
121
+ totals: {
122
+ requirements: requirements.length,
123
+ requirementsReferenced: requirements.filter((d) => d.references.length).length,
124
+ clauses: sources.reduce((n, s) => n + s.clauses.length, 0),
125
+ clausesReferenced: sources.reduce((n, s) => n + s.clauses.filter((c) => c.references.length).length, 0),
126
+ },
127
+ };
128
+ };
@@ -0,0 +1,21 @@
1
+ import { type CliDiagnostic } from "./project.js";
2
+ import { type Impact } from "./release/impact.js";
3
+ export interface DeployReport {
4
+ readonly format: "worldvm/deploy-report@1";
5
+ readonly ok: boolean;
6
+ readonly directory: string;
7
+ readonly old: string | null;
8
+ readonly new: string | null;
9
+ readonly at: string;
10
+ readonly dryRun: boolean;
11
+ readonly diagnostics: readonly CliDiagnostic[];
12
+ readonly impact: Impact | null;
13
+ readonly subjects: readonly string[];
14
+ }
15
+ /** Check, preview the committed population, then atomically retain and activate a release. */
16
+ export declare const deployDirectory: (source: string, options: {
17
+ readonly db: string;
18
+ readonly account?: string;
19
+ readonly at?: string;
20
+ readonly dryRun?: boolean;
21
+ }) => Promise<DeployReport>;
package/dist/deploy.js ADDED
@@ -0,0 +1,72 @@
1
+ import { existsSync } from "node:fs";
2
+ import { emptyWorld } from "./_internal/reconciler/index.js";
3
+ import { loadProject } from "./project.js";
4
+ import { host } from "./handle/world.js";
5
+ import { sqlite } from "./sqlite.js";
6
+ import { snapshotDatabase } from "./snapshot.js";
7
+ import { previewImpact } from "./release/impact.js";
8
+ /** Check, preview the committed population, then atomically retain and activate a release. */
9
+ export const deployDirectory = async (source, options) => {
10
+ const project = await loadProject(source);
11
+ const at = options.at ?? new Date().toISOString();
12
+ const base = {
13
+ format: "worldvm/deploy-report@1",
14
+ directory: project.directory,
15
+ at,
16
+ dryRun: options.dryRun ?? false,
17
+ diagnostics: project.diagnostics,
18
+ };
19
+ if (!project.ir || project.diagnostics.some((d) => d.severity === "error"))
20
+ return { ...base, ok: false, old: null, new: null, impact: null, subjects: [] };
21
+ if (!Number.isFinite(Date.parse(at)))
22
+ throw new Error("--at must be an ISO instant.");
23
+ const checked = await host({
24
+ ir: project.ir,
25
+ ...(options.account ? { account: options.account } : {}),
26
+ });
27
+ const account = checked.account;
28
+ const release = checked.release;
29
+ await checked.close();
30
+ // Dry runs never create a file, schema, journal or write transaction.
31
+ const store = options.dryRun && !existsSync(options.db)
32
+ ? null
33
+ : sqlite(options.db, { readOnly: options.dryRun ?? false });
34
+ try {
35
+ const state = store ? await store.load() : null;
36
+ const previous = store?.deployed() ?? null;
37
+ if (previous && previous.account !== account)
38
+ throw new Error(`Database belongs to account ${previous.account}; cannot deploy ${account}.`);
39
+ if (state && !previous)
40
+ throw new Error("Database has records without a deployed release. Deploy into a new database.");
41
+ const snapshot = state ? await snapshotDatabase(options.db, account) : null;
42
+ const impact = previous && snapshot ? previewImpact(previous.ir, project.ir, { ...snapshot, at }) : null;
43
+ if (impact?.unexpected.length)
44
+ throw new Error("Impact contains changes outside the dependency selection; deployment refused.");
45
+ const subjects = [
46
+ ...new Set([
47
+ ...(impact?.occurrences.changes ?? []).flatMap((c) => [
48
+ ...(c.before?.subjects ?? []),
49
+ ...(c.after?.subjects ?? []),
50
+ ]),
51
+ ...(impact?.work.changes ?? []).flatMap((c) => [
52
+ ...(c.before?.subjects ?? []),
53
+ ...(c.after?.subjects ?? []),
54
+ ]),
55
+ ]),
56
+ ].sort();
57
+ if (!options.dryRun)
58
+ store.deploy({ release, account, at: new Date().toISOString(), ir: project.ir }, {
59
+ ...(state ?? { revision: 0, records: emptyWorld, receipts: {}, proposals: {} }),
60
+ release,
61
+ });
62
+ return { ...base, ok: true, old: previous?.release ?? null, new: release, impact, subjects };
63
+ }
64
+ catch (cause) {
65
+ if (/locked|busy/i.test(String(cause)))
66
+ throw new Error("Database is locked. Stop worldvm serve before deploying.");
67
+ throw cause;
68
+ }
69
+ finally {
70
+ await store?.close();
71
+ }
72
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Browser-safe authoring diagnostics: everything the CLI adds on top of the compiler's
3
+ * diagnostics (contextual help, machine fixes, catalogue defaults and lints). The CLI and
4
+ * the browser IDE both call this, so their reports stay identical.
5
+ */
6
+ import type { CompileResult, SourceFile, WorldIR } from "./_internal/forma/world/index.js";
7
+ import type { CliDiagnostic } from "./project.js";
8
+ /** Compiler diagnostics with CLI help and fixes, followed by the authoring lints. */
9
+ export declare const authoringDiagnostics: (compiled: CompileResult, files: readonly SourceFile[], ir: WorldIR | null) => CliDiagnostic[];
@@ -0,0 +1,37 @@
1
+ import { GENERIC_HELP, catalogueEntry } from "./catalogue.js";
2
+ import { authoringLints } from "./lints.js";
3
+ import { refine } from "./refine.js";
4
+ import { authoringFix } from "./fixes.js";
5
+ /** Padding an otherwise valid calendar date changes representation, never its meaning. */
6
+ const dateFix = (d, files) => {
7
+ if (!d.at || !["E_SOURCE_DATE", "E_SCENARIO_DATE", "E_PROPERTY_DATE"].includes(d.code))
8
+ return null;
9
+ const text = files.find((f) => f.id === d.at.src)?.text.slice(d.at.from, d.at.to);
10
+ if (!text)
11
+ return null;
12
+ const match = /^"(\d{4})-(\d{1,2})-(\d{1,2})"$/.exec(text);
13
+ if (!match)
14
+ return null;
15
+ const padded = `${match[1]}-${match[2].padStart(2, "0")}-${match[3].padStart(2, "0")}`;
16
+ const replacement = JSON.stringify(padded), time = Date.parse(`${padded}T00:00:00Z`);
17
+ if (replacement === text ||
18
+ !Number.isFinite(time) ||
19
+ new Date(time).toISOString().slice(0, 10) !== padded)
20
+ return null;
21
+ return { src: d.at.src, from: d.at.from, to: d.at.to, text: replacement, expected: text };
22
+ };
23
+ /** Compiler diagnostics with CLI help and fixes, followed by the authoring lints. */
24
+ export const authoringDiagnostics = (compiled, files, ir) => {
25
+ const diagnostics = compiled.diagnostics.map((d) => {
26
+ const at = d.at ?? null, refined = refine({ code: d.code, message: d.message, at }, files, ir);
27
+ return {
28
+ ...d,
29
+ at,
30
+ help: refined?.help ?? d.help ?? catalogueEntry(d.code)?.fix ?? GENERIC_HELP,
31
+ fix: d.fix ?? refined?.fix ?? dateFix(d, files) ?? authoringFix(d, files),
32
+ };
33
+ });
34
+ if (ir)
35
+ diagnostics.push(...authoringLints(ir, files));
36
+ return diagnostics;
37
+ };
package/dist/diff.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { type CliDiagnostic } from "./project.js";
2
+ import { type WorldDiff } from "./release/diff.js";
3
+ export interface SidedDiagnostic extends CliDiagnostic {
4
+ /** Which release the diagnostic belongs to; spans are relative to that directory. */
5
+ readonly side: "old" | "new";
6
+ }
7
+ export interface DiffReport {
8
+ readonly format: "worldvm/diff-report@1";
9
+ readonly command: "diff";
10
+ readonly old: string;
11
+ readonly new: string;
12
+ readonly ok: boolean;
13
+ readonly diagnostics: readonly SidedDiagnostic[];
14
+ readonly diff: WorldDiff | null;
15
+ }
16
+ /** Compiles both releases and compares declarations; either side failing to compile fails the diff. */
17
+ export declare const diffDirectories: (before: string, after: string) => Promise<DiffReport>;
package/dist/diff.js ADDED
@@ -0,0 +1,19 @@
1
+ import { loadProject } from "./project.js";
2
+ import { diffWorlds } from "./release/diff.js";
3
+ /** Compiles both releases and compares declarations; either side failing to compile fails the diff. */
4
+ export const diffDirectories = async (before, after) => {
5
+ const [a, b] = await Promise.all([loadProject(before), loadProject(after)]);
6
+ const errors = [
7
+ ...a.diagnostics.map((d) => ({ ...d, side: "old" })),
8
+ ...b.diagnostics.map((d) => ({ ...d, side: "new" })),
9
+ ].filter((d) => d.severity === "error");
10
+ const base = {
11
+ format: "worldvm/diff-report@1",
12
+ command: "diff",
13
+ old: a.directory,
14
+ new: b.directory,
15
+ };
16
+ if (errors.length || !a.ir || !b.ir)
17
+ return { ...base, ok: false, diagnostics: errors, diff: null };
18
+ return { ...base, ok: true, diagnostics: [], diff: diffWorlds(a.ir, b.ir) };
19
+ };
@@ -0,0 +1,14 @@
1
+ import type { Store } from "./world.js";
2
+ /** The synchronous SQLite subset of Cloudflare DurableObjectStorage. */
3
+ export interface DurableObjectSqliteStorage {
4
+ readonly sql: {
5
+ readonly exec: (query: string, ...bindings: string[]) => Iterable<Record<string, unknown>>;
6
+ };
7
+ readonly transactionSync: <A>(callback: () => A) => A;
8
+ }
9
+ /**
10
+ * One world account per SQLite-backed Durable Object. The platform owns the database
11
+ * lifetime. Serialize handle operations with blockConcurrencyWhile in the host; this
12
+ * adapter supplies atomic persistence, not coordination between concurrent handles.
13
+ */
14
+ export declare const durableObject: (storage: DurableObjectSqliteStorage) => Store;
@@ -0,0 +1,30 @@
1
+ const format = "worldvm/durable-object-store@1";
2
+ /**
3
+ * One world account per SQLite-backed Durable Object. The platform owns the database
4
+ * lifetime. Serialize handle operations with blockConcurrencyWhile in the host; this
5
+ * adapter supplies atomic persistence, not coordination between concurrent handles.
6
+ */
7
+ export const durableObject = (storage) => {
8
+ storage.sql.exec(`CREATE TABLE IF NOT EXISTS worldvm_handle_state (
9
+ id INTEGER PRIMARY KEY CHECK (id = 1), body TEXT NOT NULL
10
+ )`);
11
+ return {
12
+ load: () => {
13
+ const row = [...storage.sql.exec("SELECT body FROM worldvm_handle_state WHERE id = 1")][0];
14
+ if (!row)
15
+ return null;
16
+ const saved = JSON.parse(row["body"]);
17
+ if (saved.format !== format)
18
+ throw new Error("Unsupported WorldVM Durable Object store format.");
19
+ return saved.state;
20
+ },
21
+ commit: (state) => {
22
+ const body = JSON.stringify({ format, state });
23
+ storage.transactionSync(() => {
24
+ storage.sql.exec(`INSERT INTO worldvm_handle_state (id, body) VALUES (1, ?)
25
+ ON CONFLICT(id) DO UPDATE SET body = excluded.body`, body);
26
+ });
27
+ },
28
+ close: () => { },
29
+ };
30
+ };
@@ -0,0 +1,113 @@
1
+ import { type IR, type WorldReconciliation } from "./_internal/reconciler/index.js";
2
+ import { type CliDiagnostic, type Project } from "./project.js";
3
+ export interface ExplainOptions {
4
+ /** Authored scenario to replay; its steps are the observable instants. */
5
+ readonly scenario?: string;
6
+ /** Recorded in-memory world snapshot (`worldvm/world@1`) holding a live subject. */
7
+ readonly world?: string;
8
+ /** Restricts the explanation to occurrences attached to (or homed at) this subject. */
9
+ readonly subject?: string;
10
+ /** Scenario: latest authored step at or before this instant. Snapshot: required evaluation instant. */
11
+ readonly at?: string;
12
+ }
13
+ export interface ExplainedStep {
14
+ readonly at: IR.Span;
15
+ readonly value: unknown;
16
+ readonly branch: "true" | "false" | "Unknown" | null;
17
+ readonly note: string | null;
18
+ }
19
+ export interface ExplainedRequirement {
20
+ readonly name: string;
21
+ readonly label: string;
22
+ readonly occurrence: string;
23
+ readonly status: string;
24
+ readonly due: string | null;
25
+ readonly dueUnknown: string | null;
26
+ readonly dueSteps: readonly ExplainedStep[];
27
+ readonly remindAt: string | null;
28
+ readonly reasons: readonly {
29
+ readonly label: string;
30
+ readonly outcome: string;
31
+ readonly detail: string;
32
+ readonly at: IR.Span | null;
33
+ }[];
34
+ readonly evidence: {
35
+ readonly values: Readonly<Record<string, string>>;
36
+ readonly id: string;
37
+ readonly type: string;
38
+ readonly status: string;
39
+ readonly by: string;
40
+ readonly at: string;
41
+ } | null;
42
+ readonly via: string;
43
+ readonly awaits: string | null;
44
+ readonly blocked: string | null;
45
+ /** Reproducible decision digest over release, occurrence, status, reasons, evidence and due. */
46
+ readonly proof: string;
47
+ /** The rule as authored: located definition, manual prose and cited clauses. */
48
+ readonly rule: {
49
+ readonly at: IR.Span;
50
+ readonly prose: readonly {
51
+ readonly label: string;
52
+ readonly text: string;
53
+ }[];
54
+ readonly cites: readonly {
55
+ readonly source: string;
56
+ readonly clause: string;
57
+ readonly title: string;
58
+ readonly at: IR.Span;
59
+ }[];
60
+ };
61
+ }
62
+ export interface ExplainedWork {
63
+ readonly key: string;
64
+ readonly state: string;
65
+ readonly assignee: {
66
+ readonly id: string | null;
67
+ readonly kind: string;
68
+ };
69
+ readonly members: readonly {
70
+ readonly instance: string;
71
+ readonly action: string;
72
+ readonly occurrences: readonly string[];
73
+ }[];
74
+ readonly reason: string | null;
75
+ }
76
+ export interface ExplainedInstance {
77
+ readonly instance: string;
78
+ readonly component: string;
79
+ readonly account: string;
80
+ readonly attached: readonly string[];
81
+ readonly requirements: readonly ExplainedRequirement[];
82
+ readonly wakeAt: string | null;
83
+ readonly wakeReason: string;
84
+ }
85
+ export interface ExplainReport {
86
+ readonly format: "worldvm/explain@1";
87
+ readonly command: "explain";
88
+ readonly directory: string;
89
+ readonly ok: boolean;
90
+ readonly source: {
91
+ readonly kind: "scenario";
92
+ readonly name: string;
93
+ readonly step: number;
94
+ } | {
95
+ readonly kind: "snapshot";
96
+ readonly path: string;
97
+ readonly accounts: readonly string[];
98
+ } | null;
99
+ readonly subject: string | null;
100
+ readonly requestedAt: string | null;
101
+ /** The instant actually evaluated. */
102
+ readonly now: string | null;
103
+ readonly releases: readonly string[];
104
+ readonly instances: readonly ExplainedInstance[];
105
+ readonly work: readonly ExplainedWork[];
106
+ readonly diagnostics: readonly CliDiagnostic[];
107
+ }
108
+ /** Shapes one reconciliation into located answers: why each status, due date and work item. */
109
+ export declare const explainReconciliation: (ir: IR.WorldIR, files: Project["files"], recon: WorldReconciliation, subject: string | null) => {
110
+ readonly instances: readonly ExplainedInstance[];
111
+ readonly work: readonly ExplainedWork[];
112
+ };
113
+ export declare const explainDirectory: (directory: string, options: ExplainOptions) => Promise<ExplainReport>;