universal-physics-tensor 9.0.0 → 10.0.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 (824) hide show
  1. package/README.md +19 -16
  2. package/data/atlas/atlas.json +55 -44
  3. package/data/atlas/atlas.jsonld +1 -1
  4. package/data/atlas/diffusion.json +19 -18
  5. package/data/atlas/oscillators.json +15 -10
  6. package/data/atlas/waves.json +23 -18
  7. package/data/bridge-catalog.json +886 -1473
  8. package/data/bridge-catalog.schema.json +349 -132
  9. package/data/quantities.json +53 -19
  10. package/data/schemas/atlas-record.v0.json +184 -46
  11. package/data/units.json +33 -4
  12. package/dist/atlas/applicability.d.ts.map +1 -1
  13. package/dist/atlas/applicability.js +14 -3
  14. package/dist/atlas/applicability.js.map +1 -1
  15. package/dist/atlas/association.js.map +1 -1
  16. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  17. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  18. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  19. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  20. package/dist/atlas/benchmark/baselines.js +8 -0
  21. package/dist/atlas/benchmark/baselines.js.map +1 -1
  22. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +3 -2
  23. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -8
  25. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  26. package/dist/atlas/benchmark/leakage.js.map +1 -1
  27. package/dist/atlas/benchmark/loader.js.map +1 -1
  28. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  29. package/dist/atlas/benchmark/run-atlas.js +14 -2
  30. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  31. package/dist/atlas/benchmark/stats.d.ts +1 -1
  32. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  33. package/dist/atlas/benchmark/stats.js +1 -1
  34. package/dist/atlas/benchmark/stats.js.map +1 -1
  35. package/dist/atlas/benchmark/study.js.map +1 -1
  36. package/dist/atlas/benchmark/types.js.map +1 -1
  37. package/dist/atlas/bridge-record.d.ts +4 -4
  38. package/dist/atlas/bridge-record.d.ts.map +1 -1
  39. package/dist/atlas/bridge-record.js +6 -6
  40. package/dist/atlas/bridge-record.js.map +1 -1
  41. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  42. package/dist/atlas/chain-pipeline.d.ts +0 -11
  43. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  44. package/dist/atlas/chain-pipeline.js +5 -16
  45. package/dist/atlas/chain-pipeline.js.map +1 -1
  46. package/dist/atlas/composition-table.js.map +1 -1
  47. package/dist/atlas/conventions.js.map +1 -1
  48. package/dist/atlas/coverage.d.ts +2 -2
  49. package/dist/atlas/coverage.js.map +1 -1
  50. package/dist/atlas/derivation.js.map +1 -1
  51. package/dist/atlas/derive-evidence.d.ts +6 -4
  52. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  53. package/dist/atlas/derive-evidence.js +7 -2
  54. package/dist/atlas/derive-evidence.js.map +1 -1
  55. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  56. package/dist/atlas/diffusion/bridges-closure.js +0 -5
  57. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  58. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  59. package/dist/atlas/diffusion/bridges.js +0 -3
  60. package/dist/atlas/diffusion/bridges.js.map +1 -1
  61. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  62. package/dist/atlas/diffusion/index.d.ts +1 -1
  63. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  64. package/dist/atlas/diffusion/index.js.map +1 -1
  65. package/dist/atlas/diffusion/models.js.map +1 -1
  66. package/dist/atlas/diffusion/numerics.js.map +1 -1
  67. package/dist/atlas/error-algebra.d.ts +6 -0
  68. package/dist/atlas/error-algebra.d.ts.map +1 -1
  69. package/dist/atlas/error-algebra.js +26 -0
  70. package/dist/atlas/error-algebra.js.map +1 -1
  71. package/dist/atlas/export.d.ts +18 -2
  72. package/dist/atlas/export.d.ts.map +1 -1
  73. package/dist/atlas/export.js +9 -3
  74. package/dist/atlas/export.js.map +1 -1
  75. package/dist/atlas/families.d.ts +19 -2
  76. package/dist/atlas/families.d.ts.map +1 -1
  77. package/dist/atlas/families.js +26 -3
  78. package/dist/atlas/families.js.map +1 -1
  79. package/dist/atlas/family.d.ts +27 -0
  80. package/dist/atlas/family.d.ts.map +1 -0
  81. package/dist/atlas/family.js +12 -0
  82. package/dist/atlas/family.js.map +1 -0
  83. package/dist/atlas/index.d.ts +3 -2
  84. package/dist/atlas/index.d.ts.map +1 -1
  85. package/dist/atlas/index.js +2 -1
  86. package/dist/atlas/index.js.map +1 -1
  87. package/dist/atlas/link-prediction.d.ts +1 -1
  88. package/dist/atlas/link-prediction.d.ts.map +1 -1
  89. package/dist/atlas/link-prediction.js.map +1 -1
  90. package/dist/atlas/model.js.map +1 -1
  91. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/bridges-coarse.js +0 -1
  93. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  94. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  95. package/dist/atlas/oscillators/bridges-exact.js +0 -3
  96. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  97. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  98. package/dist/atlas/oscillators/bridges-limits.js +0 -2
  99. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  100. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  101. package/dist/atlas/oscillators/index.d.ts +1 -16
  102. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  103. package/dist/atlas/oscillators/index.js.map +1 -1
  104. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  105. package/dist/atlas/oscillators/models.js.map +1 -1
  106. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  107. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  108. package/dist/atlas/oscillators/norms.js.map +1 -1
  109. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  110. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  111. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  112. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  113. package/dist/atlas/oscillators/rejections.js.map +1 -1
  114. package/dist/atlas/path-bound.js.map +1 -1
  115. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  116. package/dist/atlas/physjs-ref.d.ts +79 -45
  117. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  118. package/dist/atlas/physjs-ref.js +143 -62
  119. package/dist/atlas/physjs-ref.js.map +1 -1
  120. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  121. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  122. package/dist/atlas/physjs-reviewed.js +194 -0
  123. package/dist/atlas/physjs-reviewed.js.map +1 -0
  124. package/dist/atlas/poster/associations.js.map +1 -1
  125. package/dist/atlas/poster/derivations.js.map +1 -1
  126. package/dist/atlas/poster/statements.js.map +1 -1
  127. package/dist/atlas/proof-target.js.map +1 -1
  128. package/dist/atlas/public.d.ts +2 -1
  129. package/dist/atlas/public.d.ts.map +1 -1
  130. package/dist/atlas/public.js +2 -1
  131. package/dist/atlas/public.js.map +1 -1
  132. package/dist/atlas/regime.js.map +1 -1
  133. package/dist/atlas/serialize.d.ts +18 -12
  134. package/dist/atlas/serialize.d.ts.map +1 -1
  135. package/dist/atlas/serialize.js +28 -18
  136. package/dist/atlas/serialize.js.map +1 -1
  137. package/dist/atlas/statement.js.map +1 -1
  138. package/dist/atlas/translation-registry.js.map +1 -1
  139. package/dist/atlas/translation.js.map +1 -1
  140. package/dist/atlas/types.d.ts +9 -2
  141. package/dist/atlas/types.d.ts.map +1 -1
  142. package/dist/atlas/types.js +1 -1
  143. package/dist/atlas/types.js.map +1 -1
  144. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  145. package/dist/atlas/waves/bridges-closure.js +0 -3
  146. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  147. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  148. package/dist/atlas/waves/bridges.js +0 -4
  149. package/dist/atlas/waves/bridges.js.map +1 -1
  150. package/dist/atlas/waves/index.d.ts +1 -1
  151. package/dist/atlas/waves/index.d.ts.map +1 -1
  152. package/dist/atlas/waves/index.js.map +1 -1
  153. package/dist/atlas/waves/models.js.map +1 -1
  154. package/dist/atlas/waves/numerics.js.map +1 -1
  155. package/dist/atlas/witness-artifact.js.map +1 -1
  156. package/dist/atlas/witness-dominance.d.ts +4 -3
  157. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  158. package/dist/atlas/witness-dominance.js +15 -5
  159. package/dist/atlas/witness-dominance.js.map +1 -1
  160. package/dist/atlas/witness-numeric.d.ts +8 -4
  161. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  162. package/dist/atlas/witness-numeric.js +27 -2
  163. package/dist/atlas/witness-numeric.js.map +1 -1
  164. package/dist/atlas/witness-result.d.ts +7 -1
  165. package/dist/atlas/witness-result.d.ts.map +1 -1
  166. package/dist/atlas/witness-result.js.map +1 -1
  167. package/dist/atlas/witness-specs.js.map +1 -1
  168. package/dist/atlas/witness-symbolic.js.map +1 -1
  169. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  170. package/dist/bridges/caller-table.d.ts +1 -1
  171. package/dist/bridges/caller-table.d.ts.map +1 -1
  172. package/dist/bridges/caller-table.js.map +1 -1
  173. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  174. package/dist/bridges/carrier-sign.js +8 -3
  175. package/dist/bridges/carrier-sign.js.map +1 -1
  176. package/dist/bridges/catalog-adapter.d.ts +12 -3
  177. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  178. package/dist/bridges/catalog-adapter.js +17 -9
  179. package/dist/bridges/catalog-adapter.js.map +1 -1
  180. package/dist/bridges/catalog-load.d.ts +12 -2
  181. package/dist/bridges/catalog-load.d.ts.map +1 -1
  182. package/dist/bridges/catalog-load.js +171 -8
  183. package/dist/bridges/catalog-load.js.map +1 -1
  184. package/dist/bridges/catalog-types.d.ts +48 -24
  185. package/dist/bridges/catalog-types.d.ts.map +1 -1
  186. package/dist/bridges/catalog-types.js.map +1 -1
  187. package/dist/bridges/coefficient-statement.js +1 -5
  188. package/dist/bridges/coefficient-statement.js.map +1 -1
  189. package/dist/bridges/confrontation-coverage.js.map +1 -1
  190. package/dist/bridges/confrontations.d.ts +1 -1
  191. package/dist/bridges/confrontations.d.ts.map +1 -1
  192. package/dist/bridges/confrontations.js +1 -1
  193. package/dist/bridges/confrontations.js.map +1 -1
  194. package/dist/bridges/evaluation-errors.d.ts +15 -2
  195. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  196. package/dist/bridges/evaluation-errors.js +20 -2
  197. package/dist/bridges/evaluation-errors.js.map +1 -1
  198. package/dist/bridges/evaluator-inputs.js.map +1 -1
  199. package/dist/bridges/evaluators.d.ts +17 -2
  200. package/dist/bridges/evaluators.d.ts.map +1 -1
  201. package/dist/bridges/evaluators.js +49 -16
  202. package/dist/bridges/evaluators.js.map +1 -1
  203. package/dist/bridges/expr-parse.d.ts +27 -4
  204. package/dist/bridges/expr-parse.d.ts.map +1 -1
  205. package/dist/bridges/expr-parse.js +90 -10
  206. package/dist/bridges/expr-parse.js.map +1 -1
  207. package/dist/bridges/holds.d.ts +5 -1
  208. package/dist/bridges/holds.d.ts.map +1 -1
  209. package/dist/bridges/holds.js +18 -3
  210. package/dist/bridges/holds.js.map +1 -1
  211. package/dist/bridges/index.d.ts +15 -14
  212. package/dist/bridges/index.d.ts.map +1 -1
  213. package/dist/bridges/index.js +14 -15
  214. package/dist/bridges/index.js.map +1 -1
  215. package/dist/bridges/input-contract.js.map +1 -1
  216. package/dist/bridges/membership.d.ts +5 -3
  217. package/dist/bridges/membership.d.ts.map +1 -1
  218. package/dist/bridges/membership.js +5 -6
  219. package/dist/bridges/membership.js.map +1 -1
  220. package/dist/bridges/notices.js.map +1 -1
  221. package/dist/bridges/observations/types.js.map +1 -1
  222. package/dist/bridges/rejected.d.ts +11 -17
  223. package/dist/bridges/rejected.d.ts.map +1 -1
  224. package/dist/bridges/rejected.js +13 -68
  225. package/dist/bridges/rejected.js.map +1 -1
  226. package/dist/bridges/relation-eval.d.ts +5 -6
  227. package/dist/bridges/relation-eval.d.ts.map +1 -1
  228. package/dist/bridges/relation-eval.js +9 -38
  229. package/dist/bridges/relation-eval.js.map +1 -1
  230. package/dist/bridges/rhs-registry.js.map +1 -1
  231. package/dist/bridges/sensitivity.d.ts +11 -3
  232. package/dist/bridges/sensitivity.d.ts.map +1 -1
  233. package/dist/bridges/sensitivity.js +24 -10
  234. package/dist/bridges/sensitivity.js.map +1 -1
  235. package/dist/bridges/tensor-index.js.map +1 -1
  236. package/dist/bridges/types.d.ts +1 -7
  237. package/dist/bridges/types.d.ts.map +1 -1
  238. package/dist/bridges/types.js +1 -4
  239. package/dist/bridges/types.js.map +1 -1
  240. package/dist/canonical/canonical-equation.js.map +1 -1
  241. package/dist/canonical/dimensional-fields.js.map +1 -1
  242. package/dist/canonical/entries/_l1-build.js.map +1 -1
  243. package/dist/canonical/entries/atomic.js.map +1 -1
  244. package/dist/canonical/entries/condensed-matter.js +4 -4
  245. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  246. package/dist/canonical/entries/dimensional-classics.js +2 -2
  247. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  248. package/dist/canonical/entries/electromagnetism.js +2 -2
  249. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  250. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  251. package/dist/canonical/entries/mechanics.js.map +1 -1
  252. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  253. package/dist/canonical/entries/nonmonomial.js +29 -22
  254. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  255. package/dist/canonical/entries/relativity.js.map +1 -1
  256. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  257. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  258. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  259. package/dist/canonical/linkage.d.ts +29 -4
  260. package/dist/canonical/linkage.d.ts.map +1 -1
  261. package/dist/canonical/linkage.js +31 -29
  262. package/dist/canonical/linkage.js.map +1 -1
  263. package/dist/canonical/normal-form.d.ts +0 -8
  264. package/dist/canonical/normal-form.d.ts.map +1 -1
  265. package/dist/canonical/normal-form.js +17 -12
  266. package/dist/canonical/normal-form.js.map +1 -1
  267. package/dist/canonical/registry.js.map +1 -1
  268. package/dist/canonical/residual.js.map +1 -1
  269. package/dist/canonical/seed-l-layer.d.ts +7 -1
  270. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  271. package/dist/canonical/seed-l-layer.js +7 -1
  272. package/dist/canonical/seed-l-layer.js.map +1 -1
  273. package/dist/canonical/structural.d.ts +21 -0
  274. package/dist/canonical/structural.d.ts.map +1 -1
  275. package/dist/canonical/structural.js +24 -4
  276. package/dist/canonical/structural.js.map +1 -1
  277. package/dist/cases/brownian-sphere.js +4 -4
  278. package/dist/cases/brownian-sphere.js.map +1 -1
  279. package/dist/cases/damped-resonator.js +2 -2
  280. package/dist/cases/damped-resonator.js.map +1 -1
  281. package/dist/cases/index.js.map +1 -1
  282. package/dist/cases/kepler-rv.js.map +1 -1
  283. package/dist/cases/lumped-cooling.js +1 -1
  284. package/dist/cases/lumped-cooling.js.map +1 -1
  285. package/dist/cases/quadrature.js.map +1 -1
  286. package/dist/cases/resistor-noise.js +3 -3
  287. package/dist/cases/resistor-noise.js.map +1 -1
  288. package/dist/cases/skin-depth.js.map +1 -1
  289. package/dist/cases/types.js.map +1 -1
  290. package/dist/cli/args.d.ts +7 -2
  291. package/dist/cli/args.d.ts.map +1 -1
  292. package/dist/cli/args.js +18 -2
  293. package/dist/cli/args.js.map +1 -1
  294. package/dist/cli/bindings.d.ts +13 -0
  295. package/dist/cli/bindings.d.ts.map +1 -0
  296. package/dist/cli/bindings.js +32 -0
  297. package/dist/cli/bindings.js.map +1 -0
  298. package/dist/cli/closed-form-range.js.map +1 -1
  299. package/dist/cli/command.js.map +1 -1
  300. package/dist/cli/commands/_atlas-map.d.ts +3 -3
  301. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  302. package/dist/cli/commands/_atlas-map.js +43 -18
  303. package/dist/cli/commands/_atlas-map.js.map +1 -1
  304. package/dist/cli/commands/_atlas-route.js.map +1 -1
  305. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  306. package/dist/cli/commands/_discovery-opts.js +42 -7
  307. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  308. package/dist/cli/commands/atlas.d.ts.map +1 -1
  309. package/dist/cli/commands/atlas.js +1 -3
  310. package/dist/cli/commands/atlas.js.map +1 -1
  311. package/dist/cli/commands/audit.d.ts.map +1 -1
  312. package/dist/cli/commands/audit.js +13 -20
  313. package/dist/cli/commands/audit.js.map +1 -1
  314. package/dist/cli/commands/axes.js.map +1 -1
  315. package/dist/cli/commands/candidates.d.ts.map +1 -1
  316. package/dist/cli/commands/candidates.js +16 -8
  317. package/dist/cli/commands/candidates.js.map +1 -1
  318. package/dist/cli/commands/canonical.js.map +1 -1
  319. package/dist/cli/commands/chain.js +1 -1
  320. package/dist/cli/commands/chain.js.map +1 -1
  321. package/dist/cli/commands/confront.d.ts.map +1 -1
  322. package/dist/cli/commands/confront.js +22 -14
  323. package/dist/cli/commands/confront.js.map +1 -1
  324. package/dist/cli/commands/connectors.js.map +1 -1
  325. package/dist/cli/commands/coverage.js.map +1 -1
  326. package/dist/cli/commands/derive.d.ts.map +1 -1
  327. package/dist/cli/commands/derive.js +42 -17
  328. package/dist/cli/commands/derive.js.map +1 -1
  329. package/dist/cli/commands/discover.d.ts.map +1 -1
  330. package/dist/cli/commands/discover.js +15 -9
  331. package/dist/cli/commands/discover.js.map +1 -1
  332. package/dist/cli/commands/eval.d.ts.map +1 -1
  333. package/dist/cli/commands/eval.js +13 -10
  334. package/dist/cli/commands/eval.js.map +1 -1
  335. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  336. package/dist/cli/commands/evaluate.js +53 -31
  337. package/dist/cli/commands/evaluate.js.map +1 -1
  338. package/dist/cli/commands/explain.d.ts.map +1 -1
  339. package/dist/cli/commands/explain.js +14 -7
  340. package/dist/cli/commands/explain.js.map +1 -1
  341. package/dist/cli/commands/frontier.js.map +1 -1
  342. package/dist/cli/commands/ground.d.ts.map +1 -1
  343. package/dist/cli/commands/ground.js +40 -10
  344. package/dist/cli/commands/ground.js.map +1 -1
  345. package/dist/cli/commands/index.js.map +1 -1
  346. package/dist/cli/commands/map.d.ts.map +1 -1
  347. package/dist/cli/commands/map.js +82 -89
  348. package/dist/cli/commands/map.js.map +1 -1
  349. package/dist/cli/commands/metric.d.ts.map +1 -1
  350. package/dist/cli/commands/metric.js +53 -18
  351. package/dist/cli/commands/metric.js.map +1 -1
  352. package/dist/cli/commands/path.js +4 -4
  353. package/dist/cli/commands/path.js.map +1 -1
  354. package/dist/cli/commands/predict.js.map +1 -1
  355. package/dist/cli/commands/priority.js.map +1 -1
  356. package/dist/cli/commands/probe.d.ts.map +1 -1
  357. package/dist/cli/commands/probe.js +50 -26
  358. package/dist/cli/commands/probe.js.map +1 -1
  359. package/dist/cli/commands/recover.js +1 -1
  360. package/dist/cli/commands/recover.js.map +1 -1
  361. package/dist/cli/commands/regime.d.ts +5 -4
  362. package/dist/cli/commands/regime.d.ts.map +1 -1
  363. package/dist/cli/commands/regime.js +24 -26
  364. package/dist/cli/commands/regime.js.map +1 -1
  365. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  366. package/dist/cli/commands/retrieve.js +22 -14
  367. package/dist/cli/commands/retrieve.js.map +1 -1
  368. package/dist/cli/commands/search.d.ts.map +1 -1
  369. package/dist/cli/commands/search.js +8 -4
  370. package/dist/cli/commands/search.js.map +1 -1
  371. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  372. package/dist/cli/commands/symbolic.js +13 -9
  373. package/dist/cli/commands/symbolic.js.map +1 -1
  374. package/dist/cli/commands/testplan.js +1 -1
  375. package/dist/cli/commands/testplan.js.map +1 -1
  376. package/dist/cli/conventions.js.map +1 -1
  377. package/dist/cli/determination.js.map +1 -1
  378. package/dist/cli/errors.js.map +1 -1
  379. package/dist/cli/euler-guard.js.map +1 -1
  380. package/dist/cli/eval-numbers.js.map +1 -1
  381. package/dist/cli/expr-print.d.ts +29 -2
  382. package/dist/cli/expr-print.d.ts.map +1 -1
  383. package/dist/cli/expr-print.js +46 -2
  384. package/dist/cli/expr-print.js.map +1 -1
  385. package/dist/cli/flag-help.js.map +1 -1
  386. package/dist/cli/graphs.js.map +1 -1
  387. package/dist/cli/library-defaults.d.ts +19 -0
  388. package/dist/cli/library-defaults.d.ts.map +1 -0
  389. package/dist/cli/library-defaults.js +22 -0
  390. package/dist/cli/library-defaults.js.map +1 -0
  391. package/dist/cli/main.js +7 -3
  392. package/dist/cli/main.js.map +1 -1
  393. package/dist/cli/map-evidence.js.map +1 -1
  394. package/dist/cli/output.d.ts +3 -6
  395. package/dist/cli/output.d.ts.map +1 -1
  396. package/dist/cli/output.js.map +1 -1
  397. package/dist/cli/published-url.js.map +1 -1
  398. package/dist/cli/record-reach.d.ts +6 -0
  399. package/dist/cli/record-reach.d.ts.map +1 -1
  400. package/dist/cli/record-reach.js +16 -10
  401. package/dist/cli/record-reach.js.map +1 -1
  402. package/dist/cli/record-tables.js +1 -1
  403. package/dist/cli/record-tables.js.map +1 -1
  404. package/dist/cli/record.d.ts.map +1 -1
  405. package/dist/cli/record.js +31 -12
  406. package/dist/cli/record.js.map +1 -1
  407. package/dist/cli/search-index.d.ts +5 -0
  408. package/dist/cli/search-index.d.ts.map +1 -1
  409. package/dist/cli/search-index.js +12 -1
  410. package/dist/cli/search-index.js.map +1 -1
  411. package/dist/cli/statuses.js.map +1 -1
  412. package/dist/cli/top-level-help.js.map +1 -1
  413. package/dist/cli/version.js.map +1 -1
  414. package/dist/cli-api.d.ts +15 -9
  415. package/dist/cli-api.d.ts.map +1 -1
  416. package/dist/cli-api.js +14 -13
  417. package/dist/cli-api.js.map +1 -1
  418. package/dist/composition/adjudication.js.map +1 -1
  419. package/dist/composition/aliases.js.map +1 -1
  420. package/dist/composition/audit-coverage.d.ts +2 -0
  421. package/dist/composition/audit-coverage.d.ts.map +1 -1
  422. package/dist/composition/audit-coverage.js.map +1 -1
  423. package/dist/composition/axes.d.ts +12 -0
  424. package/dist/composition/axes.d.ts.map +1 -1
  425. package/dist/composition/axes.js +18 -6
  426. package/dist/composition/axes.js.map +1 -1
  427. package/dist/composition/axis-audit.js.map +1 -1
  428. package/dist/composition/bridge-analysis.d.ts +0 -18
  429. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  430. package/dist/composition/bridge-analysis.js +57 -47
  431. package/dist/composition/bridge-analysis.js.map +1 -1
  432. package/dist/composition/bridge-prediction.d.ts +5 -1
  433. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  434. package/dist/composition/bridge-prediction.js +12 -16
  435. package/dist/composition/bridge-prediction.js.map +1 -1
  436. package/dist/composition/buckingham-filter.js.map +1 -1
  437. package/dist/composition/canonical-compare.d.ts.map +1 -1
  438. package/dist/composition/canonical-compare.js +12 -2
  439. package/dist/composition/canonical-compare.js.map +1 -1
  440. package/dist/composition/canonical-graph.d.ts +8 -9
  441. package/dist/composition/canonical-graph.d.ts.map +1 -1
  442. package/dist/composition/canonical-graph.js +25 -67
  443. package/dist/composition/canonical-graph.js.map +1 -1
  444. package/dist/composition/canonical-json.js.map +1 -1
  445. package/dist/composition/canonical-prefactors.js.map +1 -1
  446. package/dist/composition/catalog-graph.d.ts.map +1 -1
  447. package/dist/composition/catalog-graph.js +6 -20
  448. package/dist/composition/catalog-graph.js.map +1 -1
  449. package/dist/composition/chain-candidate.d.ts +2 -0
  450. package/dist/composition/chain-candidate.d.ts.map +1 -1
  451. package/dist/composition/chain-candidate.js +2 -0
  452. package/dist/composition/chain-candidate.js.map +1 -1
  453. package/dist/composition/chain-match.js.map +1 -1
  454. package/dist/composition/chain-regime.js.map +1 -1
  455. package/dist/composition/chain-result.js.map +1 -1
  456. package/dist/composition/compose-surface.js.map +1 -1
  457. package/dist/composition/compose-symbolic.js.map +1 -1
  458. package/dist/composition/compose.d.ts.map +1 -1
  459. package/dist/composition/compose.js +153 -36
  460. package/dist/composition/compose.js.map +1 -1
  461. package/dist/composition/composition-recovery.js.map +1 -1
  462. package/dist/composition/consequence.d.ts.map +1 -1
  463. package/dist/composition/consequence.js +15 -6
  464. package/dist/composition/consequence.js.map +1 -1
  465. package/dist/composition/consistency.js.map +1 -1
  466. package/dist/composition/descriptor.d.ts +1 -1
  467. package/dist/composition/descriptor.d.ts.map +1 -1
  468. package/dist/composition/descriptor.js.map +1 -1
  469. package/dist/composition/dimension-adjacency.js.map +1 -1
  470. package/dist/composition/discovery.d.ts +21 -11
  471. package/dist/composition/discovery.d.ts.map +1 -1
  472. package/dist/composition/discovery.js +81 -21
  473. package/dist/composition/discovery.js.map +1 -1
  474. package/dist/composition/edge.d.ts +19 -8
  475. package/dist/composition/edge.d.ts.map +1 -1
  476. package/dist/composition/edge.js +24 -11
  477. package/dist/composition/edge.js.map +1 -1
  478. package/dist/composition/enumerate.d.ts +2 -2
  479. package/dist/composition/enumerate.d.ts.map +1 -1
  480. package/dist/composition/enumerate.js.map +1 -1
  481. package/dist/composition/evaluate-relation.js.map +1 -1
  482. package/dist/composition/explain.d.ts +14 -9
  483. package/dist/composition/explain.d.ts.map +1 -1
  484. package/dist/composition/explain.js +46 -13
  485. package/dist/composition/explain.js.map +1 -1
  486. package/dist/composition/expr-eval.js.map +1 -1
  487. package/dist/composition/expr-simplify.d.ts.map +1 -1
  488. package/dist/composition/expr-simplify.js +9 -39
  489. package/dist/composition/expr-simplify.js.map +1 -1
  490. package/dist/composition/expr-subst.js.map +1 -1
  491. package/dist/composition/formula-shape.d.ts +9 -0
  492. package/dist/composition/formula-shape.d.ts.map +1 -1
  493. package/dist/composition/formula-shape.js +54 -0
  494. package/dist/composition/formula-shape.js.map +1 -1
  495. package/dist/composition/frontier-account.d.ts +3 -2
  496. package/dist/composition/frontier-account.d.ts.map +1 -1
  497. package/dist/composition/frontier-account.js +7 -3
  498. package/dist/composition/frontier-account.js.map +1 -1
  499. package/dist/composition/graph-viz-svg.js.map +1 -1
  500. package/dist/composition/graph-viz.js.map +1 -1
  501. package/dist/composition/grounding.js.map +1 -1
  502. package/dist/composition/identifiability.js.map +1 -1
  503. package/dist/composition/index.d.ts +6 -4
  504. package/dist/composition/index.d.ts.map +1 -1
  505. package/dist/composition/index.js +4 -3
  506. package/dist/composition/index.js.map +1 -1
  507. package/dist/composition/mathts-quiet.d.ts +28 -0
  508. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  509. package/dist/composition/mathts-quiet.js +56 -0
  510. package/dist/composition/mathts-quiet.js.map +1 -0
  511. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  512. package/dist/composition/mathts-scalar-symbols.js +18 -34
  513. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  514. package/dist/composition/not-composable-seeds.d.ts +3 -1
  515. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  516. package/dist/composition/not-composable-seeds.js +2 -0
  517. package/dist/composition/not-composable-seeds.js.map +1 -1
  518. package/dist/composition/probe/backend-protocol.js.map +1 -1
  519. package/dist/composition/probe/candidate-store.js.map +1 -1
  520. package/dist/composition/probe/corpus.js.map +1 -1
  521. package/dist/composition/probe/dataset.js.map +1 -1
  522. package/dist/composition/probe/experiment-design.js.map +1 -1
  523. package/dist/composition/probe/expression-gaps.js.map +1 -1
  524. package/dist/composition/probe/falsify.d.ts +14 -3
  525. package/dist/composition/probe/falsify.d.ts.map +1 -1
  526. package/dist/composition/probe/falsify.js +14 -27
  527. package/dist/composition/probe/falsify.js.map +1 -1
  528. package/dist/composition/probe/fingerprint.js.map +1 -1
  529. package/dist/composition/probe/fit.d.ts +1 -1
  530. package/dist/composition/probe/fit.d.ts.map +1 -1
  531. package/dist/composition/probe/fit.js +2 -1
  532. package/dist/composition/probe/fit.js.map +1 -1
  533. package/dist/composition/probe/frontier.js.map +1 -1
  534. package/dist/composition/probe/generator.js.map +1 -1
  535. package/dist/composition/probe/index.d.ts +4 -2
  536. package/dist/composition/probe/index.d.ts.map +1 -1
  537. package/dist/composition/probe/index.js +4 -2
  538. package/dist/composition/probe/index.js.map +1 -1
  539. package/dist/composition/probe/limits.js.map +1 -1
  540. package/dist/composition/probe/metadata.js.map +1 -1
  541. package/dist/composition/probe/pipeline.d.ts +5 -0
  542. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  543. package/dist/composition/probe/pipeline.js +13 -6
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/problem.d.ts +8 -0
  546. package/dist/composition/probe/problem.d.ts.map +1 -1
  547. package/dist/composition/probe/problem.js +78 -12
  548. package/dist/composition/probe/problem.js.map +1 -1
  549. package/dist/composition/probe/report.js.map +1 -1
  550. package/dist/composition/probe/residual.js.map +1 -1
  551. package/dist/composition/probe/run-manifest.js +2 -2
  552. package/dist/composition/probe/run-manifest.js.map +1 -1
  553. package/dist/composition/probe/scoring.d.ts +2 -1
  554. package/dist/composition/probe/scoring.d.ts.map +1 -1
  555. package/dist/composition/probe/scoring.js +21 -7
  556. package/dist/composition/probe/scoring.js.map +1 -1
  557. package/dist/composition/probe/search-budget.js.map +1 -1
  558. package/dist/composition/probe/serialize.js.map +1 -1
  559. package/dist/composition/probe/structure.js.map +1 -1
  560. package/dist/composition/probe/study.d.ts +4 -3
  561. package/dist/composition/probe/study.d.ts.map +1 -1
  562. package/dist/composition/probe/study.js +5 -3
  563. package/dist/composition/probe/study.js.map +1 -1
  564. package/dist/composition/probe/types.d.ts +3 -1
  565. package/dist/composition/probe/types.d.ts.map +1 -1
  566. package/dist/composition/probe/types.js +2 -0
  567. package/dist/composition/probe/types.js.map +1 -1
  568. package/dist/composition/proposed-bridges.d.ts +11 -4
  569. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  570. package/dist/composition/proposed-bridges.js +11 -4
  571. package/dist/composition/proposed-bridges.js.map +1 -1
  572. package/dist/composition/quantities.d.ts +0 -4
  573. package/dist/composition/quantities.d.ts.map +1 -1
  574. package/dist/composition/quantities.js +5 -5
  575. package/dist/composition/quantities.js.map +1 -1
  576. package/dist/composition/quantity.d.ts +18 -2
  577. package/dist/composition/quantity.d.ts.map +1 -1
  578. package/dist/composition/quantity.js +35 -6
  579. package/dist/composition/quantity.js.map +1 -1
  580. package/dist/composition/representative-values.js.map +1 -1
  581. package/dist/composition/retrodiction.d.ts +16 -6
  582. package/dist/composition/retrodiction.d.ts.map +1 -1
  583. package/dist/composition/retrodiction.js +34 -9
  584. package/dist/composition/retrodiction.js.map +1 -1
  585. package/dist/composition/uncertainty.js.map +1 -1
  586. package/dist/composition/user-equation.js.map +1 -1
  587. package/dist/core/axes-registry.d.ts +8 -5
  588. package/dist/core/axes-registry.d.ts.map +1 -1
  589. package/dist/core/axes-registry.js.map +1 -1
  590. package/dist/core/cell.js.map +1 -1
  591. package/dist/core/constants.d.ts +8 -8
  592. package/dist/core/constants.d.ts.map +1 -1
  593. package/dist/core/constants.js +8 -10
  594. package/dist/core/constants.js.map +1 -1
  595. package/dist/core/data-file.js.map +1 -1
  596. package/dist/core/flux-rules.js +1 -1
  597. package/dist/core/flux-rules.js.map +1 -1
  598. package/dist/core/json-schema.d.ts +1 -1
  599. package/dist/core/json-schema.d.ts.map +1 -1
  600. package/dist/core/json-schema.js +31 -7
  601. package/dist/core/json-schema.js.map +1 -1
  602. package/dist/core/labeled-tensor.d.ts +6 -1
  603. package/dist/core/labeled-tensor.d.ts.map +1 -1
  604. package/dist/core/labeled-tensor.js +18 -8
  605. package/dist/core/labeled-tensor.js.map +1 -1
  606. package/dist/core/regime-registry.d.ts +6 -2
  607. package/dist/core/regime-registry.d.ts.map +1 -1
  608. package/dist/core/regime-registry.js.map +1 -1
  609. package/dist/core/regime-rule-install.js.map +1 -1
  610. package/dist/core/regimes-builtins.js.map +1 -1
  611. package/dist/core/tensor.d.ts +7 -4
  612. package/dist/core/tensor.d.ts.map +1 -1
  613. package/dist/core/tensor.js +40 -8
  614. package/dist/core/tensor.js.map +1 -1
  615. package/dist/core/types.js.map +1 -1
  616. package/dist/core/universal-index.js.map +1 -1
  617. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  618. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  619. package/dist/diff/bridge-ast-gradient.js +10 -6
  620. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  621. package/dist/diff/bridge-gradient.d.ts +24 -80
  622. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  623. package/dist/diff/bridge-gradient.js +21 -98
  624. package/dist/diff/bridge-gradient.js.map +1 -1
  625. package/dist/diff/bridge-specs.d.ts +16 -5
  626. package/dist/diff/bridge-specs.d.ts.map +1 -1
  627. package/dist/diff/bridge-specs.js +16 -4
  628. package/dist/diff/bridge-specs.js.map +1 -1
  629. package/dist/dimensional/algebra.js.map +1 -1
  630. package/dist/dimensional/ast-builders.d.ts +5 -4
  631. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  632. package/dist/dimensional/ast-builders.js +6 -5
  633. package/dist/dimensional/ast-builders.js.map +1 -1
  634. package/dist/dimensional/ast-types.js.map +1 -1
  635. package/dist/dimensional/bridge-check.js.map +1 -1
  636. package/dist/dimensional/buckingham.js.map +1 -1
  637. package/dist/dimensional/connection-validators.d.ts +2 -1
  638. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  639. package/dist/dimensional/connection-validators.js.map +1 -1
  640. package/dist/dimensional/connection.js.map +1 -1
  641. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  642. package/dist/dimensional/constant-rows.js +9 -5
  643. package/dist/dimensional/constant-rows.js.map +1 -1
  644. package/dist/dimensional/constants.d.ts +5 -6
  645. package/dist/dimensional/constants.d.ts.map +1 -1
  646. package/dist/dimensional/constants.js +5 -6
  647. package/dist/dimensional/constants.js.map +1 -1
  648. package/dist/dimensional/curvature-composite.js.map +1 -1
  649. package/dist/dimensional/curvature-invariants.js.map +1 -1
  650. package/dist/dimensional/curvature.js.map +1 -1
  651. package/dist/dimensional/dimension-inference.js.map +1 -1
  652. package/dist/dimensional/dimension-spec.d.ts +13 -7
  653. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  654. package/dist/dimensional/dimension-spec.js +49 -23
  655. package/dist/dimensional/dimension-spec.js.map +1 -1
  656. package/dist/dimensional/einstein-equation.js.map +1 -1
  657. package/dist/dimensional/errors.d.ts +3 -1
  658. package/dist/dimensional/errors.d.ts.map +1 -1
  659. package/dist/dimensional/errors.js +2 -2
  660. package/dist/dimensional/errors.js.map +1 -1
  661. package/dist/dimensional/exact-scale.js.map +1 -1
  662. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  663. package/dist/dimensional/formula-names.js.map +1 -1
  664. package/dist/dimensional/fresh-label.js.map +1 -1
  665. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  666. package/dist/dimensional/friedmann-equation.js +3 -3
  667. package/dist/dimensional/friedmann-equation.js.map +1 -1
  668. package/dist/dimensional/gauge-field.d.ts +2 -3
  669. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  670. package/dist/dimensional/gauge-field.js +0 -1
  671. package/dist/dimensional/gauge-field.js.map +1 -1
  672. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  673. package/dist/dimensional/hyphen-names.js +8 -0
  674. package/dist/dimensional/hyphen-names.js.map +1 -1
  675. package/dist/dimensional/killing-validators.js.map +1 -1
  676. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  677. package/dist/dimensional/metric-validators.d.ts +2 -1
  678. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  679. package/dist/dimensional/metric-validators.js.map +1 -1
  680. package/dist/dimensional/metric.js.map +1 -1
  681. package/dist/dimensional/natural-units.js.map +1 -1
  682. package/dist/dimensional/quantity-registry.d.ts +13 -0
  683. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  684. package/dist/dimensional/quantity-registry.js +14 -6
  685. package/dist/dimensional/quantity-registry.js.map +1 -1
  686. package/dist/dimensional/rg-flow.js.map +1 -1
  687. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  688. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  689. package/dist/dimensional/symbolic-constants.js +7 -2
  690. package/dist/dimensional/symbolic-constants.js.map +1 -1
  691. package/dist/dimensional/tensor-trace.js.map +1 -1
  692. package/dist/dimensional/tensor.js.map +1 -1
  693. package/dist/dimensional/types.js.map +1 -1
  694. package/dist/dimensional/unit-convention.d.ts +0 -2
  695. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  696. package/dist/dimensional/unit-convention.js +2 -2
  697. package/dist/dimensional/unit-convention.js.map +1 -1
  698. package/dist/dimensional/unit-data.d.ts.map +1 -1
  699. package/dist/dimensional/unit-data.js +9 -5
  700. package/dist/dimensional/unit-data.js.map +1 -1
  701. package/dist/dimensional/units.d.ts.map +1 -1
  702. package/dist/dimensional/units.js +38 -20
  703. package/dist/dimensional/units.js.map +1 -1
  704. package/dist/dimensional/validator-registry.js.map +1 -1
  705. package/dist/dimensional/validator.d.ts +0 -16
  706. package/dist/dimensional/validator.d.ts.map +1 -1
  707. package/dist/dimensional/validator.js +65 -29
  708. package/dist/dimensional/validator.js.map +1 -1
  709. package/dist/dimensional/weyl-validators.js.map +1 -1
  710. package/dist/index.d.ts +50 -5
  711. package/dist/index.d.ts.map +1 -1
  712. package/dist/index.js +12 -20
  713. package/dist/index.js.map +1 -1
  714. package/dist/numerical/bianchi-residual.js.map +1 -1
  715. package/dist/numerical/binding-value.d.ts +11 -6
  716. package/dist/numerical/binding-value.d.ts.map +1 -1
  717. package/dist/numerical/binding-value.js +126 -122
  718. package/dist/numerical/binding-value.js.map +1 -1
  719. package/dist/numerical/christoffel-flat.js.map +1 -1
  720. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  721. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  722. package/dist/numerical/covariant-eikonal.js +2 -2
  723. package/dist/numerical/covariant-eikonal.js.map +1 -1
  724. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  725. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  726. package/dist/numerical/curvature-lowering-helpers.js +6 -3
  727. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  728. package/dist/numerical/derivative-lowering.js.map +1 -1
  729. package/dist/numerical/einstein-equation.js.map +1 -1
  730. package/dist/numerical/engine-registry.js.map +1 -1
  731. package/dist/numerical/errors.d.ts +7 -3
  732. package/dist/numerical/errors.d.ts.map +1 -1
  733. package/dist/numerical/errors.js +5 -5
  734. package/dist/numerical/errors.js.map +1 -1
  735. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  736. package/dist/numerical/evaluator-uncertainty.js +19 -2
  737. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  738. package/dist/numerical/formula-contract.d.ts +63 -7
  739. package/dist/numerical/formula-contract.d.ts.map +1 -1
  740. package/dist/numerical/formula-contract.js +61 -42
  741. package/dist/numerical/formula-contract.js.map +1 -1
  742. package/dist/numerical/formula-dimension.d.ts +8 -7
  743. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  744. package/dist/numerical/formula-dimension.js +58 -36
  745. package/dist/numerical/formula-dimension.js.map +1 -1
  746. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  747. package/dist/numerical/formula-mathts.js +5 -2
  748. package/dist/numerical/formula-mathts.js.map +1 -1
  749. package/dist/numerical/formula-registry.d.ts +13 -3
  750. package/dist/numerical/formula-registry.d.ts.map +1 -1
  751. package/dist/numerical/formula-registry.js +7 -2
  752. package/dist/numerical/formula-registry.js.map +1 -1
  753. package/dist/numerical/geodesic-integrator.js.map +1 -1
  754. package/dist/numerical/geometrized.js.map +1 -1
  755. package/dist/numerical/gl4-integrator.d.ts +28 -27
  756. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  757. package/dist/numerical/gl4-integrator.js +41 -42
  758. package/dist/numerical/gl4-integrator.js.map +1 -1
  759. package/dist/numerical/grid-field.js.map +1 -1
  760. package/dist/numerical/index.js.map +1 -1
  761. package/dist/numerical/input-validation.d.ts +3 -6
  762. package/dist/numerical/input-validation.d.ts.map +1 -1
  763. package/dist/numerical/input-validation.js +4 -8
  764. package/dist/numerical/input-validation.js.map +1 -1
  765. package/dist/numerical/killing.d.ts +8 -5
  766. package/dist/numerical/killing.d.ts.map +1 -1
  767. package/dist/numerical/killing.js.map +1 -1
  768. package/dist/numerical/klein-gordon.js.map +1 -1
  769. package/dist/numerical/kretschmann.js.map +1 -1
  770. package/dist/numerical/lowering-utils.js.map +1 -1
  771. package/dist/numerical/lowering.d.ts.map +1 -1
  772. package/dist/numerical/lowering.js +7 -17
  773. package/dist/numerical/lowering.js.map +1 -1
  774. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  775. package/dist/numerical/mathts-engine.js +11 -6
  776. package/dist/numerical/mathts-engine.js.map +1 -1
  777. package/dist/numerical/metric-inverse.js.map +1 -1
  778. package/dist/numerical/null-ic.js.map +1 -1
  779. package/dist/numerical/null-ray-integrator.js +4 -4
  780. package/dist/numerical/null-ray-integrator.js.map +1 -1
  781. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  782. package/dist/numerical/pderiv.d.ts.map +1 -1
  783. package/dist/numerical/pderiv.js +9 -2
  784. package/dist/numerical/pderiv.js.map +1 -1
  785. package/dist/numerical/perihelion-finder.js.map +1 -1
  786. package/dist/numerical/quadrature.d.ts +5 -2
  787. package/dist/numerical/quadrature.d.ts.map +1 -1
  788. package/dist/numerical/quadrature.js +20 -3
  789. package/dist/numerical/quadrature.js.map +1 -1
  790. package/dist/numerical/spacetime-metrics.d.ts +13 -19
  791. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  792. package/dist/numerical/spacetime-metrics.js +126 -248
  793. package/dist/numerical/spacetime-metrics.js.map +1 -1
  794. package/dist/numerical/strides.js.map +1 -1
  795. package/dist/numerical/tensor-engine.d.ts +9 -5
  796. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  797. package/dist/numerical/tensor-engine.js.map +1 -1
  798. package/dist/numerical/types.js.map +1 -1
  799. package/dist/numerical/weyl-lowering.js.map +1 -1
  800. package/dist/relations/category.js.map +1 -1
  801. package/dist/relations/composition-table.d.ts +4 -4
  802. package/dist/relations/composition-table.js +4 -4
  803. package/dist/relations/composition-table.js.map +1 -1
  804. package/dist/relations/conventions.js.map +1 -1
  805. package/dist/relations/domain-regimes.js.map +1 -1
  806. package/dist/relations/regime-registration.js.map +1 -1
  807. package/dist/relations/regime-vocabularies.js.map +1 -1
  808. package/dist/relations/regime.d.ts +18 -8
  809. package/dist/relations/regime.d.ts.map +1 -1
  810. package/dist/relations/regime.js +26 -14
  811. package/dist/relations/regime.js.map +1 -1
  812. package/dist/relations/types.d.ts +18 -5
  813. package/dist/relations/types.d.ts.map +1 -1
  814. package/dist/relations/types.js +5 -3
  815. package/dist/relations/types.js.map +1 -1
  816. package/package.json +10 -14
  817. package/dist/bridges/registry.d.ts +0 -60
  818. package/dist/bridges/registry.d.ts.map +0 -1
  819. package/dist/bridges/registry.js +0 -87
  820. package/dist/bridges/registry.js.map +0 -1
  821. package/dist/cli/poster-source.d.ts +0 -154
  822. package/dist/cli/poster-source.d.ts.map +0 -1
  823. package/dist/cli/poster-source.js +0 -184
  824. package/dist/cli/poster-source.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"applicability.js","sourceRoot":"","sources":["../../src/atlas/applicability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"applicability.js","sourceRoot":"","sources":["../../src/atlas/applicability.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 4, S4.1 — the applicability checker.\n *\n * Design note: `docs/planning/Atlas-Phase-4-Design.md` §1.\n *\n * **This module answers \"what about this bridge is not checked?\", and it\n * returns FINDINGS rather than a boolean.** A boolean would have to choose\n * between \"unchecked\" and \"wrong\", and those are the two states the module\n * exists to keep apart. Every finding therefore carries a\n * {@link ApplicabilitySeverity}:\n *\n * - `'blocking'` — the data CONTRADICTS ITSELF. A dimensional failure, two\n * records declaring opposite conventions, a literal zero divisor.\n * - `'question'` — the data is SILENT. A divisor nobody guarded, a convention\n * only one side declares, two premise models whose relationship is\n * unrecorded.\n *\n * `src/atlas/conventions.ts` already argues this asymmetry at length for the\n * convention comparison: absence is not disagreement. The same reasoning\n * governs every rule here. Collapsing the two severities would report \"four\n * findings\" for a record whose only defect is that nobody wrote something\n * down, and would bury a genuine contradiction among them.\n *\n * **Nothing here mutates a record and nothing here is a verdict.** The checker\n * has no authority to promote or reject: it produces the list a reviewer reads.\n * That is the same firewall the rest of the repo keeps — no machine verdict\n * mutates a catalog.\n *\n * @module atlas/applicability\n * @internal\n */\n\nimport type { ExprNode } from '../dimensional/ast-types.js';\nimport { validate } from '../dimensional/validator.js';\nimport type { AtlasModel } from './model.js';\nimport type { Conventions } from './types.js';\nimport { checkConventions, unknownConventionKeys } from './conventions.js';\n\n/** Whether a finding is a contradiction in the data or a silence in it. @internal */\nexport type ApplicabilitySeverity = 'blocking' | 'question';\n\n/**\n * The rule that produced a finding. A closed union so a caller can filter by\n * rule without matching on prose.\n *\n * @internal\n */\nexport type ApplicabilityFindingKind =\n | 'dimensional-inconsistency'\n | 'convention-mismatch'\n | 'convention-undeclared'\n | 'division-unguarded'\n | 'division-by-zero'\n | 'squaring-adds-solutions'\n | 'model-incompatibility';\n\n/** One thing a reviewer must resolve before believing the record. @internal */\nexport interface ApplicabilityFinding {\n readonly kind: ApplicabilityFindingKind;\n readonly severity: ApplicabilitySeverity;\n /** Human-readable statement of what is unresolved. */\n readonly detail: string;\n /**\n * Where it was found: an AST path (`'args[1]'`), a convention key, or a\n * model id. Absent when the finding is about the record as a whole.\n */\n readonly where?: string;\n}\n\n/**\n * What the checker is given. Every field is optional EXCEPT the side\n * conditions, which are required so that \"this record states none\" is a\n * written choice (`[]`) rather than a forgotten argument — the same reasoning\n * that made `passingWitnessIds` required in `derive-evidence.ts`.\n *\n * @internal\n */\nexport interface ApplicabilityInput {\n /** The transformation's AST, when the record encodes one. */\n readonly ast?: ExprNode;\n /** The record's stated side conditions, as free prose. REQUIRED; `[]` is a statement. */\n readonly sideConditions: readonly string[];\n /** The premise records' declared conventions. */\n readonly premiseConventions?: Conventions;\n /** The conclusion record's declared conventions. */\n readonly conclusionConventions?: Conventions;\n /** The premise models (many). */\n readonly premises?: readonly AtlasModel[];\n /** The conclusion model (one). */\n readonly conclusion?: AtlasModel;\n /**\n * Family pairs already bridged, so a genuine cross-family step is not\n * reported as unrecorded. Unordered: `['a','b']` covers `['b','a']`.\n */\n readonly declaredBridges?: readonly (readonly [string, string])[];\n}\n\n/**\n * Non-vanishing markers a side condition may use. Matched case-insensitively\n * against the side-condition prose.\n *\n * ⚠ **Shallow by design, and the asymmetry is the point** (design note §1.3).\n * A side condition is free text and no parser exists for it. The failure mode\n * is a FALSE QUESTION — a genuinely guarded divisor phrased in words this list\n * does not know — never a false clearance, because a divisor absent from the\n * prose cannot match any marker. The check over-asks rather than over-clears.\n */\nconst NONVANISHING_MARKERS: readonly string[] = [\n '≠ 0',\n '≠0',\n '!= 0',\n '!=0',\n '<> 0',\n '<>0',\n 'nonzero',\n 'non-zero',\n 'non zero',\n '> 0',\n '>0',\n 'positive',\n];\n\n/** Free symbol names appearing anywhere in a subtree. */\nfunction symbolNames(node: ExprNode, into: Set<string> = new Set()): Set<string> {\n if (node.kind === 'symbol') {\n into.add(node.name);\n return into;\n }\n for (const child of childNodes(node)) symbolNames(child, into);\n return into;\n}\n\n/**\n * The `ExprNode` children of a node, for the scalar grammar this checker\n * reasons about. Tensor and curvature node families have no children here and\n * return `[]`: the side-condition and squaring rules are statements about\n * scalar algebra, and silently descending into a tensor node would invite\n * findings whose `where` path means nothing to a reader.\n */\nfunction childNodes(node: ExprNode): readonly ExprNode[] {\n switch (node.kind) {\n case 'op':\n return node.args;\n case 'integral':\n return [node.over, node.integrand, ...(node.lower ? [node.lower] : []),\n ...(node.upper ? [node.upper] : [])];\n case 'derivative':\n return [node.of, node.wrt];\n case 'dirac-delta':\n return [node.arg];\n case 'variational-derivative':\n return [node.functional, node.field, node.over];\n case 'transcendental':\n return [node.arg];\n case 'abs':\n return [node.arg];\n default:\n return [];\n }\n}\n\n/**\n * The numeric value of a leaf that IS a literal, or `null`.\n *\n * Literals are `symbol` leaves whose `name` parses as a number — the same\n * convention `validator.ts` uses to recognise a literal exponent, so the two\n * cannot disagree about what a literal is.\n */\nfunction literalValue(node: ExprNode): number | null {\n if (node.kind !== 'symbol') return null;\n if (node.name.trim() === '') return null;\n const v = Number(node.name);\n return Number.isFinite(v) ? v : null;\n}\n\n/** The word-like tokens of a side condition: runs of letters, digits and underscores, lower-cased. */\nfunction wordTokens(text: string): Set<string> {\n return new Set(text.toLowerCase().match(/[\\p{L}\\p{N}_]+/gu) ?? []);\n}\n\n/**\n * Is `name` guarded as non-vanishing by any of the stated side conditions?\n *\n * The name must appear as a WHOLE token of the condition: `a` is not guarded\n * by \"the amplitude is positive\", although that sentence contains the letter\n * `a` beside a marker. A substring match cleared every one-letter divisor on\n * most prose; that was the audit's A14.\n */\nfunction isGuarded(name: string, sideConditions: readonly string[]): boolean {\n const needle = name.toLowerCase();\n return sideConditions.some((raw) => {\n if (!wordTokens(raw).has(needle)) return false;\n const s = raw.toLowerCase();\n return NONVANISHING_MARKERS.some((m) => s.includes(m));\n });\n}\n\n/** An even, integer literal exponent, or `null` when the exponent is anything else. */\nfunction evenLiteralExponent(node: ExprNode): number | null {\n if (node.kind !== 'op' || node.op !== '^') return null;\n const exp = node.args[1];\n if (exp === undefined) return null;\n const v = literalValue(exp);\n if (v === null || !Number.isInteger(v) || v === 0) return null;\n return v % 2 === 0 ? v : null;\n}\n\n/** Walk the AST, applying the side-condition and squaring rules. */\nfunction checkAst(\n node: ExprNode,\n sideConditions: readonly string[],\n path: string,\n out: ApplicabilityFinding[],\n): void {\n if (node.kind === 'op' && node.op === '/') {\n const divisor = node.args[1];\n if (divisor !== undefined) {\n const lit = literalValue(divisor);\n if (lit === 0) {\n out.push({\n kind: 'division-by-zero',\n severity: 'blocking',\n detail: 'Division by the literal 0.',\n where: `${path}args[1]`,\n });\n } else if (lit === null) {\n // Not a literal: it needs a stated non-vanishing side condition.\n const names = [...symbolNames(divisor)];\n const unguarded = names.filter((n) => !isGuarded(n, sideConditions));\n // Every name guarded ⇒ nothing to ask. A divisor with NO symbols and no\n // literal value (a tensor leaf, say) is reported, because nothing about\n // it can be checked and silence there would read as clearance.\n if (names.length === 0 || unguarded.length > 0) {\n const subject = names.length === 0 ? 'the divisor' : unguarded.join(', ');\n out.push({\n kind: 'division-unguarded',\n severity: 'question',\n detail:\n `Division whose divisor (${subject}) has no stated non-vanishing side ` +\n 'condition. This is a question, not a defect: the divisor may well be ' +\n 'non-zero and simply unstated.',\n where: `${path}args[1]`,\n });\n }\n }\n }\n }\n\n // Difference (or sum) of two equal even powers ⇒ the relation was obtained by\n // squaring, which admits the sign-flipped branch. See design note §1.4 for why\n // an isolated even power is NOT reported.\n if (node.kind === 'op' && (node.op === '-' || node.op === '+')) {\n const exps = node.args.map(evenLiteralExponent);\n for (let i = 0; i < exps.length; i += 1) {\n for (let j = i + 1; j < exps.length; j += 1) {\n const a = exps[i];\n if (a !== null && a !== undefined && a === exps[j]) {\n out.push({\n kind: 'squaring-adds-solutions',\n severity: 'question',\n detail:\n `Two terms raised to the same even power (${a}) are equated. Raising a ` +\n 'relation to an even power admits the sign-flipped branch, so a side ' +\n 'condition fixing the sign is needed for the step to be reversible.',\n where: `${path}args[${i}]`,\n });\n }\n }\n }\n }\n\n const children = childNodes(node);\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n if (child !== undefined) checkAst(child, sideConditions, `${path}args[${i}].`, out);\n }\n}\n\n/** Is this family pair recorded as already bridged? Unordered. */\nfunction bridgeDeclared(\n a: string,\n b: string,\n declared: readonly (readonly [string, string])[],\n): boolean {\n return declared.some(([x, y]) => (x === a && y === b) || (x === b && y === a));\n}\n\n/**\n * Every unresolved question and contradiction the checker can see in a record.\n *\n * An EMPTY result means \"no rule fired\", which is weaker than \"this bridge is\n * valid\" and must not be reported as the latter. The rules in hand cover\n * dimensions, declared conventions, division guards, even-power equating and\n * model families; a bridge can be wrong in ways none of them reaches.\n *\n * @param input - the record's checkable parts. `sideConditions` is required.\n * @returns findings in rule order (dimensions, conventions, AST, models);\n * never `null`, never throws on a malformed AST.\n * @internal\n */\nexport function checkApplicability(\n input: ApplicabilityInput,\n): readonly ApplicabilityFinding[] {\n const out: ApplicabilityFinding[] = [];\n\n // 1. Dimensions — the existing validator, unchanged.\n if (input.ast !== undefined) {\n const result = validate(input.ast);\n for (const v of result.violations) {\n // A warning-severity violation does not make the record inconsistent;\n // reporting it as blocking would contradict `validate`'s own verdict.\n const severity: ApplicabilitySeverity =\n (v.severity ?? 'error') === 'error' ? 'blocking' : 'question';\n out.push({\n kind: 'dimensional-inconsistency',\n severity,\n detail: v.note,\n where: v.location === '' ? undefined : v.location,\n });\n }\n if (result.inferredDimension === null && result.violations.length === 0) {\n out.push({\n kind: 'dimensional-inconsistency',\n severity: 'blocking',\n detail: 'No dimension could be inferred for the transformation AST.',\n });\n }\n }\n\n // 2. Conventions — mismatches block, asymmetric declarations are questions.\n const mismatches = checkConventions(input.premiseConventions, input.conclusionConventions);\n for (const key of mismatches) {\n out.push({\n kind: 'convention-mismatch',\n severity: 'blocking',\n detail:\n `Premise and conclusion declare different values for '${key}'. Two records ` +\n 'that disagree on a sign or unit choice are not directly comparable.',\n where: key,\n });\n }\n for (const key of unknownConventionKeys(\n input.premiseConventions,\n input.conclusionConventions,\n )) {\n out.push({\n kind: 'convention-undeclared',\n severity: 'question',\n detail:\n `Exactly one side declares '${key}'. Silence is not agreement: the other ` +\n 'record may use the opposite choice and simply never said.',\n where: key,\n });\n }\n\n // 3. Side conditions over the AST.\n if (input.ast !== undefined) checkAst(input.ast, input.sideConditions, '', out);\n\n // 4. Model compatibility.\n const premises = input.premises ?? [];\n const declared = input.declaredBridges ?? [];\n const conclusionFamily = input.conclusion?.family;\n const families = new Set(premises.map((m) => m.family));\n if (conclusionFamily !== undefined) families.add(conclusionFamily);\n const familyList = [...families];\n for (let i = 0; i < familyList.length; i += 1) {\n for (let j = i + 1; j < familyList.length; j += 1) {\n const a = familyList[i];\n const b = familyList[j];\n if (a === undefined || b === undefined) continue;\n if (bridgeDeclared(a, b, declared)) continue;\n out.push({\n kind: 'model-incompatibility',\n severity: 'question',\n detail:\n `Models span families '${a}' and '${b}' with no declared bridge between ` +\n 'them. An unrecorded cross-family step is exactly what the atlas exists ' +\n 'to make visible.',\n where: `${a}|${b}`,\n });\n }\n }\n\n return out;\n}\n\n/**\n * The `'blocking'` subset of {@link checkApplicability}.\n *\n * Offered because the two severities are read by different callers — a report\n * shows both, a gate looks only at contradictions — and filtering on the\n * severity string at every call site is how one of them eventually filters on\n * the wrong one.\n *\n * @internal\n */\nexport function blockingFindings(\n findings: readonly ApplicabilityFinding[],\n): readonly ApplicabilityFinding[] {\n return findings.filter((f) => f.severity === 'blocking');\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"association.js","sourceRoot":"","sources":["../../src/atlas/association.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAwCH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD;QACE,EAAE,EAAE,8BAA8B;QAClC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC;QAC5C,IAAI,EACF,6OAA6O;QAC/O,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,kCAAkC;QACtC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;QAChD,IAAI,EACF,2MAA2M;QAC7M,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC;QAC7C,IAAI,EACF,iKAAiK;QACnK,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QAC/C,IAAI,EACF,iOAAiO;QACnO,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,8CAA8C;QAClD,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;QAC5D,IAAI,EACF,2QAA2Q;QAC7Q,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QAC7C,IAAI,EACF,iQAAiQ;QACnQ,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,gCAAgC;QACpC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;QAC9C,IAAI,EACF,ySAAyS;QAC3S,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,sCAAsC;QAC1C,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;QACpD,IAAI,EAAE,gDAAgD;QACtD,QAAQ,EAAE,4CAA4C;KACvD;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"association.js","sourceRoot":"","sources":["../../src/atlas/association.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAwCH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD;QACE,EAAE,EAAE,8BAA8B;QAClC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC;QAC5C,IAAI,EACF,6OAA6O;QAC/O,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,kCAAkC;QACtC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;QAChD,IAAI,EACF,2MAA2M;QAC7M,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC;QAC7C,IAAI,EACF,iKAAiK;QACnK,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QAC/C,IAAI,EACF,iOAAiO;QACnO,QAAQ,EAAE,kDAAkD;KAC7D;IACD;QACE,EAAE,EAAE,8CAA8C;QAClD,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;QAC5D,IAAI,EACF,2QAA2Q;QAC7Q,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QAC7C,IAAI,EACF,iQAAiQ;QACnQ,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,gCAAgC;QACpC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;QAC9C,IAAI,EACF,ySAAyS;QAC3S,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,EAAE,EAAE,sCAAsC;QAC1C,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;QACpD,IAAI,EAAE,gDAAgD;QACtD,QAAQ,EAAE,4CAA4C;KACvD;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["/**\n * Atlas Phase 1 — the association registry.\n *\n * An `Association` records that two things SHARE something: a constant, a\n * symbol, a structure, or a line of historical influence. That is the whole of\n * its meaning. It asserts **no relation** between the two, makes **no\n * composite claim**, and is explicitly NOT a graph edge — design note §5: *\"No\n * `Association` semantics beyond a registry of typed pairs — the registry is a\n * container in Sprint 1, and it makes no composite claims.\"*\n *\n * The distinction is the point. `CATALOG_GRAPH` edges are claims that one\n * quantity DETERMINES another. An association is the opposite epistemic act:\n * it is where the atlas writes down a resemblance it has already decided is\n * NOT a link, so the resemblance stops being re-surfaced as if it were fresh.\n * An association that also appeared as an edge would be a contradiction, and\n * `tests/atlas/association.test.ts` pins that it never does.\n *\n * **The seed is the `'decoy'` half of the adjudication ledger.** A `decoy`\n * verdict means a physicist looked at `a ≟ b` and found a coincidence with no\n * mechanism — precisely a shared appearance with no relation behind it. Every\n * `'decoy'` row in `ADJUDICATIONS` (`src/composition/adjudication.ts`) gets\n * one entry here, id-linked, with its `grounds` copied VERBATIM as the `note`.\n *\n * **No new physics is added by this module**, and two deliberate choices keep\n * it that way:\n *\n * - `note` is the adjudicator's own prose, never a restatement. Verbatimness\n * is pinned by test against the live ledger, so a re-worded ledger entry\n * fails rather than silently diverging from its copy here.\n * - `kind` is assigned MECHANICALLY, not per pair. Every seed is\n * `'shared-structure'` because every one of them reached the ledger the\n * same way: the identification funnel pairs quantities that share a\n * dimensional signature. Choosing a different `kind` per row would be a\n * fresh physics judgement about each pair, which is exactly the claim this\n * registry exists not to make.\n *\n * **Why the seed is written out rather than derived from `ADJUDICATIONS` at\n * import time.** `src/composition/` may import atlas TYPES only, never the\n * barrel, because a value import in the other direction closes a cycle\n * `docs:deps` reports (`compose.ts` already imports `atlas/composition-table`).\n * An `atlas → composition/adjudication → discovery → …` value import risks the\n * same cycle from the other side. So this module stays a leaf, and the\n * drift protection moves into the test, which is free to import both.\n *\n * @module atlas/association\n */\n\n/**\n * What two records share. Each value names an observable resemblance, not a\n * relation: none of them implies that either record determines, derives,\n * approximates or restricts the other.\n *\n * @internal\n */\nexport type AssociationKind =\n | 'shared-constant'\n | 'shared-symbol'\n | 'shared-structure'\n | 'historical-influence';\n\n/**\n * One recorded resemblance between two named things.\n *\n * A container, deliberately. It has no `relation`, no `bound`, no `regime` and\n * no `evidence` — the fields that would let it make a claim are absent because\n * it makes none.\n *\n * @internal\n */\nexport interface Association {\n /**\n * Stable identity. For a seeded entry this is the `CatalogAdjudication.id`\n * it came from — `candidateId(a, b)`, the two names sorted and joined with\n * `~` — so the association and the verdict that produced it share a key.\n */\n readonly id: string;\n readonly kind: AssociationKind;\n /** The two names, in the order `id` encodes them (sorted, `~`-split). */\n readonly between: readonly [string, string];\n /** Why the resemblance is only a resemblance. Adjudicator's prose, verbatim. */\n readonly note: string;\n /** Repo-relative path of the record this note was copied from. */\n readonly citation: string;\n}\n\n/**\n * The seeded registry: one entry per `'decoy'` adjudication, in ledger order.\n *\n * Kept in step with `ADJUDICATIONS` by\n * `tests/atlas/association.test.ts`, which re-derives this array from the live\n * ledger and deep-equals it. Adding a `'decoy'` verdict without adding its\n * association here fails that test.\n *\n * @internal\n */\nexport const ASSOCIATIONS: readonly Association[] = [\n {\n id: 'erasure-energy~photon-energy',\n kind: 'shared-structure',\n between: ['erasure-energy', 'photon-energy'],\n note:\n \"Dimensional coincidence; no mechanism. Landauer's k_B·T·ln2 is a statistical lower bound on heat dissipated to a reservoir; equating it to a single photon's hν has no universal mechanism — it rewrites thermal energy in frequency units.\",\n citation: 'docs/research/proposed-equations-adjudication.md',\n },\n {\n id: 'dark-fermion-mass~erasure-energy',\n kind: 'shared-structure',\n between: ['dark-fermion-mass', 'erasure-energy'],\n note:\n 'Dimensional coincidence; no mechanism. A speculative hidden-sector mass m = gv set equal to a context-dependent erasure energy — no model links a particle mass to an arbitrary processor\\'s temperature.',\n citation: 'docs/research/proposed-equations-adjudication.md',\n },\n {\n id: 'dark-fermion-mass~rest-energy',\n kind: 'shared-structure',\n between: ['dark-fermion-mass', 'rest-energy'],\n note:\n 'Trivial/definitional. m = vg/c² re-expresses the dark-fermion mass via E=mc² instead of via Landauer (cf. PE-2) — a definitional application, not a new bridge.',\n citation: 'docs/research/proposed-equations-adjudication.md',\n },\n {\n id: 'hubble-distance~peak-wavelength',\n kind: 'shared-structure',\n between: ['hubble-distance', 'peak-wavelength'],\n note:\n 'Dimensional coincidence; no mechanism. A blackbody peak wavelength equated with the cosmological horizon — disparate domains, no mechanism; numerically off by ~10²⁹ for the CMB. The clearest \"coincidence, not physics\" case.',\n citation: 'docs/research/proposed-equations-adjudication.md',\n },\n {\n id: 'coarsening-length~quantum-correlation-length',\n kind: 'shared-structure',\n between: ['coarsening-length', 'quantum-correlation-length'],\n note:\n 'Non-equilibrium vs equilibrium length; unanimous. A coarsening length is a non-equilibrium domain size formed by quenching through a critical point; the quantum correlation length ξ is an equilibrium static property at it. Different processes — not the same length.',\n citation: 'docs/research/orphan-connector-adjudication.md',\n },\n {\n id: 'effective-mass~tunneling-mass',\n kind: 'shared-structure',\n between: ['effective-mass', 'tunneling-mass'],\n note:\n 'Different particles/Hamiltonians; unanimous. A proton\\'s inertia in a specific biomolecular potential vs. an emergent electronic quasiparticle\\'s effective mass in a strongly-correlated metal. Different particles, different Hamiltonians, unrelated scales.',\n citation: 'docs/research/orphan-connector-adjudication.md',\n },\n {\n id: 'decoherence-rate~mutation-rate',\n kind: 'shared-structure',\n between: ['decoherence-rate', 'mutation-rate'],\n note:\n 'Same units, no shared meaning; unanimous. A decoherence rate (loss of quantum phase to the environment) vs. a mutation rate (frequency of a permanent, classical change to a DNA sequence). Same units, no shared physical meaning — decoherence may precede a mutation, but they are not one quantity.',\n citation: 'docs/research/orphan-connector-adjudication.md',\n },\n {\n id: 'foerster-radius~schwarzschild-radius',\n kind: 'shared-structure',\n between: ['foerster-radius', 'schwarzschild-radius'],\n note: 'a Förster radius is not a Schwarzschild radius',\n citation: 'docs/research/Orphan-Connector-Analysis.md',\n },\n];\n\n/** Look up an association by its `candidateId`-shaped key. @internal */\nexport function associationFor(id: string): Association | undefined {\n return ASSOCIATIONS.find((a) => a.id === id);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-shapes.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/backend-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,2FAA2F;AAC3F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,OAAO,GACb,wBAAwB,GAAG,iBAAiB,CAwB9C"}
1
+ {"version":3,"file":"backend-shapes.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/backend-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,2FAA2F;AAC3F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,OAAO,GACb,wBAAwB,GAAG,iBAAiB,CA4B9C"}
@@ -53,6 +53,10 @@ export function parseBackendResponse(request, value) {
53
53
  }
54
54
  if (problems.length > 0)
55
55
  return { error: problems.join('; ') };
56
- return v;
56
+ // A typed pick of the validated fields: an extra field on the reply is not
57
+ // carried through, and no cast is needed.
58
+ return request.task === 'classify'
59
+ ? { itemId: request.itemId, outcome: v['outcome'] }
60
+ : { itemId: request.itemId, ranking: [...v['ranking']] };
57
61
  }
58
62
  //# sourceMappingURL=backend-shapes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend-shapes.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/backend-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA6BH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAgC,EAChC,KAAc;IAEd,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;IAC/F,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrG,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,OAAO,CAAwC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"backend-shapes.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/backend-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA6BH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAgC,EAChC,KAAc;IAEd,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;IAC/F,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrG,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,2EAA2E;IAC3E,0CAA0C;IAC1C,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU;QAChC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAoC,EAAE;QACtF,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAI,CAAC,CAAC,SAAS,CAAc,CAAC,EAAE,CAAC;AAC3E,CAAC","sourcesContent":["/**\n * Atlas Phase 5, S5.3 — request and response SHAPES for the out-of-process\n * conditions (embeddings, LLMs).\n *\n * Design note: `docs/planning/Atlas-Phase-5-Design.md` §7.\n *\n * Only the shapes and a strict response parser live here. The process plumbing\n * is the probe's existing NDJSON worker protocol\n * (`src/composition/probe/backend-protocol.ts`): argv spawn, no shell, timeout,\n * schema-validated output. **A malformed response is an ERROR, never a\n * default:** an outcome that defaulted to `'abstain'` would credit a broken\n * worker with the benchmark's preferred behaviour.\n *\n * @module atlas/benchmark/backend-shapes\n * @internal\n */\n\nimport type { RelationType } from '../types.js';\n\n/** What an out-of-process condition is asked. @internal */\nexport interface BenchmarkBackendRequest {\n readonly itemId: string;\n /** `classify`: judge the claim. `retrieve`: rank `corpusIds` for it. */\n readonly task: 'classify' | 'retrieve';\n readonly premises: readonly string[];\n readonly conclusion: string;\n readonly claimedRelation: RelationType;\n /** Required for `retrieve`: the records to rank. */\n readonly corpusIds?: readonly string[];\n readonly budgetMs: number;\n}\n\n/** What it answers. Exactly one of `outcome` or `ranking`, matching the task. @internal */\nexport interface BenchmarkBackendResponse {\n readonly itemId: string;\n readonly outcome?: 'accept' | 'reject' | 'abstain';\n readonly ranking?: readonly string[];\n}\n\n/** A response that failed validation, with every reason. @internal */\nexport interface BackendShapeError {\n readonly error: string;\n}\n\nconst OUTCOMES = new Set(['accept', 'reject', 'abstain']);\n\n/**\n * Validate one parsed response against the request it answers.\n *\n * @returns the response, or an error naming every problem. Never throws.\n * @internal\n */\nexport function parseBackendResponse(\n request: BenchmarkBackendRequest,\n value: unknown,\n): BenchmarkBackendResponse | BackendShapeError {\n const problems: string[] = [];\n if (value === null || typeof value !== 'object') return { error: 'response is not an object' };\n const v = value as Record<string, unknown>;\n if (v['itemId'] !== request.itemId) problems.push(`itemId ${String(v['itemId'])} ≠ ${request.itemId}`);\n if (request.task === 'classify') {\n if (typeof v['outcome'] !== 'string' || !OUTCOMES.has(v['outcome'])) {\n problems.push('classify needs outcome ∈ {accept, reject, abstain}');\n }\n if (v['ranking'] !== undefined) problems.push('classify must not carry a ranking');\n } else {\n const r = v['ranking'];\n if (!Array.isArray(r) || !r.every((x) => typeof x === 'string')) {\n problems.push('retrieve needs ranking: string[]');\n } else {\n const allowed = new Set(request.corpusIds ?? []);\n const unknown = r.filter((x) => !allowed.has(x as string));\n if (unknown.length > 0) problems.push(`ranking names ids outside the corpus: ${unknown.join(', ')}`);\n if (new Set(r).size !== r.length) problems.push('ranking repeats an id');\n }\n if (v['outcome'] !== undefined) problems.push('retrieve must not carry an outcome');\n }\n if (problems.length > 0) return { error: problems.join('; ') };\n // A typed pick of the validated fields: an extra field on the reply is not\n // carried through, and no cast is needed.\n return request.task === 'classify'\n ? { itemId: request.itemId, outcome: v['outcome'] as 'accept' | 'reject' | 'abstain' }\n : { itemId: request.itemId, ranking: [...(v['ranking'] as string[])] };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"baselines.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,sDAAsD;AACtD,MAAM,MAAM,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;AAqCxC,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAGjG;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAGnG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAO/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAC7C,CAAC,SAAK,GACL,MAAM,CASR"}
1
+ {"version":3,"file":"baselines.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,sDAAsD;AACtD,MAAM,MAAM,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;AA6CxC,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAGjG;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAGnG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAO/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAC7C,CAAC,SAAK,GACL,MAAM,CASR"}
@@ -37,6 +37,14 @@ const jaccard = (a, b) => {
37
37
  inter++;
38
38
  return inter / (a.size + b.size - inter);
39
39
  };
40
+ /**
41
+ * Free symbol names of an expression, for the symbol-matching baseline.
42
+ *
43
+ * Stated, not hidden: the walk descends `op`, `transcendental` and `abs`
44
+ * only. A symbol inside an `integral`, a `derivative` or a tensor node is
45
+ * not collected, the same limit `leakage.ts` states for its dimension
46
+ * renaming. Widening it would change the frozen study's symbol baseline.
47
+ */
40
48
  function symbolNames(node, out = new Set()) {
41
49
  if (node === undefined)
42
50
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"baselines.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/baselines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baselines.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/baselines.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 5, S5.3 — the deterministic, in-tree BASELINE conditions and the\n * recall-at-depth-k scorer.\n *\n * Design note: `docs/planning/Atlas-Phase-5-Design.md` §7.\n *\n * Each baseline ranks a reference corpus against a query. The pre-registered\n * criterion is recall at depth 10 against embeddings, so a baseline is scored by\n * whether the correct reference lands in its top k. Three baselines, in rising\n * order of structure:\n *\n * - **text retrieval** — Jaccard overlap of lower-cased word tokens;\n * - **symbol matching** — Jaccard overlap of the expression's symbol names;\n * - **typed structural search** — exact agreement of the leakage key\n * (dimension-renamed normal form), then symbol overlap as the tie-break.\n *\n * **Every ranking is fully deterministic:** ties break on the reference id, so a\n * rerun can never reorder a tie and move a result across the depth cut.\n *\n * Embeddings and LLM conditions run OUT OF PROCESS; `backend-shapes.ts` holds\n * only their request and response shapes.\n *\n * @module atlas/benchmark/baselines\n * @internal\n */\n\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport { leakageKey } from './leakage.js';\n\n/** One record a baseline can retrieve. @internal */\nexport interface CorpusRecord {\n readonly id: string;\n readonly text: string;\n readonly expr?: ExprNode;\n}\n\n/** A query: an item's text and, when it has one, its expression. @internal */\nexport interface RetrievalQuery {\n readonly text: string;\n readonly expr?: ExprNode;\n}\n\n/** A ranking: reference ids, best first. @internal */\nexport type Ranking = readonly string[];\n\nconst tokens = (text: string): Set<string> =>\n new Set(\n text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter((t) => t.length > 0),\n );\n\nconst jaccard = (a: ReadonlySet<string>, b: ReadonlySet<string>): number => {\n if (a.size === 0 && b.size === 0) return 0;\n let inter = 0;\n for (const x of a) if (b.has(x)) inter++;\n return inter / (a.size + b.size - inter);\n};\n\n/**\n * Free symbol names of an expression, for the symbol-matching baseline.\n *\n * Stated, not hidden: the walk descends `op`, `transcendental` and `abs`\n * only. A symbol inside an `integral`, a `derivative` or a tensor node is\n * not collected, the same limit `leakage.ts` states for its dimension\n * renaming. Widening it would change the frozen study's symbol baseline.\n */\nfunction symbolNames(node: ExprNode | undefined, out = new Set<string>()): Set<string> {\n if (node === undefined) return out;\n if (node.kind === 'symbol') {\n // Numeric literals are not symbols a reader would match on.\n if (!Number.isFinite(Number(node.name))) out.add(node.name);\n return out;\n }\n if (node.kind === 'op') for (const a of node.args) symbolNames(a, out);\n else if (node.kind === 'transcendental' || node.kind === 'abs') symbolNames(node.arg, out);\n return out;\n}\n\n/** Rank by descending score, ties broken by ascending id — never by input order. */\nfunction rankBy(corpus: readonly CorpusRecord[], score: (r: CorpusRecord) => number): Ranking {\n return corpus\n .map((r) => ({ id: r.id, s: score(r) }))\n .sort((a, b) => (b.s !== a.s ? b.s - a.s : a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map((x) => x.id);\n}\n\n/** Baseline 1: text retrieval by word-token overlap. @internal */\nexport function rankByTextOverlap(query: RetrievalQuery, corpus: readonly CorpusRecord[]): Ranking {\n const q = tokens(query.text);\n return rankBy(corpus, (r) => jaccard(q, tokens(r.text)));\n}\n\n/** Baseline 2: symbol matching by overlap of expression symbol names. @internal */\nexport function rankBySymbolOverlap(query: RetrievalQuery, corpus: readonly CorpusRecord[]): Ranking {\n const q = symbolNames(query.expr);\n return rankBy(corpus, (r) => jaccard(q, symbolNames(r.expr)));\n}\n\n/**\n * Baseline 3: typed structural search. A record whose leakage key equals the\n * query's scores above every record that does not; symbol overlap orders within\n * each tier. A query or record with no expression scores zero structurally.\n *\n * @internal\n */\nexport function rankByStructure(query: RetrievalQuery, corpus: readonly CorpusRecord[]): Ranking {\n const qKey = query.expr === undefined ? undefined : leakageKey(query.expr);\n const qSyms = symbolNames(query.expr);\n return rankBy(corpus, (r) => {\n const structural = qKey !== undefined && r.expr !== undefined && leakageKey(r.expr) === qKey ? 1 : 0;\n return 2 * structural + jaccard(qSyms, symbolNames(r.expr));\n });\n}\n\n/**\n * Recall at depth k: the fraction of queries for which AT LEAST ONE correct\n * reference appears in the top k of its ranking.\n *\n * A query with no ranking counts as a MISS, never as absent from the\n * denominator: dropping it would raise recall by failing to answer. A query with\n * no correct reference in `truth` is an error in the answer key, and throws.\n *\n * @throws Error if `truth` lists no correct reference for some query.\n * @internal\n */\nexport function recallAtK(\n rankings: ReadonlyMap<string, Ranking>,\n truth: ReadonlyMap<string, readonly string[]>,\n k = 10,\n): number {\n if (truth.size === 0) return Number.NaN;\n let hits = 0;\n for (const [queryId, correct] of truth) {\n if (correct.length === 0) throw new Error(`recallAtK: no correct reference for ${queryId}`);\n const top = (rankings.get(queryId) ?? []).slice(0, k);\n if (correct.some((c) => top.includes(c))) hits++;\n }\n return hits / truth.size;\n}\n"]}
@@ -35,10 +35,11 @@ export declare const OLLAMA_TIMEOUT_MS = 5000;
35
35
  /** What the caller hears when embeddings were not asked for. @internal */
36
36
  export declare const ATLAS_ONLY_NOTE = "Embeddings were not requested. This is the atlas search.";
37
37
  /** What the caller hears when an embedding order was computed and then not accepted. @internal */
38
- export declare const PROPOSAL_NOTE = "The embedding order is a proposal, not evidence and not an acceptance. rankByStructure accepted a separate order. Cosine similarity does not enter that score.";
38
+ export declare const PROPOSAL_NOTE = "The embedding order is a proposal, not evidence and not an acceptance. The atlas search accepted a separate order. Cosine similarity does not enter that score.";
39
39
  declare const REASON_TEXT: {
40
40
  readonly 'process-not-there': 'the process is not there';
41
41
  readonly 'model-not-there': 'the model is not there';
42
+ readonly 'server-error': 'the server answered an error status';
42
43
  readonly 'reply-not-a-vector': 'the reply is not a vector, or its length is not the length stored in the frozen file';
43
44
  readonly 'call-did-not-finish': 'the call does not finish';
44
45
  };
@@ -47,7 +48,7 @@ export type EmbeddingFallbackReason = keyof typeof REASON_TEXT;
47
48
  /** An embedding request that cannot be used. The atlas search still answers. @internal */
48
49
  export declare class EmbeddingUnavailable extends Error {
49
50
  readonly reason: EmbeddingFallbackReason;
50
- constructor(reason: EmbeddingFallbackReason);
51
+ constructor(reason: EmbeddingFallbackReason, detail?: string);
51
52
  }
52
53
  /** One vector per string, every vector the same length. @internal */
53
54
  export type Embedder = (texts: readonly string[]) => Promise<readonly (readonly number[])[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retrieval.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/hybrid-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzF,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,yGACsE,CAAC;AAEzG,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,qEAAqE,CAAC;AAEvG;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,0EAA0E;AAC1E,eAAO,MAAM,eAAe,6DAA6D,CAAC;AAE1F,kGAAkG;AAClG,eAAO,MAAM,aAAa,mKACwI,CAAC;AAEnK,QAAA,MAAM,WAAW;aACf,mBAAmB,EAAE,0BAA0B;aAC/C,iBAAiB,EAAE,wBAAwB;aAC3C,oBAAoB,EAClB,sFAAsF;aACxF,qBAAqB,EAAE,0BAA0B;CACzC,CAAC;AAEX,wEAAwE;AACxE,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,WAAW,CAAC;AAE/D,0FAA0F;AAC1F,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,YAAY,MAAM,EAAE,uBAAuB,EAI1C;CACF;AAED,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAE7F,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAS1D;AAED,8DAA8D;AAC9D,eAAO,MAAM,YAAY,EAAE,QAAiE,CAAC;AAE7F,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EACxB,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CAAE,EAAE,GAC9E,MAAM,EAAE,CAKV;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM3D;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,IAAI,YAAY,EAAE,CAMzD;AAED,uHAAuH;AACvH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7E;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,QAAQ,CA+CvE;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,UAAU,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAiBD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B,GAAG,OAAO,CAAC,eAAe,CAAC,CAuC3B"}
1
+ {"version":3,"file":"hybrid-retrieval.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/hybrid-retrieval.ts"],"names":[],"mappings":"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"}
@@ -36,18 +36,19 @@ export const OLLAMA_TIMEOUT_MS = 5000;
36
36
  /** What the caller hears when embeddings were not asked for. @internal */
37
37
  export const ATLAS_ONLY_NOTE = 'Embeddings were not requested. This is the atlas search.';
38
38
  /** What the caller hears when an embedding order was computed and then not accepted. @internal */
39
- export const PROPOSAL_NOTE = 'The embedding order is a proposal, not evidence and not an acceptance. rankByStructure accepted a separate order. Cosine similarity does not enter that score.';
39
+ export const PROPOSAL_NOTE = 'The embedding order is a proposal, not evidence and not an acceptance. The atlas search accepted a separate order. Cosine similarity does not enter that score.';
40
40
  const REASON_TEXT = {
41
41
  'process-not-there': 'the process is not there',
42
42
  'model-not-there': 'the model is not there',
43
+ 'server-error': 'the server answered an error status',
43
44
  'reply-not-a-vector': 'the reply is not a vector, or its length is not the length stored in the frozen file',
44
45
  'call-did-not-finish': 'the call does not finish',
45
46
  };
46
47
  /** An embedding request that cannot be used. The atlas search still answers. @internal */
47
48
  export class EmbeddingUnavailable extends Error {
48
49
  reason;
49
- constructor(reason) {
50
- super(REASON_TEXT[reason]);
50
+ constructor(reason, detail) {
51
+ super(detail === undefined ? REASON_TEXT[reason] : `${REASON_TEXT[reason]} (${detail})`);
51
52
  this.name = 'EmbeddingUnavailable';
52
53
  this.reason = reason;
53
54
  }
@@ -147,6 +148,10 @@ export function ollamaEmbedder(options) {
147
148
  // Ollama answers an unknown model with 404; the status is the signal, not the body's text.
148
149
  if (response.status === 404)
149
150
  throw new EmbeddingUnavailable('model-not-there');
151
+ // Any other error status is the server refusing the call: not an absent
152
+ // model, and not a reply whose shape was read and found wanting.
153
+ if (!response.ok)
154
+ throw new EmbeddingUnavailable('server-error', `status ${response.status}`);
150
155
  let body;
151
156
  try {
152
157
  body = await response.json();
@@ -154,8 +159,6 @@ export function ollamaEmbedder(options) {
154
159
  catch {
155
160
  throw new EmbeddingUnavailable('reply-not-a-vector');
156
161
  }
157
- if (!response.ok)
158
- throw new EmbeddingUnavailable('reply-not-a-vector');
159
162
  const embeddings = body.embeddings;
160
163
  if (!Array.isArray(embeddings) || embeddings.length !== texts.length) {
161
164
  throw new EmbeddingUnavailable('reply-not-a-vector');
@@ -177,7 +180,11 @@ export function ollamaEmbedder(options) {
177
180
  function noteFor(base, query) {
178
181
  if (query.expr !== undefined)
179
182
  return base;
180
- return `${base} The claim has no expression, so the structural score is zero and the atlas order is by id.`;
183
+ return `${base} The claim has no expression, so nothing is accepted: the atlas search ranks by structure, and a text claim has none to rank.`;
184
+ }
185
+ /** The atlas acceptance: by structure when the query has an expression; nothing for a text claim. */
186
+ function acceptedFor(query, corpus) {
187
+ return query.expr === undefined ? [] : rankByStructure(query, corpus);
181
188
  }
182
189
  function fallbackResult(query, accepted, reason) {
183
190
  return {
@@ -185,7 +192,7 @@ function fallbackResult(query, accepted, reason) {
185
192
  fallback: reason,
186
193
  proposals: null,
187
194
  accepted,
188
- note: noteFor(`Embeddings were requested. ${REASON_TEXT[reason]}. This is the atlas search.`, query),
195
+ note: noteFor(`Embeddings were requested, but they could not be used: ${REASON_TEXT[reason]}. This is the atlas search.`, query),
189
196
  };
190
197
  }
191
198
  /**
@@ -194,7 +201,7 @@ function fallbackResult(query, accepted, reason) {
194
201
  * @internal
195
202
  */
196
203
  export async function retrieveHybrid(args) {
197
- const accepted = rankByStructure(args.query, args.corpus);
204
+ const accepted = acceptedFor(args.query, args.corpus);
198
205
  if (args.embeddings !== true) {
199
206
  return {
200
207
  embeddings: 'not-requested',
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retrieval.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/hybrid-retrieval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hybrid-retrieval.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/hybrid-retrieval.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Optional embedding retrieval. An embedder proposes an order. `rankByStructure`\n * decides what is accepted. Cosine similarity does not enter that score.\n *\n * The Ollama implementation speaks HTTP to a local process. Nothing here\n * imports an embedding library, and nothing calls out of process unless a\n * caller asks for embeddings and supplies that implementation.\n *\n * The query form is the one registered in pre-registration Amendment 11.\n * Corpus records are embedded as their text, with no instruction prefix.\n *\n * @module atlas/benchmark/hybrid-retrieval\n * @internal\n */\n\nimport { CANONICAL_EQUATIONS } from '../../canonical/registry.js';\nimport { rankByStructure, type CorpusRecord, type RetrievalQuery } from './baselines.js';\n\n/** The instruction line registered with the embedding condition. @internal */\nexport const EMBEDDING_INSTRUCTION =\n 'Given a physics claim, retrieve the established physical relation that the claim restates or misuses';\n\n/** qwen3-embedding:4b, the model the design names. The package does not install it. @internal */\nexport const OLLAMA_EMBEDDING_MODEL = 'qwen3-embedding:4b';\n\n/**\n * Length stored in the frozen vector file\n * `docs/research/criterion3/embeddings/qwen3-embedding-4b.json`.\n * A live reply of another length is not that file's vector.\n * @internal\n */\nexport const FROZEN_VECTOR_DIMS = 2560;\n\n/** SHA-256 of that frozen file, as registered in Amendment 11. @internal */\nexport const FROZEN_VECTOR_SHA256 = '8fd79d2c6aaaf95c67f9a29ceb5fe4b88b42970c8e514d98c72c00a2c519cbdc';\n\n/**\n * How long a local Ollama call may run before it counts as not finishing.\n * The design names that outcome and does not name a duration.\n * @internal\n */\nexport const OLLAMA_TIMEOUT_MS = 5000;\n\n/** What the caller hears when embeddings were not asked for. @internal */\nexport const ATLAS_ONLY_NOTE = 'Embeddings were not requested. This is the atlas search.';\n\n/** What the caller hears when an embedding order was computed and then not accepted. @internal */\nexport const PROPOSAL_NOTE =\n 'The embedding order is a proposal, not evidence and not an acceptance. The atlas search accepted a separate order. Cosine similarity does not enter that score.';\n\nconst REASON_TEXT = {\n 'process-not-there': 'the process is not there',\n 'model-not-there': 'the model is not there',\n 'server-error': 'the server answered an error status',\n 'reply-not-a-vector':\n 'the reply is not a vector, or its length is not the length stored in the frozen file',\n 'call-did-not-finish': 'the call does not finish',\n} as const;\n\n/** Why an embedding request fell back to the atlas search. @internal */\nexport type EmbeddingFallbackReason = keyof typeof REASON_TEXT;\n\n/** An embedding request that cannot be used. The atlas search still answers. @internal */\nexport class EmbeddingUnavailable extends Error {\n readonly reason: EmbeddingFallbackReason;\n constructor(reason: EmbeddingFallbackReason, detail?: string) {\n super(detail === undefined ? REASON_TEXT[reason] : `${REASON_TEXT[reason]} (${detail})`);\n this.name = 'EmbeddingUnavailable';\n this.reason = reason;\n }\n}\n\n/** One vector per string, every vector the same length. @internal */\nexport type Embedder = (texts: readonly string[]) => Promise<readonly (readonly number[])[]>;\n\n/** `Instruct: …` newline `Query: …`, the registered query form. @internal */\nexport function queryInput(claim: string): string {\n return `Instruct: ${EMBEDDING_INSTRUCTION}\\nQuery: ${claim}`;\n}\n\n/**\n * A pure function of the text. The same text is the same vector.\n * `v = [sum of char codes, sum of (index+1) times char code]`.\n * @internal\n */\nexport function stubVector(text: string): readonly number[] {\n let sum = 0;\n let weighted = 0;\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n sum += code;\n weighted += (i + 1) * code;\n }\n return [sum, weighted];\n}\n\n/** The stub embedder. It does not open a socket. @internal */\nexport const stubEmbedder: Embedder = async (texts) => texts.map((text) => stubVector(text));\n\n/** Cosine similarity. Unequal lengths are not a similarity. @internal */\nexport function cosine(a: ArrayLike<number>, b: ArrayLike<number>): number {\n if (a.length !== b.length) {\n throw new EmbeddingUnavailable('reply-not-a-vector');\n }\n let dot = 0;\n let na = 0;\n let nb = 0;\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!;\n const y = b[i]!;\n dot += x * y;\n na += x * x;\n nb += y * y;\n }\n if (na === 0 || nb === 0) return 0;\n return dot / Math.sqrt(na * nb);\n}\n\n/**\n * Best cosine first. A tie breaks by record id, so the order does not depend\n * on which vector was computed last.\n * @internal\n */\nexport function rankByCosine(\n query: ArrayLike<number>,\n records: readonly { readonly id: string; readonly vector: ArrayLike<number> }[],\n): string[] {\n return records\n .map((r) => ({ id: r.id, s: cosine(query, r.vector) }))\n .sort((a, b) => (b.s !== a.s ? b.s - a.s : a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map((x) => x.id);\n}\n\n/** Decode a little-endian float32 vector stored as base64, the frozen file's encoding. @internal */\nexport function decodeFloat32(encoded: string): Float32Array {\n const bytes = Buffer.from(encoded, 'base64');\n if (bytes.byteLength === 0 || bytes.byteLength % 4 !== 0) {\n throw new EmbeddingUnavailable('reply-not-a-vector');\n }\n return new Float32Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));\n}\n\n/** The live canonical registry as retrieval records. Text is the name and the latex. @internal */\nexport function canonicalRetrievalCorpus(): CorpusRecord[] {\n return CANONICAL_EQUATIONS.map((equation) => ({\n id: equation.id,\n text: `${equation.name}. ${equation.formula_latex}`,\n ...(equation.scalarAst === undefined ? {} : { expr: equation.scalarAst }),\n }));\n}\n\n/** Where an Ollama embedder reaches the server, which model it asks for, and the vector width it expects. @internal */\nexport interface OllamaEmbedderOptions {\n readonly baseUrl: string;\n readonly model?: string;\n readonly expectedDims?: number;\n readonly timeoutMs?: number;\n readonly fetchImpl?: (url: string, init?: RequestInit) => Promise<Response>;\n}\n\n/** A local Ollama embedder. Off unless a caller constructs it. @internal */\nexport function ollamaEmbedder(options: OllamaEmbedderOptions): Embedder {\n const model = options.model ?? OLLAMA_EMBEDDING_MODEL;\n const expectedDims = options.expectedDims ?? FROZEN_VECTOR_DIMS;\n const timeoutMs = options.timeoutMs ?? OLLAMA_TIMEOUT_MS;\n const fetchImpl = options.fetchImpl ?? fetch;\n const base = options.baseUrl.replace(/\\/$/, '');\n return async (texts) => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n let response: Response;\n try {\n response = await fetchImpl(`${base}/api/embed`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ model, input: [...texts] }),\n signal: controller.signal,\n });\n } catch {\n if (controller.signal.aborted) throw new EmbeddingUnavailable('call-did-not-finish');\n throw new EmbeddingUnavailable('process-not-there');\n }\n // Ollama answers an unknown model with 404; the status is the signal, not the body's text.\n if (response.status === 404) throw new EmbeddingUnavailable('model-not-there');\n // Any other error status is the server refusing the call: not an absent\n // model, and not a reply whose shape was read and found wanting.\n if (!response.ok) throw new EmbeddingUnavailable('server-error', `status ${response.status}`);\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n throw new EmbeddingUnavailable('reply-not-a-vector');\n }\n const embeddings = (body as { embeddings?: unknown }).embeddings;\n if (!Array.isArray(embeddings) || embeddings.length !== texts.length) {\n throw new EmbeddingUnavailable('reply-not-a-vector');\n }\n const vectors: number[][] = [];\n for (const row of embeddings) {\n if (!Array.isArray(row) || row.length !== expectedDims || row.some((x) => typeof x !== 'number' || !Number.isFinite(x))) {\n throw new EmbeddingUnavailable('reply-not-a-vector');\n }\n vectors.push(row);\n }\n return vectors;\n } finally {\n clearTimeout(timer);\n }\n };\n}\n\n/** Both orders, kept apart. `accepted` is always `rankByStructure`. @internal */\nexport interface HybridRetrieval {\n readonly embeddings: 'not-requested' | 'used' | 'fallback';\n readonly fallback: EmbeddingFallbackReason | null;\n readonly proposals: readonly string[] | null;\n readonly accepted: readonly string[];\n readonly note: string;\n}\n\nfunction noteFor(base: string, query: RetrievalQuery): string {\n if (query.expr !== undefined) return base;\n return `${base} The claim has no expression, so nothing is accepted: the atlas search ranks by structure, and a text claim has none to rank.`;\n}\n\n/** The atlas acceptance: by structure when the query has an expression; nothing for a text claim. */\nfunction acceptedFor(query: RetrievalQuery, corpus: readonly CorpusRecord[]): readonly string[] {\n return query.expr === undefined ? [] : rankByStructure(query, corpus);\n}\n\nfunction fallbackResult(query: RetrievalQuery, accepted: readonly string[], reason: EmbeddingFallbackReason): HybridRetrieval {\n return {\n embeddings: 'fallback',\n fallback: reason,\n proposals: null,\n accepted,\n note: noteFor(`Embeddings were requested, but they could not be used: ${REASON_TEXT[reason]}. This is the atlas search.`, query),\n };\n}\n\n/**\n * Atlas search, optionally after an embedding proposal. A fallback is the\n * atlas answer plus a named reason. It does not throw.\n * @internal\n */\nexport async function retrieveHybrid(args: {\n readonly query: RetrievalQuery;\n readonly corpus: readonly CorpusRecord[];\n readonly embeddings?: boolean;\n readonly embedder?: Embedder;\n}): Promise<HybridRetrieval> {\n const accepted = acceptedFor(args.query, args.corpus);\n if (args.embeddings !== true) {\n return {\n embeddings: 'not-requested',\n fallback: null,\n proposals: null,\n accepted,\n note: noteFor(ATLAS_ONLY_NOTE, args.query),\n };\n }\n if (args.embedder === undefined) {\n return fallbackResult(args.query, accepted, 'process-not-there');\n }\n const inputs = [queryInput(args.query.text), ...args.corpus.map((record) => record.text)];\n let vectors: readonly (readonly number[])[];\n try {\n vectors = await args.embedder(inputs);\n } catch (error) {\n if (error instanceof EmbeddingUnavailable) return fallbackResult(args.query, accepted, error.reason);\n throw error;\n }\n if (vectors.length !== inputs.length) return fallbackResult(args.query, accepted, 'reply-not-a-vector');\n try {\n const proposals = rankByCosine(\n vectors[0]!,\n args.corpus.map((record, index) => ({ id: record.id, vector: vectors[index + 1]! })),\n );\n return {\n embeddings: 'used',\n fallback: null,\n proposals,\n accepted,\n note: noteFor(PROPOSAL_NOTE, args.query),\n };\n } catch (error) {\n if (error instanceof EmbeddingUnavailable) return fallbackResult(args.query, accepted, error.reason);\n throw error;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"leakage.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/leakage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leakage.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/leakage.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 5, S5.1 — leakage checks for the invalid-bridge benchmark.\n *\n * Design note: `docs/planning/Atlas-Phase-5-Design.md` §3.\n *\n * ## Why not `normalForm` directly\n *\n * The plan said renamed-variable variants \"are detected as the same item by\n * normal form\". `normalForm` keys symbols by NAME, so `x/t` and `y/s` do not\n * collide (measured). {@link leakageKey} therefore renames every DIMENSIONED\n * symbol to its dimension signature first. That over-merges genuinely different\n * quantities of one dimension, which is the SAFE direction for leakage: a false\n * collision is flagged and reviewed, a missed one contaminates the study.\n *\n * @module atlas/benchmark/leakage\n * @internal\n */\n\nimport { normalForm } from '../../canonical/normal-form.js';\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport type { Dimension } from '../../dimensional/types.js';\nimport type { BenchmarkItem } from './types.js';\n\nconst isDimensionless = (d: Dimension): boolean =>\n d.L === 0 && d.M === 0 && d.T === 0 && d.I === 0 && d.Theta === 0 && d.N === 0 && d.J === 0;\n\nconst dimensionName = (d: Dimension): string =>\n `dim[${d.L},${d.M},${d.T},${d.I},${d.Theta},${d.N},${d.J}]`;\n\n/**\n * Rename every dimensioned symbol leaf to its dimension signature. Dimensionless\n * leaves keep their names: `normalForm` already drops recognised constants and\n * tags unknown dimensionless stubs, and a numeric literal must stay a literal.\n */\nfunction renameByDimension(node: ExprNode): ExprNode {\n if (node.kind === 'symbol') {\n return isDimensionless(node.dim) ? node : { ...node, name: dimensionName(node.dim) };\n }\n if (node.kind === 'op') return { ...node, args: node.args.map(renameByDimension) };\n if (node.kind === 'transcendental' || node.kind === 'abs') {\n return { ...node, arg: renameByDimension(node.arg) };\n }\n // Other arms (integral, derivative, tensor nodes) are compared as normalForm\n // compares them — structurally, names included. Stated, not hidden: a renamed\n // variant INSIDE an integral is not caught by this key.\n return node;\n}\n\n/**\n * The key under which two items count as the same claim: the normal form of the\n * expression after renaming dimensioned symbols by dimension.\n *\n * @internal\n */\nexport function leakageKey(expr: ExprNode): string {\n return normalForm(renameByDimension(expr));\n}\n\n/** A pair of items that share a leakage key. @internal */\nexport interface LeakageCollision {\n readonly key: string;\n readonly ids: readonly string[];\n /** The splits the colliding items sit in. More than one ⇒ LEAKAGE. */\n readonly splits: readonly string[];\n}\n\n/**\n * Group items by leakage key and report every group whose members span MORE THAN\n * ONE split. Such a group means the held-out split contains a claim the\n * in-distribution split already shows, under the same or different names.\n *\n * @internal\n */\nexport function findCrossSplitLeakage(items: readonly BenchmarkItem[]): LeakageCollision[] {\n const groups = new Map<string, BenchmarkItem[]>();\n for (const item of items) {\n const key = leakageKey(item.expr);\n const bucket = groups.get(key);\n if (bucket === undefined) groups.set(key, [item]);\n else bucket.push(item);\n }\n const out: LeakageCollision[] = [];\n for (const [key, bucket] of groups) {\n const splits = [...new Set(bucket.map((i) => i.split))].sort();\n if (splits.length > 1) out.push({ key, ids: bucket.map((i) => i.id), splits });\n }\n return out;\n}\n\n/** A renamed-variable variant that violates the same-split or same-key rule. @internal */\nexport interface VariantProblem {\n readonly id: string;\n readonly of: string;\n readonly problem: 'missing-original' | 'different-split' | 'not-same-claim';\n}\n\n/**\n * Check every `renamedVariant` link: the original exists, sits in the SAME split,\n * and genuinely has the same leakage key (a \"variant\" that is a different claim\n * is mislabelled, and the label would hide a real item).\n *\n * @internal\n */\nexport function checkRenamedVariants(items: readonly BenchmarkItem[]): VariantProblem[] {\n const byId = new Map(items.map((i) => [i.id, i]));\n const out: VariantProblem[] = [];\n for (const item of items) {\n if (item.renamedVariant === undefined) continue;\n const original = byId.get(item.renamedVariant);\n if (original === undefined) {\n out.push({ id: item.id, of: item.renamedVariant, problem: 'missing-original' });\n } else if (original.split !== item.split) {\n out.push({ id: item.id, of: item.renamedVariant, problem: 'different-split' });\n } else if (leakageKey(original.expr) !== leakageKey(item.expr)) {\n out.push({ id: item.id, of: item.renamedVariant, problem: 'not-same-claim' });\n }\n }\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 5, S5.1 — load and validate benchmark items.\n *\n * Design note: `docs/planning/Atlas-Phase-5-Design.md` §0, §2.\n *\n * This module reads the PUBLIC half of a benchmark directory and nothing else.\n * The answers live in a sibling half that no `src/` file may read;\n * `tests/atlas/benchmark.test.ts` holds the import guard, with a positive\n * control proving the guard can fire.\n *\n * **The loader enforces the one part of the independence rule that code CAN\n * enforce: a frozen item whose `authorship` is not `'independent'` is refused.**\n * Whether the author really was independent is a fact about people, recorded in\n * the pre-registration note and checked by review.\n *\n * @module atlas/benchmark/loader\n * @internal\n */\n\nimport { readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { HELD_OUT_FAMILY } from './types.js';\nimport type { BenchmarkItem } from './types.js';\n\n/** One reason an item set is not admissible. @internal */\nexport interface ItemProblem {\n readonly id: string;\n readonly problem: string;\n}\n\n/**\n * Validate an item set against the schema and the rules that make it a benchmark.\n *\n * @param items - the items, as parsed.\n * @param frozen - true for the frozen set (authorship must be `'independent'`),\n * false for the contested staging area (authorship must be `'contested-draft'`).\n * @returns every problem found; empty means admissible. Never throws, so a\n * caller sees ALL problems at once rather than the first.\n * @internal\n */\nexport function validateItems(items: readonly BenchmarkItem[], frozen: boolean): ItemProblem[] {\n const problems: ItemProblem[] = [];\n const seen = new Set<string>();\n for (const item of items) {\n const p = (problem: string): void => {\n problems.push({ id: item.id, problem });\n };\n if (seen.has(item.id)) p('duplicate id');\n seen.add(item.id);\n\n const wanted = frozen ? 'independent' : 'contested-draft';\n if (item.authorship !== wanted) {\n p(`authorship '${item.authorship}' where the ${frozen ? 'frozen' : 'contested'} set requires '${wanted}'`);\n }\n // The answer lives in the scorer half. A public item that carries it would\n // hand the key to any condition that reads the public file.\n if ('kind' in item || 'failureKind' in item) {\n p('the public half carries the answer (kind/failureKind); it belongs in scorer/labels.json');\n }\n if ((item.family === HELD_OUT_FAMILY) !== (item.split === 'held-out')) {\n p(`the held-out split is exactly the '${HELD_OUT_FAMILY}' family; got family '${item.family}' in split '${item.split}'`);\n }\n if (item.premises.length === 0) p('no premises');\n if (item.source.trim() === '') p('no source');\n }\n return problems;\n}\n\n/** Thrown when a benchmark directory holds an inadmissible item set. @internal */\nexport class BenchmarkAdmissionError extends Error {\n constructor(readonly problems: readonly ItemProblem[]) {\n super(\n `benchmark items are not admissible: ${problems\n .map((p) => `${p.id}: ${p.problem}`)\n .join('; ')}`,\n );\n }\n}\n\nfunction readItems(file: string): BenchmarkItem[] {\n const parsed = JSON.parse(readFileSync(file, 'utf-8')) as unknown;\n if (!Array.isArray(parsed)) throw new Error(`${file}: expected a JSON array of items`);\n return parsed as BenchmarkItem[];\n}\n\n/**\n * Load the FROZEN items from `<benchmarkDir>/public/items.json`.\n *\n * @throws BenchmarkAdmissionError when any item is inadmissible — a frozen set\n * with one contested draft in it is not a smaller benchmark, it is a broken one.\n * @internal\n */\nexport function loadFrozenItems(benchmarkDir: string): BenchmarkItem[] {\n const items = readItems(join(benchmarkDir, 'public', 'items.json'));\n const problems = validateItems(items, true);\n if (problems.length > 0) throw new BenchmarkAdmissionError(problems);\n return items;\n}\n\n/**\n * Load the CONTESTED drafts from `<benchmarkDir>/contested/items.json`. These are\n * never scored; they wait for an independent author to accept or rewrite them.\n *\n * @internal\n */\nexport function loadContestedDrafts(benchmarkDir: string): BenchmarkItem[] {\n const items = readItems(join(benchmarkDir, 'contested', 'items.json'));\n const problems = validateItems(items, false);\n if (problems.length > 0) throw new BenchmarkAdmissionError(problems);\n return items;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"run-atlas.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/run-atlas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,cAKzB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAK7E,CAAC;AA6CF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,GAAE,cAA4B,GAAG,YAAY,CAoHtG;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,MAAM,GAAE,cAA4B,GACnC,YAAY,EAAE,CAEhB"}
1
+ {"version":3,"file":"run-atlas.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/run-atlas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,cAKzB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAK7E,CAAC;AAwDF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,GAAE,cAA4B,GAAG,YAAY,CAuHtG;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,MAAM,GAAE,cAA4B,GACnC,YAAY,EAAE,CAEhB"}
@@ -48,7 +48,17 @@ export const ABLATION_CONFIGS = [
48
48
  ['+ dimensions & conventions', { types: true, assumptions: true, dimensionsAndConventions: true, regimes: false }],
49
49
  ['+ regimes', FULL_CONFIG],
50
50
  ];
51
- /** The instrument each applicability finding belongs to. */
51
+ /**
52
+ * The instrument each applicability finding belongs to.
53
+ *
54
+ * `model-incompatibility` has no entry: a benchmark item carries model IDS,
55
+ * not model records with families, so this runner never passes `premises`
56
+ * or `conclusion` to `checkApplicability` and that finding cannot arise
57
+ * here. The sentence that it mapped to a `'models'` instrument no config
58
+ * field gated is the record from before this map was narrowed; a finding of
59
+ * that kind now throws below, because it would mean the instrument changed
60
+ * without this map.
61
+ */
52
62
  const FINDING_INSTRUMENT = {
53
63
  'dimensional-inconsistency': 'dimensionsAndConventions',
54
64
  'convention-mismatch': 'dimensionsAndConventions',
@@ -56,7 +66,6 @@ const FINDING_INSTRUMENT = {
56
66
  'division-unguarded': 'assumptions',
57
67
  'division-by-zero': 'assumptions',
58
68
  'squaring-adds-solutions': 'assumptions',
59
- 'model-incompatibility': 'models',
60
69
  };
61
70
  /** Which failure kind a BLOCKING applicability finding points to. */
62
71
  const FINDING_TO_FAILURE = {
@@ -127,6 +136,9 @@ export function runAtlasOnItem(item, config = FULL_CONFIG) {
127
136
  : { conclusionConventions: item.conventions.conclusion }),
128
137
  });
129
138
  for (const f of findings) {
139
+ if (f.kind === 'model-incompatibility') {
140
+ throw new Error('runAtlasItem: checkApplicability reported model-incompatibility without being given models');
141
+ }
130
142
  const instrument = FINDING_INSTRUMENT[f.kind];
131
143
  if (instrument === 'assumptions' && !config.assumptions)
132
144
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"run-atlas.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/run-atlas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-atlas.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/run-atlas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 5, S5.2 — the ATLAS condition of the invalid-bridge benchmark.\n *\n * Design note: `docs/planning/Atlas-Phase-5-Design.md` §6.\n *\n * For each item the runner applies three atlas instruments — the applicability\n * checker (S4.1), the composition table (S3) and the regime check (S2) — and\n * emits `accept`, `reject` or `abstain`.\n *\n * ## The decision rule, and why accept is the HARDEST outcome to reach\n *\n * - **reject** when an instrument DEMONSTRABLY fires: a blocking applicability\n * finding, a chain OVERCLAIMED as an exact equivalence, a structural analogy\n * promoted to an equivalence, or a regime inequality checked and violated.\n * - **accept** only when EVERY ENABLED instrument RAN and CLEARED: side conditions were\n * stated, the applicability checker found nothing, the regime was supplied and\n * every inequality was checked and held, and any claimed chain agrees with the\n * table. At least one instrument must have RUN: an item that no enabled\n * instrument applies to abstains, because nothing cleared it. S4.1 already fixed the principle: an empty finding list means \"no rule\n * fired\", which is weaker than \"valid\". An item that leaves a check unrun has\n * not been cleared by it.\n * - **abstain** otherwise. Abstention is a first-class outcome and is preferred\n * to a wrong accept (ROADMAP Phase 5, pre-stated criteria).\n *\n * The failure kind a rejection names is a MAPPING from the rule that fired, and\n * it is only as good as that mapping: a dimensional inconsistency is reported as\n * `notation-collision` because that is its commonest cause, not because the rule\n * can see notation. The scorer grades \"rejected\" and \"named the right kind\"\n * separately, so an imperfect mapping costs the second score only.\n *\n * @module atlas/benchmark/run-atlas\n * @internal\n */\n\nimport { checkApplicability } from '../applicability.js';\nimport type { ApplicabilityFindingKind } from '../applicability.js';\nimport { composeRelation, NO_COMPOSITE_CLAIM } from '../composition-table.js';\nimport { regimeHolds } from '../regime.js';\nimport type { RelationType } from '../types.js';\nimport type { BenchmarkItem, FailureKind } from './types.js';\n\n/** What the atlas condition concluded about one item. @internal */\nexport interface AtlasVerdict {\n readonly itemId: string;\n readonly outcome: 'accept' | 'reject' | 'abstain';\n /** Present on a reject when the rule that fired maps to a failure kind. */\n readonly detectedFailure?: FailureKind;\n /** Every reason, in rule order — including the unrun checks behind an abstention. */\n readonly reasons: readonly string[];\n}\n\n/**\n * Which instruments a run uses — the S6.2 ablation. The four named\n * configurations in {@link ABLATION_CONFIGS} are CUMULATIVE.\n *\n * @internal\n */\nexport interface AtlasRunConfig {\n /** The composition table over relation types. */\n readonly types: boolean;\n /** Side-condition rules: unguarded / zero divisors, squaring. */\n readonly assumptions: boolean;\n /** Dimensional consistency and convention agreement. */\n readonly dimensionsAndConventions: boolean;\n /** The regime check at the use site. */\n readonly regimes: boolean;\n}\n\n/** Every instrument on: the atlas condition as scored. @internal */\nexport const FULL_CONFIG: AtlasRunConfig = {\n types: true,\n assumptions: true,\n dimensionsAndConventions: true,\n regimes: true,\n};\n\n/** The four cumulative ablation configurations, in the plan's order. @internal */\nexport const ABLATION_CONFIGS: ReadonlyArray<readonly [string, AtlasRunConfig]> = [\n ['types only', { types: true, assumptions: false, dimensionsAndConventions: false, regimes: false }],\n ['+ assumptions', { types: true, assumptions: true, dimensionsAndConventions: false, regimes: false }],\n ['+ dimensions & conventions', { types: true, assumptions: true, dimensionsAndConventions: true, regimes: false }],\n ['+ regimes', FULL_CONFIG],\n];\n\n/**\n * The instrument each applicability finding belongs to.\n *\n * `model-incompatibility` has no entry: a benchmark item carries model IDS,\n * not model records with families, so this runner never passes `premises`\n * or `conclusion` to `checkApplicability` and that finding cannot arise\n * here. The sentence that it mapped to a `'models'` instrument no config\n * field gated is the record from before this map was narrowed; a finding of\n * that kind now throws below, because it would mean the instrument changed\n * without this map.\n */\nconst FINDING_INSTRUMENT: Readonly<\n Record<Exclude<ApplicabilityFindingKind, 'model-incompatibility'>, 'assumptions' | 'dimensionsAndConventions'>\n> = {\n 'dimensional-inconsistency': 'dimensionsAndConventions',\n 'convention-mismatch': 'dimensionsAndConventions',\n 'convention-undeclared': 'dimensionsAndConventions',\n 'division-unguarded': 'assumptions',\n 'division-by-zero': 'assumptions',\n 'squaring-adds-solutions': 'assumptions',\n};\n\n/** Which failure kind a BLOCKING applicability finding points to. */\nconst FINDING_TO_FAILURE: Readonly<Partial<Record<ApplicabilityFindingKind, FailureKind>>> = {\n 'dimensional-inconsistency': 'notation-collision',\n 'convention-mismatch': 'convention-mismatch',\n 'division-by-zero': 'domain-violation',\n};\n\n/** Relations that assert more than an analogy can carry. */\nconst STRONG: ReadonlySet<RelationType> = new Set(['exact-equivalence', 'derivation']);\n\n/**\n * The failure kind an OVERCLAIMED chain points to: a chain claimed as an exact\n * equivalence that the table composes to something weaker.\n *\n * - through a restriction ⇒ the restriction's condition was dropped:\n * `omitted-premise`;\n * - to a derivation or a coarse-graining ⇒ the claim asserts an inverse the\n * one-way step does not have: `false-inverse`.\n */\nfunction overclaimFailure(chain: readonly RelationType[]): FailureKind {\n return chain.includes('restriction') ? 'omitted-premise' : 'false-inverse';\n}\n\n/**\n * Whether `claimed` follows from `composed`. The table's own non-declined\n * results are exact-equivalence, derivation, restriction and coarse-graining;\n * of these only exact-equivalence ⇒ derivation is an implication this module\n * asserts. Anything else unequal is \"not shown\", never \"shown\".\n */\nconst implies = (composed: RelationType, claimed: RelationType): boolean =>\n composed === claimed || (composed === 'exact-equivalence' && claimed === 'derivation');\n\n/**\n * Run the atlas condition on one item. Pure and deterministic; never throws.\n *\n * @internal\n */\nexport function runAtlasOnItem(item: BenchmarkItem, config: AtlasRunConfig = FULL_CONFIG): AtlasVerdict {\n const reasons: string[] = [];\n let rejectKind: FailureKind | undefined;\n let rejected = false;\n const reject = (reason: string, kind?: FailureKind): void => {\n reasons.push(`REJECT: ${reason}`);\n if (!rejected) rejectKind = kind;\n rejected = true;\n };\n let allRanAndCleared = true;\n // An accept needs at least one instrument that actually RAN. Without this,\n // an item no enabled instrument applies to is accepted with nothing checked.\n let ranAny = false;\n const unrun = (reason: string): void => {\n reasons.push(`UNRUN: ${reason}`);\n allRanAndCleared = false;\n };\n\n // 1. Applicability — split by instrument so the ablation can switch each off.\n const applicabilityOn = config.assumptions || config.dimensionsAndConventions;\n if (!applicabilityOn) {\n // Instrument disabled: neither run nor required.\n } else if (item.sideConditions === undefined) {\n unrun('no side conditions stated, so the applicability checker has nothing to check against');\n } else {\n ranAny = true;\n const findings = checkApplicability({\n ast: item.expr,\n sideConditions: item.sideConditions,\n ...(item.conventions?.premise === undefined ? {} : { premiseConventions: item.conventions.premise }),\n ...(item.conventions?.conclusion === undefined\n ? {}\n : { conclusionConventions: item.conventions.conclusion }),\n });\n for (const f of findings) {\n if (f.kind === 'model-incompatibility') {\n throw new Error('runAtlasItem: checkApplicability reported model-incompatibility without being given models');\n }\n const instrument = FINDING_INSTRUMENT[f.kind];\n if (instrument === 'assumptions' && !config.assumptions) continue;\n if (instrument === 'dimensionsAndConventions' && !config.dimensionsAndConventions) continue;\n if (f.severity === 'blocking') reject(`${f.kind}: ${f.detail}`, FINDING_TO_FAILURE[f.kind]);\n else {\n reasons.push(`QUESTION: ${f.kind}: ${f.detail}`);\n allRanAndCleared = false;\n }\n }\n }\n\n // 2. Composition. Only for items that claim a chain.\n if (config.types && item.composedFrom !== undefined) {\n ranAny = true;\n const [first, second] = item.composedFrom;\n const composed = composeRelation(first, second);\n if (item.composedFrom.includes('structural-analogy') && STRONG.has(item.claimedRelation)) {\n reject(\n `a chain through structural-analogy is claimed as ${item.claimedRelation}`,\n 'analogy-promoted',\n );\n } else if (composed === NO_COMPOSITE_CLAIM) {\n reasons.push(`QUESTION: the table declines to compose ${first} ∘ ${second}`);\n allRanAndCleared = false;\n } else if (implies(composed, item.claimedRelation)) {\n reasons.push(`CLEARED: ${first} ∘ ${second} composes to ${composed}, which gives ${item.claimedRelation}`);\n } else if (item.claimedRelation === 'exact-equivalence') {\n reject(\n `${first} ∘ ${second} composes only to ${composed}; the exact equivalence is overclaimed`,\n overclaimFailure(item.composedFrom),\n );\n } else {\n reasons.push(\n `QUESTION: ${first} ∘ ${second} composes to ${composed}; the table does not show ${item.claimedRelation}`,\n );\n allRanAndCleared = false;\n }\n }\n\n // 3. Regime.\n if (!config.regimes) {\n // Instrument disabled: neither run nor required.\n } else if (item.regime === undefined) {\n unrun('no regime supplied, so the use site was never checked against a domain');\n } else {\n ranAny = true;\n const check = regimeHolds(\n { family: item.family, inequalities: item.regime.inequalities, groupDefinitions: {} },\n item.regime.values,\n );\n if (check.ok === false) {\n reject(\n `regime violated: ${check.violated.map((i) => `${i.group} ${i.op} ${i.bound}`).join(', ')}`,\n 'domain-violation',\n );\n } else if (check.ok === 'unknown') {\n unrun(`regime unchecked for ${check.unchecked.map((i) => i.group).join(', ')}`);\n } else if (item.regime.inequalities.length === 0) {\n // regimeHolds returns true for an empty list; that is \"nothing to check\",\n // not \"checked and held\" — the silent pass RegimeCheck warns about.\n unrun('the regime states no inequality, so nothing was checked');\n }\n }\n\n if (rejected) {\n return {\n itemId: item.id,\n outcome: 'reject',\n ...(rejectKind === undefined ? {} : { detectedFailure: rejectKind }),\n reasons,\n };\n }\n if (allRanAndCleared && !ranAny) {\n reasons.push('UNRUN: no enabled instrument applies to this item, so nothing was checked');\n return { itemId: item.id, outcome: 'abstain', reasons };\n }\n if (allRanAndCleared) {\n reasons.push('ACCEPT: every instrument ran and cleared');\n return { itemId: item.id, outcome: 'accept', reasons };\n }\n return { itemId: item.id, outcome: 'abstain', reasons };\n}\n\n/** Run the atlas condition over a set of items, in order. @internal */\nexport function runAtlasCondition(\n items: readonly BenchmarkItem[],\n config: AtlasRunConfig = FULL_CONFIG,\n): AtlasVerdict[] {\n return items.map((item) => runAtlasOnItem(item, config));\n}\n"]}
@@ -36,7 +36,7 @@ export interface PairedTable {
36
36
  }
37
37
  /** McNemar's test on the discordant cells. @internal */
38
38
  export interface McNemarResult {
39
- /** Continuity-corrected χ² = (|b − c| − 1)² / (b + c); 0 when b + c = 0. */
39
+ /** Continuity-corrected χ² = max(0, |b − c| − 1)² / (b + c); 0 when b + c = 0. The correction never goes negative (Edwards 1948). */
40
40
  readonly chiSquared: number;
41
41
  /** Exact two-sided p-value from Binomial(b + c, ½); 1 when b + c = 0. */
42
42
  readonly exactP: number;
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mDAAmD;AACnD,eAAO,MAAM,GAAG,oBAAoB,CAAC;AAErC,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAM,GAAG,QAAQ,CAgB9E;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAQzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,SAAM,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuB1G;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAsB1E;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAM,GAAG,WAAW,CAgBjF"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mDAAmD;AACnD,eAAO,MAAM,GAAG,oBAAoB,CAAC;AAErC,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAM,GAAG,QAAQ,CAgB9E;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,qIAAqI;IACrI,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAQzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,SAAM,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuB1G;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAsB1E;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAM,GAAG,WAAW,CAgBjF"}
@@ -56,7 +56,7 @@ export function mcnemar(table) {
56
56
  const n = table.b + table.c;
57
57
  if (n === 0)
58
58
  return { chiSquared: 0, exactP: 1 };
59
- const chiSquared = (Math.abs(table.b - table.c) - 1) ** 2 / n;
59
+ const chiSquared = Math.max(0, Math.abs(table.b - table.c) - 1) ** 2 / n;
60
60
  const k = Math.min(table.b, table.c);
61
61
  let tail = 0;
62
62
  for (let i = 0; i <= k; i++)