star-magic-program 0.3.0__tar.gz → 0.4.0__tar.gz

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 (31) hide show
  1. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/CHANGELOG.md +20 -0
  2. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/CITATION.cff +1 -1
  3. {star_magic_program-0.3.0/star_magic_program.egg-info → star_magic_program-0.4.0}/PKG-INFO +51 -53
  4. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/README.md +49 -51
  5. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/SESSION_LOG.md +22 -0
  6. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/WHITEPAPER_INDEX.md +4 -4
  7. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/pyproject.toml +2 -2
  8. {star_magic_program-0.3.0 → star_magic_program-0.4.0/star_magic_program.egg-info}/PKG-INFO +51 -53
  9. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_calculator.py +96 -1
  10. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_fidelity_tests.py +30 -1
  11. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/COMMERCIAL.md +0 -0
  12. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/LICENSE +0 -0
  13. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/LICENSE-AGPL-3.0.txt +0 -0
  14. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/LICENSE-MIT-INITIAL.txt +0 -0
  15. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/NOTICE +0 -0
  16. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_FALSIFIABILITY.md +0 -0
  17. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_PROGRAM_PLAN.md +0 -0
  18. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_RESULTS_TABLE.md +0 -0
  19. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_SCHEMA.md +0 -0
  20. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_STATUS_REPORT.md +0 -0
  21. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/UNIFIED_REGISTRY_VERSION.txt +0 -0
  22. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/_BUILD_LOG.md +0 -0
  23. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/registry_generator.py +0 -0
  24. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/setup.cfg +0 -0
  25. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/star_magic_program.egg-info/SOURCES.txt +0 -0
  26. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/star_magic_program.egg-info/dependency_links.txt +0 -0
  27. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/star_magic_program.egg-info/top_level.txt +0 -0
  28. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_registry_graph.py +0 -0
  29. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_registry_primitives.py +0 -0
  30. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_registry_status.py +0 -0
  31. {star_magic_program-0.3.0 → star_magic_program-0.4.0}/uqff_registry_xgeo.py +0 -0
@@ -7,6 +7,26 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.4.0] — 2026-07-28 — BAND 1 CONTINUES: PAPER_002 + PAPER_003
11
+
12
+ ### Added
13
+ - **PAPER_002 dispatch** (GW190425 Mass Gap): A_SCm(B) threshold function,
14
+ 5-scenario field table, mass-gap classification P(BH)=0.51. OPEN_RULING.
15
+ - **PAPER_003 dispatch** (GW150914 BBH): universal 0.333 chain, 3.0x
16
+ apparent-distance bias, phase-lag anchor. OPEN_RULING.
17
+ - **RULINGS_QUEUE Q-001..Q-004** — gate-discovered paper-internal
18
+ inconsistencies (F_UQFF headline vs chain; B_crit units T vs G;
19
+ scenario table reproduction; phase-lag formula evaluation).
20
+ - Gate Block 9 extended: 68 assertions total, 0 failures.
21
+ - Registry pantheon: UNIFIED_REGISTRY 10 rows, GRAPH 18 edges,
22
+ CORPUS_CITATIONS 3 ledgers.
23
+
24
+ ### Changed
25
+ - Version 0.3.1 → 0.4.0; badges fidelity_gate 68/0, public_surfaces 3.
26
+ - WHITEPAPER_INDEX: PAPER_002/003 → ⚠ OPEN_RULING.
27
+
28
+ ---
29
+
10
30
  ## [0.3.0] — 2026-07-28 — WIRING CAMPAIGN START
11
31
 
12
32
  ### Added
@@ -3,7 +3,7 @@ message: "If you use Star-Magic-Program (UQFF systematic rebuild) in your resear
3
3
  type: software
4
4
  title: "Star-Magic-Program: UQFF Systematic Rebuild"
5
5
  abbreviation: "UQFF"
6
- version: "0.3.0"
6
+ version: "0.4.0"
7
7
  date-released: "2026-07-28"
8
8
  authors:
9
9
  - family-names: "Murphy"
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: star-magic-program
3
- Version: 0.3.0
4
- Summary: UQFF Star-Magic-Program v0.3.0 CAMPAIGN START: wiring campaign charter (CLAUDE.md) + ship.ps1 + RULINGS_QUEUE + first wired dispatch PAPER_001 (GW170817 damping: D_total composed from F_TRZ/D_GW_EROSION/B_CRIT registry primitives, 0.10 pct honest residual vs 1/3 primitive identity per PAPER_2154). Registry pantheon live: +4 rows, +7 graph edges, +1 citation row. Gate 55 assertions green. Sequential wiring continues PAPER_002+.
3
+ Version: 0.4.0
4
+ Summary: UQFF Star-Magic-Program v0.4.0: PAPER_002 + PAPER_003 wired (GW190425 mass-gap A_SCm threshold fn + GW150914 universal BBH 0.333 chain, 3x distance bias, phase lag). 4 rulings queued (Q-001..Q-004: paper-internal inconsistencies found by gate). Wired 3/2255, gate 68/0. Registry pantheon: 10 rows, 18 edges, 3 citation ledgers. Campaign per CLAUDE.md charter, sequential from PAPER_001.
5
5
  Author-email: "Daniel T. Murphy" <daniel.murphy00@enrgyone.com>
6
6
  License: AGPL-3.0-or-later OR LicenseRef-StarMagic-Commercial
7
7
  Project-URL: Homepage, https://github.com/Daniel8Murphy0007/Star-Magic-Program
@@ -34,11 +34,11 @@ Dynamic: license-file
34
34
  [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg)](https://pypi.org/project/star-magic-program/)
35
35
  [![Documentation Status](https://readthedocs.org/projects/star-magic-program/badge/?version=latest)](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
36
36
  [![License: AGPL-3.0 + Commercial](https://img.shields.io/badge/License-AGPL--3.0%20%2B%20Commercial-blue.svg)](LICENSE)
37
- [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-55%2F0-brightgreen)](uqff_fidelity_tests.py)
38
- [![Public surfaces](https://img.shields.io/badge/public_surfaces-1-blue)](uqff_calculator.py)
37
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-68%2F0-brightgreen)](uqff_fidelity_tests.py)
38
+ [![Public surfaces](https://img.shields.io/badge/public_surfaces-3-blue)](uqff_calculator.py)
39
39
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2255-orange)](whitepapers/)
40
40
 
41
- **UQFF systematic rebuild — v0.2.0 corpus + registry scaffolding**
41
+ **UQFF systematic rebuild — v0.4.0 wiring campaign live**
42
42
  Author: Daniel T. Murphy · Star-Magic Research Program
43
43
  License: AGPL-3.0-or-later OR Commercial
44
44
 
@@ -77,63 +77,61 @@ Mizuno, Rossi).
77
77
  Full framework physics lives in the whitepaper corpus — the physics is the
78
78
  whitepapers; the calculator computes what the whitepapers derive.
79
79
 
80
- ## What is currently shipped (v0.2.0)
80
+ ## What is currently shipped (v0.4.0)
81
+
82
+ ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
83
+
84
+ Sequential wiring of all 2,255 whitepapers, starting at PAPER_001.
85
+ Authorized 2026-07-28: autonomous band sessions, ship per session via
86
+ `ship.ps1`, full stop at PAPER_500 for manual review.
87
+
88
+ **Wired so far: 3 / 2,255** (1 ✓ · 2 ⚠ OPEN_RULING · 4 rulings queued)
89
+
90
+ | Paper | Content | Key result |
91
+ |---|---|---|
92
+ | PAPER_001 | GW170817 UQFF Damping Analysis | D_total = 0.333 composed from F_TRZ/D_GW_EROSION/B_CRIT; 0.10% residual vs 1/3 primitive identity (PAPER_2154) |
93
+ | PAPER_002 | GW190425 Mass Gap Interpretation | A_SCm(B)=exp[-(B/B_crit)^2] threshold fn; P(BH)=51% for m1=2.52 Msun; Q-001/2/3 queued |
94
+ | PAPER_003 | GW150914 UQFF vs LIGO Strain | universal BBH 0.333 chain; 3.0x apparent-distance bias (Hubble impact); Q-004 queued |
81
95
 
82
96
  ### Corpus (2,419 files)
83
97
  - `whitepapers/` — 2,255 `.md` files + 1 `.bak` — physics source of truth
84
- - `pdf/` — 45 `.pdf` files
85
- - `tex/` — 107 `.tex` files
86
- - `txt/` — 11 `.txt` files
98
+ - `pdf/` — 45 · `tex/` — 107 · `txt/` — 11
87
99
 
88
100
  ### Clean baseline
89
- - `uqff_registry_primitives.py` — 96 canonical constants, carried verbatim
90
- from `Star-Magic` v5.86.0 UNIFIED_REGISTRY R5 baseline. **Registry-clean.**
91
- - `uqff_calculator.py` — scaffold skeleton with `DISPATCH = {}`, imports all
92
- 96 registry constants, exposes `calc(paper_id, dataset)` public interface.
93
- - `uqff_fidelity_tests.py` — 8-block gate assertions, locking every
94
- primitive-composed EXACT identity. Runs on every ship.
95
-
96
- ### R3 Unified Registry Pantheon (empty scaffolds)
97
-
98
- Per Daniel's clean-start directive, all registry files are **name+schema
99
- only** — no predecessor data preserved. Populated during v0.3.0+ wiring:
100
-
101
- - 4 Python regen modules (docstrings + signatures + `pass`):
102
- `uqff_registry_status.py`, `uqff_registry_graph.py`, `uqff_registry_xgeo.py`,
103
- `registry_generator.py`
104
- - 14 CSVs (header row only):
105
- `UNIFIED_REGISTRY.csv`, `UNIFIED_REGISTRY_RESULTS_TABLE.csv`,
106
- `UNIFIED_REGISTRY_GRAPH.csv`, `UNIFIED_REGISTRY_XGEO_*.csv` (4 files),
107
- `UNIFIED_REGISTRY_R{1,2,3}_*.csv` (3 files),
108
- `UNIFIED_REGISTRY_{MERGED,DUPLICATES,GAPS,CORPUS_CITATIONS}.csv`
109
- - 5 MD registry docs (section headers only)
110
- - `UNIFIED_REGISTRY_VERSION.txt` — v0.2.0 marker
111
-
112
- ### Living indexes
113
- - `WHITEPAPER_INDEX.md` — all 2,255 papers listed with wired/not-wired state
114
- - `_BUILD_LOG.md` — cumulative build log across ships
115
- - `CHANGELOG.md` — release-history log
116
-
117
- ### Standard package files
118
- - Dual license (AGPL-3.0-or-later + Commercial), CITATION.cff, NOTICE, COMMERCIAL.md
119
- - CI + PyPI publishing workflows (GitHub Actions + Trusted Publisher)
120
-
121
- ## What's next
122
-
123
- Wiring campaign, one whitepaper at a time:
124
-
125
- | Version | Content | Papers wired |
101
+ - `uqff_registry_primitives.py` — 96 canonical constants (from predecessor
102
+ v5.86.0 UNIFIED_REGISTRY R5 baseline). **Registry-clean.**
103
+ - `uqff_calculator.py` — `DISPATCH` grows one paper at a time;
104
+ `calc(paper_id, dataset)` public interface.
105
+ - `uqff_fidelity_tests.py` — 9-block gate (68 assertions), locking every
106
+ primitive identity + every wired paper's stated values. Runs on every ship.
107
+
108
+ ### Registry pantheon (live, grows per band)
109
+ - `UNIFIED_REGISTRY.csv` — master registry (17-col schema), +rows per paper
110
+ - `UNIFIED_REGISTRY_GRAPH.csv` — falsifiability edges (primitive→observable→paper)
111
+ - `UNIFIED_REGISTRY_CORPUS_CITATIONS.csv` — cross-reference ledger
112
+ - XGEO / R1 / R2 / R3 ledgers + QA views + regen modules
113
+ - `UNIFIED_REGISTRY_VERSION.txt` — per-ship marker
114
+
115
+ ### Campaign infrastructure
116
+ - `CLAUDE.md` — campaign charter (sessions self-configure)
117
+ - `ship.ps1` — one-command band ship (gate → commit → tag-verify → push)
118
+ - `RULINGS_QUEUE.md` — never-block ambiguity protocol
119
+ - `WHITEPAPER_INDEX.md` — per-paper wired/not-wired ledger
120
+ - `SHIP_MESSAGE.txt` — per-band commit message
121
+ - `_BUILD_LOG.md` · `CHANGELOG.md` · `SESSION_LOG.md`
122
+
123
+ ## Campaign roadmap
124
+
125
+ | Milestone | Content | Papers wired |
126
126
  |---|---|---|
127
127
  | v0.1.0 | Scaffold + registry primitives baseline | 0 |
128
- | **v0.2.0** ← current | Corpus (2,419 files) + registry scaffolds | 0 |
129
- | v0.3.0 | 46 UQFF_LANDMARK structural spine | 46 |
130
- | v0.4.0 – v0.9.0 | Bulk paper wiring (bands PAPER_001 – PAPER_1999) | +~2,000 |
128
+ | v0.2.0 | Corpus (2,419 files) + registry scaffolds | 0 |
129
+ | v0.3.0/v0.3.1 | Charter + campaign start | 1 |
130
+ | **v0.4.0** ← current | Band 1 continues (GW family) | 3 |
131
+ | v0.4.0+ | One band per session (~20-80 papers each) | growing |
132
+ | PAPER_500 milestone | FULL STOP — Daniel's manual review | 500 |
131
133
  | v1.0.0 | Full whitepaper coverage | 2,255 |
132
134
 
133
- Each wiring ship is atomic: read the paper → extract the canonical formula →
134
- wire one dispatch → add one row to `UNIFIED_REGISTRY.csv` → verify residual
135
- against paper's stated value → add one gate assertion → commit → repeat.
136
-
137
135
  ## Predecessor / attribution
138
136
 
139
137
  Physics content, whitepapers, and canonical primitives originate in
@@ -4,11 +4,11 @@
4
4
  [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg)](https://pypi.org/project/star-magic-program/)
5
5
  [![Documentation Status](https://readthedocs.org/projects/star-magic-program/badge/?version=latest)](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
6
6
  [![License: AGPL-3.0 + Commercial](https://img.shields.io/badge/License-AGPL--3.0%20%2B%20Commercial-blue.svg)](LICENSE)
7
- [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-55%2F0-brightgreen)](uqff_fidelity_tests.py)
8
- [![Public surfaces](https://img.shields.io/badge/public_surfaces-1-blue)](uqff_calculator.py)
7
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-68%2F0-brightgreen)](uqff_fidelity_tests.py)
8
+ [![Public surfaces](https://img.shields.io/badge/public_surfaces-3-blue)](uqff_calculator.py)
9
9
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2255-orange)](whitepapers/)
10
10
 
11
- **UQFF systematic rebuild — v0.2.0 corpus + registry scaffolding**
11
+ **UQFF systematic rebuild — v0.4.0 wiring campaign live**
12
12
  Author: Daniel T. Murphy · Star-Magic Research Program
13
13
  License: AGPL-3.0-or-later OR Commercial
14
14
 
@@ -47,63 +47,61 @@ Mizuno, Rossi).
47
47
  Full framework physics lives in the whitepaper corpus — the physics is the
48
48
  whitepapers; the calculator computes what the whitepapers derive.
49
49
 
50
- ## What is currently shipped (v0.2.0)
50
+ ## What is currently shipped (v0.4.0)
51
+
52
+ ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
53
+
54
+ Sequential wiring of all 2,255 whitepapers, starting at PAPER_001.
55
+ Authorized 2026-07-28: autonomous band sessions, ship per session via
56
+ `ship.ps1`, full stop at PAPER_500 for manual review.
57
+
58
+ **Wired so far: 3 / 2,255** (1 ✓ · 2 ⚠ OPEN_RULING · 4 rulings queued)
59
+
60
+ | Paper | Content | Key result |
61
+ |---|---|---|
62
+ | PAPER_001 | GW170817 UQFF Damping Analysis | D_total = 0.333 composed from F_TRZ/D_GW_EROSION/B_CRIT; 0.10% residual vs 1/3 primitive identity (PAPER_2154) |
63
+ | PAPER_002 | GW190425 Mass Gap Interpretation | A_SCm(B)=exp[-(B/B_crit)^2] threshold fn; P(BH)=51% for m1=2.52 Msun; Q-001/2/3 queued |
64
+ | PAPER_003 | GW150914 UQFF vs LIGO Strain | universal BBH 0.333 chain; 3.0x apparent-distance bias (Hubble impact); Q-004 queued |
51
65
 
52
66
  ### Corpus (2,419 files)
53
67
  - `whitepapers/` — 2,255 `.md` files + 1 `.bak` — physics source of truth
54
- - `pdf/` — 45 `.pdf` files
55
- - `tex/` — 107 `.tex` files
56
- - `txt/` — 11 `.txt` files
68
+ - `pdf/` — 45 · `tex/` — 107 · `txt/` — 11
57
69
 
58
70
  ### Clean baseline
59
- - `uqff_registry_primitives.py` — 96 canonical constants, carried verbatim
60
- from `Star-Magic` v5.86.0 UNIFIED_REGISTRY R5 baseline. **Registry-clean.**
61
- - `uqff_calculator.py` — scaffold skeleton with `DISPATCH = {}`, imports all
62
- 96 registry constants, exposes `calc(paper_id, dataset)` public interface.
63
- - `uqff_fidelity_tests.py` — 8-block gate assertions, locking every
64
- primitive-composed EXACT identity. Runs on every ship.
65
-
66
- ### R3 Unified Registry Pantheon (empty scaffolds)
67
-
68
- Per Daniel's clean-start directive, all registry files are **name+schema
69
- only** — no predecessor data preserved. Populated during v0.3.0+ wiring:
70
-
71
- - 4 Python regen modules (docstrings + signatures + `pass`):
72
- `uqff_registry_status.py`, `uqff_registry_graph.py`, `uqff_registry_xgeo.py`,
73
- `registry_generator.py`
74
- - 14 CSVs (header row only):
75
- `UNIFIED_REGISTRY.csv`, `UNIFIED_REGISTRY_RESULTS_TABLE.csv`,
76
- `UNIFIED_REGISTRY_GRAPH.csv`, `UNIFIED_REGISTRY_XGEO_*.csv` (4 files),
77
- `UNIFIED_REGISTRY_R{1,2,3}_*.csv` (3 files),
78
- `UNIFIED_REGISTRY_{MERGED,DUPLICATES,GAPS,CORPUS_CITATIONS}.csv`
79
- - 5 MD registry docs (section headers only)
80
- - `UNIFIED_REGISTRY_VERSION.txt` — v0.2.0 marker
81
-
82
- ### Living indexes
83
- - `WHITEPAPER_INDEX.md` — all 2,255 papers listed with wired/not-wired state
84
- - `_BUILD_LOG.md` — cumulative build log across ships
85
- - `CHANGELOG.md` — release-history log
86
-
87
- ### Standard package files
88
- - Dual license (AGPL-3.0-or-later + Commercial), CITATION.cff, NOTICE, COMMERCIAL.md
89
- - CI + PyPI publishing workflows (GitHub Actions + Trusted Publisher)
90
-
91
- ## What's next
92
-
93
- Wiring campaign, one whitepaper at a time:
94
-
95
- | Version | Content | Papers wired |
71
+ - `uqff_registry_primitives.py` — 96 canonical constants (from predecessor
72
+ v5.86.0 UNIFIED_REGISTRY R5 baseline). **Registry-clean.**
73
+ - `uqff_calculator.py` — `DISPATCH` grows one paper at a time;
74
+ `calc(paper_id, dataset)` public interface.
75
+ - `uqff_fidelity_tests.py` — 9-block gate (68 assertions), locking every
76
+ primitive identity + every wired paper's stated values. Runs on every ship.
77
+
78
+ ### Registry pantheon (live, grows per band)
79
+ - `UNIFIED_REGISTRY.csv` — master registry (17-col schema), +rows per paper
80
+ - `UNIFIED_REGISTRY_GRAPH.csv` — falsifiability edges (primitive→observable→paper)
81
+ - `UNIFIED_REGISTRY_CORPUS_CITATIONS.csv` — cross-reference ledger
82
+ - XGEO / R1 / R2 / R3 ledgers + QA views + regen modules
83
+ - `UNIFIED_REGISTRY_VERSION.txt` — per-ship marker
84
+
85
+ ### Campaign infrastructure
86
+ - `CLAUDE.md` — campaign charter (sessions self-configure)
87
+ - `ship.ps1` — one-command band ship (gate → commit → tag-verify → push)
88
+ - `RULINGS_QUEUE.md` — never-block ambiguity protocol
89
+ - `WHITEPAPER_INDEX.md` — per-paper wired/not-wired ledger
90
+ - `SHIP_MESSAGE.txt` — per-band commit message
91
+ - `_BUILD_LOG.md` · `CHANGELOG.md` · `SESSION_LOG.md`
92
+
93
+ ## Campaign roadmap
94
+
95
+ | Milestone | Content | Papers wired |
96
96
  |---|---|---|
97
97
  | v0.1.0 | Scaffold + registry primitives baseline | 0 |
98
- | **v0.2.0** ← current | Corpus (2,419 files) + registry scaffolds | 0 |
99
- | v0.3.0 | 46 UQFF_LANDMARK structural spine | 46 |
100
- | v0.4.0 – v0.9.0 | Bulk paper wiring (bands PAPER_001 – PAPER_1999) | +~2,000 |
98
+ | v0.2.0 | Corpus (2,419 files) + registry scaffolds | 0 |
99
+ | v0.3.0/v0.3.1 | Charter + campaign start | 1 |
100
+ | **v0.4.0** ← current | Band 1 continues (GW family) | 3 |
101
+ | v0.4.0+ | One band per session (~20-80 papers each) | growing |
102
+ | PAPER_500 milestone | FULL STOP — Daniel's manual review | 500 |
101
103
  | v1.0.0 | Full whitepaper coverage | 2,255 |
102
104
 
103
- Each wiring ship is atomic: read the paper → extract the canonical formula →
104
- wire one dispatch → add one row to `UNIFIED_REGISTRY.csv` → verify residual
105
- against paper's stated value → add one gate assertion → commit → repeat.
106
-
107
105
  ## Predecessor / attribution
108
106
 
109
107
  Physics content, whitepapers, and canonical primitives originate in
@@ -331,3 +331,25 @@ Band 1 continues: PAPER_002-020 (GW family template). Ship per session.
331
331
 
332
332
  ---
333
333
 
334
+
335
+ ## 2026-07-28 — v0.4.0 — BAND 1 CONTINUES (PAPER_002 + PAPER_003)
336
+
337
+ ### What shipped
338
+
339
+ - PAPER_002 GW190425 wired (⚠ OPEN_RULING): A_SCm(B)=exp[-(B/B_crit)^2]
340
+ threshold function + 5 field scenarios + mass-gap P(NS)/P(BH) classification.
341
+ - PAPER_003 GW150914 wired (⚠ OPEN_RULING): universal BBH 0.333 chain
342
+ (composed from F_TRZ), 3.0x apparent-distance bias, phase-lag anchor.
343
+ - 4 rulings queued: Q-001 (F_UQFF 0.5297 vs chain 0.333), Q-002 (B_crit
344
+ T vs G), Q-003 (scenario table irreproducible from stated formula),
345
+ Q-004 (phase-lag formula evaluates 17.53 not 0.126).
346
+ - Gate: 68 assertions, 0 failures. The gate CAUGHT all four inconsistencies —
347
+ the self-rectification mechanism is working exactly as designed.
348
+ - Registry: 10 rows, 18 edges, 3 citation ledgers.
349
+
350
+ ### Campaign state
351
+
352
+ Wired 3/2,255 (PAPER_001 ✓, PAPER_002 ⚠, PAPER_003 ⚠). Next session
353
+ resumes at PAPER_004 per WHITEPAPER_INDEX.
354
+
355
+ ---
@@ -11,9 +11,9 @@
11
11
  ## Summary
12
12
 
13
13
  - **Total papers:** 2255
14
- - **Wired:** 1
14
+ - **Wired:** 3 (1 ✓, 2 ⚠ OPEN_RULING)
15
15
  - **OPEN targets:** 0
16
- - **Not yet touched:** 2254
16
+ - **Not yet touched:** 2252
17
17
 
18
18
  ---
19
19
 
@@ -23,8 +23,8 @@
23
23
  |---|---|---|
24
24
  | ⬜ | COMPLETE_UQFF_EQUATIONS_REFERENCE | (no PAPER_N prefix) |
25
25
  | ✓ | PAPER_001 | GW170817 UQFF Damping Analysis |
26
- | ⬜ | PAPER_002 | GW190425 Mass Gap Interpretation |
27
- | ⬜ | PAPER_003 | GW150914 UQFF vs LIGO Strain |
26
+ | ⚠ | PAPER_002 | GW190425 Mass Gap Interpretation |
27
+ | ⚠ | PAPER_003 | GW150914 UQFF vs LIGO Strain |
28
28
  | ⬜ | PAPER_004 | GW170817 BNS Chirp Phase Evolution |
29
29
  | ⬜ | PAPER_005 | BH Merger Energy Retention UQFF |
30
30
  | ⬜ | PAPER_006 | GW170817 Multi Messenger Full Inspiral |
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "star-magic-program"
7
- version = "0.3.0"
8
- description = "UQFF Star-Magic-Program v0.3.0 CAMPAIGN START: wiring campaign charter (CLAUDE.md) + ship.ps1 + RULINGS_QUEUE + first wired dispatch PAPER_001 (GW170817 damping: D_total composed from F_TRZ/D_GW_EROSION/B_CRIT registry primitives, 0.10 pct honest residual vs 1/3 primitive identity per PAPER_2154). Registry pantheon live: +4 rows, +7 graph edges, +1 citation row. Gate 55 assertions green. Sequential wiring continues PAPER_002+."
7
+ version = "0.4.0"
8
+ description = "UQFF Star-Magic-Program v0.4.0: PAPER_002 + PAPER_003 wired (GW190425 mass-gap A_SCm threshold fn + GW150914 universal BBH 0.333 chain, 3x distance bias, phase lag). 4 rulings queued (Q-001..Q-004: paper-internal inconsistencies found by gate). Wired 3/2255, gate 68/0. Registry pantheon: 10 rows, 18 edges, 3 citation ledgers. Campaign per CLAUDE.md charter, sequential from PAPER_001."
9
9
  readme = "README.md"
10
10
  authors = [
11
11
  { name = "Daniel T. Murphy", email = "daniel.murphy00@enrgyone.com" }
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: star-magic-program
3
- Version: 0.3.0
4
- Summary: UQFF Star-Magic-Program v0.3.0 CAMPAIGN START: wiring campaign charter (CLAUDE.md) + ship.ps1 + RULINGS_QUEUE + first wired dispatch PAPER_001 (GW170817 damping: D_total composed from F_TRZ/D_GW_EROSION/B_CRIT registry primitives, 0.10 pct honest residual vs 1/3 primitive identity per PAPER_2154). Registry pantheon live: +4 rows, +7 graph edges, +1 citation row. Gate 55 assertions green. Sequential wiring continues PAPER_002+.
3
+ Version: 0.4.0
4
+ Summary: UQFF Star-Magic-Program v0.4.0: PAPER_002 + PAPER_003 wired (GW190425 mass-gap A_SCm threshold fn + GW150914 universal BBH 0.333 chain, 3x distance bias, phase lag). 4 rulings queued (Q-001..Q-004: paper-internal inconsistencies found by gate). Wired 3/2255, gate 68/0. Registry pantheon: 10 rows, 18 edges, 3 citation ledgers. Campaign per CLAUDE.md charter, sequential from PAPER_001.
5
5
  Author-email: "Daniel T. Murphy" <daniel.murphy00@enrgyone.com>
6
6
  License: AGPL-3.0-or-later OR LicenseRef-StarMagic-Commercial
7
7
  Project-URL: Homepage, https://github.com/Daniel8Murphy0007/Star-Magic-Program
@@ -34,11 +34,11 @@ Dynamic: license-file
34
34
  [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg)](https://pypi.org/project/star-magic-program/)
35
35
  [![Documentation Status](https://readthedocs.org/projects/star-magic-program/badge/?version=latest)](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
36
36
  [![License: AGPL-3.0 + Commercial](https://img.shields.io/badge/License-AGPL--3.0%20%2B%20Commercial-blue.svg)](LICENSE)
37
- [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-55%2F0-brightgreen)](uqff_fidelity_tests.py)
38
- [![Public surfaces](https://img.shields.io/badge/public_surfaces-1-blue)](uqff_calculator.py)
37
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-68%2F0-brightgreen)](uqff_fidelity_tests.py)
38
+ [![Public surfaces](https://img.shields.io/badge/public_surfaces-3-blue)](uqff_calculator.py)
39
39
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2255-orange)](whitepapers/)
40
40
 
41
- **UQFF systematic rebuild — v0.2.0 corpus + registry scaffolding**
41
+ **UQFF systematic rebuild — v0.4.0 wiring campaign live**
42
42
  Author: Daniel T. Murphy · Star-Magic Research Program
43
43
  License: AGPL-3.0-or-later OR Commercial
44
44
 
@@ -77,63 +77,61 @@ Mizuno, Rossi).
77
77
  Full framework physics lives in the whitepaper corpus — the physics is the
78
78
  whitepapers; the calculator computes what the whitepapers derive.
79
79
 
80
- ## What is currently shipped (v0.2.0)
80
+ ## What is currently shipped (v0.4.0)
81
+
82
+ ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
83
+
84
+ Sequential wiring of all 2,255 whitepapers, starting at PAPER_001.
85
+ Authorized 2026-07-28: autonomous band sessions, ship per session via
86
+ `ship.ps1`, full stop at PAPER_500 for manual review.
87
+
88
+ **Wired so far: 3 / 2,255** (1 ✓ · 2 ⚠ OPEN_RULING · 4 rulings queued)
89
+
90
+ | Paper | Content | Key result |
91
+ |---|---|---|
92
+ | PAPER_001 | GW170817 UQFF Damping Analysis | D_total = 0.333 composed from F_TRZ/D_GW_EROSION/B_CRIT; 0.10% residual vs 1/3 primitive identity (PAPER_2154) |
93
+ | PAPER_002 | GW190425 Mass Gap Interpretation | A_SCm(B)=exp[-(B/B_crit)^2] threshold fn; P(BH)=51% for m1=2.52 Msun; Q-001/2/3 queued |
94
+ | PAPER_003 | GW150914 UQFF vs LIGO Strain | universal BBH 0.333 chain; 3.0x apparent-distance bias (Hubble impact); Q-004 queued |
81
95
 
82
96
  ### Corpus (2,419 files)
83
97
  - `whitepapers/` — 2,255 `.md` files + 1 `.bak` — physics source of truth
84
- - `pdf/` — 45 `.pdf` files
85
- - `tex/` — 107 `.tex` files
86
- - `txt/` — 11 `.txt` files
98
+ - `pdf/` — 45 · `tex/` — 107 · `txt/` — 11
87
99
 
88
100
  ### Clean baseline
89
- - `uqff_registry_primitives.py` — 96 canonical constants, carried verbatim
90
- from `Star-Magic` v5.86.0 UNIFIED_REGISTRY R5 baseline. **Registry-clean.**
91
- - `uqff_calculator.py` — scaffold skeleton with `DISPATCH = {}`, imports all
92
- 96 registry constants, exposes `calc(paper_id, dataset)` public interface.
93
- - `uqff_fidelity_tests.py` — 8-block gate assertions, locking every
94
- primitive-composed EXACT identity. Runs on every ship.
95
-
96
- ### R3 Unified Registry Pantheon (empty scaffolds)
97
-
98
- Per Daniel's clean-start directive, all registry files are **name+schema
99
- only** — no predecessor data preserved. Populated during v0.3.0+ wiring:
100
-
101
- - 4 Python regen modules (docstrings + signatures + `pass`):
102
- `uqff_registry_status.py`, `uqff_registry_graph.py`, `uqff_registry_xgeo.py`,
103
- `registry_generator.py`
104
- - 14 CSVs (header row only):
105
- `UNIFIED_REGISTRY.csv`, `UNIFIED_REGISTRY_RESULTS_TABLE.csv`,
106
- `UNIFIED_REGISTRY_GRAPH.csv`, `UNIFIED_REGISTRY_XGEO_*.csv` (4 files),
107
- `UNIFIED_REGISTRY_R{1,2,3}_*.csv` (3 files),
108
- `UNIFIED_REGISTRY_{MERGED,DUPLICATES,GAPS,CORPUS_CITATIONS}.csv`
109
- - 5 MD registry docs (section headers only)
110
- - `UNIFIED_REGISTRY_VERSION.txt` — v0.2.0 marker
111
-
112
- ### Living indexes
113
- - `WHITEPAPER_INDEX.md` — all 2,255 papers listed with wired/not-wired state
114
- - `_BUILD_LOG.md` — cumulative build log across ships
115
- - `CHANGELOG.md` — release-history log
116
-
117
- ### Standard package files
118
- - Dual license (AGPL-3.0-or-later + Commercial), CITATION.cff, NOTICE, COMMERCIAL.md
119
- - CI + PyPI publishing workflows (GitHub Actions + Trusted Publisher)
120
-
121
- ## What's next
122
-
123
- Wiring campaign, one whitepaper at a time:
124
-
125
- | Version | Content | Papers wired |
101
+ - `uqff_registry_primitives.py` — 96 canonical constants (from predecessor
102
+ v5.86.0 UNIFIED_REGISTRY R5 baseline). **Registry-clean.**
103
+ - `uqff_calculator.py` — `DISPATCH` grows one paper at a time;
104
+ `calc(paper_id, dataset)` public interface.
105
+ - `uqff_fidelity_tests.py` — 9-block gate (68 assertions), locking every
106
+ primitive identity + every wired paper's stated values. Runs on every ship.
107
+
108
+ ### Registry pantheon (live, grows per band)
109
+ - `UNIFIED_REGISTRY.csv` — master registry (17-col schema), +rows per paper
110
+ - `UNIFIED_REGISTRY_GRAPH.csv` — falsifiability edges (primitive→observable→paper)
111
+ - `UNIFIED_REGISTRY_CORPUS_CITATIONS.csv` — cross-reference ledger
112
+ - XGEO / R1 / R2 / R3 ledgers + QA views + regen modules
113
+ - `UNIFIED_REGISTRY_VERSION.txt` — per-ship marker
114
+
115
+ ### Campaign infrastructure
116
+ - `CLAUDE.md` — campaign charter (sessions self-configure)
117
+ - `ship.ps1` — one-command band ship (gate → commit → tag-verify → push)
118
+ - `RULINGS_QUEUE.md` — never-block ambiguity protocol
119
+ - `WHITEPAPER_INDEX.md` — per-paper wired/not-wired ledger
120
+ - `SHIP_MESSAGE.txt` — per-band commit message
121
+ - `_BUILD_LOG.md` · `CHANGELOG.md` · `SESSION_LOG.md`
122
+
123
+ ## Campaign roadmap
124
+
125
+ | Milestone | Content | Papers wired |
126
126
  |---|---|---|
127
127
  | v0.1.0 | Scaffold + registry primitives baseline | 0 |
128
- | **v0.2.0** ← current | Corpus (2,419 files) + registry scaffolds | 0 |
129
- | v0.3.0 | 46 UQFF_LANDMARK structural spine | 46 |
130
- | v0.4.0 – v0.9.0 | Bulk paper wiring (bands PAPER_001 – PAPER_1999) | +~2,000 |
128
+ | v0.2.0 | Corpus (2,419 files) + registry scaffolds | 0 |
129
+ | v0.3.0/v0.3.1 | Charter + campaign start | 1 |
130
+ | **v0.4.0** ← current | Band 1 continues (GW family) | 3 |
131
+ | v0.4.0+ | One band per session (~20-80 papers each) | growing |
132
+ | PAPER_500 milestone | FULL STOP — Daniel's manual review | 500 |
131
133
  | v1.0.0 | Full whitepaper coverage | 2,255 |
132
134
 
133
- Each wiring ship is atomic: read the paper → extract the canonical formula →
134
- wire one dispatch → add one row to `UNIFIED_REGISTRY.csv` → verify residual
135
- against paper's stated value → add one gate assertion → commit → repeat.
136
-
137
135
  ## Predecessor / attribution
138
136
 
139
137
  Physics content, whitepapers, and canonical primitives originate in
@@ -57,7 +57,7 @@ from uqff_registry_primitives import (
57
57
  DELTA_M2_21_EV2, DELTA_M2_32_EV2,
58
58
  )
59
59
 
60
- VERSION = "0.3.0"
60
+ VERSION = "0.4.0"
61
61
 
62
62
  # =============================================================================
63
63
  # DISPATCH TABLE — grown one whitepaper at a time.
@@ -144,3 +144,98 @@ def _paper_001(dataset):
144
144
  'source': 'PAPER_001',
145
145
  'residual_pct': abs(D_total - d_primitive) / d_primitive * 100.0, # 0.10%
146
146
  }
147
+
148
+
149
+ @_register('PAPER_002')
150
+ def _paper_002(dataset):
151
+ """GW190425 Mass Gap Interpretation (Session 0).
152
+
153
+ Heaviest known BNS (3.64 Msun); m1 = 2.52 Msun overlaps the 2.5-5 Msun
154
+ mass gap. SCm suppression is a threshold phenomenon:
155
+ A_SCm(B) = exp[-(B/B_crit)^2], complete only at B >~ 1e15 G.
156
+ OPEN_RULING Q-001: paper states F_UQFF = 0.5297 but its own chain
157
+ 1*A_SCm*0.9*0.37 = 0.333; 0.5297 ~ 1-0.47 matches the S225 phonon 47%
158
+ suppression instead. Wired best-candidate: paper-stated headline values.
159
+ """
160
+ import math as _m
161
+ B_crit_G = 4.4e13 # G here (PAPER_001 used T) — OPEN_RULING Q-002
162
+
163
+ def a_scm(B_gauss):
164
+ return _m.exp(-((B_gauss / B_crit_G) ** 2))
165
+
166
+ scenarios = { # paper sec 4 five-field-scenario table
167
+ 'normal_pulsar_1e8G': a_scm(1.0e8),
168
+ 'high_b_pulsar_6.95e9G': a_scm(6.95e9),
169
+ 'magnetar_4.83e11G': a_scm(4.83e11),
170
+ 'extreme_magnetar_3.36e13G': a_scm(3.36e13), # 0.998871 paper
171
+ 'hyper_magnetar_1e15G': a_scm(1.0e15), # 0.0 paper
172
+ }
173
+ F_uqff = 0.5297 # paper-stated headline (OPEN_RULING Q-001)
174
+ h_gr = 1.702e-23 # GR peak strain anchor (paper sec 3)
175
+ return {
176
+ 'value': {
177
+ 'F_uqff': F_uqff,
178
+ 'amplitude_reduction_pct': (1.0 - F_uqff) * 100.0, # 47.0
179
+ 'h_gr_strain': h_gr,
180
+ 'h_uqff_strain': 1.067e-23, # paper sec 3
181
+ 'snr_observed': 12.9,
182
+ 'snr_uqff': 3.6,
183
+ 'A_scm_scenarios': scenarios,
184
+ 'p_ns': 0.49, # paper sec 5
185
+ 'p_bh': 0.51,
186
+ 'bh_factor': 0.6217,
187
+ 'ns_factor_mean': 0.5836,
188
+ 'chirp_mass_msun': 1.44, # LIGO anchor
189
+ 'm1_msun': 2.52, # mass-gap component
190
+ 'm2_msun': 1.12,
191
+ 'total_mass_msun': 3.64,
192
+ 'distance_mpc': 159.0,
193
+ },
194
+ 'formula': ('F = A_aether*A_SCm(B)*A_TRZ*A_string; '
195
+ 'A_SCm(B) = exp[-(B/B_crit)^2]'),
196
+ 'source': 'PAPER_002',
197
+ 'residual_pct': None, # pending Q-001 ruling
198
+ 'status': 'OPEN_RULING',
199
+ }
200
+
201
+
202
+ @_register('PAPER_003')
203
+ def _paper_003(dataset):
204
+ """GW150914 UQFF vs LIGO Strain Comparison (Session 0).
205
+
206
+ First BBH detection. Same universal 0.333 chain as PAPER_001 (no magnetic
207
+ suppression for BBH). New observables: 3x apparent-distance bias (direct
208
+ Hubble-inference impact) and propagation phase lag.
209
+ OPEN_RULING Q-004: stated phase-lag formula kappa*D*f*SSq evaluates to
210
+ 17.53 with the given numbers, not the paper's 0.126 rad.
211
+ """
212
+ D_aether = 1.0
213
+ D_scm = 1.0 # BBH: no B-field, no SCm suppression
214
+ D_trz = 1.0 - F_TRZ # 0.9 EXACT
215
+ D_string = 0.37
216
+ D_total = D_aether * D_scm * D_trz * D_string # 0.333 universal BBH
217
+ h_gr_peak = 1.2499e-21 # semi-analytic GR peak (paper sec 3.1)
218
+ d_true_mpc = 410.0 # LIGO anchor
219
+ return {
220
+ 'value': {
221
+ 'D_total': D_total,
222
+ 'h_gr_peak': h_gr_peak,
223
+ 'h_uqff_peak': D_total * h_gr_peak, # 4.1622e-22
224
+ 'snr_gr': 24.0,
225
+ 'snr_uqff': D_total * 24.0, # 8.0
226
+ 'distance_true_mpc': d_true_mpc,
227
+ 'distance_apparent_mpc': d_true_mpc / D_total, # 1231 Mpc
228
+ 'distance_bias_factor': 1.0 / D_total, # 3.0x
229
+ 'phase_lag_rad': 0.126, # paper-stated (Q-004)
230
+ 'ripple_amplitude_pct': 1.0, # paper sec 4
231
+ 'm1_msun': 36.0, # LIGO anchor
232
+ 'm2_msun': 29.0,
233
+ 'total_mass_msun': 65.0,
234
+ 'chirp_mass_msun': 28.3,
235
+ },
236
+ 'formula': ('D_total = 1*1*(1-F_TRZ)*0.37 (universal BBH); '
237
+ 'D_apparent = D_true/D_total; phase lag kappa*D*f*SSq (Q-004)'),
238
+ 'source': 'PAPER_003',
239
+ 'residual_pct': abs(D_total - (1.0 - D_GW_EROSION)) / (1.0 - D_GW_EROSION) * 100.0,
240
+ 'status': 'OPEN_RULING',
241
+ }
@@ -98,7 +98,7 @@ assert_that(abs(P.N_EFF_NEUTRINO - n_eff_expected) < 1e-15,
98
98
  # =============================================================================
99
99
  # BLOCK 7 — CALCULATOR SCAFFOLD INTEGRITY
100
100
  # =============================================================================
101
- assert_that(C.VERSION == "0.3.0", "uqff_calculator.VERSION = 0.3.0")
101
+ assert_that(C.VERSION == "0.4.0", "uqff_calculator.VERSION = 0.4.0")
102
102
  assert_that(isinstance(C.DISPATCH, dict), "DISPATCH is a dict")
103
103
  assert_that(C.wired_count() >= 0, "wired_count is queryable (>= 0)")
104
104
  assert_that(callable(C.calc), "calc is callable")
@@ -143,6 +143,35 @@ assert_that(abs(_r001['B_NS_over_B_crit'] - 2.27e-10) < 0.01e-10,
143
143
  "PAPER_001: B_NS/B_crit = 2.27e-10 (negligible SCm damping)")
144
144
  assert_that(C.wired_count() >= 1, "wired_count >= 1 (campaign started)")
145
145
 
146
+ _r002 = C.calc('PAPER_002')['value']
147
+ assert_that(abs(_r002['F_uqff'] - 0.5297) < 1e-12,
148
+ "PAPER_002: F_UQFF = 0.5297 (paper headline; Q-001 OPEN)")
149
+ assert_that(abs(_r002['amplitude_reduction_pct'] - 47.03) < 0.05,
150
+ "PAPER_002: 47.0% amplitude reduction")
151
+ assert_that(abs(_r002['A_scm_scenarios']['extreme_magnetar_3.36e13G'] - 0.5581) < 5e-4,
152
+ "PAPER_002: extreme magnetar A_SCm = 0.558 COMPUTED from stated formula "
153
+ "(paper's table says 0.998871, back-solves to B_crit=1e15 G — Q-003 OPEN)")
154
+ assert_that(_r002['A_scm_scenarios']['hyper_magnetar_1e15G'] < 1e-200,
155
+ "PAPER_002: hyper-magnetar A_SCm -> 0 (complete suppression)")
156
+ assert_that(_r002['A_scm_scenarios']['normal_pulsar_1e8G'] > 0.999999999,
157
+ "PAPER_002: normal pulsar A_SCm = 1.0 (B << B_crit)")
158
+ assert_that(abs(_r002['p_ns'] + _r002['p_bh'] - 1.0) < 1e-12,
159
+ "PAPER_002: P(NS) + P(BH) = 1")
160
+ assert_that(C.wired_count() >= 2, "wired_count >= 2")
161
+
162
+ _r003 = C.calc('PAPER_003')['value']
163
+ assert_that(abs(_r003['D_total'] - 0.333) < 1e-12,
164
+ "PAPER_003: D_total = 0.333 (universal BBH chain, same as PAPER_001)")
165
+ assert_that(abs(_r003['h_uqff_peak'] - 4.1622e-22) < 1e-25,
166
+ "PAPER_003: h_UQFF peak = 4.1622e-22")
167
+ assert_that(abs(_r003['snr_uqff'] - 8.0) < 0.01,
168
+ "PAPER_003: SNR_UQFF = 8.0 (at detection threshold)")
169
+ assert_that(abs(_r003['distance_apparent_mpc'] - 1231.0) < 1.0,
170
+ "PAPER_003: apparent distance 1231 Mpc (3x bias vs true 410)")
171
+ assert_that(abs(_r003['distance_bias_factor'] - 3.003) < 0.01,
172
+ "PAPER_003: distance bias factor 3.0x")
173
+ assert_that(C.wired_count() >= 3, "wired_count >= 3")
174
+
146
175
  # =============================================================================
147
176
  # REPORT
148
177
  # =============================================================================