universal-physics-tensor 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/README.md +36 -34
  2. package/data/applied-cases.json +1892 -0
  3. package/data/applied-cases.schema.json +194 -0
  4. package/data/atlas/atlas.json +21 -21
  5. package/data/atlas/atlas.jsonld +1 -1
  6. package/data/atlas/diffusion.json +5 -5
  7. package/data/atlas/oscillators.json +7 -7
  8. package/data/atlas/waves.json +11 -11
  9. package/data/bridge-catalog.json +20 -4
  10. package/data/units.json +6 -25
  11. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  12. package/dist/atlas/benchmark/stats.js +6 -20
  13. package/dist/atlas/benchmark/stats.js.map +1 -1
  14. package/dist/atlas/physjs-entries.generated.d.ts +13 -4
  15. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  16. package/dist/atlas/physjs-entries.generated.js +15 -4
  17. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  18. package/dist/atlas/physjs-reviewed.js +2 -2
  19. package/dist/atlas/physjs-reviewed.js.map +1 -1
  20. package/dist/cases/catalog-checks.d.ts +10 -0
  21. package/dist/cases/catalog-checks.d.ts.map +1 -0
  22. package/dist/cases/catalog-checks.js +241 -0
  23. package/dist/cases/catalog-checks.js.map +1 -0
  24. package/dist/cases/catalog.d.ts +83 -0
  25. package/dist/cases/catalog.d.ts.map +1 -0
  26. package/dist/cases/catalog.js +118 -0
  27. package/dist/cases/catalog.js.map +1 -0
  28. package/dist/cases/engine.d.ts +13 -0
  29. package/dist/cases/engine.d.ts.map +1 -0
  30. package/dist/cases/engine.js +179 -0
  31. package/dist/cases/engine.js.map +1 -0
  32. package/dist/cases/index.d.ts.map +1 -1
  33. package/dist/cases/index.js +5 -7
  34. package/dist/cases/index.js.map +1 -1
  35. package/dist/cases/methods.d.ts +215 -0
  36. package/dist/cases/methods.d.ts.map +1 -0
  37. package/dist/cases/methods.js +743 -0
  38. package/dist/cases/methods.js.map +1 -0
  39. package/dist/cases/types.d.ts +12 -0
  40. package/dist/cases/types.d.ts.map +1 -1
  41. package/dist/cases/types.js.map +1 -1
  42. package/dist/cli/args.d.ts +2 -0
  43. package/dist/cli/args.d.ts.map +1 -1
  44. package/dist/cli/args.js.map +1 -1
  45. package/dist/cli/command.d.ts +3 -0
  46. package/dist/cli/command.d.ts.map +1 -1
  47. package/dist/cli/command.js.map +1 -1
  48. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  49. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  50. package/dist/cli/commands/_discovery-opts.js +1 -0
  51. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  52. package/dist/cli/commands/discover.d.ts.map +1 -1
  53. package/dist/cli/commands/discover.js +116 -71
  54. package/dist/cli/commands/discover.js.map +1 -1
  55. package/dist/cli/commands/evaluate.js +2 -2
  56. package/dist/cli/commands/evaluate.js.map +1 -1
  57. package/dist/cli/commands/explain.d.ts.map +1 -1
  58. package/dist/cli/commands/explain.js +22 -2
  59. package/dist/cli/commands/explain.js.map +1 -1
  60. package/dist/cli/commands/ground.d.ts.map +1 -1
  61. package/dist/cli/commands/ground.js +6 -1
  62. package/dist/cli/commands/ground.js.map +1 -1
  63. package/dist/cli/commands/map.d.ts.map +1 -1
  64. package/dist/cli/commands/map.js +9 -6
  65. package/dist/cli/commands/map.js.map +1 -1
  66. package/dist/cli/determination.d.ts +1 -0
  67. package/dist/cli/determination.d.ts.map +1 -1
  68. package/dist/cli/determination.js.map +1 -1
  69. package/dist/cli/flag-help.d.ts +1 -0
  70. package/dist/cli/flag-help.d.ts.map +1 -1
  71. package/dist/cli/flag-help.js +1 -0
  72. package/dist/cli/flag-help.js.map +1 -1
  73. package/dist/cli/graphs.d.ts +2 -0
  74. package/dist/cli/graphs.d.ts.map +1 -1
  75. package/dist/cli/graphs.js +1 -0
  76. package/dist/cli/graphs.js.map +1 -1
  77. package/dist/cli/main.d.ts +1 -0
  78. package/dist/cli/main.d.ts.map +1 -1
  79. package/dist/cli/main.js +1 -0
  80. package/dist/cli/main.js.map +1 -1
  81. package/dist/cli/output.d.ts +8 -0
  82. package/dist/cli/output.d.ts.map +1 -1
  83. package/dist/cli/output.js +8 -0
  84. package/dist/cli/output.js.map +1 -1
  85. package/dist/cli/statuses.d.ts.map +1 -1
  86. package/dist/cli/statuses.js +12 -2
  87. package/dist/cli/statuses.js.map +1 -1
  88. package/dist/cli/version.d.ts +1 -0
  89. package/dist/cli/version.d.ts.map +1 -1
  90. package/dist/cli/version.js +1 -0
  91. package/dist/cli/version.js.map +1 -1
  92. package/dist/cli-api.d.ts +2 -0
  93. package/dist/cli-api.d.ts.map +1 -1
  94. package/dist/cli-api.js +2 -0
  95. package/dist/cli-api.js.map +1 -1
  96. package/dist/composition/canonical-graph.d.ts +2 -2
  97. package/dist/composition/canonical-graph.js +2 -2
  98. package/dist/composition/canonical-graph.js.map +1 -1
  99. package/dist/composition/consequence.d.ts +15 -5
  100. package/dist/composition/consequence.d.ts.map +1 -1
  101. package/dist/composition/consequence.js +6 -4
  102. package/dist/composition/consequence.js.map +1 -1
  103. package/dist/composition/discovery.d.ts +78 -14
  104. package/dist/composition/discovery.d.ts.map +1 -1
  105. package/dist/composition/discovery.js +73 -23
  106. package/dist/composition/discovery.js.map +1 -1
  107. package/dist/composition/expr-eval.d.ts +1 -1
  108. package/dist/composition/expr-eval.d.ts.map +1 -1
  109. package/dist/composition/expr-eval.js +4 -4
  110. package/dist/composition/expr-eval.js.map +1 -1
  111. package/dist/composition/expr-simplify.d.ts +10 -14
  112. package/dist/composition/expr-simplify.d.ts.map +1 -1
  113. package/dist/composition/expr-simplify.js +49 -52
  114. package/dist/composition/expr-simplify.js.map +1 -1
  115. package/dist/composition/grounding.d.ts.map +1 -1
  116. package/dist/composition/grounding.js +19 -7
  117. package/dist/composition/grounding.js.map +1 -1
  118. package/dist/composition/mathts-quiet.d.ts +4 -6
  119. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  120. package/dist/composition/mathts-quiet.js +4 -14
  121. package/dist/composition/mathts-quiet.js.map +1 -1
  122. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  123. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  124. package/dist/composition/own-equation-magnitude.js +270 -0
  125. package/dist/composition/own-equation-magnitude.js.map +1 -0
  126. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  127. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  128. package/dist/composition/probe/backend-protocol.js.map +1 -1
  129. package/dist/composition/probe/candidate-store.d.ts +1 -0
  130. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  131. package/dist/composition/probe/candidate-store.js +1 -0
  132. package/dist/composition/probe/candidate-store.js.map +1 -1
  133. package/dist/composition/probe/corpus.d.ts +4 -2
  134. package/dist/composition/probe/corpus.d.ts.map +1 -1
  135. package/dist/composition/probe/corpus.js +3 -3
  136. package/dist/composition/probe/corpus.js.map +1 -1
  137. package/dist/composition/probe/dataset.d.ts +1 -0
  138. package/dist/composition/probe/dataset.d.ts.map +1 -1
  139. package/dist/composition/probe/dataset.js.map +1 -1
  140. package/dist/composition/probe/experiment-design.d.ts +2 -0
  141. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  142. package/dist/composition/probe/experiment-design.js.map +1 -1
  143. package/dist/composition/probe/falsify.d.ts +2 -0
  144. package/dist/composition/probe/falsify.d.ts.map +1 -1
  145. package/dist/composition/probe/falsify.js.map +1 -1
  146. package/dist/composition/probe/fit.d.ts +1 -0
  147. package/dist/composition/probe/fit.d.ts.map +1 -1
  148. package/dist/composition/probe/fit.js.map +1 -1
  149. package/dist/composition/probe/generator.d.ts +3 -0
  150. package/dist/composition/probe/generator.d.ts.map +1 -1
  151. package/dist/composition/probe/generator.js +5 -6
  152. package/dist/composition/probe/generator.js.map +1 -1
  153. package/dist/composition/probe/limits.d.ts +1 -0
  154. package/dist/composition/probe/limits.d.ts.map +1 -1
  155. package/dist/composition/probe/limits.js.map +1 -1
  156. package/dist/composition/probe/pipeline.d.ts +5 -0
  157. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  158. package/dist/composition/probe/pipeline.js +64 -21
  159. package/dist/composition/probe/pipeline.js.map +1 -1
  160. package/dist/composition/probe/power-law.d.ts.map +1 -1
  161. package/dist/composition/probe/power-law.js +3 -7
  162. package/dist/composition/probe/power-law.js.map +1 -1
  163. package/dist/composition/probe/problem.d.ts +1 -0
  164. package/dist/composition/probe/problem.d.ts.map +1 -1
  165. package/dist/composition/probe/problem.js.map +1 -1
  166. package/dist/composition/probe/residual.d.ts +1 -0
  167. package/dist/composition/probe/residual.d.ts.map +1 -1
  168. package/dist/composition/probe/residual.js +1 -0
  169. package/dist/composition/probe/residual.js.map +1 -1
  170. package/dist/composition/probe/run-manifest.d.ts +1 -0
  171. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  172. package/dist/composition/probe/run-manifest.js.map +1 -1
  173. package/dist/composition/probe/scalar-search.d.ts +50 -0
  174. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  175. package/dist/composition/probe/scalar-search.js +169 -0
  176. package/dist/composition/probe/scalar-search.js.map +1 -0
  177. package/dist/composition/probe/scoring.d.ts +1 -0
  178. package/dist/composition/probe/scoring.d.ts.map +1 -1
  179. package/dist/composition/probe/scoring.js.map +1 -1
  180. package/dist/composition/probe/study.d.ts +2 -2
  181. package/dist/composition/probe/study.d.ts.map +1 -1
  182. package/dist/composition/probe/study.js +6 -10
  183. package/dist/composition/probe/study.js.map +1 -1
  184. package/dist/composition/probe/t-tail.d.ts +3 -4
  185. package/dist/composition/probe/t-tail.d.ts.map +1 -1
  186. package/dist/composition/probe/t-tail.js +7 -10
  187. package/dist/composition/probe/t-tail.js.map +1 -1
  188. package/dist/composition/proposed-bridges.d.ts +11 -2
  189. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  190. package/dist/composition/proposed-bridges.js +7 -5
  191. package/dist/composition/proposed-bridges.js.map +1 -1
  192. package/dist/composition/rational-exponent.d.ts +2 -2
  193. package/dist/composition/rational-exponent.d.ts.map +1 -1
  194. package/dist/composition/rational-exponent.js +4 -4
  195. package/dist/composition/rational-exponent.js.map +1 -1
  196. package/dist/composition/representative-values.d.ts.map +1 -1
  197. package/dist/composition/representative-values.js +6 -0
  198. package/dist/composition/representative-values.js.map +1 -1
  199. package/dist/composition/retrodiction.d.ts +15 -0
  200. package/dist/composition/retrodiction.d.ts.map +1 -1
  201. package/dist/composition/retrodiction.js +10 -3
  202. package/dist/composition/retrodiction.js.map +1 -1
  203. package/dist/composition/user-equation.d.ts +1 -0
  204. package/dist/composition/user-equation.d.ts.map +1 -1
  205. package/dist/composition/user-equation.js +1 -0
  206. package/dist/composition/user-equation.js.map +1 -1
  207. package/dist/core/constants.d.ts +12 -11
  208. package/dist/core/constants.d.ts.map +1 -1
  209. package/dist/core/constants.js +24 -21
  210. package/dist/core/constants.js.map +1 -1
  211. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  212. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  213. package/dist/diff/bridge-ast-gradient.js +75 -173
  214. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  215. package/dist/dimensional/ast-types.d.ts +15 -0
  216. package/dist/dimensional/ast-types.d.ts.map +1 -1
  217. package/dist/dimensional/ast-types.js.map +1 -1
  218. package/dist/dimensional/curvature-composite.d.ts +1 -1
  219. package/dist/dimensional/curvature-composite.js.map +1 -1
  220. package/dist/dimensional/exact-scale.d.ts +41 -11
  221. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  222. package/dist/dimensional/exact-scale.js +115 -123
  223. package/dist/dimensional/exact-scale.js.map +1 -1
  224. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  225. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  226. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  227. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  228. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  229. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  230. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  231. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  232. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  233. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  234. package/dist/dimensional/scalar-lowering.js +45 -0
  235. package/dist/dimensional/scalar-lowering.js.map +1 -0
  236. package/dist/dimensional/unit-data.d.ts +5 -1
  237. package/dist/dimensional/unit-data.d.ts.map +1 -1
  238. package/dist/dimensional/unit-data.js +28 -4
  239. package/dist/dimensional/unit-data.js.map +1 -1
  240. package/dist/dimensional/units.d.ts +2 -0
  241. package/dist/dimensional/units.d.ts.map +1 -1
  242. package/dist/dimensional/units.js +59 -3
  243. package/dist/dimensional/units.js.map +1 -1
  244. package/dist/dimensional/validator.d.ts +2 -0
  245. package/dist/dimensional/validator.d.ts.map +1 -1
  246. package/dist/dimensional/validator.js.map +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  249. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  250. package/dist/numerical/connection-lowering-helpers.js +11 -15
  251. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  252. package/dist/numerical/pderiv.d.ts.map +1 -1
  253. package/dist/numerical/pderiv.js +2 -6
  254. package/dist/numerical/pderiv.js.map +1 -1
  255. package/dist/numerical/quadrature.js +3 -3
  256. package/dist/numerical/quadrature.js.map +1 -1
  257. package/dist/numerical/statistics.js +1 -1
  258. package/dist/numerical/statistics.js.map +1 -1
  259. package/dist/numerical/strides.d.ts +3 -2
  260. package/dist/numerical/strides.d.ts.map +1 -1
  261. package/dist/numerical/strides.js +3 -10
  262. package/dist/numerical/strides.js.map +1 -1
  263. package/package.json +9 -12
  264. package/dist/cases/brownian-sphere.d.ts +0 -68
  265. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  266. package/dist/cases/brownian-sphere.js +0 -355
  267. package/dist/cases/brownian-sphere.js.map +0 -1
  268. package/dist/cases/damped-resonator.d.ts +0 -23
  269. package/dist/cases/damped-resonator.d.ts.map +0 -1
  270. package/dist/cases/damped-resonator.js +0 -221
  271. package/dist/cases/damped-resonator.js.map +0 -1
  272. package/dist/cases/kepler-rv.d.ts +0 -13
  273. package/dist/cases/kepler-rv.d.ts.map +0 -1
  274. package/dist/cases/kepler-rv.js +0 -173
  275. package/dist/cases/kepler-rv.js.map +0 -1
  276. package/dist/cases/lumped-cooling.d.ts +0 -51
  277. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  278. package/dist/cases/lumped-cooling.js +0 -259
  279. package/dist/cases/lumped-cooling.js.map +0 -1
  280. package/dist/cases/resistor-noise.d.ts +0 -14
  281. package/dist/cases/resistor-noise.d.ts.map +0 -1
  282. package/dist/cases/resistor-noise.js +0 -215
  283. package/dist/cases/resistor-noise.js.map +0 -1
  284. package/dist/cases/skin-depth.d.ts +0 -17
  285. package/dist/cases/skin-depth.d.ts.map +0 -1
  286. package/dist/cases/skin-depth.js +0 -170
  287. package/dist/cases/skin-depth.js.map +0 -1
@@ -23,7 +23,7 @@ const FLAGS = [
23
23
  {
24
24
  name: '--derive',
25
25
  valueStyle: 'none',
26
- description: 'For each promising identification, print the one algebraic relation it implies. That relation is not a bridge.',
26
+ description: 'For each promising identification (either tier), print the one algebraic relation it implies, and say when the identification had no magnitude evidence. That relation is not a bridge.',
27
27
  },
28
28
  {
29
29
  name: '--show-adjudicated',
@@ -33,7 +33,7 @@ const FLAGS = [
33
33
  {
34
34
  name: '--require-falsifier',
35
35
  valueStyle: 'none',
36
- description: 'Hide promising rows that no independent falsifier ran on and survived.',
36
+ description: 'Hide promising rows (either tier) that no independent falsifier ran on and survived, counted per tier.',
37
37
  },
38
38
  JSON_FLAG,
39
39
  ];
@@ -42,13 +42,24 @@ const HELP = `upt discover [--source=catalog|canonical|both]
42
42
  VET the link candidates through the inference suite: hypothesise
43
43
  each identification a≡b and test whether it merges disconnected
44
44
  physics, unlocks quantities, and stays numerically consistent.
45
- Ranks promising / inert / contradictory.
45
+ Ranks promising / promising, magnitude unchecked / inert / contradictory.
46
+ A row that merges, unlocks and survives every falsifier that ran is
47
+ 'promising' only when the magnitude falsifier ran on it and could have
48
+ failed (both endpoints have a representative magnitude, and the ratio
49
+ is not fixed by the graph at every anchor); otherwise it is 'promising,
50
+ magnitude unchecked' (promising-unchecked in --json). The two tiers are
51
+ counted and listed apart and never added.
46
52
  --source=canonical runs the funnel on the standard-physics L-layer
47
53
  ALONE (bridges excluded) — new candidates from established physics,
48
54
  and a self-consistency check (expect 0 contradictory).
49
- --derive emits, for each 'promising' identification, the ONE algebraic
50
- relation it implies (monomial elimination) as an UNADJUDICATED, math-only
51
- proposal — NOT a bridge (Part-VI §XXVII-B). Pairs with --source=canonical.
55
+ --derive emits, for each promising identification of either tier, the ONE
56
+ algebraic relation it implies (monomial elimination) as an UNADJUDICATED,
57
+ math-only proposal — NOT a bridge (Part-VI §XXVII-B), and says when the
58
+ identification had no magnitude evidence. Pairs with --source=canonical.
59
+ A magnitude comes from the sourced table, else a constant the graph
60
+ fixes, else the quantity's own equation evaluated from the table and
61
+ the constants (used only at a propagated σ of at most one decade),
62
+ else the anchor; the MAGNITUDE-CLASH list marks the last two.
52
63
  --max-orders=N tunes the magnitude-clash threshold (default ${DISCOVER_MAX_ORDERS_DEFAULT}); looser N
53
64
  keeps more candidates 'promising', tighter N falsifies more as clashes.
54
65
  --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)
@@ -57,20 +68,21 @@ const HELP = `upt discover [--source=catalog|canonical|both]
57
68
  kelvin: an energy is k_B T, and any other dimension is an error.
58
69
  Candidates a physicist has already adjudicated
59
70
  (${ADJUDICATION_URLS})
60
- fold out of the PROMISING list by default (decoy/entailed verdicts only —
71
+ fold out of the two PROMISING lists by default (decoy/entailed verdicts only —
61
72
  review memory, not a re-litigation prompt); --show-adjudicated lists them
62
73
  again with their recorded verdict.
63
- Each PROMISING row states its readiness dimension by dimension —
74
+ Each row of either PROMISING list states its readiness dimension by dimension —
64
75
  structure, kind, which independent falsifiers (magnitude, axis,
65
76
  consequence) ran and survived or abstained — and what would make it
66
77
  testable: the identity premise, the missing magnitudes and regimes,
67
78
  and the observation that would test it. An abstention is a missing
68
- test, never a pass. --require-falsifier hides promising rows that no
69
- independent falsifier ran on and survived, counts them, and lists the
70
- encoded bridges that already carry a falsifier (a confrontation, a
71
- counterexample, or a regime inequality).`;
79
+ test, never a pass. --require-falsifier hides promising rows (either
80
+ tier) that no independent falsifier ran on and survived, counts them per
81
+ tier, and lists the encoded bridges that already carry a falsifier (a
82
+ confrontation, a counterexample, or a regime inequality).`;
72
83
  const EPISTEMICS = '⚠ a REVIEW SURFACE: `promising` means "worth a physicist\'s minute", not "true".\n' +
73
- ' Each candidate hypothesises an identification a≡b and tests its consequences.';
84
+ ' Each candidate hypothesises an identification a≡b and tests its consequences.\n' +
85
+ ' `promising-unchecked` is the same structure with no magnitude evidence; the two are never added.';
74
86
  const DERIVE_EPISTEMICS = '⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new\n' +
75
87
  ' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs\n' +
76
88
  ' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.';
@@ -121,6 +133,9 @@ function deriveReport(api, ranked, label, anchorLine, out) {
121
133
  out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);
122
134
  out(` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +
123
135
  ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`);
136
+ if (!p.derivedFrom.identification.magnitudeEvidence) {
137
+ out(' magnitude: no evidence — the identification is promising, magnitude unchecked (the magnitude falsifier never tested it)');
138
+ }
124
139
  if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {
125
140
  out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);
126
141
  }
@@ -158,7 +173,7 @@ function summarizeAdjudications(candidates) {
158
173
  /** The reconciling line printed under PROMISING when some of it carries a
159
174
  * recorded verdict — so the folded/shorter list never looks inconsistent
160
175
  * against the funnel line's raw promising count. */
161
- function adjudicationSummaryLine(promising, promisingCount) {
176
+ function adjudicationSummaryLine(promising, promisingCount, tierLabel) {
162
177
  const adjudicated = promising.filter((r) => r.adjudication);
163
178
  const counts = { genuine: 0, decoy: 0, entailed: 0, deferred: 0 };
164
179
  let folded = 0;
@@ -175,7 +190,7 @@ function adjudicationSummaryLine(promising, promisingCount) {
175
190
  const verb = total === 1 ? 'carries' : 'carry';
176
191
  const noun = total === 1 ? 'a recorded verdict' : 'recorded verdicts';
177
192
  const foldNote = folded === total ? '— folded' : folded === 0 ? '— shown below' : `— ${folded} folded`;
178
- return ` adjudicated: ${total} of the ${promisingCount} promising ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;
193
+ return ` adjudicated: ${total} of the ${promisingCount} ${tierLabel} ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;
179
194
  }
180
195
  /** Encoded bridges that already carry a falsifier. Not discovery rows. */
181
196
  function encodedFalsifiers(api) {
@@ -198,15 +213,24 @@ function encodedFalsifiers(api) {
198
213
  }
199
214
  return lines;
200
215
  }
201
- /** How far the `promising` set is from evidence, counted from candidate fields. */
202
- function readinessOf(api, candidates) {
203
- const p = candidates.filter((c) => c.verdict === 'promising');
216
+ /** The two promising tiers, in print order, with the label each is printed under. */
217
+ const TIERS = [
218
+ { verdict: 'promising', label: 'promising', heading: 'PROMISING (merges disconnected physics, unlocks quantities, stays consistent, and the magnitude falsifier ran and survived):' },
219
+ {
220
+ verdict: 'promising-unchecked',
221
+ label: 'promising, magnitude unchecked',
222
+ heading: 'PROMISING, MAGNITUDE UNCHECKED (the same structure; the magnitude falsifier abstained or its pass is fixed by the graph at every anchor, so it never tested the row):',
223
+ },
224
+ ];
225
+ /** How far one promising tier is from evidence, counted from candidate fields. */
226
+ function readinessOf(api, candidates, verdict) {
227
+ const p = candidates.filter((c) => c.verdict === verdict);
204
228
  const g = p.map((c) => api.describeGrounding(c, c.consequence?.signal));
205
229
  return {
206
- promising: p.length,
230
+ count: p.length,
207
231
  mechanismTested: g.filter((x) => x.mechanismTested).length,
208
232
  dataTested: g.filter((x) => x.dataTested).length,
209
- withoutMagnitudeEvidence: p.filter((c) => !c.magnitudeChecked || c.magnitudeAnchorInvariant === true).length,
233
+ withoutMagnitudeEvidence: p.filter((c) => !api.hasMagnitudeEvidence(c)).length,
210
234
  axisUnresolved: p.filter((c) => !c.axisChecked).length,
211
235
  entailedConsequence: p.filter((c) => c.consequence?.signal === 'entailed').length,
212
236
  };
@@ -234,7 +258,7 @@ async function run(ctx) {
234
258
  }));
235
259
  const result = requireFalsifier && !isDerive
236
260
  ? mapped.filter((c) => !('readiness' in c) ||
237
- c.verdict !== 'promising' ||
261
+ !api.isPromisingTier(c.verdict) ||
238
262
  c.readiness.falsifiers.survived.length > 0)
239
263
  : mapped;
240
264
  const envelope = {
@@ -248,7 +272,10 @@ async function run(ctx) {
248
272
  ...(isDerive
249
273
  ? {}
250
274
  : {
251
- readiness: readinessOf(api, withConsequence),
275
+ readiness: {
276
+ promising: readinessOf(api, withConsequence, 'promising'),
277
+ promisingUnchecked: readinessOf(api, withConsequence, 'promising-unchecked'),
278
+ },
252
279
  adjudicationSummary: summarizeAdjudications(withConsequence),
253
280
  }),
254
281
  };
@@ -269,20 +296,18 @@ async function run(ctx) {
269
296
  return 0;
270
297
  }
271
298
  const by = (v) => withConsequence.filter((r) => r.verdict === v);
272
- // Q1: within PROMISING, spend the physicist's first minute on consequence-
273
- // bearing / magnitude-backed rows before inconclusive + no-magnitude coincidences.
299
+ // Q1: within each PROMISING tier, spend the physicist's first minute on consequence-bearing
300
+ // rows before inconclusive coincidences. The magnitude evidence is the tier itself.
274
301
  const consRank = (s) => s === 'entailed' ? 0 : s === 'novel-consequence' ? 1 : 2;
275
- const promising = [...by('promising')].sort((a, b) => {
302
+ const tierRows = (verdict) => [...by(verdict)].sort((a, b) => {
276
303
  const ca = consRank(a.consequence?.signal);
277
304
  const cb = consRank(b.consequence?.signal);
278
305
  if (ca !== cb)
279
306
  return ca - cb;
280
- const magA = a.magnitudeChecked && a.magnitudeAnchorInvariant !== true ? 0 : 1;
281
- const magB = b.magnitudeChecked && b.magnitudeAnchorInvariant !== true ? 0 : 1;
282
- if (magA !== magB)
283
- return magA - magB;
284
307
  return b.score - a.score || a.a.localeCompare(b.a) || a.b.localeCompare(b.b);
285
308
  });
309
+ const tiers = TIERS.map((t) => ({ ...t, rows: tierRows(t.verdict), readiness: readinessOf(api, withConsequence, t.verdict) }));
310
+ const [promising, unchecked] = tiers;
286
311
  const inert = by('inert');
287
312
  const contra = by('contradictory');
288
313
  const clash = by('magnitude-clash');
@@ -291,69 +316,88 @@ async function run(ctx) {
291
316
  out(` ${groundTruthLine(anchor)}`);
292
317
  out('⚠ a REVIEW SURFACE: `promising` means "worth a physicist\'s minute", not "true".');
293
318
  out(' Each candidate hypothesises an identification a≡b and tests its consequences.\n');
294
- out(` funnel: ${withConsequence.length} candidates → ${promising.length} promising ` +
319
+ // The two tiers are two counts, never one sum (AGENTS law 4).
320
+ out(` funnel: ${withConsequence.length} candidates → ${promising.rows.length} promising ` +
321
+ `· ${unchecked.rows.length} promising, magnitude unchecked ` +
295
322
  `· ${inert.length} inert · ${clash.length} magnitude-clash ` +
296
323
  `· ${contra.length} contradictory (numerically falsified) · ${axisClash.length} axis-clash`);
297
- const rd = readinessOf(api, withConsequence);
298
- out(` readiness of the ${rd.promising} promising: ${rd.mechanismTested} mechanism-tested · ` +
299
- `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +
300
- `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`);
324
+ for (const t of tiers) {
325
+ const rd = t.readiness;
326
+ out(` readiness of the ${rd.count} ${t.label}: ${rd.mechanismTested} mechanism-tested · ` +
327
+ `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +
328
+ `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`);
329
+ }
301
330
  out(' promising ≠ evidence: promotion to a bridge needs a mechanism and a falsifiable prediction.\n');
302
331
  const requireFalsifier = args.flags.has('require-falsifier');
303
332
  const untested = (r) => api.describeReadiness(r, r.consequence?.signal).falsifiers.survived.length === 0;
304
333
  if (requireFalsifier) {
305
- out(` --require-falsifier: ${promising.filter(untested).length} of the ${promising.length} promising hidden — ` +
306
- 'no independent falsifier ran and survived (connectivity alone is not evidence)\n');
334
+ out(` --require-falsifier: ` +
335
+ tiers.map((t) => `${t.rows.filter(untested).length} of the ${t.rows.length} ${t.label}`).join(' and ') +
336
+ ' hidden — no independent falsifier ran and survived (connectivity alone is not evidence)\n');
307
337
  const encoded = encodedFalsifiers(api);
308
338
  out(` encoded falsifiers already on the records (${encoded.length}; these are not discovery rows):`);
309
339
  for (const line of encoded)
310
340
  out(` ${line}`);
311
341
  out('');
312
342
  }
313
- if (promising.length) {
314
- out(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');
315
- for (const r of promising) {
343
+ const printRow = (r) => {
344
+ out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);
345
+ out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);
346
+ if (r.consequence) {
347
+ out(` [consequence: ${r.consequence.signal}]`);
348
+ }
349
+ const g = api.describeGrounding(r, r.consequence?.signal);
350
+ out(` [grounding — passed: ${g.passed.join(', ') || '—'}` +
351
+ ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`);
352
+ const rd = api.describeReadiness(r, r.consequence?.signal);
353
+ const f = rd.falsifiers;
354
+ out(` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +
355
+ `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +
356
+ `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +
357
+ ' · mechanism: none · data: none]');
358
+ const needs = [
359
+ ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),
360
+ ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),
361
+ ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),
362
+ ];
363
+ out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);
364
+ out(` [observation: ${rd.observation}]`);
365
+ if (r.adjudication) {
366
+ out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);
367
+ }
368
+ };
369
+ for (const t of tiers) {
370
+ if (t !== promising)
371
+ out('');
372
+ if (t.rows.length === 0) {
373
+ out(t === promising
374
+ ? ' no candidate is `promising` (with magnitude evidence) from the anchor above.'
375
+ : ' no candidate is `promising, magnitude unchecked` from the anchor above.');
376
+ continue;
377
+ }
378
+ out(` ${t.heading}`);
379
+ for (const r of t.rows) {
316
380
  if (r.adjudication && foldsOut(r.adjudication.verdict) && !showAdjudicated)
317
381
  continue;
318
382
  if (requireFalsifier && untested(r))
319
383
  continue;
320
- out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);
321
- out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);
322
- if (r.consequence) {
323
- out(` [consequence: ${r.consequence.signal}]`);
324
- }
325
- const g = api.describeGrounding(r, r.consequence?.signal);
326
- out(` [grounding — passed: ${g.passed.join(', ') || '—'}` +
327
- ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`);
328
- const rd = api.describeReadiness(r, r.consequence?.signal);
329
- const f = rd.falsifiers;
330
- out(` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +
331
- `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +
332
- `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +
333
- ' · mechanism: none · data: none]');
334
- const needs = [
335
- ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),
336
- ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),
337
- ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),
338
- ];
339
- out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);
340
- out(` [observation: ${rd.observation}]`);
341
- if (r.adjudication) {
342
- out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);
343
- }
384
+ printRow(r);
344
385
  }
345
- if (promising.some((r) => r.adjudication)) {
346
- out(adjudicationSummaryLine(promising, promising.length));
386
+ if (t.rows.some((r) => r.adjudication)) {
387
+ out(adjudicationSummaryLine(t.rows, t.rows.length, t.label));
347
388
  }
348
389
  }
349
- else {
350
- out(' no candidate is `promising` from the anchor above.');
351
- }
352
390
  if (clash.length) {
353
391
  out(`\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier; p is the falsifier's strength ` +
354
392
  `at the values' stated σ, 2Φ(−orders/√(σa²+σb²)), not a credibility score):`);
355
393
  for (const r of clash) {
356
- const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';
394
+ // Where each magnitude came from when it was not the sourced table: the quantity's own
395
+ // equation (not anchor-derived), or the anchor.
396
+ const bases = [
397
+ ...((r.magnitudeDerived ?? []).length > 0 ? [`${r.magnitudeDerived.join(', ')} from its own equation`] : []),
398
+ ...(r.magnitudeUsedAnchor ? ['anchor-derived'] : []),
399
+ ];
400
+ const basis = bases.length > 0 ? ` (${bases.join('; ')})` : '';
357
401
  // A p that underflows a double is not zero: it is below the smallest normal double.
358
402
  const p = r.magnitudeP;
359
403
  const strength = p === undefined || p === null ? '' : p === 0 ? ', p < 1e-300' : `, p = ${api.formatQuantity(p, 3)}`;
@@ -380,7 +424,8 @@ async function run(ctx) {
380
424
  out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ${r.axisClashes.join('; ')}`);
381
425
  }
382
426
  }
383
- out('\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');
427
+ out('\n (magnitude gate abstains where a representative value is unknown, and such a row is at most ' +
428
+ "'promising, magnitude unchecked'; weak priors on dimension.)");
384
429
  out(` (inspect one candidate: upt ground --source=${source} <a> <b>, with the same --anchor/--max-orders)`);
385
430
  return 0;
386
431
  }
@@ -389,7 +434,7 @@ export const command = {
389
434
  aliases: ['discovery'],
390
435
  flags: FLAGS,
391
436
  help: commandHelp(HELP, FLAGS),
392
- summary: 'Vet quantity identifications and rank them promising, inert, or contradictory.',
437
+ summary: 'Vet quantity identifications and rank them promising (two tiers: magnitude checked or unchecked), inert, or contradictory.',
393
438
  example: 'upt discover --source=canonical',
394
439
  group: 'discovery',
395
440
  run,
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `upt discover` — vet the link candidates through the inference suite, and\n * (with `--derive`) emit the algebraic identity-consequence proposals.\n * Transposed verbatim from bin/upt.mjs's `parseDiscoveryOpts()`/`discoverCmd()`/\n * `deriveCmd()` (lines 592-713), plus `--json`. `parseDiscoveryOpts` itself\n * moved to `_discovery-opts.ts` so `map`'s `--proposed` overlay can share it.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport type { VettedCandidate } from '../../composition/discovery.js';\nimport type { AnnotatedCandidate } from '../../composition/adjudication.js';\nimport type { AdjudicationVerdict } from '../../bridges/catalog-types.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\nimport { adjudicationSourceUrls } from '../published-url.js';\nimport type { ConsequenceSignal, ConsequenceEvidence } from '../../composition/consequence.js';\n\n/** `annotated` (adjudication layer) composed with the consequence layer —\n * both are `VettedCandidate & {...}` intersections, so a candidate carries\n * both `adjudication?` and `consequence?` after composition. */\ntype FullyAnnotatedCandidate = AnnotatedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. canonical excludes bridges.'),\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--derive',\n valueStyle: 'none',\n description: 'For each promising identification, print the one algebraic relation it implies. That relation is not a bridge.',\n },\n {\n name: '--show-adjudicated',\n valueStyle: 'none',\n description: 'List candidates a physicist has already adjudicated, with the recorded verdict.',\n },\n {\n name: '--require-falsifier',\n valueStyle: 'none',\n description: 'Hide promising rows that no independent falsifier ran on and survived.',\n },\n JSON_FLAG,\n];\n\nconst ADJUDICATION_URLS = adjudicationSourceUrls().join('\\n ');\n\nconst HELP = `upt discover [--source=catalog|canonical|both]\n VET the link candidates through the inference suite: hypothesise\n each identification a≡b and test whether it merges disconnected\n physics, unlocks quantities, and stays numerically consistent.\n Ranks promising / inert / contradictory.\n --source=canonical runs the funnel on the standard-physics L-layer\n ALONE (bridges excluded) — new candidates from established physics,\n and a self-consistency check (expect 0 contradictory).\n --derive emits, for each 'promising' identification, the ONE algebraic\n relation it implies (monomial elimination) as an UNADJUDICATED, math-only\n proposal — NOT a bridge (Part-VI §XXVII-B). Pairs with --source=canonical.\n --max-orders=N tunes the magnitude-clash threshold (default ${DISCOVER_MAX_ORDERS_DEFAULT}); looser N\n keeps more candidates 'promising', tighter N falsifies more as clashes.\n --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)\n for the consistency/closure check. Both reshape the candidate pool that\n --derive consumes. T, temperature, temp, and T_K on an anchor are\n kelvin: an energy is k_B T, and any other dimension is an error.\n Candidates a physicist has already adjudicated\n (${ADJUDICATION_URLS})\n fold out of the PROMISING list by default (decoy/entailed verdicts only —\n review memory, not a re-litigation prompt); --show-adjudicated lists them\n again with their recorded verdict.\n Each PROMISING row states its readiness dimension by dimension —\n structure, kind, which independent falsifiers (magnitude, axis,\n consequence) ran and survived or abstained — and what would make it\n testable: the identity premise, the missing magnitudes and regimes,\n and the observation that would test it. An abstention is a missing\n test, never a pass. --require-falsifier hides promising rows that no\n independent falsifier ran on and survived, counts them, and lists the\n encoded bridges that already carry a falsifier (a confrontation, a\n counterexample, or a regime inequality).`;\n\nconst EPISTEMICS =\n '⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".\\n' +\n ' Each candidate hypothesises an identification a≡b and tests its consequences.';\n\nconst DERIVE_EPISTEMICS =\n '⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new\\n' +\n ' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs\\n' +\n ' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.';\n\n// ── discover --derive (identity-consequence proposals) ────────────────────\n\n/**\n * Sample values for GENERIC quantities, which the representative-value table\n * leaves out on purpose. A proposal is evaluated only when every free input\n * has a sourced sample: this command once put 300 into every input, a Hubble\n * rate of 300 s⁻¹ among them (persona finding D5).\n */\nconst GENERIC_SAMPLES: Readonly<Record<string, { value: number; source: string }>> = {\n temperature: { value: 300, source: 'room temperature, 300 K' },\n};\nfunction deriveReport(\n api: CommandCtx['api'],\n ranked: readonly VettedCandidate[],\n label: string,\n anchorLine: string,\n out: (line?: string) => void\n): void {\n const proposals = api.deriveProposedBridges(ranked);\n out(`\\nDerived identity-consequence PROPOSALS — UNADJUDICATED, math-only [source: ${label}]`);\n out(` ${anchorLine}`);\n out(DERIVE_EPISTEMICS + '\\n');\n if (!proposals.length) {\n out(' no admissible proposal (need two fully-quantitative, monomial canonical targets).');\n return;\n }\n for (const p of proposals) {\n let approx = '';\n const governing = p.governing || [];\n const sampleOf = (name: string) => api.REPRESENTATIVE_VALUES[name] ?? GENERIC_SAMPLES[name];\n const missing = governing.filter((g) => sampleOf(g.name) === undefined).map((g) => g.name);\n if (missing.length > 0) {\n approx = ` (no sourced sample value for ${missing.join(', ')}; not evaluated)`;\n } else {\n try {\n const vals = Object.fromEntries(governing.map((g) => [g.name, sampleOf(g.name)!.value]));\n const at = governing\n .map((g) => `${g.name}=${sampleOf(g.name)!.value} [${sampleOf(g.name)!.source}]`)\n .join(', ');\n approx = ` ≈ ${api.formatQuantity(p.evaluate(vals))}${at ? ` (${at})` : ''}`;\n } catch (e) {\n // A proposal that cannot be evaluated at its samples says so and why; it is not shown as\n // though it had no sample. Only an `Error` is a refusal of the formula: anything else is a defect.\n if (!(e instanceof Error)) throw e;\n approx = ` (not evaluated at the sample values: ${e.message})`;\n }\n }\n out(` ${p.id}`);\n out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);\n out(\n ` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +\n ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`\n );\n if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {\n out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);\n }\n const c = api.describeDerivedClaim(p);\n out(\n c.relation === 'known-law'\n ? ` status: known law — re-derives ${c.canonicalMatch.id}; the identification ${c.premise} is still unadjudicated`\n : ` status: conditional identity — holds only if ${c.premise} (unadjudicated); untested`,\n );\n out(` meaning: ${c.symbol.meaning}`);\n out(\n ` assumptions carried: ${c.assumptions.map((a) => `${a.equation}: ${a.assumptions.join(', ') || 'none stated'}`).join('; ')}`,\n );\n const governingSet = `{${p.governing.map((g) => g.name).join(', ')}}`;\n out(\n ` canonical match: ${c.canonicalMatch.id ?? 'none'} — ${c.canonicalMatch.sameTarget} registry equation(s) target ` +\n `${p.target.name}, ${c.canonicalMatch.sameTargetAndGoverning} with governing ${governingSet}; ` +\n 'scope: this registry only, not physics at large',\n );\n }\n out('');\n}\n\n/** Verdicts that fold a candidate out of the printed PROMISING list by\n * default — review memory, not news. `deferred`/`genuine` stay listed\n * (see the module-level docstring on `AdjudicationVerdict`). */\nfunction foldsOut(verdict: AdjudicationVerdict): boolean {\n return verdict === 'decoy' || verdict === 'entailed';\n}\n\n/** Tally an annotated candidate set's recorded verdicts, for `--json`'s\n * `adjudicationSummary` (over ALL candidates, every funnel bucket). */\nfunction summarizeAdjudications(\n candidates: readonly AnnotatedCandidate[]\n): { total: number; genuine: number; decoy: number; entailed: number; deferred: number } {\n const summary = { total: 0, genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n for (const c of candidates) {\n if (!c.adjudication) continue;\n summary.total++;\n summary[c.adjudication.verdict]++;\n }\n return summary;\n}\n\n/** The reconciling line printed under PROMISING when some of it carries a\n * recorded verdict — so the folded/shorter list never looks inconsistent\n * against the funnel line's raw promising count. */\nfunction adjudicationSummaryLine(promising: readonly AnnotatedCandidate[], promisingCount: number): string {\n const adjudicated = promising.filter((r) => r.adjudication);\n const counts = { genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n let folded = 0;\n for (const r of adjudicated) {\n const v = r.adjudication!.verdict;\n counts[v]++;\n if (foldsOut(v)) folded++;\n }\n const parts = (['decoy', 'entailed', 'deferred', 'genuine'] as const)\n .filter((v) => counts[v] > 0)\n .map((v) => `${counts[v]} ${v}`);\n const total = adjudicated.length;\n const verb = total === 1 ? 'carries' : 'carry';\n const noun = total === 1 ? 'a recorded verdict' : 'recorded verdicts';\n const foldNote = folded === total ? '— folded' : folded === 0 ? '— shown below' : `— ${folded} folded`;\n return ` adjudicated: ${total} of the ${promisingCount} promising ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;\n}\n\ninterface Readiness {\n promising: number;\n mechanismTested: number;\n dataTested: number;\n withoutMagnitudeEvidence: number;\n axisUnresolved: number;\n entailedConsequence: number;\n}\n\n/** Encoded bridges that already carry a falsifier. Not discovery rows. */\nfunction encodedFalsifiers(api: CommandCtx['api']): readonly string[] {\n const lines: string[] = [];\n for (const id of [...api.CONFRONTATIONS.keys()].sort((a, b) => a - b)) {\n lines.push(`be-${id} (confrontation)`);\n }\n for (const f of api.ATLAS_FAMILIES) {\n for (const b of f.bridges) {\n const cx = b.counterexamples.length;\n const ineq = b.regime.inequalities.length;\n if (cx === 0 && ineq === 0) continue;\n const bits = [\n cx > 0 ? `${cx} counterexample${cx === 1 ? '' : 's'}` : '',\n ineq > 0 ? `${ineq} regime inequalit${ineq === 1 ? 'y' : 'ies'}` : '',\n ].filter((s) => s !== '');\n lines.push(`${b.id} (${bits.join(', ')})`);\n }\n }\n return lines;\n}\n\n/** How far the `promising` set is from evidence, counted from candidate fields. */\nfunction readinessOf(api: CommandCtx['api'], candidates: readonly FullyAnnotatedCandidate[]): Readiness {\n const p = candidates.filter((c) => c.verdict === 'promising');\n const g = p.map((c) => api.describeGrounding(c, c.consequence?.signal));\n return {\n promising: p.length,\n mechanismTested: g.filter((x) => x.mechanismTested).length,\n dataTested: g.filter((x) => x.dataTested).length,\n withoutMagnitudeEvidence: p.filter((c) => !c.magnitudeChecked || c.magnitudeAnchorInvariant === true).length,\n axisUnresolved: p.filter((c) => !c.axisChecked).length,\n entailedConsequence: p.filter((c) => c.consequence?.signal === 'entailed').length,\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const anchor = groundTruthAnchor(api, opts);\n const ranked = api.rankDiscoveries(graph, opts);\n const isDerive = args.flags.has('derive');\n const annotated = isDerive ? ([] as AnnotatedCandidate[]) : api.annotateAdjudications(ranked);\n const withConsequence: readonly FullyAnnotatedCandidate[] = isDerive\n ? []\n : api.annotateConsequences(annotated);\n const showAdjudicated = args.flags.has('show-adjudicated');\n\n if (args.flags.has('json')) {\n const requireFalsifier = args.flags.has('require-falsifier');\n const mapped = isDerive\n ? api.deriveProposedBridges(ranked).map((p) => ({ ...p, claim: api.describeDerivedClaim(p) }))\n : withConsequence.map((c) => ({\n ...c,\n grounding: api.describeGrounding(c, c.consequence?.signal),\n readiness: api.describeReadiness(c, c.consequence?.signal),\n }));\n const result =\n requireFalsifier && !isDerive\n ? mapped.filter(\n (c) =>\n !('readiness' in c) ||\n c.verdict !== 'promising' ||\n c.readiness.falsifiers.survived.length > 0,\n )\n : mapped;\n const envelope = {\n command: 'discover',\n source,\n anchor: { groundTruth: anchor },\n options: { ...opts },\n epistemics: isDerive ? DERIVE_EPISTEMICS : EPISTEMICS,\n result,\n ...(requireFalsifier && !isDerive ? { encodedFalsifiers: encodedFalsifiers(api) } : {}),\n ...(isDerive\n ? {}\n : {\n readiness: readinessOf(api, withConsequence),\n adjudicationSummary: summarizeAdjudications(withConsequence),\n }),\n };\n emitJson(envelope, ctx.write);\n return 0;\n }\n\n if (Object.keys(opts).length) {\n const bits: string[] = [];\n if (opts.maxOrdersOfMagnitude !== undefined) bits.push(`max-orders=${opts.maxOrdersOfMagnitude}`);\n if (opts.groundTruth) {\n bits.push(`anchor={${Object.entries(opts.groundTruth).map(([k, v]) => `${k}=${v}`).join(', ')}}`);\n }\n out(` [discovery options: ${bits.join('; ')}]`);\n }\n\n if (isDerive) {\n deriveReport(api, ranked, label, groundTruthLine(anchor), out);\n return 0;\n }\n\n const by = (v: string) => withConsequence.filter((r) => r.verdict === v);\n // Q1: within PROMISING, spend the physicist's first minute on consequence-\n // bearing / magnitude-backed rows before inconclusive + no-magnitude coincidences.\n const consRank = (s: ConsequenceSignal | undefined): number =>\n s === 'entailed' ? 0 : s === 'novel-consequence' ? 1 : 2;\n const promising = [...by('promising')].sort((a, b) => {\n const ca = consRank(a.consequence?.signal);\n const cb = consRank(b.consequence?.signal);\n if (ca !== cb) return ca - cb;\n const magA = a.magnitudeChecked && a.magnitudeAnchorInvariant !== true ? 0 : 1;\n const magB = b.magnitudeChecked && b.magnitudeAnchorInvariant !== true ? 0 : 1;\n if (magA !== magB) return magA - magB;\n return b.score - a.score || a.a.localeCompare(b.a) || a.b.localeCompare(b.b);\n });\n const inert = by('inert');\n const contra = by('contradictory');\n const clash = by('magnitude-clash');\n const axisClash = by('axis-clash');\n out(`\\nDiscovery — link candidates VETTED through the inference suite [source: ${label}]`);\n out(` ${groundTruthLine(anchor)}`);\n out('⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".');\n out(' Each candidate hypothesises an identification a≡b and tests its consequences.\\n');\n out(\n ` funnel: ${withConsequence.length} candidates → ${promising.length} promising ` +\n `· ${inert.length} inert · ${clash.length} magnitude-clash ` +\n `· ${contra.length} contradictory (numerically falsified) · ${axisClash.length} axis-clash`\n );\n const rd = readinessOf(api, withConsequence);\n out(\n ` readiness of the ${rd.promising} promising: ${rd.mechanismTested} mechanism-tested · ` +\n `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +\n `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`,\n );\n out(' promising ≠ evidence: promotion to a bridge needs a mechanism and a falsifiable prediction.\\n');\n const requireFalsifier = args.flags.has('require-falsifier');\n const untested = (r: FullyAnnotatedCandidate) =>\n api.describeReadiness(r, r.consequence?.signal).falsifiers.survived.length === 0;\n if (requireFalsifier) {\n out(\n ` --require-falsifier: ${promising.filter(untested).length} of the ${promising.length} promising hidden — ` +\n 'no independent falsifier ran and survived (connectivity alone is not evidence)\\n',\n );\n const encoded = encodedFalsifiers(api);\n out(` encoded falsifiers already on the records (${encoded.length}; these are not discovery rows):`);\n for (const line of encoded) out(` ${line}`);\n out('');\n }\n if (promising.length) {\n out(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');\n for (const r of promising) {\n if (r.adjudication && foldsOut(r.adjudication.verdict) && !showAdjudicated) continue;\n if (requireFalsifier && untested(r)) continue;\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);\n out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);\n if (r.consequence) {\n out(` [consequence: ${r.consequence.signal}]`);\n }\n const g = api.describeGrounding(r, r.consequence?.signal);\n out(\n ` [grounding — passed: ${g.passed.join(', ') || '—'}` +\n ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`,\n );\n const rd = api.describeReadiness(r, r.consequence?.signal);\n const f = rd.falsifiers;\n out(\n ` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +\n `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +\n `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +\n ' · mechanism: none · data: none]',\n );\n const needs = [\n ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),\n ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),\n ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),\n ];\n out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);\n out(` [observation: ${rd.observation}]`);\n if (r.adjudication) {\n out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);\n }\n }\n if (promising.some((r) => r.adjudication)) {\n out(adjudicationSummaryLine(promising, promising.length));\n }\n } else {\n out(' no candidate is `promising` from the anchor above.');\n }\n if (clash.length) {\n out(\n `\\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier; p is the falsifier's strength ` +\n `at the values' stated σ, 2Φ(−orders/√(σa²+σb²)), not a credibility score):`,\n );\n for (const r of clash) {\n const basis = r.magnitudeUsedAnchor ? ' (anchor-derived)' : '';\n // A p that underflows a double is not zero: it is below the smallest normal double.\n const p = r.magnitudeP;\n const strength =\n p === undefined || p === null ? '' : p === 0 ? ', p < 1e-300' : `, p = ${api.formatQuantity(p, 3)}`;\n // A magnitude estimate is a statistic: three digits, marked approximate.\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart!, 3)} orders apart${strength}${basis}`);\n }\n }\n const subsumed = inert.filter((r) => r.subsuming);\n if (subsumed.length) {\n out(`\\n SUBSUMING (generic ≟ specialization — tautological, barred from promising):`);\n for (const r of subsumed) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}]`);\n }\n }\n if (contra.length) {\n out(`\\n CONTRADICTORY (the identification falsifies itself numerically):`);\n for (const r of contra) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);\n }\n }\n if (axisClash.length) {\n out(`\\n AXIS-CLASH (stated scale/force labels differ: a regime-label prior, not a physical test):`);\n for (const r of axisClash) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ${r.axisClashes.join('; ')}`);\n }\n }\n out('\\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');\n out(` (inspect one candidate: upt ground --source=${source} <a> <b>, with the same --anchor/--max-orders)`);\n return 0;\n}\n\nexport const command: Command = {\n name: 'discover',\n aliases: ['discovery'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Vet quantity identifications and rank them promising, inert, or contradictory.',\n example: 'upt discover --source=canonical',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/cli/commands/discover.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAa7D,MAAM,KAAK,GAAe;IACxB,UAAU,CAAC,SAAS,EAAE,+EAA+E,CAAC;IACtG;QACE,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,uEAAuE;QACpF,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,gDAAgD;QAC7D,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,MAAM;QAClB,WAAW,EACT,yLAAyL;KAC5L;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,wGAAwG;KACtH;IACD,SAAS;CACV,CAAC;AAEF,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEtE,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;sEAsByD,2BAA2B;;;;;;;WAOtF,iBAAiB;;;;;;;;;;;;kEAYsC,CAAC;AAEnE,MAAM,UAAU,GACd,oFAAoF;IACpF,mFAAmF;IACnF,oGAAoG,CAAC;AAEvG,MAAM,iBAAiB,GACrB,sFAAsF;IACtF,sFAAsF;IACtF,gGAAgG,CAAC;AAEnG,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,eAAe,GAAgE;IACnF,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,yBAAyB,EAAE;CAC/D,CAAC;AACF,SAAS,YAAY,CACnB,GAAsB,EACtB,MAAkC,EAClC,KAAa,EACb,UAAkB,EAClB,GAA4B;IAE5B,MAAM,SAAS,GAAG,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,GAAG,CAAC,iFAAiF,KAAK,GAAG,CAAC,CAAC;IAC/F,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;IACvB,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,qFAAqF,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,kCAAkC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,EAAE,GAAG,SAAS;qBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,MAAM,GAAG,CAAC;qBAChF,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,GAAG,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yFAAyF;gBACzF,mGAAmG;gBACnG,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;oBAAE,MAAM,CAAC,CAAC;gBACnC,MAAM,GAAG,0CAA0C,CAAC,CAAC,OAAO,GAAG,CAAC;YAClE,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjB,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,SAAS,CAAC,CAAC,oBAAoB,GAAG,MAAM,EAAE,CAAC,CAAC;QACvE,GAAG,CACD,eAAe,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE;YACjF,MAAM,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAC7H,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACpD,GAAG,CAAC,+HAA+H,CAAC,CAAC;QACvI,CAAC;QACD,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACtD,GAAG,CAAC,8BAA8B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACtC,GAAG,CACD,CAAC,CAAC,QAAQ,KAAK,WAAW;YACxB,CAAC,CAAC,wCAAwC,CAAC,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAAC,CAAC,OAAO,yBAAyB;YACvH,CAAC,CAAC,sDAAsD,CAAC,CAAC,OAAO,4BAA4B,CAChG,CAAC;QACF,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,GAAG,CACD,8BAA8B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnI,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACtE,GAAG,CACD,0BAA0B,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,MAAM,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,+BAA+B;YACrH,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,cAAc,CAAC,sBAAsB,mBAAmB,YAAY,IAAI;YAC/F,iDAAiD,CACpD,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAC;AACV,CAAC;AAED;;iEAEiE;AACjE,SAAS,QAAQ,CAAC,OAA4B;IAC5C,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,UAAU,CAAC;AACvD,CAAC;AAED;wEACwE;AACxE,SAAS,sBAAsB,CAC7B,UAAyC;IAEzC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,SAAS;QAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;qDAEqD;AACrD,SAAS,uBAAuB,CAAC,SAAwC,EAAE,cAAsB,EAAE,SAAiB;IAClH,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAa,CAAC,OAAO,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACZ,IAAI,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,GAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAW;SAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,SAAS,CAAC;IACvG,OAAO,kBAAkB,KAAK,WAAW,cAAc,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,8BAA8B,CAAC;AACvJ,CAAC;AAYD,0EAA0E;AAC1E,SAAS,iBAAiB,CAAC,GAAsB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YAC1C,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;gBAAE,SAAS;YACrC,MAAM,IAAI,GAAG;gBACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC1D,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,oBAAoB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;aACtE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,MAAM,KAAK,GAAG;IACZ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,8HAA8H,EAAE;IACrL;QACE,OAAO,EAAE,qBAAqB;QAC9B,KAAK,EAAE,gCAAgC;QACvC,OAAO,EACL,uKAAuK;KAC1K;CACoG,CAAC;AAExG,kFAAkF;AAClF,SAAS,WAAW,CAClB,GAAsB,EACtB,UAA8C,EAC9C,OAAmC;IAEnC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,MAAM;QACf,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM;QAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM;QAChD,wBAAwB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QAC9E,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;QACtD,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;KAClF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAe;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAE,EAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAuC,QAAQ;QAClE,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAE3D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9F,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1B,GAAG,CAAC;gBACJ,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC1D,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC;aAC3D,CAAC,CAAC,CAAC;QACR,MAAM,MAAM,GACV,gBAAgB,IAAI,CAAC,QAAQ;YAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CACX,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;gBACnB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC/B,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAC7C;YACH,CAAC,CAAC,MAAM,CAAC;QACb,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,UAAU;YACnB,MAAM;YACN,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;YAC/B,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE;YACpB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU;YACrD,MAAM;YACN,GAAG,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,GAAG,CAAC,QAAQ;gBACV,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,SAAS,EAAE;wBACT,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,CAAC;wBACzD,kBAAkB,EAAE,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,qBAAqB,CAAC;qBAC7E;oBACD,mBAAmB,EAAE,sBAAsB,CAAC,eAAe,CAAC;iBAC7D,CAAC;SACP,CAAC;QACF,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAClG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpG,CAAC;QACD,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;IACzE,4FAA4F;IAC5F,oFAAoF;IACpF,MAAM,QAAQ,GAAG,CAAC,CAAgC,EAAU,EAAE,CAC5D,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,CAAC,OAAmC,EAAE,EAAE,CACvD,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACL,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IACrC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;IACnC,GAAG,CAAC,8EAA8E,KAAK,GAAG,CAAC,CAAC;IAC5F,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IACxF,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACzF,8DAA8D;IAC9D,GAAG,CACD,cAAc,eAAe,CAAC,MAAM,mBAAmB,SAAU,CAAC,IAAI,CAAC,MAAM,cAAc;QACzF,MAAM,SAAU,CAAC,IAAI,CAAC,MAAM,mCAAmC;QAC/D,MAAM,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,oBAAoB;QAChE,MAAM,MAAM,CAAC,MAAM,8CAA8C,SAAS,CAAC,MAAM,aAAa,CACjG,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;QACvB,GAAG,CACD,sBAAsB,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,eAAe,sBAAsB;YACpF,GAAG,EAAE,CAAC,UAAU,kBAAkB,EAAE,CAAC,wBAAwB,gCAAgC;YAC7F,GAAG,EAAE,CAAC,cAAc,2BAA2B,EAAE,CAAC,mBAAmB,+BAA+B,CACvG,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,iGAAiG,CAAC,CAAC;IACvG,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,CAA0B,EAAE,EAAE,CAC9C,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACnF,IAAI,gBAAgB,EAAE,CAAC;QACrB,GAAG,CACD,yBAAyB;YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACtG,4FAA4F,CAC/F,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvC,GAAG,CAAC,gDAAgD,OAAO,CAAC,MAAM,kCAAkC,CAAC,CAAC;QACtG,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC/C,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAA0B,EAAQ,EAAE;QACpD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,GAAG,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,GAAG,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,GAAG,CACD,gCAAgC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;YAC1D,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAC5E,CAAC;QACF,MAAM,EAAE,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;QACxB,GAAG,CACD,mCAAmC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,IAAI;YACrG,WAAW,EAAE,CAAC,SAAS,CAAC,OAAO,YAAY,EAAE,CAAC,IAAI,sCAAsC;YACxF,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1G,kCAAkC,CACrC,CAAC;QACF,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yCAAyC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtH,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,CAAC;QACF,GAAG,CAAC,2CAA2C,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3G,GAAG,CAAC,yBAAyB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACnB,GAAG,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,OAAO,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;QACtF,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CACD,CAAC,KAAK,SAAS;gBACb,CAAC,CAAC,gFAAgF;gBAClF,CAAC,CAAC,2EAA2E,CAChF,CAAC;YACF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe;gBAAE,SAAS;YACrF,IAAI,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,CACD,+GAA+G;YAC7G,4EAA4E,CAC/E,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,uFAAuF;YACvF,gDAAgD;YAChD,MAAM,KAAK,GAAG;gBACZ,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,oFAAoF;YACpF,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YACvB,MAAM,QAAQ,GACZ,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtG,yEAAyE;YACzE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,WAAY,EAAE,CAAC,CAAC,gBAAgB,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;QACzH,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,GAAG,CAAC,iFAAiF,CAAC,CAAC;QACvF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,sEAAsE,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,+FAA+F,CAAC,CAAC;QACrG,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,GAAG,CACD,kGAAkG;QAChG,8DAA8D,CACjE,CAAC;IACF,GAAG,CAAC,iDAAiD,MAAM,gDAAgD,CAAC,CAAC;IAC7G,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B,OAAO,EAAE,4HAA4H;IACrI,OAAO,EAAE,iCAAiC;IAC1C,KAAK,EAAE,WAAW;IAClB,GAAG;CACJ,CAAC;AAEF,eAAe,CAAC,OAAO,CAAC,CAAC","sourcesContent":["/**\n * `upt discover` — vet the link candidates through the inference suite, and\n * (with `--derive`) emit the algebraic identity-consequence proposals.\n * Transposed verbatim from bin/upt.mjs's `parseDiscoveryOpts()`/`discoverCmd()`/\n * `deriveCmd()` (lines 592-713), plus `--json`. `parseDiscoveryOpts` itself\n * moved to `_discovery-opts.ts` so `map`'s `--proposed` overlay can share it.\n */\nimport type { FlagSpec } from '../args.js';\nimport { registerCommand, type Command, type CommandCtx } from '../command.js';\nimport { commandHelp, JSON_FLAG, sourceFlag } from '../flag-help.js';\nimport { resolveGraph, groundTruthAnchor, groundTruthLine } from '../graphs.js';\nimport { emitJson } from '../output.js';\nimport { parseDiscoveryOpts } from './_discovery-opts.js';\nimport type { VettedCandidate } from '../../composition/discovery.js';\nimport type { AnnotatedCandidate } from '../../composition/adjudication.js';\nimport type { AdjudicationVerdict } from '../../bridges/catalog-types.js';\nimport { DISCOVER_MAX_ORDERS_DEFAULT } from '../library-defaults.js';\nimport { adjudicationSourceUrls } from '../published-url.js';\nimport type { ConsequenceSignal, ConsequenceEvidence } from '../../composition/consequence.js';\n\n/** `annotated` (adjudication layer) composed with the consequence layer —\n * both are `VettedCandidate & {...}` intersections, so a candidate carries\n * both `adjudication?` and `consequence?` after composition. */\ntype FullyAnnotatedCandidate = AnnotatedCandidate & {\n readonly consequence?: {\n readonly signal: ConsequenceSignal;\n readonly evidence: readonly ConsequenceEvidence[];\n };\n};\n\nconst FLAGS: FlagSpec[] = [\n sourceFlag('catalog', 'Which graph to read: catalog, canonical, or both. canonical excludes bridges.'),\n {\n name: '--max-orders',\n valueStyle: 'attached',\n description: 'Magnitude-clash threshold. A larger value keeps more pairs promising.',\n defaultValue: DISCOVER_MAX_ORDERS_DEFAULT,\n },\n {\n name: '--anchor',\n valueStyle: 'attached',\n repeatable: true,\n description: 'Override a numeric anchor as k=v or k=v,k2=v2.',\n defaultValue: 'mass=M_sun',\n },\n {\n name: '--derive',\n valueStyle: 'none',\n description:\n 'For each promising identification (either tier), print the one algebraic relation it implies, and say when the identification had no magnitude evidence. That relation is not a bridge.',\n },\n {\n name: '--show-adjudicated',\n valueStyle: 'none',\n description: 'List candidates a physicist has already adjudicated, with the recorded verdict.',\n },\n {\n name: '--require-falsifier',\n valueStyle: 'none',\n description: 'Hide promising rows (either tier) that no independent falsifier ran on and survived, counted per tier.',\n },\n JSON_FLAG,\n];\n\nconst ADJUDICATION_URLS = adjudicationSourceUrls().join('\\n ');\n\nconst HELP = `upt discover [--source=catalog|canonical|both]\n VET the link candidates through the inference suite: hypothesise\n each identification a≡b and test whether it merges disconnected\n physics, unlocks quantities, and stays numerically consistent.\n Ranks promising / promising, magnitude unchecked / inert / contradictory.\n A row that merges, unlocks and survives every falsifier that ran is\n 'promising' only when the magnitude falsifier ran on it and could have\n failed (both endpoints have a representative magnitude, and the ratio\n is not fixed by the graph at every anchor); otherwise it is 'promising,\n magnitude unchecked' (promising-unchecked in --json). The two tiers are\n counted and listed apart and never added.\n --source=canonical runs the funnel on the standard-physics L-layer\n ALONE (bridges excluded) — new candidates from established physics,\n and a self-consistency check (expect 0 contradictory).\n --derive emits, for each promising identification of either tier, the ONE\n algebraic relation it implies (monomial elimination) as an UNADJUDICATED,\n math-only proposal — NOT a bridge (Part-VI §XXVII-B), and says when the\n identification had no magnitude evidence. Pairs with --source=canonical.\n A magnitude comes from the sourced table, else a constant the graph\n fixes, else the quantity's own equation evaluated from the table and\n the constants (used only at a propagated σ of at most one decade),\n else the anchor; the MAGNITUDE-CLASH list marks the last two.\n --max-orders=N tunes the magnitude-clash threshold (default ${DISCOVER_MAX_ORDERS_DEFAULT}); looser N\n keeps more candidates 'promising', tighter N falsifies more as clashes.\n --anchor=k=v[,k2=v2] overrides the numeric anchor (default mass=M_sun)\n for the consistency/closure check. Both reshape the candidate pool that\n --derive consumes. T, temperature, temp, and T_K on an anchor are\n kelvin: an energy is k_B T, and any other dimension is an error.\n Candidates a physicist has already adjudicated\n (${ADJUDICATION_URLS})\n fold out of the two PROMISING lists by default (decoy/entailed verdicts only —\n review memory, not a re-litigation prompt); --show-adjudicated lists them\n again with their recorded verdict.\n Each row of either PROMISING list states its readiness dimension by dimension —\n structure, kind, which independent falsifiers (magnitude, axis,\n consequence) ran and survived or abstained — and what would make it\n testable: the identity premise, the missing magnitudes and regimes,\n and the observation that would test it. An abstention is a missing\n test, never a pass. --require-falsifier hides promising rows (either\n tier) that no independent falsifier ran on and survived, counts them per\n tier, and lists the encoded bridges that already carry a falsifier (a\n confrontation, a counterexample, or a regime inequality).`;\n\nconst EPISTEMICS =\n '⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".\\n' +\n ' Each candidate hypothesises an identification a≡b and tests its consequences.\\n' +\n ' `promising-unchecked` is the same structure with no magnitude evidence; the two are never added.';\n\nconst DERIVE_EPISTEMICS =\n '⚠ Each is the ALGEBRAIC CONSEQUENCE of an unadjudicated identification — NOT a new\\n' +\n ' relation and NOT a bridge. No mechanism asserted. Promotion to the catalog needs\\n' +\n ' adversarial + literature review (Part-VI §XXVII-B). The enumerator proposes; humans dispose.';\n\n// ── discover --derive (identity-consequence proposals) ────────────────────\n\n/**\n * Sample values for GENERIC quantities, which the representative-value table\n * leaves out on purpose. A proposal is evaluated only when every free input\n * has a sourced sample: this command once put 300 into every input, a Hubble\n * rate of 300 s⁻¹ among them (persona finding D5).\n */\nconst GENERIC_SAMPLES: Readonly<Record<string, { value: number; source: string }>> = {\n temperature: { value: 300, source: 'room temperature, 300 K' },\n};\nfunction deriveReport(\n api: CommandCtx['api'],\n ranked: readonly VettedCandidate[],\n label: string,\n anchorLine: string,\n out: (line?: string) => void\n): void {\n const proposals = api.deriveProposedBridges(ranked);\n out(`\\nDerived identity-consequence PROPOSALS — UNADJUDICATED, math-only [source: ${label}]`);\n out(` ${anchorLine}`);\n out(DERIVE_EPISTEMICS + '\\n');\n if (!proposals.length) {\n out(' no admissible proposal (need two fully-quantitative, monomial canonical targets).');\n return;\n }\n for (const p of proposals) {\n let approx = '';\n const governing = p.governing || [];\n const sampleOf = (name: string) => api.REPRESENTATIVE_VALUES[name] ?? GENERIC_SAMPLES[name];\n const missing = governing.filter((g) => sampleOf(g.name) === undefined).map((g) => g.name);\n if (missing.length > 0) {\n approx = ` (no sourced sample value for ${missing.join(', ')}; not evaluated)`;\n } else {\n try {\n const vals = Object.fromEntries(governing.map((g) => [g.name, sampleOf(g.name)!.value]));\n const at = governing\n .map((g) => `${g.name}=${sampleOf(g.name)!.value} [${sampleOf(g.name)!.source}]`)\n .join(', ');\n approx = ` ≈ ${api.formatQuantity(p.evaluate(vals))}${at ? ` (${at})` : ''}`;\n } catch (e) {\n // A proposal that cannot be evaluated at its samples says so and why; it is not shown as\n // though it had no sample. Only an `Error` is a refusal of the formula: anything else is a defect.\n if (!(e instanceof Error)) throw e;\n approx = ` (not evaluated at the sample values: ${e.message})`;\n }\n }\n out(` ${p.id}`);\n out(` ${p.formulaLatex} ${p.dimensionalSignature}${approx}`);\n out(\n ` from: ${p.derivedFrom.identification.a} ≟ ${p.derivedFrom.identification.b}` +\n ` (${p.derivedFrom.sourceEquationIds[0]} = ${p.derivedFrom.sourceEquationIds[1]}); solved for ${p.derivedFrom.solvedFor}`\n );\n if (!p.derivedFrom.identification.magnitudeEvidence) {\n out(' magnitude: no evidence — the identification is promising, magnitude unchecked (the magnitude falsifier never tested it)');\n }\n if (p.alsoDerivableFrom && p.alsoDerivableFrom.length) {\n out(` also derivable from: ${p.alsoDerivableFrom.join('; ')}`);\n }\n const c = api.describeDerivedClaim(p);\n out(\n c.relation === 'known-law'\n ? ` status: known law — re-derives ${c.canonicalMatch.id}; the identification ${c.premise} is still unadjudicated`\n : ` status: conditional identity — holds only if ${c.premise} (unadjudicated); untested`,\n );\n out(` meaning: ${c.symbol.meaning}`);\n out(\n ` assumptions carried: ${c.assumptions.map((a) => `${a.equation}: ${a.assumptions.join(', ') || 'none stated'}`).join('; ')}`,\n );\n const governingSet = `{${p.governing.map((g) => g.name).join(', ')}}`;\n out(\n ` canonical match: ${c.canonicalMatch.id ?? 'none'} — ${c.canonicalMatch.sameTarget} registry equation(s) target ` +\n `${p.target.name}, ${c.canonicalMatch.sameTargetAndGoverning} with governing ${governingSet}; ` +\n 'scope: this registry only, not physics at large',\n );\n }\n out('');\n}\n\n/** Verdicts that fold a candidate out of the printed PROMISING list by\n * default — review memory, not news. `deferred`/`genuine` stay listed\n * (see the module-level docstring on `AdjudicationVerdict`). */\nfunction foldsOut(verdict: AdjudicationVerdict): boolean {\n return verdict === 'decoy' || verdict === 'entailed';\n}\n\n/** Tally an annotated candidate set's recorded verdicts, for `--json`'s\n * `adjudicationSummary` (over ALL candidates, every funnel bucket). */\nfunction summarizeAdjudications(\n candidates: readonly AnnotatedCandidate[]\n): { total: number; genuine: number; decoy: number; entailed: number; deferred: number } {\n const summary = { total: 0, genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n for (const c of candidates) {\n if (!c.adjudication) continue;\n summary.total++;\n summary[c.adjudication.verdict]++;\n }\n return summary;\n}\n\n/** The reconciling line printed under PROMISING when some of it carries a\n * recorded verdict — so the folded/shorter list never looks inconsistent\n * against the funnel line's raw promising count. */\nfunction adjudicationSummaryLine(promising: readonly AnnotatedCandidate[], promisingCount: number, tierLabel: string): string {\n const adjudicated = promising.filter((r) => r.adjudication);\n const counts = { genuine: 0, decoy: 0, entailed: 0, deferred: 0 };\n let folded = 0;\n for (const r of adjudicated) {\n const v = r.adjudication!.verdict;\n counts[v]++;\n if (foldsOut(v)) folded++;\n }\n const parts = (['decoy', 'entailed', 'deferred', 'genuine'] as const)\n .filter((v) => counts[v] > 0)\n .map((v) => `${counts[v]} ${v}`);\n const total = adjudicated.length;\n const verb = total === 1 ? 'carries' : 'carry';\n const noun = total === 1 ? 'a recorded verdict' : 'recorded verdicts';\n const foldNote = folded === total ? '— folded' : folded === 0 ? '— shown below' : `— ${folded} folded`;\n return ` adjudicated: ${total} of the ${promisingCount} ${tierLabel} ${verb} ${noun} (${parts.join(', ')}) ${foldNote}; --show-adjudicated to list`;\n}\n\n/** How far one promising tier is from evidence. */\ninterface Readiness {\n count: number;\n mechanismTested: number;\n dataTested: number;\n withoutMagnitudeEvidence: number;\n axisUnresolved: number;\n entailedConsequence: number;\n}\n\n/** Encoded bridges that already carry a falsifier. Not discovery rows. */\nfunction encodedFalsifiers(api: CommandCtx['api']): readonly string[] {\n const lines: string[] = [];\n for (const id of [...api.CONFRONTATIONS.keys()].sort((a, b) => a - b)) {\n lines.push(`be-${id} (confrontation)`);\n }\n for (const f of api.ATLAS_FAMILIES) {\n for (const b of f.bridges) {\n const cx = b.counterexamples.length;\n const ineq = b.regime.inequalities.length;\n if (cx === 0 && ineq === 0) continue;\n const bits = [\n cx > 0 ? `${cx} counterexample${cx === 1 ? '' : 's'}` : '',\n ineq > 0 ? `${ineq} regime inequalit${ineq === 1 ? 'y' : 'ies'}` : '',\n ].filter((s) => s !== '');\n lines.push(`${b.id} (${bits.join(', ')})`);\n }\n }\n return lines;\n}\n\n/** The two promising tiers, in print order, with the label each is printed under. */\nconst TIERS = [\n { verdict: 'promising', label: 'promising', heading: 'PROMISING (merges disconnected physics, unlocks quantities, stays consistent, and the magnitude falsifier ran and survived):' },\n {\n verdict: 'promising-unchecked',\n label: 'promising, magnitude unchecked',\n heading:\n 'PROMISING, MAGNITUDE UNCHECKED (the same structure; the magnitude falsifier abstained or its pass is fixed by the graph at every anchor, so it never tested the row):',\n },\n] as const satisfies readonly { verdict: VettedCandidate['verdict']; label: string; heading: string }[];\n\n/** How far one promising tier is from evidence, counted from candidate fields. */\nfunction readinessOf(\n api: CommandCtx['api'],\n candidates: readonly FullyAnnotatedCandidate[],\n verdict: VettedCandidate['verdict'],\n): Readiness {\n const p = candidates.filter((c) => c.verdict === verdict);\n const g = p.map((c) => api.describeGrounding(c, c.consequence?.signal));\n return {\n count: p.length,\n mechanismTested: g.filter((x) => x.mechanismTested).length,\n dataTested: g.filter((x) => x.dataTested).length,\n withoutMagnitudeEvidence: p.filter((c) => !api.hasMagnitudeEvidence(c)).length,\n axisUnresolved: p.filter((c) => !c.axisChecked).length,\n entailedConsequence: p.filter((c) => c.consequence?.signal === 'entailed').length,\n };\n}\n\nasync function run(ctx: CommandCtx): Promise<number> {\n const { args, api, out } = ctx;\n const { graph, label, source } = resolveGraph(api, args.flags);\n const opts = parseDiscoveryOpts(api, args.flags);\n const anchor = groundTruthAnchor(api, opts);\n const ranked = api.rankDiscoveries(graph, opts);\n const isDerive = args.flags.has('derive');\n const annotated = isDerive ? ([] as AnnotatedCandidate[]) : api.annotateAdjudications(ranked);\n const withConsequence: readonly FullyAnnotatedCandidate[] = isDerive\n ? []\n : api.annotateConsequences(annotated);\n const showAdjudicated = args.flags.has('show-adjudicated');\n\n if (args.flags.has('json')) {\n const requireFalsifier = args.flags.has('require-falsifier');\n const mapped = isDerive\n ? api.deriveProposedBridges(ranked).map((p) => ({ ...p, claim: api.describeDerivedClaim(p) }))\n : withConsequence.map((c) => ({\n ...c,\n grounding: api.describeGrounding(c, c.consequence?.signal),\n readiness: api.describeReadiness(c, c.consequence?.signal),\n }));\n const result =\n requireFalsifier && !isDerive\n ? mapped.filter(\n (c) =>\n !('readiness' in c) ||\n !api.isPromisingTier(c.verdict) ||\n c.readiness.falsifiers.survived.length > 0,\n )\n : mapped;\n const envelope = {\n command: 'discover',\n source,\n anchor: { groundTruth: anchor },\n options: { ...opts },\n epistemics: isDerive ? DERIVE_EPISTEMICS : EPISTEMICS,\n result,\n ...(requireFalsifier && !isDerive ? { encodedFalsifiers: encodedFalsifiers(api) } : {}),\n ...(isDerive\n ? {}\n : {\n readiness: {\n promising: readinessOf(api, withConsequence, 'promising'),\n promisingUnchecked: readinessOf(api, withConsequence, 'promising-unchecked'),\n },\n adjudicationSummary: summarizeAdjudications(withConsequence),\n }),\n };\n emitJson(envelope, ctx.write);\n return 0;\n }\n\n if (Object.keys(opts).length) {\n const bits: string[] = [];\n if (opts.maxOrdersOfMagnitude !== undefined) bits.push(`max-orders=${opts.maxOrdersOfMagnitude}`);\n if (opts.groundTruth) {\n bits.push(`anchor={${Object.entries(opts.groundTruth).map(([k, v]) => `${k}=${v}`).join(', ')}}`);\n }\n out(` [discovery options: ${bits.join('; ')}]`);\n }\n\n if (isDerive) {\n deriveReport(api, ranked, label, groundTruthLine(anchor), out);\n return 0;\n }\n\n const by = (v: string) => withConsequence.filter((r) => r.verdict === v);\n // Q1: within each PROMISING tier, spend the physicist's first minute on consequence-bearing\n // rows before inconclusive coincidences. The magnitude evidence is the tier itself.\n const consRank = (s: ConsequenceSignal | undefined): number =>\n s === 'entailed' ? 0 : s === 'novel-consequence' ? 1 : 2;\n const tierRows = (verdict: VettedCandidate['verdict']) =>\n [...by(verdict)].sort((a, b) => {\n const ca = consRank(a.consequence?.signal);\n const cb = consRank(b.consequence?.signal);\n if (ca !== cb) return ca - cb;\n return b.score - a.score || a.a.localeCompare(b.a) || a.b.localeCompare(b.b);\n });\n const tiers = TIERS.map((t) => ({ ...t, rows: tierRows(t.verdict), readiness: readinessOf(api, withConsequence, t.verdict) }));\n const [promising, unchecked] = tiers;\n const inert = by('inert');\n const contra = by('contradictory');\n const clash = by('magnitude-clash');\n const axisClash = by('axis-clash');\n out(`\\nDiscovery — link candidates VETTED through the inference suite [source: ${label}]`);\n out(` ${groundTruthLine(anchor)}`);\n out('⚠ a REVIEW SURFACE: `promising` means \"worth a physicist\\'s minute\", not \"true\".');\n out(' Each candidate hypothesises an identification a≡b and tests its consequences.\\n');\n // The two tiers are two counts, never one sum (AGENTS law 4).\n out(\n ` funnel: ${withConsequence.length} candidates → ${promising!.rows.length} promising ` +\n `· ${unchecked!.rows.length} promising, magnitude unchecked ` +\n `· ${inert.length} inert · ${clash.length} magnitude-clash ` +\n `· ${contra.length} contradictory (numerically falsified) · ${axisClash.length} axis-clash`\n );\n for (const t of tiers) {\n const rd = t.readiness;\n out(\n ` readiness of the ${rd.count} ${t.label}: ${rd.mechanismTested} mechanism-tested · ` +\n `${rd.dataTested} data-tested · ${rd.withoutMagnitudeEvidence} without magnitude evidence · ` +\n `${rd.axisUnresolved} with axis unresolved · ${rd.entailedConsequence} with an entailed consequence`,\n );\n }\n out(' promising ≠ evidence: promotion to a bridge needs a mechanism and a falsifiable prediction.\\n');\n const requireFalsifier = args.flags.has('require-falsifier');\n const untested = (r: FullyAnnotatedCandidate) =>\n api.describeReadiness(r, r.consequence?.signal).falsifiers.survived.length === 0;\n if (requireFalsifier) {\n out(\n ` --require-falsifier: ` +\n tiers.map((t) => `${t.rows.filter(untested).length} of the ${t.rows.length} ${t.label}`).join(' and ') +\n ' hidden — no independent falsifier ran and survived (connectivity alone is not evidence)\\n',\n );\n const encoded = encodedFalsifiers(api);\n out(` encoded falsifiers already on the records (${encoded.length}; these are not discovery rows):`);\n for (const line of encoded) out(` ${line}`);\n out('');\n }\n const printRow = (r: FullyAnnotatedCandidate): void => {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}] score ${r.score}`);\n out(` unlocks: ${r.unlocksFromAnchor.join(', ') || '—'}`);\n if (r.consequence) {\n out(` [consequence: ${r.consequence.signal}]`);\n }\n const g = api.describeGrounding(r, r.consequence?.signal);\n out(\n ` [grounding — passed: ${g.passed.join(', ') || '—'}` +\n ` · gaps: ${g.gaps.join(', ') || '—'} · ceiling: no mechanism/data test]`,\n );\n const rd = api.describeReadiness(r, r.consequence?.signal);\n const f = rd.falsifiers;\n out(\n ` [readiness — structure: ${rd.structure.mergesComponents ? 'merges components' : 'no merge'}, ` +\n `unlocks ${rd.structure.unlocks} · kind: ${rd.kind} · independent falsifiers survived: ` +\n `${f.survived.join(', ') || 'none'}${f.abstained.length ? ` (abstained: ${f.abstained.join(', ')})` : ''}` +\n ' · mechanism: none · data: none]',\n );\n const needs = [\n ...(rd.needs.magnitudeFor.length ? [`needs a representative magnitude for: ${rd.needs.magnitudeFor.join(', ')}`] : []),\n ...rd.needs.regimeFor.map((u) => `needs a stated ${u.axis} regime for: ${u.endpoints.join(', ')}`),\n ...(rd.needs.derivableConsequence ? ['needs a consequence that re-derives a known law'] : []),\n ];\n out(` [to make it testable — premise: ${rd.needs.premise}${needs.map((n) => ` · ${n}`).join('')}]`);\n out(` [observation: ${rd.observation}]`);\n if (r.adjudication) {\n out(` [adjudicated: ${r.adjudication.verdict} — ${r.adjudication.grounds}]`);\n }\n };\n for (const t of tiers) {\n if (t !== promising) out('');\n if (t.rows.length === 0) {\n out(\n t === promising\n ? ' no candidate is `promising` (with magnitude evidence) from the anchor above.'\n : ' no candidate is `promising, magnitude unchecked` from the anchor above.',\n );\n continue;\n }\n out(` ${t.heading}`);\n for (const r of t.rows) {\n if (r.adjudication && foldsOut(r.adjudication.verdict) && !showAdjudicated) continue;\n if (requireFalsifier && untested(r)) continue;\n printRow(r);\n }\n if (t.rows.some((r) => r.adjudication)) {\n out(adjudicationSummaryLine(t.rows, t.rows.length, t.label));\n }\n }\n if (clash.length) {\n out(\n `\\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier; p is the falsifier's strength ` +\n `at the values' stated σ, 2Φ(−orders/√(σa²+σb²)), not a credibility score):`,\n );\n for (const r of clash) {\n // Where each magnitude came from when it was not the sourced table: the quantity's own\n // equation (not anchor-derived), or the anchor.\n const bases = [\n ...((r.magnitudeDerived ?? []).length > 0 ? [`${r.magnitudeDerived!.join(', ')} from its own equation`] : []),\n ...(r.magnitudeUsedAnchor ? ['anchor-derived'] : []),\n ];\n const basis = bases.length > 0 ? ` (${bases.join('; ')})` : '';\n // A p that underflows a double is not zero: it is below the smallest normal double.\n const p = r.magnitudeP;\n const strength =\n p === undefined || p === null ? '' : p === 0 ? ', p < 1e-300' : `, p = ${api.formatQuantity(p, 3)}`;\n // A magnitude estimate is a statistic: three digits, marked approximate.\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${api.formatQuantity(r.ordersApart!, 3)} orders apart${strength}${basis}`);\n }\n }\n const subsumed = inert.filter((r) => r.subsuming);\n if (subsumed.length) {\n out(`\\n SUBSUMING (generic ≟ specialization — tautological, barred from promising):`);\n for (const r of subsumed) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} [${r.dim}]`);\n }\n }\n if (contra.length) {\n out(`\\n CONTRADICTORY (the identification falsifies itself numerically):`);\n for (const r of contra) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);\n }\n }\n if (axisClash.length) {\n out(`\\n AXIS-CLASH (stated scale/force labels differ: a regime-label prior, not a physical test):`);\n for (const r of axisClash) {\n out(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ${r.axisClashes.join('; ')}`);\n }\n }\n out(\n '\\n (magnitude gate abstains where a representative value is unknown, and such a row is at most ' +\n \"'promising, magnitude unchecked'; weak priors on dimension.)\",\n );\n out(` (inspect one candidate: upt ground --source=${source} <a> <b>, with the same --anchor/--max-orders)`);\n return 0;\n}\n\nexport const command: Command = {\n name: 'discover',\n aliases: ['discovery'],\n flags: FLAGS,\n help: commandHelp(HELP, FLAGS),\n summary: 'Vet quantity identifications and rank them promising (two tiers: magnitude checked or unchecked), inert, or contradictory.',\n example: 'upt discover --source=canonical',\n group: 'discovery',\n run,\n};\n\nregisterCommand(command);\n"]}
@@ -40,8 +40,8 @@ const HELP = `upt evaluate <be-NN | case-id> key=value[unit] ...
40
40
  (temperature-change, dT) and a --sigma take the interval, with no offset.
41
41
  An undeclared key exits 1 instead of being ignored. A declared
42
42
  alternate (major_axis_m for a_m) is converted exactly and said so.
43
- e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 1.456 M_⊙
44
- (ideal degenerate gas, with m_u and M_⊙ = 1.989e30 kg)
43
+ e.g. upt evaluate be-63 mu_e=2 → Chandrasekhar mass ≈ 2.896e30 kg (≈ 1.456 M_⊙
44
+ with M_⊙ = 1.989e30 kg; ideal degenerate gas, with m_u)
45
45
  upt evaluate be-55 C=1 → quantum Hall σ_xy = e²/h in siemens (R_H = 1/σ_xy = h/e²,
46
46
  the von Klitzing constant)
47
47
  With no bridge id, lists the evaluable bridges and their declared inputs.