@fundamental-engine/core 0.9.3 → 0.9.5

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 (443) hide show
  1. package/dist/config/forces.config.d.ts +1 -1
  2. package/dist/config/forces.config.d.ts.map +1 -1
  3. package/dist/config/themes.d.ts +1 -1
  4. package/dist/conformance/run.d.ts +1 -1
  5. package/dist/conformance/run.d.ts.map +1 -1
  6. package/dist/conformance/run.js +6 -6
  7. package/dist/conformance/run.js.map +1 -1
  8. package/dist/conformance/types.d.ts +1 -1
  9. package/dist/conformance/types.d.ts.map +1 -1
  10. package/dist/contracts/guards.d.ts +1 -1
  11. package/dist/contracts/guards.d.ts.map +1 -1
  12. package/dist/contracts/passport.d.ts +1 -1
  13. package/dist/contracts/passport.d.ts.map +1 -1
  14. package/dist/diagnostics/energy.d.ts +1 -1
  15. package/dist/diagnostics/energy.d.ts.map +1 -1
  16. package/dist/diagnostics/fields.d.ts +1 -1
  17. package/dist/diagnostics/fields.d.ts.map +1 -1
  18. package/dist/diagnostics/modes.d.ts +1 -1
  19. package/dist/diagnostics/modes.d.ts.map +1 -1
  20. package/dist/diagnostics/modes.js +1 -1
  21. package/dist/diagnostics/modes.js.map +1 -1
  22. package/dist/diagnostics/potential.d.ts +1 -1
  23. package/dist/diagnostics/potential.d.ts.map +1 -1
  24. package/dist/diagnostics/probes.d.ts +1 -1
  25. package/dist/diagnostics/probes.d.ts.map +1 -1
  26. package/dist/diagnostics/probes.js +1 -1
  27. package/dist/diagnostics/probes.js.map +1 -1
  28. package/dist/diagnostics/render.d.ts +1 -1
  29. package/dist/diagnostics/render.d.ts.map +1 -1
  30. package/dist/engine/accretion.d.ts.map +1 -0
  31. package/dist/engine/accretion.js.map +1 -0
  32. package/dist/engine/agents.d.ts.map +1 -0
  33. package/dist/engine/agents.js.map +1 -0
  34. package/dist/engine/attention.d.ts.map +1 -0
  35. package/dist/engine/attention.js.map +1 -0
  36. package/dist/engine/causality.d.ts.map +1 -0
  37. package/dist/engine/causality.js.map +1 -0
  38. package/dist/engine/conditions.d.ts.map +1 -0
  39. package/dist/engine/conditions.js.map +1 -0
  40. package/dist/{core → engine}/currents.d.ts +1 -1
  41. package/dist/engine/currents.d.ts.map +1 -0
  42. package/dist/engine/currents.js.map +1 -0
  43. package/dist/engine/dock.d.ts.map +1 -0
  44. package/dist/engine/dock.js.map +1 -0
  45. package/dist/{core → engine}/events.d.ts +4 -1
  46. package/dist/engine/events.d.ts.map +1 -0
  47. package/dist/{core → engine}/events.js +7 -0
  48. package/dist/engine/events.js.map +1 -0
  49. package/dist/engine/feedback-sink.d.ts.map +1 -0
  50. package/dist/engine/feedback-sink.js.map +1 -0
  51. package/dist/engine/feedback.d.ts.map +1 -0
  52. package/dist/engine/feedback.js.map +1 -0
  53. package/dist/engine/field-snapshot.d.ts.map +1 -0
  54. package/dist/engine/field-snapshot.js.map +1 -0
  55. package/dist/engine/field-store.d.ts.map +1 -0
  56. package/dist/engine/field-store.js.map +1 -0
  57. package/dist/engine/field.d.ts.map +1 -0
  58. package/dist/{core → engine}/field.js +147 -1
  59. package/dist/engine/field.js.map +1 -0
  60. package/dist/engine/fieldline-seeds.d.ts.map +1 -0
  61. package/dist/engine/fieldline-seeds.js.map +1 -0
  62. package/dist/engine/fieldlines.d.ts.map +1 -0
  63. package/dist/{core → engine}/fieldlines.js +1 -1
  64. package/dist/engine/fieldlines.js.map +1 -0
  65. package/dist/engine/flow.d.ts.map +1 -0
  66. package/dist/engine/flow.js.map +1 -0
  67. package/dist/engine/formations.d.ts.map +1 -0
  68. package/dist/engine/formations.js.map +1 -0
  69. package/dist/engine/frame-harness.d.ts.map +1 -0
  70. package/dist/engine/frame-harness.js.map +1 -0
  71. package/dist/engine/governance.d.ts.map +1 -0
  72. package/dist/engine/governance.js.map +1 -0
  73. package/dist/engine/heatmap.d.ts.map +1 -0
  74. package/dist/{core → engine}/heatmap.js +1 -1
  75. package/dist/engine/heatmap.js.map +1 -0
  76. package/dist/engine/host-headless.d.ts.map +1 -0
  77. package/dist/engine/host-headless.js.map +1 -0
  78. package/dist/engine/host.d.ts.map +1 -0
  79. package/dist/engine/host.js.map +1 -0
  80. package/dist/engine/integrator.d.ts.map +1 -0
  81. package/dist/{core → engine}/integrator.js +5 -3
  82. package/dist/engine/integrator.js.map +1 -0
  83. package/dist/engine/lane-registry.d.ts.map +1 -0
  84. package/dist/engine/lane-registry.js.map +1 -0
  85. package/dist/engine/projection-agent-json.d.ts.map +1 -0
  86. package/dist/engine/projection-agent-json.js.map +1 -0
  87. package/dist/engine/query-lens.d.ts.map +1 -0
  88. package/dist/engine/query-lens.js.map +1 -0
  89. package/dist/engine/reactions.d.ts.map +1 -0
  90. package/dist/engine/reactions.js.map +1 -0
  91. package/dist/engine/registry.d.ts.map +1 -0
  92. package/dist/engine/registry.js.map +1 -0
  93. package/dist/engine/render-backend.d.ts.map +1 -0
  94. package/dist/engine/render-backend.js.map +1 -0
  95. package/dist/{core → engine}/render-modes.d.ts +1 -1
  96. package/dist/engine/render-modes.d.ts.map +1 -0
  97. package/dist/engine/render-modes.js.map +1 -0
  98. package/dist/engine/reservoir.d.ts.map +1 -0
  99. package/dist/engine/reservoir.js.map +1 -0
  100. package/dist/engine/scalar-grid.d.ts.map +1 -0
  101. package/dist/engine/scalar-grid.js.map +1 -0
  102. package/dist/engine/scanner.d.ts.map +1 -0
  103. package/dist/engine/scanner.js.map +1 -0
  104. package/dist/engine/shadow.d.ts.map +1 -0
  105. package/dist/engine/shadow.js.map +1 -0
  106. package/dist/engine/spatial-hash.d.ts.map +1 -0
  107. package/dist/engine/spatial-hash.js.map +1 -0
  108. package/dist/engine/streamlines.d.ts.map +1 -0
  109. package/dist/engine/streamlines.js.map +1 -0
  110. package/dist/engine/surface.d.ts.map +1 -0
  111. package/dist/engine/surface.js.map +1 -0
  112. package/dist/engine/temporal.d.ts.map +1 -0
  113. package/dist/engine/temporal.js.map +1 -0
  114. package/dist/engine/thermo.d.ts.map +1 -0
  115. package/dist/engine/thermo.js.map +1 -0
  116. package/dist/{core → engine}/types.d.ts +106 -4
  117. package/dist/engine/types.d.ts.map +1 -0
  118. package/dist/engine/types.js.map +1 -0
  119. package/dist/engine/weights.d.ts.map +1 -0
  120. package/dist/engine/weights.js.map +1 -0
  121. package/dist/forces/extended.d.ts +2 -2
  122. package/dist/forces/extended.d.ts.map +1 -1
  123. package/dist/forces/extended.js +1 -1
  124. package/dist/forces/index.d.ts +2 -2
  125. package/dist/forces/index.d.ts.map +1 -1
  126. package/dist/forces/natural.d.ts +2 -2
  127. package/dist/forces/natural.d.ts.map +1 -1
  128. package/dist/forces/natural.js +1 -1
  129. package/dist/index.d.ts +39 -39
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +39 -39
  132. package/dist/index.js.map +1 -1
  133. package/dist/inspect/report.js +2 -2
  134. package/dist/inspect/report.js.map +1 -1
  135. package/dist/{core → math}/geometry.d.ts +1 -1
  136. package/dist/math/geometry.d.ts.map +1 -0
  137. package/dist/{core → math}/geometry.js.map +1 -1
  138. package/dist/{core → math}/math.d.ts.map +1 -1
  139. package/dist/{core → math}/math.js.map +1 -1
  140. package/dist/recipes/catalog.d.ts +20 -11
  141. package/dist/recipes/catalog.d.ts.map +1 -1
  142. package/dist/recipes/catalog.js +17 -9
  143. package/dist/recipes/catalog.js.map +1 -1
  144. package/dist/recipes/compile.d.ts +33 -19
  145. package/dist/recipes/compile.d.ts.map +1 -1
  146. package/dist/recipes/compile.js +17 -11
  147. package/dist/recipes/compile.js.map +1 -1
  148. package/dist/recipes/focus.d.ts +18 -0
  149. package/dist/recipes/focus.d.ts.map +1 -0
  150. package/dist/recipes/focus.js +34 -0
  151. package/dist/recipes/focus.js.map +1 -0
  152. package/dist/recipes/index.d.ts +3 -0
  153. package/dist/recipes/index.d.ts.map +1 -1
  154. package/dist/recipes/index.js +6 -3
  155. package/dist/recipes/index.js.map +1 -1
  156. package/dist/recipes/schema.d.ts +36 -21
  157. package/dist/recipes/schema.d.ts.map +1 -1
  158. package/dist/recipes/schema.js +12 -7
  159. package/dist/recipes/schema.js.map +1 -1
  160. package/dist/recipes/wayfinding.d.ts +5 -3
  161. package/dist/recipes/wayfinding.d.ts.map +1 -1
  162. package/dist/recipes/wayfinding.js +6 -2
  163. package/dist/recipes/wayfinding.js.map +1 -1
  164. package/dist/record/record.d.ts +1 -1
  165. package/dist/record/record.d.ts.map +1 -1
  166. package/dist/record/record.js +3 -3
  167. package/dist/record/record.js.map +1 -1
  168. package/dist/version.d.ts +1 -1
  169. package/dist/version.js +1 -1
  170. package/dist/visual/channels.js +1 -1
  171. package/dist/visual/mapping.js +1 -1
  172. package/dist/world/ablation/ablation.d.ts +39 -0
  173. package/dist/world/ablation/ablation.d.ts.map +1 -0
  174. package/dist/world/ablation/ablation.js +449 -0
  175. package/dist/world/ablation/ablation.js.map +1 -0
  176. package/dist/world/adapters/field-runtime.d.ts +56 -0
  177. package/dist/world/adapters/field-runtime.d.ts.map +1 -0
  178. package/dist/world/adapters/field-runtime.js +250 -0
  179. package/dist/world/adapters/field-runtime.js.map +1 -0
  180. package/dist/world/adapters/fsm-runtime.d.ts +18 -0
  181. package/dist/world/adapters/fsm-runtime.d.ts.map +1 -0
  182. package/dist/world/adapters/fsm-runtime.js +153 -0
  183. package/dist/world/adapters/fsm-runtime.js.map +1 -0
  184. package/dist/world/adapters/governor-runtime.d.ts +23 -0
  185. package/dist/world/adapters/governor-runtime.d.ts.map +1 -0
  186. package/dist/world/adapters/governor-runtime.js +185 -0
  187. package/dist/world/adapters/governor-runtime.js.map +1 -0
  188. package/dist/world/adapters/planner-runtime.d.ts +20 -0
  189. package/dist/world/adapters/planner-runtime.d.ts.map +1 -0
  190. package/dist/world/adapters/planner-runtime.js +144 -0
  191. package/dist/world/adapters/planner-runtime.js.map +1 -0
  192. package/dist/world/conformance/corpus.d.ts +89 -0
  193. package/dist/world/conformance/corpus.d.ts.map +1 -0
  194. package/dist/world/conformance/corpus.js +195 -0
  195. package/dist/world/conformance/corpus.js.map +1 -0
  196. package/dist/world/conformance/discoveries.d.ts +50 -0
  197. package/dist/world/conformance/discoveries.d.ts.map +1 -0
  198. package/dist/world/conformance/discoveries.js +71 -0
  199. package/dist/world/conformance/discoveries.js.map +1 -0
  200. package/dist/world/conformance/evidence.d.ts +37 -0
  201. package/dist/world/conformance/evidence.d.ts.map +1 -0
  202. package/dist/world/conformance/evidence.js +53 -0
  203. package/dist/world/conformance/evidence.js.map +1 -0
  204. package/dist/world/conformance/negative-results.d.ts +57 -0
  205. package/dist/world/conformance/negative-results.d.ts.map +1 -0
  206. package/dist/world/conformance/negative-results.js +73 -0
  207. package/dist/world/conformance/negative-results.js.map +1 -0
  208. package/dist/world/conformance/predictions.d.ts +66 -0
  209. package/dist/world/conformance/predictions.d.ts.map +1 -0
  210. package/dist/world/conformance/predictions.js +141 -0
  211. package/dist/world/conformance/predictions.js.map +1 -0
  212. package/dist/world/cross-substrate.d.ts +19 -0
  213. package/dist/world/cross-substrate.d.ts.map +1 -0
  214. package/dist/world/cross-substrate.js +123 -0
  215. package/dist/world/cross-substrate.js.map +1 -0
  216. package/dist/world/dynamics.d.ts +166 -0
  217. package/dist/world/dynamics.d.ts.map +1 -0
  218. package/dist/world/dynamics.js +30 -0
  219. package/dist/world/dynamics.js.map +1 -0
  220. package/dist/world/envelope.d.ts +44 -0
  221. package/dist/world/envelope.d.ts.map +1 -0
  222. package/dist/world/envelope.js +77 -0
  223. package/dist/world/envelope.js.map +1 -0
  224. package/dist/world/episodes/episodes.d.ts +64 -0
  225. package/dist/world/episodes/episodes.d.ts.map +1 -0
  226. package/dist/world/episodes/episodes.js +104 -0
  227. package/dist/world/episodes/episodes.js.map +1 -0
  228. package/dist/world/equivalence.d.ts +70 -0
  229. package/dist/world/equivalence.d.ts.map +1 -0
  230. package/dist/world/equivalence.js +205 -0
  231. package/dist/world/equivalence.js.map +1 -0
  232. package/dist/world/experiments/declarative-dynamics.d.ts +87 -0
  233. package/dist/world/experiments/declarative-dynamics.d.ts.map +1 -0
  234. package/dist/world/experiments/declarative-dynamics.js +153 -0
  235. package/dist/world/experiments/declarative-dynamics.js.map +1 -0
  236. package/dist/world/governor-equivalence.d.ts +51 -0
  237. package/dist/world/governor-equivalence.d.ts.map +1 -0
  238. package/dist/world/governor-equivalence.js +126 -0
  239. package/dist/world/governor-equivalence.js.map +1 -0
  240. package/dist/world/kernel.d.ts +49 -0
  241. package/dist/world/kernel.d.ts.map +1 -0
  242. package/dist/world/kernel.js +64 -0
  243. package/dist/world/kernel.js.map +1 -0
  244. package/dist/world/observatory/capture.d.ts +10 -0
  245. package/dist/world/observatory/capture.d.ts.map +1 -0
  246. package/dist/world/observatory/capture.js +371 -0
  247. package/dist/world/observatory/capture.js.map +1 -0
  248. package/dist/world/observatory/evidence-log.d.ts +131 -0
  249. package/dist/world/observatory/evidence-log.d.ts.map +1 -0
  250. package/dist/world/observatory/evidence-log.js +43 -0
  251. package/dist/world/observatory/evidence-log.js.map +1 -0
  252. package/dist/world/opportunity/opportunity.d.ts +85 -0
  253. package/dist/world/opportunity/opportunity.d.ts.map +1 -0
  254. package/dist/world/opportunity/opportunity.js +67 -0
  255. package/dist/world/opportunity/opportunity.js.map +1 -0
  256. package/dist/world/projection/evidence-profile.d.ts +51 -0
  257. package/dist/world/projection/evidence-profile.d.ts.map +1 -0
  258. package/dist/world/projection/evidence-profile.js +93 -0
  259. package/dist/world/projection/evidence-profile.js.map +1 -0
  260. package/dist/world/projection/projection.d.ts +162 -0
  261. package/dist/world/projection/projection.d.ts.map +1 -0
  262. package/dist/world/projection/projection.js +145 -0
  263. package/dist/world/projection/projection.js.map +1 -0
  264. package/dist/world/properties/properties.d.ts +87 -0
  265. package/dist/world/properties/properties.d.ts.map +1 -0
  266. package/dist/world/properties/properties.js +172 -0
  267. package/dist/world/properties/properties.js.map +1 -0
  268. package/dist/world/substrates/fsm.d.ts +59 -0
  269. package/dist/world/substrates/fsm.d.ts.map +1 -0
  270. package/dist/world/substrates/fsm.js +57 -0
  271. package/dist/world/substrates/fsm.js.map +1 -0
  272. package/dist/world/substrates/governor.d.ts +53 -0
  273. package/dist/world/substrates/governor.d.ts.map +1 -0
  274. package/dist/world/substrates/governor.js +73 -0
  275. package/dist/world/substrates/governor.js.map +1 -0
  276. package/dist/world/substrates/planner.d.ts +82 -0
  277. package/dist/world/substrates/planner.d.ts.map +1 -0
  278. package/dist/world/substrates/planner.js +114 -0
  279. package/dist/world/substrates/planner.js.map +1 -0
  280. package/dist/world/world.d.ts +73 -0
  281. package/dist/world/world.d.ts.map +1 -0
  282. package/dist/world/world.js +2 -0
  283. package/dist/world/world.js.map +1 -0
  284. package/package.json +1 -1
  285. package/dist/core/accretion.d.ts.map +0 -1
  286. package/dist/core/accretion.js.map +0 -1
  287. package/dist/core/agents.d.ts.map +0 -1
  288. package/dist/core/agents.js.map +0 -1
  289. package/dist/core/attention.d.ts.map +0 -1
  290. package/dist/core/attention.js.map +0 -1
  291. package/dist/core/causality.d.ts.map +0 -1
  292. package/dist/core/causality.js.map +0 -1
  293. package/dist/core/conditions.d.ts.map +0 -1
  294. package/dist/core/conditions.js.map +0 -1
  295. package/dist/core/currents.d.ts.map +0 -1
  296. package/dist/core/currents.js.map +0 -1
  297. package/dist/core/dock.d.ts.map +0 -1
  298. package/dist/core/dock.js.map +0 -1
  299. package/dist/core/events.d.ts.map +0 -1
  300. package/dist/core/events.js.map +0 -1
  301. package/dist/core/feedback-sink.d.ts.map +0 -1
  302. package/dist/core/feedback-sink.js.map +0 -1
  303. package/dist/core/feedback.d.ts.map +0 -1
  304. package/dist/core/feedback.js.map +0 -1
  305. package/dist/core/field-snapshot.d.ts.map +0 -1
  306. package/dist/core/field-snapshot.js.map +0 -1
  307. package/dist/core/field-store.d.ts.map +0 -1
  308. package/dist/core/field-store.js.map +0 -1
  309. package/dist/core/field.d.ts.map +0 -1
  310. package/dist/core/field.js.map +0 -1
  311. package/dist/core/fieldline-seeds.d.ts.map +0 -1
  312. package/dist/core/fieldline-seeds.js.map +0 -1
  313. package/dist/core/fieldlines.d.ts.map +0 -1
  314. package/dist/core/fieldlines.js.map +0 -1
  315. package/dist/core/flow.d.ts.map +0 -1
  316. package/dist/core/flow.js.map +0 -1
  317. package/dist/core/formations.d.ts.map +0 -1
  318. package/dist/core/formations.js.map +0 -1
  319. package/dist/core/frame-harness.d.ts.map +0 -1
  320. package/dist/core/frame-harness.js.map +0 -1
  321. package/dist/core/geometry.d.ts.map +0 -1
  322. package/dist/core/governance.d.ts.map +0 -1
  323. package/dist/core/governance.js.map +0 -1
  324. package/dist/core/heatmap.d.ts.map +0 -1
  325. package/dist/core/heatmap.js.map +0 -1
  326. package/dist/core/host-headless.d.ts.map +0 -1
  327. package/dist/core/host-headless.js.map +0 -1
  328. package/dist/core/host.d.ts.map +0 -1
  329. package/dist/core/host.js.map +0 -1
  330. package/dist/core/integrator.d.ts.map +0 -1
  331. package/dist/core/integrator.js.map +0 -1
  332. package/dist/core/lane-registry.d.ts.map +0 -1
  333. package/dist/core/lane-registry.js.map +0 -1
  334. package/dist/core/projection-agent-json.d.ts.map +0 -1
  335. package/dist/core/projection-agent-json.js.map +0 -1
  336. package/dist/core/query-lens.d.ts.map +0 -1
  337. package/dist/core/query-lens.js.map +0 -1
  338. package/dist/core/reactions.d.ts.map +0 -1
  339. package/dist/core/reactions.js.map +0 -1
  340. package/dist/core/registry.d.ts.map +0 -1
  341. package/dist/core/registry.js.map +0 -1
  342. package/dist/core/render-backend.d.ts.map +0 -1
  343. package/dist/core/render-backend.js.map +0 -1
  344. package/dist/core/render-modes.d.ts.map +0 -1
  345. package/dist/core/render-modes.js.map +0 -1
  346. package/dist/core/reservoir.d.ts.map +0 -1
  347. package/dist/core/reservoir.js.map +0 -1
  348. package/dist/core/scalar-grid.d.ts.map +0 -1
  349. package/dist/core/scalar-grid.js.map +0 -1
  350. package/dist/core/scanner.d.ts.map +0 -1
  351. package/dist/core/scanner.js.map +0 -1
  352. package/dist/core/shadow.d.ts.map +0 -1
  353. package/dist/core/shadow.js.map +0 -1
  354. package/dist/core/spatial-hash.d.ts.map +0 -1
  355. package/dist/core/spatial-hash.js.map +0 -1
  356. package/dist/core/streamlines.d.ts.map +0 -1
  357. package/dist/core/streamlines.js.map +0 -1
  358. package/dist/core/surface.d.ts.map +0 -1
  359. package/dist/core/surface.js.map +0 -1
  360. package/dist/core/temporal.d.ts.map +0 -1
  361. package/dist/core/temporal.js.map +0 -1
  362. package/dist/core/thermo.d.ts.map +0 -1
  363. package/dist/core/thermo.js.map +0 -1
  364. package/dist/core/types.d.ts.map +0 -1
  365. package/dist/core/types.js.map +0 -1
  366. package/dist/core/weights.d.ts.map +0 -1
  367. package/dist/core/weights.js.map +0 -1
  368. /package/dist/{core → engine}/accretion.d.ts +0 -0
  369. /package/dist/{core → engine}/accretion.js +0 -0
  370. /package/dist/{core → engine}/agents.d.ts +0 -0
  371. /package/dist/{core → engine}/agents.js +0 -0
  372. /package/dist/{core → engine}/attention.d.ts +0 -0
  373. /package/dist/{core → engine}/attention.js +0 -0
  374. /package/dist/{core → engine}/causality.d.ts +0 -0
  375. /package/dist/{core → engine}/causality.js +0 -0
  376. /package/dist/{core → engine}/conditions.d.ts +0 -0
  377. /package/dist/{core → engine}/conditions.js +0 -0
  378. /package/dist/{core → engine}/currents.js +0 -0
  379. /package/dist/{core → engine}/dock.d.ts +0 -0
  380. /package/dist/{core → engine}/dock.js +0 -0
  381. /package/dist/{core → engine}/feedback-sink.d.ts +0 -0
  382. /package/dist/{core → engine}/feedback-sink.js +0 -0
  383. /package/dist/{core → engine}/feedback.d.ts +0 -0
  384. /package/dist/{core → engine}/feedback.js +0 -0
  385. /package/dist/{core → engine}/field-snapshot.d.ts +0 -0
  386. /package/dist/{core → engine}/field-snapshot.js +0 -0
  387. /package/dist/{core → engine}/field-store.d.ts +0 -0
  388. /package/dist/{core → engine}/field-store.js +0 -0
  389. /package/dist/{core → engine}/field.d.ts +0 -0
  390. /package/dist/{core → engine}/fieldline-seeds.d.ts +0 -0
  391. /package/dist/{core → engine}/fieldline-seeds.js +0 -0
  392. /package/dist/{core → engine}/fieldlines.d.ts +0 -0
  393. /package/dist/{core → engine}/flow.d.ts +0 -0
  394. /package/dist/{core → engine}/flow.js +0 -0
  395. /package/dist/{core → engine}/formations.d.ts +0 -0
  396. /package/dist/{core → engine}/formations.js +0 -0
  397. /package/dist/{core → engine}/frame-harness.d.ts +0 -0
  398. /package/dist/{core → engine}/frame-harness.js +0 -0
  399. /package/dist/{core → engine}/governance.d.ts +0 -0
  400. /package/dist/{core → engine}/governance.js +0 -0
  401. /package/dist/{core → engine}/heatmap.d.ts +0 -0
  402. /package/dist/{core → engine}/host-headless.d.ts +0 -0
  403. /package/dist/{core → engine}/host-headless.js +0 -0
  404. /package/dist/{core → engine}/host.d.ts +0 -0
  405. /package/dist/{core → engine}/host.js +0 -0
  406. /package/dist/{core → engine}/integrator.d.ts +0 -0
  407. /package/dist/{core → engine}/lane-registry.d.ts +0 -0
  408. /package/dist/{core → engine}/lane-registry.js +0 -0
  409. /package/dist/{core → engine}/projection-agent-json.d.ts +0 -0
  410. /package/dist/{core → engine}/projection-agent-json.js +0 -0
  411. /package/dist/{core → engine}/query-lens.d.ts +0 -0
  412. /package/dist/{core → engine}/query-lens.js +0 -0
  413. /package/dist/{core → engine}/reactions.d.ts +0 -0
  414. /package/dist/{core → engine}/reactions.js +0 -0
  415. /package/dist/{core → engine}/registry.d.ts +0 -0
  416. /package/dist/{core → engine}/registry.js +0 -0
  417. /package/dist/{core → engine}/render-backend.d.ts +0 -0
  418. /package/dist/{core → engine}/render-backend.js +0 -0
  419. /package/dist/{core → engine}/render-modes.js +0 -0
  420. /package/dist/{core → engine}/reservoir.d.ts +0 -0
  421. /package/dist/{core → engine}/reservoir.js +0 -0
  422. /package/dist/{core → engine}/scalar-grid.d.ts +0 -0
  423. /package/dist/{core → engine}/scalar-grid.js +0 -0
  424. /package/dist/{core → engine}/scanner.d.ts +0 -0
  425. /package/dist/{core → engine}/scanner.js +0 -0
  426. /package/dist/{core → engine}/shadow.d.ts +0 -0
  427. /package/dist/{core → engine}/shadow.js +0 -0
  428. /package/dist/{core → engine}/spatial-hash.d.ts +0 -0
  429. /package/dist/{core → engine}/spatial-hash.js +0 -0
  430. /package/dist/{core → engine}/streamlines.d.ts +0 -0
  431. /package/dist/{core → engine}/streamlines.js +0 -0
  432. /package/dist/{core → engine}/surface.d.ts +0 -0
  433. /package/dist/{core → engine}/surface.js +0 -0
  434. /package/dist/{core → engine}/temporal.d.ts +0 -0
  435. /package/dist/{core → engine}/temporal.js +0 -0
  436. /package/dist/{core → engine}/thermo.d.ts +0 -0
  437. /package/dist/{core → engine}/thermo.js +0 -0
  438. /package/dist/{core → engine}/types.js +0 -0
  439. /package/dist/{core → engine}/weights.d.ts +0 -0
  440. /package/dist/{core → engine}/weights.js +0 -0
  441. /package/dist/{core → math}/geometry.js +0 -0
  442. /package/dist/{core → math}/math.d.ts +0 -0
  443. /package/dist/{core → math}/math.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/world/projection/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * F2 foundation — property classification (EXPERIMENTAL, internal, not exported from the package entry).
3
+ *
4
+ * Stage-2 needs to say what KIND of claim a property is before it can say whether the claim holds. Three
5
+ * classes, with genuinely different evaluation authorities:
6
+ *
7
+ * mechanically-decidable — decidable from the declaration/state by the runtime itself
8
+ * model-checkable — requires exploring a space of executions, not observing one
9
+ * empirically-testable — requires evidence about people, which this runtime cannot produce
10
+ *
11
+ * The rule that makes this honest: **an empirical property can never be marked `satisfied` here.** The
12
+ * internal validator may only return `unresolved`, `insufficient-evidence`, or a deferral carrying a
13
+ * reference to external empirical evidence. It must never infer belief, interpretation, usability,
14
+ * understanding, expectation, or experience from runtime state (M1.5-01).
15
+ *
16
+ * The second rule: **one observed execution is not a model check.** A model-checkable claim backed only
17
+ * by an observed run returns `insufficient-evidence`, never `satisfied` — that conflation is precisely
18
+ * how a runtime talks itself into believing it proved something.
19
+ */
20
+ import type { ProjectionSurface } from '../projection/projection.ts';
21
+ export type PropertyClass = 'mechanically-decidable' | 'model-checkable' | 'empirically-testable';
22
+ export type EvaluationAuthority = 'runtime' | 'model-checker' | 'external-empirical';
23
+ export type PropertyStatus = 'satisfied' | 'violated' | 'unresolved' | 'not-applicable' | 'insufficient-evidence';
24
+ export type PropertyEvidenceKind = 'declaration' | 'projection-surface' | 'observed-execution' | 'bounded-model-check' | 'exhaustive-exploration' | 'external-empirical-study';
25
+ export interface PropertyEvidence {
26
+ readonly kind: PropertyEvidenceKind;
27
+ readonly id: string;
28
+ readonly detail?: string;
29
+ /** For model-checking evidence: what portion of the space was covered. */
30
+ readonly coverage?: string;
31
+ }
32
+ export interface PropertyProvenance {
33
+ readonly declaredBy: string;
34
+ readonly declaredIn: string;
35
+ }
36
+ export interface PropertyDeclaration {
37
+ readonly id: string;
38
+ readonly statement: string;
39
+ readonly propertyClass: PropertyClass;
40
+ readonly requiredEvidence: readonly PropertyEvidenceKind[];
41
+ readonly provenance: PropertyProvenance;
42
+ /** Surface keys the claim reads, when it is projection-relative. */
43
+ readonly reads?: readonly string[];
44
+ /** Evidence ids the claim depends on, when it is projection-relative. */
45
+ readonly requiresEvidenceIds?: readonly string[];
46
+ }
47
+ export interface PropertyResult {
48
+ readonly id: string;
49
+ readonly propertyClass: PropertyClass;
50
+ readonly evaluationAuthority: EvaluationAuthority;
51
+ readonly requiredEvidence: readonly PropertyEvidenceKind[];
52
+ readonly status: PropertyStatus;
53
+ readonly reason: string;
54
+ readonly provenance: PropertyProvenance;
55
+ readonly usedEvidence: readonly PropertyEvidence[];
56
+ /** Set only when deferring to an outside authority; never a claim that the property holds. */
57
+ readonly externalReference?: string;
58
+ }
59
+ export declare function authorityFor(propertyClass: PropertyClass): EvaluationAuthority;
60
+ export declare function requiresParticipantInference(statement: string): boolean;
61
+ export interface PropertyDeclarationProblem {
62
+ readonly rule: string;
63
+ readonly detail: string;
64
+ }
65
+ /** Static checks on the declaration itself, independent of any evidence offered. */
66
+ export declare function validatePropertyDeclaration(decl: PropertyDeclaration): PropertyDeclarationProblem[];
67
+ export interface PropertyEvaluationInput {
68
+ readonly declaration: PropertyDeclaration;
69
+ readonly offered: readonly PropertyEvidence[];
70
+ /**
71
+ * The runtime's mechanical verdict, when it has one. Supplied ONLY for mechanically-decidable
72
+ * properties; it is ignored for the other classes by construction.
73
+ */
74
+ readonly mechanicalVerdict?: boolean;
75
+ }
76
+ /**
77
+ * Evaluate one property declaration. The class dictates what conclusions are reachable — the evidence
78
+ * cannot buy a stronger status than the class allows.
79
+ */
80
+ export declare function evaluateProperty(input: PropertyEvaluationInput): PropertyResult;
81
+ /**
82
+ * Evaluate a projection-relative property against a SURFACE. Two hard limits, both enforced here rather
83
+ * than left to the caller: a claim may not read state that is off-surface, and it may not be discharged
84
+ * with evidence the surface does not make accessible.
85
+ */
86
+ export declare function evaluateProjectionProperty(declaration: PropertyDeclaration, surface: ProjectionSurface, predicate?: (observed: Readonly<Record<string, number>>) => boolean): PropertyResult;
87
+ //# sourceMappingURL=properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/world/properties/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ export function authorityFor(propertyClass) {
2
+ switch (propertyClass) {
3
+ case 'mechanically-decidable':
4
+ return 'runtime';
5
+ case 'model-checkable':
6
+ return 'model-checker';
7
+ case 'empirically-testable':
8
+ return 'external-empirical';
9
+ }
10
+ }
11
+ /**
12
+ * Terms whose truth lives in a person, not in state. A claim using them cannot be mechanically decided
13
+ * or model-checked no matter how it was labelled.
14
+ */
15
+ const PARTICIPANT_INFERENCE_TERMS = [
16
+ 'believe', 'belief', 'perceive', 'perception', 'understand', 'understanding',
17
+ 'expect', 'expectation', 'experience', 'usable', 'usability', 'intuitive',
18
+ 'confusing', 'confused', 'prefer', 'satisfaction', 'trust', 'notice',
19
+ ];
20
+ export function requiresParticipantInference(statement) {
21
+ const s = statement.toLowerCase();
22
+ return PARTICIPANT_INFERENCE_TERMS.some((t) => s.includes(t));
23
+ }
24
+ /** Static checks on the declaration itself, independent of any evidence offered. */
25
+ export function validatePropertyDeclaration(decl) {
26
+ const problems = [];
27
+ if (decl.propertyClass !== 'empirically-testable' && requiresParticipantInference(decl.statement)) {
28
+ problems.push({
29
+ rule: 'participant-inference⇒empirical',
30
+ detail: `"${decl.statement}" refers to participant state; it cannot be ${decl.propertyClass}`,
31
+ });
32
+ }
33
+ if (decl.propertyClass === 'mechanically-decidable' && decl.requiredEvidence.includes('external-empirical-study')) {
34
+ problems.push({
35
+ rule: 'mechanical∦empirical-evidence',
36
+ detail: 'a mechanically-decidable property must not require empirical evidence',
37
+ });
38
+ }
39
+ if (decl.propertyClass === 'model-checkable' && decl.requiredEvidence.every((k) => k === 'observed-execution')) {
40
+ problems.push({
41
+ rule: 'model-check∦single-execution',
42
+ detail: 'observed executions alone cannot discharge a model-checkable property',
43
+ });
44
+ }
45
+ if (decl.propertyClass === 'empirically-testable' && !decl.requiredEvidence.includes('external-empirical-study')) {
46
+ problems.push({
47
+ rule: 'empirical⇒external-study',
48
+ detail: 'an empirically-testable property must require external empirical evidence',
49
+ });
50
+ }
51
+ return problems;
52
+ }
53
+ /**
54
+ * Evaluate one property declaration. The class dictates what conclusions are reachable — the evidence
55
+ * cannot buy a stronger status than the class allows.
56
+ */
57
+ export function evaluateProperty(input) {
58
+ const decl = input.declaration;
59
+ const authority = authorityFor(decl.propertyClass);
60
+ const base = {
61
+ id: decl.id,
62
+ propertyClass: decl.propertyClass,
63
+ evaluationAuthority: authority,
64
+ requiredEvidence: decl.requiredEvidence,
65
+ provenance: decl.provenance,
66
+ };
67
+ const problems = validatePropertyDeclaration(decl);
68
+ if (problems.length > 0) {
69
+ return {
70
+ ...base,
71
+ status: 'not-applicable',
72
+ reason: `misclassified declaration: ${problems.map((p) => p.rule).join(', ')}`,
73
+ usedEvidence: [],
74
+ };
75
+ }
76
+ // --- empirical: the runtime may defer, and nothing else. It never concludes satisfied.
77
+ if (decl.propertyClass === 'empirically-testable') {
78
+ const study = input.offered.find((e) => e.kind === 'external-empirical-study');
79
+ if (study) {
80
+ return {
81
+ ...base,
82
+ status: 'unresolved',
83
+ reason: 'deferred to external empirical authority; the runtime does not adjudicate empirical claims',
84
+ usedEvidence: [study],
85
+ externalReference: study.id,
86
+ };
87
+ }
88
+ const internalOnly = input.offered.filter((e) => e.kind !== 'external-empirical-study');
89
+ return {
90
+ ...base,
91
+ status: 'insufficient-evidence',
92
+ reason: internalOnly.length > 0
93
+ ? `only internal evidence offered (${internalOnly.map((e) => e.kind).join(', ')}); an empirical claim cannot be settled from runtime state`
94
+ : 'no empirical evidence offered',
95
+ usedEvidence: internalOnly,
96
+ };
97
+ }
98
+ // --- model-checkable: exploring a space, not witnessing a run
99
+ if (decl.propertyClass === 'model-checkable') {
100
+ const checks = input.offered.filter((e) => e.kind === 'bounded-model-check' || e.kind === 'exhaustive-exploration');
101
+ if (checks.length === 0) {
102
+ const runs = input.offered.filter((e) => e.kind === 'observed-execution');
103
+ return {
104
+ ...base,
105
+ status: 'insufficient-evidence',
106
+ reason: runs.length > 0
107
+ ? `${runs.length} observed execution(s) cannot generalize over the state space`
108
+ : 'no model-checking evidence offered',
109
+ usedEvidence: runs,
110
+ };
111
+ }
112
+ const exhaustive = checks.find((e) => e.kind === 'exhaustive-exploration');
113
+ return {
114
+ ...base,
115
+ status: exhaustive ? 'satisfied' : 'unresolved',
116
+ reason: exhaustive
117
+ ? `exhaustive exploration (${exhaustive.coverage ?? 'full space'})`
118
+ : `bounded check only (${checks[0].coverage ?? 'bound unstated'}); holds within the bound, unresolved beyond it`,
119
+ usedEvidence: checks,
120
+ };
121
+ }
122
+ // --- mechanically-decidable: the runtime decides, from the declaration/surface alone
123
+ const usable = input.offered.filter((e) => e.kind === 'declaration' || e.kind === 'projection-surface');
124
+ if (input.mechanicalVerdict === undefined) {
125
+ return { ...base, status: 'unresolved', reason: 'no mechanical verdict was produced', usedEvidence: usable };
126
+ }
127
+ return {
128
+ ...base,
129
+ status: input.mechanicalVerdict ? 'satisfied' : 'violated',
130
+ reason: input.mechanicalVerdict ? 'decided mechanically from the declaration' : 'mechanically refuted',
131
+ usedEvidence: usable,
132
+ };
133
+ }
134
+ /**
135
+ * Evaluate a projection-relative property against a SURFACE. Two hard limits, both enforced here rather
136
+ * than left to the caller: a claim may not read state that is off-surface, and it may not be discharged
137
+ * with evidence the surface does not make accessible.
138
+ */
139
+ export function evaluateProjectionProperty(declaration, surface, predicate) {
140
+ const offSurface = (declaration.reads ?? []).filter((k) => !(k in surface.observedState));
141
+ if (offSurface.length > 0) {
142
+ return {
143
+ id: declaration.id,
144
+ propertyClass: declaration.propertyClass,
145
+ evaluationAuthority: authorityFor(declaration.propertyClass),
146
+ requiredEvidence: declaration.requiredEvidence,
147
+ status: 'unresolved',
148
+ reason: `reads ${offSurface.join(', ')} which this projection does not expose; hidden world state must not be consulted`,
149
+ provenance: declaration.provenance,
150
+ usedEvidence: [],
151
+ };
152
+ }
153
+ const inaccessible = (declaration.requiresEvidenceIds ?? []).filter((id) => !surface.accessibleEvidence.includes(id));
154
+ if (inaccessible.length > 0) {
155
+ return {
156
+ id: declaration.id,
157
+ propertyClass: declaration.propertyClass,
158
+ evaluationAuthority: authorityFor(declaration.propertyClass),
159
+ requiredEvidence: declaration.requiredEvidence,
160
+ status: 'insufficient-evidence',
161
+ reason: `requires evidence not accessible on this surface: ${inaccessible.join(', ')}`,
162
+ provenance: declaration.provenance,
163
+ usedEvidence: [],
164
+ };
165
+ }
166
+ return evaluateProperty({
167
+ declaration,
168
+ offered: [{ kind: 'projection-surface', id: surface.identity.id }],
169
+ mechanicalVerdict: predicate ? predicate(surface.observedState) : undefined,
170
+ });
171
+ }
172
+ //# sourceMappingURL=properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/world/properties/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Conformance-corpus substrate: a finite state machine (EXPERIMENTAL, internal).
3
+ *
4
+ * Written from FSM semantics, with the API an FSM library would naturally have — declared states, a
5
+ * declared transition table, data guards, accepting (final) states, and an outcome per fired event.
6
+ * It has NO knowledge of `DynamicsContract`; per the corpus protocol it is committed before its adapter
7
+ * exists and may not be edited to make that adapter cleaner.
8
+ *
9
+ * Its role in the corpus is the **control**: an FSM is the most contract-shaped substrate imaginable
10
+ * (explicit states, declared law, complete observable state, exact determinism, trivial restore), so it
11
+ * was pre-registered as expected to require zero contract change.
12
+ *
13
+ * Pure functions: state in → state out. Guards are data, never predicates-as-callbacks.
14
+ */
15
+ export type FsmValue = number | string | boolean;
16
+ /** A guard is a declared equality on context — expressible as data, so the law stays inspectable. */
17
+ export interface FsmGuard {
18
+ readonly key: string;
19
+ readonly equals: FsmValue;
20
+ }
21
+ export interface FsmTransition {
22
+ readonly from: string;
23
+ readonly on: string;
24
+ readonly to: string;
25
+ readonly guard?: FsmGuard;
26
+ /** Context writes applied when this transition is taken. */
27
+ readonly assign?: Readonly<Record<string, FsmValue>>;
28
+ }
29
+ export interface FsmDefinition {
30
+ readonly id: string;
31
+ readonly initial: string;
32
+ readonly states: readonly string[];
33
+ /** Accepting states. Reaching one means the machine is DONE — not merely idle. */
34
+ readonly accepting: readonly string[];
35
+ readonly transitions: readonly FsmTransition[];
36
+ readonly context?: Readonly<Record<string, FsmValue>>;
37
+ }
38
+ export interface FsmState {
39
+ readonly current: string;
40
+ readonly context: Readonly<Record<string, FsmValue>>;
41
+ readonly steps: number;
42
+ }
43
+ /**
44
+ * Why an event did or did not move the machine. `accepted` is distinct from `no-transition`: an
45
+ * accepting state is finished, whereas a non-accepting state with no matching transition is merely
46
+ * idle and will still respond to a different event.
47
+ */
48
+ export type FsmOutcome = 'transitioned' | 'no-transition' | 'guard-blocked' | 'unknown-event' | 'accepted';
49
+ export interface FsmFireResult {
50
+ readonly state: FsmState;
51
+ readonly outcome: FsmOutcome;
52
+ readonly taken?: FsmTransition;
53
+ }
54
+ export declare function initialFsmState(def: FsmDefinition): FsmState;
55
+ export declare function isAccepting(def: FsmDefinition, state: FsmState): boolean;
56
+ export declare function isFsmState(v: unknown): v is FsmState;
57
+ /** Fire one event. An accepting state consumes nothing further — the machine is done. */
58
+ export declare function fireFsm(def: FsmDefinition, state: FsmState, event: string): FsmFireResult;
59
+ //# sourceMappingURL=fsm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsm.d.ts","sourceRoot":"","sources":["../../../src/world/substrates/fsm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,qGAAqG;AACrG,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,UAAU,CAAC;AAE3G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,QAAQ,CAE5D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAExE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,QAAQ,CAIpD;AAOD,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAyBzF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Conformance-corpus substrate: a finite state machine (EXPERIMENTAL, internal).
3
+ *
4
+ * Written from FSM semantics, with the API an FSM library would naturally have — declared states, a
5
+ * declared transition table, data guards, accepting (final) states, and an outcome per fired event.
6
+ * It has NO knowledge of `DynamicsContract`; per the corpus protocol it is committed before its adapter
7
+ * exists and may not be edited to make that adapter cleaner.
8
+ *
9
+ * Its role in the corpus is the **control**: an FSM is the most contract-shaped substrate imaginable
10
+ * (explicit states, declared law, complete observable state, exact determinism, trivial restore), so it
11
+ * was pre-registered as expected to require zero contract change.
12
+ *
13
+ * Pure functions: state in → state out. Guards are data, never predicates-as-callbacks.
14
+ */
15
+ export function initialFsmState(def) {
16
+ return { current: def.initial, context: { ...(def.context ?? {}) }, steps: 0 };
17
+ }
18
+ export function isAccepting(def, state) {
19
+ return def.accepting.includes(state.current);
20
+ }
21
+ export function isFsmState(v) {
22
+ if (typeof v !== 'object' || v === null)
23
+ return false;
24
+ const s = v;
25
+ return typeof s.current === 'string' && typeof s.steps === 'number' && typeof s.context === 'object' && s.context !== null;
26
+ }
27
+ function guardHolds(guard, context) {
28
+ if (!guard)
29
+ return true;
30
+ return context[guard.key] === guard.equals;
31
+ }
32
+ /** Fire one event. An accepting state consumes nothing further — the machine is done. */
33
+ export function fireFsm(def, state, event) {
34
+ if (isAccepting(def, state)) {
35
+ return { state, outcome: 'accepted' };
36
+ }
37
+ const fromHere = def.transitions.filter((t) => t.from === state.current);
38
+ const onEvent = fromHere.filter((t) => t.on === event);
39
+ if (onEvent.length === 0) {
40
+ // distinguish "this machine has no such event anywhere" from "not from this state"
41
+ const knownEvent = def.transitions.some((t) => t.on === event);
42
+ return { state, outcome: knownEvent ? 'no-transition' : 'unknown-event' };
43
+ }
44
+ const taken = onEvent.find((t) => guardHolds(t.guard, state.context));
45
+ if (!taken)
46
+ return { state, outcome: 'guard-blocked' };
47
+ return {
48
+ state: {
49
+ current: taken.to,
50
+ context: taken.assign ? { ...state.context, ...taken.assign } : state.context,
51
+ steps: state.steps + 1,
52
+ },
53
+ outcome: 'transitioned',
54
+ taken,
55
+ };
56
+ }
57
+ //# sourceMappingURL=fsm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsm.js","sourceRoot":"","sources":["../../../src/world/substrates/fsm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgDH,MAAM,UAAU,eAAe,CAAC,GAAkB;IAChD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAkB,EAAE,KAAe;IAC7D,OAAO,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AAC7H,CAAC;AAED,SAAS,UAAU,CAAC,KAA2B,EAAE,OAA2C;IAC1F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,OAAO,CAAC,GAAkB,EAAE,KAAe,EAAE,KAAa;IACxE,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,mFAAmF;QACnF,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAEvD,OAAO;QACL,KAAK,EAAE;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;YAC7E,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;SACvB;QACD,OAAO,EAAE,cAAc;QACvB,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * G3 — second substrate: the quality-governor rule set (EXPERIMENTAL, internal).
3
+ *
4
+ * PROVENANCE (stated plainly): this is a faithful core-local re-expression of the **shipped**
5
+ * `QualityGovernor` in `@fundamental-engine/dom` — same declared escalation table, same recovery
6
+ * streak, same overrun test (`duration > budget × 1.3`), same asymmetric hysteresis. It is a port, not
7
+ * the shipped module, because `core` must never import `dom` (strict dependency direction) and core's
8
+ * package `exports` map is closed, so the shipped class is unreachable from here. The port exists so the
9
+ * second substrate can be adapted to `DynamicsContract` **inside core**, alongside the field adapter,
10
+ * without exporting any new public surface. Its limitation is recorded in the phase findings.
11
+ *
12
+ * Why this substrate: it contrasts with the field on every axis the contract measures —
13
+ * discrete threshold transitions (not continuous integration),
14
+ * history-dependent streak state with ASYMMETRIC hysteresis (escalate fast, recover slow),
15
+ * a transition law that is a DECLARED TABLE rather than opaque code,
16
+ * fully surfaced, fully restorable state,
17
+ * exact determinism with no clock and no RNG.
18
+ *
19
+ * Expressed as pure functions: state in → state out. No class, no hidden mutable capture.
20
+ */
21
+ export type QualityTier = 0 | 1 | 2 | 3;
22
+ export interface GovernorRule {
23
+ readonly aboveMs: number;
24
+ readonly streak: number;
25
+ readonly tier: QualityTier;
26
+ }
27
+ /** The declared transition law (mirrors the shipped ESCALATE table). */
28
+ export declare const ESCALATE_RULES: readonly GovernorRule[];
29
+ /** Clean frames required before dropping one tier (asymmetric recovery). */
30
+ export declare const RECOVER_STREAK = 30;
31
+ export declare const DEFAULT_BUDGET_MS = 16.67;
32
+ export interface GovernorState {
33
+ readonly tier: QualityTier;
34
+ readonly overrunStreak: number;
35
+ readonly cleanStreak: number;
36
+ readonly budgetMs: number;
37
+ }
38
+ export declare function initialGovernorState(budgetMs?: number): GovernorState;
39
+ export interface GovernorStep {
40
+ readonly state: GovernorState;
41
+ /** The new tier when it changed this step; `undefined` when stable. */
42
+ readonly changed: QualityTier | undefined;
43
+ }
44
+ /** Structural check used by `restore` — a snapshot payload must be a real governor state. */
45
+ export declare function isGovernorState(v: unknown): v is GovernorState;
46
+ /**
47
+ * Advance one frame. Pure: returns the next state and whether the tier changed.
48
+ * Mirrors the shipped governor exactly — escalation checks rules in order and takes the first that
49
+ * both exceeds its threshold and has met its streak; recovery drops ONE tier after RECOVER_STREAK
50
+ * clean frames.
51
+ */
52
+ export declare function feedGovernor(state: GovernorState, durationMs: number): GovernorStep;
53
+ //# sourceMappingURL=governor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governor.d.ts","sourceRoot":"","sources":["../../../src/world/substrates/governor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,wEAAwE;AACxE,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAIjD,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,GAAE,MAA0B,GAAG,aAAa,CAExF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,CAS9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CA0BnF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * G3 — second substrate: the quality-governor rule set (EXPERIMENTAL, internal).
3
+ *
4
+ * PROVENANCE (stated plainly): this is a faithful core-local re-expression of the **shipped**
5
+ * `QualityGovernor` in `@fundamental-engine/dom` — same declared escalation table, same recovery
6
+ * streak, same overrun test (`duration > budget × 1.3`), same asymmetric hysteresis. It is a port, not
7
+ * the shipped module, because `core` must never import `dom` (strict dependency direction) and core's
8
+ * package `exports` map is closed, so the shipped class is unreachable from here. The port exists so the
9
+ * second substrate can be adapted to `DynamicsContract` **inside core**, alongside the field adapter,
10
+ * without exporting any new public surface. Its limitation is recorded in the phase findings.
11
+ *
12
+ * Why this substrate: it contrasts with the field on every axis the contract measures —
13
+ * discrete threshold transitions (not continuous integration),
14
+ * history-dependent streak state with ASYMMETRIC hysteresis (escalate fast, recover slow),
15
+ * a transition law that is a DECLARED TABLE rather than opaque code,
16
+ * fully surfaced, fully restorable state,
17
+ * exact determinism with no clock and no RNG.
18
+ *
19
+ * Expressed as pure functions: state in → state out. No class, no hidden mutable capture.
20
+ */
21
+ /** The declared transition law (mirrors the shipped ESCALATE table). */
22
+ export const ESCALATE_RULES = [
23
+ { aboveMs: 20, streak: 10, tier: 1 },
24
+ { aboveMs: 33, streak: 5, tier: 2 },
25
+ { aboveMs: 50, streak: 3, tier: 3 },
26
+ ];
27
+ /** Clean frames required before dropping one tier (asymmetric recovery). */
28
+ export const RECOVER_STREAK = 30;
29
+ export const DEFAULT_BUDGET_MS = 16.67;
30
+ export function initialGovernorState(budgetMs = DEFAULT_BUDGET_MS) {
31
+ return { tier: 0, overrunStreak: 0, cleanStreak: 0, budgetMs };
32
+ }
33
+ /** Structural check used by `restore` — a snapshot payload must be a real governor state. */
34
+ export function isGovernorState(v) {
35
+ if (typeof v !== 'object' || v === null)
36
+ return false;
37
+ const s = v;
38
+ return ((s.tier === 0 || s.tier === 1 || s.tier === 2 || s.tier === 3) &&
39
+ typeof s.overrunStreak === 'number' &&
40
+ typeof s.cleanStreak === 'number' &&
41
+ typeof s.budgetMs === 'number');
42
+ }
43
+ /**
44
+ * Advance one frame. Pure: returns the next state and whether the tier changed.
45
+ * Mirrors the shipped governor exactly — escalation checks rules in order and takes the first that
46
+ * both exceeds its threshold and has met its streak; recovery drops ONE tier after RECOVER_STREAK
47
+ * clean frames.
48
+ */
49
+ export function feedGovernor(state, durationMs) {
50
+ const overrun = durationMs > state.budgetMs * 1.3;
51
+ if (overrun) {
52
+ const overrunStreak = state.overrunStreak + 1;
53
+ for (const rule of ESCALATE_RULES) {
54
+ if (durationMs > rule.aboveMs && overrunStreak >= rule.streak && state.tier < rule.tier) {
55
+ return {
56
+ state: { ...state, tier: rule.tier, overrunStreak, cleanStreak: 0 },
57
+ changed: rule.tier,
58
+ };
59
+ }
60
+ }
61
+ return { state: { ...state, overrunStreak, cleanStreak: 0 }, changed: undefined };
62
+ }
63
+ if (state.tier > 0) {
64
+ const cleanStreak = state.cleanStreak + 1;
65
+ if (cleanStreak >= RECOVER_STREAK) {
66
+ const tier = Math.max(0, state.tier - 1);
67
+ return { state: { ...state, tier, overrunStreak: 0, cleanStreak: 0 }, changed: tier };
68
+ }
69
+ return { state: { ...state, overrunStreak: 0, cleanStreak }, changed: undefined };
70
+ }
71
+ return { state: { ...state, overrunStreak: 0, cleanStreak: 0 }, changed: undefined };
72
+ }
73
+ //# sourceMappingURL=governor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governor.js","sourceRoot":"","sources":["../../../src/world/substrates/governor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Conformance-corpus substrate: a best-first search planner (EXPERIMENTAL, internal).
3
+ *
4
+ * Written from search semantics, with the API a planner library would naturally have — a weighted
5
+ * graph, a frontier, an explored set, one expansion per step, and a plan extracted at the end. It has
6
+ * NO knowledge of `DynamicsContract`; per the corpus protocol it is committed before its adapter exists
7
+ * and may not be edited to make that adapter cleaner.
8
+ *
9
+ * Its role in the corpus is the **falsification candidate**, for two reasons:
10
+ *
11
+ * 1. It is the first corpus substrate that FINISHES. The field simulates indefinitely and the governor
12
+ * consumes frames indefinitely; neither ever reaches a state where asking for another transition is
13
+ * meaningless. A search does: the frontier empties, or the goal is found.
14
+ * 2. Its transition law is only PARTIALLY declarable. Expansion order and edge costs are a table; the
15
+ * `euclidean` heuristic is computed in code and cannot be written down as rules.
16
+ *
17
+ * Determinism is exact: the frontier is ordered by (priority, node id), so ties break by name rather
18
+ * than by insertion accident. No clock, no RNG.
19
+ */
20
+ export interface PlannerNode {
21
+ readonly id: string;
22
+ readonly x?: number;
23
+ readonly y?: number;
24
+ }
25
+ export interface PlannerEdge {
26
+ readonly from: string;
27
+ readonly to: string;
28
+ readonly cost: number;
29
+ }
30
+ /**
31
+ * A closed union — no callbacks. `zero` and `table` are expressible as data; `euclidean` is computed
32
+ * from coordinates in code and is NOT expressible as a rule table. That asymmetry is deliberate: it is
33
+ * what makes this substrate's law genuinely partial rather than merely large.
34
+ */
35
+ export type PlannerHeuristic = {
36
+ readonly kind: 'zero';
37
+ } | {
38
+ readonly kind: 'table';
39
+ readonly values: Readonly<Record<string, number>>;
40
+ } | {
41
+ readonly kind: 'euclidean';
42
+ };
43
+ export interface PlannerProblem {
44
+ readonly id: string;
45
+ readonly nodes: readonly PlannerNode[];
46
+ readonly edges: readonly PlannerEdge[];
47
+ readonly start: string;
48
+ readonly goal: string;
49
+ readonly heuristic: PlannerHeuristic;
50
+ }
51
+ export interface FrontierEntry {
52
+ readonly node: string;
53
+ readonly cost: number;
54
+ readonly priority: number;
55
+ }
56
+ /** `searching` is not a resting state — it means work remains. The other two are terminal. */
57
+ export type PlannerStatus = 'searching' | 'goal-reached' | 'exhausted';
58
+ export interface PlannerState {
59
+ readonly frontier: readonly FrontierEntry[];
60
+ readonly explored: readonly string[];
61
+ readonly cameFrom: Readonly<Record<string, string>>;
62
+ readonly costSoFar: Readonly<Record<string, number>>;
63
+ readonly status: PlannerStatus;
64
+ readonly expansions: number;
65
+ }
66
+ export interface PlannerStep {
67
+ readonly state: PlannerState;
68
+ /** The node expanded this step, absent when the search was already finished. */
69
+ readonly expanded?: string;
70
+ readonly status: PlannerStatus;
71
+ }
72
+ export declare function isTerminal(status: PlannerStatus): boolean;
73
+ export declare function initialPlannerState(problem: PlannerProblem): PlannerState;
74
+ export declare function isPlannerState(v: unknown): v is PlannerState;
75
+ /**
76
+ * Expand exactly one node. Asking a finished search to expand is not an error and not progress — the
77
+ * state is returned unchanged with its terminal status, and no node is reported as expanded.
78
+ */
79
+ export declare function expandPlanner(problem: PlannerProblem, state: PlannerState): PlannerStep;
80
+ /** The plan, once the goal was reached. `undefined` while searching or when exhausted. */
81
+ export declare function extractPlan(problem: PlannerProblem, state: PlannerState): readonly string[] | undefined;
82
+ //# sourceMappingURL=planner.d.ts.map