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,25 @@
1
+ import type * as IR from "../world-ir/types.generated.js";
2
+ import { type ScenarioResult, type ScenarioRunner } from "./scenarios.js";
3
+ import { type PropertyOptions } from "./property-generator.js";
4
+ export interface PropertyFailure {
5
+ readonly seed: number;
6
+ readonly index: number;
7
+ readonly binding: string;
8
+ readonly actual: "false" | "Unknown";
9
+ readonly at: IR.Span;
10
+ readonly scenario: IR.Scenario;
11
+ }
12
+ export interface PropertyResult {
13
+ readonly name: string;
14
+ readonly passed: boolean;
15
+ readonly seed: number;
16
+ readonly cases: number;
17
+ readonly checks: number;
18
+ readonly antecedents: readonly {
19
+ readonly at: IR.Span;
20
+ readonly cases: number;
21
+ }[];
22
+ readonly failure?: PropertyFailure;
23
+ }
24
+ export declare const checkProperty: (ir: IR.WorldIR, property: IR.Property, options: PropertyOptions, observe?: (result: ScenarioResult, index: number) => void, run?: ScenarioRunner) => PropertyResult;
25
+ export declare const checkProperties: (ir: IR.WorldIR, options: PropertyOptions) => readonly PropertyResult[];
@@ -0,0 +1,67 @@
1
+ import { Unknown } from "./reconcile.js";
2
+ import { createScenarioRunner } from "./scenarios.js";
3
+ import { evaluateProperty } from "./property-eval.js";
4
+ import { createPropertyCaseGenerator, validatePropertyOptions, } from "./property-generator.js";
5
+ export const checkProperty = (ir, property, options, observe, run = createScenarioRunner(ir)) => {
6
+ validatePropertyOptions(options);
7
+ const generate = createPropertyCaseGenerator(ir, property, run);
8
+ const antecedents = new Map();
9
+ const visit = (e) => {
10
+ if (e.k !== "call")
11
+ return;
12
+ if (e.op === "implies")
13
+ antecedents.set(e, { at: e.at, cases: 0 });
14
+ e.args.forEach(visit);
15
+ };
16
+ visit(property.predicate);
17
+ let checks = 0;
18
+ for (let index = 0; index < options.cases; index++) {
19
+ const matched = new Set();
20
+ const scenario = generate(options.seed, index), observed = run(scenario);
21
+ if (!observed.passed)
22
+ throw new Error(`Invalid generated history: ${JSON.stringify(observed.failures)}`);
23
+ observe?.(observed, index);
24
+ const subjects = scenario.given.filter((e) => e.entity === property.binding.entity);
25
+ if (!subjects.length)
26
+ throw new Error("A generated case must bind at least one quantified entity.");
27
+ for (const subject of subjects) {
28
+ checks++;
29
+ const actual = evaluateProperty(property, observed.world, observed.steps[0].reconciliation, subject.name, (expr, truth) => {
30
+ if (truth && !matched.has(expr)) {
31
+ antecedents.get(expr).cases++;
32
+ matched.add(expr);
33
+ }
34
+ });
35
+ if (actual !== true)
36
+ return {
37
+ name: property.name,
38
+ passed: false,
39
+ seed: options.seed,
40
+ cases: index + 1,
41
+ checks,
42
+ antecedents: [...antecedents.values()],
43
+ failure: {
44
+ seed: options.seed,
45
+ index,
46
+ binding: subject.name,
47
+ actual: actual instanceof Unknown ? "Unknown" : "false",
48
+ at: property.predicate.at,
49
+ scenario,
50
+ },
51
+ };
52
+ }
53
+ }
54
+ return {
55
+ name: property.name,
56
+ passed: true,
57
+ seed: options.seed,
58
+ cases: options.cases,
59
+ checks,
60
+ antecedents: [...antecedents.values()],
61
+ };
62
+ };
63
+ export const checkProperties = (ir, options) => {
64
+ validatePropertyOptions(options);
65
+ const run = createScenarioRunner(ir);
66
+ return (ir.properties ?? []).map((property) => checkProperty(ir, property, options, undefined, run));
67
+ };
@@ -0,0 +1,5 @@
1
+ import type * as IR from "../world-ir/types.generated.js";
2
+ import { type World } from "./memory.js";
3
+ import { type Value, type WorldReconciliation } from "./reconcile.js";
4
+ /** Kleene predicates share the kernel's distinction between missing values and status enums. */
5
+ export declare const evaluateProperty: (property: IR.Property, world: World, recon: WorldReconciliation, subject: string, antecedent?: (expression: IR.PropertyExpr, trueAntecedent: boolean) => void) => Value;
@@ -0,0 +1,101 @@
1
+ import { basis } from "./memory.js";
2
+ import { findOccurrence } from "./occurrences.js";
3
+ import { Unknown } from "./reconcile.js";
4
+ /** Kleene predicates share the kernel's distinction between missing values and status enums. */
5
+ export const evaluateProperty = (property, world, recon, subject, antecedent) => {
6
+ if (recon.now !== property.date)
7
+ throw new Error("Property date and reconciliation basis differ.");
8
+ const b = basis(world, property.date);
9
+ const unknown = () => new Unknown("Property operand is unknown");
10
+ const truth = (v) => (typeof v === "boolean" ? v : unknown());
11
+ const all = (args) => args.includes(false) ? false : args.every((v) => v === true) ? true : unknown();
12
+ const any = (args) => args.includes(true) ? true : args.every((v) => v === false) ? false : unknown();
13
+ const target = (t) => {
14
+ const key = t.key.map(ev), focus = t.attachedTo ? ev(t.attachedTo) : undefined;
15
+ return (t.attachedTo && typeof focus !== "string") ||
16
+ key.some((v) => v instanceof Unknown || v === null)
17
+ ? undefined
18
+ : findOccurrence(recon, property.world, t.component, key, t.cycle, typeof focus === "string" ? focus : undefined);
19
+ };
20
+ const ev = (e) => {
21
+ switch (e.k) {
22
+ case "literal":
23
+ return e.value;
24
+ case "read": {
25
+ let value = e.root === property.binding.name ? subject : unknown();
26
+ for (const attr of e.attrs)
27
+ value = typeof value === "string" ? (b.fact(value, attr)?.v ?? unknown()) : unknown();
28
+ return value;
29
+ }
30
+ case "instance": {
31
+ const inst = target(e.target);
32
+ return inst ? { inst: inst.id } : unknown();
33
+ }
34
+ case "observation": {
35
+ const inst = target(e.of.target), result = inst && recon.results.get(inst.id);
36
+ if (!result)
37
+ return unknown();
38
+ if (e.query === "work")
39
+ return result.actions.find((a) => a.action === e.action)?.state ?? "absent";
40
+ const requirements = result.requirements.filter((r) => r.name === e.of.name);
41
+ if (e.query === "occurrence-count") {
42
+ const cycle = e.cycle ? ev(e.cycle) : undefined;
43
+ if (cycle instanceof Unknown || cycle === null)
44
+ return unknown();
45
+ return requirements.filter((r) => r.status !== "NotApplicable" &&
46
+ (cycle === undefined || r.occurrence === `${inst.id}/${e.of.name}@${String(cycle)}`)).length;
47
+ }
48
+ return requirements[0]?.due ?? unknown();
49
+ }
50
+ case "status": {
51
+ const inst = target(e.target), result = inst && recon.results.get(inst.id);
52
+ return (result?.requirements.find((r) => r.name === e.name)?.status ??
53
+ result?.outputs.find((o) => o.name === e.name)?.status ??
54
+ unknown());
55
+ }
56
+ case "attested": {
57
+ const inst = target(e.target);
58
+ return inst
59
+ ? b.evidenceOf(inst.id).some((r) => r.type === e.evidence && r.status === "attested")
60
+ : unknown();
61
+ }
62
+ case "call": {
63
+ const args = e.args.map(ev), a = args[0], c = args[1];
64
+ switch (e.op) {
65
+ case "known?":
66
+ return !(a instanceof Unknown) && a !== null;
67
+ case "unknown?":
68
+ return a instanceof Unknown;
69
+ case "and":
70
+ return all(args.map(truth));
71
+ case "or":
72
+ return any(args.map(truth));
73
+ case "not":
74
+ return typeof a === "boolean" ? !a : unknown();
75
+ case "implies":
76
+ antecedent?.(e, a === true);
77
+ return any([typeof a === "boolean" ? !a : unknown(), truth(c)]);
78
+ case "satisfied?":
79
+ return a instanceof Unknown || a === "Unknown"
80
+ ? unknown()
81
+ : a === "Satisfied" || a === "Waived";
82
+ case "not-applicable?":
83
+ return a instanceof Unknown || a === "Unknown" ? unknown() : a === "NotApplicable";
84
+ default: {
85
+ if (a instanceof Unknown || c instanceof Unknown)
86
+ return unknown();
87
+ if (e.op === "=")
88
+ return a === c;
89
+ if (e.op === "!=")
90
+ return a !== c;
91
+ if ((typeof a !== "string" && typeof a !== "number") ||
92
+ (typeof c !== "string" && typeof c !== "number"))
93
+ return unknown();
94
+ return e.op === "<" ? a < c : e.op === "<=" ? a <= c : e.op === ">" ? a > c : a >= c;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ };
100
+ return ev(property.predicate);
101
+ };
@@ -0,0 +1,9 @@
1
+ import type * as IR from "../world-ir/types.generated.js";
2
+ import { type ScenarioRunner } from "./scenarios.js";
3
+ export interface PropertyOptions {
4
+ readonly seed: number;
5
+ readonly cases: number;
6
+ }
7
+ export declare const validatePropertyOptions: ({ seed, cases }: PropertyOptions) => void;
8
+ export declare const createPropertyCaseGenerator: (ir: IR.WorldIR, property: IR.Property, run?: ScenarioRunner) => (seed: number, index: number) => IR.Scenario;
9
+ export declare const generatePropertyCase: (ir: IR.WorldIR, property: IR.Property, seed: number, index: number, run?: ScenarioRunner) => IR.Scenario;
@@ -0,0 +1,288 @@
1
+ import { sensitivePayload } from "../ir-checks/index.js";
2
+ import { localDateAt } from "./instants.js";
3
+ import { addDays } from "./dates.js";
4
+ import { createScenarioRunner } from "./scenarios.js";
5
+ import { validEvidence } from "./commands.js";
6
+ export const validatePropertyOptions = ({ seed, cases }) => {
7
+ if (!Number.isInteger(seed) ||
8
+ seed < 0 ||
9
+ seed > 0xffffffff ||
10
+ !Number.isInteger(cases) ||
11
+ cases < 1 ||
12
+ cases > 10000)
13
+ throw new RangeError("Properties require a uint32 seed and 1–10000 cases.");
14
+ };
15
+ // Static authored views live only for one property run, like its prepared scenario runner.
16
+ const prepareGeneration = (ir, property) => {
17
+ const world = ir.accounts.find((a) => a.name === property.world);
18
+ const types = ir.entities.filter((e) => e.ns.split(".")[0] === world.package.name);
19
+ const aliases = new Map(ir.types.map((t) => [t.name, t.type]));
20
+ const keywords = new Set(["sample", "other"]);
21
+ const inspect = (value) => {
22
+ if (!value || typeof value !== "object")
23
+ return;
24
+ if (Array.isArray(value)) {
25
+ value.forEach(inspect);
26
+ return;
27
+ }
28
+ const object = value;
29
+ if (object.k === "kw" && typeof object.v === "string")
30
+ keywords.add(object.v);
31
+ Object.values(object).forEach(inspect);
32
+ };
33
+ inspect(ir.components);
34
+ inspect(ir.derives);
35
+ const words = [...keywords].sort();
36
+ const references = new WeakMap();
37
+ const evidenceNames = (value) => {
38
+ if (!value || typeof value !== "object")
39
+ return [];
40
+ const old = references.get(value);
41
+ if (old)
42
+ return old;
43
+ const found = new Set();
44
+ const visit = (node) => {
45
+ if (!node || typeof node !== "object")
46
+ return;
47
+ if (Array.isArray(node)) {
48
+ node.forEach(visit);
49
+ return;
50
+ }
51
+ const e = node;
52
+ if (e.k === "ref" && e.kind === "evidence" && typeof e.name === "string")
53
+ found.add(e.name);
54
+ Object.values(e).forEach(visit);
55
+ };
56
+ visit(value);
57
+ const names = [...found];
58
+ references.set(value, names);
59
+ return names;
60
+ };
61
+ return { types, aliases, words, evidenceNames };
62
+ };
63
+ /** Six entities and two history records bound generation and the eventual replay artifact. */
64
+ const generateCase = (property, seed, index, run, view) => {
65
+ validatePropertyOptions({ seed, cases: index + 1 });
66
+ let state = (seed + Math.imul(index + 1, 0x9e3779b9)) >>> 0;
67
+ const pick = (n) => {
68
+ state = (Math.imul(state, 1664525) + 1013904223) >>> 0;
69
+ return Math.floor((state / 4294967296) * n);
70
+ };
71
+ const { types, aliases, words, evidenceNames } = view;
72
+ const resolve = (t, seen = new Set()) => {
73
+ if (Array.isArray(t)) {
74
+ const payload = sensitivePayload(t);
75
+ return payload
76
+ ? resolve(payload, seen)
77
+ : t[0] === "Option" || t[0] === "Brand"
78
+ ? resolve(t[1], seen)
79
+ : t;
80
+ }
81
+ if (typeof t !== "string" || !aliases.has(t) || seen.has(t))
82
+ return t;
83
+ seen.add(t);
84
+ return resolve(aliases.get(t), seen);
85
+ };
86
+ const given = [];
87
+ const at = property.at;
88
+ const literal = (value) => ({ k: "literal", value, at });
89
+ const fieldValue = (original, createReferences) => {
90
+ const type = resolve(original);
91
+ if (Array.isArray(type)) {
92
+ if (type[0] === "Id" && typeof type[1] === "string") {
93
+ const target = types.find((e) => e.name === type[1]) ??
94
+ types.find((e) => e.implements.some((b) => b.role === type[1]));
95
+ if (!target)
96
+ return undefined;
97
+ const existing = given.filter((e) => e.entity === target.name);
98
+ const node = existing.length && (!createReferences || pick(4) !== 0)
99
+ ? existing[pick(existing.length)]
100
+ : createReferences
101
+ ? create(target)
102
+ : undefined;
103
+ return node ? { k: "entity", name: node.name, at } : undefined;
104
+ }
105
+ if (type[0] === "Union") {
106
+ const options = type
107
+ .slice(1)
108
+ .filter((v) => typeof v === "string" && v.startsWith(":"));
109
+ return options.length ? literal(options[pick(options.length)].slice(1)) : undefined;
110
+ }
111
+ return undefined;
112
+ }
113
+ switch (type) {
114
+ case "String":
115
+ case "Group":
116
+ return literal(["Synthetic value", "Unknown", ""][pick(3)]);
117
+ case "Keyword":
118
+ return literal(words[pick(words.length)]);
119
+ case "Bool":
120
+ return literal(pick(2) === 1);
121
+ case "Int":
122
+ return literal([-1, 0, 1, 2, 3, 30, 90][pick(7)]);
123
+ case "Float":
124
+ return literal([-0.5, 0, 1.5, 42.25][pick(4)]);
125
+ case "Instant":
126
+ return literal(`${property.date.slice(0, 10)}T${String(pick(24)).padStart(2, "0")}:00:00.000Z`);
127
+ case "Date": {
128
+ const candidate = addDays(localDateAt(property.date), pick(721) - 360);
129
+ return literal(/^\d{4}-\d{2}-\d{2}$/.test(candidate) ? candidate : localDateAt(property.date));
130
+ }
131
+ default:
132
+ return undefined;
133
+ }
134
+ };
135
+ const create = (entity) => {
136
+ if (given.length >= 6)
137
+ return undefined;
138
+ const node = { name: `g${given.length}`, entity: entity.name, fields: [], at };
139
+ given.push(node);
140
+ for (const field of entity.fields) {
141
+ if (pick(5) === 0)
142
+ continue;
143
+ const value = fieldValue(field.type, true);
144
+ if (value)
145
+ node.fields.push({ name: field.name, value, at });
146
+ }
147
+ return node;
148
+ };
149
+ const primary = types.find((e) => e.name === property.binding.entity);
150
+ if (!primary)
151
+ throw new Error("Property binding is not in its account package.");
152
+ if (property.given) {
153
+ // Authored seed fields win; vary the remaining fields without changing seed identities.
154
+ for (const node of property.given)
155
+ given.push({ ...node, fields: [...node.fields] });
156
+ for (const node of given) {
157
+ const entity = types.find((e) => e.name === node.entity);
158
+ for (const field of entity.fields) {
159
+ if (node.fields.some((f) => f.name === field.name) || pick(5) === 0)
160
+ continue;
161
+ const value = fieldValue(field.type, false);
162
+ if (value)
163
+ node.fields.push({ name: field.name, value, at });
164
+ }
165
+ }
166
+ }
167
+ else {
168
+ const roots = 1 + pick(2);
169
+ for (let i = 0; i < roots; i++)
170
+ create(primary);
171
+ }
172
+ const scenario = {
173
+ name: `generated-${property.name}-${seed}-${index}`,
174
+ doc: "Synthetic seeded property data.",
175
+ world: property.world,
176
+ given,
177
+ steps: [{ kind: "at", date: property.date, expects: [], at }],
178
+ at,
179
+ };
180
+ const observed = run(scenario);
181
+ if (!observed.passed)
182
+ throw new Error("Generated entity basis failed reconciliation.");
183
+ const recon = observed.steps[0].reconciliation, program = recon.programs[0];
184
+ const target = (inst) => ({
185
+ k: "instance",
186
+ component: inst.component,
187
+ cycle: inst.cycle,
188
+ key: inst.key.map((v) => {
189
+ if (v && typeof v === "object" && "inst" in v)
190
+ return target(recon.instances.get(v.inst));
191
+ if (v === null || typeof v === "string" || typeof v === "number" || typeof v === "boolean")
192
+ return literal(v);
193
+ throw new Error("Unknown generated occurrence key");
194
+ }),
195
+ at,
196
+ });
197
+ const candidates = [];
198
+ const evidence = [];
199
+ for (const inst of recon.instances.values()) {
200
+ let occurrence;
201
+ try {
202
+ occurrence = target(inst);
203
+ }
204
+ catch {
205
+ continue;
206
+ }
207
+ const component = program.components.get(inst.component);
208
+ for (const use of component.machines)
209
+ for (const status of program.machines.get(use.protocol).states)
210
+ candidates.push({
211
+ kind: "signal",
212
+ target: occurrence,
213
+ machine: use.name,
214
+ state: status.name,
215
+ by: literal("Synthetic service"),
216
+ at,
217
+ });
218
+ for (const requirement of component.requirements)
219
+ for (const name of evidenceNames(requirement.satisfiedBy)) {
220
+ const type = program.evidence.get(name);
221
+ if (type?.of === component.name)
222
+ evidence.push({ target: occurrence, type, requirement: requirement.name });
223
+ }
224
+ }
225
+ const records = [];
226
+ const count = pick(3);
227
+ for (let i = 0; i < count; i++) {
228
+ if (candidates.length && (!evidence.length || pick(2) === 0)) {
229
+ records.push(candidates[pick(candidates.length)]);
230
+ continue;
231
+ }
232
+ if (!evidence.length)
233
+ continue;
234
+ const candidate = evidence[pick(evidence.length)];
235
+ const fields = candidate.type.fields.flatMap((f) => {
236
+ if (pick(5) === 0)
237
+ return [];
238
+ const value = fieldValue(f.type, false);
239
+ return value ? [{ name: f.name, value, at }] : [];
240
+ });
241
+ const values = Object.fromEntries(fields.flatMap((f) => f.value.k === "entity"
242
+ ? [[f.name, f.value.name]]
243
+ : f.value.k === "literal" && f.value.value !== null
244
+ ? [[f.name, f.value.value]]
245
+ : []));
246
+ records.push({
247
+ kind: "evidence",
248
+ target: candidate.target,
249
+ evidence: candidate.type.name,
250
+ requirement: candidate.requirement,
251
+ status: pick(2) === 0 && validEvidence(program, candidate.type.name, values, property.date)
252
+ ? "attested"
253
+ : "submitted",
254
+ by: literal("Synthetic human"),
255
+ values: fields,
256
+ at,
257
+ });
258
+ }
259
+ const pinned = property.records ?? [];
260
+ // Generated keys use scalar IDs; authored keys retain entity aliases and may omit a cycle.
261
+ const sameValue = (seed, generated) => seed.k === "instance" || generated.k === "instance"
262
+ ? seed.k === "instance" && generated.k === "instance" && sameTarget(seed, generated)
263
+ : (seed.k === "entity" ? seed.name : seed.value) ===
264
+ (generated.k === "entity" ? generated.name : generated.value);
265
+ const sameTarget = (seed, generated) => seed.component === generated.component &&
266
+ (seed.cycle === undefined || seed.cycle === generated.cycle) &&
267
+ seed.key.length === generated.key.length &&
268
+ seed.key.every((v, i) => sameValue(v, generated.key[i]));
269
+ const history = [
270
+ ...records.filter((record) => !pinned.some((seed) => seed.kind === record.kind &&
271
+ sameTarget(seed.target, record.target) &&
272
+ (seed.kind === "evidence" && record.kind === "evidence"
273
+ ? seed.evidence === record.evidence
274
+ : seed.kind === "signal" &&
275
+ record.kind === "signal" &&
276
+ seed.machine === record.machine))),
277
+ ...pinned,
278
+ ];
279
+ return { ...scenario, ...(history.length ? { records: history } : {}) };
280
+ };
281
+ export const createPropertyCaseGenerator = (ir, property, run = createScenarioRunner(ir)) => {
282
+ const view = prepareGeneration(ir, property);
283
+ return (seed, index) => generateCase(property, seed, index, run, view);
284
+ };
285
+ export const generatePropertyCase = (ir, property, seed, index, run = createScenarioRunner(ir)) => {
286
+ validatePropertyOptions({ seed, cases: index + 1 });
287
+ return createPropertyCaseGenerator(ir, property, run)(seed, index);
288
+ };
@@ -0,0 +1,14 @@
1
+ import type * as IR from "../world-ir/types.generated.js";
2
+ import type { PropertyFailure } from "./properties.js";
3
+ export interface ShrunkPropertyFailure {
4
+ readonly scenario: IR.Scenario;
5
+ readonly source: string;
6
+ readonly attempts: number;
7
+ readonly complete: boolean;
8
+ readonly originalSize: number;
9
+ readonly shrunkSize: number;
10
+ }
11
+ /** Greedy deletion preserves the selected failure class; retained evidence payloads stay intact. */
12
+ export declare const shrinkPropertyFailure: (ir: IR.WorldIR, property: IR.Property, failure: PropertyFailure, options?: {
13
+ readonly maxAttempts?: number;
14
+ }) => ShrunkPropertyFailure;