messagefoundry 0.2.4__tar.gz → 0.2.5__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 (734) hide show
  1. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/ci.yml +10 -1
  2. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/codeql.yml +2 -2
  3. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/dependabot-lock-resync.yml +5 -1
  4. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/release.yml +13 -4
  5. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/scorecard.yml +2 -2
  6. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/security.yml +6 -6
  7. messagefoundry-0.2.5/.github/zizmor.yml +31 -0
  8. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/CHANGELOG.md +19 -1
  9. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/PKG-INFO +1 -1
  10. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/__init__.py +1 -1
  11. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/settings.py +3 -3
  12. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/sqlserver.py +14 -0
  13. messagefoundry-0.2.5/tests/test_sqlserver_schema_init.py +96 -0
  14. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.claude/settings.json +0 -0
  15. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.dockerignore +0 -0
  16. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.gitattributes +0 -0
  17. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/CODEOWNERS +0 -0
  18. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  21. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/SECURITY.md +0 -0
  23. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/dependabot.yml +0 -0
  24. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/benchmark.yml +0 -0
  25. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/cla.yml +0 -0
  26. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/dependabot-auto-merge.yml +0 -0
  27. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/release-sync-check.yml +0 -0
  28. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.github/workflows/vuln-metrics.yml +0 -0
  29. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.gitignore +0 -0
  30. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.gitleaks.toml +0 -0
  31. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.pre-commit-config.yaml +0 -0
  32. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/.semgrep/messagefoundry.yml +0 -0
  33. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/CLA.md +0 -0
  34. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/CLAUDE.md +0 -0
  35. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/CODE_OF_CONDUCT.md +0 -0
  36. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/COMMERCIAL-LICENSE.md +0 -0
  37. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/CONTRIBUTING.md +0 -0
  38. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/GOVERNANCE.md +0 -0
  39. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/LICENSE +0 -0
  40. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/MAINTAINERS.md +0 -0
  41. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/NOTICE +0 -0
  42. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/README.md +0 -0
  43. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/Dockerfile +0 -0
  44. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/README.md +0 -0
  45. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/compose.yaml +0 -0
  46. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/k8s/secret.example.yaml +0 -0
  47. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/k8s/statefulset.yaml +0 -0
  48. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/locks/requirements-core.lock +0 -0
  49. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/locks/requirements-sqlserver.lock +0 -0
  50. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/secrets.env.example +0 -0
  51. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/smoke/Dockerfile +0 -0
  52. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/smoke/config/IB_Test_ADT.py +0 -0
  53. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docker/smoke/send_adt.py +0 -0
  54. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/ADOPTER-CI.md +0 -0
  55. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/AI.md +0 -0
  56. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/ARCHITECTURE.md +0 -0
  57. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/BACKLOG.md +0 -0
  58. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CI-QUALITY.md +0 -0
  59. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CLUSTERING.md +0 -0
  60. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CODESETS.md +0 -0
  61. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CONFIGURATION.md +0 -0
  62. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CONNECTIONS.md +0 -0
  63. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -0
  64. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -0
  65. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -0
  66. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -0
  67. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/DEPLOY-SERVER-DB.md +0 -0
  68. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/DEPLOYMENT.md +0 -0
  69. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/DICOM.md +0 -0
  70. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/DUAL_LICENSING_PLAN.md +0 -0
  71. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/EARLY-ADOPTER-GUIDE.md +0 -0
  72. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/FEATURE-MAP.md +0 -0
  73. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/HL7-VALIDATION.md +0 -0
  74. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/INSTALL-GUIDE.md +0 -0
  75. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/LOAD-TESTING.md +0 -0
  76. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/MENTAL-MODEL.md +0 -0
  77. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/MessageFoundry-Mental-Model.docx +0 -0
  78. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/PHI.md +0 -0
  79. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -0
  80. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/REMOTE-CONSOLE.md +0 -0
  81. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/SECURITY.md +0 -0
  82. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/SERVICE.md +0 -0
  83. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/SUPPORT-POLICY.md +0 -0
  84. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/SYSTEM-REQUIREMENTS.md +0 -0
  85. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/Secure_AI_Development_Standards.md +0 -0
  86. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/Secure_Development_Standards.md +0 -0
  87. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/TEE-RELAY.md +0 -0
  88. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/THROUGHPUT-IMPROVEMENTS.md +0 -0
  89. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/USER-GUIDE.md +0 -0
  90. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/WORKTREES.md +0 -0
  91. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0001-staged-pipeline-architecture.md +0 -0
  92. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -0
  93. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -0
  94. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0004-payload-agnostic-ingress.md +0 -0
  95. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0005-transform-accessible-state.md +0 -0
  96. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0006-external-data-lookups.md +0 -0
  97. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0007-gui-manageable-connections-toml.md +0 -0
  98. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0008-cluster-observability-api.md +0 -0
  99. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0009-run-scoped-context-providers.md +0 -0
  100. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0010-handler-callable-db-lookup.md +0 -0
  101. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0011-timer-scheduled-source.md +0 -0
  102. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0012-x12-edi-codec.md +0 -0
  103. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0013-increment-2-reingress-design.md +0 -0
  104. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0013-query-response-orchestration.md +0 -0
  105. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0014-alerting-rules-engine.md +0 -0
  106. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -0
  107. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0016-synchronous-x12-request-response.md +0 -0
  108. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0017-consumer-deployment-model.md +0 -0
  109. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -0
  110. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +0 -0
  111. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0020-protocol-diagnostic-capture.md +0 -0
  112. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -0
  113. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -0
  114. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0024-smart-backend-services-token-provider.md +0 -0
  115. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0025-dicom-codec-store-connectors.md +0 -0
  116. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0026-off-box-egress-update-check.md +0 -0
  117. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0028-base64-binary-carriage-codec.md +0 -0
  118. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0030-anonymization-test-harness-tee.md +0 -0
  119. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0031-startup-connection-fault-isolation.md +0 -0
  120. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0032-console-desktop-launch.md +0 -0
  121. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/0033-gui-manageable-code-sets.md +0 -0
  122. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/README.md +0 -0
  123. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/adr/TEMPLATE.md +0 -0
  124. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-components.png +0 -0
  125. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-components.svg +0 -0
  126. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-config-graph.png +0 -0
  127. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-config-graph.svg +0 -0
  128. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-diagram.md +0 -0
  129. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-message-flow.png +0 -0
  130. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-message-flow.svg +0 -0
  131. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-topology.png +0 -0
  132. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/architecture-topology.svg +0 -0
  133. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/TUNING-BASELINE.md +0 -0
  134. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -0
  135. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -0
  136. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -0
  137. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -0
  138. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -0
  139. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -0
  140. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/benchmarks/step-b-write-amplification.md +0 -0
  141. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/hl7-message-ordering-reference.md +0 -0
  142. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/message-ordering-design.md +0 -0
  143. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -0
  144. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -0
  145. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -0
  146. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/MULTISESSION-PLAN-3.md +0 -0
  147. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -0
  148. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/MULTISESSION-PLAN.md +0 -0
  149. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -0
  150. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/V0.2-LANE-HANDOFFS.md +0 -0
  151. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/v0.1-EXECUTION-PLAN.md +0 -0
  152. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/v0.1-PLAN.md +0 -0
  153. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -0
  154. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/research/cloud-deployment-research-2026-06.md +0 -0
  155. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/research/config-ux-review.md +0 -0
  156. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/research/non-hl7-transform-components.md +0 -0
  157. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -0
  158. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -0
  159. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ADVISORY-PROCESS.md +0 -0
  160. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -0
  161. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-L2-PHASE0-CHANGES.md +0 -0
  162. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -0
  163. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-L3-ASSESSMENT.md +0 -0
  164. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -0
  165. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/ASVS-L3-STATUS.md +0 -0
  166. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -0
  167. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -0
  168. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +0 -0
  169. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/BEYOND-ASVS-L3.md +0 -0
  170. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/DEP-CVE-RUNBOOK.md +0 -0
  171. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/DEPENDENCY-METRICS.md +0 -0
  172. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
  173. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/PHASE-8C-RBAC.md +0 -0
  174. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/PUBLISHING.md +0 -0
  175. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/RCA-TEMPLATE.md +0 -0
  176. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/RELEASE-GATE.md +0 -0
  177. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/REMEDIATION-PLAN.md +0 -0
  178. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/REVIEW-2026-06-07.md +0 -0
  179. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -0
  180. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SDS-REMEDIATION-PLAN.md +0 -0
  181. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SECURITY-POSTURE.md +0 -0
  182. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -0
  183. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SOUP-REVIEW-2026-06-18.md +0 -0
  184. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -0
  185. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/security/THREAT-MODEL.md +0 -0
  186. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/testing/VERIFY.md +0 -0
  187. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/testing/WIN2025-ACCEPTANCE.md +0 -0
  188. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/testing/WIN2025-TEST-MATRIX.md +0 -0
  189. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/docs/testing/WIN2025-TEST-PLAN.md +0 -0
  190. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/environments/dev.toml +0 -0
  191. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/environments/prod.toml +0 -0
  192. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/README.md +0 -0
  193. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/__main__.py +0 -0
  194. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/__init__.py +0 -0
  195. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/__main__.py +0 -0
  196. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/matrix.py +0 -0
  197. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/probes.py +0 -0
  198. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/report.py +0 -0
  199. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/acceptance/runner.py +0 -0
  200. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/compose.py +0 -0
  201. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/config/coverage.py +0 -0
  202. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/config/load/_shape.py +0 -0
  203. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/config/load/graph.py +0 -0
  204. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/file_panel.py +0 -0
  205. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/file_transport.py +0 -0
  206. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/__init__.py +0 -0
  207. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/corpus.py +0 -0
  208. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/correlator.py +0 -0
  209. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/enginepoll.py +0 -0
  210. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/failover.py +0 -0
  211. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/failover_track.py +0 -0
  212. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/governor.py +0 -0
  213. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/ids.py +0 -0
  214. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/metrics.py +0 -0
  215. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profile.py +0 -0
  216. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/README.md +0 -0
  217. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/closed-loop.toml +0 -0
  218. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/failover.toml +0 -0
  219. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/fanout-baseline.toml +0 -0
  220. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/malformed-load.toml +0 -0
  221. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/reference.toml +0 -0
  222. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/smoke-sqlserver.toml +0 -0
  223. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/smoke.toml +0 -0
  224. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/soak.toml +0 -0
  225. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/spike-burst.toml +0 -0
  226. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/sustained-overload.toml +0 -0
  227. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/profiles/writeamp.toml +0 -0
  228. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/report.py +0 -0
  229. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/runner.py +0 -0
  230. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/sender.py +0 -0
  231. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/load/sink.py +0 -0
  232. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/mllp.py +0 -0
  233. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/monitor.py +0 -0
  234. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/receive.py +0 -0
  235. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/__init__.py +0 -0
  236. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/__main__.py +0 -0
  237. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/capture.py +0 -0
  238. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/compare.py +0 -0
  239. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/normalize.py +0 -0
  240. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/reconcile/report.py +0 -0
  241. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/scenarios.py +0 -0
  242. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/send.py +0 -0
  243. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/harness/window.py +0 -0
  244. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/.gitignore +0 -0
  245. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/.vscodeignore +0 -0
  246. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/README.md +0 -0
  247. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/esbuild.js +0 -0
  248. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/media/hl7schema.json +0 -0
  249. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/media/icon.png +0 -0
  250. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/media/icon.svg +0 -0
  251. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/package-lock.json +0 -0
  252. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/package.json +0 -0
  253. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/snippets/messagefoundry.code-snippets +0 -0
  254. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/aiPolicy.ts +0 -0
  255. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/alertEditor.ts +0 -0
  256. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/auth.ts +0 -0
  257. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/chat.ts +0 -0
  258. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/cli.ts +0 -0
  259. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/codeSetEditor.ts +0 -0
  260. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/codesetsTree.ts +0 -0
  261. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/completion.ts +0 -0
  262. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/connectionEditor.ts +0 -0
  263. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/engineClient.ts +0 -0
  264. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/extension.ts +0 -0
  265. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/generate.ts +0 -0
  266. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/git.ts +0 -0
  267. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/graphTree.ts +0 -0
  268. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/home.ts +0 -0
  269. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/newRoute.ts +0 -0
  270. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/promote.ts +0 -0
  271. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/sourceControl.ts +0 -0
  272. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/test/runTest.ts +0 -0
  273. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/test/suite/chat.test.ts +0 -0
  274. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/test/suite/extension.test.ts +0 -0
  275. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/test/suite/index.ts +0 -0
  276. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/testBench.ts +0 -0
  277. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/src/validate.ts +0 -0
  278. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/tsconfig.json +0 -0
  279. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/ide/tsconfig.test.json +0 -0
  280. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/mefor.code-workspace +0 -0
  281. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/__main__.py +0 -0
  282. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/adr_analyze.py +0 -0
  283. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/__init__.py +0 -0
  284. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/_pools.py +0 -0
  285. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/hl7.py +0 -0
  286. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/keying.py +0 -0
  287. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/leak.py +0 -0
  288. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/rules.py +0 -0
  289. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/anon/surrogates.py +0 -0
  290. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/__init__.py +0 -0
  291. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/app.py +0 -0
  292. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/approvals.py +0 -0
  293. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/auth_models.py +0 -0
  294. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/auth_routes.py +0 -0
  295. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/field_authz.py +0 -0
  296. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/metrics.py +0 -0
  297. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/models.py +0 -0
  298. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/security.py +0 -0
  299. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/api/tls.py +0 -0
  300. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/__init__.py +0 -0
  301. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
  302. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/data/common_passwords.txt +0 -0
  303. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/identity.py +0 -0
  304. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/ldap.py +0 -0
  305. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/notifications.py +0 -0
  306. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/passwords.py +0 -0
  307. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/permissions.py +0 -0
  308. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/policy.py +0 -0
  309. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/ratelimit.py +0 -0
  310. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/service.py +0 -0
  311. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/tokens.py +0 -0
  312. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/auth/totp.py +0 -0
  313. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/checks.py +0 -0
  314. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/__init__.py +0 -0
  315. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/active_environment.py +0 -0
  316. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/ai_policy.py +0 -0
  317. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/alerts_edit.py +0 -0
  318. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/code_sets.py +0 -0
  319. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/codeset_edit.py +0 -0
  320. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/connections_edit.py +0 -0
  321. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/connections_file.py +0 -0
  322. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/db_lookup.py +0 -0
  323. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/environments.py +0 -0
  324. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/ingest_time.py +0 -0
  325. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/models.py +0 -0
  326. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/reference.py +0 -0
  327. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/response.py +0 -0
  328. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/run_context.py +0 -0
  329. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/state.py +0 -0
  330. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/tls_policy.py +0 -0
  331. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/config/wiring.py +0 -0
  332. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/__init__.py +0 -0
  333. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/__main__.py +0 -0
  334. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/_async.py +0 -0
  335. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/alerts_page.py +0 -0
  336. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/change_password.py +0 -0
  337. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/client.py +0 -0
  338. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/connections.py +0 -0
  339. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/dead_letters_page.py +0 -0
  340. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/delegates.py +0 -0
  341. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/event_log_page.py +0 -0
  342. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/alerts.svg +0 -0
  343. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/connections.svg +0 -0
  344. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/dead-letters.svg +0 -0
  345. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/engine-status.svg +0 -0
  346. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/log-search.svg +0 -0
  347. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/logo-lockup.svg +0 -0
  348. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/icons/users.svg +0 -0
  349. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/login.py +0 -0
  350. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/mfa.py +0 -0
  351. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/reauth.py +0 -0
  352. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/resources/README.md +0 -0
  353. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/resources/app.ico +0 -0
  354. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/resources/app.svg +0 -0
  355. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/search.py +0 -0
  356. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/service_control.py +0 -0
  357. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/sessions.py +0 -0
  358. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/shell.py +0 -0
  359. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/status.py +0 -0
  360. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/theme.py +0 -0
  361. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/users_page.py +0 -0
  362. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/console/widgets.py +0 -0
  363. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/README.md +0 -0
  364. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/__init__.py +0 -0
  365. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/_core.py +0 -0
  366. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/_hl7data.py +0 -0
  367. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/adt.py +0 -0
  368. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/all_types.py +0 -0
  369. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/bar.py +0 -0
  370. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/dft.py +0 -0
  371. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/documents.py +0 -0
  372. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/mdm.py +0 -0
  373. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/mfn.py +0 -0
  374. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/oml.py +0 -0
  375. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/orl.py +0 -0
  376. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/orm.py +0 -0
  377. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/oru.py +0 -0
  378. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/ras.py +0 -0
  379. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/rde.py +0 -0
  380. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/siu.py +0 -0
  381. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/generators/vxu.py +0 -0
  382. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/hl7schema.py +0 -0
  383. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/last_resort.py +0 -0
  384. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/logging_setup.py +0 -0
  385. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/__init__.py +0 -0
  386. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/binary.py +0 -0
  387. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/consistency.py +0 -0
  388. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/__init__.py +0 -0
  389. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/_deps.py +0 -0
  390. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/_util.py +0 -0
  391. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/dataset.py +0 -0
  392. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/errors.py +0 -0
  393. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
  394. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/dicom/peek.py +0 -0
  395. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/fhir/__init__.py +0 -0
  396. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/fhir/_deps.py +0 -0
  397. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/fhir/errors.py +0 -0
  398. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/fhir/peek.py +0 -0
  399. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/fhir/resource.py +0 -0
  400. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/groups.py +0 -0
  401. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/message.py +0 -0
  402. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/peek.py +0 -0
  403. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/split.py +0 -0
  404. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/summary.py +0 -0
  405. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/tree.py +0 -0
  406. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/validate.py +0 -0
  407. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/__init__.py +0 -0
  408. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/delimiters.py +0 -0
  409. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/errors.py +0 -0
  410. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/interchange.py +0 -0
  411. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/message.py +0 -0
  412. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/parsing/x12/peek.py +0 -0
  413. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/__init__.py +0 -0
  414. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/alert_sinks.py +0 -0
  415. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/alerts.py +0 -0
  416. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/cert_expiry.py +0 -0
  417. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/cluster.py +0 -0
  418. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/cluster_sqlserver.py +0 -0
  419. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/config_convergence.py +0 -0
  420. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/dryrun.py +0 -0
  421. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/engine.py +0 -0
  422. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/leader_tasks.py +0 -0
  423. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/reference_sync.py +0 -0
  424. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/retention.py +0 -0
  425. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/security_notify.py +0 -0
  426. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/state_convergence.py +0 -0
  427. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/pipeline/wiring_runner.py +0 -0
  428. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/py.typed +0 -0
  429. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/redaction.py +0 -0
  430. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/scaffold.py +0 -0
  431. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/secrets_dpapi.py +0 -0
  432. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/__init__.py +0 -0
  433. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/audit_tee.py +0 -0
  434. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/base.py +0 -0
  435. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/crypto.py +0 -0
  436. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/keyprovider.py +0 -0
  437. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/postgres.py +0 -0
  438. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/store/store.py +0 -0
  439. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/timezone.py +0 -0
  440. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/__init__.py +0 -0
  441. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/base.py +0 -0
  442. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/database.py +0 -0
  443. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/dicom.py +0 -0
  444. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/dicomweb.py +0 -0
  445. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/fhir.py +0 -0
  446. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/file.py +0 -0
  447. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/framing.py +0 -0
  448. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/loopback.py +0 -0
  449. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/mllp.py +0 -0
  450. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/remotefile.py +0 -0
  451. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/rest.py +0 -0
  452. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/signing.py +0 -0
  453. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/smart.py +0 -0
  454. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/soap.py +0 -0
  455. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/tcp.py +0 -0
  456. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/timer.py +0 -0
  457. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/transports/x12.py +0 -0
  458. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/__init__.py +0 -0
  459. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/checks.py +0 -0
  460. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/model.py +0 -0
  461. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/report.py +0 -0
  462. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/runner.py +0 -0
  463. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/messagefoundry/verify/smoke.py +0 -0
  464. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/packaging/messagefoundry-harness/README.md +0 -0
  465. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/packaging/messagefoundry-harness/pyproject.toml +0 -0
  466. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/pyproject.toml +0 -0
  467. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/requirements.lock +0 -0
  468. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_ACME_ADT.py +0 -0
  469. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_FHIR_INTAKE.py +0 -0
  470. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_IMMUNIZATION_VXU.py +0 -0
  471. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_PARTNER_X12.py +0 -0
  472. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_RADIOLOGY_SR.py +0 -0
  473. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/IB_RTE_ELIGIBILITY.py +0 -0
  474. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/adt.py +0 -0
  475. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/codesets/event_labels.csv +0 -0
  476. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/codesets/facility_mnemonics.toml +0 -0
  477. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/config/connections.toml +0 -0
  478. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/consistency/validated_adt.py +0 -0
  479. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/dicom/generate_sr_sample.py +0 -0
  480. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/adt_a01.hl7 +0 -0
  481. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/adt_batch.hl7 +0 -0
  482. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/.gitattributes +0 -0
  483. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/README.md +0 -0
  484. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/adt_a01.txt +0 -0
  485. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/adt_a03.txt +0 -0
  486. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -0
  487. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -0
  488. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/omd_o03.txt +0 -0
  489. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -0
  490. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -0
  491. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/messages/x12_270_eligibility.edi +0 -0
  492. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/results_relay/README.md +0 -0
  493. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/results_relay/codesets/test_codes.csv +0 -0
  494. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -0
  495. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/results_relay/messages/oru_results.hl7 +0 -0
  496. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/results_relay/results_relay.py +0 -0
  497. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/samples/send_mllp.py +0 -0
  498. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/console/install-console-shortcut.ps1 +0 -0
  499. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/console/pack_ico.py +0 -0
  500. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/console/uninstall-console-shortcut.ps1 +0 -0
  501. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/dev/postgres.ps1 +0 -0
  502. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/dev/sqlserver-docker.ps1 +0 -0
  503. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/dev/sqlserver.ps1 +0 -0
  504. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/hooks/block-blanket-git-stage.ps1 +0 -0
  505. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/publish/check_release_sync.py +0 -0
  506. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/publish/publish-denylist.txt +0 -0
  507. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/publish/publish.ps1 +0 -0
  508. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/publish/scan_forbidden.py +0 -0
  509. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/security/crypto_inventory_check.py +0 -0
  510. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/security/vuln_metrics.py +0 -0
  511. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/service/import-db-ca.ps1 +0 -0
  512. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/service/install-service.ps1 +0 -0
  513. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/service/uninstall-service.ps1 +0 -0
  514. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/trace_icon.py +0 -0
  515. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/worktree/new.ps1 +0 -0
  516. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/worktree/remove.ps1 +0 -0
  517. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/worktree/session-context.ps1 +0 -0
  518. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/scripts/worktree/spawn.ps1 +0 -0
  519. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/__init__.py +0 -0
  520. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/__main__.py +0 -0
  521. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/__init__.py +0 -0
  522. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/_hl7data.py +0 -0
  523. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/_pools.py +0 -0
  524. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/hl7.py +0 -0
  525. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/keying.py +0 -0
  526. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/leak.py +0 -0
  527. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/rules.py +0 -0
  528. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/anon/surrogates.py +0 -0
  529. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/compare.py +0 -0
  530. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/correlate.py +0 -0
  531. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/hl7_fields.py +0 -0
  532. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/mefor_api.py +0 -0
  533. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/mllp.py +0 -0
  534. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/relay.py +0 -0
  535. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/report.py +0 -0
  536. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tee/store.py +0 -0
  537. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/_dicom_sample.py +0 -0
  538. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/_failover_load_support.py +0 -0
  539. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/_fhir_fixtures.py +0 -0
  540. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/conftest.py +0 -0
  541. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_acceptance_framework.py +0 -0
  542. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ack_capture_runner.py +0 -0
  543. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ack_sent_store.py +0 -0
  544. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_active_environment.py +0 -0
  545. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ad_group_scope.py +0 -0
  546. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_admin_new_ip.py +0 -0
  547. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_adr_analyze.py +0 -0
  548. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ai_policy.py +0 -0
  549. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_alert_rules.py +0 -0
  550. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_alert_sinks.py +0 -0
  551. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_alerts_edit.py +0 -0
  552. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_alerts_rules_api.py +0 -0
  553. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_anon_core.py +0 -0
  554. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_anon_integration.py +0 -0
  555. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_anon_parity.py +0 -0
  556. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_api.py +0 -0
  557. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_api_auth.py +0 -0
  558. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_api_reload.py +0 -0
  559. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_api_tls.py +0 -0
  560. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_approvals.py +0 -0
  561. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_asvs_phase0.py +0 -0
  562. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_audit_integrity.py +0 -0
  563. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_audit_offbox_tee.py +0 -0
  564. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_core.py +0 -0
  565. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_entry_hardening.py +0 -0
  566. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_hardening.py +0 -0
  567. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_service.py +0 -0
  568. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_session_lifecycle.py +0 -0
  569. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_auth_store.py +0 -0
  570. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_binary_carriage.py +0 -0
  571. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cert_expiry.py +0 -0
  572. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_channel_rbac.py +0 -0
  573. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_checks.py +0 -0
  574. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cli.py +0 -0
  575. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cluster.py +0 -0
  576. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cluster_failover_postgres.py +0 -0
  577. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cluster_failover_sqlserver.py +0 -0
  578. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cluster_graph_gating.py +0 -0
  579. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_cluster_lease.py +0 -0
  580. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_code_sets.py +0 -0
  581. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_codeset_edit.py +0 -0
  582. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_api.py +0 -0
  583. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_event_api.py +0 -0
  584. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_event_emit.py +0 -0
  585. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_event_outbound.py +0 -0
  586. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_event_store.py +0 -0
  587. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connection_resilience.py +0 -0
  588. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connections_cli.py +0 -0
  589. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_connections_file.py +0 -0
  590. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_consistency.py +0 -0
  591. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_alerts.py +0 -0
  592. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_auth.py +0 -0
  593. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_client.py +0 -0
  594. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_dead_letters.py +0 -0
  595. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_event_log.py +0 -0
  596. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_hardening.py +0 -0
  597. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_icon.py +0 -0
  598. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_password.py +0 -0
  599. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_sessions.py +0 -0
  600. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_status.py +0 -0
  601. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_step_up.py +0 -0
  602. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_theme.py +0 -0
  603. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_users.py +0 -0
  604. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_console_widgets.py +0 -0
  605. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_database_connector_integration.py +0 -0
  606. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_database_transport.py +0 -0
  607. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_db_lookup.py +0 -0
  608. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_db_lookup_live_runner.py +0 -0
  609. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_delivery_settings.py +0 -0
  610. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dependency_boundaries.py +0 -0
  611. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dicom_codec.py +0 -0
  612. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dicom_scp.py +0 -0
  613. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dicom_scu.py +0 -0
  614. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dicom_wiring.py +0 -0
  615. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dicomweb.py +0 -0
  616. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_docs_runbooks.py +0 -0
  617. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_dryrun.py +0 -0
  618. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ed_documents.py +0 -0
  619. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ed_documents_e2e.py +0 -0
  620. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_egress_allowlist.py +0 -0
  621. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_environments.py +0 -0
  622. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_fhir_parsing.py +0 -0
  623. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_fhir_resource.py +0 -0
  624. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_fhir_transport.py +0 -0
  625. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_field_authz.py +0 -0
  626. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_fifo_ordering.py +0 -0
  627. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_generate_cli.py +0 -0
  628. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_generated_adt.py +0 -0
  629. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_generators_core.py +0 -0
  630. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_generators_types.py +0 -0
  631. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_groups.py +0 -0
  632. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness.py +0 -0
  633. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_compose.py +0 -0
  634. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_config.py +0 -0
  635. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_faults.py +0 -0
  636. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_file.py +0 -0
  637. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_monitor.py +0 -0
  638. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_harness_scenarios.py +0 -0
  639. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_hl7_core_features.py +0 -0
  640. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_hl7schema.py +0 -0
  641. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_inbound_bind.py +0 -0
  642. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_ingest_time.py +0 -0
  643. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_keyprovider.py +0 -0
  644. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_last_resort.py +0 -0
  645. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_leader_tasks.py +0 -0
  646. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_config.py +0 -0
  647. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_corpus.py +0 -0
  648. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_failover_postgres.py +0 -0
  649. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_failover_sqlserver.py +0 -0
  650. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_failover_unit.py +0 -0
  651. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_metrics.py +0 -0
  652. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_profile.py +0 -0
  653. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_report.py +0 -0
  654. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_runner.py +0 -0
  655. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_sender.py +0 -0
  656. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_load_sink.py +0 -0
  657. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_logging.py +0 -0
  658. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_message.py +0 -0
  659. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_message_split.py +0 -0
  660. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_metrics_exporter.py +0 -0
  661. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_mfa.py +0 -0
  662. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_mllp_encoding_override.py +0 -0
  663. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_mllp_tls.py +0 -0
  664. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_operability_config.py +0 -0
  665. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_outbound_signing.py +0 -0
  666. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_outbound_simulate.py +0 -0
  667. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_packaging.py +0 -0
  668. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_parse_tree.py +0 -0
  669. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_parsing.py +0 -0
  670. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_payload_agnostic_ingress.py +0 -0
  671. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_postgres_store.py +0 -0
  672. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_reconcile_capture.py +0 -0
  673. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_reconcile_compare.py +0 -0
  674. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_reconcile_harness.py +0 -0
  675. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_redaction.py +0 -0
  676. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_reference_sets.py +0 -0
  677. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_reingress.py +0 -0
  678. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_remotefile_transport.py +0 -0
  679. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_response_capture.py +0 -0
  680. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_rest_transport.py +0 -0
  681. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_retention.py +0 -0
  682. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_run_context.py +0 -0
  683. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_scaffold.py +0 -0
  684. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_scan_forbidden.py +0 -0
  685. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_secrets_dpapi.py +0 -0
  686. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_security_notify.py +0 -0
  687. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_security_static.py +0 -0
  688. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_service_control.py +0 -0
  689. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_settings.py +0 -0
  690. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_smart_backend.py +0 -0
  691. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_soap_transport.py +0 -0
  692. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_soap_wssecurity.py +0 -0
  693. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_sqlserver_coordinator.py +0 -0
  694. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_sqlserver_cursor_close.py +0 -0
  695. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_sqlserver_store.py +0 -0
  696. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_staged_pipeline.py +0 -0
  697. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_startup_fault_isolation.py +0 -0
  698. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_stats_reset.py +0 -0
  699. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_step_up.py +0 -0
  700. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store.py +0 -0
  701. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store_backend.py +0 -0
  702. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store_encryption.py +0 -0
  703. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store_file_hardening.py +0 -0
  704. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store_read_pool.py +0 -0
  705. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_store_ssl.py +0 -0
  706. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_summary.py +0 -0
  707. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_task_resilience.py +0 -0
  708. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tcp_transport.py +0 -0
  709. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_cli.py +0 -0
  710. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_compare.py +0 -0
  711. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_correlate.py +0 -0
  712. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_hl7_fields.py +0 -0
  713. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_mefor_api.py +0 -0
  714. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_mllp.py +0 -0
  715. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_relay.py +0 -0
  716. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_report.py +0 -0
  717. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tee_store.py +0 -0
  718. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_timer_source.py +0 -0
  719. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_timezone.py +0 -0
  720. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_tls_policy.py +0 -0
  721. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_totp.py +0 -0
  722. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_transform_state.py +0 -0
  723. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_transports.py +0 -0
  724. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_verify.py +0 -0
  725. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_version.py +0 -0
  726. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_win2025_acceptance.py +0 -0
  727. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_wiring.py +0 -0
  728. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_wiring_engine.py +0 -0
  729. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_wiring_reload.py +0 -0
  730. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_wiring_serve.py +0 -0
  731. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_x12_parsing.py +0 -0
  732. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_x12_rte.py +0 -0
  733. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/tests/test_x12_transport.py +0 -0
  734. {messagefoundry-0.2.4 → messagefoundry-0.2.5}/uv.lock +0 -0
@@ -10,6 +10,11 @@ concurrency:
10
10
  group: ci-${{ github.ref }}
11
11
  cancel-in-progress: true
12
12
 
13
+ # Least privilege: every job here only reads the repo and runs tests/builds (no gh writes, no git push,
14
+ # no secrets), so a read-only default token is sufficient. A job needing more declares its own block.
15
+ permissions:
16
+ contents: read
17
+
13
18
  jobs:
14
19
  # Lint + type-check + unit tests. The project supports a single Python — 3.14 — so every leg runs it.
15
20
  # Linux carries the cheap breadth (1x minutes); Windows Server 2022 + 2025 is the primary deployment
@@ -809,9 +814,13 @@ jobs:
809
814
  if: >-
810
815
  contains(needs.*.result, 'failure') ||
811
816
  contains(needs.*.result, 'cancelled')
817
+ env:
818
+ # Pass the needs context via env, not inline ${{ }} in the run block (defense-in-depth against
819
+ # template injection — a job output could in theory carry a quote that breaks out of echo).
820
+ NEEDS_JSON: ${{ toJSON(needs) }}
812
821
  run: |
813
822
  echo "::error::A gated CI leg failed or was cancelled."
814
- echo '${{ toJSON(needs) }}'
823
+ echo "$NEEDS_JSON"
815
824
  exit 1
816
825
 
817
826
  - name: Gated legs OK
@@ -56,12 +56,12 @@ jobs:
56
56
  with:
57
57
  persist-credentials: false # CodeQL uploads via the job token, not a persisted git credential
58
58
  - name: Initialize CodeQL
59
- uses: github/codeql-action/init@v3 # TODO: SHA-pin (repo convention)
59
+ uses: github/codeql-action/init@dd903d2e4f5405488e5ef1422510ee31c8b32357 # v3.36.2
60
60
  with:
61
61
  languages: ${{ matrix.language }}
62
62
  # security-extended adds higher-recall security queries on top of the default suite.
63
63
  queries: security-extended
64
64
  - name: Analyze
65
- uses: github/codeql-action/analyze@v3 # TODO: SHA-pin (repo convention)
65
+ uses: github/codeql-action/analyze@dd903d2e4f5405488e5ef1422510ee31c8b32357 # v3.36.2
66
66
  with:
67
67
  category: "/language:${{ matrix.language }}"
@@ -75,6 +75,10 @@ jobs:
75
75
  uv export --no-emit-project --no-dev --extra sqlserver --format requirements.txt -o docker/locks/requirements-sqlserver.lock
76
76
 
77
77
  - name: Commit and push the resynced locks
78
+ env:
79
+ # Pass the PR head ref through the environment, NOT inline ${{ }} in the run block, so a branch
80
+ # name containing shell metacharacters can never be evaluated as code (template injection).
81
+ HEAD_REF: ${{ github.event.pull_request.head.ref }}
78
82
  run: |
79
83
  set -euo pipefail
80
84
  git config user.name 'dependabot[bot]'
@@ -88,4 +92,4 @@ jobs:
88
92
  # Push with the persisted App-token credential (NOT GITHUB_TOKEN). An App-token push emits a
89
93
  # synchronize event so the required checks (DEP-1, ci.yml) re-run on the new commit; a
90
94
  # GITHUB_TOKEN push would leave them pending and the PR unmergeable.
91
- git push origin "HEAD:${{ github.event.pull_request.head.ref }}"
95
+ git push origin "HEAD:${HEAD_REF}"
@@ -34,16 +34,20 @@ on:
34
34
  - "v[0-9]+.[0-9]+.[0-9]+-*" # pre-releases: v0.1.0-rc1, …
35
35
  workflow_dispatch:
36
36
 
37
- permissions:
38
- contents: write # create the release + upload its assets
39
- id-token: write # Sigstore signing, PyPI Trusted Publishing, + provenance — all via the GitHub OIDC identity
40
- attestations: write # write the SLSA build-provenance attestation (actions/attest-build-provenance)
37
+ # Deny-all at the workflow level; each job below requests only the scopes it uses (least privilege).
38
+ permissions: {}
41
39
 
42
40
  jobs:
43
41
  release:
44
42
  runs-on: ubuntu-latest
43
+ permissions:
44
+ contents: write # create the release + upload its assets
45
+ id-token: write # Sigstore signing, PyPI Trusted Publishing, + provenance — all via the GitHub OIDC identity
46
+ attestations: write # write the SLSA build-provenance attestation (actions/attest-build-provenance)
45
47
  steps:
46
48
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
49
+ with:
50
+ persist-credentials: false # release uses GH_TOKEN env / OIDC, never the persisted git credential
47
51
 
48
52
  - name: Set up Python
49
53
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
@@ -171,8 +175,13 @@ jobs:
171
175
  # publish — so a missing harness PyPI project can never red a release.
172
176
  needs: release
173
177
  runs-on: ubuntu-latest
178
+ permissions:
179
+ contents: write # gh release upload (attach the harness wheel)
180
+ id-token: write # PyPI Trusted Publishing (OIDC) for the harness wheel
174
181
  steps:
175
182
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
183
+ with:
184
+ persist-credentials: false # gh upload uses GH_TOKEN env / OIDC, never the persisted git credential
176
185
 
177
186
  - name: Set up Python
178
187
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
@@ -42,7 +42,7 @@ jobs:
42
42
  with:
43
43
  persist-credentials: false
44
44
  - name: Run Scorecard
45
- uses: ossf/scorecard-action@v2 # TODO: SHA-pin (repo convention)
45
+ uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
46
46
  with:
47
47
  results_file: results.sarif
48
48
  results_format: sarif
@@ -54,6 +54,6 @@ jobs:
54
54
  path: results.sarif
55
55
  retention-days: 5
56
56
  - name: Upload to code scanning
57
- uses: github/codeql-action/upload-sarif@v3 # TODO: SHA-pin (repo convention)
57
+ uses: github/codeql-action/upload-sarif@dd903d2e4f5405488e5ef1422510ee31c8b32357 # v3.36.2
58
58
  with:
59
59
  sarif_file: results.sarif
@@ -214,12 +214,12 @@ jobs:
214
214
  zizmor:
215
215
  name: zizmor (GitHub Actions static analysis)
216
216
  runs-on: ubuntu-latest
217
- # ADVISORY for its first cycle (continue-on-error): static analysis of the workflow files THEMSELVES
218
- # (Trail of Bits) — template injection, over-broad GITHUB_TOKEN permissions, unpinned `uses:`,
219
- # artifact poisoning. Complements (and enforces) the by-hand SHA-pinning across these workflows.
220
- # Once a baseline run is reviewed/clean, DELETE `continue-on-error` to make it blocking. (It will
221
- # flag the `@v3` codeql-action tags in codeql.yml — that's the intended forcing function to pin them.)
222
- continue-on-error: true
217
+ # BLOCKING: static analysis of the workflow files THEMSELVES (Trail of Bits) — template injection,
218
+ # over-broad GITHUB_TOKEN permissions, dangerous triggers, artifact-credential persistence. The
219
+ # baseline is clean high-confidence findings are fixed in-tree (least-privilege per-job permissions,
220
+ # env-passed refs, persist-credentials: false) and the few safe-by-design ones are recorded with a
221
+ # justification in .github/zizmor.yml — so a NEW workflow-security regression now fails the build.
222
+ # Tune suppressions in .github/zizmor.yml (with a reason), not by relaxing this gate.
223
223
  permissions:
224
224
  contents: read
225
225
  steps:
@@ -0,0 +1,31 @@
1
+ # zizmor configuration — https://docs.zizmor.sh/configuration/
2
+ #
3
+ # Each entry below is a REVIEWED, justified non-finding for this repo. Real fixes live in the workflow
4
+ # files themselves (least-privilege permissions, env-passed refs, persist-credentials: false); this file
5
+ # is only for findings that are safe-by-design here. Keep it small and commented — a suppression without
6
+ # a reason is a latent vulnerability.
7
+ rules:
8
+ dangerous-triggers:
9
+ ignore:
10
+ # A CLA assistant REQUIRES pull_request_target to record signatures + comment on fork PRs. This
11
+ # workflow never checks out untrusted PR code, pins the third-party action by SHA, and gates on the
12
+ # immutable comment body / event name — so the usual pull_request_target risk (running attacker
13
+ # code with a write token) does not apply. See the SECURITY note in cla.yml.
14
+ - cla.yml
15
+
16
+ artipacked:
17
+ ignore:
18
+ # artipacked flags a checkout that persists the token's git credential — a risk only if that
19
+ # credential can leak into an uploaded artifact. The jobs below do not push and never upload the
20
+ # repo/.git tree, so the persisted credential is inert noise here.
21
+ #
22
+ # NOT suppressed (fixed at the source instead): release.yml sets persist-credentials: false on both
23
+ # checkouts because it DOES upload build artifacts. dependabot-lock-resync.yml persists a
24
+ # narrowly-scoped App token ON PURPOSE to push the resynced locks (documented inline) and is listed
25
+ # here for that reason.
26
+ - benchmark.yml
27
+ - ci.yml
28
+ - dependabot-lock-resync.yml
29
+ - release-sync-check.yml
30
+ - security.yml
31
+ - vuln-metrics.yml
@@ -6,6 +6,23 @@ All notable changes to MessageFoundry are documented here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.5] — 2026-06-26 — Early Access
10
+
11
+ A bug-fix release hardening SQL Server cluster cold-start.
12
+
13
+ ### Fixed
14
+ - **SQL Server: concurrent schema-init race on a virgin DB (HA cold start).** Two cluster nodes starting
15
+ simultaneously against an empty database both ran the `IF OBJECT_ID(...) IS NULL CREATE TABLE` guards
16
+ with no cross-node lock, so both issued `CREATE` and the loser died at startup on a `2714` ("There is
17
+ already an object named ..."). `_ensure_schema` now takes an exclusive `sp_getapplock`
18
+ (`mefor:schema_init`) around the DDL — the T-SQL analog of the PostgreSQL store's existing schema
19
+ advisory lock — so the second node serializes and runs the now-no-op guarded CREATEs cleanly. Single-node
20
+ and pre-created schema are unaffected; SQLite and PostgreSQL were already race-safe. (#553)
21
+
22
+ ### Changed
23
+ - Docs: the `[cluster]` settings docstring and the pool-size validation error now name both `postgres` and
24
+ `sqlserver` (the cross-section validator already admitted both). (#553)
25
+
9
26
  ## [0.2.4] — 2026-06-26 — Early Access
10
27
 
11
28
  A bug-fix release that completes the EF-6 SQL Server fix shipped in 0.2.3.
@@ -186,7 +203,8 @@ tests, but the external code review + penetration test (the bar for a security-c
186
203
  - Releases are built, SBOM'd (CycloneDX), and signed with [Sigstore](https://www.sigstore.dev/) — see the
187
204
  `release` workflow.
188
205
 
189
- [Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.4...HEAD
206
+ [Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.5...HEAD
207
+ [0.2.5]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.4...v0.2.5
190
208
  [0.2.4]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.3...v0.2.4
191
209
  [0.2.3]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.2...v0.2.3
192
210
  [0.2.2]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.1...v0.2.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: messagefoundry
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Open-source healthcare integration engine — route, transform, and validate messages across many formats and connection types
5
5
  License-Expression: AGPL-3.0-or-later
6
6
  License-File: LICENSE
@@ -60,7 +60,7 @@ from messagefoundry.parsing.message import Message, RawMessage
60
60
  from messagefoundry.parsing.split import split_by_obr
61
61
  from messagefoundry.timezone import convert_hl7_timestamp, to_zone
62
62
 
63
- __version__ = "0.2.4"
63
+ __version__ = "0.2.5"
64
64
 
65
65
  __all__ = [
66
66
  "Message",
@@ -1116,8 +1116,8 @@ class ClusterSettings(_Section):
1116
1116
  ``heartbeat_seconds`` to ``DB_now + leader_lease_ttl_seconds``, a standby acquires only once that
1117
1117
  lease has expired, and a leader that cannot renew within ``leader_fence_timeout_seconds`` self-fences
1118
1118
  before the lease can expire (the split-brain guard). The cross-section validator below requires
1119
- ``[store].backend = postgres`` and ``[store].pool_size >= 2`` when this is enabled (a clustered node
1120
- drives concurrent background work against the pool)."""
1119
+ ``[store].backend`` in ``{postgres, sqlserver}`` and ``[store].pool_size >= 2`` when this is enabled
1120
+ (a clustered node drives concurrent background work against the pool)."""
1121
1121
 
1122
1122
  enabled: bool = False
1123
1123
  # Override the auto-generated node id (host:pid:hex). Pin it for a stable identity across restarts
@@ -1306,7 +1306,7 @@ class ServiceSettings(BaseModel):
1306
1306
  f"(got {self.store.pool_size}); a clustered node drives concurrent background work "
1307
1307
  "(the membership/lease maintenance loop + the leader reclaim sweep + the per-stage "
1308
1308
  "workers) against the pool, so a pool of 1 would serialize everything — prefer "
1309
- "pool_size >= 3 for clustered Postgres"
1309
+ "pool_size >= 3 for a clustered node (Postgres or SQL Server)"
1310
1310
  )
1311
1311
  return self
1312
1312
 
@@ -70,6 +70,12 @@ log = logging.getLogger(__name__)
70
70
 
71
71
  # Schema (T-SQL). Idempotent: guarded by OBJECT_ID / IndexProperty so re-open is a no-op. Epoch
72
72
  # timestamps are FLOAT; ids are NVARCHAR(64) (uuid4 hex); bodies NVARCHAR(MAX).
73
+ #
74
+ # Schema-init is serialized across concurrent opens by this named applock (the T-SQL analog of the
75
+ # Postgres store's ``pg_advisory_xact_lock("mefor_schema_init")`` — store/postgres.py). The OBJECT_ID
76
+ # guards below are check-then-create and do NOT serialize concurrent creators on a virgin DB — see
77
+ # _ensure_schema.
78
+ _SCHEMA_LOCK = "mefor:schema_init"
73
79
  _SCHEMA: list[str] = [
74
80
  """IF OBJECT_ID('messages','U') IS NULL CREATE TABLE messages (
75
81
  id NVARCHAR(64) NOT NULL PRIMARY KEY, channel_id NVARCHAR(256) NOT NULL,
@@ -578,6 +584,14 @@ class SqlServerStore:
578
584
  async def _ensure_schema(self) -> None:
579
585
  async with self._acquire() as conn, self._cursor(conn) as cur:
580
586
  try:
587
+ # Serialize schema-init across concurrent opens (e.g. a 2-node HA cold start against a
588
+ # virgin DB) — the T-SQL analog of the Postgres store's schema advisory lock. Without it
589
+ # the `IF OBJECT_ID(...) IS NULL CREATE` guards below are check-then-create: two nodes
590
+ # both see NULL and both CREATE, and the loser dies on a 2714 "There is already an object
591
+ # named ...". The applock is transaction-scoped (the autocommit=False pool means this
592
+ # first statement opens the txn), so it auto-releases on the commit/rollback below; the
593
+ # second node then runs the now-no-op guarded CREATEs cleanly.
594
+ await self._applock(cur, _SCHEMA_LOCK)
581
595
  for statement in _SCHEMA:
582
596
  await cur.execute(statement)
583
597
  await conn.commit()
@@ -0,0 +1,96 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-or-later
2
+ # Copyright (C) 2026 MessageFoundry Organization and contributors
3
+ """Finding A: SQL Server schema-init takes the cross-node schema applock BEFORE any CREATE, so two
4
+ nodes doing an HA cold start against a virgin DB serialize the DDL instead of both running the
5
+ check-then-create `IF OBJECT_ID(...) IS NULL CREATE` guards and racing the loser into a 2714 ("There
6
+ is already an object named ..."). The real race needs a real SQL Server + two concurrent opens (the
7
+ gated service-container suite / the dogfood box), but the *contract* — applock first, then DDL, under
8
+ one transaction — is verifiable here with a fake aioodbc conn/cursor and NO ODBC driver.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import types
14
+ from contextlib import asynccontextmanager
15
+
16
+ from messagefoundry.store.sqlserver import _SCHEMA_LOCK, SqlServerStore
17
+
18
+
19
+ class _FakeCursor:
20
+ def __init__(self, executed: list[tuple[str, object]]):
21
+ self._executed = executed
22
+ self.description = None
23
+
24
+ async def execute(self, sql: str, params: object = None) -> None:
25
+ self._executed.append((sql, params))
26
+
27
+ async def fetchone(self) -> object:
28
+ return (0,) # sp_getapplock return code >= 0 (lock granted)
29
+
30
+ async def fetchall(self) -> list[object]:
31
+ return []
32
+
33
+ async def close(self) -> None:
34
+ pass
35
+
36
+
37
+ class _FakeConn:
38
+ def __init__(self, executed: list[tuple[str, object]]):
39
+ self.cursor_obj = _FakeCursor(executed)
40
+ self.committed = 0
41
+ self.rolledback = 0
42
+
43
+ async def cursor(self) -> _FakeCursor:
44
+ return self.cursor_obj
45
+
46
+ async def commit(self) -> None:
47
+ self.committed += 1
48
+
49
+ async def rollback(self) -> None:
50
+ self.rolledback += 1
51
+
52
+
53
+ class _FakePool:
54
+ def __init__(self, conn: _FakeConn):
55
+ self._conn = conn
56
+
57
+ def acquire(self) -> object:
58
+ conn = self._conn
59
+
60
+ @asynccontextmanager
61
+ async def _cm(): # type: ignore[no-untyped-def]
62
+ yield conn
63
+
64
+ return _cm()
65
+
66
+
67
+ def _make_store(conn: _FakeConn) -> SqlServerStore:
68
+ store = SqlServerStore.__new__(SqlServerStore)
69
+ store._pool = _FakePool(conn) # type: ignore[assignment]
70
+ store._settings = types.SimpleNamespace(command_timeout=0) # type: ignore[assignment]
71
+ return store
72
+
73
+
74
+ async def test_ensure_schema_takes_applock_before_any_create() -> None:
75
+ executed: list[tuple[str, object]] = []
76
+ conn = _FakeConn(executed)
77
+ store = _make_store(conn)
78
+
79
+ await store._ensure_schema()
80
+
81
+ # The very first statement is an exclusive schema applock naming the cross-node resource...
82
+ sql0, params0 = executed[0]
83
+ assert "sp_getapplock" in sql0
84
+ assert params0 is not None and _SCHEMA_LOCK in params0
85
+ # ...and it precedes every CREATE TABLE (so two virgin-DB nodes serialize rather than race to 2714).
86
+ first_create = next(i for i, (sql, _) in enumerate(executed) if "CREATE TABLE" in sql)
87
+ assert first_create > 0
88
+ # Single committed DDL batch; the txn-scoped applock auto-releases on that commit.
89
+ assert conn.committed == 1
90
+ assert conn.rolledback == 0
91
+
92
+
93
+ async def test_schema_lock_resource_matches_postgres_name() -> None:
94
+ # Both backends must take the SAME logical schema lock name family ("mefor...schema_init") so the
95
+ # intent is obvious; the SQL Server resource is colon-namespaced like its sibling applocks.
96
+ assert _SCHEMA_LOCK == "mefor:schema_init"
File without changes
File without changes
File without changes
File without changes
File without changes