universal-physics-tensor 0.31.0 → 0.33.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.
- package/README.md +36 -7
- package/dist/bridges/be37-cassini-confrontation.d.ts +43 -0
- package/dist/bridges/be37-cassini-confrontation.d.ts.map +1 -0
- package/dist/bridges/be37-cassini-confrontation.js +34 -0
- package/dist/bridges/be37-cassini-confrontation.js.map +1 -0
- package/dist/bridges/be48-collapse-confrontation.d.ts +52 -0
- package/dist/bridges/be48-collapse-confrontation.d.ts.map +1 -0
- package/dist/bridges/be48-collapse-confrontation.js +37 -0
- package/dist/bridges/be48-collapse-confrontation.js.map +1 -0
- package/dist/bridges/confrontation-coverage.d.ts +5 -10
- package/dist/bridges/confrontation-coverage.d.ts.map +1 -1
- package/dist/bridges/confrontation-coverage.js +7 -11
- package/dist/bridges/confrontation-coverage.js.map +1 -1
- package/dist/bridges/confrontations.d.ts +25 -0
- package/dist/bridges/confrontations.d.ts.map +1 -0
- package/dist/bridges/confrontations.js +125 -0
- package/dist/bridges/confrontations.js.map +1 -0
- package/dist/bridges/observations/types.d.ts +70 -0
- package/dist/bridges/observations/types.d.ts.map +1 -0
- package/dist/bridges/observations/types.js +22 -0
- package/dist/bridges/observations/types.js.map +1 -0
- package/dist/bridges/sensitivity.d.ts +13 -0
- package/dist/bridges/sensitivity.d.ts.map +1 -0
- package/dist/bridges/sensitivity.js +58 -0
- package/dist/bridges/sensitivity.js.map +1 -0
- package/dist/cli/command.d.ts +0 -3
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js +0 -13
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/confront.d.ts +3 -0
- package/dist/cli/commands/confront.d.ts.map +1 -0
- package/dist/cli/commands/confront.js +94 -0
- package/dist/cli/commands/confront.js.map +1 -0
- package/dist/cli/commands/connectors.d.ts.map +1 -1
- package/dist/cli/commands/connectors.js +15 -6
- package/dist/cli/commands/connectors.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +19 -6
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +8 -1
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli-api.d.ts +6 -0
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +6 -0
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +4 -1
- package/dist/composition/canonical-graph.d.ts.map +1 -1
- package/dist/composition/canonical-graph.js +19 -4
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/compose.d.ts +20 -0
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +45 -0
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/consequence.d.ts +62 -0
- package/dist/composition/consequence.d.ts.map +1 -0
- package/dist/composition/consequence.js +82 -0
- package/dist/composition/consequence.js.map +1 -0
- package/dist/composition/discovery.d.ts +30 -3
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +55 -6
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/quantities/common.d.ts.map +1 -1
- package/dist/composition/quantities/common.js +8 -2
- package/dist/composition/quantities/common.js.map +1 -1
- package/dist/composition/quantities/condensed-matter.d.ts.map +1 -1
- package/dist/composition/quantities/condensed-matter.js +4 -1
- package/dist/composition/quantities/condensed-matter.js.map +1 -1
- package/dist/composition/quantities/fields.d.ts.map +1 -1
- package/dist/composition/quantities/fields.js +3 -1
- package/dist/composition/quantities/fields.js.map +1 -1
- package/dist/composition/quantities/gravitation-cosmology.d.ts.map +1 -1
- package/dist/composition/quantities/gravitation-cosmology.js +3 -1
- package/dist/composition/quantities/gravitation-cosmology.js.map +1 -1
- package/dist/composition/quantities/quantum.d.ts.map +1 -1
- package/dist/composition/quantities/quantum.js +9 -4
- package/dist/composition/quantities/quantum.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- 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,9 +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.
|
|
251
|
-
|
|
252
|
-
parser-consolidation program publishes to npm once all phases land) — building on
|
|
251
|
+
**Current version:** v0.33.0 — [npm `latest`](https://www.npmjs.com/package/universal-physics-tensor)
|
|
252
|
+
matches (registry-verified 2026-07-02) — building on
|
|
253
253
|
the **v0.8.0 → v0.23.0** rollup arc (composition
|
|
254
254
|
graph + GW170817 / BE-23 data confrontations + catalog adjudication, Part-IX
|
|
255
255
|
Phase C/D, the full catalog→graph migration, the bridge-inference +
|
|
@@ -272,11 +272,34 @@ adds **`upt map --equation`** — drop your own equation onto the map, with
|
|
|
272
272
|
public **`parsePhysics`** (string → dimensional `ExprNode`) and single-unknown
|
|
273
273
|
dimensional inference. v0.27.0 **consolidates the ASTs** — both parser front-ends
|
|
274
274
|
now transpile through one normalized path to `ExprNode`, the single semantic IR.
|
|
275
|
+
v0.28.0 is the first npm release since v0.25.0 (npm `latest` jumps
|
|
276
|
+
0.25.0 → 0.28.0; v0.26.0/v0.27.0 were GitHub-only), shipping the Adam+Eve
|
|
277
|
+
**canonical-L-layer expansion 26 → 66 equations**. v0.29.0, the "three
|
|
278
|
+
frontiers" release, lands the catalog's first **established-bridge real-data
|
|
279
|
+
confrontation** — `confrontBE52` vs Mercury's anomalous perihelion advance,
|
|
280
|
+
agreeing within 1σ (data-confronted bridges 2 → 3) — plus three adjudication
|
|
281
|
+
passes that closed out the discovery-pipeline's candidate sets (8 machine-
|
|
282
|
+
surfaced candidates, 0 false positives promoted). v0.30.0 is a **CLI
|
|
283
|
+
overhaul**: `bin/upt.mjs` shrinks to a ~22-line shim over a typed `src/cli/`
|
|
284
|
+
module, every data-bearing command gains a `--json` envelope, `--source=
|
|
285
|
+
catalog|canonical|both` extends to all 8 graph-analysis commands, and
|
|
286
|
+
unknown/mistyped flags now exit 2 instead of being silently ignored. v0.31.0
|
|
287
|
+
(discovery-hardening Phase 1) adds an **adjudication ledger**
|
|
288
|
+
(`src/composition/adjudication.ts`) plus a calibration benchmark, so `upt
|
|
289
|
+
discover` remembers past human verdicts and folds recorded decoy/entailed
|
|
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.
|
|
275
298
|
|
|
276
299
|
| Metric | Value |
|
|
277
300
|
|---|---|
|
|
278
301
|
| 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) |
|
|
279
|
-
| Test suite | **
|
|
302
|
+
| Test suite | **3512** passing (4 skipped, 1 todo; incl. property-based algebra tests) across 327 files — gated by CI |
|
|
280
303
|
| `tsc --noEmit` | clean (src + strict `tsc -p tsconfig.tests.json`) |
|
|
281
304
|
| GR validation anchors | BE-52 Mercury perihelion relErr 1.8×10⁻⁷ · BE-37 Shapiro delay relErr ~2×10⁻⁸ |
|
|
282
305
|
| First derived relation | E_min(M) = ℏc³ln2/(8πGM) from BE-42 ∘ BE-16, relErr ≤ 10⁻¹² (pre-registered CT-1) |
|
|
@@ -329,10 +352,16 @@ spec's own revision ledger is at
|
|
|
329
352
|
namespacing rule (`CompositionAliasError` + reviewable
|
|
330
353
|
`SOURCE_ALIAS_DISPOSITIONS`); the ~90 new quantity-naming judgments
|
|
331
354
|
are the standing physicist-review surface.
|
|
332
|
-
- **More data confrontations** — GW170817 → BE-36
|
|
355
|
+
- **More data confrontations** — GW170817 → BE-36, the BE-23
|
|
333
356
|
Planckian-dissipation check (Legros et al. 2019, honest
|
|
334
|
-
aggregate-level encoding)
|
|
335
|
-
|
|
357
|
+
aggregate-level encoding), BE-37 Shapiro delay → Cassini PPN-γ, and
|
|
358
|
+
BE-48 GRW collapse rate → the LISA-Pathfinder CSL bound have shipped
|
|
359
|
+
(data-confronted bridges 3 → 5), unified behind `upt confront
|
|
360
|
+
[--bridge] [--sensitivity]` and a typed observation registry. Upgrading
|
|
361
|
+
BE-23 to the per-material α table, BE-16 Landauer/Bérut (machinery
|
|
362
|
+
built, paywalled Fig-4 asymptote pending), and the BE-38 MOND/SPARC
|
|
363
|
+
deep-limit (contingent on a genuine-test determination) are the next
|
|
364
|
+
bounded steps.
|
|
336
365
|
- **Three.js / game-engine class visualization** in a separate repo
|
|
337
366
|
(out of UPT scope per project decision; see
|
|
338
367
|
`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
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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;
|
|
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
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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([
|
|
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;
|
|
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":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAUhE,MAAM,SAAS,GAAuB;IACpC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,qDAAqD;IAC5D,IAAI,EAAE,OAAO;IACb,GAAG;QACD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,CAAC,CAAC,4BAA4B;YACzC,QAAQ,EAAE,CAAC,CAAC,2BAA2B;YACvC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,iCAAiC;YACtD,eAAe,EAAE,CAAC,CAAC,iBAAiB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,EAAE,gBAAgB;YACvB,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;SACtF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAuB;IACpC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,6DAA6D;IACpE,IAAI,EAAE,OAAO;IACb,GAAG;QACD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,yEAAyE;QACzE,+DAA+D;QAC/D,wEAAwE;QACxE,gEAAgE;QAChE,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,CAAC,CAAC,cAAc;YAC1B,KAAK,EAAE,CAAC,CAAC,iBAAiB;YAC1B,eAAe,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,CAAC;YAC5E,cAAc,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAChF,KAAK,EAAE,mBAAmB;YAC1B,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;SACtF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,kFAAkF;AAClF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,oEAAoE;AACpE,MAAM,SAAS,GAAuB;IACpC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,aAAa;IACnB,GAAG;QACD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,CAAC,CAAC,YAAY;YACzB,KAAK,EAAE,CAAC,CAAC,UAAU;YACnB,SAAS,EAAE,CAAC,CAAC,kBAAkB;YAC/B,KAAK,EAAE,gCAAgC;YACvC,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;gBAChC,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,YAAY;gBACvB,IAAI,EAAE,0BAA0B,CAAC,CAAC,UAAU,WAAW,CAAC,CAAC,UAAU,uBAAuB,CAAC,CAAC,YAAY,EAAE;aAC3G;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAuB;IACpC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,qDAAqD;IAC5D,IAAI,EAAE,OAAO;IACb,GAAG;QACD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,CAAC,CAAC,eAAe;YAC5B,QAAQ,EAAE,CAAC,CAAC,cAAc;YAC1B,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB;YACzC,eAAe,EAAE,CAAC,CAAC,iBAAiB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,EAAE,uBAAuB;YAC9B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU;SACrC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAuB;IACpC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,4DAA4D;IACnE,IAAI,EAAE,aAAa;IACnB,GAAG;QACD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,CAAC,CAAC,oBAAoB;YACjC,KAAK,EAAE,CAAC,CAAC,gBAAgB;YACzB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,qBAAqB;YAC5B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU;SACrC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA6B;IACnD,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,EAAE,SAAS,CAAC;CAChB,CAAC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAA4C,QAAQ,CAAC;AAEhF,yDAAyD;AACzD,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -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"}
|