messagefoundry 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. messagefoundry-0.1.0/.claude/settings.json +81 -0
  2. messagefoundry-0.1.0/.gitattributes +4 -0
  3. messagefoundry-0.1.0/.github/CODEOWNERS +19 -0
  4. messagefoundry-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  5. messagefoundry-0.1.0/.github/ISSUE_TEMPLATE/config.yml +7 -0
  6. messagefoundry-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
  7. messagefoundry-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +29 -0
  8. messagefoundry-0.1.0/.github/SECURITY.md +50 -0
  9. messagefoundry-0.1.0/.github/dependabot.yml +17 -0
  10. messagefoundry-0.1.0/.github/workflows/benchmark.yml +217 -0
  11. messagefoundry-0.1.0/.github/workflows/ci.yml +670 -0
  12. messagefoundry-0.1.0/.github/workflows/cla.yml +47 -0
  13. messagefoundry-0.1.0/.github/workflows/release.yml +153 -0
  14. messagefoundry-0.1.0/.github/workflows/security.yml +172 -0
  15. messagefoundry-0.1.0/.gitignore +64 -0
  16. messagefoundry-0.1.0/.gitleaks.toml +14 -0
  17. messagefoundry-0.1.0/.pre-commit-config.yaml +49 -0
  18. messagefoundry-0.1.0/.semgrep/messagefoundry.yml +52 -0
  19. messagefoundry-0.1.0/CHANGELOG.md +50 -0
  20. messagefoundry-0.1.0/CLA.md +74 -0
  21. messagefoundry-0.1.0/CLAUDE.md +397 -0
  22. messagefoundry-0.1.0/CODE_OF_CONDUCT.md +42 -0
  23. messagefoundry-0.1.0/COMMERCIAL-LICENSE.md +67 -0
  24. messagefoundry-0.1.0/CONTRIBUTING.md +83 -0
  25. messagefoundry-0.1.0/GOVERNANCE.md +73 -0
  26. messagefoundry-0.1.0/LICENSE +662 -0
  27. messagefoundry-0.1.0/MAINTAINERS.md +32 -0
  28. messagefoundry-0.1.0/NOTICE +27 -0
  29. messagefoundry-0.1.0/PKG-INFO +212 -0
  30. messagefoundry-0.1.0/README.md +174 -0
  31. messagefoundry-0.1.0/docs/AI.md +220 -0
  32. messagefoundry-0.1.0/docs/ARCHITECTURE.md +333 -0
  33. messagefoundry-0.1.0/docs/BACKLOG.md +1172 -0
  34. messagefoundry-0.1.0/docs/CLUSTERING.md +272 -0
  35. messagefoundry-0.1.0/docs/CONFIGURATION.md +756 -0
  36. messagefoundry-0.1.0/docs/CONNECTIONS.md +821 -0
  37. messagefoundry-0.1.0/docs/CONTRIBUTOR-FIRST-ISSUES.md +73 -0
  38. messagefoundry-0.1.0/docs/CONTRIBUTOR-PROGRAM-PLAN.md +282 -0
  39. messagefoundry-0.1.0/docs/DEPLOY-SERVER-DB.md +103 -0
  40. messagefoundry-0.1.0/docs/DEPLOYMENT.md +218 -0
  41. messagefoundry-0.1.0/docs/DUAL_LICENSING_PLAN.md +67 -0
  42. messagefoundry-0.1.0/docs/EARLY-ADOPTER-GUIDE.md +766 -0
  43. messagefoundry-0.1.0/docs/FEATURE-MAP.md +201 -0
  44. messagefoundry-0.1.0/docs/HL7-VALIDATION.md +115 -0
  45. messagefoundry-0.1.0/docs/INSTALL-GUIDE.md +307 -0
  46. messagefoundry-0.1.0/docs/LOAD-TESTING.md +261 -0
  47. messagefoundry-0.1.0/docs/PHI.md +539 -0
  48. messagefoundry-0.1.0/docs/SECURITY.md +539 -0
  49. messagefoundry-0.1.0/docs/SERVICE.md +256 -0
  50. messagefoundry-0.1.0/docs/SYSTEM-REQUIREMENTS.md +149 -0
  51. messagefoundry-0.1.0/docs/Secure_AI_Development_Standards.md +552 -0
  52. messagefoundry-0.1.0/docs/Secure_Development_Standards.md +403 -0
  53. messagefoundry-0.1.0/docs/TEE-RELAY.md +126 -0
  54. messagefoundry-0.1.0/docs/THROUGHPUT-IMPROVEMENTS.md +143 -0
  55. messagefoundry-0.1.0/docs/WORKTREES.md +97 -0
  56. messagefoundry-0.1.0/docs/adr/0001-staged-pipeline-architecture.md +227 -0
  57. messagefoundry-0.1.0/docs/adr/0002-phase2-transport-security-and-strong-auth.md +270 -0
  58. messagefoundry-0.1.0/docs/adr/0003-non-hl7-transports-database-rest-soap.md +185 -0
  59. messagefoundry-0.1.0/docs/adr/0004-payload-agnostic-ingress.md +156 -0
  60. messagefoundry-0.1.0/docs/adr/0005-transform-accessible-state.md +170 -0
  61. messagefoundry-0.1.0/docs/adr/0006-external-data-lookups.md +208 -0
  62. messagefoundry-0.1.0/docs/adr/0007-gui-manageable-connections-toml.md +160 -0
  63. messagefoundry-0.1.0/docs/adr/0008-cluster-observability-api.md +125 -0
  64. messagefoundry-0.1.0/docs/adr/0009-run-scoped-context-providers.md +91 -0
  65. messagefoundry-0.1.0/docs/adr/0010-handler-callable-db-lookup.md +90 -0
  66. messagefoundry-0.1.0/docs/adr/0011-timer-scheduled-source.md +116 -0
  67. messagefoundry-0.1.0/docs/adr/0012-x12-edi-codec.md +308 -0
  68. messagefoundry-0.1.0/docs/adr/0013-increment-2-reingress-design.md +927 -0
  69. messagefoundry-0.1.0/docs/adr/0013-query-response-orchestration.md +490 -0
  70. messagefoundry-0.1.0/docs/adr/0014-alerting-rules-engine.md +126 -0
  71. messagefoundry-0.1.0/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +445 -0
  72. messagefoundry-0.1.0/docs/adr/0016-synchronous-x12-request-response.md +500 -0
  73. messagefoundry-0.1.0/docs/adr/0017-consumer-deployment-model.md +217 -0
  74. messagefoundry-0.1.0/docs/adr/0018-per-message-signatures-accepted-risk.md +130 -0
  75. messagefoundry-0.1.0/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +418 -0
  76. messagefoundry-0.1.0/docs/adr/0020-protocol-diagnostic-capture.md +90 -0
  77. messagefoundry-0.1.0/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +86 -0
  78. messagefoundry-0.1.0/docs/adr/README.md +32 -0
  79. messagefoundry-0.1.0/docs/architecture-components.png +0 -0
  80. messagefoundry-0.1.0/docs/architecture-components.svg +1 -0
  81. messagefoundry-0.1.0/docs/architecture-config-graph.png +0 -0
  82. messagefoundry-0.1.0/docs/architecture-config-graph.svg +1 -0
  83. messagefoundry-0.1.0/docs/architecture-diagram.md +269 -0
  84. messagefoundry-0.1.0/docs/architecture-message-flow.png +0 -0
  85. messagefoundry-0.1.0/docs/architecture-message-flow.svg +1 -0
  86. messagefoundry-0.1.0/docs/architecture-topology.png +0 -0
  87. messagefoundry-0.1.0/docs/architecture-topology.svg +1 -0
  88. messagefoundry-0.1.0/docs/benchmarks/TUNING-BASELINE.md +164 -0
  89. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +14 -0
  90. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +83 -0
  91. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +83 -0
  92. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +235 -0
  93. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +235 -0
  94. messagefoundry-0.1.0/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +235 -0
  95. messagefoundry-0.1.0/docs/benchmarks/step-b-write-amplification.md +62 -0
  96. messagefoundry-0.1.0/docs/hl7-message-ordering-reference.md +86 -0
  97. messagefoundry-0.1.0/docs/message-ordering-design.md +209 -0
  98. messagefoundry-0.1.0/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +284 -0
  99. messagefoundry-0.1.0/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +373 -0
  100. messagefoundry-0.1.0/docs/releases/MULTISESSION-PLAN.md +275 -0
  101. messagefoundry-0.1.0/docs/releases/v0.1-EXECUTION-PLAN.md +336 -0
  102. messagefoundry-0.1.0/docs/releases/v0.1-PLAN.md +493 -0
  103. messagefoundry-0.1.0/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +55 -0
  104. messagefoundry-0.1.0/docs/reviews/FULL-REVIEW-2026-06-10.md +271 -0
  105. messagefoundry-0.1.0/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +887 -0
  106. messagefoundry-0.1.0/docs/security/ASVS-L2-PHASE0-CHANGES.md +189 -0
  107. messagefoundry-0.1.0/docs/security/ASVS-L2-REMEDIATION-PLAN.md +256 -0
  108. messagefoundry-0.1.0/docs/security/ASVS-L3-ASSESSMENT.md +942 -0
  109. messagefoundry-0.1.0/docs/security/ASVS-L3-REMEDIATION-PLAN.md +514 -0
  110. messagefoundry-0.1.0/docs/security/ASVS-L3-STATUS.md +131 -0
  111. messagefoundry-0.1.0/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +23 -0
  112. messagefoundry-0.1.0/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +31 -0
  113. messagefoundry-0.1.0/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +930 -0
  114. messagefoundry-0.1.0/docs/security/BEYOND-ASVS-L3.md +133 -0
  115. messagefoundry-0.1.0/docs/security/PHASE-8C-RBAC.md +111 -0
  116. messagefoundry-0.1.0/docs/security/PUBLISHING.md +126 -0
  117. messagefoundry-0.1.0/docs/security/RCA-TEMPLATE.md +60 -0
  118. messagefoundry-0.1.0/docs/security/RELEASE-GATE.md +90 -0
  119. messagefoundry-0.1.0/docs/security/REMEDIATION-PLAN.md +172 -0
  120. messagefoundry-0.1.0/docs/security/REVIEW-2026-06-07.md +521 -0
  121. messagefoundry-0.1.0/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +228 -0
  122. messagefoundry-0.1.0/docs/security/SDS-REMEDIATION-PLAN.md +93 -0
  123. messagefoundry-0.1.0/docs/security/THREAT-MODEL.md +152 -0
  124. messagefoundry-0.1.0/environments/dev.toml +23 -0
  125. messagefoundry-0.1.0/environments/prod.toml +24 -0
  126. messagefoundry-0.1.0/harness/README.md +101 -0
  127. messagefoundry-0.1.0/harness/__main__.py +293 -0
  128. messagefoundry-0.1.0/harness/compose.py +225 -0
  129. messagefoundry-0.1.0/harness/config/coverage.py +80 -0
  130. messagefoundry-0.1.0/harness/config/load/_shape.py +134 -0
  131. messagefoundry-0.1.0/harness/config/load/graph.py +90 -0
  132. messagefoundry-0.1.0/harness/file_panel.py +250 -0
  133. messagefoundry-0.1.0/harness/file_transport.py +165 -0
  134. messagefoundry-0.1.0/harness/load/__init__.py +17 -0
  135. messagefoundry-0.1.0/harness/load/corpus.py +146 -0
  136. messagefoundry-0.1.0/harness/load/correlator.py +73 -0
  137. messagefoundry-0.1.0/harness/load/enginepoll.py +162 -0
  138. messagefoundry-0.1.0/harness/load/failover.py +780 -0
  139. messagefoundry-0.1.0/harness/load/failover_track.py +106 -0
  140. messagefoundry-0.1.0/harness/load/governor.py +109 -0
  141. messagefoundry-0.1.0/harness/load/ids.py +42 -0
  142. messagefoundry-0.1.0/harness/load/metrics.py +219 -0
  143. messagefoundry-0.1.0/harness/load/profile.py +629 -0
  144. messagefoundry-0.1.0/harness/load/profiles/README.md +29 -0
  145. messagefoundry-0.1.0/harness/load/profiles/closed-loop.toml +100 -0
  146. messagefoundry-0.1.0/harness/load/profiles/failover.toml +55 -0
  147. messagefoundry-0.1.0/harness/load/profiles/fanout-baseline.toml +92 -0
  148. messagefoundry-0.1.0/harness/load/profiles/reference.toml +100 -0
  149. messagefoundry-0.1.0/harness/load/profiles/smoke-sqlserver.toml +42 -0
  150. messagefoundry-0.1.0/harness/load/profiles/smoke.toml +36 -0
  151. messagefoundry-0.1.0/harness/load/profiles/soak.toml +45 -0
  152. messagefoundry-0.1.0/harness/load/report.py +582 -0
  153. messagefoundry-0.1.0/harness/load/runner.py +166 -0
  154. messagefoundry-0.1.0/harness/load/sender.py +322 -0
  155. messagefoundry-0.1.0/harness/load/sink.py +136 -0
  156. messagefoundry-0.1.0/harness/mllp.py +271 -0
  157. messagefoundry-0.1.0/harness/monitor.py +547 -0
  158. messagefoundry-0.1.0/harness/receive.py +137 -0
  159. messagefoundry-0.1.0/harness/reconcile/__init__.py +49 -0
  160. messagefoundry-0.1.0/harness/reconcile/__main__.py +149 -0
  161. messagefoundry-0.1.0/harness/reconcile/capture.py +134 -0
  162. messagefoundry-0.1.0/harness/reconcile/compare.py +179 -0
  163. messagefoundry-0.1.0/harness/reconcile/normalize.py +234 -0
  164. messagefoundry-0.1.0/harness/reconcile/report.py +73 -0
  165. messagefoundry-0.1.0/harness/scenarios.py +195 -0
  166. messagefoundry-0.1.0/harness/send.py +175 -0
  167. messagefoundry-0.1.0/harness/window.py +52 -0
  168. messagefoundry-0.1.0/ide/.gitignore +5 -0
  169. messagefoundry-0.1.0/ide/.vscodeignore +8 -0
  170. messagefoundry-0.1.0/ide/README.md +135 -0
  171. messagefoundry-0.1.0/ide/esbuild.js +28 -0
  172. messagefoundry-0.1.0/ide/media/hl7schema.json +1 -0
  173. messagefoundry-0.1.0/ide/media/icon.png +0 -0
  174. messagefoundry-0.1.0/ide/media/icon.svg +6 -0
  175. messagefoundry-0.1.0/ide/package-lock.json +2234 -0
  176. messagefoundry-0.1.0/ide/package.json +268 -0
  177. messagefoundry-0.1.0/ide/snippets/messagefoundry.code-snippets +37 -0
  178. messagefoundry-0.1.0/ide/src/aiPolicy.ts +99 -0
  179. messagefoundry-0.1.0/ide/src/auth.ts +126 -0
  180. messagefoundry-0.1.0/ide/src/chat.ts +115 -0
  181. messagefoundry-0.1.0/ide/src/cli.ts +110 -0
  182. messagefoundry-0.1.0/ide/src/completion.ts +157 -0
  183. messagefoundry-0.1.0/ide/src/connectionEditor.ts +402 -0
  184. messagefoundry-0.1.0/ide/src/engineClient.ts +143 -0
  185. messagefoundry-0.1.0/ide/src/extension.ts +155 -0
  186. messagefoundry-0.1.0/ide/src/generate.ts +99 -0
  187. messagefoundry-0.1.0/ide/src/git.ts +70 -0
  188. messagefoundry-0.1.0/ide/src/graphTree.ts +215 -0
  189. messagefoundry-0.1.0/ide/src/home.ts +110 -0
  190. messagefoundry-0.1.0/ide/src/newRoute.ts +327 -0
  191. messagefoundry-0.1.0/ide/src/promote.ts +154 -0
  192. messagefoundry-0.1.0/ide/src/sourceControl.ts +352 -0
  193. messagefoundry-0.1.0/ide/src/test/runTest.ts +22 -0
  194. messagefoundry-0.1.0/ide/src/test/suite/extension.test.ts +54 -0
  195. messagefoundry-0.1.0/ide/src/test/suite/index.ts +31 -0
  196. messagefoundry-0.1.0/ide/src/testBench.ts +302 -0
  197. messagefoundry-0.1.0/ide/src/validate.ts +54 -0
  198. messagefoundry-0.1.0/ide/tsconfig.json +13 -0
  199. messagefoundry-0.1.0/ide/tsconfig.test.json +12 -0
  200. messagefoundry-0.1.0/mefor.code-workspace +6 -0
  201. messagefoundry-0.1.0/messagefoundry/__init__.py +108 -0
  202. messagefoundry-0.1.0/messagefoundry/__main__.py +1155 -0
  203. messagefoundry-0.1.0/messagefoundry/api/__init__.py +27 -0
  204. messagefoundry-0.1.0/messagefoundry/api/app.py +1581 -0
  205. messagefoundry-0.1.0/messagefoundry/api/approvals.py +184 -0
  206. messagefoundry-0.1.0/messagefoundry/api/auth_models.py +211 -0
  207. messagefoundry-0.1.0/messagefoundry/api/auth_routes.py +655 -0
  208. messagefoundry-0.1.0/messagefoundry/api/field_authz.py +96 -0
  209. messagefoundry-0.1.0/messagefoundry/api/models.py +374 -0
  210. messagefoundry-0.1.0/messagefoundry/api/security.py +247 -0
  211. messagefoundry-0.1.0/messagefoundry/api/tls.py +47 -0
  212. messagefoundry-0.1.0/messagefoundry/auth/__init__.py +39 -0
  213. messagefoundry-0.1.0/messagefoundry/auth/data/common_passwords.NOTICE +13 -0
  214. messagefoundry-0.1.0/messagefoundry/auth/data/common_passwords.txt +10000 -0
  215. messagefoundry-0.1.0/messagefoundry/auth/identity.py +71 -0
  216. messagefoundry-0.1.0/messagefoundry/auth/ldap.py +264 -0
  217. messagefoundry-0.1.0/messagefoundry/auth/notifications.py +68 -0
  218. messagefoundry-0.1.0/messagefoundry/auth/passwords.py +53 -0
  219. messagefoundry-0.1.0/messagefoundry/auth/permissions.py +120 -0
  220. messagefoundry-0.1.0/messagefoundry/auth/policy.py +153 -0
  221. messagefoundry-0.1.0/messagefoundry/auth/ratelimit.py +55 -0
  222. messagefoundry-0.1.0/messagefoundry/auth/service.py +1323 -0
  223. messagefoundry-0.1.0/messagefoundry/auth/tokens.py +26 -0
  224. messagefoundry-0.1.0/messagefoundry/auth/totp.py +174 -0
  225. messagefoundry-0.1.0/messagefoundry/checks.py +174 -0
  226. messagefoundry-0.1.0/messagefoundry/config/__init__.py +30 -0
  227. messagefoundry-0.1.0/messagefoundry/config/active_environment.py +80 -0
  228. messagefoundry-0.1.0/messagefoundry/config/ai_policy.py +140 -0
  229. messagefoundry-0.1.0/messagefoundry/config/code_sets.py +260 -0
  230. messagefoundry-0.1.0/messagefoundry/config/connections_edit.py +200 -0
  231. messagefoundry-0.1.0/messagefoundry/config/connections_file.py +287 -0
  232. messagefoundry-0.1.0/messagefoundry/config/db_lookup.py +117 -0
  233. messagefoundry-0.1.0/messagefoundry/config/environments.py +116 -0
  234. messagefoundry-0.1.0/messagefoundry/config/ingest_time.py +83 -0
  235. messagefoundry-0.1.0/messagefoundry/config/models.py +240 -0
  236. messagefoundry-0.1.0/messagefoundry/config/reference.py +158 -0
  237. messagefoundry-0.1.0/messagefoundry/config/response.py +83 -0
  238. messagefoundry-0.1.0/messagefoundry/config/run_context.py +153 -0
  239. messagefoundry-0.1.0/messagefoundry/config/settings.py +1311 -0
  240. messagefoundry-0.1.0/messagefoundry/config/state.py +99 -0
  241. messagefoundry-0.1.0/messagefoundry/config/tls_policy.py +110 -0
  242. messagefoundry-0.1.0/messagefoundry/config/wiring.py +1918 -0
  243. messagefoundry-0.1.0/messagefoundry/console/__init__.py +20 -0
  244. messagefoundry-0.1.0/messagefoundry/console/__main__.py +274 -0
  245. messagefoundry-0.1.0/messagefoundry/console/_async.py +107 -0
  246. messagefoundry-0.1.0/messagefoundry/console/change_password.py +111 -0
  247. messagefoundry-0.1.0/messagefoundry/console/client.py +552 -0
  248. messagefoundry-0.1.0/messagefoundry/console/connections.py +324 -0
  249. messagefoundry-0.1.0/messagefoundry/console/login.py +107 -0
  250. messagefoundry-0.1.0/messagefoundry/console/mfa.py +205 -0
  251. messagefoundry-0.1.0/messagefoundry/console/reauth.py +94 -0
  252. messagefoundry-0.1.0/messagefoundry/console/search.py +57 -0
  253. messagefoundry-0.1.0/messagefoundry/console/service_control.py +137 -0
  254. messagefoundry-0.1.0/messagefoundry/console/sessions.py +122 -0
  255. messagefoundry-0.1.0/messagefoundry/console/shell.py +410 -0
  256. messagefoundry-0.1.0/messagefoundry/console/status.py +377 -0
  257. messagefoundry-0.1.0/messagefoundry/console/users_page.py +282 -0
  258. messagefoundry-0.1.0/messagefoundry/console/widgets.py +553 -0
  259. messagefoundry-0.1.0/messagefoundry/generators/README.md +27 -0
  260. messagefoundry-0.1.0/messagefoundry/generators/__init__.py +15 -0
  261. messagefoundry-0.1.0/messagefoundry/generators/_core.py +589 -0
  262. messagefoundry-0.1.0/messagefoundry/generators/_hl7data.py +428 -0
  263. messagefoundry-0.1.0/messagefoundry/generators/adt.py +286 -0
  264. messagefoundry-0.1.0/messagefoundry/generators/all_types.py +24 -0
  265. messagefoundry-0.1.0/messagefoundry/generators/bar.py +28 -0
  266. messagefoundry-0.1.0/messagefoundry/generators/dft.py +20 -0
  267. messagefoundry-0.1.0/messagefoundry/generators/mdm.py +39 -0
  268. messagefoundry-0.1.0/messagefoundry/generators/mfn.py +46 -0
  269. messagefoundry-0.1.0/messagefoundry/generators/oml.py +32 -0
  270. messagefoundry-0.1.0/messagefoundry/generators/orl.py +30 -0
  271. messagefoundry-0.1.0/messagefoundry/generators/orm.py +23 -0
  272. messagefoundry-0.1.0/messagefoundry/generators/oru.py +21 -0
  273. messagefoundry-0.1.0/messagefoundry/generators/ras.py +20 -0
  274. messagefoundry-0.1.0/messagefoundry/generators/rde.py +54 -0
  275. messagefoundry-0.1.0/messagefoundry/generators/siu.py +64 -0
  276. messagefoundry-0.1.0/messagefoundry/generators/vxu.py +20 -0
  277. messagefoundry-0.1.0/messagefoundry/hl7schema.py +75 -0
  278. messagefoundry-0.1.0/messagefoundry/last_resort.py +55 -0
  279. messagefoundry-0.1.0/messagefoundry/logging_setup.py +332 -0
  280. messagefoundry-0.1.0/messagefoundry/parsing/__init__.py +64 -0
  281. messagefoundry-0.1.0/messagefoundry/parsing/consistency.py +166 -0
  282. messagefoundry-0.1.0/messagefoundry/parsing/groups.py +228 -0
  283. messagefoundry-0.1.0/messagefoundry/parsing/message.py +453 -0
  284. messagefoundry-0.1.0/messagefoundry/parsing/peek.py +237 -0
  285. messagefoundry-0.1.0/messagefoundry/parsing/split.py +120 -0
  286. messagefoundry-0.1.0/messagefoundry/parsing/summary.py +46 -0
  287. messagefoundry-0.1.0/messagefoundry/parsing/tree.py +128 -0
  288. messagefoundry-0.1.0/messagefoundry/parsing/validate.py +95 -0
  289. messagefoundry-0.1.0/messagefoundry/parsing/x12/__init__.py +46 -0
  290. messagefoundry-0.1.0/messagefoundry/parsing/x12/delimiters.py +140 -0
  291. messagefoundry-0.1.0/messagefoundry/parsing/x12/errors.py +30 -0
  292. messagefoundry-0.1.0/messagefoundry/parsing/x12/interchange.py +232 -0
  293. messagefoundry-0.1.0/messagefoundry/parsing/x12/message.py +200 -0
  294. messagefoundry-0.1.0/messagefoundry/parsing/x12/peek.py +207 -0
  295. messagefoundry-0.1.0/messagefoundry/pipeline/__init__.py +21 -0
  296. messagefoundry-0.1.0/messagefoundry/pipeline/alert_sinks.py +486 -0
  297. messagefoundry-0.1.0/messagefoundry/pipeline/alerts.py +100 -0
  298. messagefoundry-0.1.0/messagefoundry/pipeline/cert_expiry.py +219 -0
  299. messagefoundry-0.1.0/messagefoundry/pipeline/cluster.py +955 -0
  300. messagefoundry-0.1.0/messagefoundry/pipeline/cluster_sqlserver.py +444 -0
  301. messagefoundry-0.1.0/messagefoundry/pipeline/config_convergence.py +137 -0
  302. messagefoundry-0.1.0/messagefoundry/pipeline/dryrun.py +450 -0
  303. messagefoundry-0.1.0/messagefoundry/pipeline/engine.py +756 -0
  304. messagefoundry-0.1.0/messagefoundry/pipeline/leader_tasks.py +158 -0
  305. messagefoundry-0.1.0/messagefoundry/pipeline/reference_sync.py +369 -0
  306. messagefoundry-0.1.0/messagefoundry/pipeline/retention.py +289 -0
  307. messagefoundry-0.1.0/messagefoundry/pipeline/security_notify.py +168 -0
  308. messagefoundry-0.1.0/messagefoundry/pipeline/state_convergence.py +143 -0
  309. messagefoundry-0.1.0/messagefoundry/pipeline/wiring_runner.py +1722 -0
  310. messagefoundry-0.1.0/messagefoundry/py.typed +0 -0
  311. messagefoundry-0.1.0/messagefoundry/redaction.py +71 -0
  312. messagefoundry-0.1.0/messagefoundry/scaffold.py +321 -0
  313. messagefoundry-0.1.0/messagefoundry/secrets_dpapi.py +129 -0
  314. messagefoundry-0.1.0/messagefoundry/store/__init__.py +46 -0
  315. messagefoundry-0.1.0/messagefoundry/store/audit_tee.py +67 -0
  316. messagefoundry-0.1.0/messagefoundry/store/base.py +758 -0
  317. messagefoundry-0.1.0/messagefoundry/store/crypto.py +166 -0
  318. messagefoundry-0.1.0/messagefoundry/store/keyprovider.py +192 -0
  319. messagefoundry-0.1.0/messagefoundry/store/postgres.py +3447 -0
  320. messagefoundry-0.1.0/messagefoundry/store/sqlserver.py +3014 -0
  321. messagefoundry-0.1.0/messagefoundry/store/store.py +3790 -0
  322. messagefoundry-0.1.0/messagefoundry/timezone.py +207 -0
  323. messagefoundry-0.1.0/messagefoundry/transports/__init__.py +50 -0
  324. messagefoundry-0.1.0/messagefoundry/transports/base.py +269 -0
  325. messagefoundry-0.1.0/messagefoundry/transports/database.py +693 -0
  326. messagefoundry-0.1.0/messagefoundry/transports/file.py +551 -0
  327. messagefoundry-0.1.0/messagefoundry/transports/framing.py +164 -0
  328. messagefoundry-0.1.0/messagefoundry/transports/loopback.py +53 -0
  329. messagefoundry-0.1.0/messagefoundry/transports/mllp.py +644 -0
  330. messagefoundry-0.1.0/messagefoundry/transports/remotefile.py +664 -0
  331. messagefoundry-0.1.0/messagefoundry/transports/rest.py +281 -0
  332. messagefoundry-0.1.0/messagefoundry/transports/signing.py +321 -0
  333. messagefoundry-0.1.0/messagefoundry/transports/soap.py +507 -0
  334. messagefoundry-0.1.0/messagefoundry/transports/tcp.py +307 -0
  335. messagefoundry-0.1.0/messagefoundry/transports/timer.py +146 -0
  336. messagefoundry-0.1.0/messagefoundry/transports/x12.py +323 -0
  337. messagefoundry-0.1.0/pyproject.toml +85 -0
  338. messagefoundry-0.1.0/requirements.lock +1125 -0
  339. messagefoundry-0.1.0/samples/config/IB_ACME_ADT.py +29 -0
  340. messagefoundry-0.1.0/samples/config/IB_IMMUNIZATION_VXU.py +63 -0
  341. messagefoundry-0.1.0/samples/config/IB_PARTNER_X12.py +47 -0
  342. messagefoundry-0.1.0/samples/config/IB_RTE_ELIGIBILITY.py +87 -0
  343. messagefoundry-0.1.0/samples/config/adt.py +53 -0
  344. messagefoundry-0.1.0/samples/config/codesets/event_labels.csv +4 -0
  345. messagefoundry-0.1.0/samples/config/codesets/facility_mnemonics.toml +4 -0
  346. messagefoundry-0.1.0/samples/config/connections.toml +28 -0
  347. messagefoundry-0.1.0/samples/consistency/validated_adt.py +62 -0
  348. messagefoundry-0.1.0/samples/messages/adt_a01.hl7 +4 -0
  349. messagefoundry-0.1.0/samples/messages/adt_batch.hl7 +18 -0
  350. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/.gitattributes +5 -0
  351. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/README.md +39 -0
  352. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/adt_a01.txt +1 -0
  353. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/adt_a03.txt +5 -0
  354. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/batch_18_messages.txt +133 -0
  355. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +7 -0
  356. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/omd_o03.txt +1 -0
  357. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/omd_o03_rep.txt +1 -0
  358. messagefoundry-0.1.0/samples/messages/hapi-hl7v2/oml_o21.hl7 +1 -0
  359. messagefoundry-0.1.0/samples/messages/x12_270_eligibility.edi +1 -0
  360. messagefoundry-0.1.0/samples/results_relay/README.md +44 -0
  361. messagefoundry-0.1.0/samples/results_relay/codesets/test_codes.csv +4 -0
  362. messagefoundry-0.1.0/samples/results_relay/messages/oru_all_cancelled.hl7 +4 -0
  363. messagefoundry-0.1.0/samples/results_relay/messages/oru_results.hl7 +7 -0
  364. messagefoundry-0.1.0/samples/results_relay/results_relay.py +124 -0
  365. messagefoundry-0.1.0/samples/send_mllp.py +61 -0
  366. messagefoundry-0.1.0/scripts/dev/postgres.ps1 +60 -0
  367. messagefoundry-0.1.0/scripts/dev/sqlserver-docker.ps1 +184 -0
  368. messagefoundry-0.1.0/scripts/dev/sqlserver.ps1 +80 -0
  369. messagefoundry-0.1.0/scripts/hooks/block-blanket-git-stage.ps1 +53 -0
  370. messagefoundry-0.1.0/scripts/publish/publish-denylist.txt +33 -0
  371. messagefoundry-0.1.0/scripts/publish/publish.ps1 +232 -0
  372. messagefoundry-0.1.0/scripts/publish/scan_forbidden.py +234 -0
  373. messagefoundry-0.1.0/scripts/security/crypto_inventory_check.py +145 -0
  374. messagefoundry-0.1.0/scripts/service/install-service.ps1 +249 -0
  375. messagefoundry-0.1.0/scripts/service/uninstall-service.ps1 +55 -0
  376. messagefoundry-0.1.0/scripts/soak/store_soak.py +92 -0
  377. messagefoundry-0.1.0/scripts/trace_icon.py +128 -0
  378. messagefoundry-0.1.0/scripts/worktree/new.ps1 +131 -0
  379. messagefoundry-0.1.0/scripts/worktree/remove.ps1 +52 -0
  380. messagefoundry-0.1.0/scripts/worktree/session-context.ps1 +49 -0
  381. messagefoundry-0.1.0/scripts/worktree/spawn.ps1 +51 -0
  382. messagefoundry-0.1.0/tee/__init__.py +20 -0
  383. messagefoundry-0.1.0/tee/__main__.py +472 -0
  384. messagefoundry-0.1.0/tee/compare.py +152 -0
  385. messagefoundry-0.1.0/tee/correlate.py +286 -0
  386. messagefoundry-0.1.0/tee/hl7_fields.py +95 -0
  387. messagefoundry-0.1.0/tee/mefor_api.py +111 -0
  388. messagefoundry-0.1.0/tee/mllp.py +181 -0
  389. messagefoundry-0.1.0/tee/relay.py +503 -0
  390. messagefoundry-0.1.0/tee/report.py +80 -0
  391. messagefoundry-0.1.0/tee/store.py +382 -0
  392. messagefoundry-0.1.0/tests/_failover_load_support.py +126 -0
  393. messagefoundry-0.1.0/tests/conftest.py +41 -0
  394. messagefoundry-0.1.0/tests/test_active_environment.py +103 -0
  395. messagefoundry-0.1.0/tests/test_ad_group_scope.py +148 -0
  396. messagefoundry-0.1.0/tests/test_admin_new_ip.py +333 -0
  397. messagefoundry-0.1.0/tests/test_ai_policy.py +400 -0
  398. messagefoundry-0.1.0/tests/test_alert_rules.py +299 -0
  399. messagefoundry-0.1.0/tests/test_alert_sinks.py +216 -0
  400. messagefoundry-0.1.0/tests/test_api.py +681 -0
  401. messagefoundry-0.1.0/tests/test_api_auth.py +660 -0
  402. messagefoundry-0.1.0/tests/test_api_reload.py +198 -0
  403. messagefoundry-0.1.0/tests/test_api_tls.py +211 -0
  404. messagefoundry-0.1.0/tests/test_approvals.py +179 -0
  405. messagefoundry-0.1.0/tests/test_asvs_phase0.py +242 -0
  406. messagefoundry-0.1.0/tests/test_audit_integrity.py +104 -0
  407. messagefoundry-0.1.0/tests/test_audit_offbox_tee.py +176 -0
  408. messagefoundry-0.1.0/tests/test_auth_core.py +153 -0
  409. messagefoundry-0.1.0/tests/test_auth_entry_hardening.py +104 -0
  410. messagefoundry-0.1.0/tests/test_auth_hardening.py +524 -0
  411. messagefoundry-0.1.0/tests/test_auth_service.py +475 -0
  412. messagefoundry-0.1.0/tests/test_auth_session_lifecycle.py +190 -0
  413. messagefoundry-0.1.0/tests/test_auth_store.py +136 -0
  414. messagefoundry-0.1.0/tests/test_cert_expiry.py +254 -0
  415. messagefoundry-0.1.0/tests/test_channel_rbac.py +211 -0
  416. messagefoundry-0.1.0/tests/test_checks.py +274 -0
  417. messagefoundry-0.1.0/tests/test_cli.py +551 -0
  418. messagefoundry-0.1.0/tests/test_cluster.py +1051 -0
  419. messagefoundry-0.1.0/tests/test_cluster_failover_postgres.py +176 -0
  420. messagefoundry-0.1.0/tests/test_cluster_failover_sqlserver.py +176 -0
  421. messagefoundry-0.1.0/tests/test_cluster_graph_gating.py +292 -0
  422. messagefoundry-0.1.0/tests/test_cluster_lease.py +248 -0
  423. messagefoundry-0.1.0/tests/test_code_sets.py +306 -0
  424. messagefoundry-0.1.0/tests/test_connection_api.py +368 -0
  425. messagefoundry-0.1.0/tests/test_connections_cli.py +228 -0
  426. messagefoundry-0.1.0/tests/test_connections_file.py +311 -0
  427. messagefoundry-0.1.0/tests/test_consistency.py +125 -0
  428. messagefoundry-0.1.0/tests/test_console_auth.py +144 -0
  429. messagefoundry-0.1.0/tests/test_console_client.py +246 -0
  430. messagefoundry-0.1.0/tests/test_console_hardening.py +84 -0
  431. messagefoundry-0.1.0/tests/test_console_password.py +419 -0
  432. messagefoundry-0.1.0/tests/test_console_sessions.py +167 -0
  433. messagefoundry-0.1.0/tests/test_console_status.py +306 -0
  434. messagefoundry-0.1.0/tests/test_console_step_up.py +193 -0
  435. messagefoundry-0.1.0/tests/test_console_users.py +191 -0
  436. messagefoundry-0.1.0/tests/test_console_widgets.py +896 -0
  437. messagefoundry-0.1.0/tests/test_database_connector_integration.py +138 -0
  438. messagefoundry-0.1.0/tests/test_database_transport.py +646 -0
  439. messagefoundry-0.1.0/tests/test_db_lookup.py +250 -0
  440. messagefoundry-0.1.0/tests/test_delivery_settings.py +162 -0
  441. messagefoundry-0.1.0/tests/test_dependency_boundaries.py +54 -0
  442. messagefoundry-0.1.0/tests/test_dryrun.py +232 -0
  443. messagefoundry-0.1.0/tests/test_egress_allowlist.py +160 -0
  444. messagefoundry-0.1.0/tests/test_environments.py +326 -0
  445. messagefoundry-0.1.0/tests/test_field_authz.py +167 -0
  446. messagefoundry-0.1.0/tests/test_fifo_ordering.py +100 -0
  447. messagefoundry-0.1.0/tests/test_generate_cli.py +78 -0
  448. messagefoundry-0.1.0/tests/test_generated_adt.py +177 -0
  449. messagefoundry-0.1.0/tests/test_generators_core.py +57 -0
  450. messagefoundry-0.1.0/tests/test_generators_types.py +42 -0
  451. messagefoundry-0.1.0/tests/test_groups.py +267 -0
  452. messagefoundry-0.1.0/tests/test_harness.py +145 -0
  453. messagefoundry-0.1.0/tests/test_harness_compose.py +130 -0
  454. messagefoundry-0.1.0/tests/test_harness_config.py +72 -0
  455. messagefoundry-0.1.0/tests/test_harness_faults.py +113 -0
  456. messagefoundry-0.1.0/tests/test_harness_file.py +77 -0
  457. messagefoundry-0.1.0/tests/test_harness_monitor.py +172 -0
  458. messagefoundry-0.1.0/tests/test_harness_scenarios.py +177 -0
  459. messagefoundry-0.1.0/tests/test_hl7schema.py +48 -0
  460. messagefoundry-0.1.0/tests/test_inbound_bind.py +110 -0
  461. messagefoundry-0.1.0/tests/test_ingest_time.py +103 -0
  462. messagefoundry-0.1.0/tests/test_keyprovider.py +274 -0
  463. messagefoundry-0.1.0/tests/test_last_resort.py +104 -0
  464. messagefoundry-0.1.0/tests/test_leader_tasks.py +238 -0
  465. messagefoundry-0.1.0/tests/test_load_config.py +182 -0
  466. messagefoundry-0.1.0/tests/test_load_corpus.py +91 -0
  467. messagefoundry-0.1.0/tests/test_load_failover_postgres.py +74 -0
  468. messagefoundry-0.1.0/tests/test_load_failover_sqlserver.py +72 -0
  469. messagefoundry-0.1.0/tests/test_load_failover_unit.py +391 -0
  470. messagefoundry-0.1.0/tests/test_load_metrics.py +124 -0
  471. messagefoundry-0.1.0/tests/test_load_profile.py +202 -0
  472. messagefoundry-0.1.0/tests/test_load_report.py +240 -0
  473. messagefoundry-0.1.0/tests/test_load_runner.py +197 -0
  474. messagefoundry-0.1.0/tests/test_load_sender.py +130 -0
  475. messagefoundry-0.1.0/tests/test_load_sink.py +158 -0
  476. messagefoundry-0.1.0/tests/test_logging.py +421 -0
  477. messagefoundry-0.1.0/tests/test_message.py +363 -0
  478. messagefoundry-0.1.0/tests/test_message_split.py +316 -0
  479. messagefoundry-0.1.0/tests/test_mfa.py +281 -0
  480. messagefoundry-0.1.0/tests/test_mllp_encoding_override.py +240 -0
  481. messagefoundry-0.1.0/tests/test_mllp_tls.py +229 -0
  482. messagefoundry-0.1.0/tests/test_operability_config.py +382 -0
  483. messagefoundry-0.1.0/tests/test_outbound_signing.py +387 -0
  484. messagefoundry-0.1.0/tests/test_outbound_simulate.py +355 -0
  485. messagefoundry-0.1.0/tests/test_packaging.py +23 -0
  486. messagefoundry-0.1.0/tests/test_parse_tree.py +73 -0
  487. messagefoundry-0.1.0/tests/test_parsing.py +202 -0
  488. messagefoundry-0.1.0/tests/test_payload_agnostic_ingress.py +202 -0
  489. messagefoundry-0.1.0/tests/test_postgres_store.py +1550 -0
  490. messagefoundry-0.1.0/tests/test_reconcile_capture.py +118 -0
  491. messagefoundry-0.1.0/tests/test_reconcile_compare.py +102 -0
  492. messagefoundry-0.1.0/tests/test_reconcile_harness.py +128 -0
  493. messagefoundry-0.1.0/tests/test_redaction.py +72 -0
  494. messagefoundry-0.1.0/tests/test_reference_sets.py +538 -0
  495. messagefoundry-0.1.0/tests/test_reingress.py +510 -0
  496. messagefoundry-0.1.0/tests/test_remotefile_transport.py +702 -0
  497. messagefoundry-0.1.0/tests/test_response_capture.py +518 -0
  498. messagefoundry-0.1.0/tests/test_rest_transport.py +209 -0
  499. messagefoundry-0.1.0/tests/test_retention.py +395 -0
  500. messagefoundry-0.1.0/tests/test_run_context.py +103 -0
  501. messagefoundry-0.1.0/tests/test_scaffold.py +119 -0
  502. messagefoundry-0.1.0/tests/test_scan_forbidden.py +141 -0
  503. messagefoundry-0.1.0/tests/test_secrets_dpapi.py +101 -0
  504. messagefoundry-0.1.0/tests/test_security_notify.py +88 -0
  505. messagefoundry-0.1.0/tests/test_security_static.py +136 -0
  506. messagefoundry-0.1.0/tests/test_service_control.py +29 -0
  507. messagefoundry-0.1.0/tests/test_settings.py +567 -0
  508. messagefoundry-0.1.0/tests/test_soap_transport.py +206 -0
  509. messagefoundry-0.1.0/tests/test_soap_wssecurity.py +330 -0
  510. messagefoundry-0.1.0/tests/test_sqlserver_coordinator.py +180 -0
  511. messagefoundry-0.1.0/tests/test_sqlserver_store.py +961 -0
  512. messagefoundry-0.1.0/tests/test_staged_pipeline.py +968 -0
  513. messagefoundry-0.1.0/tests/test_step_up.py +206 -0
  514. messagefoundry-0.1.0/tests/test_store.py +566 -0
  515. messagefoundry-0.1.0/tests/test_store_backend.py +103 -0
  516. messagefoundry-0.1.0/tests/test_store_encryption.py +331 -0
  517. messagefoundry-0.1.0/tests/test_store_file_hardening.py +94 -0
  518. messagefoundry-0.1.0/tests/test_store_read_pool.py +145 -0
  519. messagefoundry-0.1.0/tests/test_summary.py +33 -0
  520. messagefoundry-0.1.0/tests/test_task_resilience.py +148 -0
  521. messagefoundry-0.1.0/tests/test_tcp_transport.py +341 -0
  522. messagefoundry-0.1.0/tests/test_tee_cli.py +203 -0
  523. messagefoundry-0.1.0/tests/test_tee_compare.py +78 -0
  524. messagefoundry-0.1.0/tests/test_tee_correlate.py +226 -0
  525. messagefoundry-0.1.0/tests/test_tee_hl7_fields.py +84 -0
  526. messagefoundry-0.1.0/tests/test_tee_mefor_api.py +107 -0
  527. messagefoundry-0.1.0/tests/test_tee_mllp.py +98 -0
  528. messagefoundry-0.1.0/tests/test_tee_relay.py +523 -0
  529. messagefoundry-0.1.0/tests/test_tee_report.py +86 -0
  530. messagefoundry-0.1.0/tests/test_tee_store.py +220 -0
  531. messagefoundry-0.1.0/tests/test_timer_source.py +285 -0
  532. messagefoundry-0.1.0/tests/test_timezone.py +140 -0
  533. messagefoundry-0.1.0/tests/test_tls_policy.py +101 -0
  534. messagefoundry-0.1.0/tests/test_totp.py +93 -0
  535. messagefoundry-0.1.0/tests/test_transform_state.py +528 -0
  536. messagefoundry-0.1.0/tests/test_transports.py +952 -0
  537. messagefoundry-0.1.0/tests/test_version.py +33 -0
  538. messagefoundry-0.1.0/tests/test_wiring.py +303 -0
  539. messagefoundry-0.1.0/tests/test_wiring_engine.py +1066 -0
  540. messagefoundry-0.1.0/tests/test_wiring_reload.py +516 -0
  541. messagefoundry-0.1.0/tests/test_wiring_serve.py +102 -0
  542. messagefoundry-0.1.0/tests/test_x12_parsing.py +462 -0
  543. messagefoundry-0.1.0/tests/test_x12_rte.py +212 -0
  544. messagefoundry-0.1.0/tests/test_x12_transport.py +379 -0
  545. messagefoundry-0.1.0/uv.lock +1664 -0
@@ -0,0 +1,81 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "PowerShell($env:QT_QPA_PLATFORM=\"offscreen\"; .venv\\\\Scripts\\\\python.exe -m pytest -q 2>&1 | Select-Object -Last 10)",
5
+ "PowerShell(git checkout main 2>&1)",
6
+ "PowerShell(git pull --ff-only 2>&1)",
7
+ "PowerShell(git switch -c logsearch-columns 2>&1)",
8
+ "PowerShell(.venv\\\\Scripts\\\\ruff.exe format messagefoundry tests 2>&1)",
9
+ "PowerShell(.venv\\\\Scripts\\\\ruff.exe check messagefoundry tests 2>&1)",
10
+ "PowerShell(.venv\\\\Scripts\\\\mypy.exe messagefoundry 2>&1)",
11
+ "PowerShell(\"--- check ---\")",
12
+ "PowerShell(\"--- mypy ---\")",
13
+ "PowerShell($env:QT_QPA_PLATFORM=\"offscreen\"; .venv\\\\Scripts\\\\python.exe -m pytest -q 2>&1 | Select-Object -Last 8)",
14
+ "PowerShell($env:QT_QPA_PLATFORM=\"offscreen\"; .venv\\\\Scripts\\\\ruff.exe format messagefoundry tests 2>&1 | Select-Object -Last 1; .venv\\\\Scripts\\\\ruff.exe check messagefoundry tests 2>&1 | Select-Object -Last 2; .venv\\\\Scripts\\\\mypy.exe messagefoundry 2>&1 | Select-Object -Last 2; .venv\\\\Scripts\\\\python.exe -m pytest -q 2>&1 | Select-Object -Last 4)"
15
+ ],
16
+ "deny": [
17
+ "Read(./.env)",
18
+ "Read(./.env.*)",
19
+ "Read(./secrets/**)",
20
+ "Read(./*.key)",
21
+ "Read(./*.pem)",
22
+ "Read(./*.pfx)",
23
+ "Read(./*.db)",
24
+ "Read(./*.db-wal)",
25
+ "Read(./*.db-shm)",
26
+ "Read(./bootstrap-admin.txt)",
27
+ "Edit(./.env)",
28
+ "Edit(./.env.*)",
29
+ "Edit(./secrets/**)",
30
+ "Edit(./*.db)",
31
+ "Write(./.env)",
32
+ "Write(./secrets/**)",
33
+ "Bash(rm -rf:*)",
34
+ "Bash(git push --force:*)",
35
+ "Bash(git push -f:*)",
36
+ "Bash(git reset --hard:*)",
37
+ "PowerShell(Remove-Item -Recurse -Force:*)",
38
+ "PowerShell(git push --force:*)",
39
+ "PowerShell(git push -f:*)",
40
+ "PowerShell(git reset --hard:*)"
41
+ ]
42
+ },
43
+ "hooks": {
44
+ "PreToolUse": [
45
+ {
46
+ "matcher": "Bash",
47
+ "hooks": [
48
+ {
49
+ "type": "command",
50
+ "if": "Bash(git *)",
51
+ "command": "pwsh -NoProfile -File scripts/hooks/block-blanket-git-stage.ps1",
52
+ "timeout": 20,
53
+ "statusMessage": "Checking git staging"
54
+ }
55
+ ]
56
+ },
57
+ {
58
+ "matcher": "PowerShell",
59
+ "hooks": [
60
+ {
61
+ "type": "command",
62
+ "if": "PowerShell(git *)",
63
+ "command": "pwsh -NoProfile -File scripts/hooks/block-blanket-git-stage.ps1",
64
+ "timeout": 20,
65
+ "statusMessage": "Checking git staging"
66
+ }
67
+ ]
68
+ }
69
+ ],
70
+ "SessionStart": [
71
+ {
72
+ "hooks": [
73
+ {
74
+ "type": "command",
75
+ "command": "pwsh -NoProfile -File scripts/worktree/session-context.ps1"
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ }
81
+ }
@@ -0,0 +1,4 @@
1
+ # Keep the dependency lockfiles LF on every platform so the CI sync-check (`uv export` +
2
+ # `git diff --exit-code`) can't be tripped by Windows CRLF drift (DEP-1).
3
+ uv.lock text eol=lf
4
+ requirements.lock text eol=lf
@@ -0,0 +1,19 @@
1
+ # Code owners for MessageFoundry.
2
+ # Listed owners are auto-requested for review when matching paths change.
3
+ # See GOVERNANCE.md and MAINTAINERS.md for the roles behind these assignments.
4
+
5
+ # Default owner for everything in the repo.
6
+ * @wshallwshall
7
+
8
+ # --- Sensitive subsystems: steward review required even after more maintainers join ---
9
+ /messagefoundry/auth/ @wshallwshall
10
+ /messagefoundry/store/ @wshallwshall
11
+ /messagefoundry/transports/ @wshallwshall
12
+ /messagefoundry/api/security.py @wshallwshall
13
+
14
+ # Security, licensing, and the public-mirror publish/scan tooling.
15
+ /docs/SECURITY.md @wshallwshall
16
+ /docs/Secure_Development_Standards.md @wshallwshall
17
+ /scripts/publish/ @wshallwshall
18
+ /CLA.md @wshallwshall
19
+ /LICENSE @wshallwshall
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a problem with the MessageFoundry engine, console, or IDE tooling
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ > ⚠️ **Never paste real PHI / patient data.** MessageFoundry processes HL7 in real
10
+ > deployments — use **synthetic** messages only (`messagefoundry generate ...`) and redact
11
+ > any IPs, hostnames, partner names, or message bodies before sharing. Security
12
+ > vulnerabilities should be reported privately, not here — see
13
+ > [SECURITY.md](../SECURITY.md).
14
+
15
+ **Describe the bug**
16
+ A clear and concise description of what the bug is.
17
+
18
+ **To reproduce**
19
+ Steps to reproduce the behavior — include the relevant config (Connection/Router/Handler) and a
20
+ **synthetic** sample message where applicable:
21
+ 1. Configure '...'
22
+ 2. Send / poll '...'
23
+ 3. Observe '...'
24
+
25
+ **Expected behavior**
26
+ What you expected to happen.
27
+
28
+ **Actual behavior / logs**
29
+ What happened instead. Include the relevant log lines or stack trace (redact PHI and any
30
+ host/partner identifiers).
31
+
32
+ **Environment**
33
+ - MessageFoundry version: <!-- `messagefoundry --version` -->
34
+ - OS: <!-- e.g. Windows Server 2022 / Ubuntu 24.04 -->
35
+ - Python version: <!-- `python --version` -->
36
+ - Store backend: <!-- SQLite (default) / SQL Server (experimental) -->
37
+ - Component: <!-- engine / console / IDE extension -->
38
+ - Transport(s) involved: <!-- MLLP / file / database / REST / SOAP -->
39
+
40
+ **Additional context**
41
+ Anything else that helps — message type/trigger, whether it's reproducible, recent changes, etc.
@@ -0,0 +1,7 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Report a security vulnerability
4
+ url: https://github.com/wshallwshall/MessageFoundry/security/advisories/new
5
+ about: >-
6
+ Please report security issues PRIVATELY via a GitHub security advisory, not as a
7
+ public issue. See SECURITY.md for the disclosure policy and response timeline.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea or enhancement for MessageFoundry
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ **Is your feature request related to a problem? Please describe.**
10
+ A clear and concise description of the problem. Ex. "When migrating from <engine> I need [...]"
11
+
12
+ **Describe the solution you'd like**
13
+ What you want to happen. If it's a new connector/transport, transform capability, or console/IDE
14
+ feature, say so.
15
+
16
+ **Area**
17
+ Which part of the system does this touch?
18
+ <!-- Connection/transport · Router/Handler · message store · API · console · IDE extension · docs -->
19
+
20
+ **Describe alternatives you've considered**
21
+ Any alternative solutions or workarounds you've considered.
22
+
23
+ **Additional context**
24
+ Add any other context, examples, or references (e.g. how Mirth/Corepoint/Rhapsody handle it).
@@ -0,0 +1,29 @@
1
+ <!-- Thanks for contributing to MessageFoundry! Please read CONTRIBUTING.md and GOVERNANCE.md first. -->
2
+
3
+ ## What this changes
4
+
5
+ <!-- A short description of the change and the motivation. Link any related issue or ADR. -->
6
+
7
+ Closes #
8
+
9
+ ## Type of change
10
+
11
+ - [ ] Bug fix (a test reproducing the bug is included)
12
+ - [ ] New Connection/transport or example Router/Handler
13
+ - [ ] Documentation
14
+ - [ ] Refactor / internal change
15
+ - [ ] Architecture change (an ADR under `docs/adr/` is included or linked)
16
+
17
+ ## Checklist
18
+
19
+ - [ ] I have read [CONTRIBUTING.md](../CONTRIBUTING.md) and will agree to the [CLA](../CLA.md) (the bot records it).
20
+ - [ ] If this touches the reliability invariants, store/queue, staged pipeline, auth/RBAC, or the
21
+ code-first graph model, I **discussed it first** via an issue/ADR (see [GOVERNANCE.md](../GOVERNANCE.md)).
22
+ - [ ] **No real PHI or customer data** anywhere in the diff, tests, fixtures, screenshots, or commit
23
+ messages — synthetic HL7 only (`python -m messagefoundry generate`).
24
+ - [ ] Tests added/updated for new behavior.
25
+ - [ ] Gates pass locally: `ruff check .`, `ruff format --check .`, `mypy messagefoundry`, and
26
+ `pytest -q` (`QT_QPA_PLATFORM=offscreen` for console tests). `python -m messagefoundry check` is green.
27
+ - [ ] Uses **Connection / Router / Handler** vocabulary; no new declarative "channel" element; no
28
+ GUI/web-framework imports in the engine packages; no Black.
29
+ - [ ] Docs updated if behavior or configuration changed.
@@ -0,0 +1,50 @@
1
+ # Security Policy
2
+
3
+ MessageFoundry is an HL7 v2.x integration engine that handles **PHI**. We take security
4
+ reports seriously and appreciate responsible disclosure.
5
+
6
+ ## Supported versions
7
+
8
+ The project is pre-1.0 and evolving rapidly; only the latest `main` is supported. Please
9
+ verify a report against current `main` before filing.
10
+
11
+ ## Reporting a vulnerability
12
+
13
+ **Do not open a public issue for a vulnerability.** Instead, report it privately:
14
+
15
+ - Preferred: open a [GitHub private security advisory](https://github.com/wshallwshall/MessageFoundry/security/advisories/new)
16
+ ("Report a vulnerability"), or
17
+ - Email the maintainer at the address on the GitHub profile.
18
+
19
+ Please include: affected component (e.g. MLLP/file transport, store, API/auth, console),
20
+ a description and impact, and reproduction steps or a proof of concept. Do **not** include
21
+ real PHI — use synthetic HL7 (the `messagefoundry generate` corpus is ideal).
22
+
23
+ We aim to acknowledge within a few business days and credit reporters who wish to be named once a
24
+ fix is released.
25
+
26
+ ## Response & remediation timeline
27
+
28
+ After we acknowledge a report, we triage it by severity and target these remediation windows
29
+ (measured from triage; fixes are verified before a report is closed):
30
+
31
+ | Severity | Target to remediate |
32
+ |---|---|
33
+ | Critical | ≤ 7 days |
34
+ | High | ≤ 30 days |
35
+ | Medium | ≤ 90 days |
36
+ | Low | Best-effort |
37
+
38
+ **Coordinated disclosure.** We practice coordinated disclosure: we ask that you give us a reasonable
39
+ window to ship a fix before any public detail, and we publish details (and credit, if wanted) **once
40
+ a fix is available**. We'll keep you updated on progress and agree the disclosure timing with you.
41
+ These windows trace to the project's Secure Development Standards (§4.4 RV.2, Appendix A.5).
42
+
43
+ ## Scope notes
44
+
45
+ - The engine binds `127.0.0.1` by default and requires authentication; the documented threat
46
+ model and current posture live in [`docs/SECURITY.md`](../docs/SECURITY.md). Findings are
47
+ rated both for today's localhost posture and for a future network-exposed deployment.
48
+ - Configuration is **executed Python** (Routers/Handlers) from an admin-owned config directory;
49
+ the ability of a config author to run code in-process is by design, not a vulnerability — see
50
+ `docs/SECURITY.md` and `docs/SERVICE.md` for the trust boundary and required directory ACLs.
@@ -0,0 +1,17 @@
1
+ # Dependabot: surface vulnerable / outdated dependencies and CI actions as PRs (CI-1 / DEP-1).
2
+ # Until a committed lockfile lands, this is the primary signal for a known-CVE dependency.
3
+ version: 2
4
+ updates:
5
+ - package-ecosystem: "pip"
6
+ directory: "/"
7
+ schedule:
8
+ interval: "weekly"
9
+ open-pull-requests-limit: 10
10
+ groups:
11
+ python-deps:
12
+ patterns: ["*"]
13
+
14
+ - package-ecosystem: "github-actions"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
@@ -0,0 +1,217 @@
1
+ # Throughput baseline (Gate #3 / WS-D) — on-demand only. Runs the reference sustainable-rate steps (the
2
+ # open-loop end-to-end throughput finder) on each store backend, plus the active-passive failover profile on
3
+ # the server-DB backends, on CI Linux + Docker PG/SQL Server containers (the reference config the
4
+ # TUNING-BASELINE doc names). Each job uploads its METRICS-ONLY report JSON (no message bodies / control
5
+ # ids — passes the publish forbidden-content guard); the numbers are transcribed into
6
+ # docs/benchmarks/TUNING-BASELINE.md + committed under docs/benchmarks/results/.
7
+ #
8
+ # Manual: `gh workflow run benchmark.yml --ref <branch>` (heavy + container-bound, so never on push/PR).
9
+ name: throughput-baseline
10
+
11
+ on:
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ env:
18
+ # A modest, documented fan-out for the reference run (each inbound → a couple of outbound deliveries),
19
+ # so the run characterizes a fan-out estate without the co-located DB container being swamped (the
20
+ # delivery path — a fresh connection per delivery + a server-DB round-trip per stage — is the ceiling).
21
+ MEFOR_LOAD_FANOUT: "2"
22
+ MEFOR_LOAD_RESULTS_FANOUT: "1"
23
+ MEFOR_LOAD_TRANSFORM: edit
24
+
25
+ jobs:
26
+ baseline-sqlite:
27
+ name: baseline (sqlite)
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
31
+ - name: Set up Python
32
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
33
+ with:
34
+ python-version: "3.13"
35
+ - name: Install project (dev)
36
+ run: |
37
+ python -m pip install --upgrade pip
38
+ pip install -e ".[dev]"
39
+ - name: Environment stamp
40
+ run: |
41
+ mkdir -p out/load
42
+ { echo "## sqlite"; uname -a; python --version; python -c "import sqlite3,sys; print('sqlite', sqlite3.sqlite_version)"; git rev-parse HEAD; } | tee out/load/env-sqlite.txt
43
+ - name: Serve (SQLite) + reference rate-steps
44
+ env:
45
+ MEFOR_AUTH_ENABLED: "false"
46
+ MEFOR_LOAD_SINK_PORT: "2700"
47
+ run: |
48
+ set -o pipefail
49
+ python -m messagefoundry serve --config harness/config/load --env dev --db ./bench.db \
50
+ --host 127.0.0.1 --port 8765 > engine.log 2>&1 &
51
+ engine_pid=$!
52
+ for _ in $(seq 1 60); do curl -sf http://127.0.0.1:8765/health > /dev/null && break || sleep 0.5; done
53
+ set +e
54
+ python -m harness --load reference --engine http://127.0.0.1:8765 --sink-port 2700 \
55
+ --db-backend sqlite --report-json out/load/reference-sqlite.json --report-csv out/load/reference-sqlite.csv
56
+ set -e
57
+ kill "$engine_pid" 2>/dev/null || true
58
+ echo "===== engine log (tail) ====="; tail -40 engine.log || true
59
+ - name: Upload baseline report
60
+ if: always()
61
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
62
+ with:
63
+ name: baseline-sqlite
64
+ path: out/load/
65
+ if-no-files-found: ignore
66
+
67
+ baseline-postgres:
68
+ name: baseline (postgres)
69
+ runs-on: ubuntu-latest
70
+ services:
71
+ postgres:
72
+ image: postgres:16
73
+ env:
74
+ POSTGRES_PASSWORD: mefor
75
+ POSTGRES_DB: messagefoundry
76
+ ports:
77
+ - 5432:5432
78
+ options: >-
79
+ --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
80
+ env:
81
+ MEFOR_STORE_BACKEND: postgres
82
+ MEFOR_STORE_SERVER: localhost
83
+ MEFOR_STORE_PORT: "5432"
84
+ MEFOR_STORE_DATABASE: messagefoundry
85
+ MEFOR_STORE_USERNAME: postgres
86
+ MEFOR_STORE_PASSWORD: mefor
87
+ MEFOR_STORE_POOL_SIZE: "5"
88
+ MEFOR_STORE_ENCRYPT: "false" # plaintext to the container; the TLS-hardening guard needs the escape
89
+ MEFOR_ALLOW_INSECURE_TLS: "1"
90
+ steps:
91
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
92
+ - name: Set up Python
93
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
94
+ with:
95
+ python-version: "3.13"
96
+ - name: Install project (dev + postgres)
97
+ run: |
98
+ python -m pip install --upgrade pip
99
+ pip install -e ".[dev,postgres]"
100
+ - name: Environment stamp
101
+ run: |
102
+ mkdir -p out/load
103
+ { echo "## postgres"; uname -a; python --version; psql --version 2>/dev/null || echo "psql n/a"; git rev-parse HEAD; } | tee out/load/env-postgres.txt
104
+ - name: Serve (Postgres) + reference rate-steps
105
+ env:
106
+ MEFOR_AUTH_ENABLED: "false"
107
+ MEFOR_LOAD_SINK_PORT: "2700"
108
+ run: |
109
+ set -o pipefail
110
+ python -m messagefoundry serve --config harness/config/load --env dev \
111
+ --host 127.0.0.1 --port 8765 > engine.log 2>&1 &
112
+ engine_pid=$!
113
+ for _ in $(seq 1 60); do curl -sf http://127.0.0.1:8765/health > /dev/null && break || sleep 0.5; done
114
+ set +e
115
+ python -m harness --load reference --engine http://127.0.0.1:8765 --sink-port 2700 \
116
+ --db-backend postgres --report-json out/load/reference-postgres.json --report-csv out/load/reference-postgres.csv
117
+ set -e
118
+ kill "$engine_pid" 2>/dev/null || true
119
+ echo "===== engine log (tail) ====="; tail -40 engine.log || true
120
+ - name: Failover profile (two nodes, kill primary mid-load)
121
+ run: |
122
+ set +e
123
+ python -m harness --failover failover --db-backend postgres \
124
+ --report-json out/load/failover-postgres.json
125
+ echo "failover exit: $?"
126
+ set -e
127
+ - name: Upload baseline report
128
+ if: always()
129
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
130
+ with:
131
+ name: baseline-postgres
132
+ path: out/load/
133
+ if-no-files-found: ignore
134
+
135
+ baseline-sqlserver:
136
+ name: baseline (sqlserver)
137
+ runs-on: ubuntu-latest
138
+ services:
139
+ mssql:
140
+ image: mcr.microsoft.com/mssql/server:2022-latest
141
+ env:
142
+ ACCEPT_EULA: "Y"
143
+ MSSQL_SA_PASSWORD: "Str0ng_P@ssw0rd!"
144
+ ports:
145
+ - 1433:1433
146
+ env:
147
+ MEFOR_STORE_BACKEND: sqlserver
148
+ MEFOR_STORE_SERVER: localhost
149
+ MEFOR_STORE_PORT: "1433"
150
+ MEFOR_STORE_DATABASE: MessageFoundry
151
+ MEFOR_STORE_AUTH: sql
152
+ MEFOR_STORE_USERNAME: sa
153
+ MEFOR_STORE_PASSWORD: "Str0ng_P@ssw0rd!"
154
+ MEFOR_STORE_POOL_SIZE: "5"
155
+ MEFOR_STORE_TRUST_SERVER_CERTIFICATE: "true"
156
+ MEFOR_ALLOW_INSECURE_TLS: "1"
157
+ steps:
158
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
159
+ - name: Set up Python
160
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
161
+ with:
162
+ python-version: "3.13"
163
+ - name: Install Microsoft ODBC Driver 18 + sqlcmd
164
+ run: |
165
+ curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
166
+ | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null
167
+ curl -fsSL "https://packages.microsoft.com/config/ubuntu/$(. /etc/os-release; echo "$VERSION_ID")/prod.list" \
168
+ | sudo tee /etc/apt/sources.list.d/mssql-release.list > /dev/null
169
+ sudo apt-get update
170
+ sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev
171
+ - name: Wait for SQL Server and create the database (RCSI on)
172
+ run: |
173
+ sqlcmd=/opt/mssql-tools18/bin/sqlcmd
174
+ for i in $(seq 1 40); do
175
+ if "$sqlcmd" -S localhost -U sa -P 'Str0ng_P@ssw0rd!' -C -Q "SELECT 1" > /dev/null 2>&1; then echo "up"; break; fi
176
+ echo "waiting ($i)"; sleep 2
177
+ done
178
+ "$sqlcmd" -S localhost -U sa -P 'Str0ng_P@ssw0rd!' -C \
179
+ -Q "IF DB_ID('MessageFoundry') IS NULL CREATE DATABASE MessageFoundry; ALTER DATABASE MessageFoundry SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;"
180
+ - name: Install project (dev + sqlserver)
181
+ run: |
182
+ python -m pip install --upgrade pip
183
+ pip install -e ".[dev,sqlserver]"
184
+ - name: Environment stamp
185
+ run: |
186
+ mkdir -p out/load
187
+ { echo "## sqlserver"; uname -a; python --version; git rev-parse HEAD; } | tee out/load/env-sqlserver.txt
188
+ - name: Serve (SQL Server) + reference rate-steps
189
+ env:
190
+ MEFOR_AUTH_ENABLED: "false"
191
+ MEFOR_LOAD_SINK_PORT: "2700"
192
+ run: |
193
+ set -o pipefail
194
+ python -m messagefoundry serve --config harness/config/load --env dev \
195
+ --host 127.0.0.1 --port 8765 > engine.log 2>&1 &
196
+ engine_pid=$!
197
+ for _ in $(seq 1 60); do curl -sf http://127.0.0.1:8765/health > /dev/null && break || sleep 0.5; done
198
+ set +e
199
+ python -m harness --load reference --engine http://127.0.0.1:8765 --sink-port 2700 \
200
+ --db-backend sqlserver --report-json out/load/reference-sqlserver.json --report-csv out/load/reference-sqlserver.csv
201
+ set -e
202
+ kill "$engine_pid" 2>/dev/null || true
203
+ echo "===== engine log (tail) ====="; tail -40 engine.log || true
204
+ - name: Failover profile (two nodes, kill primary mid-load)
205
+ run: |
206
+ set +e
207
+ python -m harness --failover failover --db-backend sqlserver \
208
+ --report-json out/load/failover-sqlserver.json
209
+ echo "failover exit: $?"
210
+ set -e
211
+ - name: Upload baseline report
212
+ if: always()
213
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
214
+ with:
215
+ name: baseline-sqlserver
216
+ path: out/load/
217
+ if-no-files-found: ignore