universal-physics-tensor 0.32.0 → 0.34.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 (85) hide show
  1. package/README.md +26 -6
  2. package/dist/bridges/be37-cassini-confrontation.d.ts +43 -0
  3. package/dist/bridges/be37-cassini-confrontation.d.ts.map +1 -0
  4. package/dist/bridges/be37-cassini-confrontation.js +34 -0
  5. package/dist/bridges/be37-cassini-confrontation.js.map +1 -0
  6. package/dist/bridges/be48-collapse-confrontation.d.ts +52 -0
  7. package/dist/bridges/be48-collapse-confrontation.d.ts.map +1 -0
  8. package/dist/bridges/be48-collapse-confrontation.js +37 -0
  9. package/dist/bridges/be48-collapse-confrontation.js.map +1 -0
  10. package/dist/bridges/confrontation-coverage.d.ts +5 -10
  11. package/dist/bridges/confrontation-coverage.d.ts.map +1 -1
  12. package/dist/bridges/confrontation-coverage.js +7 -11
  13. package/dist/bridges/confrontation-coverage.js.map +1 -1
  14. package/dist/bridges/confrontations.d.ts +25 -0
  15. package/dist/bridges/confrontations.d.ts.map +1 -0
  16. package/dist/bridges/confrontations.js +125 -0
  17. package/dist/bridges/confrontations.js.map +1 -0
  18. package/dist/bridges/observations/types.d.ts +70 -0
  19. package/dist/bridges/observations/types.d.ts.map +1 -0
  20. package/dist/bridges/observations/types.js +22 -0
  21. package/dist/bridges/observations/types.js.map +1 -0
  22. package/dist/bridges/sensitivity.d.ts +13 -0
  23. package/dist/bridges/sensitivity.d.ts.map +1 -0
  24. package/dist/bridges/sensitivity.js +58 -0
  25. package/dist/bridges/sensitivity.js.map +1 -0
  26. package/dist/canonical/canonical-equation.d.ts +1 -1
  27. package/dist/canonical/canonical-equation.d.ts.map +1 -1
  28. package/dist/canonical/entries/atomic.d.ts +2 -1
  29. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  30. package/dist/canonical/entries/atomic.js +22 -1
  31. package/dist/canonical/entries/atomic.js.map +1 -1
  32. package/dist/canonical/entries/condensed-matter.d.ts +23 -0
  33. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -0
  34. package/dist/canonical/entries/condensed-matter.js +173 -0
  35. package/dist/canonical/entries/condensed-matter.js.map +1 -0
  36. package/dist/canonical/entries/electromagnetism.d.ts +4 -0
  37. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  38. package/dist/canonical/entries/electromagnetism.js +97 -1
  39. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  40. package/dist/canonical/entries/fluids-waves.d.ts +15 -3
  41. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  42. package/dist/canonical/entries/fluids-waves.js +103 -2
  43. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  44. package/dist/canonical/entries/statistical-mechanics.d.ts +24 -0
  45. package/dist/canonical/entries/statistical-mechanics.d.ts.map +1 -0
  46. package/dist/canonical/entries/statistical-mechanics.js +94 -0
  47. package/dist/canonical/entries/statistical-mechanics.js.map +1 -0
  48. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts +5 -4
  49. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  50. package/dist/canonical/entries/thermo-nuclear-cosmo.js +60 -0
  51. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  52. package/dist/canonical/registry.d.ts.map +1 -1
  53. package/dist/canonical/registry.js +4 -0
  54. package/dist/canonical/registry.js.map +1 -1
  55. package/dist/cli/command.d.ts +0 -3
  56. package/dist/cli/command.d.ts.map +1 -1
  57. package/dist/cli/command.js +0 -13
  58. package/dist/cli/command.js.map +1 -1
  59. package/dist/cli/commands/confront.d.ts +3 -0
  60. package/dist/cli/commands/confront.d.ts.map +1 -0
  61. package/dist/cli/commands/confront.js +94 -0
  62. package/dist/cli/commands/confront.js.map +1 -0
  63. package/dist/cli/commands/discover.d.ts.map +1 -1
  64. package/dist/cli/commands/discover.js +11 -5
  65. package/dist/cli/commands/discover.js.map +1 -1
  66. package/dist/cli/commands/index.d.ts +1 -0
  67. package/dist/cli/commands/index.d.ts.map +1 -1
  68. package/dist/cli/commands/index.js +1 -0
  69. package/dist/cli/commands/index.js.map +1 -1
  70. package/dist/cli-api.d.ts +6 -0
  71. package/dist/cli-api.d.ts.map +1 -1
  72. package/dist/cli-api.js +6 -0
  73. package/dist/cli-api.js.map +1 -1
  74. package/dist/composition/consequence.d.ts +62 -0
  75. package/dist/composition/consequence.d.ts.map +1 -0
  76. package/dist/composition/consequence.js +82 -0
  77. package/dist/composition/consequence.js.map +1 -0
  78. package/dist/composition/discovery.d.ts +2 -2
  79. package/dist/composition/discovery.d.ts.map +1 -1
  80. package/dist/composition/discovery.js +1 -1
  81. package/dist/index.d.ts +12 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +20 -0
  84. package/dist/index.js.map +1 -1
  85. package/package.json +1 -1
package/README.md CHANGED
@@ -67,6 +67,7 @@ npm run upt -- coverage # audit each bridge's
67
67
  npm run upt -- canonical # the standard-physics L-layer registry (answer key)
68
68
  npm run upt -- recover # validate bridges against standard physics
69
69
  npm run upt -- symbolic --simplify # compose + fold bridges' SYMBOLIC forms (MathTS simplify)
70
+ npm run upt -- confront # run the catalog's committed real-data confrontations (predicted vs observed)
70
71
  npm run upt -- map --source=both --format=mermaid # VISUAL map of the graph (Mermaid; also --format=dot|svg, --proposed, --out=PATH)
71
72
  npm run upt -- map --equation "period = 2*pi*sqrt(length/gravity)" # drop YOUR OWN equation onto the map: dimensional check + where it lands
72
73
  # ...and YOUR OWN equations:
@@ -247,8 +248,8 @@ delivered a measured **5-6× RK4 geodesic-integrator speedup** (see [CHANGELOG](
247
248
 
248
249
  ## Development Status
249
250
 
250
- **Current version:** v0.31.0 — [npm `latest`](https://www.npmjs.com/package/universal-physics-tensor)
251
- matches (registry-verified 2026-07-02) — building on
251
+ **Current version:** v0.34.0 — [npm `latest`](https://www.npmjs.com/package/universal-physics-tensor)
252
+ — building on
252
253
  the **v0.8.0 → v0.23.0** rollup arc (composition
253
254
  graph + GW170817 / BE-23 data confrontations + catalog adjudication, Part-IX
254
255
  Phase C/D, the full catalog→graph migration, the bridge-inference +
@@ -287,11 +288,24 @@ unknown/mistyped flags now exit 2 instead of being silently ignored. v0.31.0
287
288
  (`src/composition/adjudication.ts`) plus a calibration benchmark, so `upt
288
289
  discover` remembers past human verdicts and folds recorded decoy/entailed
289
290
  candidates out of its default output instead of re-surfacing them every run.
291
+ Discovery-hardening Phase 4 Unit A adds **consequence propagation**
292
+ (`src/composition/consequence.ts`) — a machine pre-classifier that labels
293
+ each `promising` candidate `entailed` (re-derives a known canonical
294
+ equation), `novel-consequence` (a valid, unmatched algebraic consequence),
295
+ or `inconclusive`, surfaced as a `[consequence: …]` trailer in `upt discover`
296
+ and a `consequence` field under `--json`; annotation-only, so the funnel's
297
+ promising/inert/contradictory counts never move. v0.34.0 **expands the
298
+ canonical L-layer 66 → 93 equations** (+41%, 27 new cited monomial laws) across
299
+ a new `condensed-matter` domain (Drude/Fermi/Hall) plus fluids, EM, thermo,
300
+ statistical mechanics, and mechanics/quantum — and, just as importantly, maps
301
+ the boundaries of the monomial L0 model: sums, transcendentals, hidden length
302
+ scales, dimensionless numbers, and pure counts are excluded (not force-fit) and
303
+ logged for a future L1-sum/L2 tier (`docs/research/canonical-expansion-candidate-audit.md`).
290
304
 
291
305
  | Metric | Value |
292
306
  |---|---|
293
307
  | Bridge catalog | **44** (IDs 11-54) — 8 established · 33 speculative · 3 highly-speculative · 0 invalid; membership-adjudicated **36 bridges · 5 not-a-bridge · 3 contested**; **41-edge composition graph** (full migration, 131 centralized quantity nodes) with a bridge-inference suite — **identifiability classifier**, **retrodiction harness**, **Buckingham-π enumerator**, unified by an **`explainQuantity`** entry point, plus (v0.12) the candidate-vetting **discovery loop**, regime-prediction map, empirical-coverage audit, and **symbolic composition** (the Observable contract + MathTS simplification) |
294
- | Test suite | **3431** passing (4 skipped, 1 todo; incl. property-based algebra tests) across 317 files — gated by CI |
308
+ | Test suite | **3548** passing (4 skipped, 1 todo; incl. property-based algebra tests) across 328 files — gated by CI |
295
309
  | `tsc --noEmit` | clean (src + strict `tsc -p tsconfig.tests.json`) |
296
310
  | GR validation anchors | BE-52 Mercury perihelion relErr 1.8×10⁻⁷ · BE-37 Shapiro delay relErr ~2×10⁻⁸ |
297
311
  | First derived relation | E_min(M) = ℏc³ln2/(8πGM) from BE-42 ∘ BE-16, relErr ≤ 10⁻¹² (pre-registered CT-1) |
@@ -344,10 +358,16 @@ spec's own revision ledger is at
344
358
  namespacing rule (`CompositionAliasError` + reviewable
345
359
  `SOURCE_ALIAS_DISPOSITIONS`); the ~90 new quantity-naming judgments
346
360
  are the standing physicist-review surface.
347
- - **More data confrontations** — GW170817 → BE-36 and the BE-23
361
+ - **More data confrontations** — GW170817 → BE-36, the BE-23
348
362
  Planckian-dissipation check (Legros et al. 2019, honest
349
- aggregate-level encoding) have shipped; upgrading BE-23 to the
350
- per-material α table is the next bounded step.
363
+ aggregate-level encoding), BE-37 Shapiro delay → Cassini PPN-γ, and
364
+ BE-48 GRW collapse rate → the LISA-Pathfinder CSL bound have shipped
365
+ (data-confronted bridges 3 → 5), unified behind `upt confront
366
+ [--bridge] [--sensitivity]` and a typed observation registry. Upgrading
367
+ BE-23 to the per-material α table, BE-16 Landauer/Bérut (machinery
368
+ built, paywalled Fig-4 asymptote pending), and the BE-38 MOND/SPARC
369
+ deep-limit (contingent on a genuine-test determination) are the next
370
+ bounded steps.
351
371
  - **Three.js / game-engine class visualization** in a separate repo
352
372
  (out of UPT scope per project decision; see
353
373
  `docs/planning/Future-Production-Hardening.md`).
@@ -0,0 +1,43 @@
1
+ /**
2
+ * BE-37 × Cassini — confront the Shapiro-delay bridge with the Cassini
3
+ * radio-link measurement of the PPN parameter γ (Bertotti, Iess & Tortora
4
+ * 2003). BE-37 encodes the γ=1 general-relativistic Shapiro delay, so the
5
+ * bridge PREDICTS γ = 1 exactly; the confrontation observable is the
6
+ * measured γ. This is the framework's first Shapiro/PPN data confrontation
7
+ * (be-37 has a numerical validation anchor but no data confrontation before
8
+ * this). Value-kind.
9
+ *
10
+ * @module bridges/be37-cassini-confrontation
11
+ */
12
+ import type { ObservationProvenance } from './observations/types.js';
13
+ /** A PPN-γ observation record. @public */
14
+ export interface CassiniObservation {
15
+ /** Measured PPN parameter γ (dimensionless). */
16
+ readonly observed_gamma: number;
17
+ /** 1σ on the measured γ. */
18
+ readonly observed_gamma_sigma: number;
19
+ readonly provenance: ObservationProvenance;
20
+ }
21
+ /**
22
+ * Cassini 2002 solar-conjunction Shapiro-delay determination of γ:
23
+ * γ = 1 + (2.1 ± 2.3)×10⁻⁵ (Bertotti-Iess-Tortora 2003, Nature 425:374).
24
+ *
25
+ * @public
26
+ */
27
+ export declare const CASSINI: CassiniObservation;
28
+ /** Result of confronting BE-37 with a PPN-γ measurement. @public */
29
+ export interface BE37ConfrontationResult {
30
+ /** BE-37 predicts γ = 1 (GR Shapiro form). */
31
+ readonly predicted_gamma: number;
32
+ readonly observed_gamma: number;
33
+ readonly residual_in_sigma: number;
34
+ readonly withinObserved: boolean;
35
+ readonly observation: CassiniObservation;
36
+ }
37
+ /**
38
+ * Confront BE-37's γ=1 Shapiro prediction with the Cassini γ measurement.
39
+ *
40
+ * @public
41
+ */
42
+ export declare function confrontBE37(obs?: CassiniObservation): BE37ConfrontationResult;
43
+ //# sourceMappingURL=be37-cassini-confrontation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"be37-cassini-confrontation.d.ts","sourceRoot":"","sources":["../../src/bridges/be37-cassini-confrontation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,kBASrB,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,kBAA4B,GAAG,uBAAuB,CAUvF"}
@@ -0,0 +1,34 @@
1
+ import { residualInSigma } from './observations/types.js';
2
+ /**
3
+ * Cassini 2002 solar-conjunction Shapiro-delay determination of γ:
4
+ * γ = 1 + (2.1 ± 2.3)×10⁻⁵ (Bertotti-Iess-Tortora 2003, Nature 425:374).
5
+ *
6
+ * @public
7
+ */
8
+ export const CASSINI = {
9
+ observed_gamma: 1 + 2.1e-5,
10
+ observed_gamma_sigma: 2.3e-5,
11
+ provenance: {
12
+ citation: 'Bertotti, Iess & Tortora 2003, Nature 425:374-376 (Cassini radio-link Shapiro delay, June 2002 solar conjunction)',
13
+ year: 2003,
14
+ retrieved: '2026-07-02',
15
+ note: 'BE-37 encodes the gamma=1 GR Shapiro form, so the predicted PPN gamma is exactly 1; the observable confronted is Cassini gamma.',
16
+ },
17
+ };
18
+ /**
19
+ * Confront BE-37's γ=1 Shapiro prediction with the Cassini γ measurement.
20
+ *
21
+ * @public
22
+ */
23
+ export function confrontBE37(obs = CASSINI) {
24
+ const predicted_gamma = 1;
25
+ const residual_in_sigma = residualInSigma(predicted_gamma, obs.observed_gamma, obs.observed_gamma_sigma);
26
+ return {
27
+ predicted_gamma,
28
+ observed_gamma: obs.observed_gamma,
29
+ residual_in_sigma,
30
+ withinObserved: residual_in_sigma <= 1,
31
+ observation: obs,
32
+ };
33
+ }
34
+ //# sourceMappingURL=be37-cassini-confrontation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"be37-cassini-confrontation.js","sourceRoot":"","sources":["../../src/bridges/be37-cassini-confrontation.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC,cAAc,EAAE,CAAC,GAAG,MAAM;IAC1B,oBAAoB,EAAE,MAAM;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,mHAAmH;QAC7H,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,iIAAiI;KACxI;CACF,CAAC;AAYF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B,OAAO;IAC5D,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,MAAM,iBAAiB,GAAG,eAAe,CAAC,eAAe,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACzG,OAAO;QACL,eAAe;QACf,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,iBAAiB;QACjB,cAAc,EAAE,iBAAiB,IAAI,CAAC;QACtC,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * BE-48 × LISA-Pathfinder — confront the GRW mass-amplified localization
3
+ * rate with the experimental upper bound on spontaneous-collapse rates
4
+ * (Carlesso et al. 2016). BE-48 encodes the GRW single-nucleon rate
5
+ * λ₀ = 10⁻¹⁶ s⁻¹; LISA-Pathfinder bounds the CSL rate at
6
+ * λ ≤ 2.96×10⁻⁸ s⁻¹ (r_C = 100 nm). The GRW rate sits ~8 orders below the
7
+ * exclusion → NOT excluded. Upper-bound-kind.
8
+ *
9
+ * MODEL CAVEAT: GRW and CSL are related-but-distinct collapse models; this
10
+ * is a fail-to-exclude, not a confirmation (GRW's original rate predicts no
11
+ * observable collapse). The same bound overlaps Adler's proposed floor
12
+ * 10⁻⁸±² s⁻¹.
13
+ *
14
+ * @module bridges/be48-collapse-confrontation
15
+ */
16
+ import type { ObservationProvenance } from './observations/types.js';
17
+ /** A collapse-rate upper-bound observation. @public */
18
+ export interface CollapseBoundObservation {
19
+ /** Experimental upper bound on the collapse rate (s⁻¹). */
20
+ readonly bound_rate_per_s: number;
21
+ /** 1σ on the bound (s⁻¹). */
22
+ readonly bound_sigma_per_s: number;
23
+ /** Correlation length the bound is quoted at (m). */
24
+ readonly r_C_m: number;
25
+ readonly provenance: ObservationProvenance;
26
+ }
27
+ /**
28
+ * LISA-Pathfinder CSL upper bound: λ ≤ (2.96 ± 0.12)×10⁻⁸ s⁻¹ at
29
+ * r_C = 100 nm (Carlesso et al. 2016, arXiv 1606.03637 / PRD 95:084054;
30
+ * data Armano et al. 2016, PRL 116:231101).
31
+ *
32
+ * @public
33
+ */
34
+ export declare const LISA_PATHFINDER_CSL: CollapseBoundObservation;
35
+ /** Result of confronting BE-48 with a collapse-rate bound. @public */
36
+ export interface BE48ConfrontationResult {
37
+ /** GRW single-nucleon rate λ₀ (s⁻¹) = evaluateGRWLocalization at m = m_0. */
38
+ readonly predicted_rate_per_s: number;
39
+ readonly bound_rate_per_s: number;
40
+ /** predicted ≤ bound (not excluded). */
41
+ readonly satisfied: boolean;
42
+ readonly observation: CollapseBoundObservation;
43
+ }
44
+ /**
45
+ * Confront BE-48's GRW single-nucleon rate with an experimental collapse
46
+ * bound. The single-nucleon rate is `evaluateGRWLocalization` at m = m_0
47
+ * (mass ratio 1), i.e. exactly λ₀.
48
+ *
49
+ * @public
50
+ */
51
+ export declare function confrontBE48(obs?: CollapseBoundObservation): BE48ConfrontationResult;
52
+ //# sourceMappingURL=be48-collapse-confrontation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"be48-collapse-confrontation.d.ts","sourceRoot":"","sources":["../../src/bridges/be48-collapse-confrontation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,wBAUjC,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,wBAA8C,GAAG,uBAAuB,CASzG"}
@@ -0,0 +1,37 @@
1
+ import { evaluateGRWLocalization } from './equations/be-48-grw-localization.js';
2
+ /**
3
+ * LISA-Pathfinder CSL upper bound: λ ≤ (2.96 ± 0.12)×10⁻⁸ s⁻¹ at
4
+ * r_C = 100 nm (Carlesso et al. 2016, arXiv 1606.03637 / PRD 95:084054;
5
+ * data Armano et al. 2016, PRL 116:231101).
6
+ *
7
+ * @public
8
+ */
9
+ export const LISA_PATHFINDER_CSL = {
10
+ bound_rate_per_s: 2.96e-8,
11
+ bound_sigma_per_s: 0.12e-8,
12
+ r_C_m: 1e-7,
13
+ provenance: {
14
+ citation: 'Carlesso, Bassi, Falferi & Vinante 2016, arXiv:1606.03637 / Phys. Rev. D 95:084054 (2017); LISA-Pathfinder data Armano et al. 2016, PRL 116:231101',
15
+ year: 2016,
16
+ retrieved: '2026-07-02',
17
+ note: 'CSL bound; BE-48 encodes the GRW single-nucleon rate. GRW rate ~8 orders below the exclusion: fail-to-exclude, NOT a confirmation. The bound overlaps Adler 10^-8±2 /s.',
18
+ },
19
+ };
20
+ /**
21
+ * Confront BE-48's GRW single-nucleon rate with an experimental collapse
22
+ * bound. The single-nucleon rate is `evaluateGRWLocalization` at m = m_0
23
+ * (mass ratio 1), i.e. exactly λ₀.
24
+ *
25
+ * @public
26
+ */
27
+ export function confrontBE48(obs = LISA_PATHFINDER_CSL) {
28
+ const m_0 = 1.67e-27; // nucleon mass, the GRW reference
29
+ const predicted_rate_per_s = evaluateGRWLocalization({ m_kg: m_0, m_0_kg: m_0 });
30
+ return {
31
+ predicted_rate_per_s,
32
+ bound_rate_per_s: obs.bound_rate_per_s,
33
+ satisfied: predicted_rate_per_s <= obs.bound_rate_per_s,
34
+ observation: obs,
35
+ };
36
+ }
37
+ //# sourceMappingURL=be48-collapse-confrontation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"be48-collapse-confrontation.js","sourceRoot":"","sources":["../../src/bridges/be48-collapse-confrontation.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAahF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,OAAO;IAC1B,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,QAAQ,EAAE,oJAAoJ;QAC9J,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,yKAAyK;KAChL;CACF,CAAC;AAYF;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgC,mBAAmB;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,kCAAkC;IACxD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACjF,OAAO;QACL,oBAAoB;QACpB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,SAAS,EAAE,oBAAoB,IAAI,GAAG,CAAC,gBAAgB;QACvD,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
@@ -18,16 +18,11 @@
18
18
  * @module bridges/confrontation-coverage
19
19
  */
20
20
  /**
21
- * Catalog ids with a committed real-data confrontation:
22
- * - BE-36 — GW170817 vs the GW-speed bound (be36-gw170817-confrontation.ts)
23
- * - BE-23 — SYK Planckian dissipation vs cuprate data
24
- * (be23-planckian-confrontation.ts)
25
- * - BE-52 — Mercury anomalous perihelion advance vs Einstein 1915
26
- * (be52-mercury-confrontation.ts) — the first established-bridge
27
- * confrontation, GR's original empirical triumph
28
- *
29
- * Single source of truth — also consumed by `composition/bridge-analysis.ts`
30
- * (the priority scorecard's data-confrontation flag).
21
+ * Catalog ids with a committed real-data confrontation — a SORTED
22
+ * projection of the confrontation registry's keyset (single source of
23
+ * truth; adding a `ConfrontationEntry` grows this set automatically).
24
+ * Consumed by `composition/bridge-analysis.ts` for the scorecard's
25
+ * data-confrontation flag.
31
26
  *
32
27
  * @internal
33
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"confrontation-coverage.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,MAAM,CAAC;AAEX,gDAAgD;AAChD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,wCAAwC;AACxC,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,mEAAmE;IACnE,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,cAAc,CA6C9C"}
1
+ {"version":3,"file":"confrontation-coverage.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAEnD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,MAAM,CAAC;AAEX,gDAAgD;AAChD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,wCAAwC;AACxC,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,mEAAmE;IACnE,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,cAAc,CA6C9C"}
@@ -19,21 +19,17 @@
19
19
  */
20
20
  import { BRIDGE_EQUATIONS } from './index.js';
21
21
  import { CATALOG_GRAPH } from '../composition/catalog-graph.js';
22
+ import { CONFRONTATIONS } from './confrontations.js';
22
23
  /**
23
- * Catalog ids with a committed real-data confrontation:
24
- * - BE-36 — GW170817 vs the GW-speed bound (be36-gw170817-confrontation.ts)
25
- * - BE-23 — SYK Planckian dissipation vs cuprate data
26
- * (be23-planckian-confrontation.ts)
27
- * - BE-52 — Mercury anomalous perihelion advance vs Einstein 1915
28
- * (be52-mercury-confrontation.ts) — the first established-bridge
29
- * confrontation, GR's original empirical triumph
30
- *
31
- * Single source of truth — also consumed by `composition/bridge-analysis.ts`
32
- * (the priority scorecard's data-confrontation flag).
24
+ * Catalog ids with a committed real-data confrontation — a SORTED
25
+ * projection of the confrontation registry's keyset (single source of
26
+ * truth; adding a `ConfrontationEntry` grows this set automatically).
27
+ * Consumed by `composition/bridge-analysis.ts` for the scorecard's
28
+ * data-confrontation flag.
33
29
  *
34
30
  * @internal
35
31
  */
36
- export const DATA_CONFRONTED_IDS = new Set([23, 36, 52]);
32
+ export const DATA_CONFRONTED_IDS = new Set([...CONFRONTATIONS.keys()].sort((a, b) => a - b));
37
33
  /**
38
34
  * Audit the catalog's empirical grounding. Reads `BRIDGE_EQUATIONS`, the
39
35
  * composition graph, and the data-confrontation registry; fabricates
@@ -1 +1 @@
1
- {"version":3,"file":"confrontation-coverage.js","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AA+C9E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GAAqB,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/D,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,2BAA2B,GAAG,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC;QAEzE,IAAI,IAAmB,CAAC;QACxB,IAAI,oBAAoB;YAAE,IAAI,GAAG,iBAAiB,CAAC;aAC9C,IAAI,YAAY,IAAI,2BAA2B;YAAE,IAAI,GAAG,kBAAkB,CAAC;aAC3E,IAAI,2BAA2B;YAAE,IAAI,GAAG,cAAc,CAAC;;YACvD,IAAI,GAAG,MAAM,CAAC;QAEnB,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI;YACJ,oBAAoB;YACpB,YAAY;YACZ,2BAA2B;YAC3B,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;YACtC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;SAC3C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAkC;QAC5C,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC;KACR,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAE1C,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5C,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,MAAM;QACN,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM;QAC/E,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,MAAM;QACpE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"confrontation-coverage.js","sourceRoot":"","sources":["../../src/bridges/confrontation-coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Confrontation registry — maps a bridge id to a normalized
3
+ * `ConfrontationOutcome`-producing `run()`. Wraps the three existing
4
+ * confrontation modules (be-23/36/52) behind the unified outcome shape and
5
+ * hosts the new confrontations. `DATA_CONFRONTED_IDS` is a projection of
6
+ * this registry's keyset (single source of truth). Confrontations are
7
+ * ORTHOGONAL to the discovery funnel — nothing here imports discovery.
8
+ *
9
+ * @module bridges/confrontations
10
+ */
11
+ import type { ConfrontationOutcome, ObservationKind } from './observations/types.js';
12
+ /** One registered confrontation. @public */
13
+ export interface ConfrontationEntry {
14
+ readonly bridgeId: number;
15
+ readonly title: string;
16
+ readonly kind: ObservationKind;
17
+ run(): ConfrontationOutcome;
18
+ }
19
+ /** The registry (frozen view). @public */
20
+ export declare const CONFRONTATIONS: ReadonlyMap<number, ConfrontationEntry>;
21
+ /** All entries, in ascending bridge-id order. @public */
22
+ export declare function listConfrontations(): ConfrontationEntry[];
23
+ /** Run one confrontation; `undefined` if the id is not registered. @public */
24
+ export declare function runConfrontation(bridgeId: number): ConfrontationOutcome | undefined;
25
+ //# sourceMappingURL=confrontations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confrontations.d.ts","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQrF,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,GAAG,IAAI,oBAAoB,CAAC;CAC7B;AAoHD,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAY,CAAC;AAEhF,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF"}
@@ -0,0 +1,125 @@
1
+ import { residualInSigma } from './observations/types.js';
2
+ import { confrontBE52 } from './be52-mercury-confrontation.js';
3
+ import { confrontBE37 } from './be37-cassini-confrontation.js';
4
+ import { confrontBE36 } from './be36-gw170817-confrontation.js';
5
+ import { confrontBE23 } from './be23-planckian-confrontation.js';
6
+ import { confrontBE48 } from './be48-collapse-confrontation.js';
7
+ const be52Entry = {
8
+ bridgeId: 52,
9
+ title: 'GR perihelion precession vs Mercury (Clemence 1947)',
10
+ kind: 'value',
11
+ run() {
12
+ const r = confrontBE52();
13
+ return {
14
+ kind: 'value',
15
+ predicted: r.predicted_arcsec_per_century,
16
+ observed: r.observed_arcsec_per_century,
17
+ sigma: r.observation.observed_sigma_arcsec_per_century,
18
+ residualInSigma: r.residual_in_sigma,
19
+ withinObserved: r.withinObserved,
20
+ units: 'arcsec/century',
21
+ provenance: { citation: r.observation.citation, year: 1947, retrieved: '2026-07-02' },
22
+ };
23
+ },
24
+ };
25
+ const be23Entry = {
26
+ bridgeId: 23,
27
+ title: 'Planckian dissipation α vs overdoped cuprates (Legros 2019)',
28
+ kind: 'value',
29
+ run() {
30
+ const r = confrontBE23();
31
+ // withinObserved means "within 1σ" (see ConfrontationOutcome / the CLI's
32
+ // "within 1σ ✓" label) — derive it from the residual, not from
33
+ // r.withinPlanckianBand (a separate O(1)-band membership check that can
34
+ // diverge from the residual verdict away from the committed α).
35
+ return {
36
+ kind: 'value',
37
+ predicted: 1.0,
38
+ observed: r.alphaAggregate,
39
+ sigma: r.alphaAggregateErr,
40
+ residualInSigma: residualInSigma(1.0, r.alphaAggregate, r.alphaAggregateErr),
41
+ withinObserved: residualInSigma(1.0, r.alphaAggregate, r.alphaAggregateErr) <= 1,
42
+ units: 'dimensionless (α)',
43
+ provenance: { citation: r.observation.citation, year: 2019, retrieved: '2026-07-02' },
44
+ };
45
+ },
46
+ };
47
+ // be-36 upper-bound confrontation. VERIFIED field names (BE36ConfrontationResult,
48
+ // be36-gw170817-confrontation.ts:76-93): upperBound, lowerBound, encodedBound,
49
+ // passesEncodedBound, observation. It is two-sided; map BE-36's encoded bound
50
+ // as `predicted` and the observational positive-side bound as `bound`, with
51
+ // `passesEncodedBound` as `satisfied`. GWSpeedObservation's citation field is
52
+ // named `citation` (verified at be36-gw170817-confrontation.ts:51).
53
+ const be36Entry = {
54
+ bridgeId: 36,
55
+ title: 'GW speed vs GW170817 bound',
56
+ kind: 'upper-bound',
57
+ run() {
58
+ const r = confrontBE36();
59
+ return {
60
+ kind: 'upper-bound',
61
+ predicted: r.encodedBound,
62
+ bound: r.upperBound,
63
+ satisfied: r.passesEncodedBound,
64
+ units: '|c_GW − c| / c (dimensionless)',
65
+ provenance: {
66
+ citation: r.observation.citation,
67
+ year: 2017,
68
+ retrieved: '2026-07-02',
69
+ note: `two-sided bound: upper ${r.upperBound}, lower ${r.lowerBound}; encoded |ratio| ≤ ${r.encodedBound}`,
70
+ },
71
+ };
72
+ },
73
+ };
74
+ const be37Entry = {
75
+ bridgeId: 37,
76
+ title: 'GR Shapiro delay (PPN γ) vs Cassini (Bertotti 2003)',
77
+ kind: 'value',
78
+ run() {
79
+ const r = confrontBE37();
80
+ return {
81
+ kind: 'value',
82
+ predicted: r.predicted_gamma,
83
+ observed: r.observed_gamma,
84
+ sigma: r.observation.observed_gamma_sigma,
85
+ residualInSigma: r.residual_in_sigma,
86
+ withinObserved: r.withinObserved,
87
+ units: 'PPN γ (dimensionless)',
88
+ provenance: r.observation.provenance,
89
+ };
90
+ },
91
+ };
92
+ const be48Entry = {
93
+ bridgeId: 48,
94
+ title: 'GRW collapse rate vs LISA-Pathfinder bound (Carlesso 2016)',
95
+ kind: 'upper-bound',
96
+ run() {
97
+ const r = confrontBE48();
98
+ return {
99
+ kind: 'upper-bound',
100
+ predicted: r.predicted_rate_per_s,
101
+ bound: r.bound_rate_per_s,
102
+ satisfied: r.satisfied,
103
+ units: 's⁻¹ (collapse rate)',
104
+ provenance: r.observation.provenance,
105
+ };
106
+ },
107
+ };
108
+ const REGISTRY = new Map([
109
+ [23, be23Entry],
110
+ [36, be36Entry],
111
+ [37, be37Entry],
112
+ [48, be48Entry],
113
+ [52, be52Entry],
114
+ ]);
115
+ /** The registry (frozen view). @public */
116
+ export const CONFRONTATIONS = REGISTRY;
117
+ /** All entries, in ascending bridge-id order. @public */
118
+ export function listConfrontations() {
119
+ return [...REGISTRY.values()].sort((a, b) => a.bridgeId - b.bridgeId);
120
+ }
121
+ /** Run one confrontation; `undefined` if the id is not registered. @public */
122
+ export function runConfrontation(bridgeId) {
123
+ return REGISTRY.get(bridgeId)?.run();
124
+ }
125
+ //# sourceMappingURL=confrontations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confrontations.js","sourceRoot":"","sources":["../../src/bridges/confrontations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Typed observation + confrontation-outcome layer for `upt confront`.
3
+ * The outcome is a discriminated union on `kind` so each confrontation
4
+ * carries only the fields it can honestly populate (no NaN placeholders).
5
+ *
6
+ * @module bridges/observations/types
7
+ */
8
+ /** Provenance every observation record must carry. @public */
9
+ export interface ObservationProvenance {
10
+ /** Paper + locus, e.g. "Bertotti-Iess-Tortora 2003, Nature 425:374". */
11
+ readonly citation: string;
12
+ readonly year: number;
13
+ /** ISO date the value was transcribed into the repo. */
14
+ readonly retrieved: string;
15
+ /** Caveats: what was digitized, unit conversions, model conventions. */
16
+ readonly note?: string;
17
+ }
18
+ /** One named uncertainty component (e.g. statistical vs systematic). @public */
19
+ export interface SigmaComponent {
20
+ readonly label: string;
21
+ readonly value: number;
22
+ }
23
+ /** How the observation constrains the prediction. @public */
24
+ export type ObservationKind = 'value' | 'upper-bound' | 'consistency' | 'table';
25
+ /**
26
+ * Normalized confrontation result — discriminated on `kind`. Each arm
27
+ * carries only the fields it can honestly populate.
28
+ *
29
+ * @public
30
+ */
31
+ export type ConfrontationOutcome = {
32
+ readonly kind: 'value';
33
+ readonly predicted: number;
34
+ readonly observed: number;
35
+ readonly sigma: number;
36
+ readonly residualInSigma: number;
37
+ readonly withinObserved: boolean;
38
+ readonly units: string;
39
+ readonly provenance: ObservationProvenance;
40
+ } | {
41
+ readonly kind: 'upper-bound';
42
+ readonly predicted: number;
43
+ readonly bound: number;
44
+ readonly satisfied: boolean;
45
+ readonly units: string;
46
+ readonly provenance: ObservationProvenance;
47
+ } | {
48
+ readonly kind: 'consistency';
49
+ readonly predicted: number;
50
+ readonly approaches: number;
51
+ readonly fractionalGap: number;
52
+ readonly units: string;
53
+ readonly provenance: ObservationProvenance;
54
+ } | {
55
+ readonly kind: 'table';
56
+ readonly rows: ReadonlyArray<{
57
+ readonly label: string;
58
+ readonly predicted: number;
59
+ readonly observed: number;
60
+ readonly sigma: number;
61
+ readonly residualInSigma: number;
62
+ }>;
63
+ readonly units: string;
64
+ readonly provenance: ObservationProvenance;
65
+ };
66
+ /** |predicted − observed| in units of the observed 1σ. @public */
67
+ export declare function residualInSigma(predicted: number, observed: number, sigma: number): number;
68
+ /** Combined 1σ from named components (root-sum-square). @public */
69
+ export declare function combineInQuadrature(components: readonly SigmaComponent[]): number;
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridges/observations/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,CAAC;AAEN,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1F;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAKjF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Typed observation + confrontation-outcome layer for `upt confront`.
3
+ * The outcome is a discriminated union on `kind` so each confrontation
4
+ * carries only the fields it can honestly populate (no NaN placeholders).
5
+ *
6
+ * @module bridges/observations/types
7
+ */
8
+ /** |predicted − observed| in units of the observed 1σ. @public */
9
+ export function residualInSigma(predicted, observed, sigma) {
10
+ if (!(Number.isFinite(sigma) && sigma > 0)) {
11
+ throw new RangeError('residualInSigma: sigma must be finite and > 0');
12
+ }
13
+ return Math.abs(predicted - observed) / sigma;
14
+ }
15
+ /** Combined 1σ from named components (root-sum-square). @public */
16
+ export function combineInQuadrature(components) {
17
+ if (components.length === 0) {
18
+ throw new RangeError('combineInQuadrature: need at least one component');
19
+ }
20
+ return Math.sqrt(components.reduce((acc, c) => acc + c.value * c.value, 0));
21
+ }
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bridges/observations/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoEH,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB,EAAE,KAAa;IAChF,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,+CAA+C,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,UAAqC;IACvE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** One input's elasticity. @public */
2
+ export interface Elasticity {
3
+ readonly input: string;
4
+ readonly elasticity: number;
5
+ }
6
+ /**
7
+ * Elasticity ranking for a value-kind confrontation's inputs, descending.
8
+ * `[]` for non-value-kind or unregistered ids.
9
+ *
10
+ * @public
11
+ */
12
+ export declare function decidingMeasurement(bridgeId: number): Elasticity[];
13
+ //# sourceMappingURL=sensitivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../../src/bridges/sensitivity.ts"],"names":[],"mappings":"AAcA,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAkBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CA2BlE"}