universal-physics-tensor 10.0.0 → 12.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 (835) hide show
  1. package/README.md +39 -36
  2. package/bin/upt.mjs +13 -1
  3. package/data/applied-cases.json +1892 -0
  4. package/data/applied-cases.schema.json +194 -0
  5. package/data/atlas/atlas.json +25 -25
  6. package/data/atlas/atlas.jsonld +1 -1
  7. package/data/atlas/diffusion.json +6 -6
  8. package/data/atlas/oscillators.json +7 -7
  9. package/data/atlas/waves.json +14 -14
  10. package/data/atlas/witness-results.json +11 -11
  11. package/data/bridge-catalog.json +389 -230
  12. package/data/bridge-catalog.schema.json +45 -7
  13. package/data/units.json +6 -25
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +21 -15
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  18. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  20. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  21. package/dist/atlas/benchmark/loader.js +2 -2
  22. package/dist/atlas/benchmark/loader.js.map +1 -1
  23. package/dist/atlas/benchmark/stats.d.ts +2 -2
  24. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  25. package/dist/atlas/benchmark/stats.js +9 -15
  26. package/dist/atlas/benchmark/stats.js.map +1 -1
  27. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  28. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  29. package/dist/atlas/catalog-formal-ref.js +52 -5
  30. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  31. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  32. package/dist/atlas/chain-pipeline.js +7 -8
  33. package/dist/atlas/chain-pipeline.js.map +1 -1
  34. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  35. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  37. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  38. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  39. package/dist/atlas/diffusion/bridges.js +27 -39
  40. package/dist/atlas/diffusion/bridges.js.map +1 -1
  41. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  42. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  43. package/dist/atlas/diffusion/dimensions.js +8 -16
  44. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  45. package/dist/atlas/diffusion/models.d.ts +3 -3
  46. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  47. package/dist/atlas/diffusion/models.js +5 -10
  48. package/dist/atlas/diffusion/models.js.map +1 -1
  49. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  50. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  51. package/dist/atlas/diffusion/numerics.js +38 -24
  52. package/dist/atlas/diffusion/numerics.js.map +1 -1
  53. package/dist/atlas/link-prediction.d.ts +106 -3
  54. package/dist/atlas/link-prediction.d.ts.map +1 -1
  55. package/dist/atlas/link-prediction.js +212 -66
  56. package/dist/atlas/link-prediction.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  59. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  61. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  62. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  63. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  64. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  65. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  66. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  67. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  68. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  69. package/dist/atlas/oscillators/dimensions.js +9 -21
  70. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  71. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  72. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  74. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  75. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  76. package/dist/atlas/oscillators/models.js +2 -6
  77. package/dist/atlas/oscillators/models.js.map +1 -1
  78. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  79. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  80. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  81. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  82. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  83. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  84. package/dist/atlas/oscillators/phase-translation.js +3 -4
  85. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  86. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  87. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  88. package/dist/atlas/oscillators/position-translation.js +123 -12
  89. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  90. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  91. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/rejections.js +0 -7
  93. package/dist/atlas/oscillators/rejections.js.map +1 -1
  94. package/dist/atlas/physjs-entries.generated.d.ts +35 -25
  95. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  96. package/dist/atlas/physjs-entries.generated.js +37 -25
  97. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  98. package/dist/atlas/physjs-ref.d.ts +34 -31
  99. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  100. package/dist/atlas/physjs-ref.js +55 -53
  101. package/dist/atlas/physjs-ref.js.map +1 -1
  102. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  103. package/dist/atlas/physjs-reviewed.js +15 -15
  104. package/dist/atlas/physjs-reviewed.js.map +1 -1
  105. package/dist/atlas/poster/statements.d.ts +0 -19
  106. package/dist/atlas/poster/statements.d.ts.map +1 -1
  107. package/dist/atlas/poster/statements.js +1 -1
  108. package/dist/atlas/poster/statements.js.map +1 -1
  109. package/dist/atlas/proof-target.d.ts +1 -1
  110. package/dist/atlas/proof-target.js +1 -1
  111. package/dist/atlas/proof-target.js.map +1 -1
  112. package/dist/atlas/regime.d.ts +1 -1
  113. package/dist/atlas/regime.d.ts.map +1 -1
  114. package/dist/atlas/regime.js +1 -1
  115. package/dist/atlas/regime.js.map +1 -1
  116. package/dist/atlas/text-overlap.d.ts +23 -0
  117. package/dist/atlas/text-overlap.d.ts.map +1 -0
  118. package/dist/atlas/text-overlap.js +41 -0
  119. package/dist/atlas/text-overlap.js.map +1 -0
  120. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges-closure.js +2 -6
  122. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  123. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  124. package/dist/atlas/waves/bridges.js +32 -48
  125. package/dist/atlas/waves/bridges.js.map +1 -1
  126. package/dist/atlas/waves/models.d.ts +5 -6
  127. package/dist/atlas/waves/models.d.ts.map +1 -1
  128. package/dist/atlas/waves/models.js +7 -13
  129. package/dist/atlas/waves/models.js.map +1 -1
  130. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  131. package/dist/atlas/waves/numerics.js +10 -3
  132. package/dist/atlas/waves/numerics.js.map +1 -1
  133. package/dist/atlas/witness-numeric.d.ts +30 -0
  134. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  135. package/dist/atlas/witness-numeric.js +53 -0
  136. package/dist/atlas/witness-numeric.js.map +1 -1
  137. package/dist/atlas/witness-specs.d.ts.map +1 -1
  138. package/dist/atlas/witness-specs.js +19 -0
  139. package/dist/atlas/witness-specs.js.map +1 -1
  140. package/dist/atlas/witness-symbolic.d.ts +75 -3
  141. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  142. package/dist/atlas/witness-symbolic.js +116 -10
  143. package/dist/atlas/witness-symbolic.js.map +1 -1
  144. package/dist/bridges/catalog-load.d.ts.map +1 -1
  145. package/dist/bridges/catalog-load.js +13 -8
  146. package/dist/bridges/catalog-load.js.map +1 -1
  147. package/dist/bridges/catalog-types.d.ts +26 -2
  148. package/dist/bridges/catalog-types.d.ts.map +1 -1
  149. package/dist/bridges/catalog-types.js +11 -1
  150. package/dist/bridges/catalog-types.js.map +1 -1
  151. package/dist/bridges/evaluation-errors.d.ts +31 -1
  152. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  153. package/dist/bridges/evaluation-errors.js +20 -2
  154. package/dist/bridges/evaluation-errors.js.map +1 -1
  155. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  156. package/dist/bridges/evaluator-inputs.js +7 -5
  157. package/dist/bridges/evaluator-inputs.js.map +1 -1
  158. package/dist/bridges/evaluators.d.ts.map +1 -1
  159. package/dist/bridges/evaluators.js +27 -12
  160. package/dist/bridges/evaluators.js.map +1 -1
  161. package/dist/bridges/expr-parse.d.ts +11 -0
  162. package/dist/bridges/expr-parse.d.ts.map +1 -1
  163. package/dist/bridges/expr-parse.js +14 -5
  164. package/dist/bridges/expr-parse.js.map +1 -1
  165. package/dist/bridges/holds.d.ts +35 -3
  166. package/dist/bridges/holds.d.ts.map +1 -1
  167. package/dist/bridges/holds.js +117 -23
  168. package/dist/bridges/holds.js.map +1 -1
  169. package/dist/bridges/notices.d.ts.map +1 -1
  170. package/dist/bridges/notices.js +5 -5
  171. package/dist/bridges/notices.js.map +1 -1
  172. package/dist/bridges/relation-eval.d.ts +4 -4
  173. package/dist/bridges/relation-eval.d.ts.map +1 -1
  174. package/dist/bridges/relation-eval.js +15 -16
  175. package/dist/bridges/relation-eval.js.map +1 -1
  176. package/dist/bridges/sensitivity.d.ts.map +1 -1
  177. package/dist/bridges/sensitivity.js +3 -3
  178. package/dist/bridges/sensitivity.js.map +1 -1
  179. package/dist/bridges/validity.d.ts +33 -0
  180. package/dist/bridges/validity.d.ts.map +1 -0
  181. package/dist/bridges/validity.js +67 -0
  182. package/dist/bridges/validity.js.map +1 -0
  183. package/dist/canonical/entries/atomic.js +1 -3
  184. package/dist/canonical/entries/atomic.js.map +1 -1
  185. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  186. package/dist/canonical/entries/condensed-matter.js +4 -5
  187. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  188. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  189. package/dist/canonical/entries/dimensional-classics.js +3 -4
  190. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  191. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  192. package/dist/canonical/entries/electromagnetism.js +4 -10
  193. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  194. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  195. package/dist/canonical/entries/fluids-waves.js +3 -7
  196. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  197. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  198. package/dist/canonical/entries/mechanics.js +4 -6
  199. package/dist/canonical/entries/mechanics.js.map +1 -1
  200. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  201. package/dist/canonical/entries/nonmonomial.js +9 -17
  202. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  203. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  204. package/dist/canonical/entries/relativity.js +6 -6
  205. package/dist/canonical/entries/relativity.js.map +1 -1
  206. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  207. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  208. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  209. package/dist/canonical/fixed-points.d.ts +94 -0
  210. package/dist/canonical/fixed-points.d.ts.map +1 -0
  211. package/dist/canonical/fixed-points.js +81 -0
  212. package/dist/canonical/fixed-points.js.map +1 -0
  213. package/dist/canonical/linkage.d.ts.map +1 -1
  214. package/dist/canonical/linkage.js +25 -44
  215. package/dist/canonical/linkage.js.map +1 -1
  216. package/dist/canonical/normal-form.d.ts.map +1 -1
  217. package/dist/canonical/normal-form.js +5 -11
  218. package/dist/canonical/normal-form.js.map +1 -1
  219. package/dist/canonical/structural.d.ts +21 -21
  220. package/dist/canonical/structural.d.ts.map +1 -1
  221. package/dist/canonical/structural.js +40 -19
  222. package/dist/canonical/structural.js.map +1 -1
  223. package/dist/cases/catalog-checks.d.ts +10 -0
  224. package/dist/cases/catalog-checks.d.ts.map +1 -0
  225. package/dist/cases/catalog-checks.js +241 -0
  226. package/dist/cases/catalog-checks.js.map +1 -0
  227. package/dist/cases/catalog.d.ts +83 -0
  228. package/dist/cases/catalog.d.ts.map +1 -0
  229. package/dist/cases/catalog.js +118 -0
  230. package/dist/cases/catalog.js.map +1 -0
  231. package/dist/cases/engine.d.ts +13 -0
  232. package/dist/cases/engine.d.ts.map +1 -0
  233. package/dist/cases/engine.js +179 -0
  234. package/dist/cases/engine.js.map +1 -0
  235. package/dist/cases/index.d.ts.map +1 -1
  236. package/dist/cases/index.js +5 -7
  237. package/dist/cases/index.js.map +1 -1
  238. package/dist/cases/methods.d.ts +215 -0
  239. package/dist/cases/methods.d.ts.map +1 -0
  240. package/dist/cases/methods.js +743 -0
  241. package/dist/cases/methods.js.map +1 -0
  242. package/dist/cases/quadrature.d.ts +7 -9
  243. package/dist/cases/quadrature.d.ts.map +1 -1
  244. package/dist/cases/quadrature.js +28 -32
  245. package/dist/cases/quadrature.js.map +1 -1
  246. package/dist/cases/types.d.ts +12 -0
  247. package/dist/cases/types.d.ts.map +1 -1
  248. package/dist/cases/types.js.map +1 -1
  249. package/dist/cli/args.d.ts +25 -1
  250. package/dist/cli/args.d.ts.map +1 -1
  251. package/dist/cli/args.js +30 -8
  252. package/dist/cli/args.js.map +1 -1
  253. package/dist/cli/bindings.d.ts.map +1 -1
  254. package/dist/cli/bindings.js +5 -4
  255. package/dist/cli/bindings.js.map +1 -1
  256. package/dist/cli/command.d.ts +11 -1
  257. package/dist/cli/command.d.ts.map +1 -1
  258. package/dist/cli/command.js.map +1 -1
  259. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  260. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  261. package/dist/cli/commands/_atlas-map.js +8 -18
  262. package/dist/cli/commands/_atlas-map.js.map +1 -1
  263. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  264. package/dist/cli/commands/_atlas-route.js +6 -2
  265. package/dist/cli/commands/_atlas-route.js.map +1 -1
  266. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  267. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  268. package/dist/cli/commands/_discovery-opts.js +9 -9
  269. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  270. package/dist/cli/commands/atlas.d.ts.map +1 -1
  271. package/dist/cli/commands/atlas.js +8 -5
  272. package/dist/cli/commands/atlas.js.map +1 -1
  273. package/dist/cli/commands/audit.d.ts.map +1 -1
  274. package/dist/cli/commands/audit.js +8 -1
  275. package/dist/cli/commands/audit.js.map +1 -1
  276. package/dist/cli/commands/axes.d.ts.map +1 -1
  277. package/dist/cli/commands/axes.js +20 -1
  278. package/dist/cli/commands/axes.js.map +1 -1
  279. package/dist/cli/commands/confront.d.ts.map +1 -1
  280. package/dist/cli/commands/confront.js +8 -14
  281. package/dist/cli/commands/confront.js.map +1 -1
  282. package/dist/cli/commands/derive.d.ts.map +1 -1
  283. package/dist/cli/commands/derive.js +22 -22
  284. package/dist/cli/commands/derive.js.map +1 -1
  285. package/dist/cli/commands/discover.d.ts.map +1 -1
  286. package/dist/cli/commands/discover.js +122 -73
  287. package/dist/cli/commands/discover.js.map +1 -1
  288. package/dist/cli/commands/eval.d.ts.map +1 -1
  289. package/dist/cli/commands/eval.js +1 -0
  290. package/dist/cli/commands/eval.js.map +1 -1
  291. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  292. package/dist/cli/commands/evaluate.js +67 -39
  293. package/dist/cli/commands/evaluate.js.map +1 -1
  294. package/dist/cli/commands/explain.d.ts.map +1 -1
  295. package/dist/cli/commands/explain.js +24 -3
  296. package/dist/cli/commands/explain.js.map +1 -1
  297. package/dist/cli/commands/ground.d.ts.map +1 -1
  298. package/dist/cli/commands/ground.js +7 -1
  299. package/dist/cli/commands/ground.js.map +1 -1
  300. package/dist/cli/commands/map.d.ts.map +1 -1
  301. package/dist/cli/commands/map.js +84 -11
  302. package/dist/cli/commands/map.js.map +1 -1
  303. package/dist/cli/commands/metric.d.ts.map +1 -1
  304. package/dist/cli/commands/metric.js +12 -9
  305. package/dist/cli/commands/metric.js.map +1 -1
  306. package/dist/cli/commands/path.d.ts +10 -0
  307. package/dist/cli/commands/path.d.ts.map +1 -1
  308. package/dist/cli/commands/path.js +25 -3
  309. package/dist/cli/commands/path.js.map +1 -1
  310. package/dist/cli/commands/probe.d.ts.map +1 -1
  311. package/dist/cli/commands/probe.js +59 -16
  312. package/dist/cli/commands/probe.js.map +1 -1
  313. package/dist/cli/commands/regime.d.ts.map +1 -1
  314. package/dist/cli/commands/regime.js +1 -0
  315. package/dist/cli/commands/regime.js.map +1 -1
  316. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  317. package/dist/cli/commands/retrieve.js +1 -0
  318. package/dist/cli/commands/retrieve.js.map +1 -1
  319. package/dist/cli/commands/search.d.ts.map +1 -1
  320. package/dist/cli/commands/search.js +1 -0
  321. package/dist/cli/commands/search.js.map +1 -1
  322. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  323. package/dist/cli/commands/symbolic.js +19 -28
  324. package/dist/cli/commands/symbolic.js.map +1 -1
  325. package/dist/cli/commands/testplan.d.ts.map +1 -1
  326. package/dist/cli/commands/testplan.js +4 -2
  327. package/dist/cli/commands/testplan.js.map +1 -1
  328. package/dist/cli/determination.d.ts +1 -0
  329. package/dist/cli/determination.d.ts.map +1 -1
  330. package/dist/cli/determination.js.map +1 -1
  331. package/dist/cli/expr-print.d.ts +0 -2
  332. package/dist/cli/expr-print.d.ts.map +1 -1
  333. package/dist/cli/expr-print.js +7 -31
  334. package/dist/cli/expr-print.js.map +1 -1
  335. package/dist/cli/flag-help.d.ts +1 -0
  336. package/dist/cli/flag-help.d.ts.map +1 -1
  337. package/dist/cli/flag-help.js +1 -0
  338. package/dist/cli/flag-help.js.map +1 -1
  339. package/dist/cli/graphs.d.ts +2 -0
  340. package/dist/cli/graphs.d.ts.map +1 -1
  341. package/dist/cli/graphs.js +1 -0
  342. package/dist/cli/graphs.js.map +1 -1
  343. package/dist/cli/main.d.ts +8 -0
  344. package/dist/cli/main.d.ts.map +1 -1
  345. package/dist/cli/main.js +19 -3
  346. package/dist/cli/main.js.map +1 -1
  347. package/dist/cli/numeric-flag.d.ts +12 -0
  348. package/dist/cli/numeric-flag.d.ts.map +1 -0
  349. package/dist/cli/numeric-flag.js +44 -0
  350. package/dist/cli/numeric-flag.js.map +1 -0
  351. package/dist/cli/output.d.ts +28 -0
  352. package/dist/cli/output.d.ts.map +1 -1
  353. package/dist/cli/output.js +23 -0
  354. package/dist/cli/output.js.map +1 -1
  355. package/dist/cli/record-reach.js +2 -2
  356. package/dist/cli/record-reach.js.map +1 -1
  357. package/dist/cli/record-tables.d.ts.map +1 -1
  358. package/dist/cli/record-tables.js +6 -5
  359. package/dist/cli/record-tables.js.map +1 -1
  360. package/dist/cli/record.d.ts +1 -5
  361. package/dist/cli/record.d.ts.map +1 -1
  362. package/dist/cli/record.js +9 -8
  363. package/dist/cli/record.js.map +1 -1
  364. package/dist/cli/search-index.d.ts.map +1 -1
  365. package/dist/cli/search-index.js +7 -6
  366. package/dist/cli/search-index.js.map +1 -1
  367. package/dist/cli/statuses.d.ts +0 -2
  368. package/dist/cli/statuses.d.ts.map +1 -1
  369. package/dist/cli/statuses.js +12 -9
  370. package/dist/cli/statuses.js.map +1 -1
  371. package/dist/cli/stored-results.d.ts +7 -0
  372. package/dist/cli/stored-results.d.ts.map +1 -0
  373. package/dist/cli/stored-results.js +23 -0
  374. package/dist/cli/stored-results.js.map +1 -0
  375. package/dist/cli/version.d.ts +1 -0
  376. package/dist/cli/version.d.ts.map +1 -1
  377. package/dist/cli/version.js +8 -5
  378. package/dist/cli/version.js.map +1 -1
  379. package/dist/cli-api.d.ts +36 -5
  380. package/dist/cli-api.d.ts.map +1 -1
  381. package/dist/cli-api.js +30 -4
  382. package/dist/cli-api.js.map +1 -1
  383. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  384. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  385. package/dist/composition/algebraic-equivalence.js +115 -0
  386. package/dist/composition/algebraic-equivalence.js.map +1 -0
  387. package/dist/composition/axes.d.ts +0 -6
  388. package/dist/composition/axes.d.ts.map +1 -1
  389. package/dist/composition/axes.js +6 -6
  390. package/dist/composition/axes.js.map +1 -1
  391. package/dist/composition/axis-audit.d.ts +47 -20
  392. package/dist/composition/axis-audit.d.ts.map +1 -1
  393. package/dist/composition/axis-audit.js +82 -9
  394. package/dist/composition/axis-audit.js.map +1 -1
  395. package/dist/composition/bridge-analysis.d.ts +17 -0
  396. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  397. package/dist/composition/bridge-analysis.js +102 -55
  398. package/dist/composition/bridge-analysis.js.map +1 -1
  399. package/dist/composition/canonical-compare.d.ts +40 -0
  400. package/dist/composition/canonical-compare.d.ts.map +1 -1
  401. package/dist/composition/canonical-compare.js +122 -24
  402. package/dist/composition/canonical-compare.js.map +1 -1
  403. package/dist/composition/canonical-graph.d.ts +3 -3
  404. package/dist/composition/canonical-graph.d.ts.map +1 -1
  405. package/dist/composition/canonical-graph.js +11 -38
  406. package/dist/composition/canonical-graph.js.map +1 -1
  407. package/dist/composition/canonical-json.js +2 -2
  408. package/dist/composition/canonical-json.js.map +1 -1
  409. package/dist/composition/catalog-graph.d.ts.map +1 -1
  410. package/dist/composition/catalog-graph.js +2 -5
  411. package/dist/composition/catalog-graph.js.map +1 -1
  412. package/dist/composition/chain-candidate.d.ts +8 -0
  413. package/dist/composition/chain-candidate.d.ts.map +1 -1
  414. package/dist/composition/chain-candidate.js +9 -2
  415. package/dist/composition/chain-candidate.js.map +1 -1
  416. package/dist/composition/chain-match.d.ts +6 -3
  417. package/dist/composition/chain-match.d.ts.map +1 -1
  418. package/dist/composition/chain-match.js +4 -1
  419. package/dist/composition/chain-match.js.map +1 -1
  420. package/dist/composition/chain-result.d.ts.map +1 -1
  421. package/dist/composition/chain-result.js +2 -14
  422. package/dist/composition/chain-result.js.map +1 -1
  423. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  424. package/dist/composition/compose-symbolic.js +3 -2
  425. package/dist/composition/compose-symbolic.js.map +1 -1
  426. package/dist/composition/compose.d.ts.map +1 -1
  427. package/dist/composition/compose.js +13 -5
  428. package/dist/composition/compose.js.map +1 -1
  429. package/dist/composition/composition-recovery.d.ts.map +1 -1
  430. package/dist/composition/composition-recovery.js +4 -7
  431. package/dist/composition/composition-recovery.js.map +1 -1
  432. package/dist/composition/consequence.d.ts +15 -5
  433. package/dist/composition/consequence.d.ts.map +1 -1
  434. package/dist/composition/consequence.js +6 -4
  435. package/dist/composition/consequence.js.map +1 -1
  436. package/dist/composition/discovery.d.ts +129 -9
  437. package/dist/composition/discovery.d.ts.map +1 -1
  438. package/dist/composition/discovery.js +171 -67
  439. package/dist/composition/discovery.js.map +1 -1
  440. package/dist/composition/edge.d.ts +21 -2
  441. package/dist/composition/edge.d.ts.map +1 -1
  442. package/dist/composition/edge.js +23 -1
  443. package/dist/composition/edge.js.map +1 -1
  444. package/dist/composition/enumerate.d.ts.map +1 -1
  445. package/dist/composition/enumerate.js +18 -3
  446. package/dist/composition/enumerate.js.map +1 -1
  447. package/dist/composition/evaluate-relation.d.ts +35 -11
  448. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  449. package/dist/composition/evaluate-relation.js +60 -39
  450. package/dist/composition/evaluate-relation.js.map +1 -1
  451. package/dist/composition/explain.d.ts +3 -12
  452. package/dist/composition/explain.d.ts.map +1 -1
  453. package/dist/composition/explain.js +7 -20
  454. package/dist/composition/explain.js.map +1 -1
  455. package/dist/composition/expr-eval.d.ts +1 -1
  456. package/dist/composition/expr-eval.d.ts.map +1 -1
  457. package/dist/composition/expr-eval.js +6 -15
  458. package/dist/composition/expr-eval.js.map +1 -1
  459. package/dist/composition/expr-simplify.d.ts +26 -14
  460. package/dist/composition/expr-simplify.d.ts.map +1 -1
  461. package/dist/composition/expr-simplify.js +64 -72
  462. package/dist/composition/expr-simplify.js.map +1 -1
  463. package/dist/composition/formula-shape.d.ts +23 -4
  464. package/dist/composition/formula-shape.d.ts.map +1 -1
  465. package/dist/composition/formula-shape.js +57 -17
  466. package/dist/composition/formula-shape.js.map +1 -1
  467. package/dist/composition/graph-structure.d.ts +98 -0
  468. package/dist/composition/graph-structure.d.ts.map +1 -0
  469. package/dist/composition/graph-structure.js +167 -0
  470. package/dist/composition/graph-structure.js.map +1 -0
  471. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  472. package/dist/composition/graph-viz-svg.js +1 -1
  473. package/dist/composition/graph-viz-svg.js.map +1 -1
  474. package/dist/composition/graph-viz.d.ts.map +1 -1
  475. package/dist/composition/graph-viz.js +8 -37
  476. package/dist/composition/graph-viz.js.map +1 -1
  477. package/dist/composition/grounding.d.ts.map +1 -1
  478. package/dist/composition/grounding.js +19 -7
  479. package/dist/composition/grounding.js.map +1 -1
  480. package/dist/composition/identifiability.d.ts +91 -4
  481. package/dist/composition/identifiability.d.ts.map +1 -1
  482. package/dist/composition/identifiability.js +363 -6
  483. package/dist/composition/identifiability.js.map +1 -1
  484. package/dist/composition/index.d.ts +8 -4
  485. package/dist/composition/index.d.ts.map +1 -1
  486. package/dist/composition/index.js +3 -2
  487. package/dist/composition/index.js.map +1 -1
  488. package/dist/composition/mathts-quiet.d.ts +7 -8
  489. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  490. package/dist/composition/mathts-quiet.js +7 -16
  491. package/dist/composition/mathts-quiet.js.map +1 -1
  492. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  493. package/dist/composition/mathts-scalar-symbols.js +2 -1
  494. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  495. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  496. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  497. package/dist/composition/own-equation-magnitude.js +270 -0
  498. package/dist/composition/own-equation-magnitude.js.map +1 -0
  499. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  500. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  501. package/dist/composition/probe/backend-protocol.js.map +1 -1
  502. package/dist/composition/probe/candidate-store.d.ts +1 -0
  503. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  504. package/dist/composition/probe/candidate-store.js +1 -0
  505. package/dist/composition/probe/candidate-store.js.map +1 -1
  506. package/dist/composition/probe/corpus.d.ts +8 -4
  507. package/dist/composition/probe/corpus.d.ts.map +1 -1
  508. package/dist/composition/probe/corpus.js +23 -12
  509. package/dist/composition/probe/corpus.js.map +1 -1
  510. package/dist/composition/probe/dataset.d.ts +18 -0
  511. package/dist/composition/probe/dataset.d.ts.map +1 -1
  512. package/dist/composition/probe/dataset.js +95 -50
  513. package/dist/composition/probe/dataset.js.map +1 -1
  514. package/dist/composition/probe/experiment-design.d.ts +7 -1
  515. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  516. package/dist/composition/probe/experiment-design.js +44 -24
  517. package/dist/composition/probe/experiment-design.js.map +1 -1
  518. package/dist/composition/probe/falsify.d.ts +2 -0
  519. package/dist/composition/probe/falsify.d.ts.map +1 -1
  520. package/dist/composition/probe/falsify.js +2 -0
  521. package/dist/composition/probe/falsify.js.map +1 -1
  522. package/dist/composition/probe/fit.d.ts +7 -0
  523. package/dist/composition/probe/fit.d.ts.map +1 -1
  524. package/dist/composition/probe/fit.js +46 -22
  525. package/dist/composition/probe/fit.js.map +1 -1
  526. package/dist/composition/probe/frontier.d.ts.map +1 -1
  527. package/dist/composition/probe/frontier.js +33 -15
  528. package/dist/composition/probe/frontier.js.map +1 -1
  529. package/dist/composition/probe/generator.d.ts +30 -1
  530. package/dist/composition/probe/generator.d.ts.map +1 -1
  531. package/dist/composition/probe/generator.js +58 -36
  532. package/dist/composition/probe/generator.js.map +1 -1
  533. package/dist/composition/probe/index.d.ts +14 -0
  534. package/dist/composition/probe/index.d.ts.map +1 -1
  535. package/dist/composition/probe/index.js +6 -0
  536. package/dist/composition/probe/index.js.map +1 -1
  537. package/dist/composition/probe/limits.d.ts +25 -1
  538. package/dist/composition/probe/limits.d.ts.map +1 -1
  539. package/dist/composition/probe/limits.js +53 -11
  540. package/dist/composition/probe/limits.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 +73 -24
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/power-law.d.ts +121 -0
  546. package/dist/composition/probe/power-law.d.ts.map +1 -0
  547. package/dist/composition/probe/power-law.js +251 -0
  548. package/dist/composition/probe/power-law.js.map +1 -0
  549. package/dist/composition/probe/problem.d.ts +8 -4
  550. package/dist/composition/probe/problem.d.ts.map +1 -1
  551. package/dist/composition/probe/problem.js +177 -49
  552. package/dist/composition/probe/problem.js.map +1 -1
  553. package/dist/composition/probe/report.js +1 -1
  554. package/dist/composition/probe/report.js.map +1 -1
  555. package/dist/composition/probe/residual.d.ts +7 -1
  556. package/dist/composition/probe/residual.d.ts.map +1 -1
  557. package/dist/composition/probe/residual.js +10 -7
  558. package/dist/composition/probe/residual.js.map +1 -1
  559. package/dist/composition/probe/run-manifest.d.ts +1 -0
  560. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  561. package/dist/composition/probe/run-manifest.js.map +1 -1
  562. package/dist/composition/probe/scalar-search.d.ts +50 -0
  563. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  564. package/dist/composition/probe/scalar-search.js +169 -0
  565. package/dist/composition/probe/scalar-search.js.map +1 -0
  566. package/dist/composition/probe/scoring.d.ts +1 -0
  567. package/dist/composition/probe/scoring.d.ts.map +1 -1
  568. package/dist/composition/probe/scoring.js.map +1 -1
  569. package/dist/composition/probe/structure.d.ts +82 -17
  570. package/dist/composition/probe/structure.d.ts.map +1 -1
  571. package/dist/composition/probe/structure.js +129 -55
  572. package/dist/composition/probe/structure.js.map +1 -1
  573. package/dist/composition/probe/study.d.ts +31 -9
  574. package/dist/composition/probe/study.d.ts.map +1 -1
  575. package/dist/composition/probe/study.js +235 -184
  576. package/dist/composition/probe/study.js.map +1 -1
  577. package/dist/composition/probe/t-tail.d.ts +16 -0
  578. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  579. package/dist/composition/probe/t-tail.js +29 -0
  580. package/dist/composition/probe/t-tail.js.map +1 -0
  581. package/dist/composition/probe/types.d.ts +3 -0
  582. package/dist/composition/probe/types.d.ts.map +1 -1
  583. package/dist/composition/probe/types.js.map +1 -1
  584. package/dist/composition/proposed-bridges.d.ts +52 -12
  585. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  586. package/dist/composition/proposed-bridges.js +107 -60
  587. package/dist/composition/proposed-bridges.js.map +1 -1
  588. package/dist/composition/quantity-clusters.d.ts +48 -0
  589. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  590. package/dist/composition/quantity-clusters.js +98 -0
  591. package/dist/composition/quantity-clusters.js.map +1 -0
  592. package/dist/composition/rational-exponent.d.ts +40 -0
  593. package/dist/composition/rational-exponent.d.ts.map +1 -0
  594. package/dist/composition/rational-exponent.js +65 -0
  595. package/dist/composition/rational-exponent.js.map +1 -0
  596. package/dist/composition/representative-values.d.ts +22 -0
  597. package/dist/composition/representative-values.d.ts.map +1 -1
  598. package/dist/composition/representative-values.js +29 -0
  599. package/dist/composition/representative-values.js.map +1 -1
  600. package/dist/composition/retrodiction.d.ts +15 -0
  601. package/dist/composition/retrodiction.d.ts.map +1 -1
  602. package/dist/composition/retrodiction.js +12 -4
  603. package/dist/composition/retrodiction.js.map +1 -1
  604. package/dist/composition/user-equation.d.ts +1 -0
  605. package/dist/composition/user-equation.d.ts.map +1 -1
  606. package/dist/composition/user-equation.js +3 -2
  607. package/dist/composition/user-equation.js.map +1 -1
  608. package/dist/core/assignment.d.ts +19 -0
  609. package/dist/core/assignment.d.ts.map +1 -0
  610. package/dist/core/assignment.js +19 -0
  611. package/dist/core/assignment.js.map +1 -0
  612. package/dist/core/compare.d.ts +32 -0
  613. package/dist/core/compare.d.ts.map +1 -0
  614. package/dist/core/compare.js +46 -0
  615. package/dist/core/compare.js.map +1 -0
  616. package/dist/core/constants.d.ts +42 -41
  617. package/dist/core/constants.d.ts.map +1 -1
  618. package/dist/core/constants.js +71 -51
  619. package/dist/core/constants.js.map +1 -1
  620. package/dist/core/data-file.d.ts +7 -0
  621. package/dist/core/data-file.d.ts.map +1 -1
  622. package/dist/core/data-file.js +17 -0
  623. package/dist/core/data-file.js.map +1 -1
  624. package/dist/core/format.d.ts +36 -0
  625. package/dist/core/format.d.ts.map +1 -0
  626. package/dist/core/format.js +39 -0
  627. package/dist/core/format.js.map +1 -0
  628. package/dist/core/hash.d.ts +14 -0
  629. package/dist/core/hash.d.ts.map +1 -0
  630. package/dist/core/hash.js +17 -0
  631. package/dist/core/hash.js.map +1 -0
  632. package/dist/core/json-schema.d.ts +2 -0
  633. package/dist/core/json-schema.d.ts.map +1 -1
  634. package/dist/core/json-schema.js +14 -13
  635. package/dist/core/json-schema.js.map +1 -1
  636. package/dist/core/labeled-tensor.d.ts.map +1 -1
  637. package/dist/core/labeled-tensor.js +0 -8
  638. package/dist/core/labeled-tensor.js.map +1 -1
  639. package/dist/core/mathts-read.d.ts +25 -0
  640. package/dist/core/mathts-read.d.ts.map +1 -0
  641. package/dist/core/mathts-read.js +51 -0
  642. package/dist/core/mathts-read.js.map +1 -0
  643. package/dist/core/tensor.d.ts.map +1 -1
  644. package/dist/core/tensor.js +24 -0
  645. package/dist/core/tensor.js.map +1 -1
  646. package/dist/core/types.d.ts +5 -5
  647. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  648. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  649. package/dist/diff/bridge-ast-gradient.js +75 -173
  650. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  651. package/dist/diff/bridge-gradient.d.ts +19 -6
  652. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  653. package/dist/diff/bridge-gradient.js +19 -11
  654. package/dist/diff/bridge-gradient.js.map +1 -1
  655. package/dist/diff/bridge-specs.d.ts.map +1 -1
  656. package/dist/diff/bridge-specs.js +3 -0
  657. package/dist/diff/bridge-specs.js.map +1 -1
  658. package/dist/dimensional/algebra.d.ts +18 -0
  659. package/dist/dimensional/algebra.d.ts.map +1 -1
  660. package/dist/dimensional/algebra.js +41 -1
  661. package/dist/dimensional/algebra.js.map +1 -1
  662. package/dist/dimensional/ast-builders.d.ts +7 -0
  663. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  664. package/dist/dimensional/ast-builders.js +11 -0
  665. package/dist/dimensional/ast-builders.js.map +1 -1
  666. package/dist/dimensional/ast-leaves.d.ts +81 -0
  667. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  668. package/dist/dimensional/ast-leaves.js +146 -0
  669. package/dist/dimensional/ast-leaves.js.map +1 -0
  670. package/dist/dimensional/ast-types.d.ts +15 -0
  671. package/dist/dimensional/ast-types.d.ts.map +1 -1
  672. package/dist/dimensional/ast-types.js.map +1 -1
  673. package/dist/dimensional/buckingham.d.ts.map +1 -1
  674. package/dist/dimensional/buckingham.js +15 -27
  675. package/dist/dimensional/buckingham.js.map +1 -1
  676. package/dist/dimensional/constant-rows.js +9 -9
  677. package/dist/dimensional/constant-rows.js.map +1 -1
  678. package/dist/dimensional/curvature-composite.d.ts +1 -1
  679. package/dist/dimensional/curvature-composite.js.map +1 -1
  680. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  681. package/dist/dimensional/dimension-inference.js +1 -2
  682. package/dist/dimensional/dimension-inference.js.map +1 -1
  683. package/dist/dimensional/errors.d.ts +1 -1
  684. package/dist/dimensional/errors.d.ts.map +1 -1
  685. package/dist/dimensional/errors.js +1 -15
  686. package/dist/dimensional/errors.js.map +1 -1
  687. package/dist/dimensional/exact-scale.d.ts +24 -11
  688. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  689. package/dist/dimensional/exact-scale.js +122 -130
  690. package/dist/dimensional/exact-scale.js.map +1 -1
  691. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  692. package/dist/dimensional/gauge-field.js +2 -2
  693. package/dist/dimensional/gauge-field.js.map +1 -1
  694. package/dist/dimensional/hyphen-names.d.ts +12 -2
  695. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  696. package/dist/dimensional/hyphen-names.js +44 -19
  697. package/dist/dimensional/hyphen-names.js.map +1 -1
  698. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  699. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  700. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  701. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  702. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  703. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  704. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  705. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  706. package/dist/dimensional/metric.d.ts.map +1 -1
  707. package/dist/dimensional/metric.js +0 -1
  708. package/dist/dimensional/metric.js.map +1 -1
  709. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  710. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  711. package/dist/dimensional/scalar-lowering.js +45 -0
  712. package/dist/dimensional/scalar-lowering.js.map +1 -0
  713. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  714. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  715. package/dist/dimensional/symbolic-constants.js +13 -1
  716. package/dist/dimensional/symbolic-constants.js.map +1 -1
  717. package/dist/dimensional/types.d.ts +36 -0
  718. package/dist/dimensional/types.d.ts.map +1 -1
  719. package/dist/dimensional/types.js +45 -7
  720. package/dist/dimensional/types.js.map +1 -1
  721. package/dist/dimensional/unit-data.d.ts +5 -1
  722. package/dist/dimensional/unit-data.d.ts.map +1 -1
  723. package/dist/dimensional/unit-data.js +30 -6
  724. package/dist/dimensional/unit-data.js.map +1 -1
  725. package/dist/dimensional/units.d.ts +2 -0
  726. package/dist/dimensional/units.d.ts.map +1 -1
  727. package/dist/dimensional/units.js +59 -3
  728. package/dist/dimensional/units.js.map +1 -1
  729. package/dist/dimensional/validator.d.ts +2 -0
  730. package/dist/dimensional/validator.d.ts.map +1 -1
  731. package/dist/dimensional/validator.js.map +1 -1
  732. package/dist/index.d.ts +9 -3
  733. package/dist/index.d.ts.map +1 -1
  734. package/dist/index.js +10 -4
  735. package/dist/index.js.map +1 -1
  736. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  737. package/dist/numerical/christoffel-flat.js +3 -2
  738. package/dist/numerical/christoffel-flat.js.map +1 -1
  739. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  740. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  741. package/dist/numerical/connection-lowering-helpers.js +11 -15
  742. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  743. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  744. package/dist/numerical/covariant-eikonal.js +34 -11
  745. package/dist/numerical/covariant-eikonal.js.map +1 -1
  746. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  747. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  748. package/dist/numerical/errors.d.ts.map +1 -1
  749. package/dist/numerical/errors.js +0 -3
  750. package/dist/numerical/errors.js.map +1 -1
  751. package/dist/numerical/finite-difference.d.ts +22 -0
  752. package/dist/numerical/finite-difference.d.ts.map +1 -0
  753. package/dist/numerical/finite-difference.js +27 -0
  754. package/dist/numerical/finite-difference.js.map +1 -0
  755. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  756. package/dist/numerical/geodesic-integrator.js +22 -14
  757. package/dist/numerical/geodesic-integrator.js.map +1 -1
  758. package/dist/numerical/geometrized.d.ts.map +1 -1
  759. package/dist/numerical/geometrized.js +0 -1
  760. package/dist/numerical/geometrized.js.map +1 -1
  761. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  762. package/dist/numerical/mathts-engine.js +10 -24
  763. package/dist/numerical/mathts-engine.js.map +1 -1
  764. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  765. package/dist/numerical/metric-inverse.js +83 -46
  766. package/dist/numerical/metric-inverse.js.map +1 -1
  767. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  768. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  769. package/dist/numerical/null-ray-integrator.js +12 -12
  770. package/dist/numerical/null-ray-integrator.js.map +1 -1
  771. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  772. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  773. package/dist/numerical/pderiv.d.ts.map +1 -1
  774. package/dist/numerical/pderiv.js +2 -6
  775. package/dist/numerical/pderiv.js.map +1 -1
  776. package/dist/numerical/perihelion-finder.d.ts +0 -36
  777. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  778. package/dist/numerical/perihelion-finder.js +41 -87
  779. package/dist/numerical/perihelion-finder.js.map +1 -1
  780. package/dist/numerical/quadrature.d.ts.map +1 -1
  781. package/dist/numerical/quadrature.js +11 -13
  782. package/dist/numerical/quadrature.js.map +1 -1
  783. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  784. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  785. package/dist/numerical/rk4-trajectory.js +37 -0
  786. package/dist/numerical/rk4-trajectory.js.map +1 -0
  787. package/dist/numerical/schwarzschild.d.ts +14 -0
  788. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  789. package/dist/numerical/schwarzschild.js +17 -0
  790. package/dist/numerical/schwarzschild.js.map +1 -0
  791. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  792. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  793. package/dist/numerical/spacetime-metrics.js +72 -56
  794. package/dist/numerical/spacetime-metrics.js.map +1 -1
  795. package/dist/numerical/statistics.d.ts +24 -0
  796. package/dist/numerical/statistics.d.ts.map +1 -0
  797. package/dist/numerical/statistics.js +52 -0
  798. package/dist/numerical/statistics.js.map +1 -0
  799. package/dist/numerical/strides.d.ts +3 -2
  800. package/dist/numerical/strides.d.ts.map +1 -1
  801. package/dist/numerical/strides.js +3 -10
  802. package/dist/numerical/strides.js.map +1 -1
  803. package/dist/numerical/tensor-engine.d.ts +21 -0
  804. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  805. package/dist/numerical/tensor-engine.js +12 -0
  806. package/dist/numerical/tensor-engine.js.map +1 -1
  807. package/dist/relations/regime.d.ts +10 -0
  808. package/dist/relations/regime.d.ts.map +1 -1
  809. package/dist/relations/regime.js +18 -1
  810. package/dist/relations/regime.js.map +1 -1
  811. package/package.json +9 -12
  812. package/dist/cases/brownian-sphere.d.ts +0 -68
  813. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  814. package/dist/cases/brownian-sphere.js +0 -354
  815. package/dist/cases/brownian-sphere.js.map +0 -1
  816. package/dist/cases/damped-resonator.d.ts +0 -23
  817. package/dist/cases/damped-resonator.d.ts.map +0 -1
  818. package/dist/cases/damped-resonator.js +0 -224
  819. package/dist/cases/damped-resonator.js.map +0 -1
  820. package/dist/cases/kepler-rv.d.ts +0 -13
  821. package/dist/cases/kepler-rv.d.ts.map +0 -1
  822. package/dist/cases/kepler-rv.js +0 -172
  823. package/dist/cases/kepler-rv.js.map +0 -1
  824. package/dist/cases/lumped-cooling.d.ts +0 -46
  825. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  826. package/dist/cases/lumped-cooling.js +0 -261
  827. package/dist/cases/lumped-cooling.js.map +0 -1
  828. package/dist/cases/resistor-noise.d.ts +0 -14
  829. package/dist/cases/resistor-noise.d.ts.map +0 -1
  830. package/dist/cases/resistor-noise.js +0 -215
  831. package/dist/cases/resistor-noise.js.map +0 -1
  832. package/dist/cases/skin-depth.d.ts +0 -21
  833. package/dist/cases/skin-depth.d.ts.map +0 -1
  834. package/dist/cases/skin-depth.js +0 -174
  835. package/dist/cases/skin-depth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"consequence.js","sourceRoot":"","sources":["../../src/composition/consequence.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Consequence propagation — the machine pre-classifier for the human\n * adjudication ledger. A POST-PASS annotation over ranked candidates (mirrors\n * `annotateAdjudications`): reuse `deriveProposedBridges` to derive each\n * promising candidate's monomial consequence, then compare its `normalForm`\n * against the canonical registry (SAME target AND SAME governing set) to label\n * it `entailed` (re-derives known physics), `novel-consequence` (valid, no\n * match), or `inconclusive` (no monomial consequence). Annotation-only: never\n * mutates the catalog/graph, never re-orders or re-scores, never writes to\n * ADJUDICATIONS. The underlying ProposedBridge stays `status:'unadjudicated'`.\n *\n * @module composition/consequence\n */\nimport type { VettedCandidate } from './discovery.js';\nimport type { ProposedBridge } from './proposed-bridges.js';\nimport { deriveProposedBridges } from './proposed-bridges.js';\nimport { normalForm } from '../canonical/normal-form.js';\nimport { CANONICAL_EQUATIONS } from '../canonical/registry.js';\nimport type { CanonicalEquation } from '../canonical/canonical-equation.js';\n\n/** @public */\nexport type ConsequenceSignal = 'entailed' | 'novel-consequence' | 'inconclusive';\n\n/** @public */\nexport interface ConsequenceEvidence {\n readonly target: string;\n readonly governing: readonly string[];\n readonly derivedNormalForm: string;\n /** The id of the canonical equation whose normalForm matched, or null. */\n readonly canonicalMatch: string | null;\n readonly sourceEquationIds: readonly [string, string];\n}\n\n/** @public */\nexport type ConsequenceAnnotatedCandidate = VettedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\n/** Governing-name set equality (order-insensitive). */\nfunction sameGoverning(a: readonly { name: string }[], b: readonly { name: string }[]): boolean {\n if (a.length !== b.length) return false;\n const sa = new Set(a.map((g) => g.name));\n return b.every((g) => sa.has(g.name));\n}\n\n/**\n * Classify ONE derived proposal against the canonical registry.\n * `entailed` iff some canonical equation with a `scalarAst` has the SAME target\n * name AND SAME governing set AND a matching `normalForm`. Otherwise\n * `novel-consequence`. There is NO contradiction signal — a differing normalForm\n * for the same target is NOT a contradiction (design r2: E=mc² vs E=hf).\n * @public\n */\nexport function classifyProposal(\n proposal: Pick<ProposedBridge, 'target' | 'governing' | 'scalarAst' | 'derivedFrom'>,\n canonical: readonly CanonicalEquation[] = CANONICAL_EQUATIONS,\n): { readonly signal: Exclude<ConsequenceSignal, 'inconclusive'>; readonly evidence: ConsequenceEvidence } {\n const derivedNF = normalForm(proposal.scalarAst);\n let canonicalMatch: string | null = null;\n for (const ce of canonical) {\n if (!ce.scalarAst) continue;\n if (ce.dimensional.target.name !== proposal.target.name) continue;\n if (!sameGoverning(ce.dimensional.governing, proposal.governing)) continue;\n if (normalForm(ce.scalarAst) === derivedNF) {\n canonicalMatch = ce.id; // CanonicalEquation.id is a top-level `readonly id: string` (verified)\n break;\n }\n }\n return {\n signal: canonicalMatch ? 'entailed' : 'novel-consequence',\n evidence: {\n target: proposal.target.name,\n governing: proposal.governing.map((g) => g.name),\n derivedNormalForm: derivedNF,\n canonicalMatch,\n sourceEquationIds: proposal.derivedFrom.sourceEquationIds,\n },\n };\n}\n\n/**\n * What a derived proposal claims, in a form that travels with it: the premise,\n * whether it is a known law or a conditional identity, what the solved-for\n * symbol means, the source equations' assumptions, and the exact scope of the\n * canonical-match check.\n * @internal\n */\nexport interface DerivedClaim {\n /** The unadjudicated identification the relation rests on. */\n readonly premise: string;\n /** `known-law`: re-derives a registry equation. `conditional-identity`: holds only if the premise does. */\n readonly relation: 'known-law' | 'conditional-identity';\n /** No derived proposal has been confronted with a measurement. */\n readonly tested: false;\n readonly symbol: { readonly name: string; readonly fromEquation: string; readonly meaning: string };\n readonly assumptions: readonly { readonly equation: string; readonly assumptions: readonly string[] }[];\n readonly canonicalMatch: {\n readonly id: string | null;\n readonly sameTarget: number;\n readonly sameTargetAndGoverning: number;\n readonly scope: 'the canonical registry only';\n };\n}\n\ntype ClaimEquation = Pick<CanonicalEquation, 'id' | 'name' | 'assumptions' | 'scalarAst'> & {\n readonly dimensional: Pick<CanonicalEquation['dimensional'], 'target' | 'governing'>;\n};\n\n/**\n * Describe the claim a derived proposal makes. Pure; the proposal is unchanged.\n * @internal\n */\nexport function describeDerivedClaim(\n proposal: Pick<ProposedBridge, 'target' | 'governing' | 'scalarAst' | 'derivedFrom'>,\n canonical: readonly ClaimEquation[] = CANONICAL_EQUATIONS,\n): DerivedClaim {\n const { identification, sourceEquationIds, solvedFor } = proposal.derivedFrom;\n // `deriveProposedBridges` resolves the first source id for the smaller\n // endpoint name and the second for the larger, so each id's target is known\n // even when the source is a catalog bridge the canonical registry does not\n // hold (then `canonical.find` is undefined; the sentence once printed\n // \"equals ? (undefined)\" there, 9.0.0 audit §7 T1).\n const [t0, t1] = [identification.a, identification.b].sort();\n const endpointOf = (id: string): string => (id === sourceEquationIds[0] ? t0 : t1);\n const sources = sourceEquationIds\n .map((id) => canonical.find((e) => e.id === id))\n .filter((e): e is ClaimEquation => e !== undefined);\n const home = sources.find((e) => e.dimensional.governing.some((g) => g.name === solvedFor)) ?? sources[0];\n const homeId = home?.id ?? sourceEquationIds[0];\n const otherId = sourceEquationIds.find((id) => id !== homeId) ?? sourceEquationIds[1];\n const other = sources.find((e) => e.id === otherId);\n const homeTarget = home?.dimensional.target.name ?? endpointOf(homeId);\n const otherTarget = other?.dimensional.target.name ?? endpointOf(otherId);\n\n const derivedNF = normalForm(proposal.scalarAst);\n const sameTarget = canonical.filter((e) => e.scalarAst && e.dimensional.target.name === proposal.target.name);\n const sameGov = sameTarget.filter((e) => sameGoverning(e.dimensional.governing, proposal.governing));\n const match = sameGov.find((e) => normalForm(e.scalarAst!) === derivedNF);\n\n return {\n premise: `${identification.a} ≡ ${identification.b}`,\n relation: match ? 'known-law' : 'conditional-identity',\n tested: false,\n symbol: {\n name: solvedFor,\n fromEquation: homeId,\n meaning:\n `${solvedFor} is the ${solvedFor} of ${homeId}${home !== undefined ? ` (${home.name})` : ''}: the ${solvedFor} for which ` +\n `${homeTarget} equals ${otherTarget} (${otherId}) — an equal-${identification.dim} scale; ` +\n `the ${otherTarget} side is not given a ${solvedFor}`,\n },\n assumptions: sources.map((e) => ({ equation: e.id, assumptions: [...e.assumptions] })),\n canonicalMatch: {\n id: match?.id ?? null,\n sameTarget: sameTarget.length,\n sameTargetAndGoverning: sameGov.length,\n scope: 'the canonical registry only',\n },\n };\n}\n\n/**\n * Annotate ranked candidates with their consequence signal. Order-preserving,\n * 1:1 with the input; only `promising` candidates are classified (they are the\n * only ones `deriveProposedBridges` processes). A promising candidate with no\n * derived proposal is `inconclusive`. Generic over the input candidate type so\n * it composes with other post-pass annotators (e.g. `annotateAdjudications`)\n * without forgetting fields the caller already attached.\n * @public\n */\nexport function annotateConsequences<T extends VettedCandidate>(\n candidates: readonly T[],\n): readonly (T & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n})[] {\n const promising = candidates.filter((c) => c.verdict === 'promising');\n const proposals = deriveProposedBridges(promising);\n\n // Group proposals + their classification by the sorted candidate-pair key.\n const byPair = new Map<string, { signal: ConsequenceSignal; evidence: ConsequenceEvidence[] }>();\n for (const p of proposals) {\n const key = [p.derivedFrom.identification.a, p.derivedFrom.identification.b].sort().join('~');\n const cls = classifyProposal(p);\n const cur = byPair.get(key);\n if (!cur) {\n byPair.set(key, { signal: cls.signal, evidence: [cls.evidence] });\n } else {\n cur.evidence.push(cls.evidence);\n // entailed dominates novel: if ANY consequence re-derives known physics, the pair is entailed.\n if (cls.signal === 'entailed') cur.signal = 'entailed';\n }\n }\n\n return candidates.map((c) => {\n if (c.verdict !== 'promising') return c;\n const key = [c.a, c.b].sort().join('~');\n const hit = byPair.get(key);\n const signal: ConsequenceSignal = hit ? hit.signal : 'inconclusive';\n return { ...c, consequence: { signal, evidence: hit?.evidence ?? [] } };\n });\n}\n"]}
1
+ {"version":3,"file":"consequence.js","sourceRoot":"","sources":["../../src/composition/consequence.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Consequence propagation — the machine pre-classifier for the human\n * adjudication ledger. A POST-PASS annotation over ranked candidates (mirrors\n * `annotateAdjudications`): reuse `deriveProposedBridges` to derive each\n * promising candidate's monomial consequence, then compare its `normalForm`\n * against the canonical registry (SAME target AND SAME governing set) to label\n * it `entailed` (re-derives known physics), `novel-consequence` (valid, no\n * match), or `inconclusive` (no monomial consequence). Annotation-only: never\n * mutates the catalog/graph, never re-orders or re-scores, never writes to\n * ADJUDICATIONS. The underlying ProposedBridge stays `status:'unadjudicated'`.\n *\n * @module composition/consequence\n */\nimport type { VettedCandidate } from './discovery.js';\nimport { isPromisingTier } from './discovery.js';\nimport type { ProposedBridge } from './proposed-bridges.js';\nimport { deriveProposedBridges } from './proposed-bridges.js';\nimport { normalForm } from '../canonical/normal-form.js';\nimport { CANONICAL_EQUATIONS } from '../canonical/registry.js';\nimport type { CanonicalEquation } from '../canonical/canonical-equation.js';\n\n/**\n * The consequence signal of a promising candidate: entailed, novel-consequence or inconclusive.\n * @public\n */\nexport type ConsequenceSignal = 'entailed' | 'novel-consequence' | 'inconclusive';\n\n/**\n * The evidence behind one consequence signal: the derived claim and any canonical match.\n * @public\n */\nexport interface ConsequenceEvidence {\n readonly target: string;\n readonly governing: readonly string[];\n readonly derivedNormalForm: string;\n /** The id of the canonical equation whose normalForm matched, or null. */\n readonly canonicalMatch: string | null;\n readonly sourceEquationIds: readonly [string, string];\n}\n\n/**\n * A vetted candidate, plus its optional consequence signal and evidence.\n * @public\n */\nexport type ConsequenceAnnotatedCandidate = VettedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\n/** Governing-name set equality (order-insensitive). */\nfunction sameGoverning(a: readonly { name: string }[], b: readonly { name: string }[]): boolean {\n if (a.length !== b.length) return false;\n const sa = new Set(a.map((g) => g.name));\n return b.every((g) => sa.has(g.name));\n}\n\n/**\n * Classify ONE derived proposal against the canonical registry.\n * `entailed` iff some canonical equation with a `scalarAst` has the SAME target\n * name AND SAME governing set AND a matching `normalForm`. Otherwise\n * `novel-consequence`. There is NO contradiction signal — a differing normalForm\n * for the same target is NOT a contradiction (design r2: E=mc² vs E=hf).\n * @public\n */\nexport function classifyProposal(\n proposal: Pick<ProposedBridge, 'target' | 'governing' | 'scalarAst' | 'derivedFrom'>,\n canonical: readonly CanonicalEquation[] = CANONICAL_EQUATIONS,\n): { readonly signal: Exclude<ConsequenceSignal, 'inconclusive'>; readonly evidence: ConsequenceEvidence } {\n const derivedNF = normalForm(proposal.scalarAst);\n let canonicalMatch: string | null = null;\n for (const ce of canonical) {\n if (!ce.scalarAst) continue;\n if (ce.dimensional.target.name !== proposal.target.name) continue;\n if (!sameGoverning(ce.dimensional.governing, proposal.governing)) continue;\n if (normalForm(ce.scalarAst) === derivedNF) {\n canonicalMatch = ce.id; // CanonicalEquation.id is a top-level `readonly id: string` (verified)\n break;\n }\n }\n return {\n signal: canonicalMatch ? 'entailed' : 'novel-consequence',\n evidence: {\n target: proposal.target.name,\n governing: proposal.governing.map((g) => g.name),\n derivedNormalForm: derivedNF,\n canonicalMatch,\n sourceEquationIds: proposal.derivedFrom.sourceEquationIds,\n },\n };\n}\n\n/**\n * What a derived proposal claims, in a form that travels with it: the premise,\n * whether it is a known law or a conditional identity, what the solved-for\n * symbol means, the source equations' assumptions, and the exact scope of the\n * canonical-match check.\n * @internal\n */\nexport interface DerivedClaim {\n /** The unadjudicated identification the relation rests on. */\n readonly premise: string;\n /** `known-law`: re-derives a registry equation. `conditional-identity`: holds only if the premise does. */\n readonly relation: 'known-law' | 'conditional-identity';\n /** No derived proposal has been confronted with a measurement. */\n readonly tested: false;\n readonly symbol: { readonly name: string; readonly fromEquation: string; readonly meaning: string };\n readonly assumptions: readonly { readonly equation: string; readonly assumptions: readonly string[] }[];\n readonly canonicalMatch: {\n readonly id: string | null;\n readonly sameTarget: number;\n readonly sameTargetAndGoverning: number;\n readonly scope: 'the canonical registry only';\n };\n}\n\ntype ClaimEquation = Pick<CanonicalEquation, 'id' | 'name' | 'assumptions' | 'scalarAst'> & {\n readonly dimensional: Pick<CanonicalEquation['dimensional'], 'target' | 'governing'>;\n};\n\n/**\n * Describe the claim a derived proposal makes. Pure; the proposal is unchanged.\n * @internal\n */\nexport function describeDerivedClaim(\n proposal: Pick<ProposedBridge, 'target' | 'governing' | 'scalarAst' | 'derivedFrom'>,\n canonical: readonly ClaimEquation[] = CANONICAL_EQUATIONS,\n): DerivedClaim {\n const { identification, sourceEquationIds, solvedFor } = proposal.derivedFrom;\n // `deriveProposedBridges` resolves the first source id for the smaller\n // endpoint name and the second for the larger, so each id's target is known\n // even when the source is a catalog bridge the canonical registry does not\n // hold (then `canonical.find` is undefined; the sentence once printed\n // \"equals ? (undefined)\" there, 9.0.0 audit §7 T1).\n const [t0, t1] = [identification.a, identification.b].sort();\n const endpointOf = (id: string): string => (id === sourceEquationIds[0] ? t0 : t1);\n const sources = sourceEquationIds\n .map((id) => canonical.find((e) => e.id === id))\n .filter((e): e is ClaimEquation => e !== undefined);\n const home = sources.find((e) => e.dimensional.governing.some((g) => g.name === solvedFor)) ?? sources[0];\n const homeId = home?.id ?? sourceEquationIds[0];\n const otherId = sourceEquationIds.find((id) => id !== homeId) ?? sourceEquationIds[1];\n const other = sources.find((e) => e.id === otherId);\n const homeTarget = home?.dimensional.target.name ?? endpointOf(homeId);\n const otherTarget = other?.dimensional.target.name ?? endpointOf(otherId);\n\n const derivedNF = normalForm(proposal.scalarAst);\n const sameTarget = canonical.filter((e) => e.scalarAst && e.dimensional.target.name === proposal.target.name);\n const sameGov = sameTarget.filter((e) => sameGoverning(e.dimensional.governing, proposal.governing));\n const match = sameGov.find((e) => normalForm(e.scalarAst!) === derivedNF);\n\n return {\n premise: `${identification.a} ≡ ${identification.b}`,\n relation: match ? 'known-law' : 'conditional-identity',\n tested: false,\n symbol: {\n name: solvedFor,\n fromEquation: homeId,\n meaning:\n `${solvedFor} is the ${solvedFor} of ${homeId}${home !== undefined ? ` (${home.name})` : ''}: the ${solvedFor} for which ` +\n `${homeTarget} equals ${otherTarget} (${otherId}) — an equal-${identification.dim} scale; ` +\n `the ${otherTarget} side is not given a ${solvedFor}`,\n },\n assumptions: sources.map((e) => ({ equation: e.id, assumptions: [...e.assumptions] })),\n canonicalMatch: {\n id: match?.id ?? null,\n sameTarget: sameTarget.length,\n sameTargetAndGoverning: sameGov.length,\n scope: 'the canonical registry only',\n },\n };\n}\n\n/**\n * Annotate ranked candidates with their consequence signal. Order-preserving,\n * 1:1 with the input; only candidates in a promising tier (`promising` or\n * `promising-unchecked`) are classified (they are the only ones\n * `deriveProposedBridges` processes). A promising candidate with no\n * derived proposal is `inconclusive`. Generic over the input candidate type so\n * it composes with other post-pass annotators (e.g. `annotateAdjudications`)\n * without forgetting fields the caller already attached.\n * @public\n */\nexport function annotateConsequences<T extends VettedCandidate>(\n candidates: readonly T[],\n): readonly (T & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n})[] {\n const promising = candidates.filter((c) => isPromisingTier(c.verdict));\n const proposals = deriveProposedBridges(promising);\n\n // Group proposals + their classification by the sorted candidate-pair key.\n const byPair = new Map<string, { signal: ConsequenceSignal; evidence: ConsequenceEvidence[] }>();\n for (const p of proposals) {\n const key = [p.derivedFrom.identification.a, p.derivedFrom.identification.b].sort().join('~');\n const cls = classifyProposal(p);\n const cur = byPair.get(key);\n if (!cur) {\n byPair.set(key, { signal: cls.signal, evidence: [cls.evidence] });\n } else {\n cur.evidence.push(cls.evidence);\n // entailed dominates novel: if ANY consequence re-derives known physics, the pair is entailed.\n if (cls.signal === 'entailed') cur.signal = 'entailed';\n }\n }\n\n return candidates.map((c) => {\n if (!isPromisingTier(c.verdict)) return c;\n const key = [c.a, c.b].sort().join('~');\n const hit = byPair.get(key);\n const signal: ConsequenceSignal = hit ? hit.signal : 'inconclusive';\n return { ...c, consequence: { signal, evidence: hit?.evidence ?? [] } };\n });\n}\n"]}
@@ -38,6 +38,7 @@ import type { QuantityIdentification } from './compose.js';
38
38
  import type { RegimeAttributes } from './quantity.js';
39
39
  import type { LinkCandidate } from './bridge-analysis.js';
40
40
  import type { RepresentativeValue } from './representative-values.js';
41
+ import type { DerivedMagnitudes } from './own-equation-magnitude.js';
41
42
  /** The canonical quantity→attributes map (registry nodes + per-equation stamps).
42
43
  * Exported for the axis-discrimination audit. @internal */
43
44
  export declare const REGISTRY_ATTRIBUTES_BY_NAME: ReadonlyMap<string, RegimeAttributes>;
@@ -79,10 +80,27 @@ export interface VettedCandidate {
79
80
  * value (the gate abstained — see `magnitudeChecked`).
80
81
  */
81
82
  readonly ordersApart: number | null;
83
+ /**
84
+ * The calibrated STRENGTH of the magnitude falsifier against the two values' stated
85
+ * uncertainties: `2·Φ(−ordersApart / √(σ_a² + σ_b²))`, with σ in decades per representative
86
+ * value (`sigmaDecades`, default one decade: the table's "good to about one order"; an
87
+ * anchor-derived value takes the default; a value from the quantity's own equation, its
88
+ * propagated σ), through MathTS `normalCDF` of the negative
89
+ * argument so a far tail is not rounded to 0 by `1 − cdf`. It is reported BESIDE the verdict
90
+ * and changes no verdict: the clash threshold stays `ordersApart > maxOrders`. A small p says
91
+ * the two magnitudes are hard to reconcile at their stated precision; 2.9 decades at σ = 1
92
+ * is p ≈ 0.040, no longer a clean pass, while 3.1 decades stays a clash. NOT a credibility
93
+ * score: it says nothing about whether the identification is true. `null` when the gate
94
+ * abstained. Optional on the type; the funnel always sets it.
95
+ */
96
+ readonly magnitudeP?: number | null;
82
97
  /** Both endpoints had a representative value, so the magnitude gate ran. */
83
98
  readonly magnitudeChecked: boolean;
84
99
  /** The magnitude gate read at least one endpoint value from the graph at
85
- * the anchor (no static table entry) rather than the sourced table. */
100
+ * the anchor (no static table entry) rather than the sourced table. A value
101
+ * the graph computes from registered constants alone, with no anchor input
102
+ * (the target of a source-less equation), is a constant and is not
103
+ * anchor-derived. */
86
104
  readonly magnitudeUsedAnchor: boolean;
87
105
  /**
88
106
  * The magnitude comparison used an anchor-derived value, and the ratio of the
@@ -93,17 +111,30 @@ export interface VettedCandidate {
93
111
  * the temperature to the Hawking temperature of the anchor mass M, and then
94
112
  * the thermal wavelength is exactly 4π ℓ_P for EVERY M. Its anchor-derived
95
113
  * magnitude is not a representative magnitude of the quantity at all.
96
- * A quantity whose value really is a constant belongs in the
97
- * representative-value table, where it is not anchor-derived.
114
+ * A quantity whose value really is a constant is not anchor-derived: the
115
+ * sourced table states it, or the graph computes it from registered constants
116
+ * with no anchor input (`DiscoveryContext.constantValues`), and the probe does
117
+ * not withhold a comparison of two such values, which can fail by the clash
118
+ * threshold.
98
119
  * A clash stays a clash (the graph itself fixes the two apart); only a pass is
99
120
  * withheld, in `describeGrounding`. Optional on the type so hand-built
100
121
  * candidates need not state it; the funnel always sets it.
101
122
  */
102
123
  readonly magnitudeAnchorInvariant?: boolean;
103
124
  /**
104
- * The endpoints with no representative magnitude (neither in the sourced
105
- * table nor valued at the anchor) — why the magnitude gate abstained. Empty
106
- * when it ran. Optional on the type; the funnel always sets it.
125
+ * The endpoints whose magnitude the gate took from the quantity's own equation
126
+ * (`own-equation-magnitude.ts`): no table value and no no-anchor constant, but
127
+ * an edge into it whose every source the table or the constants value, at a
128
+ * propagated σ within one decade. Such a value is not anchor-derived. Empty
129
+ * when neither endpoint's magnitude came from there. Optional on the type; the
130
+ * funnel always sets it.
131
+ */
132
+ readonly magnitudeDerived?: readonly string[];
133
+ /**
134
+ * The endpoints with no representative magnitude (not in the sourced table,
135
+ * not a no-anchor constant, not derived from their own equation, not valued
136
+ * at the anchor) — why the magnitude gate abstained. Empty when it ran.
137
+ * Optional on the type; the funnel always sets it.
107
138
  */
108
139
  readonly magnitudeMissing?: readonly string[];
109
140
  /**
@@ -132,11 +163,18 @@ export interface VettedCandidate {
132
163
  * compares catalog labels and runs no computation, so
133
164
  * it is never counted or described as a falsification.
134
165
  * - `promising` — consistent AND connects disconnected physics AND
135
- * unlocks ≥1 quantity. Worth physicist review.
166
+ * unlocks ≥1 quantity, AND the magnitude falsifier ran
167
+ * and could have failed ({@link hasMagnitudeEvidence}).
168
+ * Worth physicist review.
169
+ * - `promising-unchecked` — the same structure, but the magnitude falsifier
170
+ * never tested it: it abstained (an endpoint has no
171
+ * representative magnitude) or its pass is anchor-invariant
172
+ * and so could not fail. A separate count, never added to
173
+ * `promising` (AGENTS law 4).
136
174
  * - `inert` — consistent but structurally/numerically idle (a
137
175
  * dimensional coincidence with no consequence).
138
176
  */
139
- readonly verdict: 'promising' | 'inert' | 'contradictory' | 'magnitude-clash' | 'axis-clash';
177
+ readonly verdict: 'promising' | 'promising-unchecked' | 'inert' | 'contradictory' | 'magnitude-clash' | 'axis-clash';
140
178
  /** Composite ranking score (higher = more worth review). */
141
179
  readonly score: number;
142
180
  /**
@@ -164,6 +202,23 @@ export interface VettedCandidate {
164
202
  * (weak name-based prior; informational). */
165
203
  readonly touchesCanonical: boolean;
166
204
  }
205
+ /**
206
+ * Whether the magnitude falsifier ran on a candidate AND could have failed: both endpoints had a
207
+ * representative magnitude (`magnitudeChecked`) and the comparison is not anchor-invariant. An
208
+ * anchor-invariant pass is fixed by the graph at every anchor, so it cannot fail and is not a
209
+ * check (AGENTS law 2). The one owner of this predicate: the verdict split between `promising`
210
+ * and `promising-unchecked`, the CLI readiness count and the grounding ledger all read it.
211
+ * @internal
212
+ */
213
+ export declare function hasMagnitudeEvidence(c: Pick<VettedCandidate, 'magnitudeChecked' | 'magnitudeAnchorInvariant'>): boolean;
214
+ /**
215
+ * Whether a verdict is one of the two promising tiers, `promising` (with magnitude evidence) or
216
+ * `promising-unchecked` (without): the structural set the consequence and proposal layers
217
+ * process, so splitting the tiers loses no proposal. A selector, never a count: the two tiers are
218
+ * reported apart and never added (AGENTS law 4).
219
+ * @internal
220
+ */
221
+ export declare function isPromisingTier(verdict: VettedCandidate['verdict']): boolean;
167
222
  /** Options for the discovery loop. @internal */
168
223
  export interface DiscoveryOptions {
169
224
  /**
@@ -230,6 +285,19 @@ export interface DiscoveryContext {
230
285
  readonly attributesByName: ReadonlyMap<string, RegimeAttributes>;
231
286
  /** `forwardEvaluate(edges, groundTruth, baseIdents)` — anchor magnitudes. */
232
287
  readonly anchorValues: ReadonlyMap<string, number>;
288
+ /**
289
+ * `forwardEvaluate(edges, {}, baseIdents)` — the values the graph fixes with NO anchor input:
290
+ * the targets of source-less equations (an all-constant right-hand side such as the Rydberg
291
+ * energy or the Planck length) and whatever they alone determine. Such a value is a constant,
292
+ * not an anchor-derived magnitude, so the magnitude gate reads it as `fromAnchor: false`.
293
+ */
294
+ readonly constantValues: ReadonlyMap<string, number>;
295
+ /**
296
+ * The magnitudes the graph derives from the sourced table and the constants alone, never from
297
+ * the anchor (`deriveOwnEquationMagnitudes`), with every refusal and its reason: a σ above one
298
+ * decade, two disagreeing edges, or a σ that could not be measured.
299
+ */
300
+ readonly derivedMagnitudes: DerivedMagnitudes;
233
301
  /** The same evaluation with every anchor input times {@link ANCHOR_PROBE_FACTOR}. */
234
302
  readonly anchorValuesProbe: ReadonlyMap<string, number>;
235
303
  /** `quantityComponents(edges, baseIdents)` — base component roots. */
@@ -247,6 +315,56 @@ export interface DiscoveryContext {
247
315
  /** Resolve options and compute the candidate-invariant discovery state once.
248
316
  * @internal */
249
317
  export declare function buildDiscoveryContext(edges: readonly BridgeEdge[], opts: DiscoveryOptions): DiscoveryContext;
318
+ /** One endpoint's magnitude for the gate: its value, where it came from, and its σ in decades. */
319
+ interface GateMagnitude {
320
+ readonly value: number;
321
+ readonly fromAnchor: boolean;
322
+ /** Derived from the quantity's own equation (`ctx.derivedMagnitudes`). */
323
+ readonly fromOwnEquation: boolean;
324
+ readonly sigmaDecades: number;
325
+ }
326
+ /** What the magnitude gate found for one candidate. @internal */
327
+ export interface MagnitudeGate {
328
+ /** The two magnitudes, when both were found (the gate ran). */
329
+ readonly a: GateMagnitude | undefined;
330
+ readonly b: GateMagnitude | undefined;
331
+ readonly checked: boolean;
332
+ readonly usedAnchor: boolean;
333
+ /** `|log10|a| − log10|b||`, or null when the gate abstained. */
334
+ readonly ordersApart: number | null;
335
+ /** The verdict: `ordersApart > maxOrders`. */
336
+ readonly clash: boolean;
337
+ /** The calibrated strength `2·Φ(−orders/√(σ_a² + σ_b²))`, or null when the gate abstained. */
338
+ readonly p: number | null;
339
+ /** The endpoints with no magnitude (why the gate abstained); empty when it ran. */
340
+ readonly missing: readonly string[];
341
+ /** The endpoints whose magnitude came from their own equation, in candidate order. */
342
+ readonly derived: readonly string[];
343
+ }
344
+ /**
345
+ * The two-sided tail of a gap of `orders` decades between two values whose log10 carry
346
+ * standard deviations `sigmaA` and `sigmaB` decades: `2·Φ(−orders/√(σ_a² + σ_b²))`, through the
347
+ * NEGATIVE argument (`1 − Φ` rounds a far tail to 0; the lower tail is accurate). A strength of
348
+ * the falsifier, not a credibility score.
349
+ *
350
+ * @internal
351
+ */
352
+ export declare function magnitudeStrength(orders: number, sigmaA: number, sigmaB: number): number;
353
+ /**
354
+ * The magnitude gate: an INDEPENDENT falsifier the single-anchor graph cannot make. It runs only
355
+ * when both endpoints have a representative value and abstains (never false-rejects) otherwise.
356
+ * A value comes from the sourced static table first; else from the value the graph fixes with NO
357
+ * anchor input (a constant computed from registered constants alone, `ctx.constantValues`: not
358
+ * anchor-derived); else from the quantity's own equation evaluated from the table and the
359
+ * constants (`ctx.derivedMagnitudes`, at its propagated σ, never above one decade: not
360
+ * anchor-derived); else — for graph-derived quantities the table omits by design
361
+ * (schwarzschild-radius, thermal-de-broglie-wavelength) — from the quantity's value AT THE
362
+ * REGISTERED ANCHOR, a definite magnitude for this run. The constant and the anchor value take the
363
+ * default σ of one decade. The verdict is `ordersApart > ctx.maxOrders`; `p` is reported beside it.
364
+ *
365
+ * @internal
366
+ */
367
+ export declare function magnitudeGate(candidate: LinkCandidate, ctx: DiscoveryContext): MagnitudeGate;
250
368
  /**
251
369
  * Vet one link candidate by hypothesizing the identification a≡b and
252
370
  * measuring its structural and numerical consequences. See module docs.
@@ -265,11 +383,13 @@ export declare function vetLinkCandidate(edges: readonly BridgeEdge[], candidate
265
383
  export declare function vetInContext(edges: readonly BridgeEdge[], candidate: LinkCandidate, ctx: DiscoveryContext): VettedCandidate;
266
384
  /**
267
385
  * Run the full discovery funnel: propose cross-cluster candidates, vet each
268
- * against the inference suite, and rank — `promising` first, then by score.
386
+ * against the inference suite, and rank — `promising` first, then `promising-unchecked`, then
387
+ * the rest, and by score within a verdict.
269
388
  * The output is the physicist's worklist (vetted, provenance-traced), not a
270
389
  * list of discoveries.
271
390
  *
272
391
  * @public
273
392
  */
274
393
  export declare function rankDiscoveries(edges: readonly BridgeEdge[], opts?: DiscoveryOptions): VettedCandidate[];
394
+ export {};
275
395
  //# sourceMappingURL=discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/composition/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/composition/discovery.ts"],"names":[],"mappings":"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"}
@@ -38,12 +38,15 @@ import { GATE_AXES } from './axes.js';
38
38
  import { classifyIdentifiability, forwardClosure } from './identifiability.js';
39
39
  import { retrodict, retrodictNode, forwardEvaluate } from './retrodiction.js';
40
40
  import { proposeLinkCandidates } from './bridge-analysis.js';
41
+ import { clusterBySharedKeys } from './quantity-clusters.js';
42
+ import { normalCDF } from '@danielsimonjr/mathts-functions';
41
43
  import { M_SUN_KG } from '../core/constants.js';
42
- import { REPRESENTATIVE_VALUES } from './representative-values.js';
44
+ import { DEFAULT_SIGMA_DECADES, REPRESENTATIVE_VALUES, sigmaDecadesOf } from './representative-values.js';
43
45
  import { conventionScaleToSI } from '../dimensional/unit-convention.js';
44
46
  import { allQuantities } from './quantities.js';
45
47
  import { CANONICAL_EQUATIONS } from '../canonical/registry.js';
46
48
  import { format } from '../dimensional/algebra.js';
49
+ import { deriveOwnEquationMagnitudes } from './own-equation-magnitude.js';
47
50
  // ── registry-only attribute lookup (D1 axis gate; Option-A resolution) ─────
48
51
  // Built from the centralized `Quantity` nodes ONLY (never canonical
49
52
  // per-equation stamps — audit adjudication F1). Names that aren't a
@@ -80,37 +83,64 @@ const CANONICAL_QUANTITY_NAMES = (() => {
80
83
  }
81
84
  return s;
82
85
  })();
83
- /** Union-find over quantity names; merges each edge's endpoints and every
84
- * identification's from↔to. Returns name → component-root. */
86
+ /**
87
+ * Whether the magnitude falsifier ran on a candidate AND could have failed: both endpoints had a
88
+ * representative magnitude (`magnitudeChecked`) and the comparison is not anchor-invariant. An
89
+ * anchor-invariant pass is fixed by the graph at every anchor, so it cannot fail and is not a
90
+ * check (AGENTS law 2). The one owner of this predicate: the verdict split between `promising`
91
+ * and `promising-unchecked`, the CLI readiness count and the grounding ledger all read it.
92
+ * @internal
93
+ */
94
+ export function hasMagnitudeEvidence(c) {
95
+ return c.magnitudeChecked && c.magnitudeAnchorInvariant !== true;
96
+ }
97
+ /**
98
+ * Whether a verdict is one of the two promising tiers, `promising` (with magnitude evidence) or
99
+ * `promising-unchecked` (without): the structural set the consequence and proposal layers
100
+ * process, so splitting the tiers loses no proposal. A selector, never a count: the two tiers are
101
+ * reported apart and never added (AGENTS law 4).
102
+ * @internal
103
+ */
104
+ export function isPromisingTier(verdict) {
105
+ return verdict === 'promising' || verdict === 'promising-unchecked';
106
+ }
107
+ /**
108
+ * The component partition of quantity names: names in one equation are one component, and so
109
+ * are the two sides of every identification. The shared partition of `quantity-clusters.ts`
110
+ * (a name is an item; its keys are the equations and identifications it appears in). Returns
111
+ * name → a representative of its component (its first name), read only for equality.
112
+ *
113
+ * An equation with no source (an all-constant right-hand side, `CE-bohr-radius`) registers its
114
+ * target under its own key, so the target is a component member of its own and an identification
115
+ * touching it can merge components (the owner's decision of 2026-10-16, option 1). Before it, the
116
+ * union-find this replaced registered a name only when it took part in a union, so the target of
117
+ * every source-less equation (eight on the canonical graph) was absent from the map and no
118
+ * identification touching it merged anything.
119
+ */
85
120
  function quantityComponents(edges, idents) {
86
- const parent = new Map();
87
- const find = (x) => {
88
- if (!parent.has(x))
89
- parent.set(x, x);
90
- let r = x;
91
- while (parent.get(r) !== r)
92
- r = parent.get(r);
93
- let cur = x;
94
- while (parent.get(cur) !== r) {
95
- const next = parent.get(cur);
96
- parent.set(cur, r);
97
- cur = next;
98
- }
99
- return r;
100
- };
101
- const union = (a, b) => {
102
- parent.set(find(a), find(b));
121
+ const keysByName = new Map();
122
+ const tag = (name, key) => {
123
+ const keys = keysByName.get(name);
124
+ if (keys === undefined)
125
+ keysByName.set(name, [key]);
126
+ else
127
+ keys.push(key);
103
128
  };
104
- for (const e of edges) {
105
- const names = [...e.sources.map((s) => s.name), e.target.name];
106
- for (let i = 1; i < names.length; i++)
107
- union(names[0], names[i]);
108
- }
109
- for (const id of idents)
110
- union(id.from, id.to);
129
+ edges.forEach((e, i) => {
130
+ for (const s of e.sources)
131
+ tag(s.name, `edge:${i}`);
132
+ tag(e.target.name, `edge:${i}`);
133
+ });
134
+ idents.forEach((id, i) => {
135
+ tag(id.from, `ident:${i}`);
136
+ tag(id.to, `ident:${i}`);
137
+ });
138
+ const names = [...keysByName.keys()];
111
139
  const roots = new Map();
112
- for (const name of parent.keys())
113
- roots.set(name, find(name));
140
+ for (const cluster of clusterBySharedKeys(names, (name) => keysByName.get(name) ?? [], (name) => name)) {
141
+ for (const name of cluster)
142
+ roots.set(name, cluster[0]);
143
+ }
114
144
  return roots;
115
145
  }
116
146
  /**
@@ -161,16 +191,24 @@ export function buildDiscoveryContext(edges, opts) {
161
191
  const groundTruth = opts.groundTruth ?? ANCHOR_DEFAULT;
162
192
  const anchor = Object.keys(groundTruth);
163
193
  const baseReport = retrodict(edges, groundTruth, { identifications: baseIdents });
194
+ const repVals = opts.representativeValues ?? REPRESENTATIVE_VALUES;
195
+ const constantValues = forwardEvaluate(edges, {}, baseIdents);
164
196
  return {
165
197
  baseIdents,
166
198
  groundTruth,
167
199
  anchor,
168
- repVals: opts.representativeValues ?? REPRESENTATIVE_VALUES,
200
+ repVals,
169
201
  maxOrders: opts.maxOrdersOfMagnitude ?? DEFAULT_MAX_ORDERS_OF_MAGNITUDE,
170
202
  attributesByName: opts.quantityAttributes ?? REGISTRY_ATTRIBUTES_BY_NAME,
171
203
  // Candidate-invariant: the anchor's forward evaluation, the base component
172
204
  // partition, and the base forward closure all depend only on (edges, opts).
173
205
  anchorValues: forwardEvaluate(edges, groundTruth, baseIdents),
206
+ constantValues,
207
+ derivedMagnitudes: deriveOwnEquationMagnitudes(edges, {
208
+ representativeValues: repVals,
209
+ constantValues,
210
+ identifications: baseIdents,
211
+ }),
174
212
  anchorValuesProbe: forwardEvaluate(edges, Object.fromEntries(Object.entries(groundTruth).map(([k, v]) => [k, v * ANCHOR_PROBE_FACTOR])), baseIdents),
175
213
  comps: quantityComponents(edges, baseIdents),
176
214
  closureBase: forwardClosure(edges, anchor, baseIdents),
@@ -231,54 +269,116 @@ function newInconsistencies(edges, groundTruth, anchor, candidate, withHyp, base
231
269
  }
232
270
  return nodes;
233
271
  }
272
+ /** MathTS `normalCDF`, read back as the number it is. */
273
+ function phi(z) {
274
+ const v = normalCDF(z);
275
+ if (typeof v !== 'number')
276
+ throw new TypeError('normalCDF did not return a number for a number argument');
277
+ return v;
278
+ }
234
279
  /**
235
- * Vet one link candidate by hypothesizing the identification a≡b and
236
- * measuring its structural and numerical consequences. See module docs.
280
+ * The two-sided tail of a gap of `orders` decades between two values whose log10 carry
281
+ * standard deviations `sigmaA` and `sigmaB` decades: `2·Φ(−orders/√(σ_a² + σ_b²))`, through the
282
+ * NEGATIVE argument (`1 − Φ` rounds a far tail to 0; the lower tail is accurate). A strength of
283
+ * the falsifier, not a credibility score.
237
284
  *
238
285
  * @internal
239
286
  */
240
- export function vetLinkCandidate(edges, candidate, opts = {}) {
241
- return vetInContext(edges, candidate, buildDiscoveryContext(edges, opts));
287
+ export function magnitudeStrength(orders, sigmaA, sigmaB) {
288
+ return 2 * phi(-orders / Math.sqrt(sigmaA * sigmaA + sigmaB * sigmaB));
242
289
  }
243
290
  /**
244
- * The per-candidate vetting body, given pre-computed candidate-invariant
245
- * `ctx`. The hypothesis-augmented closure is per-candidate. Retrodiction is
246
- * per-candidate only when an endpoint is already in the anchor closure;
247
- * otherwise the identification cannot fire and the base report stands.
291
+ * The magnitude gate: an INDEPENDENT falsifier the single-anchor graph cannot make. It runs only
292
+ * when both endpoints have a representative value and abstains (never false-rejects) otherwise.
293
+ * A value comes from the sourced static table first; else from the value the graph fixes with NO
294
+ * anchor input (a constant computed from registered constants alone, `ctx.constantValues`: not
295
+ * anchor-derived); else from the quantity's own equation evaluated from the table and the
296
+ * constants (`ctx.derivedMagnitudes`, at its propagated σ, never above one decade: not
297
+ * anchor-derived); else — for graph-derived quantities the table omits by design
298
+ * (schwarzschild-radius, thermal-de-broglie-wavelength) — from the quantity's value AT THE
299
+ * REGISTERED ANCHOR, a definite magnitude for this run. The constant and the anchor value take the
300
+ * default σ of one decade. The verdict is `ordersApart > ctx.maxOrders`; `p` is reported beside it.
248
301
  *
249
302
  * @internal
250
303
  */
251
- export function vetInContext(edges, candidate, ctx) {
252
- const { baseIdents, groundTruth, anchor, repVals, maxOrders, anchorValues, anchorValuesProbe, comps, closureBase, attributesByName, baseInconsistentNodes, } = ctx;
253
- // Magnitude gate: an INDEPENDENT falsifier the single-anchor graph can't make.
254
- // Only fires when both endpoints have a representative value; abstains (and
255
- // never false-rejects) otherwise. A value comes from the sourced static table
256
- // first, else — for graph-derived quantities the table omits by design
257
- // (schwarzschild-radius, thermal-de-broglie-wavelength) — from the quantity's
258
- // value AT THE REGISTERED ANCHOR, which is a definite magnitude for this run.
304
+ export function magnitudeGate(candidate, ctx) {
259
305
  const magnitudeOf = (name) => {
260
- const rv = repVals[name];
306
+ const rv = ctx.repVals[name];
261
307
  // Both paths apply the same finite-and-nonzero gate: a 0/∞/NaN magnitude
262
308
  // would make log10 blow up (log10(0) = -∞), spoofing or silently disabling
263
309
  // the falsifier. Symmetric validation across the table and anchor sources.
264
- if (rv !== undefined && Number.isFinite(rv.value) && rv.value !== 0)
265
- return { value: rv.value, fromAnchor: false };
266
- const av = anchorValues.get(name);
310
+ if (rv !== undefined && Number.isFinite(rv.value) && rv.value !== 0) {
311
+ return { value: rv.value, fromAnchor: false, fromOwnEquation: false, sigmaDecades: sigmaDecadesOf(rv) };
312
+ }
313
+ // A value the graph fixes with no anchor input is a constant: comparing it can fail by the
314
+ // clash threshold at every anchor, so it is not anchor-derived and the invariance probe does
315
+ // not withhold it. Only a value that needs the anchor is `fromAnchor`.
316
+ const cv = ctx.constantValues.get(name);
317
+ if (cv !== undefined) {
318
+ const value = cv * conventionScaleToSI(name);
319
+ if (Number.isFinite(value) && value !== 0) {
320
+ return { value, fromAnchor: false, fromOwnEquation: false, sigmaDecades: DEFAULT_SIGMA_DECADES };
321
+ }
322
+ }
323
+ // The quantity's own equation, from the table and the constants alone (already in SI, and
324
+ // already refused when its σ is above one decade): not anchor-derived either.
325
+ const dv = ctx.derivedMagnitudes.values.get(name);
326
+ if (dv !== undefined) {
327
+ return { value: dv.value, fromAnchor: false, fromOwnEquation: true, sigmaDecades: dv.sigmaDecades };
328
+ }
329
+ const av = ctx.anchorValues.get(name);
267
330
  if (av !== undefined) {
268
331
  const value = av * conventionScaleToSI(name);
269
- if (Number.isFinite(value) && value !== 0)
270
- return { value, fromAnchor: true };
332
+ if (Number.isFinite(value) && value !== 0) {
333
+ return { value, fromAnchor: true, fromOwnEquation: false, sigmaDecades: DEFAULT_SIGMA_DECADES };
334
+ }
271
335
  }
272
336
  return undefined;
273
337
  };
274
- const va = magnitudeOf(candidate.a);
275
- const vb = magnitudeOf(candidate.b);
276
- const magnitudeChecked = va !== undefined && vb !== undefined;
277
- const magnitudeUsedAnchor = magnitudeChecked && (va.fromAnchor || vb.fromAnchor);
278
- const ordersApart = magnitudeChecked
279
- ? Math.abs(Math.log10(Math.abs(va.value)) - Math.log10(Math.abs(vb.value)))
280
- : null;
281
- const magnitudeClash = ordersApart !== null && ordersApart > maxOrders;
338
+ const a = magnitudeOf(candidate.a);
339
+ const b = magnitudeOf(candidate.b);
340
+ const checked = a !== undefined && b !== undefined;
341
+ const ordersApart = checked ? Math.abs(Math.log10(Math.abs(a.value)) - Math.log10(Math.abs(b.value))) : null;
342
+ return {
343
+ a,
344
+ b,
345
+ checked,
346
+ usedAnchor: checked && (a.fromAnchor || b.fromAnchor),
347
+ ordersApart,
348
+ clash: ordersApart !== null && ordersApart > ctx.maxOrders,
349
+ p: checked && ordersApart !== null ? magnitudeStrength(ordersApart, a.sigmaDecades, b.sigmaDecades) : null,
350
+ missing: [a === undefined ? candidate.a : null, b === undefined ? candidate.b : null].filter((e) => e !== null),
351
+ derived: [a?.fromOwnEquation === true ? candidate.a : null, b?.fromOwnEquation === true ? candidate.b : null].filter((e) => e !== null),
352
+ };
353
+ }
354
+ /**
355
+ * Vet one link candidate by hypothesizing the identification a≡b and
356
+ * measuring its structural and numerical consequences. See module docs.
357
+ *
358
+ * @internal
359
+ */
360
+ export function vetLinkCandidate(edges, candidate, opts = {}) {
361
+ return vetInContext(edges, candidate, buildDiscoveryContext(edges, opts));
362
+ }
363
+ /**
364
+ * The per-candidate vetting body, given pre-computed candidate-invariant
365
+ * `ctx`. The hypothesis-augmented closure is per-candidate. Retrodiction is
366
+ * per-candidate only when an endpoint is already in the anchor closure;
367
+ * otherwise the identification cannot fire and the base report stands.
368
+ *
369
+ * @internal
370
+ */
371
+ export function vetInContext(edges, candidate, ctx) {
372
+ const { baseIdents, groundTruth, anchor, anchorValuesProbe, comps, closureBase, attributesByName, baseInconsistentNodes, } = ctx;
373
+ // Magnitude gate: an INDEPENDENT falsifier the single-anchor graph can't make
374
+ // (`magnitudeGate`): the verdict is the hard threshold, `p` its calibrated strength.
375
+ const gate = magnitudeGate(candidate, ctx);
376
+ const va = gate.a;
377
+ const vb = gate.b;
378
+ const magnitudeChecked = gate.checked;
379
+ const magnitudeUsedAnchor = gate.usedAnchor;
380
+ const ordersApart = gate.ordersApart;
381
+ const magnitudeClash = gate.clash;
282
382
  // Anchor-invariance probe: re-read each anchor-derived magnitude at the
283
383
  // rescaled anchor. A table value is a constant and does not move.
284
384
  const probeOf = (name, m) => {
@@ -380,7 +480,7 @@ export function vetInContext(edges, candidate, ctx) {
380
480
  else if (axisClash)
381
481
  verdict = 'axis-clash';
382
482
  else if (mergesComponents && unlocksFromAnchor.length > 0 && !subsuming)
383
- verdict = 'promising';
483
+ verdict = hasMagnitudeEvidence({ magnitudeChecked, magnitudeAnchorInvariant }) ? 'promising' : 'promising-unchecked';
384
484
  else
385
485
  verdict = 'inert';
386
486
  // Score: all falsifications sink to the bottom; a subsuming (tautological)
@@ -413,10 +513,12 @@ export function vetInContext(edges, candidate, ctx) {
413
513
  numericallyConsistent,
414
514
  inconsistentNodes,
415
515
  ordersApart,
516
+ magnitudeP: gate.p,
416
517
  magnitudeChecked,
417
518
  magnitudeUsedAnchor,
418
519
  magnitudeAnchorInvariant,
419
- magnitudeMissing: [va === undefined ? candidate.a : null, vb === undefined ? candidate.b : null].filter((e) => e !== null),
520
+ magnitudeDerived: gate.derived,
521
+ magnitudeMissing: gate.missing,
420
522
  axisUnstated,
421
523
  subsuming,
422
524
  verdict,
@@ -429,7 +531,8 @@ export function vetInContext(edges, candidate, ctx) {
429
531
  }
430
532
  /**
431
533
  * Run the full discovery funnel: propose cross-cluster candidates, vet each
432
- * against the inference suite, and rank — `promising` first, then by score.
534
+ * against the inference suite, and rank — `promising` first, then `promising-unchecked`, then
535
+ * the rest, and by score within a verdict.
433
536
  * The output is the physicist's worklist (vetted, provenance-traced), not a
434
537
  * list of discoveries.
435
538
  *
@@ -438,10 +541,11 @@ export function vetInContext(edges, candidate, ctx) {
438
541
  export function rankDiscoveries(edges, opts = {}) {
439
542
  const VERDICT_RANK = {
440
543
  promising: 0,
441
- inert: 1,
442
- 'magnitude-clash': 2,
443
- contradictory: 3,
444
- 'axis-clash': 4,
544
+ 'promising-unchecked': 1,
545
+ inert: 2,
546
+ 'magnitude-clash': 3,
547
+ contradictory: 4,
548
+ 'axis-clash': 5,
445
549
  };
446
550
  const ctx = buildDiscoveryContext(edges, opts);
447
551
  const candidates = proposeLinkCandidates(edges);