gea-program 0.61.0__tar.gz → 0.63.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 (373) hide show
  1. {gea_program-0.61.0 → gea_program-0.63.0}/PKG-INFO +14 -2
  2. {gea_program-0.61.0 → gea_program-0.63.0}/README.md +13 -1
  3. {gea_program-0.61.0 → gea_program-0.63.0}/gea/__init__.py +1 -1
  4. {gea_program-0.61.0 → gea_program-0.63.0}/gea/__main__.py +48 -4
  5. {gea_program-0.61.0 → gea_program-0.63.0}/gea/acceptance_tests.py +505 -2
  6. {gea_program-0.61.0 → gea_program-0.63.0}/gea/casing_design.py +205 -34
  7. {gea_program-0.61.0 → gea_program-0.63.0}/gea/declarations.py +6 -3
  8. {gea_program-0.61.0 → gea_program-0.63.0}/gea/dossier.py +165 -4
  9. {gea_program-0.61.0 → gea_program-0.63.0}/gea/dossier_verify.py +41 -7
  10. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/IT_SECURITY.md +1 -0
  11. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/casing.md +4 -4
  12. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/dossier.md +3 -1
  13. {gea_program-0.61.0 → gea_program-0.63.0}/gea/helplib.py +1 -1
  14. {gea_program-0.61.0 → gea_program-0.63.0}/gea/service.py +17 -0
  15. gea_program-0.63.0/gea/timestamp.py +568 -0
  16. {gea_program-0.61.0 → gea_program-0.63.0}/gea/web/app.html +16 -4
  17. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/PKG-INFO +14 -2
  18. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/SOURCES.txt +1 -0
  19. {gea_program-0.61.0 → gea_program-0.63.0}/pyproject.toml +1 -1
  20. {gea_program-0.61.0 → gea_program-0.63.0}/LICENSE +0 -0
  21. {gea_program-0.61.0 → gea_program-0.63.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  22. {gea_program-0.61.0 → gea_program-0.63.0}/gea/accuracy_statement.py +0 -0
  23. {gea_program-0.61.0 → gea_program-0.63.0}/gea/alarm_engine.py +0 -0
  24. {gea_program-0.61.0 → gea_program-0.63.0}/gea/alerts.py +0 -0
  25. {gea_program-0.61.0 → gea_program-0.63.0}/gea/backup.py +0 -0
  26. {gea_program-0.61.0 → gea_program-0.63.0}/gea/bench.py +0 -0
  27. {gea_program-0.61.0 → gea_program-0.63.0}/gea/blind_harness.py +0 -0
  28. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  29. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  30. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  31. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  32. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  33. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  34. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  35. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  36. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  37. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  38. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  39. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  40. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  41. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  42. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  43. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  44. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  45. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  46. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  47. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  48. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  49. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  50. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  51. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  52. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  53. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  54. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  55. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  56. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  57. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  58. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  59. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  60. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  61. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  62. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  63. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  64. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  65. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  66. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  67. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  68. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  69. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  70. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  71. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  72. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  73. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  74. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  75. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  76. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  77. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  78. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  79. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  80. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  81. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  82. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  83. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  84. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  85. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  86. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  87. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  88. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  89. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  90. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  91. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  92. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  93. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  94. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  95. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/med_160_sapropels.txt +0 -0
  96. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  97. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  98. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  99. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  100. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  101. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  102. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  103. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  104. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  105. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  106. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  107. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  108. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  109. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  110. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  111. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  112. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  113. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  114. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  115. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  116. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  117. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  118. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  119. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  120. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  121. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  122. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  123. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  124. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  125. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  126. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  127. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  128. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  129. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  130. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  131. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  132. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog_map.py +0 -0
  133. {gea_program-0.61.0 → gea_program-0.63.0}/gea/catalog_register.py +0 -0
  134. {gea_program-0.61.0 → gea_program-0.63.0}/gea/certificates.py +0 -0
  135. {gea_program-0.61.0 → gea_program-0.63.0}/gea/cli.py +0 -0
  136. {gea_program-0.61.0 → gea_program-0.63.0}/gea/client_reports.py +0 -0
  137. {gea_program-0.61.0 → gea_program-0.63.0}/gea/collision.py +0 -0
  138. {gea_program-0.61.0 → gea_program-0.63.0}/gea/config_versioning.py +0 -0
  139. {gea_program-0.61.0 → gea_program-0.63.0}/gea/conformance.py +0 -0
  140. {gea_program-0.61.0 → gea_program-0.63.0}/gea/control_room.py +0 -0
  141. {gea_program-0.61.0 → gea_program-0.63.0}/gea/correlation.py +0 -0
  142. {gea_program-0.61.0 → gea_program-0.63.0}/gea/dashboard.py +0 -0
  143. {gea_program-0.61.0 → gea_program-0.63.0}/gea/decline.py +0 -0
  144. {gea_program-0.61.0 → gea_program-0.63.0}/gea/deviation.py +0 -0
  145. {gea_program-0.61.0 → gea_program-0.63.0}/gea/dlis.py +0 -0
  146. {gea_program-0.61.0 → gea_program-0.63.0}/gea/dnp3.py +0 -0
  147. {gea_program-0.61.0 → gea_program-0.63.0}/gea/doctor.py +0 -0
  148. {gea_program-0.61.0 → gea_program-0.63.0}/gea/downhole_engine.py +0 -0
  149. {gea_program-0.61.0 → gea_program-0.63.0}/gea/drift_monitor.py +0 -0
  150. {gea_program-0.61.0 → gea_program-0.63.0}/gea/drill_string.py +0 -0
  151. {gea_program-0.61.0 → gea_program-0.63.0}/gea/earth_model.py +0 -0
  152. {gea_program-0.61.0 → gea_program-0.63.0}/gea/economics.py +0 -0
  153. {gea_program-0.61.0 → gea_program-0.63.0}/gea/ed25519.py +0 -0
  154. {gea_program-0.61.0 → gea_program-0.63.0}/gea/edr.py +0 -0
  155. {gea_program-0.61.0 → gea_program-0.63.0}/gea/elevation.py +0 -0
  156. {gea_program-0.61.0 → gea_program-0.63.0}/gea/etp.py +0 -0
  157. {gea_program-0.61.0 → gea_program-0.63.0}/gea/etp12_schemas.json +0 -0
  158. {gea_program-0.61.0 → gea_program-0.63.0}/gea/example_register_map.json +0 -0
  159. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fat_sat.py +0 -0
  160. {gea_program-0.61.0 → gea_program-0.63.0}/gea/files.py +0 -0
  161. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fixtures/README.md +0 -0
  162. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  163. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  164. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  165. {gea_program-0.61.0 → gea_program-0.63.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  166. {gea_program-0.61.0 → gea_program-0.63.0}/gea/follower.py +0 -0
  167. {gea_program-0.61.0 → gea_program-0.63.0}/gea/forward_model.py +0 -0
  168. {gea_program-0.61.0 → gea_program-0.63.0}/gea/frac_hits.py +0 -0
  169. {gea_program-0.61.0 → gea_program-0.63.0}/gea/friction_priors.py +0 -0
  170. {gea_program-0.61.0 → gea_program-0.63.0}/gea/gamma.py +0 -0
  171. {gea_program-0.61.0 → gea_program-0.63.0}/gea/gauge_aging.py +0 -0
  172. {gea_program-0.61.0 → gea_program-0.63.0}/gea/gauge_specs.py +0 -0
  173. {gea_program-0.61.0 → gea_program-0.63.0}/gea/geodesy.py +0 -0
  174. {gea_program-0.61.0 → gea_program-0.63.0}/gea/geomag.py +0 -0
  175. {gea_program-0.61.0 → gea_program-0.63.0}/gea/gravity_reference.py +0 -0
  176. {gea_program-0.61.0 → gea_program-0.63.0}/gea/hartip.py +0 -0
  177. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/TESTER_GUIDE.md +0 -0
  178. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/alarms.md +0 -0
  179. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/alerts.md +0 -0
  180. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/audit-update.md +0 -0
  181. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/backup.md +0 -0
  182. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/catalog.md +0 -0
  183. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/charts.md +0 -0
  184. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/collision.md +0 -0
  185. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/company-sign-in.md +0 -0
  186. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/conformance.md +0 -0
  187. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/control-room.md +0 -0
  188. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/data-in.md +0 -0
  189. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/declare.md +0 -0
  190. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/decline.md +0 -0
  191. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/dlis.md +0 -0
  192. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/doctor.md +0 -0
  193. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/drift.md +0 -0
  194. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/drillstring.md +0 -0
  195. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/economics.md +0 -0
  196. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/edr.md +0 -0
  197. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/etp.md +0 -0
  198. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/field-ports.md +0 -0
  199. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/files.md +0 -0
  200. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/frac-hits.md +0 -0
  201. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/historian.md +0 -0
  202. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/https.md +0 -0
  203. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/hydraulics.md +0 -0
  204. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/instruments.md +0 -0
  205. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/interval.md +0 -0
  206. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/invoice-check.md +0 -0
  207. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/map.md +0 -0
  208. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/month-end.md +0 -0
  209. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/notifications.md +0 -0
  210. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/opseis.md +0 -0
  211. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/osdu.md +0 -0
  212. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/pad-summary.md +0 -0
  213. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/patches.md +0 -0
  214. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/penetrator.md +0 -0
  215. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/plan.md +0 -0
  216. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/pore-pressure.md +0 -0
  217. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/ppdm.md +0 -0
  218. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/quakeml.md +0 -0
  219. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/quality.md +0 -0
  220. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/report-history.md +0 -0
  221. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/rig-time.md +0 -0
  222. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/seedlink.md +0 -0
  223. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/seismic.md +0 -0
  224. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/setup.md +0 -0
  225. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/simulation.md +0 -0
  226. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/site.md +0 -0
  227. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/sites.md +0 -0
  228. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/slip.md +0 -0
  229. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/soak.md +0 -0
  230. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/sra.md +0 -0
  231. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/start.md +0 -0
  232. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/structure.md +0 -0
  233. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/tools.md +0 -0
  234. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/torque-drag.md +0 -0
  235. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/transients.md +0 -0
  236. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/upkeep.md +0 -0
  237. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/vibration.md +0 -0
  238. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/well-report.md +0 -0
  239. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/well-tests.md +0 -0
  240. {gea_program-0.61.0 → gea_program-0.63.0}/gea/help/well3d.md +0 -0
  241. {gea_program-0.61.0 → gea_program-0.63.0}/gea/housekeeping.py +0 -0
  242. {gea_program-0.61.0 → gea_program-0.63.0}/gea/hydraulics.py +0 -0
  243. {gea_program-0.61.0 → gea_program-0.63.0}/gea/interval.py +0 -0
  244. {gea_program-0.61.0 → gea_program-0.63.0}/gea/inverse_engine.py +0 -0
  245. {gea_program-0.61.0 → gea_program-0.63.0}/gea/invoice_check.py +0 -0
  246. {gea_program-0.61.0 → gea_program-0.63.0}/gea/jobs.py +0 -0
  247. {gea_program-0.61.0 → gea_program-0.63.0}/gea/live_ports.py +0 -0
  248. {gea_program-0.61.0 → gea_program-0.63.0}/gea/loadtest.py +0 -0
  249. {gea_program-0.61.0 → gea_program-0.63.0}/gea/matplotlib_demo.py +0 -0
  250. {gea_program-0.61.0 → gea_program-0.63.0}/gea/modbus.py +0 -0
  251. {gea_program-0.61.0 → gea_program-0.63.0}/gea/modbus_rtu.py +0 -0
  252. {gea_program-0.61.0 → gea_program-0.63.0}/gea/model_card.py +0 -0
  253. {gea_program-0.61.0 → gea_program-0.63.0}/gea/month_end.py +0 -0
  254. {gea_program-0.61.0 → gea_program-0.63.0}/gea/mqtt_port.py +0 -0
  255. {gea_program-0.61.0 → gea_program-0.63.0}/gea/notify.py +0 -0
  256. {gea_program-0.61.0 → gea_program-0.63.0}/gea/oidc.py +0 -0
  257. {gea_program-0.61.0 → gea_program-0.63.0}/gea/oidc_mock.py +0 -0
  258. {gea_program-0.61.0 → gea_program-0.63.0}/gea/op_seismicity.py +0 -0
  259. {gea_program-0.61.0 → gea_program-0.63.0}/gea/opcua_port.py +0 -0
  260. {gea_program-0.61.0 → gea_program-0.63.0}/gea/operator_app.py +0 -0
  261. {gea_program-0.61.0 → gea_program-0.63.0}/gea/osdu.py +0 -0
  262. {gea_program-0.61.0 → gea_program-0.63.0}/gea/pad_summary.py +0 -0
  263. {gea_program-0.61.0 → gea_program-0.63.0}/gea/patches.py +0 -0
  264. {gea_program-0.61.0 → gea_program-0.63.0}/gea/pdf_report.py +0 -0
  265. {gea_program-0.61.0 → gea_program-0.63.0}/gea/penetrator.py +0 -0
  266. {gea_program-0.61.0 → gea_program-0.63.0}/gea/permits.py +0 -0
  267. {gea_program-0.61.0 → gea_program-0.63.0}/gea/piwebapi.py +0 -0
  268. {gea_program-0.61.0 → gea_program-0.63.0}/gea/pore_pressure.py +0 -0
  269. {gea_program-0.61.0 → gea_program-0.63.0}/gea/ports.py +0 -0
  270. {gea_program-0.61.0 → gea_program-0.63.0}/gea/ppdm.py +0 -0
  271. {gea_program-0.61.0 → gea_program-0.63.0}/gea/profile_catalog.py +0 -0
  272. {gea_program-0.61.0 → gea_program-0.63.0}/gea/project.py +0 -0
  273. {gea_program-0.61.0 → gea_program-0.63.0}/gea/qt6_downhole_app.py +0 -0
  274. {gea_program-0.61.0 → gea_program-0.63.0}/gea/quakeml.py +0 -0
  275. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reconciler.py +0 -0
  276. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  277. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  278. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/WMM2025.COF +0 -0
  279. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  280. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/eia_prices.provenance.json +0 -0
  281. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  282. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  283. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/iscwsa_rev5_example.json +0 -0
  284. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
  285. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
  286. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  287. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  288. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  289. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  290. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/mahoning_example.json +0 -0
  291. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/mud_motor_specs.json +0 -0
  292. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/owsg_tool_models.json +0 -0
  293. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/penetrator_ratings.json +0 -0
  294. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/seismicity_protocols.json +0 -0
  295. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/tool_sources.json +0 -0
  296. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/us_outline.json +0 -0
  297. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/us_outline.provenance.json +0 -0
  298. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_3d.provenance.json +0 -0
  299. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  300. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  301. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  302. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_surfaces.json.gz +0 -0
  303. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  304. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  305. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  306. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  307. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  308. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  309. {gea_program-0.61.0 → gea_program-0.63.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  310. {gea_program-0.61.0 → gea_program-0.63.0}/gea/report_history.py +0 -0
  311. {gea_program-0.61.0 → gea_program-0.63.0}/gea/rig_state.py +0 -0
  312. {gea_program-0.61.0 → gea_program-0.63.0}/gea/rock_inventory.py +0 -0
  313. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sample_record.py +0 -0
  314. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sample_well_profile.csv +0 -0
  315. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sbom.py +0 -0
  316. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seedlink.py +0 -0
  317. {gea_program-0.61.0 → gea_program-0.63.0}/gea/segy.py +0 -0
  318. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic.py +0 -0
  319. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_array.py +0 -0
  320. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_assoc.py +0 -0
  321. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_detect.py +0 -0
  322. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_film.py +0 -0
  323. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_harmonic.py +0 -0
  324. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_qc.py +0 -0
  325. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_response.py +0 -0
  326. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_signature.py +0 -0
  327. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_track.py +0 -0
  328. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_uncertainty.py +0 -0
  329. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_unlisted.py +0 -0
  330. {gea_program-0.61.0 → gea_program-0.63.0}/gea/seismic_watch.py +0 -0
  331. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sensor_swap.py +0 -0
  332. {gea_program-0.61.0 → gea_program-0.63.0}/gea/series_cache.py +0 -0
  333. {gea_program-0.61.0 → gea_program-0.63.0}/gea/service_life.py +0 -0
  334. {gea_program-0.61.0 → gea_program-0.63.0}/gea/setup_checklist.py +0 -0
  335. {gea_program-0.61.0 → gea_program-0.63.0}/gea/shapefile.py +0 -0
  336. {gea_program-0.61.0 → gea_program-0.63.0}/gea/shell.py +0 -0
  337. {gea_program-0.61.0 → gea_program-0.63.0}/gea/shut_in.py +0 -0
  338. {gea_program-0.61.0 → gea_program-0.63.0}/gea/simulation.py +0 -0
  339. {gea_program-0.61.0 → gea_program-0.63.0}/gea/site_map.py +0 -0
  340. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sla_report.py +0 -0
  341. {gea_program-0.61.0 → gea_program-0.63.0}/gea/slip.py +0 -0
  342. {gea_program-0.61.0 → gea_program-0.63.0}/gea/soak.py +0 -0
  343. {gea_program-0.61.0 → gea_program-0.63.0}/gea/sra.py +0 -0
  344. {gea_program-0.61.0 → gea_program-0.63.0}/gea/store_forward.py +0 -0
  345. {gea_program-0.61.0 → gea_program-0.63.0}/gea/strata_join.py +0 -0
  346. {gea_program-0.61.0 → gea_program-0.63.0}/gea/structure.py +0 -0
  347. {gea_program-0.61.0 → gea_program-0.63.0}/gea/supervisor.py +0 -0
  348. {gea_program-0.61.0 → gea_program-0.63.0}/gea/survey_cmd.py +0 -0
  349. {gea_program-0.61.0 → gea_program-0.63.0}/gea/survey_view.py +0 -0
  350. {gea_program-0.61.0 → gea_program-0.63.0}/gea/telemetry.py +0 -0
  351. {gea_program-0.61.0 → gea_program-0.63.0}/gea/tls.py +0 -0
  352. {gea_program-0.61.0 → gea_program-0.63.0}/gea/tool_catalog.py +0 -0
  353. {gea_program-0.61.0 → gea_program-0.63.0}/gea/tool_library.py +0 -0
  354. {gea_program-0.61.0 → gea_program-0.63.0}/gea/tool_taxonomy.py +0 -0
  355. {gea_program-0.61.0 → gea_program-0.63.0}/gea/torque_drag.py +0 -0
  356. {gea_program-0.61.0 → gea_program-0.63.0}/gea/transient.py +0 -0
  357. {gea_program-0.61.0 → gea_program-0.63.0}/gea/vibration.py +0 -0
  358. {gea_program-0.61.0 → gea_program-0.63.0}/gea/well3d.py +0 -0
  359. {gea_program-0.61.0 → gea_program-0.63.0}/gea/well_assembler.py +0 -0
  360. {gea_program-0.61.0 → gea_program-0.63.0}/gea/well_report.py +0 -0
  361. {gea_program-0.61.0 → gea_program-0.63.0}/gea/well_test_validation.py +0 -0
  362. {gea_program-0.61.0 → gea_program-0.63.0}/gea/wellplan.py +0 -0
  363. {gea_program-0.61.0 → gea_program-0.63.0}/gea/wellpos.py +0 -0
  364. {gea_program-0.61.0 → gea_program-0.63.0}/gea/wits0.py +0 -0
  365. {gea_program-0.61.0 → gea_program-0.63.0}/gea/witsml.py +0 -0
  366. {gea_program-0.61.0 → gea_program-0.63.0}/gea/workspace.py +0 -0
  367. {gea_program-0.61.0 → gea_program-0.63.0}/gea/xlsx_read.py +0 -0
  368. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/dependency_links.txt +0 -0
  369. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/entry_points.txt +0 -0
  370. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/requires.txt +0 -0
  371. {gea_program-0.61.0 → gea_program-0.63.0}/gea_program.egg-info/top_level.txt +0 -0
  372. {gea_program-0.61.0 → gea_program-0.63.0}/setup.cfg +0 -0
  373. {gea_program-0.61.0 → gea_program-0.63.0}/tests/test_acceptance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gea-program
3
- Version: 0.61.0
3
+ Version: 0.63.0
4
4
  Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
5
5
  Author: Daniel T. Murphy
6
6
  License: MPL-2.0
@@ -683,13 +683,25 @@ catalogue well is added only from an entry that carries a downhole gauge
683
683
  series, with a well inside it and its gauge depth; a live seismic station
684
684
  whose feed has written nothing yet is listed as having no recording yet.
685
685
 
686
+ ### Trusted timestamps
687
+
688
+ A signed dossier's time is the signing machine's clock. With a public
689
+ time-stamping service named (RFC 3161: DigiCert, Sectigo or the site's
690
+ own), each dossier also carries the authority's signed word that its
691
+ signature existed at a given time - only the signature's SHA-256 is
692
+ sent - and the dossier's own checker verifies it to a root the reader's
693
+ computer trusts. `gea dossier --workspace C:\site --timestamp-url
694
+ http://timestamp.digicert.com --timestamp on`; `gea help dossier`.
695
+
686
696
  ### Casing design and kick tolerance
687
697
 
688
698
  Each casing string's burst, collapse and tension ratings by API TR 5C3,
689
699
  from its size, weight and grade, against the loads the hole can put on it
690
700
  - gas to the surface held by the shoe, an emptied string, the buoyed
691
701
  weight with overpull - with the smallest safety factor and where, and the
692
- gas kick each open hole below a shoe can take and still be shut in. `gea
702
+ gas kick each open hole below a shoe can take and still be shut in - the
703
+ gas a real gas at the well's pressure and temperature, with a swabbed
704
+ kick beside each. `gea
693
705
  casing --example`; declared on the **Casing & kick tolerance** tab, with
694
706
  `gea casing --workspace C:\site --well SWD-1 --strings ...`, or in the
695
707
  declarations sheet. `gea help casing`.
@@ -644,13 +644,25 @@ catalogue well is added only from an entry that carries a downhole gauge
644
644
  series, with a well inside it and its gauge depth; a live seismic station
645
645
  whose feed has written nothing yet is listed as having no recording yet.
646
646
 
647
+ ### Trusted timestamps
648
+
649
+ A signed dossier's time is the signing machine's clock. With a public
650
+ time-stamping service named (RFC 3161: DigiCert, Sectigo or the site's
651
+ own), each dossier also carries the authority's signed word that its
652
+ signature existed at a given time - only the signature's SHA-256 is
653
+ sent - and the dossier's own checker verifies it to a root the reader's
654
+ computer trusts. `gea dossier --workspace C:\site --timestamp-url
655
+ http://timestamp.digicert.com --timestamp on`; `gea help dossier`.
656
+
647
657
  ### Casing design and kick tolerance
648
658
 
649
659
  Each casing string's burst, collapse and tension ratings by API TR 5C3,
650
660
  from its size, weight and grade, against the loads the hole can put on it
651
661
  - gas to the surface held by the shoe, an emptied string, the buoyed
652
662
  weight with overpull - with the smallest safety factor and where, and the
653
- gas kick each open hole below a shoe can take and still be shut in. `gea
663
+ gas kick each open hole below a shoe can take and still be shut in - the
664
+ gas a real gas at the well's pressure and temperature, with a swabbed
665
+ kick beside each. `gea
654
666
  casing --example`; declared on the **Casing & kick tolerance** tab, with
655
667
  `gea casing --workspace C:\site --well SWD-1 --strings ...`, or in the
656
668
  declarations sheet. `gea help casing`.
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.61.0"
126
+ __version__ = "0.63.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -596,6 +596,12 @@ def main(argv=None) -> int:
596
596
  p_dz.add_argument("--rotate-key", action="store_true", help="retire this site's signing key and start a new one, signed over by the old (give --reason)")
597
597
  p_dz.add_argument("--reason", type=str, default="", help="with --rotate-key: why the key is retired")
598
598
  p_dz.add_argument("--key-history", action="store_true", help="the site's keys, current and retired, and the rotations between them")
599
+ p_dz.add_argument("--timestamp-url", type=str, default=None, help="the RFC 3161 time-stamping service to use, e.g. http://timestamp.digicert.com ('none' to forget it)")
600
+ p_dz.add_argument("--timestamp", type=str, choices=["on", "off"], default=None, help="stamp every dossier as it is signed (on) or not (off)")
601
+ p_dz.add_argument("--timestamp-anchors", type=str, default=None, help="a PEM file with the service's root certificate, when this machine's store does not hold it ('none' to forget it)")
602
+ p_dz.add_argument("--timestamp-test", action="store_true", help="ask the service to stamp a random hash and check its reply (nothing is written)")
603
+ p_dz.add_argument("--stamp", type=str, default=None, help="stamp a dossier this site signed, by its id (gea dossier --list)")
604
+ p_dz.add_argument("--anchors", type=str, default="", help="with --verify: a PEM file of roots to trust for the timestamp, beside this machine's own")
599
605
  p_dz.add_argument("--actor", type=str, default="cli")
600
606
  p_dz.add_argument("--json", action="store_true")
601
607
 
@@ -653,7 +659,9 @@ def main(argv=None) -> int:
653
659
  p_cs.add_argument("--strings", type=str, default=None, help="shallowest shoe first: 'surface:13-3/8:54.5:J55:0-1500:17.5:9.0; intermediate:9-5/8:47:N80:0-7000:12.25:9.8' (what:od:lb_ft:grade:top-shoe:hole_in:mud_ppg[:wall_in])")
654
660
  for k_, h_ in (("td", "the well's TD below the deepest string, ft MD"), ("td-hole", "the hole below the deepest string, in"), ("td-mw", "the mud below the deepest string, ppg"),
655
661
  ("pp", "a pore pressure for the well when the Pore pressure tab has none, ppg"), ("fg", "a fracture gradient for the well when the Pore pressure tab has none, ppg"),
656
- ("kick", "kick intensity above the mud, ppg (0.5)"), ("gas", "gas gradient, psi/ft (0.1)"), ("backup", "burst backup gradient outside, psi/ft (0.465)"),
662
+ ("kick", "kick intensity above the mud, ppg (0.5)"), ("gas", "a fixed gas gradient, psi/ft, in place of the real gas ('none' for the real gas again)"),
663
+ ("gas-sg", "the gas's specific gravity, air 1 (0.65)"), ("surface-temp", "the temperature at the surface, F (70)"),
664
+ ("geothermal", "the geothermal gradient, F per 100 ft (1.5)"), ("backup", "burst backup gradient outside, psi/ft (0.465)"),
657
665
  ("evacuation", "how far the string is emptied for collapse, 0 to 1 (1: to the shoe)"), ("df-burst", "burst design factor (1.1)"),
658
666
  ("df-collapse", "collapse design factor (1.125)"), ("df-tension", "tension design factor (1.6)"), ("overpull", "overpull, klbf (100)"),
659
667
  ("bha-od", "BHA outside diameter, in"), ("bha-length", "BHA length, ft"), ("dp-od", "drill pipe outside diameter, in")):
@@ -2505,11 +2513,40 @@ def main(argv=None) -> int:
2505
2513
  except WorkspaceError as e:
2506
2514
  raise SystemExit(f"dossier: {e}")
2507
2515
  if a.verify:
2508
- r = _DZ.verify(a.verify, ws, a.sources)
2516
+ if a.anchors and ws is None:
2517
+ from . import dossier_verify as _DV, timestamp as _TSM
2518
+ with open(a.anchors, "rb") as fh_:
2519
+ r = _DV.check(a.verify, a.sources, _TSM.ts_system_anchors() + _TSM.ts_pem_certs(fh_.read()))
2520
+ else:
2521
+ r = _DZ.verify(a.verify, ws, a.sources)
2509
2522
  print(_json.dumps(r, default=str) if a.json else _DZ.text(r))
2510
2523
  return 0 if r["status"] == "VALID" else 1
2511
2524
  if ws is None:
2512
2525
  raise SystemExit("dossier: give --workspace (or --verify FILE)")
2526
+ if a.timestamp_url is not None or a.timestamp is not None or a.timestamp_anchors is not None:
2527
+ try:
2528
+ st_ = _DZ.set_timestamp(ws, a.actor, ("" if (a.timestamp_url or "").lower() == "none" else a.timestamp_url),
2529
+ None if a.timestamp is None else a.timestamp == "on",
2530
+ ("" if (a.timestamp_anchors or "").lower() == "none" else a.timestamp_anchors))
2531
+ except ValueError as ex:
2532
+ raise SystemExit(f"dossier: {ex}")
2533
+ print(f"time-stamping service: {st_['url'] or 'none'}; every dossier stamped as it is signed: {'yes' if st_['enabled'] else 'no'}"
2534
+ + (f"; extra trusted roots: {st_['anchors']}" if st_["anchors"] else ""))
2535
+ return 0
2536
+ if a.timestamp_test or a.stamp:
2537
+ from . import timestamp as _TSM
2538
+ try:
2539
+ if a.timestamp_test:
2540
+ t_ = _DZ.test_timestamp(ws)
2541
+ print(f"{t_['url']}: {t_['status']} - {t_['tsa']} stamped {t_['gen_time']}" + (f" (accuracy {t_['accuracy_s']:g} s)" if t_.get("accuracy_s") else ""))
2542
+ print(f" the chain: {t_['chain_detail']}")
2543
+ return 0 if t_["status"] in ("TRUSTED", "VERIFIED") else 1
2544
+ rec = _DZ.stamp(ws, a.actor, a.stamp)
2545
+ except (KeyError, ValueError, OSError) as ex:
2546
+ raise SystemExit(f"dossier: {ex.args[0] if ex.args else ex}")
2547
+ print(f"stamped {rec['dossier_id']}: {rec['status']} - {rec['tsa']} at {rec['gen_time']} (signed {rec['signed_utc']} by this machine's clock)")
2548
+ print(f" the chain: {rec['chain']}")
2549
+ return 0
2513
2550
  if a.key:
2514
2551
  k = _DZ.key_info(ws)
2515
2552
  print(f"Ed25519 {k['fingerprint']} (public key {k['public_key']}, made {k['created_utc']})" if k else "no signing key yet: the first dossier makes one")
@@ -2532,8 +2569,11 @@ def main(argv=None) -> int:
2532
2569
  print("no key history yet")
2533
2570
  return 0
2534
2571
  if a.list:
2572
+ st_ = _DZ.stamps(ws)
2535
2573
  for e in reversed(_DZ.ledger(ws)):
2536
- print(f"{e['utc']} {e['dossier_id']} {e['display']:<24} {e['n_files']:>4} files {e['path']}")
2574
+ t_ = st_.get(e["dossier_id"]) or {}
2575
+ print(f"{e['utc']} {e['dossier_id']} {e['display']:<24} {e['n_files']:>4} files {e['path']}"
2576
+ + (f" [timestamp {t_['status']}" + (f" {t_['gen_time']}]" if t_.get("gen_time") else "]") if t_ else ""))
2537
2577
  return 0
2538
2578
  try:
2539
2579
  e = _DZ.build(ws, a.actor, __version__, a.well, a.include_sources)
@@ -2542,6 +2582,9 @@ def main(argv=None) -> int:
2542
2582
  print(f"signed {e['dossier_id']}: {e['display']}, {e['n_files']} file(s), {e['n_sources']} source record(s) {'embedded' if e['sources_embedded'] else 'by hash'}")
2543
2583
  print(f" {os.path.join(ws.reports_dir, e['path'])}")
2544
2584
  print(f" key fingerprint {e['fingerprint']}")
2585
+ t_ = e.get("timestamp")
2586
+ if t_:
2587
+ print(f" trusted timestamp: {t_['status']}" + (f" - {t_['tsa']} at {t_['gen_time']}" if t_.get("gen_time") else f" - {t_.get('reason', '')}"))
2545
2588
  return 0
2546
2589
  elif a.cmd == "collision":
2547
2590
  import json as _json
@@ -2625,7 +2668,8 @@ def main(argv=None) -> int:
2625
2668
  ws = Workspace(a.workspace) if a.workspace else None
2626
2669
  scene = "example" if (a.example or ws is None) else "workspace"
2627
2670
  keys_ = {"td": "td_md_ft", "td_hole": "td_hole_in", "td_mw": "td_mw_ppg", "pp": "pp_ppg", "fg": "fg_ppg", "kick": "kick_intensity_ppg",
2628
- "gas": "gas_gradient_psi_ft", "backup": "backup_gradient_psi_ft", "evacuation": "evacuation", "df_burst": "df_burst",
2671
+ "gas": "gas_gradient_psi_ft", "gas_sg": "gas_sg", "surface_temp": "surface_temp_f", "geothermal": "geothermal_f_100ft",
2672
+ "backup": "backup_gradient_psi_ft", "evacuation": "evacuation", "df_burst": "df_burst",
2629
2673
  "df_collapse": "df_collapse", "df_tension": "df_tension", "overpull": "overpull_klbf", "bha_od": "bha_od_in",
2630
2674
  "bha_length": "bha_length_ft", "dp_od": "dp_od_in"}
2631
2675
  vals_ = {v: getattr(a, k) for k, v in keys_.items() if getattr(a, k) is not None}