messagefoundry 0.3.2__tar.gz → 0.4.0__tar.gz

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