universal-physics-tensor 8.0.0 → 10.0.0

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