star-magic-program 0.395.0__tar.gz → 0.396.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 (73) hide show
  1. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/CHANGELOG.md +32 -0
  2. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/CITATION.cff +3 -3
  3. {star_magic_program-0.395.0/star_magic_program.egg-info → star_magic_program-0.396.0}/PKG-INFO +8 -8
  4. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/README.md +6 -6
  5. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/SESSION_LOG.md +37 -0
  6. star_magic_program-0.396.0/UNIFIED_REGISTRY_VERSION.txt +1 -0
  7. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_QUEUE.csv +1 -0
  8. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_ROUTES.csv +1 -0
  9. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/_BUILD_LOG.md +3 -0
  10. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/pyproject.toml +2 -2
  11. {star_magic_program-0.395.0 → star_magic_program-0.396.0/star_magic_program.egg-info}/PKG-INFO +8 -8
  12. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/SOURCES.txt +4 -1
  13. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_calculator.py +1 -1
  14. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/README.md +76 -0
  15. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__init__.py +29 -1
  16. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/__main__.py +20 -0
  17. star_magic_program-0.396.0/uqff_downhole_simulator/uqff_ports.py +277 -0
  18. star_magic_program-0.396.0/uqff_downhole_simulator/uqff_reconciler.py +203 -0
  19. star_magic_program-0.396.0/uqff_downhole_simulator/uqff_tool_library.py +257 -0
  20. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_fidelity_tests.py +119 -6
  21. star_magic_program-0.395.0/UNIFIED_REGISTRY_VERSION.txt +0 -1
  22. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/AUDIT_500_PAPER_REPORT.md +0 -0
  23. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/COMMERCIAL.md +0 -0
  24. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE +0 -0
  25. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE-AGPL-3.0.txt +0 -0
  26. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/LICENSE-MIT-INITIAL.txt +0 -0
  27. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/NOTICE +0 -0
  28. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_ANCHORS.csv +0 -0
  29. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_EXACT_IDENTITIES.csv +0 -0
  30. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_FALSIFIABILITY.md +0 -0
  31. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_OPEN_ITEMS.csv +0 -0
  32. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PARADOX_CENSUS.csv +0 -0
  33. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PREDICTIONS.csv +0 -0
  34. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_PROGRAM_PLAN.md +0 -0
  35. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_RESIDUALS.csv +0 -0
  36. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_RESULTS_TABLE.md +0 -0
  37. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_SCHEMA.md +0 -0
  38. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_STATUS_REPORT.md +0 -0
  39. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_CONFIRMATIONS.csv +0 -0
  40. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/UNIFIED_REGISTRY_XGEO_EXTRACTED.csv +0 -0
  41. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/WHITEPAPER_INDEX.md +0 -0
  42. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/notebooks/00_quickstart.ipynb +0 -0
  43. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/COMPLETE_UQFF_EQUATIONS_REFERENCE.pdf +0 -0
  44. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/Star-Magic_manuscript_v5.pdf +0 -0
  45. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/UQFF_VALIDATION_SYNC_AUDIT.pdf +0 -0
  46. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/reference/uqff_production_arxiv.pdf +0 -0
  47. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/registry_generator.py +0 -0
  48. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/setup.cfg +0 -0
  49. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/dependency_links.txt +0 -0
  50. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/requires.txt +0 -0
  51. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/star_magic_program.egg-info/top_level.txt +0 -0
  52. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_backbone_locks.py +0 -0
  53. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_derived_constants.py +0 -0
  54. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_derived_functions.py +0 -0
  55. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/matplotlib_demo.py +0 -0
  56. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/qt6_downhole_app.py +0 -0
  57. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/sample_well_profile.csv +0 -0
  58. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_case_study.py +0 -0
  59. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_deviation.py +0 -0
  60. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_downhole_engine.py +0 -0
  61. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_gauge_specs.py +0 -0
  62. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_quartz_hpht_extension.py +0 -0
  63. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_service_life.py +0 -0
  64. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_downhole_simulator/uqff_telemetry.py +0 -0
  65. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_fubii_variants.py +0 -0
  66. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_material_landmarks.py +0 -0
  67. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_ngc_catalog.py +0 -0
  68. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_primitive_identities.py +0 -0
  69. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_graph.py +0 -0
  70. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_primitives.py +0 -0
  71. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_status.py +0 -0
  72. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_registry_xgeo.py +0 -0
  73. {star_magic_program-0.395.0 → star_magic_program-0.396.0}/uqff_session_closures.py +0 -0
@@ -7,6 +7,38 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## v0.396.0 — 2026-08-24 — THE TWO-STREAM SHIP
11
+
12
+ `uqff_downhole_simulator` v1.7.0–v1.9.0 — Daniel's two-stream architecture
13
+ (closed theoretical stream vs live site stream, coordinated to find offset
14
+ undervalued data) built COMPLETE:
15
+
16
+ - **v1.7.0 the tool library** — cited catalog of 8 toolstring entries: quartz
17
+ twins (wrapping the GEOQ 177 specs), piezoresistive class (drift FORM cited
18
+ from ChampionX — exponential in temperature; coefficients disclosed as
19
+ representative fit), vibrating wire / thermocouple card / DTS fiber as
20
+ PARAMETERS_USER_SUPPLIED (refusing invented vendor numbers), and the G6
21
+ Modbus-RS485 surface interface declared as the ports target. ToolString +
22
+ station rating checks (catches a 177 °C gauge in the 217 °C kick zone).
23
+ - **v1.8.0 the ports/plug-in layer** — READ-ONLY ingest to the normalized
24
+ LiveStream form. IMPLEMENTED: historian CSV (round-trip verified against the
25
+ v1.3.0 telemetry export to precision) and LAS 2.0 (CWLS standard; NULL→NaN;
26
+ wrapped mode refused, never mis-parsed). DECLARED (refusing until site
27
+ details): modbus_g6, witsml, opcua. register_port() for site plug-ins;
28
+ CLI `ingest`.
29
+ - **v1.9.0 the reconciler** — per-station offset series classified IN_FAMILY /
30
+ CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED, thresholds
31
+ disclosed in every report. Four-scenario validation per gate run: clean well
32
+ 6/6 in-family; +50 psi bias recovered at 50.09; 2-yr drift inside the
33
+ spec-aware envelope; THE FIND — kick well vs linear-gradient assumption
34
+ flags 610/4,448/6,083 psi unexplained offsets. CLI `reconcile`.
35
+
36
+ Also: v0.395.0 red-gate portability fix hardened (PORTABILITY GUARD self-scan).
37
+ Gate 5,801 → 5,816. PAPER_2256 +3 appendices (6/7/8). Zero calculator physics
38
+ changes; zero new dispatches.
39
+
40
+ ---
41
+
10
42
  ## v0.395.0 — 2026-08-23 — THE INSTRUMENT SHIP
11
43
 
12
44
  `uqff_downhole_simulator` v1.2.0–v1.6.0 (Daniel-directed extension list, complete):
@@ -3,8 +3,8 @@ 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.395.0"
7
- date-released: "2026-08-23"
6
+ version: "0.396.0"
7
+ date-released: "2026-08-24"
8
8
  authors:
9
9
  - family-names: "Murphy"
10
10
  given-names: "Daniel T."
@@ -53,7 +53,7 @@ preferred-citation:
53
53
  - family-names: "Murphy"
54
54
  given-names: "Daniel T."
55
55
  year: 2026
56
- version: "0.395.0"
56
+ version: "0.396.0"
57
57
  url: "https://github.com/Daniel8Murphy0007/Star-Magic-Program"
58
58
  notes: >-
59
59
  Cite both the software and the relevant whitepapers by PAPER_N
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: star-magic-program
3
- Version: 0.395.0
4
- Summary: Star-Magic UQFF calculator v0.395.0: THE INSTRUMENT SHIP. 2,252 dispatches (2,307 keys), gate 5,801/0. uqff_downhole_simulator v1.2.0-v1.6.0: service-life divergence curves, field-telemetry realism with scored QC, depth-sweep customer case studies, web-verified datasheet gauge specs (GEO PSI GEOQ 177 / Quartzdyne), MD/TVD wellbore deviation, multi-well batch runs, headless CLI. Suppression ratio 1.0324 invariant across geometry and baseline. Next: PAPER_2257.
3
+ Version: 0.396.0
4
+ Summary: Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257.
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,17 +34,17 @@ Dynamic: license-file
34
34
 
35
35
  # Star-Magic-Program
36
36
 
37
- [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
38
- [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
37
+ [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.396.0)](https://pypi.org/project/star-magic-program/)
38
+ [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.396.0)](https://pypi.org/project/star-magic-program/)
39
39
  [![Documentation Status](https://readthedocs.org/projects/star-magic-program/badge/?version=latest)](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
40
40
  [![License: AGPL-3.0 + Commercial](https://img.shields.io/badge/License-AGPL--3.0%20%2B%20Commercial-blue.svg)](LICENSE)
41
- [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-5801%2F0-brightgreen)](uqff_fidelity_tests.py)
41
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-5816%2F0-brightgreen)](uqff_fidelity_tests.py)
42
42
  [![Public surfaces](https://img.shields.io/badge/public_surfaces-2307-blue)](uqff_calculator.py)
43
43
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2291-orange)](whitepapers/)
44
44
 
45
- **UQFF systematic rebuild — v0.395.0 complete-compile campaign live**
45
+ **UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
46
46
 
47
- **This release (v0.395.0): THE INSTRUMENT SHIP — THE SIMULATOR BECOMES A COMPLETE INSTRUMENT.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. Thirteen package files (11 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,801 green / 4,179 defs. Next paper: PAPER_2257.**
47
+ **This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
48
48
 
49
49
  Author: Daniel T. Murphy · Star-Magic Research Program
50
50
  License: AGPL-3.0-or-later OR Commercial
@@ -102,7 +102,7 @@ Mizuno, Rossi).
102
102
  Full framework physics lives in the whitepaper corpus — the physics is the
103
103
  whitepapers; the calculator computes what the whitepapers derive.
104
104
 
105
- ## What is currently shipped (v0.395.0)
105
+ ## What is currently shipped (v0.396.0)
106
106
 
107
107
  ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
108
108
 
@@ -1,16 +1,16 @@
1
1
  # Star-Magic-Program
2
2
 
3
- [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
4
- [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
3
+ [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.396.0)](https://pypi.org/project/star-magic-program/)
4
+ [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.396.0)](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-5801%2F0-brightgreen)](uqff_fidelity_tests.py)
7
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-5816%2F0-brightgreen)](uqff_fidelity_tests.py)
8
8
  [![Public surfaces](https://img.shields.io/badge/public_surfaces-2307-blue)](uqff_calculator.py)
9
9
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2291-orange)](whitepapers/)
10
10
 
11
- **UQFF systematic rebuild — v0.395.0 complete-compile campaign live**
11
+ **UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
12
12
 
13
- **This release (v0.395.0): THE INSTRUMENT SHIP — THE SIMULATOR BECOMES A COMPLETE INSTRUMENT.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. Thirteen package files (11 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,801 green / 4,179 defs. Next paper: PAPER_2257.**
13
+ **This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
14
14
 
15
15
  Author: Daniel T. Murphy · Star-Magic Research Program
16
16
  License: AGPL-3.0-or-later OR Commercial
@@ -68,7 +68,7 @@ Mizuno, Rossi).
68
68
  Full framework physics lives in the whitepaper corpus — the physics is the
69
69
  whitepapers; the calculator computes what the whitepapers derive.
70
70
 
71
- ## What is currently shipped (v0.395.0)
71
+ ## What is currently shipped (v0.396.0)
72
72
 
73
73
  ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
74
74
 
@@ -11811,3 +11811,40 @@ own source for quote-adjacent Unix temp-path literals (needle constructed at
11811
11811
  runtime so the guard cannot self-match) — the mistake cannot be reintroduced.
11812
11812
  Gate 5,800 → 5,801; README badge + pyproject description synced. Standing
11813
11813
  lesson for the charter set: gate pins write scratch files ONLY via tempfile.
11814
+
11815
+ ## Entry 268 — 2026-08-24 — v0.396.0 THE TWO-STREAM SHIP (downhole v1.7.0–v1.9.0)
11816
+
11817
+ Daniel's architectural ruling (2026-08-23, verbatim frame): "There are two
11818
+ sides to this program so that the standalone theoretical can function to find
11819
+ the offset undervalued data streams that coordinate live stream with closed
11820
+ stream." Confirmed correct reading; built as three pieces, COMPLETE:
11821
+
11822
+ 1. v1.7.0 `uqff_tool_library.py` — cited 8-entry catalog: quartz twins (GEOQ
11823
+ 177 specs), piezoresistive class (ChampionX-cited exponential-in-T FORM,
11824
+ representative coefficients disclosed), GEOVW/GEOXTR/GEOPulse as
11825
+ PARAMETERS_USER_SUPPLIED with drift_model_for() REFUSING them, G6 Modbus
11826
+ interface = declared ports target; ToolString + rating_check (177 °C gauge
11827
+ caught at the 217 °C kick station).
11828
+ 2. v1.8.0 `uqff_ports.py` — READ-ONLY plug-in registry → normalized
11829
+ LiveStream. historian_csv + las2 IMPLEMENTED; round-trip vs the v1.3.0
11830
+ telemetry export verified to precision (MISSING→NaN, flags carried);
11831
+ wrapped LAS REFUSED; modbus_g6/witsml/opcua DECLARED-refusing;
11832
+ register_port(); CLI ingest.
11833
+ 3. v1.9.0 `uqff_reconciler.py` — offset(t) = measured − predicted per
11834
+ station; classifications with thresholds DISCLOSED in every report; drift
11835
+ not classified under ~18-day windows (slopes are noise, said so). Four
11836
+ scenarios verified per gate run: clean 6/6 IN_FAMILY; +50 psi bias →
11837
+ CALIBRATION_OFFSET 50.09 recovered; 2-yr synthetic at conventional rate →
11838
+ DRIFT_CONSISTENT (82.45 in [79.71, 82.29]); THE FIND — kick well vs
11839
+ linear-gradient assumption → UNEXPLAINED_OFFSET 610/4,448/6,083 psi.
11840
+
11841
+ Session also carried the v0.395.0 RED-GATE portability incident (hard-coded
11842
+ Unix temp path in a gate pin; fixed; permanent PORTABILITY GUARD self-scan
11843
+ added — gate 5,800→5,801) before this arc (5,801→5,816, +15 pins).
11844
+
11845
+ Ship prep: 6 pins at 0.396.0 (desc 495 chars, measured counts); SHIP GUARD
11846
+ marker INSTRUMENT_ARC→TWOSTREAM_ARC (+ GAPS id twostream_arc_rule7); README
11847
+ release paragraph/campaign/shipped header; CHANGELOG + _BUILD_LOG +
11848
+ SHIP_MESSAGE + RULINGS trail; 10 TWOSTREAM_ARC trail rows. Zero calculator
11849
+ physics changes; zero new dispatches (ratchet untouched). Awaiting Daniel:
11850
+ `.\ship.ps1` (clear .git/index.lock first).
@@ -0,0 +1 @@
1
+ v0.396.0
@@ -1722,3 +1722,4 @@ CENSUS_ARC,n/a,n/a,NOT_APPLICABLE,census consolidation single-geometry,v0.392.0
1722
1722
  LEDGER_ARC,n/a,n/a,NOT_APPLICABLE,census+packaging single-geometry,v0.393.0
1723
1723
  DOWNHOLE_ARC,n/a,n/a,NOT_APPLICABLE,application module single-geometry,v0.394.0
1724
1724
  INSTRUMENT_ARC,n/a,n/a,NOT_APPLICABLE,application-module extensions single-geometry,v0.395.0
1725
+ TWOSTREAM_ARC,n/a,n/a,NOT_APPLICABLE,application-module architecture single-geometry,v0.396.0
@@ -1723,3 +1723,4 @@ CENSUS_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.392.0
1723
1723
  LEDGER_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.393.0
1724
1724
  DOWNHOLE_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.394.0
1725
1725
  INSTRUMENT_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.395.0
1726
+ TWOSTREAM_ARC,n/a,XGEO_NOT_REQUIRED,none,v0.396.0
@@ -306,3 +306,6 @@ THE DOWNHOLE SHIP: PAPER_2256 + uqff_downhole_simulator v1.1.0 (first industry-a
306
306
 
307
307
  ## v0.395.0 — 2026-08-23
308
308
  THE INSTRUMENT SHIP: uqff_downhole_simulator v1.2.0-v1.6.0 (service-life divergence curves; telemetry realism with scored QC; depth-sweep case studies; web-verified GEOQ 177 gauge specs with mandatory citations; MD/TVD deviation; batch runs; headless CLI). Suppression ratio 1.0324 invariant across geometry and baseline. Gate 5,800/0. 23-file pass verified.
309
+
310
+ ## v0.396.0 — 2026-08-24
311
+ THE TWO-STREAM SHIP: uqff_downhole_simulator v1.7.0-v1.9.0 (cited tool library; read-only ports with historian/LAS implemented and live taps declared; two-stream reconciler with four-scenario validation incl. the 6,083-psi kick find). Architecture complete. Gate 5,816/0. 23-file pass verified.
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "star-magic-program"
7
- version = "0.395.0"
8
- description = "Star-Magic UQFF calculator v0.395.0: THE INSTRUMENT SHIP. 2,252 dispatches (2,307 keys), gate 5,801/0. uqff_downhole_simulator v1.2.0-v1.6.0: service-life divergence curves, field-telemetry realism with scored QC, depth-sweep customer case studies, web-verified datasheet gauge specs (GEO PSI GEOQ 177 / Quartzdyne), MD/TVD wellbore deviation, multi-well batch runs, headless CLI. Suppression ratio 1.0324 invariant across geometry and baseline. Next: PAPER_2257."
7
+ version = "0.396.0"
8
+ description = "Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257."
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.395.0
4
- Summary: Star-Magic UQFF calculator v0.395.0: THE INSTRUMENT SHIP. 2,252 dispatches (2,307 keys), gate 5,801/0. uqff_downhole_simulator v1.2.0-v1.6.0: service-life divergence curves, field-telemetry realism with scored QC, depth-sweep customer case studies, web-verified datasheet gauge specs (GEO PSI GEOQ 177 / Quartzdyne), MD/TVD wellbore deviation, multi-well batch runs, headless CLI. Suppression ratio 1.0324 invariant across geometry and baseline. Next: PAPER_2257.
3
+ Version: 0.396.0
4
+ Summary: Star-Magic UQFF calculator v0.396.0: THE TWO-STREAM SHIP. 2,252 dispatches (2,307 keys), gate 5,816/0. uqff_downhole_simulator v1.7.0-v1.9.0 completes Daniel's two-stream architecture: cited tool library (8 entries, no invented vendor data), read-only ports (historian CSV + LAS 2.0 implemented, live taps declared), and the two-stream reconciler - closed-stream predictions vs live data, offsets classified, undervalued streams flagged (kick-well find: 6,083 psi unexplained). Next: PAPER_2257.
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,17 +34,17 @@ Dynamic: license-file
34
34
 
35
35
  # Star-Magic-Program
36
36
 
37
- [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
38
- [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.395.0)](https://pypi.org/project/star-magic-program/)
37
+ [![PyPI version](https://img.shields.io/pypi/v/star-magic-program.svg?cacheBust=0.396.0)](https://pypi.org/project/star-magic-program/)
38
+ [![Python versions](https://img.shields.io/pypi/pyversions/star-magic-program.svg?cacheBust=0.396.0)](https://pypi.org/project/star-magic-program/)
39
39
  [![Documentation Status](https://readthedocs.org/projects/star-magic-program/badge/?version=latest)](https://star-magic-program.readthedocs.io/en/latest/?badge=latest)
40
40
  [![License: AGPL-3.0 + Commercial](https://img.shields.io/badge/License-AGPL--3.0%20%2B%20Commercial-blue.svg)](LICENSE)
41
- [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-5801%2F0-brightgreen)](uqff_fidelity_tests.py)
41
+ [![Fidelity gate](https://img.shields.io/badge/fidelity_gate-5816%2F0-brightgreen)](uqff_fidelity_tests.py)
42
42
  [![Public surfaces](https://img.shields.io/badge/public_surfaces-2307-blue)](uqff_calculator.py)
43
43
  [![Whitepapers](https://img.shields.io/badge/whitepapers-2291-orange)](whitepapers/)
44
44
 
45
- **UQFF systematic rebuild — v0.395.0 complete-compile campaign live**
45
+ **UQFF systematic rebuild — v0.396.0 complete-compile campaign live**
46
46
 
47
- **This release (v0.395.0): THE INSTRUMENT SHIP — THE SIMULATOR BECOMES A COMPLETE INSTRUMENT.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. Thirteen package files (11 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,801 green / 4,179 defs. Next paper: PAPER_2257.**
47
+ **This release (v0.396.0): THE TWO-STREAM SHIP — THE ARCHITECTURE COMPLETE.** **PAPER_2256 + `uqff_downhole_simulator` v1.6.0:** the program's first packaged industry-application module, built from Daniel's 22Aug2026 template thread (grok_cce7a73b) on same-day GO — a deep-well HPHT simulator (TD ≈ 20,300 ft) with a quartz P/T gauge string whose drift is **suppressed by the canonical lattice**: suppression = (0.58+0.32·(1−F_TRZ))·(0.52+0.38·K_MEX)·(0.68+0.27·Φ_res) = **1.0324 at the locked {0.1, 25/12, 0.84}** — drift BELOW the 0.215 %FS/yr industry baseline. **The knob ruling (Rule 2):** the template's adjustable "K_MEX"/"Φ_res" sliders were tuning gains wearing primitive names — canonicals now LOCKED in-physics (verified live by the dispatch on every call), sliders renamed `k_structural_trim`/`phi_coupling_trim`. **v1.1.0 extensions (Daniel-directed):** N-gauge strings (`make_sensor_string`); real well profiles from CSV (`load_well_profile_csv`; the shipped sample carries an HPHT overpressure kick the linear model cannot see — 18,405 vs 9,313 psi at the deepest gauge); and **twin-gauge drift-comparison mode** — every station carries a conventional reference gauge, and away from the clip band the measured conventional/UQFF ratio EQUALS the canonical suppression (1.0325 measured vs 1.0324 predicted across a 12-gauge string on the real profile) — the PAPER_2250 quartz bench test's complete simulation instrument. **v1.2.0 extension:** service-life drift ACCUMULATION (`ServiceLifeSimulator`) — the rates integrated over simulated service years, twin-leg divergence curves (2-3 psi/yr separation per station at FS 30,000 psi, 10-15 psi at a 5-yr horizon), recalibration resets, years-to-error-budget arithmetic; the accumulated-error ratio converges to the canonical suppression at every station. **v1.3.0 extension:** field-telemetry realism (`TelemetryRecorder`) — 1-reading/min timestamped acquisition with line dropouts, stuck gauges and spikes, historian quality flags, and a scored QC pipeline (frozen-value detection 1.0/1.0; Hampel despiker with common-mode veto, spike precision 0.83-1.0) exporting field-historian-style CSVs. **v1.4.0 extension:** depth-sweep case-study mode (`case_study`/`write_markdown` + CLI) — where the advantage is largest: 2.04 psi/yr flat below the HPHT knees compounding to 3.04 psi/yr at 20,000 ft (4.21 at 27,000 ft on a 30,000-ft well), rendered as a one-page customer case with the honest DERIVED_HYBRID note. **v1.5.0 extension:** real-datasheet gauge specs (`GaugeSpec`/`GAUGE_SPECS`) — web-verified GEO PSI GEOQ 177 (Quartzdyne) presets with mandatory citations (uncited specs rejected in code), plumbed through every layer; the suppression ratio is baseline-independent while the psi/yr story honestly scales with the cited spec bound. **v1.6.0 extensions:** wellbore deviation (MD/TVD surveys — a 60-deg tangent reads 6,525 vs the vertical model's 9,315 psi at the deepest gauge), multi-well batch runs (ratio invariant across geometries), and a headless CLI (`python -m uqff_downhole_simulator run|service-life|telemetry|case-study`). The 2026-08-23 extension list is complete. **v1.7.0 (two-stream build, piece 1): the tool library** — cited catalog of 8 toolstring entries (quartz twins, piezoresistive class with ChampionX-cited exponential drift form, vibrating wire/DTS/thermocouple as PARAMETERS_USER_SUPPLIED refusing invented numbers, and the G6 Modbus-RS485 surface interface declared as the ports-layer target) + ToolString composition + station rating checks (catches a 177 °C gauge in the 217 °C kick zone). **v1.8.0 (two-stream build, piece 2): the ports/plug-in layer** — READ-ONLY ingest to the normalized LiveStream form: historian-CSV and LAS 2.0 readers IMPLEMENTED (round-trip verified against the v1.3.0 telemetry export; wrapped LAS refused, not mis-parsed), live-protocol taps (modbus_g6/witsml/opcua) DECLARED and refusing until site details exist, `register_port()` for site plug-ins, CLI `ingest` subcommand. **v1.9.0 (piece 3 — the architecture COMPLETE): the two-stream reconciler** — per-station offset series classified IN_FAMILY / CALIBRATION_OFFSET / DRIFT_CONSISTENT / TRANSIENTS / UNEXPLAINED with disclosed thresholds; validated on four scenarios incl. THE FIND: the kick well reconciled against a linear-gradient assumption flags 610/4,448/6,083 psi unexplained offsets — the closed stream exposing the undervalued data stream. CLI `reconcile` subcommand. Sixteen package files (14 modules incl. the headless CLI + README + sample profile), installable package, engine headless by design, DERIVED_HYBRID with every industry anchor inline-commented, gate-verified per run. **Totals: 2,252 wired (2,307 DISPATCH keys) / gate 5,816 green / 4,179 defs. Next paper: PAPER_2257.**
48
48
 
49
49
  Author: Daniel T. Murphy · Star-Magic Research Program
50
50
  License: AGPL-3.0-or-later OR Commercial
@@ -102,7 +102,7 @@ Mizuno, Rossi).
102
102
  Full framework physics lives in the whitepaper corpus — the physics is the
103
103
  whitepapers; the calculator computes what the whitepapers derive.
104
104
 
105
- ## What is currently shipped (v0.395.0)
105
+ ## What is currently shipped (v0.396.0)
106
106
 
107
107
  ### Wiring campaign — LIVE (see `CLAUDE.md` charter)
108
108
 
@@ -62,6 +62,9 @@ uqff_downhole_simulator/uqff_case_study.py
62
62
  uqff_downhole_simulator/uqff_deviation.py
63
63
  uqff_downhole_simulator/uqff_downhole_engine.py
64
64
  uqff_downhole_simulator/uqff_gauge_specs.py
65
+ uqff_downhole_simulator/uqff_ports.py
65
66
  uqff_downhole_simulator/uqff_quartz_hpht_extension.py
67
+ uqff_downhole_simulator/uqff_reconciler.py
66
68
  uqff_downhole_simulator/uqff_service_life.py
67
- uqff_downhole_simulator/uqff_telemetry.py
69
+ uqff_downhole_simulator/uqff_telemetry.py
70
+ uqff_downhole_simulator/uqff_tool_library.py
@@ -73,7 +73,7 @@ from uqff_registry_primitives import (
73
73
  DELTA_M2_21_EV2, DELTA_M2_32_EV2,
74
74
  )
75
75
 
76
- VERSION = "0.395.0"
76
+ VERSION = "0.396.0"
77
77
 
78
78
  # NAMED OBSERVED SI ANCHORS (constant drain 2026-08-16, PAPER_2141 bulk pattern + PAPER_2149 observation-headlining)
79
79
  # Bit-identical to the literals they replace; UQFF-derived counterparts live in uqff_registry_primitives.
@@ -215,3 +215,79 @@ cs = case_study(CaseStudyConfig(gauge_spec=GAUGE_SPECS['geoq177_30k']))
215
215
  python -m uqff_downhole_simulator run --steps 200 --gauges 8 --out run.csv
216
216
  python -m uqff_downhole_simulator case-study --td 22000 --kickoff 9000 --inclination 45 --spec geoq177_30k --out case.md
217
217
  ```
218
+
219
+ ## v1.7.0 extension: the tool library (Daniel-directed, 2026-08-23 — first piece of the two-stream build)
220
+
221
+ `uqff_tool_library.py` generalizes the gauge-spec discipline to the whole
222
+ toolstring: a cited catalog (`TOOL_LIBRARY`, 8 entries) of downhole and
223
+ surface tools — UQFF/conventional quartz P/T (wrapping the v1.5.0 GaugeSpecs),
224
+ a piezoresistive class (drift FORM cited from ChampionX: unpredictable,
225
+ exponential in temperature; coefficients disclosed as representative fit),
226
+ vibrating-wire, 18-point thermocouple string, DTS fiber, and the **G6 surface
227
+ interface (Modbus RS485 + 4-20mA)** — every entry declaring the telemetry
228
+ interface it speaks, which is the declaration the live-stream ports/plug-in
229
+ layer will implement.
230
+
231
+ Honesty structure: entries whose existence is verified but whose numbers were
232
+ not published are `PARAMETERS_USER_SUPPLIED` — their fields are None and
233
+ `drift_model_for()` refuses to invent vendor data. `ToolString` composes
234
+ mixed strings of stations; `rating_check()` checks every tool against the
235
+ well conditions at its station (profile or gradients, deviation honored) —
236
+ it catches a 177 °C gauge hung in the sample well's 217 °C kick zone before
237
+ the well does.
238
+
239
+ ```python
240
+ from uqff_downhole_simulator import ToolString, rating_check, load_well_profile_csv
241
+ ts = ToolString([(3000, 'quartz_pt_uqff_geoq177_30k'), (18200, 'piezoresistive_pt_class')])
242
+ print(rating_check(ts, profile=load_well_profile_csv("uqff_downhole_simulator/sample_well_profile.csv")))
243
+ ```
244
+
245
+ ## v1.8.0 extension: the ports/plug-in layer (Daniel-directed, 2026-08-23 — two-stream build, piece 2)
246
+
247
+ `uqff_ports.py` — READ-ONLY taps ingesting live-stream data into the
248
+ normalized `LiveStream` form the reconciler will consume (index = time or
249
+ depth; per-channel values with NaN for missing; quality flags carried; units
250
+ carried). `PORT_REGISTRY` with explicit statuses: **IMPLEMENTED** —
251
+ `historian_csv` (wide-format historian exports, auto-detecting the v1.3.0
252
+ telemetry layout) and `las2` (LAS 2.0 well logs, CWLS public standard, NULL
253
+ substitution, wrapped mode refused rather than mis-parsed); **DECLARED** —
254
+ `modbus_g6` (the tool library's declared port target), `witsml`, `opcua` —
255
+ these name the protocol but REFUSE to run until real site details exist (no
256
+ invented site behavior). `register_port()` lets a site plug in its own reader
257
+ additively.
258
+
259
+ The proof loop: the simulator's own v1.3.0 field-style export re-ingested
260
+ through the port matches the recorder's arrays to export precision, with
261
+ MISSING → NaN and flags carried — closed stream → simulated live file →
262
+ port → same numbers. The ingest path is verified in simulation before it
263
+ ever touches a site. CLI: `python -m uqff_downhole_simulator ingest --file
264
+ field.csv` (or `--port las2`).
265
+
266
+ ## v1.9.0 extension: the two-stream reconciler (Daniel-directed, 2026-08-23 — piece 3, the architecture complete)
267
+
268
+ `uqff_reconciler.py` — the coordinator. The closed stream predicts what every
269
+ gauge in a described well *should* read; a `LiveStream` delivers what it
270
+ *does* read; the reconciler works the per-station offset series and
271
+ classifies each: IN_FAMILY, CALIBRATION_OFFSET (bias recovered),
272
+ DRIFT_CONSISTENT (trend inside the closed stream's own drift envelope
273
+ [UQFF rate, conventional rate] at station T/P — needs ≥18 days of data,
274
+ below that slopes are noise and it says so), TRANSIENTS, or
275
+ **UNEXPLAINED_OFFSET/TREND — the undervalued streams**. Thresholds are
276
+ disclosed engineering heuristics; labels are advisory triage and the numbers
277
+ (bias, slope, sigma, envelope) always ride along.
278
+
279
+ Validated on four scenarios: clean well → 6/6 IN_FAMILY; +50 psi biased
280
+ gauge → CALIBRATION_OFFSET, 50.09 psi recovered; 2-year synthetic drifting
281
+ at the conventional rate → DRIFT_CONSISTENT (slope 82.45 vs envelope
282
+ [79.71, 82.29] psi/yr); and **the find** — the kick well reconciled against
283
+ a linear-gradient assumption flags 610 / 4,448 / 6,083 psi unexplained
284
+ offsets at the deep stations. The closed stream exposes what the assumed
285
+ model cannot see.
286
+
287
+ ```python
288
+ from uqff_downhole_simulator import Reconciler, SimulatorConfig, ingest
289
+ report = Reconciler(SimulatorConfig(td_ft=18500)).reconcile(ingest("field.csv"))
290
+ print(report['undervalued_streams'])
291
+ ```
292
+
293
+ CLI: `python -m uqff_downhole_simulator reconcile --file field.csv --td 18500`
@@ -62,8 +62,31 @@ from .uqff_deviation import (
62
62
  load_deviation_csv,
63
63
  )
64
64
  from .uqff_downhole_engine import run_batch
65
+ from .uqff_tool_library import (
66
+ ToolSpec,
67
+ TOOL_LIBRARY,
68
+ ToolString,
69
+ drift_model_for,
70
+ piezoresistive_drift,
71
+ rating_check,
72
+ )
73
+ from .uqff_ports import (
74
+ LiveStream,
75
+ StreamChannel,
76
+ PortSpec,
77
+ PORT_REGISTRY,
78
+ ingest,
79
+ read_historian_csv,
80
+ read_las,
81
+ register_port,
82
+ )
83
+ from .uqff_reconciler import (
84
+ Reconciler,
85
+ ReconcilerConfig,
86
+ auto_station_map,
87
+ )
65
88
 
66
- __version__ = "1.6.0"
89
+ __version__ = "1.9.0"
67
90
  __all__ = [
68
91
  "calculate_quartz_transducer_hpht_UQFF", "canonical_suppression",
69
92
  "conventional_drift", "drift_comparison",
@@ -74,5 +97,10 @@ __all__ = [
74
97
  "CaseStudyConfig", "case_study", "depth_sweep", "write_markdown",
75
98
  "GaugeSpec", "GAUGE_SPECS", "load_gauge_spec_json",
76
99
  "DeviationSurvey", "load_deviation_csv", "run_batch",
100
+ "ToolSpec", "TOOL_LIBRARY", "ToolString", "drift_model_for",
101
+ "piezoresistive_drift", "rating_check",
102
+ "LiveStream", "StreamChannel", "PortSpec", "PORT_REGISTRY",
103
+ "ingest", "read_historian_csv", "read_las", "register_port",
104
+ "Reconciler", "ReconcilerConfig", "auto_station_map",
77
105
  "DEFAULT_TD_FT", "DEFAULT_SENSOR_DEPTHS_FT",
78
106
  ]
@@ -70,6 +70,16 @@ def main(argv=None) -> int:
70
70
  p_tm.add_argument("--seed", type=int, default=None)
71
71
  p_tm.add_argument("--out", type=str, default="uqff_telemetry.csv")
72
72
 
73
+ p_in = sub.add_parser("ingest", help="ingest a live-stream file through a port (read-only)")
74
+ p_in.add_argument("--file", type=str, required=True, help="source file (historian CSV or LAS)")
75
+ p_in.add_argument("--port", type=str, default="historian_csv",
76
+ help="port name from PORT_REGISTRY (historian_csv | las2 | site plug-ins)")
77
+
78
+ p_rc = sub.add_parser("reconcile", help="two-stream reconciliation: live file vs closed-stream prediction")
79
+ _add_well_args(p_rc)
80
+ p_rc.add_argument("--file", type=str, required=True, help="live-stream file (historian CSV)")
81
+ p_rc.add_argument("--port", type=str, default="historian_csv")
82
+
73
83
  p_cs = sub.add_parser("case-study", help="depth sweep, write the one-page markdown case")
74
84
  _add_well_args(p_cs)
75
85
  p_cs.add_argument("--points", type=int, default=12)
@@ -107,6 +117,16 @@ def main(argv=None) -> int:
107
117
  s = rec.telemetry_summary()
108
118
  print(f"telemetry: {s['samples']} samples -> {out} "
109
119
  f"(uptime {s['uptime_pct']}%, stuck P/R {s['stuck_score']['precision']}/{s['stuck_score']['recall']})")
120
+ elif a.cmd == "ingest":
121
+ from . import ingest as _ingest
122
+ st = _ingest(a.file, port=a.port)
123
+ import json as _json
124
+ print(_json.dumps(st.summary(), indent=1))
125
+ elif a.cmd == "reconcile":
126
+ from . import ingest as _ingest, Reconciler
127
+ rep = Reconciler(_build_config(a)).reconcile(_ingest(a.file, port=a.port))
128
+ import json as _json
129
+ print(_json.dumps(rep, indent=1))
110
130
  elif a.cmd == "case-study":
111
131
  from .uqff_deviation import DeviationSurvey
112
132
  td = a.td if a.td is not None else DEFAULT_TD_FT