messagefoundry 0.2.1__tar.gz → 0.2.3__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 (731) hide show
  1. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/SECURITY.md +8 -3
  2. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/benchmark.yml +3 -3
  3. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/ci.yml +27 -62
  4. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/dependabot-lock-resync.yml +1 -1
  5. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/release-sync-check.yml +1 -1
  6. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/release.yml +1 -1
  7. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/security.yml +11 -8
  8. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/vuln-metrics.yml +1 -1
  9. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.gitignore +6 -0
  10. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/CHANGELOG.md +84 -1
  11. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/CLAUDE.md +1 -1
  12. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/CONTRIBUTING.md +1 -1
  13. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/PKG-INFO +64 -89
  14. messagefoundry-0.2.3/README.md +169 -0
  15. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/Dockerfile +2 -2
  16. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/README.md +1 -1
  17. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/locks/requirements-core.lock +4 -267
  18. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/locks/requirements-sqlserver.lock +5 -295
  19. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/BACKLOG.md +183 -3
  20. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CLUSTERING.md +17 -0
  21. messagefoundry-0.2.3/docs/CODESETS.md +109 -0
  22. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CONFIGURATION.md +30 -1
  23. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CONNECTIONS.md +17 -1
  24. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/DEPLOY-SERVER-DB.md +86 -1
  25. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/EARLY-ADOPTER-GUIDE.md +1 -1
  26. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/INSTALL-GUIDE.md +1 -1
  27. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/MENTAL-MODEL.md +2 -2
  28. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/PHI.md +110 -29
  29. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/SECURITY.md +6 -6
  30. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/SERVICE.md +10 -5
  31. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/SYSTEM-REQUIREMENTS.md +1 -1
  32. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/Secure_AI_Development_Standards.md +10 -5
  33. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/Secure_Development_Standards.md +4 -11
  34. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/USER-GUIDE.md +46 -3
  35. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0001-staged-pipeline-architecture.md +14 -0
  36. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +19 -7
  37. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0025-dicom-codec-store-connectors.md +5 -6
  38. messagefoundry-0.2.3/docs/adr/0033-gui-manageable-code-sets.md +212 -0
  39. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/README.md +1 -0
  40. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +1 -1
  41. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/testing/VERIFY.md +19 -2
  42. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/testing/WIN2025-TEST-MATRIX.md +1 -1
  43. messagefoundry-0.2.3/docs/testing/WIN2025-TEST-PLAN.md +1550 -0
  44. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/matrix.py +6 -3
  45. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/probes.py +3 -3
  46. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/failover.py +45 -10
  47. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/failover_track.py +37 -0
  48. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/README.md +4 -0
  49. messagefoundry-0.2.3/harness/load/profiles/malformed-load.toml +44 -0
  50. messagefoundry-0.2.3/harness/load/profiles/spike-burst.toml +50 -0
  51. messagefoundry-0.2.3/harness/load/profiles/sustained-overload.toml +51 -0
  52. messagefoundry-0.2.3/harness/load/profiles/writeamp.toml +41 -0
  53. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/package.json +68 -0
  54. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/cli.ts +50 -0
  55. messagefoundry-0.2.3/ide/src/codeSetEditor.ts +459 -0
  56. messagefoundry-0.2.3/ide/src/codesetsTree.ts +109 -0
  57. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/extension.ts +82 -0
  58. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/test/suite/extension.test.ts +16 -0
  59. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/__init__.py +1 -1
  60. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/__main__.py +178 -28
  61. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/app.py +133 -1
  62. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/models.py +46 -0
  63. messagefoundry-0.2.3/messagefoundry/config/codeset_edit.py +488 -0
  64. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/connections_file.py +16 -0
  65. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/settings.py +75 -9
  66. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/wiring.py +222 -14
  67. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/client.py +13 -0
  68. messagefoundry-0.2.3/messagefoundry/console/event_log_page.py +143 -0
  69. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/shell.py +5 -1
  70. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/alert_sinks.py +5 -0
  71. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/alerts.py +11 -0
  72. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/cluster.py +90 -7
  73. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/cluster_sqlserver.py +68 -22
  74. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/engine.py +44 -1
  75. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/retention.py +40 -0
  76. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/wiring_runner.py +351 -14
  77. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/scaffold.py +3 -3
  78. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/secrets_dpapi.py +3 -1
  79. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/base.py +102 -2
  80. messagefoundry-0.2.3/messagefoundry/store/crypto.py +271 -0
  81. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/postgres.py +369 -18
  82. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/sqlserver.py +493 -60
  83. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/store.py +432 -24
  84. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/base.py +15 -0
  85. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/mllp.py +47 -2
  86. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/tcp.py +36 -2
  87. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/checks.py +5 -5
  88. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/runner.py +73 -2
  89. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/smoke.py +110 -1
  90. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/pyproject.toml +21 -22
  91. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/requirements.lock +9 -493
  92. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/publish/scan_forbidden.py +8 -0
  93. messagefoundry-0.2.3/scripts/service/import-db-ca.ps1 +97 -0
  94. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/leak.py +3 -0
  95. messagefoundry-0.2.3/tests/conftest.py +171 -0
  96. messagefoundry-0.2.3/tests/test_ack_capture_runner.py +101 -0
  97. messagefoundry-0.2.3/tests/test_ack_sent_store.py +150 -0
  98. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_api_auth.py +109 -1
  99. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cli.py +102 -7
  100. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cluster.py +24 -0
  101. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cluster_failover_postgres.py +65 -0
  102. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cluster_failover_sqlserver.py +59 -0
  103. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cluster_graph_gating.py +51 -0
  104. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cluster_lease.py +96 -6
  105. messagefoundry-0.2.3/tests/test_codeset_edit.py +641 -0
  106. messagefoundry-0.2.3/tests/test_connection_event_api.py +83 -0
  107. messagefoundry-0.2.3/tests/test_connection_event_emit.py +212 -0
  108. messagefoundry-0.2.3/tests/test_connection_event_outbound.py +100 -0
  109. messagefoundry-0.2.3/tests/test_connection_event_store.py +208 -0
  110. messagefoundry-0.2.3/tests/test_console_event_log.py +141 -0
  111. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_icon.py +1 -5
  112. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_status.py +15 -2
  113. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_widgets.py +4 -2
  114. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_db_lookup.py +49 -0
  115. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dicom_scp.py +77 -1
  116. messagefoundry-0.2.3/tests/test_docs_runbooks.py +102 -0
  117. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_fifo_ordering.py +20 -0
  118. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_scenarios.py +36 -18
  119. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_config.py +13 -0
  120. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_failover_postgres.py +6 -0
  121. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_failover_sqlserver.py +6 -0
  122. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_failover_unit.py +73 -2
  123. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_logging.py +3 -0
  124. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_postgres_store.py +181 -0
  125. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_response_capture.py +35 -0
  126. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_retention.py +43 -0
  127. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_scan_forbidden.py +19 -0
  128. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_smart_backend.py +60 -0
  129. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_sqlserver_store.py +353 -2
  130. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_startup_fault_isolation.py +80 -4
  131. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_store.py +201 -0
  132. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_store_encryption.py +262 -0
  133. messagefoundry-0.2.3/tests/test_store_ssl.py +76 -0
  134. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_verify.py +74 -0
  135. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_wiring.py +143 -1
  136. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_wiring_engine.py +106 -0
  137. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/uv.lock +2 -510
  138. messagefoundry-0.2.1/README.md +0 -194
  139. messagefoundry-0.2.1/messagefoundry/store/crypto.py +0 -166
  140. messagefoundry-0.2.1/scripts/soak/store_soak.py +0 -92
  141. messagefoundry-0.2.1/tests/conftest.py +0 -279
  142. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.claude/settings.json +0 -0
  143. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.dockerignore +0 -0
  144. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.gitattributes +0 -0
  145. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/CODEOWNERS +0 -0
  146. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  147. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  148. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  149. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  150. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/dependabot.yml +0 -0
  151. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/cla.yml +0 -0
  152. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.github/workflows/dependabot-auto-merge.yml +0 -0
  153. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.gitleaks.toml +0 -0
  154. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.pre-commit-config.yaml +0 -0
  155. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/.semgrep/messagefoundry.yml +0 -0
  156. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/CLA.md +0 -0
  157. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/CODE_OF_CONDUCT.md +0 -0
  158. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/COMMERCIAL-LICENSE.md +0 -0
  159. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/GOVERNANCE.md +0 -0
  160. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/LICENSE +0 -0
  161. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/MAINTAINERS.md +0 -0
  162. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/NOTICE +0 -0
  163. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/compose.yaml +0 -0
  164. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/k8s/secret.example.yaml +0 -0
  165. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/k8s/statefulset.yaml +0 -0
  166. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/secrets.env.example +0 -0
  167. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/smoke/Dockerfile +0 -0
  168. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/smoke/config/IB_Test_ADT.py +0 -0
  169. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docker/smoke/send_adt.py +0 -0
  170. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/ADOPTER-CI.md +0 -0
  171. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/AI.md +0 -0
  172. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/ARCHITECTURE.md +0 -0
  173. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CI-QUALITY.md +0 -0
  174. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -0
  175. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -0
  176. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -0
  177. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -0
  178. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/DEPLOYMENT.md +0 -0
  179. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/DICOM.md +0 -0
  180. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/DUAL_LICENSING_PLAN.md +0 -0
  181. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/FEATURE-MAP.md +0 -0
  182. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/HL7-VALIDATION.md +0 -0
  183. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/LOAD-TESTING.md +0 -0
  184. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/MessageFoundry-Mental-Model.docx +0 -0
  185. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -0
  186. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/REMOTE-CONSOLE.md +0 -0
  187. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/SUPPORT-POLICY.md +0 -0
  188. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/TEE-RELAY.md +0 -0
  189. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/THROUGHPUT-IMPROVEMENTS.md +0 -0
  190. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/WORKTREES.md +0 -0
  191. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -0
  192. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -0
  193. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0004-payload-agnostic-ingress.md +0 -0
  194. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0005-transform-accessible-state.md +0 -0
  195. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0006-external-data-lookups.md +0 -0
  196. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0007-gui-manageable-connections-toml.md +0 -0
  197. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0008-cluster-observability-api.md +0 -0
  198. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0009-run-scoped-context-providers.md +0 -0
  199. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0010-handler-callable-db-lookup.md +0 -0
  200. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0011-timer-scheduled-source.md +0 -0
  201. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0012-x12-edi-codec.md +0 -0
  202. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0013-increment-2-reingress-design.md +0 -0
  203. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0013-query-response-orchestration.md +0 -0
  204. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0014-alerting-rules-engine.md +0 -0
  205. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -0
  206. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0016-synchronous-x12-request-response.md +0 -0
  207. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0017-consumer-deployment-model.md +0 -0
  208. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -0
  209. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0020-protocol-diagnostic-capture.md +0 -0
  210. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -0
  211. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -0
  212. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0024-smart-backend-services-token-provider.md +0 -0
  213. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0026-off-box-egress-update-check.md +0 -0
  214. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0028-base64-binary-carriage-codec.md +0 -0
  215. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0030-anonymization-test-harness-tee.md +0 -0
  216. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0031-startup-connection-fault-isolation.md +0 -0
  217. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/0032-console-desktop-launch.md +0 -0
  218. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/adr/TEMPLATE.md +0 -0
  219. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-components.png +0 -0
  220. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-components.svg +0 -0
  221. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-config-graph.png +0 -0
  222. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-config-graph.svg +0 -0
  223. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-diagram.md +0 -0
  224. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-message-flow.png +0 -0
  225. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-message-flow.svg +0 -0
  226. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-topology.png +0 -0
  227. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/architecture-topology.svg +0 -0
  228. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/TUNING-BASELINE.md +0 -0
  229. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -0
  230. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -0
  231. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -0
  232. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -0
  233. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -0
  234. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -0
  235. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/benchmarks/step-b-write-amplification.md +0 -0
  236. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/hl7-message-ordering-reference.md +0 -0
  237. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/message-ordering-design.md +0 -0
  238. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -0
  239. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -0
  240. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -0
  241. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/MULTISESSION-PLAN-3.md +0 -0
  242. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -0
  243. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/MULTISESSION-PLAN.md +0 -0
  244. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -0
  245. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/V0.2-LANE-HANDOFFS.md +0 -0
  246. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/v0.1-EXECUTION-PLAN.md +0 -0
  247. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/v0.1-PLAN.md +0 -0
  248. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -0
  249. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/research/cloud-deployment-research-2026-06.md +0 -0
  250. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/research/config-ux-review.md +0 -0
  251. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/research/non-hl7-transform-components.md +0 -0
  252. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -0
  253. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -0
  254. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ADVISORY-PROCESS.md +0 -0
  255. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -0
  256. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-L2-PHASE0-CHANGES.md +0 -0
  257. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -0
  258. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-L3-ASSESSMENT.md +0 -0
  259. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -0
  260. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/ASVS-L3-STATUS.md +0 -0
  261. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -0
  262. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -0
  263. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/BEYOND-ASVS-L3.md +0 -0
  264. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/DEP-CVE-RUNBOOK.md +0 -0
  265. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/DEPENDENCY-METRICS.md +0 -0
  266. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
  267. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/PHASE-8C-RBAC.md +0 -0
  268. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/PUBLISHING.md +0 -0
  269. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/RCA-TEMPLATE.md +0 -0
  270. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/RELEASE-GATE.md +0 -0
  271. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/REMEDIATION-PLAN.md +0 -0
  272. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/REVIEW-2026-06-07.md +0 -0
  273. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -0
  274. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SDS-REMEDIATION-PLAN.md +0 -0
  275. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SECURITY-POSTURE.md +0 -0
  276. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -0
  277. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SOUP-REVIEW-2026-06-18.md +0 -0
  278. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -0
  279. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/security/THREAT-MODEL.md +0 -0
  280. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/docs/testing/WIN2025-ACCEPTANCE.md +0 -0
  281. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/environments/dev.toml +0 -0
  282. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/environments/prod.toml +0 -0
  283. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/README.md +0 -0
  284. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/__main__.py +0 -0
  285. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/__init__.py +0 -0
  286. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/__main__.py +0 -0
  287. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/report.py +0 -0
  288. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/acceptance/runner.py +0 -0
  289. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/compose.py +0 -0
  290. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/config/coverage.py +0 -0
  291. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/config/load/_shape.py +0 -0
  292. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/config/load/graph.py +0 -0
  293. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/file_panel.py +0 -0
  294. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/file_transport.py +0 -0
  295. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/__init__.py +0 -0
  296. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/corpus.py +0 -0
  297. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/correlator.py +0 -0
  298. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/enginepoll.py +0 -0
  299. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/governor.py +0 -0
  300. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/ids.py +0 -0
  301. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/metrics.py +0 -0
  302. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profile.py +0 -0
  303. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/closed-loop.toml +0 -0
  304. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/failover.toml +0 -0
  305. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/fanout-baseline.toml +0 -0
  306. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/reference.toml +0 -0
  307. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/smoke-sqlserver.toml +0 -0
  308. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/smoke.toml +0 -0
  309. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/profiles/soak.toml +0 -0
  310. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/report.py +0 -0
  311. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/runner.py +0 -0
  312. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/sender.py +0 -0
  313. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/load/sink.py +0 -0
  314. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/mllp.py +0 -0
  315. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/monitor.py +0 -0
  316. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/receive.py +0 -0
  317. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/__init__.py +0 -0
  318. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/__main__.py +0 -0
  319. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/capture.py +0 -0
  320. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/compare.py +0 -0
  321. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/normalize.py +0 -0
  322. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/reconcile/report.py +0 -0
  323. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/scenarios.py +0 -0
  324. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/send.py +0 -0
  325. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/harness/window.py +0 -0
  326. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/.gitignore +0 -0
  327. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/.vscodeignore +0 -0
  328. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/README.md +0 -0
  329. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/esbuild.js +0 -0
  330. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/media/hl7schema.json +0 -0
  331. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/media/icon.png +0 -0
  332. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/media/icon.svg +0 -0
  333. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/package-lock.json +0 -0
  334. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/snippets/messagefoundry.code-snippets +0 -0
  335. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/aiPolicy.ts +0 -0
  336. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/alertEditor.ts +0 -0
  337. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/auth.ts +0 -0
  338. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/chat.ts +0 -0
  339. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/completion.ts +0 -0
  340. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/connectionEditor.ts +0 -0
  341. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/engineClient.ts +0 -0
  342. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/generate.ts +0 -0
  343. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/git.ts +0 -0
  344. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/graphTree.ts +0 -0
  345. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/home.ts +0 -0
  346. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/newRoute.ts +0 -0
  347. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/promote.ts +0 -0
  348. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/sourceControl.ts +0 -0
  349. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/test/runTest.ts +0 -0
  350. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/test/suite/chat.test.ts +0 -0
  351. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/test/suite/index.ts +0 -0
  352. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/testBench.ts +0 -0
  353. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/src/validate.ts +0 -0
  354. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/tsconfig.json +0 -0
  355. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/ide/tsconfig.test.json +0 -0
  356. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/mefor.code-workspace +0 -0
  357. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/adr_analyze.py +0 -0
  358. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/__init__.py +0 -0
  359. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/_pools.py +0 -0
  360. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/hl7.py +0 -0
  361. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/keying.py +0 -0
  362. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/leak.py +0 -0
  363. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/rules.py +0 -0
  364. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/anon/surrogates.py +0 -0
  365. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/__init__.py +0 -0
  366. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/approvals.py +0 -0
  367. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/auth_models.py +0 -0
  368. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/auth_routes.py +0 -0
  369. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/field_authz.py +0 -0
  370. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/metrics.py +0 -0
  371. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/security.py +0 -0
  372. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/api/tls.py +0 -0
  373. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/__init__.py +0 -0
  374. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
  375. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/data/common_passwords.txt +0 -0
  376. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/identity.py +0 -0
  377. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/ldap.py +0 -0
  378. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/notifications.py +0 -0
  379. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/passwords.py +0 -0
  380. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/permissions.py +0 -0
  381. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/policy.py +0 -0
  382. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/ratelimit.py +0 -0
  383. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/service.py +0 -0
  384. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/tokens.py +0 -0
  385. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/auth/totp.py +0 -0
  386. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/checks.py +0 -0
  387. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/__init__.py +0 -0
  388. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/active_environment.py +0 -0
  389. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/ai_policy.py +0 -0
  390. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/alerts_edit.py +0 -0
  391. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/code_sets.py +0 -0
  392. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/connections_edit.py +0 -0
  393. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/db_lookup.py +0 -0
  394. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/environments.py +0 -0
  395. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/ingest_time.py +0 -0
  396. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/models.py +0 -0
  397. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/reference.py +0 -0
  398. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/response.py +0 -0
  399. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/run_context.py +0 -0
  400. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/state.py +0 -0
  401. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/config/tls_policy.py +0 -0
  402. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/__init__.py +0 -0
  403. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/__main__.py +0 -0
  404. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/_async.py +0 -0
  405. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/alerts_page.py +0 -0
  406. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/change_password.py +0 -0
  407. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/connections.py +0 -0
  408. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/dead_letters_page.py +0 -0
  409. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/delegates.py +0 -0
  410. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/alerts.svg +0 -0
  411. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/connections.svg +0 -0
  412. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/dead-letters.svg +0 -0
  413. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/engine-status.svg +0 -0
  414. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/log-search.svg +0 -0
  415. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/logo-lockup.svg +0 -0
  416. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/icons/users.svg +0 -0
  417. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/login.py +0 -0
  418. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/mfa.py +0 -0
  419. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/reauth.py +0 -0
  420. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/resources/README.md +0 -0
  421. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/resources/app.ico +0 -0
  422. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/resources/app.svg +0 -0
  423. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/search.py +0 -0
  424. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/service_control.py +0 -0
  425. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/sessions.py +0 -0
  426. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/status.py +0 -0
  427. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/theme.py +0 -0
  428. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/users_page.py +0 -0
  429. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/console/widgets.py +0 -0
  430. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/README.md +0 -0
  431. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/__init__.py +0 -0
  432. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/_core.py +0 -0
  433. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/_hl7data.py +0 -0
  434. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/adt.py +0 -0
  435. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/all_types.py +0 -0
  436. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/bar.py +0 -0
  437. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/dft.py +0 -0
  438. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/documents.py +0 -0
  439. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/mdm.py +0 -0
  440. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/mfn.py +0 -0
  441. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/oml.py +0 -0
  442. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/orl.py +0 -0
  443. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/orm.py +0 -0
  444. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/oru.py +0 -0
  445. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/ras.py +0 -0
  446. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/rde.py +0 -0
  447. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/siu.py +0 -0
  448. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/generators/vxu.py +0 -0
  449. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/hl7schema.py +0 -0
  450. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/last_resort.py +0 -0
  451. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/logging_setup.py +0 -0
  452. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/__init__.py +0 -0
  453. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/binary.py +0 -0
  454. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/consistency.py +0 -0
  455. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/__init__.py +0 -0
  456. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/_deps.py +0 -0
  457. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/_util.py +0 -0
  458. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/dataset.py +0 -0
  459. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/errors.py +0 -0
  460. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
  461. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/dicom/peek.py +0 -0
  462. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/fhir/__init__.py +0 -0
  463. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/fhir/_deps.py +0 -0
  464. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/fhir/errors.py +0 -0
  465. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/fhir/peek.py +0 -0
  466. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/fhir/resource.py +0 -0
  467. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/groups.py +0 -0
  468. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/message.py +0 -0
  469. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/peek.py +0 -0
  470. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/split.py +0 -0
  471. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/summary.py +0 -0
  472. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/tree.py +0 -0
  473. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/validate.py +0 -0
  474. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/__init__.py +0 -0
  475. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/delimiters.py +0 -0
  476. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/errors.py +0 -0
  477. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/interchange.py +0 -0
  478. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/message.py +0 -0
  479. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/parsing/x12/peek.py +0 -0
  480. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/__init__.py +0 -0
  481. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/cert_expiry.py +0 -0
  482. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/config_convergence.py +0 -0
  483. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/dryrun.py +0 -0
  484. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/leader_tasks.py +0 -0
  485. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/reference_sync.py +0 -0
  486. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/security_notify.py +0 -0
  487. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/pipeline/state_convergence.py +0 -0
  488. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/py.typed +0 -0
  489. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/redaction.py +0 -0
  490. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/__init__.py +0 -0
  491. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/audit_tee.py +0 -0
  492. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/store/keyprovider.py +0 -0
  493. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/timezone.py +0 -0
  494. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/__init__.py +0 -0
  495. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/database.py +0 -0
  496. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/dicom.py +0 -0
  497. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/dicomweb.py +0 -0
  498. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/fhir.py +0 -0
  499. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/file.py +0 -0
  500. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/framing.py +0 -0
  501. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/loopback.py +0 -0
  502. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/remotefile.py +0 -0
  503. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/rest.py +0 -0
  504. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/signing.py +0 -0
  505. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/smart.py +0 -0
  506. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/soap.py +0 -0
  507. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/timer.py +0 -0
  508. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/transports/x12.py +0 -0
  509. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/__init__.py +0 -0
  510. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/model.py +0 -0
  511. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/messagefoundry/verify/report.py +0 -0
  512. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_ACME_ADT.py +0 -0
  513. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_FHIR_INTAKE.py +0 -0
  514. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_IMMUNIZATION_VXU.py +0 -0
  515. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_PARTNER_X12.py +0 -0
  516. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_RADIOLOGY_SR.py +0 -0
  517. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/IB_RTE_ELIGIBILITY.py +0 -0
  518. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/adt.py +0 -0
  519. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/codesets/event_labels.csv +0 -0
  520. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/codesets/facility_mnemonics.toml +0 -0
  521. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/config/connections.toml +0 -0
  522. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/consistency/validated_adt.py +0 -0
  523. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/dicom/generate_sr_sample.py +0 -0
  524. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/adt_a01.hl7 +0 -0
  525. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/adt_batch.hl7 +0 -0
  526. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/.gitattributes +0 -0
  527. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/README.md +0 -0
  528. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/adt_a01.txt +0 -0
  529. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/adt_a03.txt +0 -0
  530. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -0
  531. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -0
  532. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/omd_o03.txt +0 -0
  533. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -0
  534. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -0
  535. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/messages/x12_270_eligibility.edi +0 -0
  536. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/results_relay/README.md +0 -0
  537. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/results_relay/codesets/test_codes.csv +0 -0
  538. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -0
  539. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/results_relay/messages/oru_results.hl7 +0 -0
  540. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/results_relay/results_relay.py +0 -0
  541. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/samples/send_mllp.py +0 -0
  542. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/console/install-console-shortcut.ps1 +0 -0
  543. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/console/pack_ico.py +0 -0
  544. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/console/uninstall-console-shortcut.ps1 +0 -0
  545. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/dev/postgres.ps1 +0 -0
  546. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/dev/sqlserver-docker.ps1 +0 -0
  547. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/dev/sqlserver.ps1 +0 -0
  548. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/hooks/block-blanket-git-stage.ps1 +0 -0
  549. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/publish/check_release_sync.py +0 -0
  550. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/publish/publish-denylist.txt +0 -0
  551. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/publish/publish.ps1 +0 -0
  552. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/security/crypto_inventory_check.py +0 -0
  553. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/security/vuln_metrics.py +0 -0
  554. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/service/install-service.ps1 +0 -0
  555. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/service/uninstall-service.ps1 +0 -0
  556. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/trace_icon.py +0 -0
  557. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/worktree/new.ps1 +0 -0
  558. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/worktree/remove.ps1 +0 -0
  559. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/worktree/session-context.ps1 +0 -0
  560. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/scripts/worktree/spawn.ps1 +0 -0
  561. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/__init__.py +0 -0
  562. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/__main__.py +0 -0
  563. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/__init__.py +0 -0
  564. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/_hl7data.py +0 -0
  565. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/_pools.py +0 -0
  566. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/hl7.py +0 -0
  567. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/keying.py +0 -0
  568. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/rules.py +0 -0
  569. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/anon/surrogates.py +0 -0
  570. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/compare.py +0 -0
  571. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/correlate.py +0 -0
  572. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/hl7_fields.py +0 -0
  573. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/mefor_api.py +0 -0
  574. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/mllp.py +0 -0
  575. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/relay.py +0 -0
  576. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/report.py +0 -0
  577. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tee/store.py +0 -0
  578. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/_dicom_sample.py +0 -0
  579. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/_failover_load_support.py +0 -0
  580. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/_fhir_fixtures.py +0 -0
  581. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_acceptance_framework.py +0 -0
  582. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_active_environment.py +0 -0
  583. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_ad_group_scope.py +0 -0
  584. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_admin_new_ip.py +0 -0
  585. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_adr_analyze.py +0 -0
  586. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_ai_policy.py +0 -0
  587. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_alert_rules.py +0 -0
  588. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_alert_sinks.py +0 -0
  589. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_alerts_edit.py +0 -0
  590. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_alerts_rules_api.py +0 -0
  591. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_anon_core.py +0 -0
  592. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_anon_integration.py +0 -0
  593. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_anon_parity.py +0 -0
  594. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_api.py +0 -0
  595. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_api_reload.py +0 -0
  596. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_api_tls.py +0 -0
  597. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_approvals.py +0 -0
  598. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_asvs_phase0.py +0 -0
  599. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_audit_integrity.py +0 -0
  600. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_audit_offbox_tee.py +0 -0
  601. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_core.py +0 -0
  602. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_entry_hardening.py +0 -0
  603. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_hardening.py +0 -0
  604. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_service.py +0 -0
  605. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_session_lifecycle.py +0 -0
  606. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_auth_store.py +0 -0
  607. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_binary_carriage.py +0 -0
  608. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_cert_expiry.py +0 -0
  609. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_channel_rbac.py +0 -0
  610. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_checks.py +0 -0
  611. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_code_sets.py +0 -0
  612. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_connection_api.py +0 -0
  613. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_connection_resilience.py +0 -0
  614. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_connections_cli.py +0 -0
  615. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_connections_file.py +0 -0
  616. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_consistency.py +0 -0
  617. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_alerts.py +0 -0
  618. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_auth.py +0 -0
  619. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_client.py +0 -0
  620. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_dead_letters.py +0 -0
  621. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_hardening.py +0 -0
  622. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_password.py +0 -0
  623. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_sessions.py +0 -0
  624. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_step_up.py +0 -0
  625. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_theme.py +0 -0
  626. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_console_users.py +0 -0
  627. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_database_connector_integration.py +0 -0
  628. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_database_transport.py +0 -0
  629. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_db_lookup_live_runner.py +0 -0
  630. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_delivery_settings.py +0 -0
  631. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dependency_boundaries.py +0 -0
  632. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dicom_codec.py +0 -0
  633. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dicom_scu.py +0 -0
  634. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dicom_wiring.py +0 -0
  635. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dicomweb.py +0 -0
  636. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_dryrun.py +0 -0
  637. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_ed_documents.py +0 -0
  638. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_ed_documents_e2e.py +0 -0
  639. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_egress_allowlist.py +0 -0
  640. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_environments.py +0 -0
  641. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_fhir_parsing.py +0 -0
  642. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_fhir_resource.py +0 -0
  643. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_fhir_transport.py +0 -0
  644. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_field_authz.py +0 -0
  645. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_generate_cli.py +0 -0
  646. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_generated_adt.py +0 -0
  647. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_generators_core.py +0 -0
  648. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_generators_types.py +0 -0
  649. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_groups.py +0 -0
  650. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness.py +0 -0
  651. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_compose.py +0 -0
  652. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_config.py +0 -0
  653. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_faults.py +0 -0
  654. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_file.py +0 -0
  655. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_harness_monitor.py +0 -0
  656. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_hl7_core_features.py +0 -0
  657. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_hl7schema.py +0 -0
  658. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_inbound_bind.py +0 -0
  659. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_ingest_time.py +0 -0
  660. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_keyprovider.py +0 -0
  661. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_last_resort.py +0 -0
  662. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_leader_tasks.py +0 -0
  663. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_corpus.py +0 -0
  664. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_metrics.py +0 -0
  665. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_profile.py +0 -0
  666. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_report.py +0 -0
  667. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_runner.py +0 -0
  668. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_sender.py +0 -0
  669. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_load_sink.py +0 -0
  670. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_message.py +0 -0
  671. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_message_split.py +0 -0
  672. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_metrics_exporter.py +0 -0
  673. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_mfa.py +0 -0
  674. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_mllp_encoding_override.py +0 -0
  675. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_mllp_tls.py +0 -0
  676. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_operability_config.py +0 -0
  677. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_outbound_signing.py +0 -0
  678. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_outbound_simulate.py +0 -0
  679. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_packaging.py +0 -0
  680. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_parse_tree.py +0 -0
  681. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_parsing.py +0 -0
  682. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_payload_agnostic_ingress.py +0 -0
  683. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_reconcile_capture.py +0 -0
  684. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_reconcile_compare.py +0 -0
  685. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_reconcile_harness.py +0 -0
  686. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_redaction.py +0 -0
  687. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_reference_sets.py +0 -0
  688. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_reingress.py +0 -0
  689. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_remotefile_transport.py +0 -0
  690. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_rest_transport.py +0 -0
  691. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_run_context.py +0 -0
  692. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_scaffold.py +0 -0
  693. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_secrets_dpapi.py +0 -0
  694. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_security_notify.py +0 -0
  695. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_security_static.py +0 -0
  696. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_service_control.py +0 -0
  697. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_settings.py +0 -0
  698. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_soap_transport.py +0 -0
  699. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_soap_wssecurity.py +0 -0
  700. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_sqlserver_coordinator.py +0 -0
  701. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_staged_pipeline.py +0 -0
  702. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_stats_reset.py +0 -0
  703. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_step_up.py +0 -0
  704. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_store_backend.py +0 -0
  705. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_store_file_hardening.py +0 -0
  706. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_store_read_pool.py +0 -0
  707. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_summary.py +0 -0
  708. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_task_resilience.py +0 -0
  709. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tcp_transport.py +0 -0
  710. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_cli.py +0 -0
  711. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_compare.py +0 -0
  712. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_correlate.py +0 -0
  713. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_hl7_fields.py +0 -0
  714. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_mefor_api.py +0 -0
  715. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_mllp.py +0 -0
  716. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_relay.py +0 -0
  717. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_report.py +0 -0
  718. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tee_store.py +0 -0
  719. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_timer_source.py +0 -0
  720. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_timezone.py +0 -0
  721. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_tls_policy.py +0 -0
  722. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_totp.py +0 -0
  723. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_transform_state.py +0 -0
  724. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_transports.py +0 -0
  725. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_version.py +0 -0
  726. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_win2025_acceptance.py +0 -0
  727. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_wiring_reload.py +0 -0
  728. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_wiring_serve.py +0 -0
  729. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_x12_parsing.py +0 -0
  730. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_x12_rte.py +0 -0
  731. {messagefoundry-0.2.1 → messagefoundry-0.2.3}/tests/test_x12_transport.py +0 -0
@@ -12,9 +12,14 @@ verify a report against current `main` before filing.
12
12
 
13
13
  **Do not open a public issue for a vulnerability.** Instead, report it privately:
14
14
 
15
- - Preferred: open a [GitHub private security advisory](https://github.com/wshallwshall/MessageFoundry/security/advisories/new)
16
- ("Report a vulnerability"), or
17
- - Email the maintainer at the address on the GitHub profile.
15
+ - **Preferred (always available, fully private):** open a [GitHub private security advisory](https://github.com/wshallwshall/MessageFoundry/security/advisories/new)
16
+ ("Report a vulnerability") — GitHub keeps it private to the maintainers until coordinated disclosure.
17
+ This is the recommended channel on both this repository and the public mirror.
18
+ - Alternatively, email the maintainer at the address on the GitHub profile.
19
+
20
+ If you cannot reach a maintainer privately within a few business days, you may request a contact via a
21
+ **non-detail** public issue (title only, e.g. "requesting a private security contact") — **never** put
22
+ vulnerability details, reproduction steps, or any message content in a public issue.
18
23
 
19
24
  Please include: affected component (e.g. MLLP/file transport, store, API/auth, console),
20
25
  a description and impact, and reproduction steps or a proof of concept. Do **not** include
@@ -31,7 +31,7 @@ jobs:
31
31
  - name: Set up Python
32
32
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
33
33
  with:
34
- python-version: "3.13"
34
+ python-version: "3.14"
35
35
  - name: Install project (dev)
36
36
  run: |
37
37
  python -m pip install --upgrade pip
@@ -92,7 +92,7 @@ jobs:
92
92
  - name: Set up Python
93
93
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
94
94
  with:
95
- python-version: "3.13"
95
+ python-version: "3.14"
96
96
  - name: Install project (dev + postgres)
97
97
  run: |
98
98
  python -m pip install --upgrade pip
@@ -159,7 +159,7 @@ jobs:
159
159
  - name: Set up Python
160
160
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
161
161
  with:
162
- python-version: "3.13"
162
+ python-version: "3.14"
163
163
  - name: Install Microsoft ODBC Driver 18 + sqlcmd
164
164
  run: |
165
165
  curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
@@ -11,37 +11,23 @@ concurrency:
11
11
  cancel-in-progress: true
12
12
 
13
13
  jobs:
14
- # Lint + type-check + unit tests. Linux carries the cheap breadththe 3.11
15
- # floor plus a fast early-fail leg on the newest 3.14 (1x minutes). Windows
16
- # Server 2022 + 2025 is the primary deployment target, so it covers BOTH the
17
- # current (3.13) and the new (3.14) deploy Python on each Server SKU, even
18
- # though Windows bills at 2x — testing the version we ship on the OS we ship it
19
- # on is worth the minutes.
14
+ # Lint + type-check + unit tests. The project supports a single Python — 3.14 — so every leg runs it.
15
+ # Linux carries the cheap breadth (1x minutes); Windows Server 2022 + 2025 is the primary deployment
16
+ # target, so 3.14 is also exercised on both Server SKUs even though Windows bills at 2x — testing the
17
+ # version we ship on the OS we ship it on is worth the minutes.
20
18
  test:
21
19
  name: test (${{ matrix.os }}, py${{ matrix.python-version }})
22
20
  runs-on: ${{ matrix.os }}
23
- # py3.11 is a REQUIRED gate again (BACKLOG #17 RESOLVED in PR #448). The intermittent py3.11-only hang
24
- # was root-caused — and reproduced on a Docker py3.11 box — as a CPython 3.11 asyncio cancellation race:
25
- # cancelling a task parked in asyncio.Queue.get() can intermittently never complete (fixed in CPython
26
- # 3.12, hence py3.13 was always clean and production — one long-lived loop — never hit it). TeeRelay.stop()
27
- # tripped it; fixed via a sentinel shutdown in tee/relay.py, validated at 0 hangs across 24 full-suite +
28
- # 40 isolated runs in the repro container and green on CI. So the advisory `continue-on-error` is removed
29
- # and a py3.11 failure reds the build again. (The dormant `MEFOR_PY311_QUARANTINE` conftest lever stays as
30
- # an off-by-default safety net; it is no longer needed.)
31
21
  # Wall-clock backstop: bound each leg so a hung test fails in minutes, not the 6h default. The
32
22
  # pytest-timeout watchdog (60s/test) should catch a culprit first; this is the belt-and-suspenders cap
33
- # if a whole process ever deadlocks below pytest (e.g. a future regression of BACKLOG #17).
23
+ # if a whole process ever deadlocks below pytest.
34
24
  timeout-minutes: 15
35
25
  strategy:
36
26
  fail-fast: false
37
27
  matrix:
38
28
  include:
39
- - { os: ubuntu-latest, python-version: "3.11" }
40
- - { os: ubuntu-latest, python-version: "3.13" }
41
29
  - { os: ubuntu-latest, python-version: "3.14" }
42
- - { os: windows-2022, python-version: "3.13" }
43
30
  - { os: windows-2022, python-version: "3.14" }
44
- - { os: windows-2025, python-version: "3.13" }
45
31
  - { os: windows-2025, python-version: "3.14" }
46
32
  defaults:
47
33
  run:
@@ -89,36 +75,6 @@ jobs:
89
75
  QT_QPA_PLATFORM: offscreen
90
76
  run: pytest -q
91
77
 
92
- # BACKLOG #17 production-bug check. The intermittent py3.11 asyncio<->aiosqlite lost-wakeup hang has
93
- # only ever surfaced under pytest (per-test event-loop churn + log-capture teardown are the suspected
94
- # triggers). This job runs the store the way the engine does in PRODUCTION — one asyncio.run() loop,
95
- # no pytest — and hammers aiosqlite with concurrent DB ops on py3.11. A clean pass is evidence the
96
- # hang is a test-lifecycle artifact, not a product defect; a hang here (caught by the per-run
97
- # `timeout`, exit 124) would be a real, pytest-free repro that flips it to a confirmed product bug.
98
- py311-store-soak:
99
- name: py3.11 store soak (BACKLOG #17)
100
- runs-on: ubuntu-latest
101
- timeout-minutes: 10
102
- steps:
103
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
104
- - name: Set up Python 3.11
105
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
106
- with:
107
- python-version: "3.11"
108
- cache: pip
109
- cache-dependency-path: pyproject.toml
110
- - name: Install project (base — no pytest, no console)
111
- run: |
112
- python -m pip install --upgrade pip
113
- pip install -e .
114
- - name: Soak the aiosqlite store on one long-lived loop (5x)
115
- run: |
116
- for run in $(seq 1 5); do
117
- echo "::group::soak run $run"
118
- timeout 150 python scripts/soak/store_soak.py 64 300
119
- echo "::endgroup::"
120
- done
121
-
122
78
  # Build + type-check the VS Code extension, and run its integration tests. The Python jobs never
123
79
  # touch ide/, so a dep bump or IDE code change that breaks the bundle or the types would otherwise
124
80
  # pass CI unbuilt (this job exists because an esbuild bump merged "green" without anything having
@@ -235,7 +191,7 @@ jobs:
235
191
  - name: Set up Python
236
192
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
237
193
  with:
238
- python-version: "3.13"
194
+ python-version: "3.14"
239
195
 
240
196
  - name: Install Microsoft ODBC Driver 18 + sqlcmd
241
197
  run: |
@@ -379,7 +335,7 @@ jobs:
379
335
  - name: Set up Python
380
336
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
381
337
  with:
382
- python-version: "3.13"
338
+ python-version: "3.14"
383
339
 
384
340
  - name: Install project (dev + postgres extras)
385
341
  run: |
@@ -437,7 +393,7 @@ jobs:
437
393
  - name: Set up Python
438
394
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
439
395
  with:
440
- python-version: "3.13"
396
+ python-version: "3.14"
441
397
 
442
398
  - name: Install project (dev — engine + httpx client; no Qt needed for the headless load path)
443
399
  run: |
@@ -509,7 +465,7 @@ jobs:
509
465
  - name: Set up Python
510
466
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
511
467
  with:
512
- python-version: "3.13"
468
+ python-version: "3.14"
513
469
 
514
470
  - name: Install Microsoft ODBC Driver 18 + sqlcmd
515
471
  run: |
@@ -590,12 +546,11 @@ jobs:
590
546
  strategy:
591
547
  fail-fast: false
592
548
  matrix:
593
- # Windows Server 2022 + 2025 on the current deploy Python (3.13); plus the new 3.14 deploy
594
- # target on 2025 (newest Server) so the real NSSM install->serve->MLLP path is validated on
595
- # the version we will ship. This job is push/dispatch-only, so the extra leg costs no PR time.
549
+ # Windows Server 2022 + 2025 on the supported deploy Python (3.14), so the real NSSM
550
+ # install->serve->MLLP path is validated on the version we ship, on each Server SKU. This job
551
+ # is push/dispatch-only, so the Windows minutes cost no PR time.
596
552
  include:
597
- - { os: windows-2022, python-version: "3.13" }
598
- - { os: windows-2025, python-version: "3.13" }
553
+ - { os: windows-2022, python-version: "3.14" }
599
554
  - { os: windows-2025, python-version: "3.14" }
600
555
  defaults:
601
556
  run:
@@ -802,9 +757,19 @@ jobs:
802
757
  # A fully graceful shutdown exits 0 (uvicorn handles SIGTERM, runs the lifespan, returns); 143
803
758
  # (128+SIGTERM) is acceptable too. 137 = SIGKILL after the grace expired = ungraceful.
804
759
  if [ "$code" = "137" ]; then echo "FAIL: ungraceful shutdown (SIGKILL after grace)"; exit 1; fi
805
- docker logs mefor 2>&1 | grep -q "Application shutdown complete" \
806
- || { echo "FAIL: no clean-shutdown marker (lifespan shutdown did not complete)"; exit 1; }
807
- echo "graceful shutdown verified"
760
+ # Poll for the marker: `docker stop` returns the instant the container exits, but the final
761
+ # buffered log line ("Application shutdown complete") can land in `docker logs` a beat later, so
762
+ # grepping once immediately is racy (a clean 143 shutdown then read as a missing marker). Retry
763
+ # for ~10s so a slow log flush is not misread as an incomplete lifespan shutdown.
764
+ for _ in $(seq 1 20); do
765
+ if docker logs mefor 2>&1 | grep -q "Application shutdown complete"; then
766
+ echo "graceful shutdown verified"; exit 0
767
+ fi
768
+ sleep 0.5
769
+ done
770
+ echo "FAIL: no clean-shutdown marker (lifespan shutdown did not complete)"
771
+ docker logs mefor 2>&1 | tail -20
772
+ exit 1
808
773
 
809
774
  - name: Engine log (always)
810
775
  if: always()
@@ -820,7 +785,7 @@ jobs:
820
785
  # `windows-service-smoke`) report `skipped` on every PR — never the required context a PR waits
821
786
  # on — so requiring them either no-ops or wedges; and
822
787
  # * the matrix legs report an UNEXPANDED name when skipped (`... ${{ matrix.label }}`) but
823
- # EXPANDED names when they run (`... 2022`/`2025`, `(windows-2022, py3.13)`), so no single
788
+ # EXPANDED names when they run (`... 2022`/`2025`, `(windows-2022, py3.14)`), so no single
824
789
  # context string matches both the skipped and the run state.
825
790
  # This gate ALWAYS runs (if: always()), so it reports ONE fixed context ("CI gate") regardless of
826
791
  # which legs ran, and fails iff a gated leg actually FAILED or was cancelled — a `skipped` leg
@@ -60,7 +60,7 @@ jobs:
60
60
  # code runs in this job (uv lock --check + uv export only).
61
61
 
62
62
  - name: Set up uv
63
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
63
+ uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
64
64
 
65
65
  - name: Re-export the lock files (DEP-1 — byte-for-byte identical flags/paths)
66
66
  run: |
@@ -29,7 +29,7 @@ jobs:
29
29
  fetch-depth: 0 # need the vX.Y.Z tags (the private-tag side of the check)
30
30
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
31
31
  with:
32
- python-version: "3.13"
32
+ python-version: "3.14"
33
33
  - name: Check tag / PyPI / mirror are in sync
34
34
  run: |
35
35
  # The script lives under the deny-listed scripts/publish/, so it is ABSENT on the OSS mirror;
@@ -40,7 +40,7 @@ jobs:
40
40
  - name: Set up Python
41
41
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
42
42
  with:
43
- python-version: "3.13"
43
+ python-version: "3.14"
44
44
 
45
45
  - name: Build sdist + wheel
46
46
  run: |
@@ -32,7 +32,7 @@ jobs:
32
32
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
33
33
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
34
34
  with:
35
- python-version: "3.13"
35
+ python-version: "3.14"
36
36
  - name: Check the lockfile is in sync with pyproject (DEP-1)
37
37
  run: |
38
38
  python -m pip install --upgrade pip uv
@@ -94,11 +94,14 @@ jobs:
94
94
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
95
95
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
96
96
  with:
97
- python-version: "3.13"
97
+ python-version: "3.14"
98
98
  - name: Generate a CycloneDX SBOM from the lockfile
99
99
  run: |
100
- python -m pip install --upgrade pip "cyclonedx-bom~=4.6"
101
- cyclonedx-py requirements requirements.lock --output-format JSON --outfile sbom.cdx.json
100
+ # cyclonedx-bom~=7.3 (was ~=4.6): the 4.x line drags cyclonedx-python-lib 7.x → lxml<6, which
101
+ # has no cp314 wheel, so on the 3.14 runner pip source-builds lxml and fails. 7.3 → lxml 6.x
102
+ # (cp314 wheels). The 7.x `requirements` CLI renamed `--outfile` → `--output-file`.
103
+ python -m pip install --upgrade pip "cyclonedx-bom~=7.3"
104
+ cyclonedx-py requirements requirements.lock --output-format JSON --output-file sbom.cdx.json
102
105
  - name: Upload the SBOM artifact
103
106
  # SHA-pinned for supply-chain integrity, matching ci.yml's upload-artifact pin.
104
107
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
@@ -115,7 +118,7 @@ jobs:
115
118
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
116
119
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
117
120
  with:
118
- python-version: "3.13"
121
+ python-version: "3.14"
119
122
  - name: Scan source for insecure patterns
120
123
  run: |
121
124
  # Pin bandit: an unpinned upgrade once silently changed `# nosec` parsing (1.9.x requires
@@ -162,7 +165,7 @@ jobs:
162
165
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
163
166
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
164
167
  with:
165
- python-version: "3.13"
168
+ python-version: "3.14"
166
169
  - name: Run the MessageFoundry rules
167
170
  run: |
168
171
  python -m pip install --upgrade pip "semgrep~=1.90"
@@ -182,7 +185,7 @@ jobs:
182
185
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
183
186
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
184
187
  with:
185
- python-version: "3.13"
188
+ python-version: "3.14"
186
189
  - name: Diff crypto call sites against the inventory
187
190
  # Stdlib-only (no install). Exits non-zero — failing the build — on any drift.
188
191
  run: python scripts/security/crypto_inventory_check.py
@@ -200,7 +203,7 @@ jobs:
200
203
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
201
204
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
202
205
  with:
203
- python-version: "3.13"
206
+ python-version: "3.14"
204
207
  - name: Scan the publishable subset for forbidden content
205
208
  # Stdlib-only scanner (no install). Exits non-zero — failing the build — on any hit. The scanner
206
209
  # lives under the deny-listed scripts/publish/, so it is ABSENT on the OSS mirror — there's
@@ -25,7 +25,7 @@ jobs:
25
25
  - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
26
26
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
27
27
  with:
28
- python-version: "3.13"
28
+ python-version: "3.14"
29
29
  - name: Compute the metrics (real Dependabot PRs + CISA KEV + FIRST EPSS)
30
30
  env:
31
31
  GH_TOKEN: ${{ github.token }} # gh auth for the read-only Dependabot-PR query
@@ -74,3 +74,9 @@ TRANSCRIPTS.md
74
74
  /docs/security/DEPENDENCY-RESPONSE-A4-HANDOFF.md
75
75
  # vuln_metrics.py local CSV output (the CI run uploads it as an artifact; not committed)
76
76
  /docs/security/metrics/
77
+
78
+ # Operator-local load/throughput profiles — tuned to a specific deployment's volume; kept OUT of the
79
+ # OSS repo + public mirror (the plan itself lives on the operator share, WIN2025-LOAD-THROUGHPUT-MATRIX.md).
80
+ # Still usable by name (they sit in PROFILES_DIR) and copy-on to the test box.
81
+ /harness/load/profiles/hospital-baseline.toml
82
+ /harness/load/profiles/soak-12h.toml
@@ -6,6 +6,87 @@ All notable changes to MessageFoundry are documented here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.3] — 2026-06-26 — Early Access
10
+
11
+ A bug-fix + feature release: the SQL Server store no longer raises "connection busy" errors under
12
+ concurrent load, plus connection/transport event logging, GUI-managed translation tables, and inbound
13
+ listener port-conflict detection.
14
+
15
+ ### Fixed
16
+ - **SQL Server: "Connection is busy with results for another command" under concurrent load (EF-6).**
17
+ `claim_next_fifo` — and three sibling sites (`_maybe_finalize`, `consume_recovery_code_hash`,
18
+ `consume_totp_step`) — read a result-set-returning statement with a lone `fetchone()` and could return
19
+ the pooled connection to the pool with the result set still pending, so the next borrower's first
20
+ command raced an `HY000` busy error (ODBC Driver 18, no MARS). All affected sites now fully drain the
21
+ result set (`fetchall`) before commit/release. SQLite and PostgreSQL were unaffected (asyncpg
22
+ materializes rows; SQLite has no shared pooled-connection single-result-set constraint). (#543)
23
+
24
+ ### Added
25
+ - **Connection/transport event log + "Response Sent" ACK capture** (ADR 0020 / ADR 0021). A new id-keyed,
26
+ metadata-only `connection_event` table records inbound connection lifecycle, pre-ingress failures, and
27
+ outbound lane transitions, with a `[diagnostics]` config block (per-connection overrides + retention),
28
+ a `GET /events` read API, and a console **Event Log** page. Event reasons are scrubbed and encrypted at
29
+ rest. (#541)
30
+ - **GUI-managed translation tables (code sets)** (ADR 0033). A code-set CLI + writer and a VS Code
31
+ extension grid editor / **Translation Tables** view for maintaining code-set mappings. (#540)
32
+ - **Inbound listener port-conflict detection** — static + runtime checks that flag two inbound
33
+ connections bound to the same host:port before they collide at startup. (#538)
34
+
35
+ ### Changed
36
+ - Docs: README install instructions are now version-agnostic and link the website docs; the roadmap
37
+ section is replaced with a features summary. (#542, #544)
38
+
39
+ ## [0.2.2] — 2026-06-24 — Early Access
40
+
41
+ A security-hardening release: PHI-at-rest encryption is closed across every backend, the active-passive
42
+ cluster gains a store-checked split-brain fence, outbound delivery is effectively-once, and the at-rest
43
+ cipher becomes crypto-agile — all additive, with the on-disk `mfenc:v1` format byte-identical.
44
+
45
+ ### Changed
46
+ - **BREAKING — Python 3.14 is now the only supported runtime.** `requires-python` is raised to `>=3.14`
47
+ (was `>=3.11`), and the ruff/mypy targets, CI matrix (Linux + Windows Server 2022/2025, all on 3.14),
48
+ Docker base image, lockfiles, and adopter scaffold move with it. **Adopters and engine hosts must be on
49
+ Python 3.14** — a 3.11/3.12/3.13 host will refuse to install the wheel. The 3.11/3.12/3.13-specific test
50
+ apparatus is retired with this change (the `MEFOR_PY311_QUARANTINE` conftest lever, the `py3.11 store
51
+ soak` CI job, and `scripts/soak/store_soak.py`; the underlying BACKLOG #17 asyncio↔aiosqlite concern is
52
+ still mitigated by the shared session loop in `pyproject.toml`).
53
+
54
+ ### Security
55
+ - **PHI-at-rest encryption closed across all three backends.** The patient `summary` (MRN + name) and
56
+ `metadata` columns are now encrypted at rest (previously cleartext even with encryption enabled), and the
57
+ SQL Server `error` / `last_error` / `message_events.detail` columns are brought to parity with SQLite and
58
+ Postgres — every cipher column is now AES-256-GCM at rest. Coverage is surfaced by a new authenticated,
59
+ audited `GET /security/posture` route (reports the active-key fingerprint + per-backend column coverage;
60
+ never key bytes).
61
+ - **Fail-closed for PHI without a key.** An instance declared `data_class = phi` now **refuses to start**
62
+ without an encryption key (previously it started in cleartext with a warning), unless explicitly overridden
63
+ by the new, audited `[store].allow_unencrypted_phi`.
64
+ - **Crypto-agility marker (additive).** The at-rest cipher marker is now version/algorithm-aware
65
+ (`mfenc:v2:<alg>:…`) so a future algorithm can be introduced without a data migration. The `mfenc:v1`
66
+ format is byte-identical and AES-256-GCM remains the only algorithm; decryption fails closed on an unknown
67
+ marker version or algorithm.
68
+ - **Database-TLS hardening.** A new `[store].ssl_root_cert` pins a private database CA (Postgres), with
69
+ machine-store CA-import and certificate-rotation operator runbooks. The DPAPI key file's ACL now grants the
70
+ service account read access without broadening exposure.
71
+
72
+ ### Added
73
+ - **Active-passive split-brain fence.** A monotonic leader-epoch fencing token on the leadership lease,
74
+ validated inside the FIFO claim transaction, so a superseded or paused ex-leader that resumes is fenced out
75
+ (it claims nothing) — backed by continuous "at most one leader" SLO checks and a real-handover failover
76
+ test. SQLite (single-node) behavior is unchanged.
77
+ - **Effectively-once outbound delivery.** A same-transaction idempotency ledger skips re-delivery of an
78
+ already-delivered message after a failover or crash-recovery re-claim, without re-ordering a lane; an
79
+ operator-initiated replay still re-sends.
80
+ - **Pre-side-effect leadership re-checks** so a node that loses leadership between claiming and sending
81
+ re-queues the work rather than emitting it as a stale leader.
82
+ - `messagefoundry verify --check-disposition` for post-deploy disposition validation.
83
+
84
+ ### Fixed
85
+ - CycloneDX SBOM generation on Python 3.14.
86
+ - PyPI long-description rendering (version pins, links).
87
+ - De-flaked several intermittent CI tests (failover-load timeouts, a harness server port-bind race, the
88
+ startup fault-isolation recovery assertion, and the docker-smoke shutdown-marker check).
89
+
9
90
  ## [0.2.1] — 2026-06-23 — Early Access
10
91
 
11
92
  ### Fixed
@@ -90,7 +171,9 @@ tests, but the external code review + penetration test (the bar for a security-c
90
171
  - Releases are built, SBOM'd (CycloneDX), and signed with [Sigstore](https://www.sigstore.dev/) — see the
91
172
  `release` workflow.
92
173
 
93
- [Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.1...HEAD
174
+ [Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.3...HEAD
175
+ [0.2.3]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.2...v0.2.3
176
+ [0.2.2]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.1...v0.2.2
94
177
  [0.2.1]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.0...v0.2.1
95
178
  [0.2.0]: https://github.com/wshallwshall/MessageFoundry/compare/v0.1.0...v0.2.0
96
179
  [0.1.0]: https://github.com/wshallwshall/MessageFoundry/releases/tag/v0.1.0
@@ -242,7 +242,7 @@ diverge enough to warrant it; keep this root file general.
242
242
 
243
243
  ## 6. Python Code Standards
244
244
 
245
- - Target **Python 3.11+**. Type-hint all public functions/attributes — **mypy runs in strict
245
+ - Target **Python 3.14+** (the project requires `>=3.14`). Type-hint all public functions/attributes — **mypy runs in strict
246
246
  mode**.
247
247
  - **asyncio core:** never block the event loop; use `aiosqlite` and async connectors. Long
248
248
  loops/workers must be **cooperatively cancellable** (respond to the connection's stop signal)
@@ -41,7 +41,7 @@ maintainer.)
41
41
  to `main` are blocked. Keep commits coherent (one logical layer per commit) with clear messages.
42
42
  2. **Set up the environment** (Windows/PowerShell shown; adapt for your OS):
43
43
  ```powershell
44
- py -3.11 -m venv .venv
44
+ py -3.14 -m venv .venv
45
45
  .\.venv\Scripts\Activate.ps1
46
46
  pip install -e ".[dev,console]"
47
47
  ```