messagefoundry 0.3.2__tar.gz → 0.5.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 (416) hide show
  1. messagefoundry-0.5.0/.gitignore +347 -0
  2. messagefoundry-0.5.0/CHANGELOG.md +5012 -0
  3. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/NOTICE +16 -4
  4. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/PKG-INFO +95 -31
  5. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/README.md +77 -18
  6. messagefoundry-0.5.0/messagefoundry/__init__.py +360 -0
  7. messagefoundry-0.5.0/messagefoundry/__main__.py +8531 -0
  8. messagefoundry-0.5.0/messagefoundry/_vendor/__init__.py +7 -0
  9. messagefoundry-0.5.0/messagefoundry/_vendor/defusedxml/ElementTree.py +156 -0
  10. messagefoundry-0.5.0/messagefoundry/_vendor/defusedxml/LICENSE +49 -0
  11. messagefoundry-0.5.0/messagefoundry/_vendor/defusedxml/README.md +59 -0
  12. messagefoundry-0.5.0/messagefoundry/_vendor/defusedxml/__init__.py +3 -0
  13. messagefoundry-0.5.0/messagefoundry/_vendor/defusedxml/common.py +131 -0
  14. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/actions.py +23 -5
  15. messagefoundry-0.5.0/messagefoundry/anon/__init__.py +143 -0
  16. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/anon/_pools.py +1 -1
  17. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/anon/hl7.py +26 -29
  18. messagefoundry-0.5.0/messagefoundry/anon/keying.py +185 -0
  19. messagefoundry-0.5.0/messagefoundry/anon/leak.py +467 -0
  20. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/anon/rules.py +61 -28
  21. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/anon/surrogates.py +157 -15
  22. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/__init__.py +1 -1
  23. messagefoundry-0.5.0/messagefoundry/api/_ui_seam.py +464 -0
  24. messagefoundry-0.5.0/messagefoundry/api/_webconsole_import.py +90 -0
  25. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/app.py +3466 -715
  26. messagefoundry-0.5.0/messagefoundry/api/approvals.py +1136 -0
  27. messagefoundry-0.5.0/messagefoundry/api/auth_models.py +507 -0
  28. messagefoundry-0.5.0/messagefoundry/api/auth_routes.py +1698 -0
  29. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/client_networks.py +39 -21
  30. messagefoundry-0.5.0/messagefoundry/api/field_authz.py +331 -0
  31. messagefoundry-0.5.0/messagefoundry/api/header_floor.py +354 -0
  32. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/metrics.py +270 -44
  33. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/models.py +640 -96
  34. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/multipart.py +32 -2
  35. messagefoundry-0.5.0/messagefoundry/api/phi_gate.py +185 -0
  36. messagefoundry-0.5.0/messagefoundry/api/protocol_headers.py +436 -0
  37. messagefoundry-0.5.0/messagefoundry/api/request_model.py +40 -0
  38. messagefoundry-0.5.0/messagefoundry/api/request_timeout.py +121 -0
  39. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/security.py +390 -133
  40. messagefoundry-0.5.0/messagefoundry/api/svg_sanitize.py +379 -0
  41. messagefoundry-0.5.0/messagefoundry/api/tls.py +898 -0
  42. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/api/tls_client_cert.py +50 -5
  43. messagefoundry-0.5.0/messagefoundry/api/validation.py +289 -0
  44. messagefoundry-0.5.0/messagefoundry/api_tls_source.py +34 -0
  45. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/apiclient/__init__.py +1 -1
  46. messagefoundry-0.5.0/messagefoundry/apiclient/client.py +1773 -0
  47. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/__init__.py +1 -1
  48. messagefoundry-0.5.0/messagefoundry/auth/anchor_path.py +1159 -0
  49. messagefoundry-0.5.0/messagefoundry/auth/audit_visibility.py +146 -0
  50. messagefoundry-0.5.0/messagefoundry/auth/channel_scope.py +130 -0
  51. messagefoundry-0.5.0/messagefoundry/auth/data/common_passwords.NOTICE +133 -0
  52. messagefoundry-0.5.0/messagefoundry/auth/data/common_passwords.txt +15256 -0
  53. messagefoundry-0.5.0/messagefoundry/auth/identity.py +146 -0
  54. messagefoundry-0.5.0/messagefoundry/auth/ldap.py +1002 -0
  55. messagefoundry-0.5.0/messagefoundry/auth/ldap_tls.py +70 -0
  56. messagefoundry-0.5.0/messagefoundry/auth/notifications.py +234 -0
  57. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/oidc/__init__.py +3 -1
  58. messagefoundry-0.5.0/messagefoundry/auth/oidc/claims.py +459 -0
  59. messagefoundry-0.5.0/messagefoundry/auth/oidc/flow.py +442 -0
  60. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/oidc/jwks.py +39 -24
  61. messagefoundry-0.5.0/messagefoundry/auth/oidc_http.py +211 -0
  62. messagefoundry-0.5.0/messagefoundry/auth/passwords.py +71 -0
  63. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/permissions.py +37 -4
  64. messagefoundry-0.5.0/messagefoundry/auth/policy.py +356 -0
  65. messagefoundry-0.5.0/messagefoundry/auth/ratelimit.py +97 -0
  66. messagefoundry-0.5.0/messagefoundry/auth/reconcile.py +450 -0
  67. messagefoundry-0.5.0/messagefoundry/auth/service.py +9362 -0
  68. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/tokens.py +1 -1
  69. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/auth/totp.py +78 -13
  70. messagefoundry-0.5.0/messagefoundry/auth/trust_anchors.py +1259 -0
  71. messagefoundry-0.5.0/messagefoundry/auth/webauthn.py +578 -0
  72. messagefoundry-0.5.0/messagefoundry/checks.py +2752 -0
  73. messagefoundry-0.5.0/messagefoundry/cli_common.py +314 -0
  74. messagefoundry-0.5.0/messagefoundry/cli_surface.py +131 -0
  75. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/__init__.py +6 -1
  76. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/active_environment.py +1 -1
  77. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/ai_policy.py +11 -17
  78. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/alerts_edit.py +1 -2
  79. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/anchor.py +1 -1
  80. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/code_sets.py +15 -7
  81. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/codeset_edit.py +23 -7
  82. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/connection_schema.py +12 -36
  83. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/connections_edit.py +19 -1
  84. messagefoundry-0.5.0/messagefoundry/config/connections_file.py +965 -0
  85. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/db_lookup.py +10 -3
  86. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/environments.py +1 -1
  87. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/fhir_lookup.py +58 -29
  88. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/fingerprint.py +14 -2
  89. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/graph.py +6 -4
  90. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/impact.py +14 -3
  91. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/ingest_time.py +1 -1
  92. messagefoundry-0.5.0/messagefoundry/config/loaded_crls.py +159 -0
  93. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/memory_encryption.py +1 -1
  94. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/models.py +243 -69
  95. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/reachability.py +1 -1
  96. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/reference.py +1 -1
  97. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/response.py +36 -4
  98. messagefoundry-0.5.0/messagefoundry/config/retention_classification.py +269 -0
  99. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/run_context.py +1 -1
  100. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/secretprovider.py +1 -1
  101. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/secretprovider_vault.py +83 -3
  102. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/security_edit.py +1 -1
  103. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/send_snapshot.py +1 -1
  104. messagefoundry-0.5.0/messagefoundry/config/settings.py +7310 -0
  105. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/state.py +1 -1
  106. messagefoundry-0.5.0/messagefoundry/config/static_credentials.py +649 -0
  107. messagefoundry-0.5.0/messagefoundry/config/tls_policy.py +2716 -0
  108. messagefoundry-0.5.0/messagefoundry/config/tls_probe.py +189 -0
  109. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/config/wiring.py +3264 -248
  110. messagefoundry-0.5.0/messagefoundry/connection_names.py +71 -0
  111. messagefoundry-0.5.0/messagefoundry/console_streams.py +46 -0
  112. messagefoundry-0.5.0/messagefoundry/content_type.py +50 -0
  113. messagefoundry-0.5.0/messagefoundry/controlchars.py +174 -0
  114. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/corepoint_import.py +673 -151
  115. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/crashdump.py +1 -1
  116. messagefoundry-0.5.0/messagefoundry/credential.py +211 -0
  117. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/diagnostics.py +1 -1
  118. messagefoundry-0.5.0/messagefoundry/fhirsearch.py +194 -0
  119. {messagefoundry-0.3.2/messagefoundry/transports → messagefoundry-0.5.0/messagefoundry}/framing.py +48 -20
  120. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/__init__.py +1 -1
  121. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/_core.py +56 -11
  122. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/_hl7data.py +1 -1
  123. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/adt.py +1 -1
  124. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/all_types.py +1 -1
  125. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/bar.py +1 -1
  126. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/dft.py +1 -1
  127. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/documents.py +2 -2
  128. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/mdm.py +1 -1
  129. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/mfn.py +1 -1
  130. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/oml.py +1 -1
  131. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/orl.py +1 -1
  132. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/orm.py +5 -6
  133. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/oru.py +1 -1
  134. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/ras.py +1 -1
  135. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/rde.py +1 -1
  136. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/siu.py +1 -1
  137. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/vxu.py +1 -1
  138. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/hl7schema.py +1 -1
  139. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/hl7structures.py +14 -22
  140. messagefoundry-0.5.0/messagefoundry/integrity.py +892 -0
  141. messagefoundry-0.5.0/messagefoundry/keywrap.py +867 -0
  142. messagefoundry-0.5.0/messagefoundry/last_resort.py +156 -0
  143. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/lens.py +1534 -217
  144. messagefoundry-0.5.0/messagefoundry/lens_schema.py +139 -0
  145. messagefoundry-0.5.0/messagefoundry/log_backoff.py +156 -0
  146. messagefoundry-0.5.0/messagefoundry/log_spool.py +384 -0
  147. messagefoundry-0.5.0/messagefoundry/logging_guard.py +784 -0
  148. messagefoundry-0.5.0/messagefoundry/logging_setup.py +1586 -0
  149. messagefoundry-0.5.0/messagefoundry/mllpcodec.py +240 -0
  150. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/netaddr.py +1 -1
  151. messagefoundry-0.5.0/messagefoundry/odbc_env.py +37 -0
  152. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/__init__.py +14 -11
  153. messagefoundry-0.5.0/messagefoundry/parsing/_bounded_inflate.py +171 -0
  154. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/_builtin_hl7.py +115 -38
  155. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/binary.py +17 -3
  156. messagefoundry-0.5.0/messagefoundry/parsing/compression.py +467 -0
  157. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/consistency.py +9 -5
  158. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/__init__.py +3 -3
  159. messagefoundry-0.5.0/messagefoundry/parsing/dicom/_deps.py +107 -0
  160. messagefoundry-0.5.0/messagefoundry/parsing/dicom/_inflate.py +154 -0
  161. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/_util.py +1 -1
  162. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/dataset.py +31 -13
  163. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/errors.py +1 -1
  164. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/hl7_map.py +1 -1
  165. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/dicom/peek.py +26 -16
  166. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/fhir/__init__.py +3 -3
  167. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/fhir/_deps.py +1 -1
  168. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/fhir/errors.py +1 -1
  169. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/fhir/peek.py +10 -9
  170. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/fhir/resource.py +19 -13
  171. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/groups.py +1 -1
  172. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/message.py +130 -188
  173. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/peek.py +118 -98
  174. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/sniff.py +150 -7
  175. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/split.py +23 -10
  176. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/summary.py +1 -1
  177. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/tree.py +2 -2
  178. messagefoundry-0.5.0/messagefoundry/parsing/validate.py +337 -0
  179. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/__init__.py +2 -2
  180. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/_deps.py +1 -1
  181. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/delimiters.py +1 -1
  182. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/errors.py +1 -1
  183. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/interchange.py +31 -12
  184. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/message.py +1 -1
  185. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/peek.py +1 -1
  186. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/x12/validate.py +68 -38
  187. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/__init__.py +1 -1
  188. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/_deps.py +1 -1
  189. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/errors.py +1 -1
  190. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/harden.py +1 -1
  191. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/message.py +46 -18
  192. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/schema.py +1 -1
  193. messagefoundry-0.5.0/messagefoundry/parsing/xml/signature.py +173 -0
  194. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/parsing/xml/wsdl.py +1 -1
  195. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/__init__.py +14 -3
  196. messagefoundry-0.5.0/messagefoundry/pipeline/_sandbox_codec.py +1177 -0
  197. messagefoundry-0.5.0/messagefoundry/pipeline/_sandbox_worker.py +318 -0
  198. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/alert_sinks.py +455 -61
  199. messagefoundry-0.5.0/messagefoundry/pipeline/alerts.py +836 -0
  200. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/cert_expiry.py +227 -11
  201. messagefoundry-0.5.0/messagefoundry/pipeline/cluster.py +1945 -0
  202. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/cluster_sqlserver.py +241 -112
  203. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/config_convergence.py +1 -1
  204. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/connscale_shim.py +1 -1
  205. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/dr.py +132 -13
  206. messagefoundry-0.5.0/messagefoundry/pipeline/dr_backup.py +3391 -0
  207. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/dryrun.py +336 -56
  208. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/dryrun_trace.py +105 -10
  209. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/engine.py +708 -66
  210. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/gcm_invocations.py +5 -1
  211. messagefoundry-0.5.0/messagefoundry/pipeline/ingress_guards.py +584 -0
  212. messagefoundry-0.5.0/messagefoundry/pipeline/intake_bound.py +373 -0
  213. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/leader_tasks.py +1 -1
  214. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/phase_timing.py +1 -1
  215. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/reference_sync.py +31 -8
  216. messagefoundry-0.5.0/messagefoundry/pipeline/reply_wait.py +183 -0
  217. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/retention.py +205 -8
  218. messagefoundry-0.5.0/messagefoundry/pipeline/sandbox.py +943 -0
  219. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/saturation.py +1 -1
  220. messagefoundry-0.5.0/messagefoundry/pipeline/secret_rotation.py +818 -0
  221. messagefoundry-0.5.0/messagefoundry/pipeline/security_notify.py +560 -0
  222. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/sharding.py +7 -1
  223. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/stage_dispatcher.py +841 -134
  224. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/state_convergence.py +1 -1
  225. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/supervisor.py +73 -20
  226. messagefoundry-0.5.0/messagefoundry/pipeline/sync_reply.py +321 -0
  227. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/update_check.py +1 -1
  228. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/pipeline/wiring_runner.py +4135 -569
  229. messagefoundry-0.5.0/messagefoundry/pki.py +621 -0
  230. messagefoundry-0.5.0/messagefoundry/privilege_check.py +322 -0
  231. messagefoundry-0.5.0/messagefoundry/redaction.py +1717 -0
  232. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/scaffold.py +32 -12
  233. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/secrets_dpapi.py +1 -1
  234. messagefoundry-0.5.0/messagefoundry/secretscrub.py +517 -0
  235. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/security/__init__.py +1 -1
  236. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/service.py +94 -29
  237. messagefoundry-0.5.0/messagefoundry/service_status.py +165 -0
  238. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/spreadsheet.py +1 -1
  239. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/__init__.py +15 -1
  240. messagefoundry-0.5.0/messagefoundry/store/audit_exclusion.py +47 -0
  241. messagefoundry-0.5.0/messagefoundry/store/audit_tee.py +152 -0
  242. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/backup_codec.py +199 -42
  243. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/base.py +1389 -64
  244. messagefoundry-0.5.0/messagefoundry/store/cipher_cells.py +82 -0
  245. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/content_search.py +23 -1
  246. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/crypto.py +611 -89
  247. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/crypto_transit.py +104 -33
  248. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/document_strip.py +1 -1
  249. messagefoundry-0.5.0/messagefoundry/store/gcm_bound.py +205 -0
  250. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/keyprovider.py +54 -5
  251. messagefoundry-0.5.0/messagefoundry/store/keyprovider_vault.py +366 -0
  252. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/metadata.py +44 -1
  253. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/pool_metrics.py +1 -1
  254. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/postgres.py +2919 -751
  255. messagefoundry-0.5.0/messagefoundry/store/privilege.py +708 -0
  256. messagefoundry-0.5.0/messagefoundry/store/schema_verify.py +421 -0
  257. messagefoundry-0.5.0/messagefoundry/store/sealed_cache.py +270 -0
  258. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/sqlserver.py +3955 -807
  259. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/store/store.py +6335 -2128
  260. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/support/__init__.py +1 -1
  261. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/support/bundle.py +57 -14
  262. messagefoundry-0.5.0/messagefoundry/support/redact.py +354 -0
  263. messagefoundry-0.5.0/messagefoundry/timezone.py +614 -0
  264. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/__init__.py +4 -3
  265. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/ai_broker.py +83 -16
  266. messagefoundry-0.5.0/messagefoundry/transports/base.py +969 -0
  267. messagefoundry-0.5.0/messagefoundry/transports/bounded_read.py +982 -0
  268. messagefoundry-0.5.0/messagefoundry/transports/database.py +1955 -0
  269. messagefoundry-0.5.0/messagefoundry/transports/dicom.py +1131 -0
  270. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/dicomweb.py +164 -11
  271. messagefoundry-0.5.0/messagefoundry/transports/direct.py +771 -0
  272. messagefoundry-0.5.0/messagefoundry/transports/email.py +405 -0
  273. messagefoundry-0.5.0/messagefoundry/transports/fhir.py +1595 -0
  274. messagefoundry-0.5.0/messagefoundry/transports/file.py +1964 -0
  275. messagefoundry-0.5.0/messagefoundry/transports/framing.py +29 -0
  276. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/http_auth.py +184 -143
  277. messagefoundry-0.5.0/messagefoundry/transports/http_listener.py +1300 -0
  278. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/loopback.py +1 -1
  279. messagefoundry-0.5.0/messagefoundry/transports/mllp.py +2531 -0
  280. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/passthrough.py +1 -1
  281. messagefoundry-0.5.0/messagefoundry/transports/remotefile.py +2370 -0
  282. messagefoundry-0.5.0/messagefoundry/transports/rest.py +2133 -0
  283. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/signing.py +178 -31
  284. messagefoundry-0.5.0/messagefoundry/transports/smart.py +813 -0
  285. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/soap.py +242 -62
  286. messagefoundry-0.5.0/messagefoundry/transports/strict_requests.py +634 -0
  287. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/tcp.py +140 -22
  288. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/timer.py +24 -3
  289. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/wincred.py +94 -14
  290. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/transports/x12.py +167 -27
  291. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/__init__.py +10 -4
  292. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/__main__.py +15 -0
  293. messagefoundry-0.5.0/messagefoundry/tray/actions.py +239 -0
  294. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/app.py +25 -2
  295. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/autostart.py +2 -0
  296. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/branding.py +2 -0
  297. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/config.py +253 -25
  298. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/control.py +2 -0
  299. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/iconset.py +2 -0
  300. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/instance.py +2 -0
  301. messagefoundry-0.5.0/messagefoundry/tray/logscrub.py +94 -0
  302. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/menu.py +2 -0
  303. messagefoundry-0.5.0/messagefoundry/tray/poller.py +437 -0
  304. messagefoundry-0.5.0/messagefoundry/tray/probe.py +390 -0
  305. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/state.py +26 -3
  306. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/theme.py +2 -0
  307. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/winshell.py +2 -0
  308. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/winsvc.py +2 -0
  309. messagefoundry-0.5.0/messagefoundry/uploads.py +1481 -0
  310. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/verify/__init__.py +1 -1
  311. messagefoundry-0.5.0/messagefoundry/verify/checks.py +421 -0
  312. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/verify/federation.py +262 -29
  313. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/verify/model.py +1 -1
  314. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/verify/report.py +1 -1
  315. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/verify/runner.py +46 -46
  316. messagefoundry-0.5.0/messagefoundry/verify/smoke.py +577 -0
  317. messagefoundry-0.5.0/pyproject.toml +794 -0
  318. messagefoundry-0.3.2/.gitignore +0 -156
  319. messagefoundry-0.3.2/CHANGELOG.md +0 -1018
  320. messagefoundry-0.3.2/messagefoundry/__init__.py +0 -204
  321. messagefoundry-0.3.2/messagefoundry/__main__.py +0 -4286
  322. messagefoundry-0.3.2/messagefoundry/adr_analyze.py +0 -216
  323. messagefoundry-0.3.2/messagefoundry/anon/__init__.py +0 -96
  324. messagefoundry-0.3.2/messagefoundry/anon/keying.py +0 -67
  325. messagefoundry-0.3.2/messagefoundry/anon/leak.py +0 -62
  326. messagefoundry-0.3.2/messagefoundry/api/_ui_seam.py +0 -201
  327. messagefoundry-0.3.2/messagefoundry/api/approvals.py +0 -199
  328. messagefoundry-0.3.2/messagefoundry/api/auth_models.py +0 -260
  329. messagefoundry-0.3.2/messagefoundry/api/auth_routes.py +0 -1033
  330. messagefoundry-0.3.2/messagefoundry/api/field_authz.py +0 -102
  331. messagefoundry-0.3.2/messagefoundry/api/tls.py +0 -58
  332. messagefoundry-0.3.2/messagefoundry/apiclient/client.py +0 -752
  333. messagefoundry-0.3.2/messagefoundry/auth/data/common_passwords.NOTICE +0 -13
  334. messagefoundry-0.3.2/messagefoundry/auth/data/common_passwords.txt +0 -10000
  335. messagefoundry-0.3.2/messagefoundry/auth/identity.py +0 -79
  336. messagefoundry-0.3.2/messagefoundry/auth/ldap.py +0 -364
  337. messagefoundry-0.3.2/messagefoundry/auth/notifications.py +0 -68
  338. messagefoundry-0.3.2/messagefoundry/auth/oidc/claims.py +0 -286
  339. messagefoundry-0.3.2/messagefoundry/auth/oidc/flow.py +0 -283
  340. messagefoundry-0.3.2/messagefoundry/auth/oidc_http.py +0 -132
  341. messagefoundry-0.3.2/messagefoundry/auth/passwords.py +0 -53
  342. messagefoundry-0.3.2/messagefoundry/auth/policy.py +0 -153
  343. messagefoundry-0.3.2/messagefoundry/auth/ratelimit.py +0 -55
  344. messagefoundry-0.3.2/messagefoundry/auth/reconcile.py +0 -220
  345. messagefoundry-0.3.2/messagefoundry/auth/service.py +0 -2818
  346. messagefoundry-0.3.2/messagefoundry/auth/trust_anchors.py +0 -357
  347. messagefoundry-0.3.2/messagefoundry/auth/webauthn.py +0 -346
  348. messagefoundry-0.3.2/messagefoundry/checks.py +0 -1419
  349. messagefoundry-0.3.2/messagefoundry/config/connections_file.py +0 -402
  350. messagefoundry-0.3.2/messagefoundry/config/settings.py +0 -4036
  351. messagefoundry-0.3.2/messagefoundry/config/tls_policy.py +0 -795
  352. messagefoundry-0.3.2/messagefoundry/integrity.py +0 -351
  353. messagefoundry-0.3.2/messagefoundry/last_resort.py +0 -55
  354. messagefoundry-0.3.2/messagefoundry/logging_setup.py +0 -502
  355. messagefoundry-0.3.2/messagefoundry/parsing/_backend.py +0 -51
  356. messagefoundry-0.3.2/messagefoundry/parsing/compression.py +0 -219
  357. messagefoundry-0.3.2/messagefoundry/parsing/dicom/_deps.py +0 -60
  358. messagefoundry-0.3.2/messagefoundry/parsing/dicom/_inflate.py +0 -164
  359. messagefoundry-0.3.2/messagefoundry/parsing/validate.py +0 -95
  360. messagefoundry-0.3.2/messagefoundry/parsing/xml/signature.py +0 -79
  361. messagefoundry-0.3.2/messagefoundry/pipeline/_sandbox_worker.py +0 -208
  362. messagefoundry-0.3.2/messagefoundry/pipeline/alerts.py +0 -414
  363. messagefoundry-0.3.2/messagefoundry/pipeline/cluster.py +0 -1058
  364. messagefoundry-0.3.2/messagefoundry/pipeline/dr_backup.py +0 -966
  365. messagefoundry-0.3.2/messagefoundry/pipeline/sandbox.py +0 -383
  366. messagefoundry-0.3.2/messagefoundry/pipeline/secret_rotation.py +0 -449
  367. messagefoundry-0.3.2/messagefoundry/pipeline/security_notify.py +0 -181
  368. messagefoundry-0.3.2/messagefoundry/pki.py +0 -162
  369. messagefoundry-0.3.2/messagefoundry/redaction.py +0 -101
  370. messagefoundry-0.3.2/messagefoundry/service_status.py +0 -90
  371. messagefoundry-0.3.2/messagefoundry/store/audit_tee.py +0 -75
  372. messagefoundry-0.3.2/messagefoundry/store/gcm_bound.py +0 -115
  373. messagefoundry-0.3.2/messagefoundry/store/keyprovider_vault.py +0 -145
  374. messagefoundry-0.3.2/messagefoundry/support/redact.py +0 -92
  375. messagefoundry-0.3.2/messagefoundry/timezone.py +0 -358
  376. messagefoundry-0.3.2/messagefoundry/transports/base.py +0 -382
  377. messagefoundry-0.3.2/messagefoundry/transports/database.py +0 -1063
  378. messagefoundry-0.3.2/messagefoundry/transports/dicom.py +0 -711
  379. messagefoundry-0.3.2/messagefoundry/transports/direct.py +0 -373
  380. messagefoundry-0.3.2/messagefoundry/transports/email.py +0 -252
  381. messagefoundry-0.3.2/messagefoundry/transports/fhir.py +0 -909
  382. messagefoundry-0.3.2/messagefoundry/transports/file.py +0 -892
  383. messagefoundry-0.3.2/messagefoundry/transports/http_listener.py +0 -488
  384. messagefoundry-0.3.2/messagefoundry/transports/mllp.py +0 -1460
  385. messagefoundry-0.3.2/messagefoundry/transports/remotefile.py +0 -974
  386. messagefoundry-0.3.2/messagefoundry/transports/rest.py +0 -1127
  387. messagefoundry-0.3.2/messagefoundry/transports/smart.py +0 -360
  388. messagefoundry-0.3.2/messagefoundry/tray/actions.py +0 -102
  389. messagefoundry-0.3.2/messagefoundry/tray/poller.py +0 -207
  390. messagefoundry-0.3.2/messagefoundry/tray/probe.py +0 -137
  391. messagefoundry-0.3.2/messagefoundry/uploads.py +0 -606
  392. messagefoundry-0.3.2/messagefoundry/verify/checks.py +0 -251
  393. messagefoundry-0.3.2/messagefoundry/verify/smoke.py +0 -292
  394. messagefoundry-0.3.2/pyproject.toml +0 -276
  395. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/LICENSE +0 -0
  396. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/generators/README.md +0 -0
  397. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/py.typed +0 -0
  398. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/security/semgrep/handler-security.yml +0 -0
  399. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/foreign_dark.ico +0 -0
  400. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/foreign_light.ico +0 -0
  401. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/not_installed_dark.ico +0 -0
  402. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/not_installed_light.ico +0 -0
  403. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/running_dark.ico +0 -0
  404. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/running_light.ico +0 -0
  405. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/running_unmanaged_dark.ico +0 -0
  406. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/running_unmanaged_light.ico +0 -0
  407. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/starting_dark.ico +0 -0
  408. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/starting_light.ico +0 -0
  409. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/stopped_dark.ico +0 -0
  410. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/stopped_light.ico +0 -0
  411. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/stopping_dark.ico +0 -0
  412. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/stopping_light.ico +0 -0
  413. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/unknown_dark.ico +0 -0
  414. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/unknown_light.ico +0 -0
  415. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/wedged_dark.ico +0 -0
  416. {messagefoundry-0.3.2 → messagefoundry-0.5.0}/messagefoundry/tray/assets/wedged_light.ico +0 -0
@@ -0,0 +1,347 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ .venv/
5
+ venv/
6
+ *.egg-info/
7
+ build/
8
+ dist/
9
+ # scripts/ci/invariant_mutations.py saves an engine file here while a break is applied (BACKLOG #1746).
10
+ *.invariant-mutation-backup
11
+
12
+ # Exception: a vendored GitHub Action's compiled output belongs in the repo, not a build artifact.
13
+ # Without this, `dist/` above silently drops .github/actions/cla-assistant-lite/dist/index.js from
14
+ # every `git add`, which would ship a workflow that references a file that was never committed.
15
+ !/.github/actions/**/dist/
16
+ !/.github/actions/**/dist/**
17
+
18
+ # Engine runtime data (PHI may live here — never commit)
19
+ *.db
20
+ *.db-wal
21
+ *.db-shm
22
+ *.pid
23
+ out/
24
+ harness_io/
25
+ *.log
26
+
27
+ # One-time bootstrap admin credential written next to the store (consumed + deleted by the operator) — never commit
28
+ bootstrap-admin.txt
29
+
30
+ # Secrets / credentials — never commit (no such files exist today; these are foot-gun guards)
31
+ .env
32
+ .env.*
33
+ *.key
34
+ *.pem
35
+ *.pfx
36
+ secrets/
37
+
38
+ # Container deployment secrets + TLS material — never commit (the *.example templates ARE tracked)
39
+ /docker/secrets.env
40
+ /docker/tls/
41
+
42
+ # are never committed. Ignore every samples/ subdirectory by DEFAULT rather than naming the partner
43
+ # here — fail-closed, so a new unlisted staging dir cannot reach a public repo just because nobody
44
+ # remembered to add a rule. The shipped example dirs are re-included explicitly.
45
+ /samples/*/
46
+ !/samples/config/
47
+ !/samples/consistency/
48
+ !/samples/dicom/
49
+ !/samples/ech-sidecar/
50
+ !/samples/generators/
51
+ !/samples/messages/
52
+ !/samples/results_relay/
53
+ # Generated, regenerable test corpus (build with: python -m messagefoundry.generators.adt). MUST come
54
+ # after the un-ignores above, or the re-included parent would drag it back in.
55
+ /samples/messages/adt/
56
+ # Workflow agent self-verification temp dirs (an isolated copy of a ported migration module + codesets
57
+ # + fixture for a check/dryrun). Customer-estate-derived — never commit. Delete after a porting batch.
58
+ /_verify_*/
59
+ # exports). Customer data — NEVER commit. `git archive` (the publish path) excludes it by
60
+ # construction; this is the local-only working area.
61
+ /migration-local/
62
+
63
+ # Tooling
64
+ .mypy_cache/
65
+ .ruff_cache/
66
+ .pytest_cache/
67
+ .vscode/
68
+ .idea/
69
+
70
+ # CI-only quality artifacts (generated by .github/workflows/quality-advisory.yml, and by anyone
71
+ # reproducing those jobs locally). None of these were ignored before, which mattered: the C901 delta
72
+ # inputs are ruff JSON carrying ABSOLUTE local paths, so a local `git add -A` would stage a home
73
+ # directory path straight into a commit -- exactly what scripts/security/scan_forbidden.py fires on.
74
+ coverage.xml
75
+ .coverage
76
+ diff-cover.md
77
+ jscpd-report/
78
+ .mutmut-cache
79
+ mutants/
80
+ mutmut-run.txt
81
+ mutmut-results.txt
82
+ c901-head.json
83
+ c901-base.json
84
+ base-tree/
85
+ # DAST scan receipts (ADR 0155). The documented verification commands write these into the repo root,
86
+ # and committed scan output is a class this project does not produce: the receipt carries no body,
87
+ # header or token, but it is still a machine-readable inventory of which routes are ungated and which
88
+ # are unreachable. CI uploads them as artifacts instead.
89
+ dast-auth-receipt.json
90
+ canary-*.json
91
+
92
+ # Claude Code: settings.json is shared/tracked; settings.local.json is machine-local (never commit).
93
+ # That first clause was FALSE from the day `/.claude/` landed until the publishing-boundary block
94
+ # below was reshaped to `/.claude/*` plus a negation -- BACKLOG #327's DONE note carried the
95
+ # contradiction to the owner rather than editing it in that lane. It is true again now. The rule
96
+ # below is redundant with `/.claude/*` and is kept as the statement of intent for this one file.
97
+ .claude/settings.local.json
98
+
99
+ # Local reference notes pointing at machine-specific Claude Code transcript paths — never commit
100
+ TRANSCRIPTS.md
101
+
102
+ # Local planning/marketing working docs — keep out of the repo
103
+ # (docs/DUAL_LICENSING_PLAN.md is now a committed artifact — see ADR 0017 / #13 licensing)
104
+ /docs/marketing/
105
+ # Individual docs/security/* working files (and vuln_metrics.py's local CSV output) were once
106
+ # enumerated here. They are all covered by the blanket /docs/security/ rule further down, so the
107
+ # list was redundant — and enumerating private filenames in a public file discloses the shape of
108
+ # the private set for no gain. Do not re-add per-file entries; extend the blanket rule instead.
109
+
110
+ # Operator-local load/throughput profiles are NOT ignored here any more, and must never be again.
111
+ # Two were, by name, at /harness/load/profiles/<name>.toml. That is a contradiction git cannot
112
+ # report: hatchling's force-include walks the FILESYSTEM and reads no .gitignore, so a harness wheel
113
+ # built on the machine holding those files shipped them, hosts and ports included (BACKLOG #1835).
114
+ # They belong in migration-local/profiles/, which /migration-local/ above already covers, which no
115
+ # force-include source names, and which docs/LOAD-TESTING.md and harness/load/profiles/README.md
116
+ # already name as the home for site-specific numbers. harness/load/profile.py reads that directory,
117
+ # so `--load <name>` still resolves. tests/test_packaging.py refuses a new anchored entry inside a
118
+ # force-included tree.
119
+ # Deep-research survey of alternative OSS DB backends for the shared-DB commit-wall — local working
120
+ # note, not a committed artifact (the conclusion is carried in the throughput ADRs / AI memory).
121
+ /docs/research/db-commit-wall-backend-survey.md
122
+
123
+ # --- MessageFoundry ---
124
+ .mefor/
125
+ *.db*
126
+ .DS_Store
127
+ Thumbs.db
128
+
129
+ # Agent/web-fetch debris dropped in the repo ROOT (e.g. blog.html, contest.txt, free.html) — never
130
+ # commit. Anchored to root (leading /) so tracked *.html/*.txt UNDER subdirs (docs/, samples/,
131
+ # scripts/, packaging/, messagefoundry/auth/data/…) are unaffected; no *.html/*.txt is legitimately
132
+ # tracked at the repo root, so an anchored catch-all is safe. Force-add (git add -f) if one ever is.
133
+ /*.html
134
+ /*.txt
135
+ /*.yml
136
+
137
+ # The real customer/vendor token list consumed by scripts/security/scan_forbidden.py at
138
+ # commit time. Only the SYNTHETIC scan-tokens.local.txt.example is ever committed.
139
+ #
140
+ # Deliberately unconditional, and listed ahead of the scanner it serves: an operator creates
141
+ # this file before the tooling that references it exists, so ignoring the path up front
142
+ # removes any window in which a real token list sits un-ignored in a working tree.
143
+ scripts/security/scan-tokens.local.txt
144
+
145
+ # --- Private-only paths (formerly enforced by scripts/publish/publish-denylist.txt) ---------------
146
+ # The cutover RETIRES the publish deny-list. On the private repo these were TRACKED and stripped from
147
+ # the mirror at publish time; with the deny-list gone and development happening directly on the public
148
+ # repo, a gitignore rule is now the ONLY thing keeping them out of a commit -- and the cutover runbook
149
+ # runs `git add -A`. Same failure shape as the leak-scanner token file, different files.
150
+ #
151
+ # DELIBERATELY NOT LISTED: tests/test_scan_forbidden.py, tests/test_anon_core.py and
152
+ # .github/dependabot.yml. Those were deny-listed too, but this change set publishes synthetic/public
153
+ # versions of them -- ignoring them here would silently drop content that is meant to ship.
154
+ # PUBLISHED by this change (removed from the list above): CLAUDE.md, docs/BACKLOG.md and
155
+ # docs/WORKTREES.md. All three were scanned and carry no customer/estate tokens (BACKLOG.md needed a
156
+ # two-line redaction). CLAUDE.md in particular MUST be tracked: it is gitignored-by-default's worst
157
+ # case here, because `git worktree add` cannot deliver an untracked file, so every worktree silently
158
+ # came up with ZERO project conventions loaded.
159
+ #
160
+ # `.claude/` is ignored by CONTENTS (`/.claude/*`), NOT as a directory, so `settings.json` can be
161
+ # re-included on the next line. Ignoring the directory itself would make that negation a silent
162
+ # no-op: git cannot re-include a file whose parent directory is excluded. Everything else under
163
+ # `.claude/` stays ignored by the same star rule -- `settings.local.json` (machine-local, also
164
+ # named at line 85), `worktrees/` (session state, not configuration), and anything Claude Code
165
+ # adds there later, which is ignored by DEFAULT rather than by enumeration.
166
+ #
167
+ # WHY settings.json IS TRACKED. It carries ENFORCED controls -- the deny-list covering `.env`,
168
+ # `secrets/**`, keys and the local `*.db` store -- and settings are enforced by the client where
169
+ # CLAUDE.md is only context, so section 5's prose is not a substitute for it. It does NOT wire
170
+ # `block-blanket-git-stage.ps1`: that script is present and tested but referenced by no matcher
171
+ # (BACKLOG #1339). Untracked, it hit the exact CLAUDE.md failure described above:
172
+ # measured 2026-08-13, of 62 local checkouts carrying CLAUDE.md only 12 had `.claude/settings.json`,
173
+ # so 50 ran with no deny-list and no staging guard. `git worktree add` delivers tracked files only.
174
+ /.claude/*
175
+ !/.claude/settings.json
176
+ # Named explicitly rather than left to `/.claude/*` above. Until this line, the only travelling
177
+ # protection for the session tree was that wildcard -- `.git/info/exclude` carries it too, but that
178
+ # file is per-clone and reaches nobody else. A later edit that narrows the wildcard or adds a second
179
+ # negation would expose full nested checkouts carrying `.venv`, `messagefoundry.db` and the caches.
180
+ # NOTHING under `.claude/` may be negated except `settings.json`; tests/test_private_paths_stay_ignored.py
181
+ # pins the tracked set so widening it fails a required check instead of shipping.
182
+ /.claude/worktrees/
183
+
184
+ # Codex transport is tracked; session state and migration backups are local.
185
+ /.codex/sessions/
186
+ /.codex/migration-backup/
187
+ /TRANSCRIPTS.md
188
+ /docs/security/
189
+ /docs/reviews/
190
+ /docs/marketing/
191
+ # Deliberately still private, each for a different reason. What decides which side a security
192
+ # document lands on is stated publicly in docs/SECURITY-DOCS-POLICY.md — do not restate the
193
+ # reasoning, the inventory or the file count here:
194
+ # docs/security/ — maintainer-internal working documents; see the policy above.
195
+ # docs/reviews/ — point-in-time review findings, withheld on the same test.
196
+ # docs/CI-TOPOLOGY.md — STALE: it documents the retired private-repo/public-mirror split and
197
+ # scripts/publish/, which the cutover deleted. Publishing it would actively
198
+ # mislead. Rewrite for the post-cutover topology or delete it.
199
+ # (docs/Secure_Development_Standards.md was here. PUBLISHED 2026-07-29 on the owner's call: the
200
+ # document licenses itself as publishable and adopter-facing, messagefoundry.org already served
201
+ # it, and 44 citations across the repo — including adr/TEMPLATE.md — pointed at a file that did
202
+ # not exist. Published from the newest copy, de-branded back to the generic lineage its own
203
+ # revision history names.)
204
+ /docs/CI-TOPOLOGY.md
205
+
206
+ # --- Development-process material (ADR 0160 Phase 1) ----------------------------------------------
207
+ # Subject test, from ADR 0160 D1: a tracked file must be something an OPERATOR running MessageFoundry
208
+ # needs, or something a SECURITY REVIEWER assessing it needs. Material whose subject is how this
209
+ # project is DEVELOPED -- session orchestration, wave schedules, per-session briefs -- fails both.
210
+ #
211
+ # Custody moved to the vault (MEFORORG/MessageFoundry-vault) BEFORE these left the tracked tree, so
212
+ # this rule is not the only copy. That ordering is the point: gitignoring alone would have left 103
213
+ # files as single unversioned copies that `git clean -xdf` erases.
214
+ #
215
+ # NOT a confidentiality control, and must never be described as one -- `git log` still contains all
216
+ # of it, and none of it was ever secret. It is process noise, not sensitive content. Anything
217
+ # genuinely sensitive belongs in the vault and always did (see the blanket rules above).
218
+ #
219
+ # HANDOFF-*.md is anchored to the ROOT and deliberately a PATTERN rather than the two filenames it
220
+ # currently matches: session handoffs kept landing in the repo's front door, and a pattern fails
221
+ # closed on the next one instead of waiting for somebody to notice. A handoff that genuinely must
222
+ # ship can still be force-added (`git add -f`).
223
+ #
224
+ # ⛔ DO NOT "FIX" THE ANCHOR BY DROPPING THE LEADING SLASH. It looks like a gap -- the root-anchored
225
+ # form matches nothing under docs/ -- and it was proposed as a tightening on exactly that reasoning.
226
+ # It is the wrong fix twice over:
227
+ # * The two places a handoff must not land are the repo ROOT and docs/releases/, and BOTH are
228
+ # already covered -- the root by the rule below, the directory by the rule above it. The case
229
+ # that motivated the change (PR #225 landing a handoff in docs/releases/ while the Phase 1 PR was
230
+ # open) is closed by that directory rule the moment nothing is tracked there, which is now true.
231
+ # * An unanchored `HANDOFF-*.md` would fail closed on `docs/benchmarks/`, where 21 handoff
232
+ # documents are TRACKED ON PURPOSE: they carry the measurement narrative for the ~133 data files
233
+ # beside them, and a new benchmark run legitimately produces another. Silently ignoring those
234
+ # would break working practice to close a gap that is already shut.
235
+ /docs/releases/
236
+ /HANDOFF-*.md
237
+
238
+ # --- Business material and internal engineering records (ADR 0160 D1, 2026-08-31) -----------------
239
+ # Same D1 subject test as the block above, applied to two sets Phase 1 did not reach. Owner ruling
240
+ # 2026-08-31 authorised this pass and settled the boundary question that came with it: D1 category 2
241
+ # GOVERNS, so anything a security reviewer needs STAYS PUBLIC. That is why no security document is
242
+ # in this block -- SECURITY.md, PHI.md, SUPPLY-CHAIN.md, SECURITY-LOOSENING.md, the ASVS phase
243
+ # inventory and the Secure_* standards are all reviewer material and remain tracked.
244
+ #
245
+ # Custody moved to the vault BEFORE these left the tracked tree, same ordering and same reason as
246
+ # Phase 1: 96b8feec on MEFORORG/MessageFoundry-vault, branch lander/adr0160-custody. This block
247
+ # untracks 46 files. Of those 46, 15 already existed in the vault and 7 of the 15 were DIVERGENT
248
+ # stale forks predating the 2026-07-27 cutover, so the vault copies were overwritten with the
249
+ # maintained public ones. A bare untrack would have left the vault holding the older text and
250
+ # nothing holding the newer.
251
+ #
252
+ # An earlier draft of this block said "20 of the 51 files ... and 9 of those". Those figures are
253
+ # measured over the CUSTODY set, which is larger: 96b8feec also took custody of docs/design and of
254
+ # docs/testing/VERIFY.md, and all of those stay tracked here for the reasons recorded below. 46 is
255
+ # the number that left, and 15/7 are its figures. The 20/9 pair is recorded rather than deleted
256
+ # because it also reached the pull request description, so a reader who remembers it needs to see
257
+ # it named as describing a different set rather than silently replaced.
258
+ #
259
+ # NOT a confidentiality control, and must never be described as one. `git log` still contains all of
260
+ # it and none of it was ever secret; the owner ruled explicitly against a history rewrite on
261
+ # 2026-08-31. This is subject-matter tidying, not withholding.
262
+ #
263
+ # Business and legal working documents -- audience is the maintainer deciding project direction, not
264
+ # an operator running the engine or a reviewer assessing it.
265
+ /docs/BRAND.md
266
+ /docs/CONTRIBUTOR-FIRST-ISSUES.md
267
+ /docs/CONTRIBUTOR-PROGRAM-PLAN.md
268
+ /docs/COUNSEL-ENGAGEMENT-BRIEF.md
269
+ /docs/DUAL_LICENSING_PLAN.md
270
+ /docs/POSITIONING.md
271
+ # Internal engineering records. research is exploratory; archive/throughput is superseded plans whose
272
+ # shipped outcome is docs/THROUGHPUT.md.
273
+ /docs/research/
274
+ /docs/archive/throughput/
275
+ #
276
+ # docs/design/ IS NOT HERE, and it was in an earlier draft of this block. Measured before removing it:
277
+ # docs/design/freethread.md is a CLAIM FILE for the required-status-check drift guard
278
+ # (tests/test_required_contexts.py reads it, and treats a missing claim file as an ERROR rather than a
279
+ # skip -- deliberately, because silently dropping a claim file is how a drift guard comes to guard
280
+ # nothing). Untracking it turns that guard's own anti-narrowing assertion red. The other three design
281
+ # notes have no such reference, but carving one file out of four costs a second negation and a second
282
+ # pinned exception to save moving three exploratory documents. Not worth it. The tree stays.
283
+ #
284
+ # docs/testing is maintainer QA planning -- draft plans awaiting owner approval, and a matrix and
285
+ # plan written against ONE specific maintainer build box. An operator reads none of it.
286
+ #
287
+ # An earlier draft of this line said WIN2025-TEST-PLAN.md "names the host and its identity". It does
288
+ # NOT: the file uses <box-hostname>, <box-ip>, <server>, <u> and <p> placeholders throughout. The
289
+ # removal is right on the D1 subject test -- maintainer QA planning for one build box is neither
290
+ # operator nor security-reviewer material -- and it never needed a disclosure claim to justify it.
291
+ # Overstating the reason is how a correct decision acquires a wrong rationale that outlives it.
292
+ #
293
+ # ONE EXCEPTION, and it is why this is a contents-glob rather than a directory rule.
294
+ # docs/testing/VERIFY.md is OPERATOR material and stays tracked: it documents `messagefoundry verify`,
295
+ # the wheel-only on-box acceptance check a real deployment runs, and docs/README.md lists it as step 6
296
+ # of "Start here -- a new operator, in order" while line 8 warns in terms that it "is an operator tool,
297
+ # not a test plan". docs/SECURITY.md cites it too. It passes D1 category 1 outright.
298
+ #
299
+ # `/docs/testing/` as a DIRECTORY rule would make the negation below inert -- git does not descend
300
+ # into an excluded directory, so a file inside one cannot be re-included. The trailing `*` keeps the
301
+ # directory itself readable so the negation binds. Do not "simplify" it back.
302
+ /docs/testing/*
303
+ !/docs/testing/VERIFY.md
304
+ # docs/testing/README.md is the SECOND negation, and it is a marker rather than QA material.
305
+ #
306
+ # The rule above works, and its success is the problem: from an engine checkout the directory holds
307
+ # one file, so a path cited under it is INDISTINGUISHABLE from work that was never done. A reader
308
+ # greps a cited path, finds nothing, and concludes the document does not exist -- when it does, in
309
+ # the vault. Measured 2026-09-03: BACKLOG #1011 step 6 instructed a reader to mark a disposition
310
+ # discharged in a path under this tree and called that file "the only place in the repo that records
311
+ # the true state", a sentence that is false from any engine checkout because the file is not in the
312
+ # repo at all. A builder acting on it would have claimed a criterion it could never read.
313
+ #
314
+ # The marker is the checkout-side answer: standing in the directory, or browsing to it on GitHub,
315
+ # you are told the material moved and told not to read absence as evidence. It is a POINTER, never
316
+ # an index -- it names no vaulted document, because a path-to-document map over a closed set
317
+ # discloses what is NOT covered by subtraction. Keep it that way if you edit it.
318
+ #
319
+ # This negation and the VERIFY.md one are the ONLY two permitted here, and
320
+ # tests/test_private_paths_stay_ignored.py pins the pair as an exact set. A third fails there until
321
+ # someone writes down why. See BACKLOG #1435.
322
+ !/docs/testing/README.md
323
+ # DO NOT ADD docs/benchmarks/ OR docs/quality-gates/ HERE. Both are DELIBERATELY ABSENT. ADR 0160 D6.2
324
+ # considered both and left them: the 21 bench handoffs carry the measurement narrative for the ~133
325
+ # data files beside them, so untracking either half strips the rationale from records that stay.
326
+ # Re-proposing this is re-deriving a decision that is already written down.
327
+
328
+ # A PR BODY IS SCRATCH, NOT A DELIVERABLE, AND ONE ALREADY REACHED A BRANCH TIP ONCE.
329
+ # `PR_BODY.md` was committed at the repo root on 2026-09-03 because a push hold stopped a pull
330
+ # request being opened, so the body had nowhere else to live. That is a real need and the file is
331
+ # genuinely useful in the worktree -- but it describes ONE branch, it goes stale the moment that
332
+ # branch merges, and `main` is the one place it must never land. Untracked-but-present is exactly
333
+ # the state that serves both, so the rule is here rather than in a reviewer's memory.
334
+ # Rooted with a leading slash: only the repo root, never a `docs/` or `tests/` file of that name.
335
+ /PR_BODY.md
336
+
337
+ # `mefor-coord/` AT A WORK-TREE ROOT IS DELIBERATELY NOT IGNORED. DO NOT ADD IT HERE.
338
+ # The allocator writes claims under <git-common-dir>/mefor-coord/, which is inside .git -- already
339
+ # outside the work tree, already invisible to `git status`, already impossible to commit. So a
340
+ # `mefor-coord/` directory at a work-tree root is never a legitimate artifact. It means something
341
+ # built that path from an empty or relative base and it landed in the process cwd.
342
+ # Measured 2026-09-18: a test helper read `git rev-parse --git-common-dir` through a wrapper that
343
+ # swallowed git's exit code, got "", and wrote five claim records to a worktree root.
344
+ # Ignoring it would buy protection from `git add -A` at the price of deleting the only signal that
345
+ # the leak happened at all -- and the signal is what surfaced this defect. The protection is bought
346
+ # instead by a guard that fails the test which leaks: tests/conftest.py,
347
+ # _no_allocation_records_in_the_checkout. A leak that shows up beats one that hides.