messagefoundry 0.2.12__tar.gz → 0.2.13__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 (930) hide show
  1. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/benchmark.yml +2 -2
  2. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/ci.yml +1 -1
  3. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/CHANGELOG.md +40 -0
  4. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/PKG-INFO +1 -1
  5. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/compose.yaml +1 -1
  6. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/BACKLOG.md +86 -3
  7. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CLOUD-DEPLOYMENT.md +1 -1
  8. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CLUSTERING.md +1 -1
  9. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CONFIGURATION.md +2 -2
  10. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/DEPLOY-SERVER-DB.md +34 -1
  11. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/MENTAL-MODEL.md +1 -1
  12. messagefoundry-0.2.13/docs/THROUGHPUT.md +304 -0
  13. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0037-multi-process-sharding-l3.md +6 -0
  14. messagefoundry-0.2.13/docs/adr/0062-default-store-pool-size.md +137 -0
  15. messagefoundry-0.2.13/docs/adr/0063-no-split-store-unified-store-for-sharding.md +101 -0
  16. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/throughput-build-plan.md +3 -3
  17. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/throughput-roadmap.md +2 -2
  18. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/__init__.py +1 -1
  19. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/__main__.py +17 -0
  20. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/settings.py +3 -2
  21. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/sharding.py +37 -2
  22. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/supervisor.py +10 -2
  23. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/wiring_runner.py +11 -0
  24. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/base.py +41 -0
  25. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_postgres.py +1 -1
  26. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_settings.py +66 -0
  27. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sharding.py +39 -0
  28. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.claude/settings.json +0 -0
  29. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.dockerignore +0 -0
  30. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.gitattributes +0 -0
  31. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/CODEOWNERS +0 -0
  32. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  33. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  34. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  35. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  36. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/SECURITY.md +0 -0
  37. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/dependabot.yml +0 -0
  38. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/cla.yml +0 -0
  39. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/codeql.yml +0 -0
  40. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/dependabot-auto-merge.yml +0 -0
  41. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/dependabot-lock-resync.yml +0 -0
  42. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/freethread-smoke.yml +0 -0
  43. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/manifest-lint.yml +0 -0
  44. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/release-sync-check.yml +0 -0
  45. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/release.yml +0 -0
  46. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/scorecard.yml +0 -0
  47. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/security.yml +0 -0
  48. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/selfhosted-win2025-sql.yml +0 -0
  49. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/workflows/vuln-metrics.yml +0 -0
  50. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.github/zizmor.yml +0 -0
  51. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.gitignore +0 -0
  52. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.gitleaks.toml +0 -0
  53. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.mefor-hooks/pre-commit +0 -0
  54. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.pre-commit-config.yaml +0 -0
  55. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/.semgrep/messagefoundry.yml +0 -0
  56. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/CLA.md +0 -0
  57. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/CLAUDE.md +0 -0
  58. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/CODE_OF_CONDUCT.md +0 -0
  59. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/COMMERCIAL-LICENSE.md +0 -0
  60. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/CONTRIBUTING.md +0 -0
  61. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/GOVERNANCE.md +0 -0
  62. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/LICENSE +0 -0
  63. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/MAINTAINERS.md +0 -0
  64. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/NOTICE +0 -0
  65. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/README.md +0 -0
  66. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/Dockerfile +0 -0
  67. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/README.md +0 -0
  68. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/k8s/ha-postgres.yaml +0 -0
  69. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/k8s/secret.example.yaml +0 -0
  70. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/k8s/statefulset.yaml +0 -0
  71. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/locks/requirements-core.lock +0 -0
  72. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/locks/requirements-sqlserver.lock +0 -0
  73. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/secrets.env.example +0 -0
  74. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/smoke/Dockerfile +0 -0
  75. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/smoke/config/IB_Test_ADT.py +0 -0
  76. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docker/smoke/send_adt.py +0 -0
  77. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/ADOPTER-CI.md +0 -0
  78. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/AI.md +0 -0
  79. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/ANTIVIRUS-FIREWALL.md +0 -0
  80. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/ARCHITECTURE.md +0 -0
  81. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/BRAND.md +0 -0
  82. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CI-QUALITY.md +0 -0
  83. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CLOUD-PHI-HIPAA.md +0 -0
  84. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CODESETS.md +0 -0
  85. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CONNECTIONS.md +0 -0
  86. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -0
  87. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -0
  88. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -0
  89. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -0
  90. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/DEPLOYMENT.md +0 -0
  91. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/DICOM.md +0 -0
  92. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/DUAL_LICENSING_PLAN.md +0 -0
  93. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/EARLY-ADOPTER-GUIDE.md +0 -0
  94. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/FEATURE-MAP.md +0 -0
  95. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/HL7-VALIDATION.md +0 -0
  96. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/INSTALL-GUIDE.md +0 -0
  97. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/LOAD-TESTING.md +0 -0
  98. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/MessageFoundry-Mental-Model.docx +0 -0
  99. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/PHI.md +0 -0
  100. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/POSITIONING.md +0 -0
  101. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -0
  102. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/REMOTE-CONSOLE.md +0 -0
  103. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/SECURITY-REMEDIATION-LEDGER.md +0 -0
  104. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/SECURITY.md +0 -0
  105. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/SERVICE.md +0 -0
  106. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/SUPPORT-POLICY.md +0 -0
  107. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/SYSTEM-REQUIREMENTS.md +0 -0
  108. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/Secure_AI_Development_Standards.md +0 -0
  109. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/Secure_Development_Standards.md +0 -0
  110. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/TEE-RELAY.md +0 -0
  111. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/THROUGHPUT-IMPROVEMENTS.md +0 -0
  112. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/USER-GUIDE.md +0 -0
  113. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/WORKTREES.md +0 -0
  114. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0001-staged-pipeline-architecture.md +0 -0
  115. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -0
  116. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -0
  117. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0004-payload-agnostic-ingress.md +0 -0
  118. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0005-transform-accessible-state.md +0 -0
  119. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0006-external-data-lookups.md +0 -0
  120. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0007-gui-manageable-connections-toml.md +0 -0
  121. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0008-cluster-observability-api.md +0 -0
  122. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0009-run-scoped-context-providers.md +0 -0
  123. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0010-handler-callable-db-lookup.md +0 -0
  124. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0011-timer-scheduled-source.md +0 -0
  125. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0012-x12-edi-codec.md +0 -0
  126. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0013-increment-2-reingress-design.md +0 -0
  127. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0013-query-response-orchestration.md +0 -0
  128. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0014-alerting-rules-engine.md +0 -0
  129. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -0
  130. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0016-synchronous-x12-request-response.md +0 -0
  131. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0017-consumer-deployment-model.md +0 -0
  132. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -0
  133. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +0 -0
  134. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0020-protocol-diagnostic-capture.md +0 -0
  135. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -0
  136. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -0
  137. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0023-inbound-http-listener.md +0 -0
  138. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0024-smart-backend-services-token-provider.md +0 -0
  139. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0025-dicom-codec-store-connectors.md +0 -0
  140. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0026-off-box-egress-update-check.md +0 -0
  141. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0027-per-connection-retention.md +0 -0
  142. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0028-base64-binary-carriage-codec.md +0 -0
  143. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0029-email-smtp-destination.md +0 -0
  144. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0030-anonymization-test-harness-tee.md +0 -0
  145. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0031-startup-connection-fault-isolation.md +0 -0
  146. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0032-console-desktop-launch.md +0 -0
  147. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0033-gui-manageable-code-sets.md +0 -0
  148. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0034-static-analysis-triage-policy-accepted-risk-register.md +0 -0
  149. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0035-ide-extension-workspace-trust-and-scope.md +0 -0
  150. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0036-windows-config-source-trust.md +0 -0
  151. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0038-internal-pass-through-connector.md +0 -0
  152. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0039-database-tier-sharding-l5.md +0 -0
  153. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0040-free-threaded-engine-support.md +0 -0
  154. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0041-load-path-attestation-and-change-attribution.md +0 -0
  155. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0042-embedded-document-pruning.md +0 -0
  156. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0043-fhir-read-lookup.md +0 -0
  157. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0044-operator-alert-state.md +0 -0
  158. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0045-custom-rbac-roles.md +0 -0
  159. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0046-message-content-search.md +0 -0
  160. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0047-cloud-kubernetes-ha-deployment-packaging.md +0 -0
  161. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0048-third-tier-disaster-recovery-standby.md +0 -0
  162. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0049-turnkey-dr-backup-restore-verify.md +0 -0
  163. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0050-single-project-root-config-anchoring.md +0 -0
  164. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0051-corepoint-throughput-parity-strategy.md +0 -0
  165. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0052-enterprise-scale-target.md +0 -0
  166. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0053-free-threaded-multicore-engine.md +0 -0
  167. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0054-low-allocation-builtins-hl7-parser.md +0 -0
  168. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0055-group-commit-durable-write.md +0 -0
  169. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0056-engine-managed-vip-failover.md +0 -0
  170. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0057-inline-step-a-fast-path.md +0 -0
  171. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0058-batch-claim-fifo-prefix.md +0 -0
  172. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0059-seq-only-fifo-ordering.md +0 -0
  173. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0060-rename-based-fifo-index-migration.md +0 -0
  174. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/0061-per-lane-wake-events.md +0 -0
  175. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/README.md +0 -0
  176. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/adr/TEMPLATE.md +0 -0
  177. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-components.png +0 -0
  178. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-components.svg +0 -0
  179. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-config-graph.png +0 -0
  180. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-config-graph.svg +0 -0
  181. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-diagram.md +0 -0
  182. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-message-flow.png +0 -0
  183. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-message-flow.svg +0 -0
  184. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-topology.png +0 -0
  185. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/architecture-topology.svg +0 -0
  186. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/TUNING-BASELINE.md +0 -0
  187. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -0
  188. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -0
  189. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -0
  190. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -0
  191. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -0
  192. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -0
  193. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/benchmarks/step-b-write-amplification.md +0 -0
  194. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/design/dbshard.md +0 -0
  195. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/design/freethread-spike.md +0 -0
  196. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/design/freethread.md +0 -0
  197. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/design/multiproc.md +0 -0
  198. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/hl7-message-ordering-reference.md +0 -0
  199. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/message-ordering-design.md +0 -0
  200. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -0
  201. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -0
  202. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -0
  203. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN-3.md +0 -0
  204. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN-4.md +0 -0
  205. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN-5.md +0 -0
  206. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN-6.md +0 -0
  207. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -0
  208. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/MULTISESSION-PLAN.md +0 -0
  209. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -0
  210. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/V0.2-LANE-HANDOFFS.md +0 -0
  211. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/v0.1-EXECUTION-PLAN.md +0 -0
  212. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/v0.1-PLAN.md +0 -0
  213. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -0
  214. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/research/cloud-deployment-research-2026-06.md +0 -0
  215. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/research/config-ux-review.md +0 -0
  216. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/research/non-hl7-transform-components.md +0 -0
  217. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -0
  218. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -0
  219. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ADVISORY-PROCESS.md +0 -0
  220. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -0
  221. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-L2-PHASE0-CHANGES.md +0 -0
  222. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -0
  223. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-L3-ASSESSMENT.md +0 -0
  224. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -0
  225. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/ASVS-L3-STATUS.md +0 -0
  226. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -0
  227. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -0
  228. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +0 -0
  229. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/BEYOND-ASVS-L3.md +0 -0
  230. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/DEP-CVE-RUNBOOK.md +0 -0
  231. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/DEPENDENCY-METRICS.md +0 -0
  232. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
  233. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/PHASE-8C-RBAC.md +0 -0
  234. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/PUBLISHING.md +0 -0
  235. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/RCA-TEMPLATE.md +0 -0
  236. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/RELEASE-GATE.md +0 -0
  237. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/REMEDIATION-PLAN.md +0 -0
  238. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/REVIEW-2026-06-07.md +0 -0
  239. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -0
  240. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SDS-REMEDIATION-PLAN.md +0 -0
  241. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SECURITY-POSTURE.md +0 -0
  242. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -0
  243. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SOUP-REVIEW-2026-06-18.md +0 -0
  244. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -0
  245. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/security/THREAT-MODEL.md +0 -0
  246. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/testing/VERIFY.md +0 -0
  247. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/testing/WIN2025-ACCEPTANCE.md +0 -0
  248. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/testing/WIN2025-TEST-MATRIX.md +0 -0
  249. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/docs/testing/WIN2025-TEST-PLAN.md +0 -0
  250. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/environments/dev.toml +0 -0
  251. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/environments/prod.toml +0 -0
  252. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/README.md +0 -0
  253. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/__main__.py +0 -0
  254. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/__init__.py +0 -0
  255. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/__main__.py +0 -0
  256. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/matrix.py +0 -0
  257. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/probes.py +0 -0
  258. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/report.py +0 -0
  259. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/acceptance/runner.py +0 -0
  260. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/compose.py +0 -0
  261. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/connscale/__init__.py +0 -0
  262. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/connscale/_shape.py +0 -0
  263. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/connscale/gen_toml.py +0 -0
  264. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/connscale/graph.py +0 -0
  265. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/coverage.py +0 -0
  266. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/load/_shape.py +0 -0
  267. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/load/graph.py +0 -0
  268. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/passthrough/graph.py +0 -0
  269. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/config/store_once/graph.py +0 -0
  270. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/file_panel.py +0 -0
  271. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/file_transport.py +0 -0
  272. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/__init__.py +0 -0
  273. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/__init__.py +0 -0
  274. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/driver.py +0 -0
  275. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/probe.py +0 -0
  276. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/profile.py +0 -0
  277. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/report.py +0 -0
  278. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/connscale/runner.py +0 -0
  279. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/corpus.py +0 -0
  280. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/correlator.py +0 -0
  281. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/enginepoll.py +0 -0
  282. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/failover.py +0 -0
  283. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/failover_track.py +0 -0
  284. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/governor.py +0 -0
  285. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/ids.py +0 -0
  286. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/metrics.py +0 -0
  287. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profile.py +0 -0
  288. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/README.md +0 -0
  289. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/adt-fanout-stress.toml +0 -0
  290. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/closed-loop.toml +0 -0
  291. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/connscale-smoke.toml +0 -0
  292. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/connscale.toml +0 -0
  293. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/failover.toml +0 -0
  294. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/fanout-baseline.toml +0 -0
  295. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/malformed-load.toml +0 -0
  296. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/reference.toml +0 -0
  297. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/smoke-sqlserver.toml +0 -0
  298. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/smoke.toml +0 -0
  299. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/soak.toml +0 -0
  300. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/spike-burst.toml +0 -0
  301. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/sustained-overload.toml +0 -0
  302. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/profiles/writeamp.toml +0 -0
  303. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/report.py +0 -0
  304. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/runner.py +0 -0
  305. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/sender.py +0 -0
  306. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/load/sink.py +0 -0
  307. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/mllp.py +0 -0
  308. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/monitor.py +0 -0
  309. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/receive.py +0 -0
  310. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/__init__.py +0 -0
  311. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/__main__.py +0 -0
  312. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/capture.py +0 -0
  313. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/compare.py +0 -0
  314. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/normalize.py +0 -0
  315. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/reconcile/report.py +0 -0
  316. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/scenarios.py +0 -0
  317. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/send.py +0 -0
  318. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/harness/window.py +0 -0
  319. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/.gitignore +0 -0
  320. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/.vscodeignore +0 -0
  321. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/README.md +0 -0
  322. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/esbuild.js +0 -0
  323. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/media/hl7schema.json +0 -0
  324. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/media/icon-amber.svg +0 -0
  325. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/media/icon.png +0 -0
  326. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/media/icon.svg +0 -0
  327. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/package-lock.json +0 -0
  328. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/package.json +0 -0
  329. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/snippets/messagefoundry.code-snippets +0 -0
  330. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/aiPolicy.ts +0 -0
  331. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/alertEditor.ts +0 -0
  332. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/auth.ts +0 -0
  333. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/chat.ts +0 -0
  334. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/cli.ts +0 -0
  335. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/codeSetEditor.ts +0 -0
  336. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/codesetsTree.ts +0 -0
  337. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/completion.ts +0 -0
  338. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/connectionEditor.ts +0 -0
  339. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/editorToolbar.ts +0 -0
  340. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/engineClient.ts +0 -0
  341. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/engineTarget.ts +0 -0
  342. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/extension.ts +0 -0
  343. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/generate.ts +0 -0
  344. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/git.ts +0 -0
  345. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/graphTree.ts +0 -0
  346. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/home.ts +0 -0
  347. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/insertElement.ts +0 -0
  348. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/newRoute.ts +0 -0
  349. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/promote.ts +0 -0
  350. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/promoteTarget.ts +0 -0
  351. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/sourceControl.ts +0 -0
  352. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/runTest.ts +0 -0
  353. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/ai-policy.test.ts +0 -0
  354. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/chat.test.ts +0 -0
  355. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/editor-toolbar.test.ts +0 -0
  356. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/engine-target.test.ts +0 -0
  357. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/extension.test.ts +0 -0
  358. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/index.ts +0 -0
  359. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/insert-element.test.ts +0 -0
  360. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/promote-target.test.ts +0 -0
  361. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/pythonpath.test.ts +0 -0
  362. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/test/suite/settings-scope.test.ts +0 -0
  363. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/testBench.ts +0 -0
  364. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/src/validate.ts +0 -0
  365. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/tsconfig.json +0 -0
  366. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/ide/tsconfig.test.json +0 -0
  367. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/mefor.code-workspace +0 -0
  368. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/adr_analyze.py +0 -0
  369. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/__init__.py +0 -0
  370. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/_pools.py +0 -0
  371. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/hl7.py +0 -0
  372. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/keying.py +0 -0
  373. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/leak.py +0 -0
  374. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/rules.py +0 -0
  375. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/anon/surrogates.py +0 -0
  376. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/__init__.py +0 -0
  377. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/app.py +0 -0
  378. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/approvals.py +0 -0
  379. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/auth_models.py +0 -0
  380. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/auth_routes.py +0 -0
  381. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/field_authz.py +0 -0
  382. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/metrics.py +0 -0
  383. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/models.py +0 -0
  384. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/security.py +0 -0
  385. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/api/tls.py +0 -0
  386. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/__init__.py +0 -0
  387. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
  388. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/data/common_passwords.txt +0 -0
  389. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/identity.py +0 -0
  390. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/ldap.py +0 -0
  391. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/notifications.py +0 -0
  392. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/passwords.py +0 -0
  393. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/permissions.py +0 -0
  394. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/policy.py +0 -0
  395. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/ratelimit.py +0 -0
  396. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/service.py +0 -0
  397. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/tokens.py +0 -0
  398. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/auth/totp.py +0 -0
  399. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/checks.py +0 -0
  400. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/__init__.py +0 -0
  401. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/active_environment.py +0 -0
  402. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/ai_policy.py +0 -0
  403. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/alerts_edit.py +0 -0
  404. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/anchor.py +0 -0
  405. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/code_sets.py +0 -0
  406. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/codeset_edit.py +0 -0
  407. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/connections_edit.py +0 -0
  408. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/connections_file.py +0 -0
  409. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/db_lookup.py +0 -0
  410. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/environments.py +0 -0
  411. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/fhir_lookup.py +0 -0
  412. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/fingerprint.py +0 -0
  413. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/ingest_time.py +0 -0
  414. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/models.py +0 -0
  415. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/reference.py +0 -0
  416. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/response.py +0 -0
  417. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/run_context.py +0 -0
  418. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/state.py +0 -0
  419. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/tls_policy.py +0 -0
  420. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/config/wiring.py +0 -0
  421. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/__init__.py +0 -0
  422. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/__main__.py +0 -0
  423. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/_async.py +0 -0
  424. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/alerts_page.py +0 -0
  425. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/change_password.py +0 -0
  426. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/client.py +0 -0
  427. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/connections.py +0 -0
  428. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/dead_letters_page.py +0 -0
  429. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/delegates.py +0 -0
  430. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/event_log_page.py +0 -0
  431. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/alerts.svg +0 -0
  432. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/connections.svg +0 -0
  433. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/dead-letters.svg +0 -0
  434. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/engine-status.svg +0 -0
  435. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/log-search.svg +0 -0
  436. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/logo-lockup.svg +0 -0
  437. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/icons/users.svg +0 -0
  438. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/login.py +0 -0
  439. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/mfa.py +0 -0
  440. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/reauth.py +0 -0
  441. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/resources/README.md +0 -0
  442. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/resources/app.ico +0 -0
  443. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/resources/app.svg +0 -0
  444. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/search.py +0 -0
  445. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/service_control.py +0 -0
  446. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/sessions.py +0 -0
  447. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/shards.py +0 -0
  448. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/shell.py +0 -0
  449. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/status.py +0 -0
  450. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/theme.py +0 -0
  451. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/users_page.py +0 -0
  452. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/console/widgets.py +0 -0
  453. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/README.md +0 -0
  454. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/__init__.py +0 -0
  455. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/_core.py +0 -0
  456. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/_hl7data.py +0 -0
  457. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/adt.py +0 -0
  458. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/all_types.py +0 -0
  459. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/bar.py +0 -0
  460. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/dft.py +0 -0
  461. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/documents.py +0 -0
  462. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/mdm.py +0 -0
  463. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/mfn.py +0 -0
  464. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/oml.py +0 -0
  465. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/orl.py +0 -0
  466. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/orm.py +0 -0
  467. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/oru.py +0 -0
  468. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/ras.py +0 -0
  469. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/rde.py +0 -0
  470. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/siu.py +0 -0
  471. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/generators/vxu.py +0 -0
  472. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/hl7schema.py +0 -0
  473. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/integrity.py +0 -0
  474. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/last_resort.py +0 -0
  475. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/logging_setup.py +0 -0
  476. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/__init__.py +0 -0
  477. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/_backend.py +0 -0
  478. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/_builtin_hl7.py +0 -0
  479. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/binary.py +0 -0
  480. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/consistency.py +0 -0
  481. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/__init__.py +0 -0
  482. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/_deps.py +0 -0
  483. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/_util.py +0 -0
  484. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/dataset.py +0 -0
  485. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/errors.py +0 -0
  486. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
  487. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/dicom/peek.py +0 -0
  488. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/fhir/__init__.py +0 -0
  489. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/fhir/_deps.py +0 -0
  490. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/fhir/errors.py +0 -0
  491. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/fhir/peek.py +0 -0
  492. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/fhir/resource.py +0 -0
  493. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/groups.py +0 -0
  494. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/message.py +0 -0
  495. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/peek.py +0 -0
  496. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/split.py +0 -0
  497. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/summary.py +0 -0
  498. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/tree.py +0 -0
  499. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/validate.py +0 -0
  500. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/__init__.py +0 -0
  501. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/_deps.py +0 -0
  502. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/delimiters.py +0 -0
  503. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/errors.py +0 -0
  504. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/interchange.py +0 -0
  505. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/message.py +0 -0
  506. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/peek.py +0 -0
  507. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/x12/validate.py +0 -0
  508. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/__init__.py +0 -0
  509. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/_deps.py +0 -0
  510. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/errors.py +0 -0
  511. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/harden.py +0 -0
  512. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/message.py +0 -0
  513. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/schema.py +0 -0
  514. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/parsing/xml/signature.py +0 -0
  515. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/__init__.py +0 -0
  516. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/alert_sinks.py +0 -0
  517. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/alerts.py +0 -0
  518. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/cert_expiry.py +0 -0
  519. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/cluster.py +0 -0
  520. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/cluster_sqlserver.py +0 -0
  521. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/config_convergence.py +0 -0
  522. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/connscale_shim.py +0 -0
  523. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/dr.py +0 -0
  524. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/dr_backup.py +0 -0
  525. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/dryrun.py +0 -0
  526. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/engine.py +0 -0
  527. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/leader_tasks.py +0 -0
  528. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/reference_sync.py +0 -0
  529. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/retention.py +0 -0
  530. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/security_notify.py +0 -0
  531. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/state_convergence.py +0 -0
  532. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/pipeline/update_check.py +0 -0
  533. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/py.typed +0 -0
  534. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/redaction.py +0 -0
  535. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/scaffold.py +0 -0
  536. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/secrets_dpapi.py +0 -0
  537. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/__init__.py +0 -0
  538. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/audit_tee.py +0 -0
  539. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/backup_codec.py +0 -0
  540. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/content_search.py +0 -0
  541. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/crypto.py +0 -0
  542. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/document_strip.py +0 -0
  543. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/keyprovider.py +0 -0
  544. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/pool_metrics.py +0 -0
  545. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/postgres.py +0 -0
  546. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/sqlserver.py +0 -0
  547. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/store/store.py +0 -0
  548. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/support/__init__.py +0 -0
  549. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/support/bundle.py +0 -0
  550. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/support/redact.py +0 -0
  551. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/timezone.py +0 -0
  552. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/__init__.py +0 -0
  553. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/base.py +0 -0
  554. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/database.py +0 -0
  555. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/dicom.py +0 -0
  556. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/dicomweb.py +0 -0
  557. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/email.py +0 -0
  558. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/fhir.py +0 -0
  559. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/file.py +0 -0
  560. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/framing.py +0 -0
  561. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/http_listener.py +0 -0
  562. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/loopback.py +0 -0
  563. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/mllp.py +0 -0
  564. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/passthrough.py +0 -0
  565. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/remotefile.py +0 -0
  566. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/rest.py +0 -0
  567. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/signing.py +0 -0
  568. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/smart.py +0 -0
  569. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/soap.py +0 -0
  570. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/tcp.py +0 -0
  571. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/timer.py +0 -0
  572. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/transports/x12.py +0 -0
  573. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/__init__.py +0 -0
  574. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/checks.py +0 -0
  575. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/model.py +0 -0
  576. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/report.py +0 -0
  577. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/runner.py +0 -0
  578. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/messagefoundry/verify/smoke.py +0 -0
  579. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/README.md +0 -0
  580. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/THIRD-PARTY-NOTICES.md +0 -0
  581. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/THIRD-PARTY-NOTICES.txt +0 -0
  582. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/console_launcher.py +0 -0
  583. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/licenses/GPL-3.0.txt +0 -0
  584. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/licenses/LGPL-3.0.txt +0 -0
  585. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/messagefoundry-console.iss +0 -0
  586. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/console-installer/messagefoundry-console.spec +0 -0
  587. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/messagefoundry-harness/README.md +0 -0
  588. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/packaging/messagefoundry-harness/pyproject.toml +0 -0
  589. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/pyproject.toml +0 -0
  590. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/requirements.lock +0 -0
  591. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_ACME_ADT.py +0 -0
  592. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_FHIR_INTAKE.py +0 -0
  593. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_IMMUNIZATION_VXU.py +0 -0
  594. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_PARTNER_X12.py +0 -0
  595. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_RADIOLOGY_SR.py +0 -0
  596. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/IB_RTE_ELIGIBILITY.py +0 -0
  597. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/adt.py +0 -0
  598. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/codesets/event_labels.csv +0 -0
  599. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/codesets/facility_mnemonics.toml +0 -0
  600. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/config/connections.toml +0 -0
  601. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/consistency/validated_adt.py +0 -0
  602. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/dicom/generate_sr_sample.py +0 -0
  603. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/adt_a01.hl7 +0 -0
  604. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/adt_batch.hl7 +0 -0
  605. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/.gitattributes +0 -0
  606. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/README.md +0 -0
  607. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/adt_a01.txt +0 -0
  608. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/adt_a03.txt +0 -0
  609. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -0
  610. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -0
  611. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/omd_o03.txt +0 -0
  612. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -0
  613. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -0
  614. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/messages/x12_270_eligibility.edi +0 -0
  615. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/results_relay/README.md +0 -0
  616. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/results_relay/codesets/test_codes.csv +0 -0
  617. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -0
  618. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/results_relay/messages/oru_results.hl7 +0 -0
  619. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/results_relay/results_relay.py +0 -0
  620. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/samples/send_mllp.py +0 -0
  621. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/console/install-console-shortcut.ps1 +0 -0
  622. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/console/pack_ico.py +0 -0
  623. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/console/uninstall-console-shortcut.ps1 +0 -0
  624. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/dev/postgres.ps1 +0 -0
  625. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/dev/sqlserver-docker.ps1 +0 -0
  626. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/dev/sqlserver.ps1 +0 -0
  627. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/hooks/block-blanket-git-stage.ps1 +0 -0
  628. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/publish/check_release_sync.py +0 -0
  629. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/publish/publish-denylist.txt +0 -0
  630. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/publish/publish.ps1 +0 -0
  631. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/publish/scan_forbidden.py +0 -0
  632. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/security/crypto_inventory_check.py +0 -0
  633. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/security/vuln_metrics.py +0 -0
  634. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/service/import-db-ca.ps1 +0 -0
  635. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/service/install-service.ps1 +0 -0
  636. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/service/uninstall-service.ps1 +0 -0
  637. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/trace_icon.py +0 -0
  638. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/worktree/new.ps1 +0 -0
  639. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/worktree/remove.ps1 +0 -0
  640. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/worktree/session-context.ps1 +0 -0
  641. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/scripts/worktree/spawn.ps1 +0 -0
  642. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/__init__.py +0 -0
  643. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/__main__.py +0 -0
  644. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/__init__.py +0 -0
  645. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/_hl7data.py +0 -0
  646. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/_pools.py +0 -0
  647. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/hl7.py +0 -0
  648. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/keying.py +0 -0
  649. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/leak.py +0 -0
  650. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/rules.py +0 -0
  651. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/anon/surrogates.py +0 -0
  652. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/compare.py +0 -0
  653. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/correlate.py +0 -0
  654. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/hl7_fields.py +0 -0
  655. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/mefor_api.py +0 -0
  656. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/mllp.py +0 -0
  657. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/relay.py +0 -0
  658. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/report.py +0 -0
  659. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tee/store.py +0 -0
  660. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/_dicom_sample.py +0 -0
  661. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/_failover_load_support.py +0 -0
  662. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/_fhir_fixtures.py +0 -0
  663. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/conftest.py +0 -0
  664. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_acceptance_framework.py +0 -0
  665. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ack_capture_runner.py +0 -0
  666. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ack_sent_store.py +0 -0
  667. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_active_environment.py +0 -0
  668. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ad_group_scope.py +0 -0
  669. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_admin_new_ip.py +0 -0
  670. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_adr_analyze.py +0 -0
  671. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ai_policy.py +0 -0
  672. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_alert_rules.py +0 -0
  673. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_alert_sinks.py +0 -0
  674. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_alert_state.py +0 -0
  675. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_alerts_edit.py +0 -0
  676. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_alerts_rules_api.py +0 -0
  677. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_anon_core.py +0 -0
  678. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_anon_integration.py +0 -0
  679. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_anon_parity.py +0 -0
  680. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_api.py +0 -0
  681. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_api_alerts.py +0 -0
  682. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_api_auth.py +0 -0
  683. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_api_reload.py +0 -0
  684. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_api_tls.py +0 -0
  685. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_approvals.py +0 -0
  686. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_asvs_phase0.py +0 -0
  687. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_audit_integrity.py +0 -0
  688. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_audit_offbox_tee.py +0 -0
  689. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_core.py +0 -0
  690. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_entry_hardening.py +0 -0
  691. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_hardening.py +0 -0
  692. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_service.py +0 -0
  693. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_session_lifecycle.py +0 -0
  694. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_auth_store.py +0 -0
  695. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_backup_crypto.py +0 -0
  696. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_backup_restore_atleastonce.py +0 -0
  697. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_backup_runner.py +0 -0
  698. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_batch_claim_fifo.py +0 -0
  699. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_batch_claim_locking.py +0 -0
  700. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_batch_claim_worker.py +0 -0
  701. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_binary_carriage.py +0 -0
  702. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_bootstrap_admin_perms.py +0 -0
  703. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_builtin_hl7_parity.py +0 -0
  704. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cert_expiry.py +0 -0
  705. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_channel_rbac.py +0 -0
  706. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_checks.py +0 -0
  707. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_checks_lint.py +0 -0
  708. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cli.py +0 -0
  709. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cli_offline_resolution.py +0 -0
  710. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cluster.py +0 -0
  711. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cluster_failover_postgres.py +0 -0
  712. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cluster_failover_sqlserver.py +0 -0
  713. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cluster_graph_gating.py +0 -0
  714. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_cluster_lease.py +0 -0
  715. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_code_sets.py +0 -0
  716. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_codeset_edit.py +0 -0
  717. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_config_anchoring.py +0 -0
  718. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_config_fingerprint.py +0 -0
  719. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_config_source_trust.py +0 -0
  720. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_api.py +0 -0
  721. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_event_api.py +0 -0
  722. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_event_emit.py +0 -0
  723. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_event_outbound.py +0 -0
  724. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_event_scope.py +0 -0
  725. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_event_store.py +0 -0
  726. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connection_resilience.py +0 -0
  727. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connections_cli.py +0 -0
  728. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connections_file.py +0 -0
  729. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_config.py +0 -0
  730. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_driver.py +0 -0
  731. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_profile.py +0 -0
  732. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_report.py +0 -0
  733. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_connscale_smoke.py +0 -0
  734. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_consistency.py +0 -0
  735. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_alerts.py +0 -0
  736. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_auth.py +0 -0
  737. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_client.py +0 -0
  738. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_dead_letters.py +0 -0
  739. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_event_log.py +0 -0
  740. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_hardening.py +0 -0
  741. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_icon.py +0 -0
  742. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_password.py +0 -0
  743. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_sessions.py +0 -0
  744. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_shards.py +0 -0
  745. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_status.py +0 -0
  746. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_step_up.py +0 -0
  747. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_theme.py +0 -0
  748. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_users.py +0 -0
  749. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_console_widgets.py +0 -0
  750. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_content_search.py +0 -0
  751. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_custom_roles.py +0 -0
  752. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_database_connector_integration.py +0 -0
  753. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_database_transport.py +0 -0
  754. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_db_lookup.py +0 -0
  755. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_db_lookup_live_runner.py +0 -0
  756. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_delivery_settings.py +0 -0
  757. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dependabot_automerge_guardrails.py +0 -0
  758. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dependency_boundaries.py +0 -0
  759. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicom_codec.py +0 -0
  760. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicom_scp.py +0 -0
  761. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicom_scp_security.py +0 -0
  762. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicom_scu.py +0 -0
  763. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicom_wiring.py +0 -0
  764. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dicomweb.py +0 -0
  765. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_docs_runbooks.py +0 -0
  766. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_activation.py +0 -0
  767. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_api_status.py +0 -0
  768. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_failback.py +0 -0
  769. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_rbac.py +0 -0
  770. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_run_profile.py +0 -0
  771. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dr_seeding.py +0 -0
  772. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dryrun.py +0 -0
  773. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_dual_control_reload.py +0 -0
  774. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ed_documents.py +0 -0
  775. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ed_documents_e2e.py +0 -0
  776. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_egress_allowlist.py +0 -0
  777. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_email_destination.py +0 -0
  778. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_embedded_document_pruning.py +0 -0
  779. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_enginepoll_aggregate.py +0 -0
  780. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_environments.py +0 -0
  781. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fhir_lookup.py +0 -0
  782. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fhir_parsing.py +0 -0
  783. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fhir_resource.py +0 -0
  784. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fhir_transport.py +0 -0
  785. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_field_authz.py +0 -0
  786. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_field_authz_metadata.py +0 -0
  787. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fifo_index_migration.py +0 -0
  788. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_fifo_ordering.py +0 -0
  789. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_frozen_launch_smoke.py +0 -0
  790. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_generate_cli.py +0 -0
  791. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_generated_adt.py +0 -0
  792. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_generators_core.py +0 -0
  793. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_generators_types.py +0 -0
  794. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_group_commit.py +0 -0
  795. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_groups.py +0 -0
  796. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness.py +0 -0
  797. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_compose.py +0 -0
  798. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_config.py +0 -0
  799. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_faults.py +0 -0
  800. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_file.py +0 -0
  801. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_monitor.py +0 -0
  802. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_harness_scenarios.py +0 -0
  803. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_hl7_core_features.py +0 -0
  804. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_hl7schema.py +0 -0
  805. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_inbound_bind.py +0 -0
  806. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_inbound_http_source.py +0 -0
  807. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ingest_time.py +0 -0
  808. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_inline_fast_path.py +0 -0
  809. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_keyprovider.py +0 -0
  810. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_last_admin_guard.py +0 -0
  811. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_last_resort.py +0 -0
  812. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_leader_tasks.py +0 -0
  813. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_license_notice.py +0 -0
  814. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_listener_tls_exposure.py +0 -0
  815. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_config.py +0 -0
  816. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_corpus.py +0 -0
  817. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_failover_postgres.py +0 -0
  818. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_failover_sqlserver.py +0 -0
  819. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_failover_unit.py +0 -0
  820. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_metrics.py +0 -0
  821. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_profile.py +0 -0
  822. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_report.py +0 -0
  823. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_runner.py +0 -0
  824. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_sender.py +0 -0
  825. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_load_sink.py +0 -0
  826. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_logging.py +0 -0
  827. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_message.py +0 -0
  828. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_message_split.py +0 -0
  829. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_message_timestamps.py +0 -0
  830. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_metrics_exporter.py +0 -0
  831. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_mfa.py +0 -0
  832. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_mllp_encoding_override.py +0 -0
  833. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_mllp_tls.py +0 -0
  834. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_nonhl7_ingress_size_cap.py +0 -0
  835. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_operability_config.py +0 -0
  836. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_outbound_signing.py +0 -0
  837. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_outbound_simulate.py +0 -0
  838. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_packaging.py +0 -0
  839. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_parse_tree.py +0 -0
  840. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_parsing.py +0 -0
  841. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_passthrough.py +0 -0
  842. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_passthrough_graph.py +0 -0
  843. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_payload_agnostic_ingress.py +0 -0
  844. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_per_connection_retention.py +0 -0
  845. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_per_lane_wake.py +0 -0
  846. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_pool_warm.py +0 -0
  847. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_postgres_store.py +0 -0
  848. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_priority_resolution.py +0 -0
  849. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_reconcile_capture.py +0 -0
  850. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_reconcile_compare.py +0 -0
  851. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_reconcile_harness.py +0 -0
  852. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_redaction.py +0 -0
  853. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_reference_sets.py +0 -0
  854. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_reingress.py +0 -0
  855. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_release_console_installer.py +0 -0
  856. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_remotefile_transport.py +0 -0
  857. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_response_capture.py +0 -0
  858. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_rest_transport.py +0 -0
  859. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_restore_verify.py +0 -0
  860. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_retention.py +0 -0
  861. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_run_context.py +0 -0
  862. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_scaffold.py +0 -0
  863. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_scaffold_requirements.py +0 -0
  864. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_scan_forbidden.py +0 -0
  865. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_secrets_dpapi.py +0 -0
  866. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_security_notify.py +0 -0
  867. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_security_static.py +0 -0
  868. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_seq_only_fifo.py +0 -0
  869. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_service_control.py +0 -0
  870. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sibling_helper_finder.py +0 -0
  871. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_smart_backend.py +0 -0
  872. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_soap_transport.py +0 -0
  873. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_soap_wssecurity.py +0 -0
  874. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sqlserver_coordinator.py +0 -0
  875. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sqlserver_cursor_close.py +0 -0
  876. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sqlserver_schema_init.py +0 -0
  877. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_sqlserver_store.py +0 -0
  878. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_staged_pipeline.py +0 -0
  879. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_startup_attestation.py +0 -0
  880. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_startup_fault_isolation.py +0 -0
  881. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_stats_reset.py +0 -0
  882. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_step_up.py +0 -0
  883. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store.py +0 -0
  884. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_backend.py +0 -0
  885. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_encryption.py +0 -0
  886. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_file_hardening.py +0 -0
  887. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_once_deliver_many.py +0 -0
  888. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_once_graph.py +0 -0
  889. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_read_pool.py +0 -0
  890. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_store_ssl.py +0 -0
  891. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_summary.py +0 -0
  892. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_supervisor.py +0 -0
  893. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_support_bundle.py +0 -0
  894. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_synchronous_baseline.py +0 -0
  895. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_task_resilience.py +0 -0
  896. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tcp_transport.py +0 -0
  897. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_cli.py +0 -0
  898. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_compare.py +0 -0
  899. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_correlate.py +0 -0
  900. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_hl7_fields.py +0 -0
  901. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_mefor_api.py +0 -0
  902. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_mllp.py +0 -0
  903. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_relay.py +0 -0
  904. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_report.py +0 -0
  905. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tee_store.py +0 -0
  906. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_timer_source.py +0 -0
  907. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_timezone.py +0 -0
  908. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_tls_policy.py +0 -0
  909. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_totp.py +0 -0
  910. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_totp_window.py +0 -0
  911. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_transform_offloop.py +0 -0
  912. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_transform_state.py +0 -0
  913. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_transports.py +0 -0
  914. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_update_check.py +0 -0
  915. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_verify.py +0 -0
  916. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_version.py +0 -0
  917. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_win2025_acceptance.py +0 -0
  918. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_wiring.py +0 -0
  919. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_wiring_engine.py +0 -0
  920. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_wiring_reload.py +0 -0
  921. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_wiring_serve.py +0 -0
  922. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_ws_stats_revalidation.py +0 -0
  923. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_x12_parsing.py +0 -0
  924. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_x12_rte.py +0 -0
  925. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_x12_source_ip_allowlist.py +0 -0
  926. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_x12_transport.py +0 -0
  927. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_x12_validate.py +0 -0
  928. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_xml_message.py +0 -0
  929. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/tests/test_xml_schema_signature.py +0 -0
  930. {messagefoundry-0.2.12 → messagefoundry-0.2.13}/uv.lock +0 -0
@@ -84,7 +84,7 @@ jobs:
84
84
  MEFOR_STORE_DATABASE: messagefoundry
85
85
  MEFOR_STORE_USERNAME: postgres
86
86
  MEFOR_STORE_PASSWORD: mefor
87
- MEFOR_STORE_POOL_SIZE: "5"
87
+ MEFOR_STORE_POOL_SIZE: "40" # track the shipped default (ADR 0062: 5 -> 40)
88
88
  MEFOR_STORE_ENCRYPT: "false" # plaintext to the container; the TLS-hardening guard needs the escape
89
89
  MEFOR_ALLOW_INSECURE_TLS: "1"
90
90
  steps:
@@ -151,7 +151,7 @@ jobs:
151
151
  MEFOR_STORE_AUTH: sql
152
152
  MEFOR_STORE_USERNAME: sa
153
153
  MEFOR_STORE_PASSWORD: "Str0ng_P@ssw0rd!"
154
- MEFOR_STORE_POOL_SIZE: "5"
154
+ MEFOR_STORE_POOL_SIZE: "40" # track the shipped default (ADR 0062: 5 -> 40)
155
155
  MEFOR_STORE_TRUST_SERVER_CERTIFICATE: "true"
156
156
  MEFOR_ALLOW_INSECURE_TLS: "1"
157
157
  steps:
@@ -569,7 +569,7 @@ jobs:
569
569
  # FORCE a below-default pool (4 connections) so the perf_counter-measured acquire-WAIT
570
570
  # histogram (the PRIMARY pool-wait signal) is non-trivial even at small N: ~3N inbound workers
571
571
  # contend for 4 connections, so acquires actually queue and the percentiles populate. The
572
- # default pool (5+) would mask the wall. 4 (not 1-2) is deliberate: GET /status runs
572
+ # default pool (40) would mask the wall. 4 (not 1-2) is deliberate: GET /status runs
573
573
  # db_status()'s four sequential COUNT(*) queries on every poll, and an extremely tiny pool
574
574
  # starves those acquires past the poller's HTTP timeout under the empty-claim herd on a slow
575
575
  # runner — every poll then fails and the drain loops burn the test budget (the PR #675 hang).
@@ -6,6 +6,46 @@ All notable changes to MessageFoundry are documented here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.13] — 2026-07-01 — Early Access
10
+
11
+ The **store connection-scale sizing** wave — right-size the server-DB connection pool to the measured
12
+ inverted-U optimum, guard against over-provisioning, and guarantee the message store stays unified. All
13
+ changes are **server-DB-only**; the single-node SQLite default is unaffected.
14
+
15
+ ### Added
16
+ - **Soft store-pool over-provisioning warning** ([ADR 0062](docs/adr/0062-default-store-pool-size.md)) — a
17
+ server-DB engine now logs an advisory `WARNING` at graph start if `[store].pool_size` is sized past the
18
+ connection-pool inverted-U optimum: at/beyond the ~80 catastrophic cliff, or oversized for the engine's
19
+ inbound-interface count (`~2.5 ×` interfaces). Advisory only — it never blocks startup; SQLite has no pool
20
+ so it is skipped, and the default (40) never trips it. Guards the "set a huge pool for 1500 connections"
21
+ footgun (which is a *sharding* problem, not a pool one).
22
+
23
+ ### Changed
24
+ - **Default server-DB store connection pool size raised 5 → 40** ([`[store].pool_size`](docs/CONFIGURATION.md),
25
+ env `MEFOR_STORE_POOL_SIZE`; [ADR 0062](docs/adr/0062-default-store-pool-size.md)). A three-sweep
26
+ connection-scale study found the pool is an **inverted-U**: it helps up to ~40 per engine, and
27
+ **over-provisioning is catastrophic** — past ~40 the extra connections thrash one shared SQL instance
28
+ (WRITELOG serialization + per-message finalizer applocks), and ACK latency explodes 30–90×. 40 is the
29
+ measured optimum — **do not set it higher to chase connection count.** **Server-DB backends only** (Postgres
30
+ / SQL Server) — the default **single-node SQLite** backend is unaffected (fixed read pool + single writer;
31
+ never reads `pool_size`). **Existing explicit `[store].pool_size` / `MEFOR_STORE_POOL_SIZE` values are
32
+ unchanged** — only the unset default moves. Behavioral deltas on server-DB engines: ~**8×** the steady-state
33
+ DB sessions per engine, and the startup pool pre-warm rises from ~2 to **~20 connections per engine**
34
+ (bounded by `warm_pool_timeout`, off the intake path, self-releasing, never raises). **Connection-budget
35
+ caution:** `pool_size` is **per engine**, so on a shared server DB `engines × pool_size` all count against
36
+ one `max_connections` (Postgres default ~100 → ~2 engines at 40) — raise `max_connections`, front the DB
37
+ with a pooler (PgBouncer), or use SQL Server; or size `pool_size` down. **Never split the store** to fit the
38
+ budget ([ADR 0063](docs/adr/0063-no-split-store-unified-store-for-sharding.md)). See
39
+ [`docs/DEPLOY-SERVER-DB.md`](docs/DEPLOY-SERVER-DB.md) §3.
40
+ - **No split data store: multi-shard engine sharding now requires a server DB** ([ADR 0063](docs/adr/0063-no-split-store-unified-store-for-sharding.md),
41
+ amends [ADR 0037](docs/adr/0037-multi-process-sharding-l3.md)). `messagefoundry supervise` with **more than
42
+ one shard** on a **SQLite** store is now **refused at startup** — the old SQLite-file-per-shard behavior
43
+ split the message store into one database per shard, fragmenting search/reporting/audit/replay. A sharded
44
+ deployment must share **one unified store**, so `>1` shard requires `[store].backend = 'postgres'` or
45
+ `'sqlserver'` (every shard connects to the same database). **A single un-sharded engine on SQLite is
46
+ unaffected** (byte-identical to `serve`). Migrating an existing SQLite-sharded deployment: drain each shard
47
+ store to empty, then re-point `supervise` at one server DB (not an offline store merge).
48
+
9
49
  ## [0.2.12] — 2026-07-01 — Early Access
10
50
 
11
51
  The **throughput & connection-scale wave.** The staged-queue per-message commit chain is shortened
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: messagefoundry
3
- Version: 0.2.12
3
+ Version: 0.2.13
4
4
  Summary: Open-source healthcare integration engine — route, transform, and validate messages across many formats and connection types
5
5
  Project-URL: Homepage, https://messagefoundry.org/
6
6
  Project-URL: Documentation, https://messagefoundry.org/
@@ -49,7 +49,7 @@ x-ha-engine-env: &ha-engine-env
49
49
  MEFOR_STORE_PORT: "5432"
50
50
  MEFOR_STORE_DATABASE: "messagefoundry"
51
51
  MEFOR_STORE_USERNAME: "mefor"
52
- MEFOR_STORE_POOL_SIZE: "5" # >= 2 required under [cluster]; >= 3 recommended
52
+ MEFOR_STORE_POOL_SIZE: "40" # default (ADR 0062); >= 2 required under [cluster]
53
53
  MEFOR_CLUSTER_ENABLED: "true"
54
54
  # DEV-ONLY: the local Postgres has no CA-trusted cert, so verification can't succeed here. This
55
55
  # disables TLS verification across ALL transports — it is a CI/lab switch and must NEVER be set in
@@ -426,6 +426,14 @@ client. "Moderate risk"; not verifiable in offscreen Qt tests, so it deserves a
426
426
  **FIFO per outbound connection** (simple, safe). Per-key ordering is the leading-edge refinement to
427
427
  revisit once FIFO is solid and a real workload needs the parallelism.
428
428
 
429
+ **Naming (locked 2026-06-30):** the canonical vocabulary for this concept is **sequence key** (the
430
+ per-message partition value — ADT = `facility + MRN`; same key → same lane → FIFO preserved,
431
+ different keys → parallel), **sequence group** (the set of messages sharing a sequence key), and
432
+ **sequence-keyed lanes** / **sequence sharding** (the mechanism). The older terms used elsewhere in
433
+ this item — `partition_key` (config setting) and "order-group sharding" — refer to the same thing.
434
+ "Order-group" was retired because "order" collides with clinical orders (CPOE/ORM); "partition key"
435
+ was retired because "partition" is reserved for the planned store-sharding-by-channel axis.
436
+
429
437
  **What:** preserve order only *within* a partition key (e.g. MRN / encounter / sending facility)
430
438
  while processing *across* keys in parallel — the sweet spot between strict per-connection FIFO (safe,
431
439
  serial) and unordered parallelism (fast, unsafe). Same idiom as a broker partition key. Recent
@@ -3063,11 +3071,11 @@ parity analysis.
3063
3071
 
3064
3072
  **Cluster:** Minor gaps. **Priority:** P3. **Verdict:** demand-gate.
3065
3073
 
3066
- **Scope:** Per-connection send pacing, verify the reply's MSA-2 == the sent MSH-10, and keep-alive / persistent-reconnect on MLLP/TCP outbounds.
3074
+ **Scope:** Per-connection send pacing and verify the reply's MSA-2 == the sent MSH-10. *(Keep-alive / persistent-reconnect on MLLP/TCP outbounds was promoted out to its own tracked item — see [#97](#97-keep-alive--persistent-outbound-connections--per-connector-setting-p3-on-trigger).)*
3067
3075
 
3068
- **Trigger:** build when a partner needs paced sending, strict response-correlation, or a persistent connection.
3076
+ **Trigger:** build when a partner needs paced sending or strict response-correlation.
3069
3077
 
3070
- **Why:** All confirmed (no pacing/keepalive; `MLLPDestination._check_ack` reads MSA-1/MSA-3 only, never matches MSA-2↔MSH-10; `mllp.py` notes persistent/pooled "can come later"). Cheap per-connection-override additions; bundle on real partner need.
3078
+ **Why:** Both confirmed (no pacing; `MLLPDestination._check_ack` reads MSA-1/MSA-3 only, never matches MSA-2↔MSH-10). Cheap per-connection-override additions; bundle on real partner need. Keep-alive is tracked separately at #97.
3071
3079
 
3072
3080
  **Source:** promoted from [#52](#52-corepoint-capability-parity-gaps--prioritized-roadmap-input-2026-06-27) gap synthesis (adversarially reviewed, 2026-06-28).
3073
3081
 
@@ -3559,6 +3567,81 @@ reconciled the same day.
3559
3567
 
3560
3568
  ---
3561
3569
 
3570
+ ## 96. Built-in "setup tester" — self-service capacity estimator that benchmarks the deployed setup and reports how much traffic it can handle (P2, adopter-facing)
3571
+
3572
+ **Type:** feature — an operator/adopter-facing **capacity self-test** shipped *with the engine*. It runs the
3573
+ same style of measurement we do for throughput testing, but as a first-class, on-demand command an adopter
3574
+ points at **their own** setup (this box, this store backend, this config) to get back an **estimate of how
3575
+ much traffic that setup can sustain**.
3576
+
3577
+ **What:** a `messagefoundry` subcommand (e.g. `messagefoundry capacity` / `setup-test`) that drives a
3578
+ controlled synthetic load through the real engine and reports an **estimated sustainable throughput** — a
3579
+ headline **msg/s** and **msg/day** figure, ideally **per-inbound-interface** *and* engine-wide, plus the
3580
+ **limiting factor** (commit-bound / pool-saturated / CPU / disk) and a confidence caveat. It ramps to the
3581
+ saturation knee (where `in_pipeline`/`backlog_seconds` start rising faster than drain — the #93 signal) and
3582
+ reports the last rate that drained cleanly with no loss, rather than a raw peak. Reuses the **BUILT load
3583
+ harness** measurement machinery ([`harness/load/`](../harness/load/), [`docs/LOAD-TESTING.md`](LOAD-TESTING.md))
3584
+ — the rate governor, the fast correlation sink (true end-to-end latency), the drain gauge (`in_pipeline`), and
3585
+ the no-loss reconciliation — packaged as a supported engine capability rather than a dev-only tool.
3586
+
3587
+ **Distinct from what already exists (don't duplicate):**
3588
+ - **#28 / #29 (DONE)** are the *developer/benchmark* runs of the harness against a synthetic high-fan-out
3589
+ system-under-test, producing the **project** [`benchmarks/TUNING-BASELINE.md`](benchmarks/TUNING-BASELINE.md)
3590
+ baseline. This item is the *adopter-run* inverse: point it at **the real deployed config on the real box** and
3591
+ get a sizing number for *that* deployment — not a project baseline, and not something that needs the harness's
3592
+ synthetic SUT config or the denylist-guarded estate profiles.
3593
+ - **#93 (P2)** is the *passive, runtime* counterpart — it watches real traffic and **warns** when live load is
3594
+ approaching capacity. This item is the *active, pre-cutover* counterpart — it **measures** where that capacity
3595
+ is in the first place, so #93's overload threshold can be calibrated against it. They pair.
3596
+ - **#40** is the enterprise-hardware CI leg; this tester is what an adopter would run **on their own hardware**
3597
+ to reproduce a sizing number without CI access.
3598
+
3599
+ **Design constraints (for the eventual ADR):**
3600
+ - **Must not pollute production.** A capacity run generates real store writes and would otherwise inflate the
3601
+ true inbound counts (the count-and-log invariant persists *every* received message). It must run against an
3602
+ **isolated/ephemeral store** (temp DB) or a clearly-marked test namespace, and never leave synthetic rows in,
3603
+ or skew the metrics of, the live message store.
3604
+ - **Synthetic payloads only — never real PHI.** Drive it from the conformant generators
3605
+ ([`generators/`](../messagefoundry/generators/)) / the anon framework (ADR 0030), consistent with the
3606
+ dryrun/generate PHI rule (never against real PHI, never redirected to a committed file/CI log).
3607
+ - **Respect the per-interface bound.** Report capacity **per inbound interface** and note that a single strictly-
3608
+ ordered feed is core-bound (owner principle: fan out feeds at source, not infinite single-feed speed) — an
3609
+ engine-wide total is the sum across interfaces, not a single-feed number. Sequence-keyed lanes (#3) are the
3610
+ sanctioned single-feed escape hatch when one feed outgrows a core.
3611
+ - **Name the limiting factor**, reusing the #93/#64 signals (commit/write latency, `[store].pool_size`
3612
+ busy/wait, CPU/mem via #74, `in_pipeline` growth) so the output is *"~N msg/s, commit-bound"* rather than a
3613
+ bare number — the sizing memos already conclude the pipeline is serial-per-inbound commit-bound, not
3614
+ disk/CPU/pool-bound on the tested boxes.
3615
+
3616
+ **Why P2 / on-trigger.** Turns capacity sizing — today a manual "run the dev harness + read TUNING-BASELINE by
3617
+ hand" exercise — into a **supported operation** an adopter can self-serve before a cutover (*"will this box carry
3618
+ our ~1.6M ADT/day?"*). The measurement machinery already exists; the net-new is the operator-facing command, the
3619
+ isolated-store harness, the ramp-to-knee estimator, and the capacity report. **Trigger:** a pilot/adopter needing
3620
+ a self-service pre-cutover capacity check on their own hardware (the ADR 0017 consumer-deployment pattern), or the
3621
+ #93 overload-alert threshold needing a per-deployment capacity baseline to calibrate against. Relates to
3622
+ **#28**/**#29** (the harness it wraps), **#40** (enterprise-box runs), **#64** (the throughput-performance
3623
+ roadmap), **#93** (the runtime overload-alert counterpart), and the recorded sizing work (throughput matrix /
3624
+ per-interface bound / commit-bottleneck analyses).
3625
+
3626
+ **Source:** owner request (2026-06-30) — "add a setup tester to the engine … do tests like we're doing for
3627
+ throughput testing and report back an estimate of how much traffic the setup can handle."
3628
+
3629
+ ---
3630
+
3631
+ ## 97. Keep-alive / persistent outbound connections — per-connector setting (P3, on-trigger)
3632
+
3633
+ > **On-trigger / demand-gate.** Numbered for tracking only — build when the trigger below fires (“demand-gate, don’t schedule”). Promotes the keep-alive sub-scope of [#82](#82-sender-transport-polish-bundle--pacing--msa-2msh-10-matching--tcp-keep-alive) into its own tracked item at the owner's request.
3634
+
3635
+ **Type:** feature — a per-outbound-connection option to **hold the TCP link open across deliveries** (keep-alive / persistent) instead of the current connect-per-message behavior.
3636
+
3637
+ **What:** an opt-in **per-connector setting** (e.g. `keepalive = true` / a `connection_mode = "persistent" | "on_demand"` knob in the outbound's `settings`, default `on_demand` so existing configs stay byte-identical) on the MLLP / raw-TCP / X12 outbound connectors. When enabled, the delivery worker reuses one open connection (reconnecting on drop/idle), rather than opening + closing a fresh socket every message as it does today. Wants: a bounded idle-close / max-lifetime, reconnect-with-backoff on a dropped link, and clean teardown on `stop()`/reload — all per-connection, with the setting validated at build (dry-run / `check`), consistent with the other outbound knobs.
3638
+
3639
+ **Why:** confirmed gap — every TCP-family outbound opens a **fresh connection per delivery** today and there is no toggle: `MLLPDestination` ([`transports/mllp.py`](../messagefoundry/transports/mllp.py), *"Phase 1 opens a fresh connection per delivery … a persistent/pooled connection can come later"*) and `TcpDestination` ([`transports/tcp.py`](../messagefoundry/transports/tcp.py), *"Opens a fresh connection per delivery … pooling can come later"*); listed as an unbuilt MLLP feature gap in [`CONNECTIONS.md`](CONNECTIONS.md) ("keep-connection-open/pooling"). Inbound listeners are already persistent (peer-driven, idle-bounded by `receive_timeout`) — this closes the outbound half. The connect-per-message default is simple and robust to flaky peers, so this is genuinely additive and stays **off by default**; the at-least-once / idempotent-receiver contract is unchanged (a reused link that drops mid-ACK still retries, same as today). **Trigger:** a partner that needs a held-open link (a persistent-session receiver, or a high-rate feed where per-message connect setup is measurable overhead). Relates to **#82** (the sender-polish bundle this splits from — pacing + MSA-2↔MSH-10 matching stay there), **#46** (connection lifecycle events would gain reconnect/retry signals), and **#65** (outbound-connector option surface).
3640
+
3641
+ **Source:** owner request (2026-06-30) — "add keepalive feature for outbound connections, controlled by a setting per outbound connector."
3642
+
3643
+ ---
3644
+
3562
3645
  *Everything else from the 2026-06-10 full-codebase review (1 critical, 13 high, 33 medium, 31 low —
3563
3646
  78 findings) has been remediated; see the review report's §6 action order. The two items it still
3564
3647
  sourced — **#1 (SQL Server concurrency)** and **#2 (console off-thread)** — are now both **DONE**
@@ -77,7 +77,7 @@ is verified against [`config/settings.py`](../messagefoundry/config/settings.py)
77
77
  | `MEFOR_STORE_DATABASE` | `[store].database` | `messagefoundry` | the database name |
78
78
  | `MEFOR_STORE_USERNAME` | `[store].username` | `mefor` | the login |
79
79
  | `MEFOR_STORE_PASSWORD` | `[store].password` | *(secret)* | **env/secret only** — never the config file |
80
- | `MEFOR_STORE_POOL_SIZE` | `[store].pool_size` | `5` | `>= 2` **required** under `[cluster]`, `>= 3` recommended |
80
+ | `MEFOR_STORE_POOL_SIZE` | `[store].pool_size` | `40` | default 40, the inverted-U optimum — don't set higher ([ADR 0062](adr/0062-default-store-pool-size.md)); `>= 2` under `[cluster]`. **Budget:** `engines × pool_size` hit one managed-PG `max_connections` (~2 engines at 40/100) — raise it, add a pooler, or size down; never split the store ([DEPLOY-SERVER-DB.md](DEPLOY-SERVER-DB.md) §3) |
81
81
  | `MEFOR_CLUSTER_ENABLED` | `[cluster].enabled` | `true` | turns on the leader lease + graph gating |
82
82
  | `MEFOR_STORE_REQUIRE_ENCRYPTION` | `[store].require_encryption` | `true` | fail-closed: refuse to start keyless (PHI at rest) |
83
83
  | `MEFOR_STORE_ENCRYPTION_KEY` | `[store].encryption_key` | *(secret)* | base64 32 bytes — `messagefoundry gen-key` |
@@ -42,7 +42,7 @@ backend = "postgres" # or "sqlserver"
42
42
  server = "db.internal"
43
43
  database = "messagefoundry"
44
44
  username = "mefor"
45
- pool_size = 5 # >= 2
45
+ pool_size = 40 # default (ADR 0062); >= 2 under [cluster]
46
46
 
47
47
  [cluster]
48
48
  enabled = true
@@ -66,11 +66,11 @@ backend that consumes the server-DB keys lands incrementally (the settings + val
66
66
  | `username` | str | — | server DBs (required when `auth = sql`) |
67
67
  | `password` | secret | — | **env only** (`MEFOR_STORE_PASSWORD`) |
68
68
  | `encrypt`, `trust_server_certificate` | bool | `true`/`false` | TLS to the DB |
69
- | `pool_size` | int | 5 | server DBs |
69
+ | `pool_size` | int | 40 | server DBs — **server-DB only** (no-op on SQLite). The inverted-U optimum (raised from 5; do **not** set higher — over-provisioning is catastrophic, [ADR 0062](adr/0062-default-store-pool-size.md)). **Per engine:** `engines × pool_size` share one `max_connections` — see [`DEPLOY-SERVER-DB.md`](DEPLOY-SERVER-DB.md) §3 |
70
70
  | `connect_timeout`, `command_timeout` | int (s) | 15 / 30 | server DBs |
71
71
  | `warm_pool` | bool | `true` | server DBs — pre-open pooled connections in the background on graph start/promotion so a connection burst (the post-promotion delivery workers, or a cold start) finds them warm instead of paying cold connects (TCP+TLS+login). Best-effort, self-releasing, **no-op on SQLite**. On by default (it touches no commit/correctness seam); set `false` to opt out on a connection-constrained/licensed site. |
72
72
  | `warm_pool_timeout` | num (s) | 15 | server DBs — upper bound on the background warm-up; on expiry it logs and continues with a partially warm pool. Must be `> 0`. A **clustered** server-DB node also rejects an **explicit** value `>= [cluster].leader_fence_timeout_seconds` (a warm should finish within the leadership term that started it); the default (15 < the 20 fence) never trips this. |
73
- | `warm_pool_target` | int | — | server DBs — how many connections to pre-open. Unset (default) = a safe fraction of the pool (`min(pool_size-1, pool_size//2)`), so the warm never pins more than half the pool; an explicit value is clamped to `pool_size-1`. A pool of 1 is never warmed. |
73
+ | `warm_pool_target` | int | — | server DBs — how many connections to pre-open. Unset (default) = a safe fraction of the pool (`min(pool_size-1, pool_size//2)`), so the warm never pins more than half the pool; an explicit value is clamped to `pool_size-1`. A pool of 1 is never warmed. At the default `pool_size = 40` this is `min(39, 20) = 20` pre-opened per server-DB engine at startup. |
74
74
  | `db_schema`, `application_name` | str | — / `messagefoundry` | optional (`db_schema` ⇒ env `MEFOR_STORE_DB_SCHEMA`) |
75
75
 
76
76
  > Selecting `backend = "sqlserver"` validates that `server`/`database` (and `username` when
@@ -60,12 +60,44 @@ Configure `[store]` in the service settings (full reference: [`CONFIGURATION.md`
60
60
 
61
61
  ## 3. Pool sizing
62
62
 
63
+ The default `[store].pool_size` is **40** (server-DB only; a no-op on the SQLite default, which uses a fixed
64
+ read pool + single writer). Raised from 5 in [ADR 0062](adr/0062-default-store-pool-size.md): the
65
+ connection-scale study found the pool is an **inverted-U** — it helps up to ~40 per engine, and
66
+ **over-provisioning is catastrophic** (past ~40 the extra connections thrash one shared instance — WRITELOG +
67
+ finalizer applocks — and ACK latency explodes 30–90×). 40 is the measured **optimum**, not a floor: **do not
68
+ set it higher to chase connection count** (that path is refuted — scale is *sharding*, not a bigger pool).
69
+ Tunable via `[store].pool_size` / `MEFOR_STORE_POOL_SIZE`; re-measure for a materially different deployment
70
+ shape (transform cost, message size, disk, SQL-box sizing).
71
+
63
72
  - **Single node:** `[store].pool_size ≥ 3` recommended. Each stage handoff is a committed round-trip and
64
73
  the per-stage workers (router, transform, per-outbound delivery) run concurrently against the pool — a
65
74
  pool of 1 serializes them against intake.
66
75
  - **Clustered (active-passive):** `pool_size ≥ 2` is **required** (a cross-section validator refuses a
67
76
  smaller pool when `[cluster].enabled`), `≥ 3` recommended — a clustered node also drives the
68
77
  membership / lease-renewal maintenance loop against the pool.
78
+ - **Connection-budget ceiling (important on a shared server DB):** `pool_size` is **per engine**. Every
79
+ Postgres/SQL Server engine that shares the store — multi-process shards (all connect to the *same*
80
+ database) and the active-passive standby's warm pool — counts against one server limit. So budget
81
+ **peak connections ≈ engines × `pool_size`** (+ the standby's `warm_pool_target`) and keep it well under
82
+ the DB server's `max_connections` (**Postgres default ~100**; SQL Server is bounded by sessions/memory).
83
+ At the default `pool_size = 40`, ~2 co-located engines already reach ~100 — **a config that connected at
84
+ 5 can fail to connect at 40.** Co-locating several server-DB engines (a sharded fan-out)? **Raise
85
+ `max_connections`, front the DB with a connection pooler (PgBouncer), or use SQL Server** (more sessions);
86
+ or size `pool_size` **down**. **Do NOT give each shard its own database/server** — that is a split store,
87
+ which is disallowed ([ADR 0063](adr/0063-no-split-store-unified-store-for-sharding.md)); one unified store
88
+ scales *vertically* (faster box/disk) + *cheaper-per-message*, never by fragmenting. Also budget the startup
89
+ warm burst (~20 pre-opened/engine at the default; set `warm_pool_target` or `warm_pool = false` on a
90
+ connection-/license-constrained site).
91
+ - **Commit-depth at high interface counts (`fifo_claim_batch`):** the pool is not the only per-engine wall —
92
+ above ~48 inbound interfaces an engine becomes bound by *commits per message* on the shared store (WRITELOG
93
+ + the per-message finalizer applock), which a bigger pool **cannot** fix. For a **high-interface-count,
94
+ commit-bound** server-DB engine, set **`[store].fifo_claim_batch = 8`** (range 8–16, [ADR 0058](adr/0058-batch-claim-fifo-prefix.md)):
95
+ the INGRESS/ROUTED FIFO claim then takes the contiguous due head-prefix in one commit instead of one-per-row,
96
+ amortizing the claim commit toward `1/N` on backlogged lanes. It **preserves strict per-lane FIFO (#285) +
97
+ at-least-once**, is **byte-identical at `1` (the default)** and on caught-up (low-backlog) lanes, and never
98
+ batches the outbound/delivery claim. Size it against worst-case message size (N decrypted bodies are resident
99
+ per lane between the claim and its N handoffs). This — not the pool — is the *raise-interfaces-per-engine*
100
+ lever.
69
101
 
70
102
  ---
71
103
 
@@ -173,7 +205,8 @@ update the pin in lockstep — pin the **CA**, not the leaf, to keep rotations m
173
205
  - [ ] `[store].encrypt = true` (and **not** `MEFOR_ALLOW_INSECURE_TLS`) for any PHI deployment.
174
206
  - [ ] DB CA trusted so `trust_server_certificate = false` validates — Postgres `ssl_root_cert` **or**
175
207
  machine-store import; SQL Server **machine store only** (§5). Never `TrustServerCertificate=true`.
176
- - [ ] `[store].pool_size 3` (≥ 2 hard-required in cluster mode).
208
+ - [ ] `[store].pool_size` sized (default **40**, server-DB only; ≥ 2 hard-required in cluster mode) **and**
209
+ the connection budget checked: engines × `pool_size` (+ standby warm) well under the DB `max_connections` (§3).
177
210
  - [ ] Bootstrap login can create the schema on first open, **or** the schema is pre-created.
178
211
  - [ ] SQL Server: RCSI enabled (auto, or pre-enabled by a DBA).
179
212
  - [ ] Source store drained (`in_pipeline → 0`) before cutover — greenfield, no in-place migration.
@@ -422,7 +422,7 @@ The built-in HA model is **active-passive failover** (the Corepoint/Rhapsody mod
422
422
  backend = "postgres" # or "sqlserver"; SQLite cannot cluster
423
423
  server = "db.internal"
424
424
  database = "messagefoundry"
425
- pool_size = 5 # >= 2 (>= 3 preferred)
425
+ pool_size = 40 # default (ADR 0062); >= 2 (>= 3 preferred)
426
426
 
427
427
  [cluster]
428
428
  enabled = true
@@ -0,0 +1,304 @@
1
+ # Understanding MessageFoundry Throughput
2
+
3
+ *A plain-language guide to what determines how many messages MessageFoundry can move — and why a
4
+ single "messages per day" number rarely tells you what you need to know.*
5
+
6
+ > **Read this first.** Every throughput figure in this document is a **theoretical maximum** measured
7
+ > in a controlled lab under ideal conditions. Your real-world throughput will almost always be **lower**,
8
+ > and it is usually set by **how fast your partner systems accept and acknowledge each message** — not by
9
+ > the engine. MessageFoundry adds only a few milliseconds of its own overhead per message; the rest of the
10
+ > time is spent waiting on round-trips to your database and your downstream systems. Size against *your*
11
+ > systems, not against a headline number.
12
+
13
+ ---
14
+
15
+ ## Executive summary
16
+
17
+ - **The engine is nearly transparent.** In our reference lab, MessageFoundry adds on the order of
18
+ **~16 milliseconds** of its own processing per message. For an ordered (strictly in-sequence) feed that
19
+ works out to roughly **60 messages/second end-to-end** and **~450 messages/second at the point of
20
+ receipt** — but those are *ceilings under ideal conditions*, not promises for your environment.
21
+
22
+ - **Your partner systems are the biggest factor.** For ordered delivery, each message is sent, the engine
23
+ **waits for the partner to accept and acknowledge it**, and only then does the next one go. The partner's
24
+ round-trip time lands *directly* in the critical path. A partner that takes 50 ms to acknowledge caps a
25
+ single ordered stream at roughly **15 messages/second** — no matter how fast the engine or database is.
26
+
27
+ - **"Messages per day" is a weak unit.** Healthcare traffic is **bursty**. In the production ADT feeds
28
+ we've profiled, the **busiest hour runs about 2.7× the all-day average rate**. You have to size for the
29
+ *peak hour*, not the daily average — so a raw "X million/day" figure, on its own, tells you very little.
30
+
31
+ - **Scale by fanning out, not by one giant pipe.** A strictly-ordered interface is a single serial lane
32
+ with a bounded rate — that's the physics of guaranteed ordering, not a product limitation. Real capacity
33
+ comes from running **many interfaces** (split feeds at the source: by hospital, facility, service line).
34
+ One node's message store easily absorbs the combined load of dozens of interfaces.
35
+
36
+ - **Four questions to ask of *any* throughput claim** — ours or a competitor's:
37
+ **(1)** How big are the messages? **(2)** Is delivery strictly ordered or parallel?
38
+ **(3)** How fast does the receiving system acknowledge? **(4)** What's the *peak-hour* rate behind that
39
+ daily average? Without those four, a msg/s or msg/day number is marketing, not engineering.
40
+
41
+ ---
42
+
43
+ ## 1. How a message flows (and why there are two different "speeds")
44
+
45
+ A message moves through MessageFoundry in stages, each of which is written durably to the message store
46
+ before the next begins (that's what guarantees nothing is lost):
47
+
48
+ ```
49
+ sender ──▶ [ receive + persist ] ──▶ [ route ] ──▶ [ transform ] ──▶ [ deliver ] ──▶ partner
50
+ │ │
51
+ ACK to sender partner ACK
52
+ (fast — "intake") (paced by the partner)
53
+ ```
54
+
55
+ This gives you **two distinct throughput numbers**, and they are often very far apart:
56
+
57
+ | Rate | What it measures | Typical relationship |
58
+ |---|---|---|
59
+ | **Intake rate** (ACK-on-receipt) | How fast the engine can accept a message, store it durably, and acknowledge the *sender*. The sender never waits for downstream delivery. | **Higher** — ~450/s in our lab. Protects upstream senders from downstream slowness. |
60
+ | **Delivery rate** (end-to-end) | How fast the engine can get a message all the way to the *partner* and confirm it landed. | **Lower** — ~60/s in our lab. Paced by everything downstream, especially the partner. |
61
+
62
+ The gap between them is not waste — it's the buffer. MessageFoundry accepts and safely stores messages
63
+ faster than it delivers them, so a momentary slowdown at a partner doesn't push back on the sender. The
64
+ backlog drains as the partner catches up.
65
+
66
+ **Takeaway:** when someone quotes a throughput number, ask *which* rate they mean. Intake numbers look
67
+ impressive but say nothing about how fast messages actually reach their destination.
68
+
69
+ ---
70
+
71
+ ## 2. The single biggest factor: your partner systems and round-trip times
72
+
73
+ This is the point most capacity conversations miss.
74
+
75
+ **Ordered delivery is inherently serial.** When you require messages to arrive in the exact order they were
76
+ received (the default, and a hard requirement for most clinical feeds), the engine can only have **one
77
+ message in flight per destination at a time**:
78
+
79
+ 1. Send message *N* to the partner.
80
+ 2. **Wait** for the partner to receive it, process it (often persist it to *its own* database), and send
81
+ back an acknowledgement.
82
+ 3. Only then send message *N+1*.
83
+
84
+ That waiting time is not the engine's — it belongs to the **network round-trip and the partner's own
85
+ processing**. And because the stream is serial, it lands squarely in the critical path.
86
+
87
+ ### The round-trips that make up a message's journey
88
+
89
+ Every message pays for several round-trips, and each one adds latency:
90
+
91
+ - **Sender ↔ engine** — the intake acknowledgement. Fast, and it doesn't block delivery.
92
+ - **Engine ↔ message store** — each durable stage handoff is a commit. If the store is on another server,
93
+ every commit is a network round-trip. (See §4.)
94
+ - **Engine ↔ partner** — the delivery send *and the partner's acknowledgement*. **This is usually the
95
+ dominant term**, and MessageFoundry does not control it.
96
+ - **Engine ↔ enrichment source** *(optional)* — if a handler does a live lookup (e.g. a provider or
97
+ eligibility check), that adds another round-trip during transformation. (See §5.)
98
+
99
+ ### What this does to throughput
100
+
101
+ For an ordered stream, throughput is approximately:
102
+
103
+ > **messages/second ≈ 1000 ÷ ( engine overhead + partner round-trip )**, in milliseconds
104
+
105
+ The engine overhead is small and roughly fixed (~16 ms in our lab). The **partner round-trip is yours**,
106
+ and it dominates as soon as it's more than a few milliseconds:
107
+
108
+ | Partner acknowledges in… | Approx. ordered throughput | "Uniform" msgs/day* | Realistic msgs/day (peak-aware)† |
109
+ |---|---|---|---|
110
+ | ~0 ms (lab ideal) | ~60 /s | ~5.2 M | ~1.9 M |
111
+ | 10 ms | ~38 /s | ~3.3 M | ~1.2 M |
112
+ | 25 ms | ~24 /s | ~2.1 M | ~0.8 M |
113
+ | 50 ms | ~15 /s | ~1.3 M | ~0.5 M |
114
+ | 100 ms | ~9 /s | ~0.8 M | ~0.3 M |
115
+ | 250 ms | ~4 /s | ~0.35 M | ~0.13 M |
116
+
117
+ <sub>\* "Uniform" assumes traffic is perfectly flat around the clock — it never is (see §6).
118
+ † "Peak-aware" divides by a 2.7× burst factor, which is the realistic planning number. Illustrative
119
+ first-order model anchored to the measured ~16 ms engine floor; your numbers depend on your systems.</sub>
120
+
121
+ The lesson is stark: a partner that takes a quarter-second to acknowledge each message will hold a single
122
+ ordered stream to a few messages per second, and **no amount of engine or database speed changes that.**
123
+ The bottleneck has moved outside MessageFoundry entirely.
124
+
125
+ ### What you can do about a slow partner
126
+
127
+ - **Relax ordering where it's safe.** If a feed tolerates out-of-order delivery, unordered mode lets the
128
+ engine keep many messages in flight at once, hiding the partner's round-trip behind concurrency (see §3).
129
+ - **Open multiple connections to the partner.** Each destination connection is its own independent stream,
130
+ so *N* connections give you *N* parallel ordered lanes (if the partner accepts concurrent connections).
131
+ - **Fan out at the source.** Split one hot feed into several interfaces (see §7) so the aggregate isn't
132
+ gated by a single serial lane.
133
+ - **Ask your partner about their acknowledgement latency.** It is often the cheapest thing to improve, and
134
+ it's the term that matters most.
135
+
136
+ ---
137
+
138
+ ## 3. Ordering: the throughput-vs-order trade-off
139
+
140
+ Ordering guarantees and raw throughput pull in opposite directions. MessageFoundry lets you choose per
141
+ feed:
142
+
143
+ | Mode | Guarantee | Throughput | Use when |
144
+ |---|---|---|---|
145
+ | **Strict FIFO** *(default)* | Messages delivered in exactly the order received. | Bounded — one message in flight per destination (serial). | Order matters: ADT streams, anything where a later message corrects an earlier one. |
146
+ | **Unordered** | No ordering guarantee. | Higher — many messages in flight at once; the partner round-trip is hidden by concurrency. | Order doesn't matter: independent results, logging, feeds keyed only by their own content. |
147
+
148
+ Strict ordering being serial is not unique to MessageFoundry — it is a property of *any* system that
149
+ guarantees order over a single stream. This is exactly why integration engines let you opt out of ordering
150
+ when a feed can tolerate it: it's the most direct throughput lever available for a single interface.
151
+
152
+ ---
153
+
154
+ ## 4. The message store (durability has a cost, and location matters)
155
+
156
+ Every stage handoff is committed durably to the store before the next stage runs — that's what makes
157
+ delivery at-least-once and crash-safe. So the store's commit latency is part of every message's journey.
158
+
159
+ | Choice | Effect on throughput |
160
+ |---|---|
161
+ | **SQLite (embedded, default)** | Runs *in-process* with no network hop — the fastest per-commit path. Its ceiling is single-writer serialization, which is the floor case in our testing, not a problem for most single-node deployments. |
162
+ | **SQL Server / PostgreSQL (server database)** | Chosen for concurrency, high availability, and enterprise operations — **not** for raw single-stream speed. Every commit is now a **network round-trip** to the database server, which *adds* latency to each handoff. |
163
+ | **Store location — local vs. across the network** | This matters more than the database brand. A commit to a co-located, fast local disk is dramatically quicker than a commit that crosses the network to a remote database server. In our testing a local NVMe store committed on the order of **~65× faster** than a round-trip to a database on another box. |
164
+ | **Disk speed (NVMe vs. shared SAN)** | The store forces data to disk on commit for durability; faster storage lowers that per-commit cost. |
165
+
166
+ **One store serves many interfaces.** A single node's store has enormous headroom — in our lab a local
167
+ store sustained on the order of **tens of thousands of commits per second**, far more than any one ordered
168
+ interface can generate. This is *why* the scaling story is "add interfaces," not "make one interface
169
+ faster": the shared store is nowhere near the wall.
170
+
171
+ ---
172
+
173
+ ## 5. Message and transformation factors
174
+
175
+ - **Message size.** A small ADT message and a large message carrying an embedded document are not the same
176
+ unit of work. Bigger messages cost more to parse, store, encrypt, and transmit.
177
+ - **Parsing and validation.** Fast, tolerant field inspection on the routing path is cheap. Full strict
178
+ validation is deliberately opt-in per feed because it is the slow path — turn it on where you need
179
+ conformance, not everywhere.
180
+ - **Transformation complexity.** How much work your handler does per message directly affects the rate.
181
+ Heavy transformation is one of the largest hardware-independent reducers of throughput.
182
+ - **Live enrichment lookups.** A handler may do a sanctioned read-only lookup (e.g. a provider or
183
+ eligibility check against a database or FHIR endpoint). Each lookup is another round-trip that adds to a
184
+ message's time in the pipeline — powerful, but use it deliberately.
185
+ - **Fan-out.** If one inbound message is delivered to *N* destinations, that's *N* deliveries to commit and
186
+ *N* partners to wait on. Each destination is its own independent lane.
187
+
188
+ ---
189
+
190
+ ## 6. Why "messages per day" is a misleading unit
191
+
192
+ **Healthcare message traffic is bursty — it is nothing like a flat, around-the-clock stream.** It follows
193
+ the operational rhythm of the facilities behind it, and that shape matters far more than the daily total.
194
+
195
+ ### The shape of real traffic
196
+
197
+ - **Within a day:** volume is light overnight, ramps up sharply in the morning as registration, admissions,
198
+ rounds, lab draws, and shift changes begin, peaks during the busy clinical hours, and tapers into the
199
+ evening. Emergency-department and registration surges create short, sharp spikes on top of that curve.
200
+ - **Across a week:** weekdays run **several times heavier** than weekends, driven by elective admissions,
201
+ scheduled procedures, and clinic activity.
202
+ - **Across a year:** seasonal load (e.g. respiratory-illness season) shifts the baseline further.
203
+
204
+ ### The number that actually matters: the peak hour
205
+
206
+ A system doesn't experience the daily *average* — it experiences the **busiest hour**. If you size for the
207
+ average, you will be underwater exactly when volume is highest: queues back up, and end-to-end latency
208
+ climbs right when timeliness matters most.
209
+
210
+ **In the production ADT feeds we've profiled, the busiest hour runs about 2.7× the all-day average rate.**
211
+ So a feed that averages out to some tidy daily figure is actually asking for **nearly three times that
212
+ average rate** during its peak — and *that* is the rate your interface has to sustain.
213
+
214
+ ### Same interface, very different "daily capacity"
215
+
216
+ Because you must size to the peak, the realistic daily capacity of an interface is well below the naive
217
+ "sustained rate × 86,400 seconds" figure:
218
+
219
+ | | Naive (assumes flat traffic) | Realistic (peak = 2.7× average) |
220
+ |---|---|---|
221
+ | One ordered interface at 60 msg/s | ~5.2 M messages/day | **~1.9 M messages/day** |
222
+
223
+ Nothing about the engine changed between those two columns — only the assumption about traffic shape. The
224
+ naive number is off by nearly 3×.
225
+
226
+ **This is why a bare "handles X million messages/day" claim is close to meaningless.** Two feeds with the
227
+ *same* daily total but different burst profiles need very different capacity. Always ask for the
228
+ **peak-hour rate**, the **message size**, and the **ordering guarantee** behind any daily figure — those,
229
+ not the daily total, tell you whether it fits your environment.
230
+
231
+ ---
232
+
233
+ ## 7. Putting it together: how to size a deployment
234
+
235
+ There is no single throughput number — there's a short calculation using *your* inputs:
236
+
237
+ 1. **Start from the per-interface ceiling** for your ordering mode (our lab reference: ~60 msg/s ordered,
238
+ with an instant partner).
239
+ 2. **Apply your partner's real acknowledgement time** (§2). This is usually the biggest reduction.
240
+ 3. **Apply your traffic's burst factor** (§6) — divide by ~2.7 for ADT-shaped traffic (or measure your own
241
+ feed's peak-hour ÷ daily-average ratio).
242
+ 4. **Fan out to enough interfaces** to cover your aggregate peak, splitting feeds at the source.
243
+
244
+ ### A worked (illustrative) example
245
+
246
+ Suppose a partner acknowledges in ~25 ms and you have ADT-shaped traffic:
247
+
248
+ - Ordered throughput per interface ≈ 1000 ÷ (16 + 25) ≈ **~24 msg/s**.
249
+ - Peak-aware daily capacity ≈ 24 × 86,400 ÷ 2.7 ≈ **~0.8 M messages/day per interface**.
250
+ - To carry, say, a 5-million-message/day aggregate, you'd fan out to roughly **6–7 interfaces** — each
251
+ comfortably within one node's shared-store headroom.
252
+
253
+ Your inputs will differ; the point is the *method*. Plug in your partner latency and your peak factor, then
254
+ count interfaces.
255
+
256
+ ### Fan-out is the scaling story
257
+
258
+ A mega health system cannot push all of its ADT through one interface, and it doesn't need to. It splits
259
+ the feed at the source — by hospital, facility, region, or service line — across **multiple interfaces**.
260
+ Aggregate capacity is the sum of the interfaces; the shared message store on a single node has ample
261
+ headroom for the combined load, so you scale out by adding interfaces rather than trying to make one pipe
262
+ infinitely fast.
263
+
264
+ ---
265
+
266
+ ## 8. Reference lab measurements (and their caveats)
267
+
268
+ These are the figures referenced above, stated with full conditions so you can judge how they map to your
269
+ environment. **They are theoretical maxima under controlled conditions using synthetic data — not
270
+ guarantees, and not measured against any live clinical system.**
271
+
272
+ | Measurement | Value | Conditions |
273
+ |---|---|---|
274
+ | End-to-end delivery, one ordered interface | **~60 msg/s** | Single strictly-ordered MLLP interface, synthetic ADT, pass-through (no heavy transform), server database over a LAN, default settings, **instant-acknowledging partner**. |
275
+ | Intake (ACK-on-receipt) | **~450 msg/s** | Same setup; measures accept-and-persist, not end-to-end delivery. |
276
+ | Single-node store commit ceiling | **~tens of thousands of commits/s** | Local NVMe store; the shared store is far from the bottleneck for realistic interface counts. |
277
+ | Engine's own per-message overhead | **~16 ms** | Derived from the ordered end-to-end rate with an instant partner; this is the portion MessageFoundry contributes. |
278
+
279
+ **Why these are conservative and why your mileage will vary:**
280
+
281
+ - **Ordered, single interface.** The default strict-FIFO mode is serial by design. Unordered feeds and
282
+ multiple interfaces both go faster.
283
+ - **Instant partner.** The lab partner acknowledges immediately. **Real partners don't** — and as §2 shows,
284
+ their round-trip time is usually the dominant factor. This is the single largest reason your end-to-end
285
+ number will differ from the lab number.
286
+ - **No independent industry benchmark exists.** There is no trustworthy public per-node throughput number
287
+ for the major integration engines either — every published msg/s figure is hardware- and
288
+ workload-dependent. Treat *all* such numbers (including these) as starting points for your own
289
+ measurement, not as guarantees.
290
+
291
+ ---
292
+
293
+ ## Takeaways
294
+
295
+ 1. MessageFoundry adds only a few milliseconds per message; **your partner systems and round-trip times set
296
+ the real throughput.**
297
+ 2. There are **two** rates — fast intake and slower end-to-end delivery. Know which one a number refers to.
298
+ 3. **Strict ordering is serial** and therefore bounded; relax ordering, add connections, or fan out when you
299
+ need more.
300
+ 4. Traffic is **bursty** — size to the **peak hour (≈ 2.7× the average)**, not the daily total. "Messages
301
+ per day" alone tells you little.
302
+ 5. **Scale by fanning out** to multiple interfaces; one node's store has ample headroom.
303
+ 6. Interrogate every throughput claim with four questions: **message size, ordering, partner
304
+ acknowledgement time, and peak-hour rate.**