messagefoundry 0.2.14__tar.gz → 0.3.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.
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/CHANGELOG.md +190 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/PKG-INFO +27 -19
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/README.md +17 -13
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/__init__.py +48 -1
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/__main__.py +1101 -42
- messagefoundry-0.3.0/messagefoundry/actions.py +315 -0
- messagefoundry-0.3.0/messagefoundry/api/_ui_seam.py +136 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/app.py +969 -63
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/auth_models.py +24 -1
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/auth_routes.py +234 -18
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/metrics.py +163 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/models.py +162 -1
- messagefoundry-0.3.0/messagefoundry/api/security.py +590 -0
- messagefoundry-0.3.0/messagefoundry/api/tls_client_cert.py +110 -0
- messagefoundry-0.3.0/messagefoundry/apiclient/__init__.py +18 -0
- {messagefoundry-0.2.14/messagefoundry/console → messagefoundry-0.3.0/messagefoundry/apiclient}/client.py +30 -5
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/ldap.py +74 -4
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/permissions.py +11 -1
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/service.py +536 -28
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/tokens.py +7 -0
- messagefoundry-0.3.0/messagefoundry/auth/webauthn.py +324 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/checks.py +323 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/ai_policy.py +10 -7
- messagefoundry-0.3.0/messagefoundry/config/code_sets.py +600 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/codeset_edit.py +115 -6
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/connections_edit.py +1 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/connections_file.py +30 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/fhir_lookup.py +27 -6
- messagefoundry-0.3.0/messagefoundry/config/graph.py +1193 -0
- messagefoundry-0.3.0/messagefoundry/config/impact.py +670 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/models.py +222 -1
- messagefoundry-0.3.0/messagefoundry/config/reachability.py +144 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/run_context.py +28 -0
- messagefoundry-0.3.0/messagefoundry/config/secretprovider.py +183 -0
- messagefoundry-0.3.0/messagefoundry/config/secretprovider_vault.py +132 -0
- messagefoundry-0.3.0/messagefoundry/config/send_snapshot.py +51 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/settings.py +851 -47
- messagefoundry-0.3.0/messagefoundry/config/tls_policy.py +769 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/wiring.py +587 -33
- messagefoundry-0.3.0/messagefoundry/corepoint_import.py +590 -0
- messagefoundry-0.3.0/messagefoundry/diagnostics.py +58 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/adt.py +5 -61
- messagefoundry-0.3.0/messagefoundry/hl7structures.py +229 -0
- messagefoundry-0.3.0/messagefoundry/lens.py +2993 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/logging_setup.py +109 -8
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/__init__.py +2 -1
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/_builtin_hl7.py +97 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/binary.py +210 -1
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/message.py +77 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/split.py +48 -1
- messagefoundry-0.3.0/messagefoundry/pipeline/_sandbox_worker.py +208 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/alert_sinks.py +63 -3
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/alerts.py +96 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/cluster.py +69 -8
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/cluster_sqlserver.py +53 -7
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/dr.py +218 -6
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/dryrun.py +288 -37
- messagefoundry-0.3.0/messagefoundry/pipeline/dryrun_trace.py +414 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/engine.py +381 -3
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/leader_tasks.py +8 -0
- messagefoundry-0.3.0/messagefoundry/pipeline/phase_timing.py +222 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/retention.py +60 -1
- messagefoundry-0.3.0/messagefoundry/pipeline/sandbox.py +383 -0
- messagefoundry-0.3.0/messagefoundry/pipeline/saturation.py +100 -0
- messagefoundry-0.3.0/messagefoundry/pipeline/secret_rotation.py +210 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/security_notify.py +16 -3
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/sharding.py +62 -6
- messagefoundry-0.3.0/messagefoundry/pipeline/stage_dispatcher.py +1088 -0
- messagefoundry-0.3.0/messagefoundry/pipeline/wiring_runner.py +5604 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/secrets_dpapi.py +1 -1
- messagefoundry-0.3.0/messagefoundry/service_status.py +90 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/__init__.py +4 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/base.py +418 -10
- messagefoundry-0.3.0/messagefoundry/store/crypto.py +484 -0
- messagefoundry-0.3.0/messagefoundry/store/keyprovider_vault.py +145 -0
- messagefoundry-0.3.0/messagefoundry/store/metadata.py +97 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/postgres.py +1677 -62
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/sqlserver.py +3233 -308
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/store.py +2143 -156
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/__init__.py +1 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/base.py +47 -5
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/database.py +243 -16
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/dicom.py +65 -10
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/dicomweb.py +40 -8
- messagefoundry-0.3.0/messagefoundry/transports/direct.py +373 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/email.py +22 -2
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/fhir.py +193 -40
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/file.py +59 -8
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/framing.py +7 -0
- messagefoundry-0.3.0/messagefoundry/transports/http_auth.py +418 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/mllp.py +598 -29
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/remotefile.py +183 -26
- messagefoundry-0.3.0/messagefoundry/transports/rest.py +737 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/smart.py +7 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/soap.py +138 -30
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/tcp.py +20 -2
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/x12.py +24 -3
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/checks.py +9 -6
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/pyproject.toml +59 -14
- messagefoundry-0.2.14/.claude/settings.json +0 -81
- messagefoundry-0.2.14/.dockerignore +0 -45
- messagefoundry-0.2.14/.gitattributes +0 -5
- messagefoundry-0.2.14/.github/CODEOWNERS +0 -19
- messagefoundry-0.2.14/.github/ISSUE_TEMPLATE/bug_report.md +0 -41
- messagefoundry-0.2.14/.github/ISSUE_TEMPLATE/config.yml +0 -7
- messagefoundry-0.2.14/.github/ISSUE_TEMPLATE/feature_request.md +0 -24
- messagefoundry-0.2.14/.github/PULL_REQUEST_TEMPLATE.md +0 -29
- messagefoundry-0.2.14/.github/SECURITY.md +0 -84
- messagefoundry-0.2.14/.github/dependabot.yml +0 -57
- messagefoundry-0.2.14/.github/workflows/benchmark.yml +0 -217
- messagefoundry-0.2.14/.github/workflows/ci.yml +0 -1044
- messagefoundry-0.2.14/.github/workflows/cla.yml +0 -47
- messagefoundry-0.2.14/.github/workflows/codeql.yml +0 -67
- messagefoundry-0.2.14/.github/workflows/dependabot-auto-merge.yml +0 -165
- messagefoundry-0.2.14/.github/workflows/dependabot-lock-resync.yml +0 -95
- messagefoundry-0.2.14/.github/workflows/freethread-smoke.yml +0 -95
- messagefoundry-0.2.14/.github/workflows/manifest-lint.yml +0 -114
- messagefoundry-0.2.14/.github/workflows/release-sync-check.yml +0 -44
- messagefoundry-0.2.14/.github/workflows/release.yml +0 -435
- messagefoundry-0.2.14/.github/workflows/scorecard.yml +0 -59
- messagefoundry-0.2.14/.github/workflows/security.yml +0 -279
- messagefoundry-0.2.14/.github/workflows/selfhosted-win2025-sql.yml +0 -85
- messagefoundry-0.2.14/.github/workflows/vuln-metrics.yml +0 -40
- messagefoundry-0.2.14/.github/zizmor.yml +0 -31
- messagefoundry-0.2.14/.gitleaks.toml +0 -14
- messagefoundry-0.2.14/.mefor-hooks/pre-commit +0 -25
- messagefoundry-0.2.14/.pre-commit-config.yaml +0 -49
- messagefoundry-0.2.14/.semgrep/messagefoundry.yml +0 -52
- messagefoundry-0.2.14/CLA.md +0 -74
- messagefoundry-0.2.14/CLAUDE.md +0 -434
- messagefoundry-0.2.14/CODE_OF_CONDUCT.md +0 -42
- messagefoundry-0.2.14/COMMERCIAL-LICENSE.md +0 -67
- messagefoundry-0.2.14/CONTRIBUTING.md +0 -83
- messagefoundry-0.2.14/GOVERNANCE.md +0 -73
- messagefoundry-0.2.14/MAINTAINERS.md +0 -32
- messagefoundry-0.2.14/docker/Dockerfile +0 -121
- messagefoundry-0.2.14/docker/README.md +0 -136
- messagefoundry-0.2.14/docker/compose.yaml +0 -201
- messagefoundry-0.2.14/docker/k8s/ha-postgres.yaml +0 -242
- messagefoundry-0.2.14/docker/k8s/secret.example.yaml +0 -37
- messagefoundry-0.2.14/docker/k8s/statefulset.yaml +0 -132
- messagefoundry-0.2.14/docker/locks/requirements-core.lock +0 -370
- messagefoundry-0.2.14/docker/locks/requirements-sqlserver.lock +0 -395
- messagefoundry-0.2.14/docker/secrets.env.example +0 -15
- messagefoundry-0.2.14/docker/smoke/Dockerfile +0 -20
- messagefoundry-0.2.14/docker/smoke/config/IB_Test_ADT.py +0 -29
- messagefoundry-0.2.14/docker/smoke/send_adt.py +0 -62
- messagefoundry-0.2.14/docs/ADOPTER-CI.md +0 -183
- messagefoundry-0.2.14/docs/AI.md +0 -221
- messagefoundry-0.2.14/docs/ANTIVIRUS-FIREWALL.md +0 -219
- messagefoundry-0.2.14/docs/ARCHITECTURE.md +0 -344
- messagefoundry-0.2.14/docs/BACKLOG.md +0 -3648
- messagefoundry-0.2.14/docs/BRAND.md +0 -103
- messagefoundry-0.2.14/docs/CI-QUALITY.md +0 -57
- messagefoundry-0.2.14/docs/CLOUD-DEPLOYMENT.md +0 -306
- messagefoundry-0.2.14/docs/CLOUD-PHI-HIPAA.md +0 -185
- messagefoundry-0.2.14/docs/CLUSTERING.md +0 -306
- messagefoundry-0.2.14/docs/CODESETS.md +0 -109
- messagefoundry-0.2.14/docs/CONFIGURATION.md +0 -839
- messagefoundry-0.2.14/docs/CONNECTIONS.md +0 -1284
- messagefoundry-0.2.14/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -349
- messagefoundry-0.2.14/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -73
- messagefoundry-0.2.14/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -282
- messagefoundry-0.2.14/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -268
- messagefoundry-0.2.14/docs/DEPLOY-SERVER-DB.md +0 -220
- messagefoundry-0.2.14/docs/DEPLOYMENT.md +0 -289
- messagefoundry-0.2.14/docs/DICOM.md +0 -141
- messagefoundry-0.2.14/docs/DUAL_LICENSING_PLAN.md +0 -67
- messagefoundry-0.2.14/docs/EARLY-ADOPTER-GUIDE.md +0 -854
- messagefoundry-0.2.14/docs/FEATURE-MAP.md +0 -218
- messagefoundry-0.2.14/docs/HL7-VALIDATION.md +0 -115
- messagefoundry-0.2.14/docs/INSTALL-GUIDE.md +0 -332
- messagefoundry-0.2.14/docs/LOAD-TESTING.md +0 -261
- messagefoundry-0.2.14/docs/MENTAL-MODEL.md +0 -494
- messagefoundry-0.2.14/docs/MessageFoundry-Mental-Model.docx +0 -0
- messagefoundry-0.2.14/docs/PHI.md +0 -662
- messagefoundry-0.2.14/docs/POSITIONING.md +0 -70
- messagefoundry-0.2.14/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -176
- messagefoundry-0.2.14/docs/REMOTE-CONSOLE.md +0 -125
- messagefoundry-0.2.14/docs/SECURITY-REMEDIATION-LEDGER.md +0 -84
- messagefoundry-0.2.14/docs/SECURITY.md +0 -551
- messagefoundry-0.2.14/docs/SERVICE.md +0 -328
- messagefoundry-0.2.14/docs/SUPPORT-POLICY.md +0 -39
- messagefoundry-0.2.14/docs/SYSTEM-REQUIREMENTS.md +0 -157
- messagefoundry-0.2.14/docs/Secure_AI_Development_Standards.md +0 -597
- messagefoundry-0.2.14/docs/Secure_Development_Standards.md +0 -498
- messagefoundry-0.2.14/docs/TEE-RELAY.md +0 -126
- messagefoundry-0.2.14/docs/THROUGHPUT-IMPROVEMENTS.md +0 -197
- messagefoundry-0.2.14/docs/THROUGHPUT.md +0 -304
- messagefoundry-0.2.14/docs/USER-GUIDE.md +0 -625
- messagefoundry-0.2.14/docs/WORKTREES.md +0 -97
- messagefoundry-0.2.14/docs/adr/0001-staged-pipeline-architecture.md +0 -250
- messagefoundry-0.2.14/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -270
- messagefoundry-0.2.14/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -185
- messagefoundry-0.2.14/docs/adr/0004-payload-agnostic-ingress.md +0 -161
- messagefoundry-0.2.14/docs/adr/0005-transform-accessible-state.md +0 -170
- messagefoundry-0.2.14/docs/adr/0006-external-data-lookups.md +0 -208
- messagefoundry-0.2.14/docs/adr/0007-gui-manageable-connections-toml.md +0 -160
- messagefoundry-0.2.14/docs/adr/0008-cluster-observability-api.md +0 -131
- messagefoundry-0.2.14/docs/adr/0009-run-scoped-context-providers.md +0 -91
- messagefoundry-0.2.14/docs/adr/0010-handler-callable-db-lookup.md +0 -90
- messagefoundry-0.2.14/docs/adr/0011-timer-scheduled-source.md +0 -116
- messagefoundry-0.2.14/docs/adr/0012-x12-edi-codec.md +0 -308
- messagefoundry-0.2.14/docs/adr/0013-increment-2-reingress-design.md +0 -931
- messagefoundry-0.2.14/docs/adr/0013-query-response-orchestration.md +0 -490
- messagefoundry-0.2.14/docs/adr/0014-alerting-rules-engine.md +0 -126
- messagefoundry-0.2.14/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -445
- messagefoundry-0.2.14/docs/adr/0016-synchronous-x12-request-response.md +0 -500
- messagefoundry-0.2.14/docs/adr/0017-consumer-deployment-model.md +0 -256
- messagefoundry-0.2.14/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -130
- messagefoundry-0.2.14/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +0 -430
- messagefoundry-0.2.14/docs/adr/0020-protocol-diagnostic-capture.md +0 -90
- messagefoundry-0.2.14/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -172
- messagefoundry-0.2.14/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -594
- messagefoundry-0.2.14/docs/adr/0023-inbound-http-listener.md +0 -326
- messagefoundry-0.2.14/docs/adr/0024-smart-backend-services-token-provider.md +0 -296
- messagefoundry-0.2.14/docs/adr/0025-dicom-codec-store-connectors.md +0 -835
- messagefoundry-0.2.14/docs/adr/0026-off-box-egress-update-check.md +0 -122
- messagefoundry-0.2.14/docs/adr/0027-per-connection-retention.md +0 -208
- messagefoundry-0.2.14/docs/adr/0028-base64-binary-carriage-codec.md +0 -174
- messagefoundry-0.2.14/docs/adr/0029-email-smtp-destination.md +0 -267
- messagefoundry-0.2.14/docs/adr/0030-anonymization-test-harness-tee.md +0 -399
- messagefoundry-0.2.14/docs/adr/0031-startup-connection-fault-isolation.md +0 -156
- messagefoundry-0.2.14/docs/adr/0032-console-desktop-launch.md +0 -347
- messagefoundry-0.2.14/docs/adr/0033-gui-manageable-code-sets.md +0 -212
- messagefoundry-0.2.14/docs/adr/0034-static-analysis-triage-policy-accepted-risk-register.md +0 -80
- messagefoundry-0.2.14/docs/adr/0035-ide-extension-workspace-trust-and-scope.md +0 -102
- messagefoundry-0.2.14/docs/adr/0036-windows-config-source-trust.md +0 -107
- messagefoundry-0.2.14/docs/adr/0037-multi-process-sharding-l3.md +0 -112
- messagefoundry-0.2.14/docs/adr/0038-internal-pass-through-connector.md +0 -111
- messagefoundry-0.2.14/docs/adr/0039-database-tier-sharding-l5.md +0 -110
- messagefoundry-0.2.14/docs/adr/0040-free-threaded-engine-support.md +0 -95
- messagefoundry-0.2.14/docs/adr/0041-load-path-attestation-and-change-attribution.md +0 -248
- messagefoundry-0.2.14/docs/adr/0042-embedded-document-pruning.md +0 -177
- messagefoundry-0.2.14/docs/adr/0043-fhir-read-lookup.md +0 -303
- messagefoundry-0.2.14/docs/adr/0044-operator-alert-state.md +0 -262
- messagefoundry-0.2.14/docs/adr/0045-custom-rbac-roles.md +0 -266
- messagefoundry-0.2.14/docs/adr/0046-message-content-search.md +0 -251
- messagefoundry-0.2.14/docs/adr/0047-cloud-kubernetes-ha-deployment-packaging.md +0 -325
- messagefoundry-0.2.14/docs/adr/0048-third-tier-disaster-recovery-standby.md +0 -648
- messagefoundry-0.2.14/docs/adr/0049-turnkey-dr-backup-restore-verify.md +0 -525
- messagefoundry-0.2.14/docs/adr/0050-single-project-root-config-anchoring.md +0 -404
- messagefoundry-0.2.14/docs/adr/0051-corepoint-throughput-parity-strategy.md +0 -183
- messagefoundry-0.2.14/docs/adr/0052-enterprise-scale-target.md +0 -101
- messagefoundry-0.2.14/docs/adr/0053-free-threaded-multicore-engine.md +0 -249
- messagefoundry-0.2.14/docs/adr/0054-low-allocation-builtins-hl7-parser.md +0 -221
- messagefoundry-0.2.14/docs/adr/0055-group-commit-durable-write.md +0 -152
- messagefoundry-0.2.14/docs/adr/0056-engine-managed-vip-failover.md +0 -643
- messagefoundry-0.2.14/docs/adr/0057-inline-step-a-fast-path.md +0 -184
- messagefoundry-0.2.14/docs/adr/0058-batch-claim-fifo-prefix.md +0 -251
- messagefoundry-0.2.14/docs/adr/0059-seq-only-fifo-ordering.md +0 -55
- messagefoundry-0.2.14/docs/adr/0060-rename-based-fifo-index-migration.md +0 -78
- messagefoundry-0.2.14/docs/adr/0061-per-lane-wake-events.md +0 -106
- messagefoundry-0.2.14/docs/adr/0062-default-store-pool-size.md +0 -137
- messagefoundry-0.2.14/docs/adr/0063-no-split-store-unified-store-for-sharding.md +0 -101
- messagefoundry-0.2.14/docs/adr/README.md +0 -74
- messagefoundry-0.2.14/docs/adr/TEMPLATE.md +0 -51
- messagefoundry-0.2.14/docs/architecture-components.png +0 -0
- messagefoundry-0.2.14/docs/architecture-components.svg +0 -1
- messagefoundry-0.2.14/docs/architecture-config-graph.png +0 -0
- messagefoundry-0.2.14/docs/architecture-config-graph.svg +0 -1
- messagefoundry-0.2.14/docs/architecture-diagram.md +0 -269
- messagefoundry-0.2.14/docs/architecture-message-flow.png +0 -0
- messagefoundry-0.2.14/docs/architecture-message-flow.svg +0 -1
- messagefoundry-0.2.14/docs/architecture-topology.png +0 -0
- messagefoundry-0.2.14/docs/architecture-topology.svg +0 -1
- messagefoundry-0.2.14/docs/benchmarks/TUNING-BASELINE.md +0 -207
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -14
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -83
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -83
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -235
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -235
- messagefoundry-0.2.14/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -235
- messagefoundry-0.2.14/docs/benchmarks/step-b-write-amplification.md +0 -76
- messagefoundry-0.2.14/docs/design/dbshard.md +0 -289
- messagefoundry-0.2.14/docs/design/freethread-spike.md +0 -177
- messagefoundry-0.2.14/docs/design/freethread.md +0 -253
- messagefoundry-0.2.14/docs/design/multiproc.md +0 -53
- messagefoundry-0.2.14/docs/hl7-message-ordering-reference.md +0 -86
- messagefoundry-0.2.14/docs/message-ordering-design.md +0 -209
- messagefoundry-0.2.14/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -284
- messagefoundry-0.2.14/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -373
- messagefoundry-0.2.14/docs/releases/DELTA-SECURITY-FIXES-MULTISESSION-PLAN.md +0 -197
- messagefoundry-0.2.14/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -178
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN-3.md +0 -348
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN-4.md +0 -167
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN-5.md +0 -453
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN-6.md +0 -258
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -526
- messagefoundry-0.2.14/docs/releases/MULTISESSION-PLAN.md +0 -275
- messagefoundry-0.2.14/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -145
- messagefoundry-0.2.14/docs/releases/V0.2-LANE-HANDOFFS.md +0 -116
- messagefoundry-0.2.14/docs/releases/v0.1-EXECUTION-PLAN.md +0 -343
- messagefoundry-0.2.14/docs/releases/v0.1-PLAN.md +0 -503
- messagefoundry-0.2.14/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -59
- messagefoundry-0.2.14/docs/research/cloud-deployment-research-2026-06.md +0 -137
- messagefoundry-0.2.14/docs/research/config-ux-review.md +0 -235
- messagefoundry-0.2.14/docs/research/non-hl7-transform-components.md +0 -275
- messagefoundry-0.2.14/docs/reviews/DELTA-REVIEW-2026-07-01.md +0 -262
- messagefoundry-0.2.14/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -175
- messagefoundry-0.2.14/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -271
- messagefoundry-0.2.14/docs/security/ADVISORY-PROCESS.md +0 -35
- messagefoundry-0.2.14/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -887
- messagefoundry-0.2.14/docs/security/ASVS-L2-PHASE0-CHANGES.md +0 -192
- messagefoundry-0.2.14/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -256
- messagefoundry-0.2.14/docs/security/ASVS-L3-ASSESSMENT.md +0 -942
- messagefoundry-0.2.14/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -514
- messagefoundry-0.2.14/docs/security/ASVS-L3-STATUS.md +0 -131
- messagefoundry-0.2.14/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -23
- messagefoundry-0.2.14/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -31
- messagefoundry-0.2.14/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +0 -930
- messagefoundry-0.2.14/docs/security/BEYOND-ASVS-L3.md +0 -133
- messagefoundry-0.2.14/docs/security/DEP-CVE-RUNBOOK.md +0 -96
- messagefoundry-0.2.14/docs/security/DEPENDENCY-METRICS.md +0 -47
- messagefoundry-0.2.14/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
- messagefoundry-0.2.14/docs/security/PHASE-8C-RBAC.md +0 -111
- messagefoundry-0.2.14/docs/security/PUBLISHING.md +0 -126
- messagefoundry-0.2.14/docs/security/RCA-TEMPLATE.md +0 -60
- messagefoundry-0.2.14/docs/security/RELEASE-GATE.md +0 -94
- messagefoundry-0.2.14/docs/security/REMEDIATION-PLAN.md +0 -172
- messagefoundry-0.2.14/docs/security/REVIEW-2026-06-07.md +0 -521
- messagefoundry-0.2.14/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -228
- messagefoundry-0.2.14/docs/security/SDS-REMEDIATION-PLAN.md +0 -93
- messagefoundry-0.2.14/docs/security/SECURITY-POSTURE.md +0 -164
- messagefoundry-0.2.14/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -133
- messagefoundry-0.2.14/docs/security/SOUP-REVIEW-2026-06-18.md +0 -82
- messagefoundry-0.2.14/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -231
- messagefoundry-0.2.14/docs/security/THREAT-MODEL.md +0 -156
- messagefoundry-0.2.14/docs/testing/VERIFY.md +0 -83
- messagefoundry-0.2.14/docs/testing/WIN2025-ACCEPTANCE.md +0 -73
- messagefoundry-0.2.14/docs/testing/WIN2025-TEST-MATRIX.md +0 -109
- messagefoundry-0.2.14/docs/testing/WIN2025-TEST-PLAN.md +0 -1550
- messagefoundry-0.2.14/docs/throughput-build-plan.md +0 -102
- messagefoundry-0.2.14/docs/throughput-roadmap.md +0 -361
- messagefoundry-0.2.14/environments/dev.toml +0 -32
- messagefoundry-0.2.14/environments/prod.toml +0 -33
- messagefoundry-0.2.14/harness/README.md +0 -101
- messagefoundry-0.2.14/harness/__main__.py +0 -517
- messagefoundry-0.2.14/harness/acceptance/__init__.py +0 -21
- messagefoundry-0.2.14/harness/acceptance/__main__.py +0 -93
- messagefoundry-0.2.14/harness/acceptance/matrix.py +0 -528
- messagefoundry-0.2.14/harness/acceptance/probes.py +0 -220
- messagefoundry-0.2.14/harness/acceptance/report.py +0 -147
- messagefoundry-0.2.14/harness/acceptance/runner.py +0 -176
- messagefoundry-0.2.14/harness/compose.py +0 -225
- messagefoundry-0.2.14/harness/config/connscale/__init__.py +0 -4
- messagefoundry-0.2.14/harness/config/connscale/_shape.py +0 -141
- messagefoundry-0.2.14/harness/config/connscale/gen_toml.py +0 -106
- messagefoundry-0.2.14/harness/config/connscale/graph.py +0 -94
- messagefoundry-0.2.14/harness/config/coverage.py +0 -80
- messagefoundry-0.2.14/harness/config/load/_shape.py +0 -155
- messagefoundry-0.2.14/harness/config/load/graph.py +0 -99
- messagefoundry-0.2.14/harness/config/passthrough/graph.py +0 -68
- messagefoundry-0.2.14/harness/config/store_once/graph.py +0 -73
- messagefoundry-0.2.14/harness/file_panel.py +0 -250
- messagefoundry-0.2.14/harness/file_transport.py +0 -165
- messagefoundry-0.2.14/harness/load/__init__.py +0 -17
- messagefoundry-0.2.14/harness/load/connscale/__init__.py +0 -14
- messagefoundry-0.2.14/harness/load/connscale/driver.py +0 -135
- messagefoundry-0.2.14/harness/load/connscale/probe.py +0 -113
- messagefoundry-0.2.14/harness/load/connscale/profile.py +0 -364
- messagefoundry-0.2.14/harness/load/connscale/report.py +0 -307
- messagefoundry-0.2.14/harness/load/connscale/runner.py +0 -657
- messagefoundry-0.2.14/harness/load/corpus.py +0 -176
- messagefoundry-0.2.14/harness/load/correlator.py +0 -73
- messagefoundry-0.2.14/harness/load/enginepoll.py +0 -384
- messagefoundry-0.2.14/harness/load/failover.py +0 -821
- messagefoundry-0.2.14/harness/load/failover_track.py +0 -143
- messagefoundry-0.2.14/harness/load/governor.py +0 -109
- messagefoundry-0.2.14/harness/load/ids.py +0 -42
- messagefoundry-0.2.14/harness/load/metrics.py +0 -219
- messagefoundry-0.2.14/harness/load/multishard.py +0 -753
- messagefoundry-0.2.14/harness/load/profile.py +0 -633
- messagefoundry-0.2.14/harness/load/profiles/README.md +0 -34
- messagefoundry-0.2.14/harness/load/profiles/adt-fanout-stress.toml +0 -116
- messagefoundry-0.2.14/harness/load/profiles/closed-loop.toml +0 -100
- messagefoundry-0.2.14/harness/load/profiles/connscale-smoke.toml +0 -31
- messagefoundry-0.2.14/harness/load/profiles/connscale.toml +0 -35
- messagefoundry-0.2.14/harness/load/profiles/failover.toml +0 -55
- messagefoundry-0.2.14/harness/load/profiles/fanout-baseline.toml +0 -92
- messagefoundry-0.2.14/harness/load/profiles/malformed-load.toml +0 -44
- messagefoundry-0.2.14/harness/load/profiles/reference.toml +0 -148
- messagefoundry-0.2.14/harness/load/profiles/smoke-sqlserver.toml +0 -42
- messagefoundry-0.2.14/harness/load/profiles/smoke.toml +0 -36
- messagefoundry-0.2.14/harness/load/profiles/soak.toml +0 -45
- messagefoundry-0.2.14/harness/load/profiles/spike-burst.toml +0 -50
- messagefoundry-0.2.14/harness/load/profiles/sustained-overload.toml +0 -51
- messagefoundry-0.2.14/harness/load/profiles/writeamp.toml +0 -41
- messagefoundry-0.2.14/harness/load/report.py +0 -647
- messagefoundry-0.2.14/harness/load/runner.py +0 -199
- messagefoundry-0.2.14/harness/load/sender.py +0 -322
- messagefoundry-0.2.14/harness/load/sink.py +0 -136
- messagefoundry-0.2.14/harness/mllp.py +0 -271
- messagefoundry-0.2.14/harness/monitor.py +0 -547
- messagefoundry-0.2.14/harness/receive.py +0 -137
- messagefoundry-0.2.14/harness/reconcile/__init__.py +0 -49
- messagefoundry-0.2.14/harness/reconcile/__main__.py +0 -149
- messagefoundry-0.2.14/harness/reconcile/capture.py +0 -150
- messagefoundry-0.2.14/harness/reconcile/compare.py +0 -179
- messagefoundry-0.2.14/harness/reconcile/normalize.py +0 -234
- messagefoundry-0.2.14/harness/reconcile/report.py +0 -73
- messagefoundry-0.2.14/harness/scenarios.py +0 -195
- messagefoundry-0.2.14/harness/send.py +0 -175
- messagefoundry-0.2.14/harness/window.py +0 -52
- messagefoundry-0.2.14/ide/.gitignore +0 -7
- messagefoundry-0.2.14/ide/.vscodeignore +0 -12
- messagefoundry-0.2.14/ide/README.md +0 -152
- messagefoundry-0.2.14/ide/esbuild.js +0 -28
- messagefoundry-0.2.14/ide/media/hl7schema.json +0 -1
- messagefoundry-0.2.14/ide/media/icon-amber.svg +0 -5
- messagefoundry-0.2.14/ide/media/icon.png +0 -0
- messagefoundry-0.2.14/ide/media/icon.svg +0 -6
- messagefoundry-0.2.14/ide/package-lock.json +0 -5685
- messagefoundry-0.2.14/ide/package.json +0 -433
- messagefoundry-0.2.14/ide/snippets/messagefoundry.code-snippets +0 -145
- messagefoundry-0.2.14/ide/src/aiPolicy.ts +0 -136
- messagefoundry-0.2.14/ide/src/alertEditor.ts +0 -329
- messagefoundry-0.2.14/ide/src/auth.ts +0 -134
- messagefoundry-0.2.14/ide/src/chat.ts +0 -167
- messagefoundry-0.2.14/ide/src/cli.ts +0 -248
- messagefoundry-0.2.14/ide/src/codeSetEditor.ts +0 -459
- messagefoundry-0.2.14/ide/src/codesetsTree.ts +0 -109
- messagefoundry-0.2.14/ide/src/completion.ts +0 -157
- messagefoundry-0.2.14/ide/src/connectionEditor.ts +0 -402
- messagefoundry-0.2.14/ide/src/editorToolbar.ts +0 -122
- messagefoundry-0.2.14/ide/src/engineClient.ts +0 -143
- messagefoundry-0.2.14/ide/src/engineTarget.ts +0 -44
- messagefoundry-0.2.14/ide/src/extension.ts +0 -248
- messagefoundry-0.2.14/ide/src/generate.ts +0 -99
- messagefoundry-0.2.14/ide/src/git.ts +0 -70
- messagefoundry-0.2.14/ide/src/graphTree.ts +0 -215
- messagefoundry-0.2.14/ide/src/home.ts +0 -132
- messagefoundry-0.2.14/ide/src/insertElement.ts +0 -78
- messagefoundry-0.2.14/ide/src/newRoute.ts +0 -327
- messagefoundry-0.2.14/ide/src/promote.ts +0 -196
- messagefoundry-0.2.14/ide/src/promoteTarget.ts +0 -55
- messagefoundry-0.2.14/ide/src/sourceControl.ts +0 -352
- messagefoundry-0.2.14/ide/src/test/runTest.ts +0 -22
- messagefoundry-0.2.14/ide/src/test/suite/ai-policy.test.ts +0 -65
- messagefoundry-0.2.14/ide/src/test/suite/chat.test.ts +0 -81
- messagefoundry-0.2.14/ide/src/test/suite/editor-toolbar.test.ts +0 -101
- messagefoundry-0.2.14/ide/src/test/suite/engine-target.test.ts +0 -43
- messagefoundry-0.2.14/ide/src/test/suite/extension.test.ts +0 -70
- messagefoundry-0.2.14/ide/src/test/suite/index.ts +0 -31
- messagefoundry-0.2.14/ide/src/test/suite/insert-element.test.ts +0 -83
- messagefoundry-0.2.14/ide/src/test/suite/promote-target.test.ts +0 -85
- messagefoundry-0.2.14/ide/src/test/suite/pythonpath.test.ts +0 -79
- messagefoundry-0.2.14/ide/src/test/suite/settings-scope.test.ts +0 -37
- messagefoundry-0.2.14/ide/src/testBench.ts +0 -310
- messagefoundry-0.2.14/ide/src/validate.ts +0 -54
- messagefoundry-0.2.14/ide/tsconfig.json +0 -13
- messagefoundry-0.2.14/ide/tsconfig.test.json +0 -12
- messagefoundry-0.2.14/mefor.code-workspace +0 -6
- messagefoundry-0.2.14/messagefoundry/api/security.py +0 -251
- messagefoundry-0.2.14/messagefoundry/config/code_sets.py +0 -260
- messagefoundry-0.2.14/messagefoundry/config/tls_policy.py +0 -110
- messagefoundry-0.2.14/messagefoundry/console/__init__.py +0 -35
- messagefoundry-0.2.14/messagefoundry/console/__main__.py +0 -361
- messagefoundry-0.2.14/messagefoundry/console/_async.py +0 -107
- messagefoundry-0.2.14/messagefoundry/console/alerts_page.py +0 -324
- messagefoundry-0.2.14/messagefoundry/console/change_password.py +0 -111
- messagefoundry-0.2.14/messagefoundry/console/connections.py +0 -395
- messagefoundry-0.2.14/messagefoundry/console/dead_letters_page.py +0 -232
- messagefoundry-0.2.14/messagefoundry/console/delegates.py +0 -69
- messagefoundry-0.2.14/messagefoundry/console/event_log_page.py +0 -143
- messagefoundry-0.2.14/messagefoundry/console/icons/alerts.svg +0 -4
- messagefoundry-0.2.14/messagefoundry/console/icons/connections.svg +0 -5
- messagefoundry-0.2.14/messagefoundry/console/icons/dead-letters.svg +0 -4
- messagefoundry-0.2.14/messagefoundry/console/icons/engine-status.svg +0 -3
- messagefoundry-0.2.14/messagefoundry/console/icons/log-search.svg +0 -4
- messagefoundry-0.2.14/messagefoundry/console/icons/logo-lockup.svg +0 -33
- messagefoundry-0.2.14/messagefoundry/console/icons/users.svg +0 -4
- messagefoundry-0.2.14/messagefoundry/console/login.py +0 -107
- messagefoundry-0.2.14/messagefoundry/console/mfa.py +0 -205
- messagefoundry-0.2.14/messagefoundry/console/reauth.py +0 -94
- messagefoundry-0.2.14/messagefoundry/console/resources/README.md +0 -23
- messagefoundry-0.2.14/messagefoundry/console/resources/app.ico +0 -0
- messagefoundry-0.2.14/messagefoundry/console/resources/app.svg +0 -8
- messagefoundry-0.2.14/messagefoundry/console/search.py +0 -57
- messagefoundry-0.2.14/messagefoundry/console/sessions.py +0 -122
- messagefoundry-0.2.14/messagefoundry/console/shards.py +0 -224
- messagefoundry-0.2.14/messagefoundry/console/shell.py +0 -706
- messagefoundry-0.2.14/messagefoundry/console/status.py +0 -388
- messagefoundry-0.2.14/messagefoundry/console/theme.py +0 -268
- messagefoundry-0.2.14/messagefoundry/console/users_page.py +0 -282
- messagefoundry-0.2.14/messagefoundry/console/widgets.py +0 -612
- messagefoundry-0.2.14/messagefoundry/pipeline/wiring_runner.py +0 -3192
- messagefoundry-0.2.14/messagefoundry/store/crypto.py +0 -271
- messagefoundry-0.2.14/messagefoundry/transports/rest.py +0 -317
- messagefoundry-0.2.14/packaging/console-installer/README.md +0 -126
- messagefoundry-0.2.14/packaging/console-installer/THIRD-PARTY-NOTICES.md +0 -102
- messagefoundry-0.2.14/packaging/console-installer/THIRD-PARTY-NOTICES.txt +0 -131
- messagefoundry-0.2.14/packaging/console-installer/console_launcher.py +0 -31
- messagefoundry-0.2.14/packaging/console-installer/licenses/GPL-3.0.txt +0 -674
- messagefoundry-0.2.14/packaging/console-installer/licenses/LGPL-3.0.txt +0 -165
- messagefoundry-0.2.14/packaging/console-installer/messagefoundry-console.iss +0 -120
- messagefoundry-0.2.14/packaging/console-installer/messagefoundry-console.spec +0 -188
- messagefoundry-0.2.14/packaging/messagefoundry-harness/README.md +0 -30
- messagefoundry-0.2.14/packaging/messagefoundry-harness/pyproject.toml +0 -54
- messagefoundry-0.2.14/requirements.lock +0 -963
- messagefoundry-0.2.14/samples/config/IB_ACME_ADT.py +0 -29
- messagefoundry-0.2.14/samples/config/IB_FHIR_INTAKE.py +0 -56
- messagefoundry-0.2.14/samples/config/IB_IMMUNIZATION_VXU.py +0 -63
- messagefoundry-0.2.14/samples/config/IB_PARTNER_X12.py +0 -47
- messagefoundry-0.2.14/samples/config/IB_RADIOLOGY_SR.py +0 -87
- messagefoundry-0.2.14/samples/config/IB_RTE_ELIGIBILITY.py +0 -87
- messagefoundry-0.2.14/samples/config/adt.py +0 -53
- messagefoundry-0.2.14/samples/config/codesets/event_labels.csv +0 -4
- messagefoundry-0.2.14/samples/config/codesets/facility_mnemonics.toml +0 -4
- messagefoundry-0.2.14/samples/config/connections.toml +0 -28
- messagefoundry-0.2.14/samples/consistency/validated_adt.py +0 -62
- messagefoundry-0.2.14/samples/dicom/generate_sr_sample.py +0 -118
- messagefoundry-0.2.14/samples/messages/adt_a01.hl7 +0 -4
- messagefoundry-0.2.14/samples/messages/adt_batch.hl7 +0 -18
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/.gitattributes +0 -5
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/README.md +0 -39
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/adt_a01.txt +0 -1
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/adt_a03.txt +0 -5
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -133
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -7
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/omd_o03.txt +0 -1
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -1
- messagefoundry-0.2.14/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -1
- messagefoundry-0.2.14/samples/messages/x12_270_eligibility.edi +0 -1
- messagefoundry-0.2.14/samples/results_relay/README.md +0 -44
- messagefoundry-0.2.14/samples/results_relay/codesets/test_codes.csv +0 -4
- messagefoundry-0.2.14/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -4
- messagefoundry-0.2.14/samples/results_relay/messages/oru_results.hl7 +0 -7
- messagefoundry-0.2.14/samples/results_relay/results_relay.py +0 -124
- messagefoundry-0.2.14/samples/send_mllp.py +0 -61
- messagefoundry-0.2.14/scripts/console/install-console-shortcut.ps1 +0 -134
- messagefoundry-0.2.14/scripts/console/pack_ico.py +0 -55
- messagefoundry-0.2.14/scripts/console/uninstall-console-shortcut.ps1 +0 -47
- messagefoundry-0.2.14/scripts/dev/postgres.ps1 +0 -60
- messagefoundry-0.2.14/scripts/dev/sqlserver-docker.ps1 +0 -191
- messagefoundry-0.2.14/scripts/dev/sqlserver.ps1 +0 -80
- messagefoundry-0.2.14/scripts/hooks/block-blanket-git-stage.ps1 +0 -53
- messagefoundry-0.2.14/scripts/publish/check_release_sync.py +0 -258
- messagefoundry-0.2.14/scripts/publish/publish-denylist.txt +0 -33
- messagefoundry-0.2.14/scripts/publish/publish.ps1 +0 -264
- messagefoundry-0.2.14/scripts/publish/scan_forbidden.py +0 -294
- messagefoundry-0.2.14/scripts/security/crypto_inventory_check.py +0 -188
- messagefoundry-0.2.14/scripts/security/vuln_metrics.py +0 -321
- messagefoundry-0.2.14/scripts/service/import-db-ca.ps1 +0 -97
- messagefoundry-0.2.14/scripts/service/install-service.ps1 +0 -296
- messagefoundry-0.2.14/scripts/service/uninstall-service.ps1 +0 -55
- messagefoundry-0.2.14/scripts/trace_icon.py +0 -128
- messagefoundry-0.2.14/scripts/worktree/new.ps1 +0 -131
- messagefoundry-0.2.14/scripts/worktree/remove.ps1 +0 -52
- messagefoundry-0.2.14/scripts/worktree/session-context.ps1 +0 -49
- messagefoundry-0.2.14/scripts/worktree/spawn.ps1 +0 -51
- messagefoundry-0.2.14/tee/__init__.py +0 -20
- messagefoundry-0.2.14/tee/__main__.py +0 -568
- messagefoundry-0.2.14/tee/anon/__init__.py +0 -80
- messagefoundry-0.2.14/tee/anon/_hl7data.py +0 -428
- messagefoundry-0.2.14/tee/anon/_pools.py +0 -30
- messagefoundry-0.2.14/tee/anon/hl7.py +0 -71
- messagefoundry-0.2.14/tee/anon/keying.py +0 -67
- messagefoundry-0.2.14/tee/anon/leak.py +0 -100
- messagefoundry-0.2.14/tee/anon/rules.py +0 -219
- messagefoundry-0.2.14/tee/anon/surrogates.py +0 -299
- messagefoundry-0.2.14/tee/compare.py +0 -152
- messagefoundry-0.2.14/tee/correlate.py +0 -286
- messagefoundry-0.2.14/tee/hl7_fields.py +0 -95
- messagefoundry-0.2.14/tee/mefor_api.py +0 -116
- messagefoundry-0.2.14/tee/mllp.py +0 -181
- messagefoundry-0.2.14/tee/relay.py +0 -530
- messagefoundry-0.2.14/tee/report.py +0 -80
- messagefoundry-0.2.14/tee/store.py +0 -382
- messagefoundry-0.2.14/tests/_dicom_sample.py +0 -85
- messagefoundry-0.2.14/tests/_failover_load_support.py +0 -126
- messagefoundry-0.2.14/tests/_fhir_fixtures.py +0 -77
- messagefoundry-0.2.14/tests/conftest.py +0 -199
- messagefoundry-0.2.14/tests/test_acceptance_framework.py +0 -144
- messagefoundry-0.2.14/tests/test_ack_capture_runner.py +0 -101
- messagefoundry-0.2.14/tests/test_ack_sent_store.py +0 -150
- messagefoundry-0.2.14/tests/test_active_environment.py +0 -103
- messagefoundry-0.2.14/tests/test_ad_group_scope.py +0 -148
- messagefoundry-0.2.14/tests/test_admin_new_ip.py +0 -333
- messagefoundry-0.2.14/tests/test_adr_analyze.py +0 -104
- messagefoundry-0.2.14/tests/test_ai_policy.py +0 -400
- messagefoundry-0.2.14/tests/test_alert_rules.py +0 -343
- messagefoundry-0.2.14/tests/test_alert_sinks.py +0 -243
- messagefoundry-0.2.14/tests/test_alert_state.py +0 -459
- messagefoundry-0.2.14/tests/test_alerts_edit.py +0 -146
- messagefoundry-0.2.14/tests/test_alerts_rules_api.py +0 -255
- messagefoundry-0.2.14/tests/test_anon_core.py +0 -262
- messagefoundry-0.2.14/tests/test_anon_integration.py +0 -189
- messagefoundry-0.2.14/tests/test_anon_parity.py +0 -133
- messagefoundry-0.2.14/tests/test_api.py +0 -749
- messagefoundry-0.2.14/tests/test_api_alerts.py +0 -247
- messagefoundry-0.2.14/tests/test_api_auth.py +0 -768
- messagefoundry-0.2.14/tests/test_api_reload.py +0 -219
- messagefoundry-0.2.14/tests/test_api_tls.py +0 -211
- messagefoundry-0.2.14/tests/test_approvals.py +0 -179
- messagefoundry-0.2.14/tests/test_asvs_phase0.py +0 -242
- messagefoundry-0.2.14/tests/test_audit_integrity.py +0 -104
- messagefoundry-0.2.14/tests/test_audit_offbox_tee.py +0 -176
- messagefoundry-0.2.14/tests/test_auth_core.py +0 -153
- messagefoundry-0.2.14/tests/test_auth_entry_hardening.py +0 -104
- messagefoundry-0.2.14/tests/test_auth_hardening.py +0 -524
- messagefoundry-0.2.14/tests/test_auth_service.py +0 -475
- messagefoundry-0.2.14/tests/test_auth_session_lifecycle.py +0 -190
- messagefoundry-0.2.14/tests/test_auth_store.py +0 -136
- messagefoundry-0.2.14/tests/test_backup_crypto.py +0 -144
- messagefoundry-0.2.14/tests/test_backup_restore_atleastonce.py +0 -76
- messagefoundry-0.2.14/tests/test_backup_runner.py +0 -373
- messagefoundry-0.2.14/tests/test_batch_claim_fifo.py +0 -371
- messagefoundry-0.2.14/tests/test_batch_claim_locking.py +0 -208
- messagefoundry-0.2.14/tests/test_batch_claim_worker.py +0 -154
- messagefoundry-0.2.14/tests/test_binary_carriage.py +0 -307
- messagefoundry-0.2.14/tests/test_bootstrap_admin_perms.py +0 -77
- messagefoundry-0.2.14/tests/test_builtin_hl7_hardening.py +0 -87
- messagefoundry-0.2.14/tests/test_builtin_hl7_parity.py +0 -620
- messagefoundry-0.2.14/tests/test_cert_expiry.py +0 -254
- messagefoundry-0.2.14/tests/test_channel_rbac.py +0 -211
- messagefoundry-0.2.14/tests/test_checks.py +0 -441
- messagefoundry-0.2.14/tests/test_checks_lint.py +0 -66
- messagefoundry-0.2.14/tests/test_cli.py +0 -668
- messagefoundry-0.2.14/tests/test_cli_offline_resolution.py +0 -250
- messagefoundry-0.2.14/tests/test_cluster.py +0 -1038
- messagefoundry-0.2.14/tests/test_cluster_failover_postgres.py +0 -241
- messagefoundry-0.2.14/tests/test_cluster_failover_sqlserver.py +0 -235
- messagefoundry-0.2.14/tests/test_cluster_graph_gating.py +0 -343
- messagefoundry-0.2.14/tests/test_cluster_lease.py +0 -338
- messagefoundry-0.2.14/tests/test_code_sets.py +0 -306
- messagefoundry-0.2.14/tests/test_codeset_edit.py +0 -641
- messagefoundry-0.2.14/tests/test_config_anchoring.py +0 -481
- messagefoundry-0.2.14/tests/test_config_fingerprint.py +0 -124
- messagefoundry-0.2.14/tests/test_config_source_trust.py +0 -224
- messagefoundry-0.2.14/tests/test_connection_api.py +0 -368
- messagefoundry-0.2.14/tests/test_connection_event_api.py +0 -83
- messagefoundry-0.2.14/tests/test_connection_event_emit.py +0 -229
- messagefoundry-0.2.14/tests/test_connection_event_outbound.py +0 -102
- messagefoundry-0.2.14/tests/test_connection_event_scope.py +0 -255
- messagefoundry-0.2.14/tests/test_connection_event_store.py +0 -208
- messagefoundry-0.2.14/tests/test_connection_resilience.py +0 -164
- messagefoundry-0.2.14/tests/test_connections_cli.py +0 -228
- messagefoundry-0.2.14/tests/test_connections_file.py +0 -445
- messagefoundry-0.2.14/tests/test_connscale_config.py +0 -85
- messagefoundry-0.2.14/tests/test_connscale_driver.py +0 -105
- messagefoundry-0.2.14/tests/test_connscale_postgres.py +0 -110
- messagefoundry-0.2.14/tests/test_connscale_profile.py +0 -107
- messagefoundry-0.2.14/tests/test_connscale_report.py +0 -181
- messagefoundry-0.2.14/tests/test_connscale_smoke.py +0 -150
- messagefoundry-0.2.14/tests/test_consistency.py +0 -125
- messagefoundry-0.2.14/tests/test_console_alerts.py +0 -329
- messagefoundry-0.2.14/tests/test_console_auth.py +0 -144
- messagefoundry-0.2.14/tests/test_console_client.py +0 -393
- messagefoundry-0.2.14/tests/test_console_dead_letters.py +0 -276
- messagefoundry-0.2.14/tests/test_console_event_log.py +0 -141
- messagefoundry-0.2.14/tests/test_console_hardening.py +0 -109
- messagefoundry-0.2.14/tests/test_console_icon.py +0 -72
- messagefoundry-0.2.14/tests/test_console_password.py +0 -419
- messagefoundry-0.2.14/tests/test_console_sessions.py +0 -167
- messagefoundry-0.2.14/tests/test_console_shards.py +0 -257
- messagefoundry-0.2.14/tests/test_console_status.py +0 -366
- messagefoundry-0.2.14/tests/test_console_step_up.py +0 -193
- messagefoundry-0.2.14/tests/test_console_theme.py +0 -86
- messagefoundry-0.2.14/tests/test_console_users.py +0 -191
- messagefoundry-0.2.14/tests/test_console_widgets.py +0 -1030
- messagefoundry-0.2.14/tests/test_content_search.py +0 -378
- messagefoundry-0.2.14/tests/test_custom_roles.py +0 -417
- messagefoundry-0.2.14/tests/test_database_connector_integration.py +0 -138
- messagefoundry-0.2.14/tests/test_database_transport.py +0 -646
- messagefoundry-0.2.14/tests/test_db_lookup.py +0 -372
- messagefoundry-0.2.14/tests/test_db_lookup_live_runner.py +0 -282
- messagefoundry-0.2.14/tests/test_delivery_settings.py +0 -199
- messagefoundry-0.2.14/tests/test_dependabot_automerge_guardrails.py +0 -108
- messagefoundry-0.2.14/tests/test_dependency_boundaries.py +0 -54
- messagefoundry-0.2.14/tests/test_dicom_codec.py +0 -235
- messagefoundry-0.2.14/tests/test_dicom_scp.py +0 -248
- messagefoundry-0.2.14/tests/test_dicom_scp_security.py +0 -197
- messagefoundry-0.2.14/tests/test_dicom_scu.py +0 -172
- messagefoundry-0.2.14/tests/test_dicom_wiring.py +0 -220
- messagefoundry-0.2.14/tests/test_dicomweb.py +0 -291
- messagefoundry-0.2.14/tests/test_docs_runbooks.py +0 -102
- messagefoundry-0.2.14/tests/test_dr_activation.py +0 -187
- messagefoundry-0.2.14/tests/test_dr_api_status.py +0 -94
- messagefoundry-0.2.14/tests/test_dr_failback.py +0 -114
- messagefoundry-0.2.14/tests/test_dr_rbac.py +0 -143
- messagefoundry-0.2.14/tests/test_dr_run_profile.py +0 -183
- messagefoundry-0.2.14/tests/test_dr_seeding.py +0 -216
- messagefoundry-0.2.14/tests/test_dryrun.py +0 -334
- messagefoundry-0.2.14/tests/test_dual_control_reload.py +0 -190
- messagefoundry-0.2.14/tests/test_ed_documents.py +0 -74
- messagefoundry-0.2.14/tests/test_ed_documents_e2e.py +0 -253
- messagefoundry-0.2.14/tests/test_egress_allowlist.py +0 -160
- messagefoundry-0.2.14/tests/test_email_destination.py +0 -313
- messagefoundry-0.2.14/tests/test_embedded_document_pruning.py +0 -367
- messagefoundry-0.2.14/tests/test_enginepoll_aggregate.py +0 -154
- messagefoundry-0.2.14/tests/test_environments.py +0 -326
- messagefoundry-0.2.14/tests/test_fhir_lookup.py +0 -438
- messagefoundry-0.2.14/tests/test_fhir_parsing.py +0 -159
- messagefoundry-0.2.14/tests/test_fhir_resource.py +0 -96
- messagefoundry-0.2.14/tests/test_fhir_transport.py +0 -405
- messagefoundry-0.2.14/tests/test_field_authz.py +0 -167
- messagefoundry-0.2.14/tests/test_field_authz_metadata.py +0 -116
- messagefoundry-0.2.14/tests/test_fifo_index_migration.py +0 -426
- messagefoundry-0.2.14/tests/test_fifo_ordering.py +0 -121
- messagefoundry-0.2.14/tests/test_frozen_launch_smoke.py +0 -115
- messagefoundry-0.2.14/tests/test_generate_cli.py +0 -78
- messagefoundry-0.2.14/tests/test_generated_adt.py +0 -177
- messagefoundry-0.2.14/tests/test_generators_core.py +0 -57
- messagefoundry-0.2.14/tests/test_generators_types.py +0 -42
- messagefoundry-0.2.14/tests/test_group_commit.py +0 -625
- messagefoundry-0.2.14/tests/test_groups.py +0 -267
- messagefoundry-0.2.14/tests/test_harness.py +0 -145
- messagefoundry-0.2.14/tests/test_harness_compose.py +0 -130
- messagefoundry-0.2.14/tests/test_harness_config.py +0 -72
- messagefoundry-0.2.14/tests/test_harness_faults.py +0 -113
- messagefoundry-0.2.14/tests/test_harness_file.py +0 -77
- messagefoundry-0.2.14/tests/test_harness_monitor.py +0 -186
- messagefoundry-0.2.14/tests/test_harness_reconcile.py +0 -230
- messagefoundry-0.2.14/tests/test_harness_scenarios.py +0 -195
- messagefoundry-0.2.14/tests/test_hl7_core_features.py +0 -250
- messagefoundry-0.2.14/tests/test_hl7schema.py +0 -48
- messagefoundry-0.2.14/tests/test_inbound_bind.py +0 -110
- messagefoundry-0.2.14/tests/test_inbound_http_source.py +0 -464
- messagefoundry-0.2.14/tests/test_ingest_time.py +0 -103
- messagefoundry-0.2.14/tests/test_inline_fast_path.py +0 -525
- messagefoundry-0.2.14/tests/test_keyprovider.py +0 -274
- messagefoundry-0.2.14/tests/test_last_admin_guard.py +0 -150
- messagefoundry-0.2.14/tests/test_last_resort.py +0 -104
- messagefoundry-0.2.14/tests/test_leader_tasks.py +0 -228
- messagefoundry-0.2.14/tests/test_license_notice.py +0 -76
- messagefoundry-0.2.14/tests/test_listener_tls_exposure.py +0 -60
- messagefoundry-0.2.14/tests/test_load_config.py +0 -231
- messagefoundry-0.2.14/tests/test_load_corpus.py +0 -91
- messagefoundry-0.2.14/tests/test_load_failover_postgres.py +0 -79
- messagefoundry-0.2.14/tests/test_load_failover_sqlserver.py +0 -77
- messagefoundry-0.2.14/tests/test_load_failover_unit.py +0 -462
- messagefoundry-0.2.14/tests/test_load_metrics.py +0 -124
- messagefoundry-0.2.14/tests/test_load_profile.py +0 -237
- messagefoundry-0.2.14/tests/test_load_report.py +0 -258
- messagefoundry-0.2.14/tests/test_load_runner.py +0 -227
- messagefoundry-0.2.14/tests/test_load_sender.py +0 -130
- messagefoundry-0.2.14/tests/test_load_sink.py +0 -158
- messagefoundry-0.2.14/tests/test_logging.py +0 -424
- messagefoundry-0.2.14/tests/test_message.py +0 -363
- messagefoundry-0.2.14/tests/test_message_split.py +0 -316
- messagefoundry-0.2.14/tests/test_message_timestamps.py +0 -79
- messagefoundry-0.2.14/tests/test_metrics_exporter.py +0 -288
- messagefoundry-0.2.14/tests/test_mfa.py +0 -281
- messagefoundry-0.2.14/tests/test_mllp_encoding_override.py +0 -240
- messagefoundry-0.2.14/tests/test_mllp_tls.py +0 -322
- messagefoundry-0.2.14/tests/test_multishard_smoke.py +0 -139
- messagefoundry-0.2.14/tests/test_nonhl7_ingress_size_cap.py +0 -145
- messagefoundry-0.2.14/tests/test_operability_config.py +0 -382
- messagefoundry-0.2.14/tests/test_outbound_signing.py +0 -387
- messagefoundry-0.2.14/tests/test_outbound_simulate.py +0 -355
- messagefoundry-0.2.14/tests/test_packaging.py +0 -23
- messagefoundry-0.2.14/tests/test_parse_tree.py +0 -73
- messagefoundry-0.2.14/tests/test_parsing.py +0 -202
- messagefoundry-0.2.14/tests/test_passthrough.py +0 -674
- messagefoundry-0.2.14/tests/test_passthrough_graph.py +0 -64
- messagefoundry-0.2.14/tests/test_payload_agnostic_ingress.py +0 -240
- messagefoundry-0.2.14/tests/test_per_connection_retention.py +0 -373
- messagefoundry-0.2.14/tests/test_per_lane_wake.py +0 -322
- messagefoundry-0.2.14/tests/test_pool_warm.py +0 -395
- messagefoundry-0.2.14/tests/test_postgres_store.py +0 -1834
- messagefoundry-0.2.14/tests/test_priority_resolution.py +0 -128
- messagefoundry-0.2.14/tests/test_reconcile_capture.py +0 -118
- messagefoundry-0.2.14/tests/test_reconcile_compare.py +0 -102
- messagefoundry-0.2.14/tests/test_reconcile_harness.py +0 -128
- messagefoundry-0.2.14/tests/test_redaction.py +0 -123
- messagefoundry-0.2.14/tests/test_reference_sets.py +0 -538
- messagefoundry-0.2.14/tests/test_reingress.py +0 -510
- messagefoundry-0.2.14/tests/test_release_console_installer.py +0 -195
- messagefoundry-0.2.14/tests/test_remotefile_transport.py +0 -781
- messagefoundry-0.2.14/tests/test_response_capture.py +0 -561
- messagefoundry-0.2.14/tests/test_rest_transport.py +0 -209
- messagefoundry-0.2.14/tests/test_restore_verify.py +0 -102
- messagefoundry-0.2.14/tests/test_retention.py +0 -432
- messagefoundry-0.2.14/tests/test_run_context.py +0 -103
- messagefoundry-0.2.14/tests/test_scaffold.py +0 -139
- messagefoundry-0.2.14/tests/test_scaffold_requirements.py +0 -54
- messagefoundry-0.2.14/tests/test_scan_forbidden.py +0 -160
- messagefoundry-0.2.14/tests/test_secrets_dpapi.py +0 -101
- messagefoundry-0.2.14/tests/test_security_notify.py +0 -88
- messagefoundry-0.2.14/tests/test_security_static.py +0 -136
- messagefoundry-0.2.14/tests/test_seq_only_fifo.py +0 -463
- messagefoundry-0.2.14/tests/test_service_control.py +0 -53
- messagefoundry-0.2.14/tests/test_settings.py +0 -786
- messagefoundry-0.2.14/tests/test_sharding.py +0 -257
- messagefoundry-0.2.14/tests/test_sibling_helper_finder.py +0 -98
- messagefoundry-0.2.14/tests/test_smart_backend.py +0 -455
- messagefoundry-0.2.14/tests/test_soap_transport.py +0 -206
- messagefoundry-0.2.14/tests/test_soap_wssecurity.py +0 -330
- messagefoundry-0.2.14/tests/test_sqlserver_coordinator.py +0 -180
- messagefoundry-0.2.14/tests/test_sqlserver_cursor_close.py +0 -162
- messagefoundry-0.2.14/tests/test_sqlserver_schema_init.py +0 -140
- messagefoundry-0.2.14/tests/test_sqlserver_store.py +0 -1561
- messagefoundry-0.2.14/tests/test_staged_pipeline.py +0 -979
- messagefoundry-0.2.14/tests/test_startup_attestation.py +0 -254
- messagefoundry-0.2.14/tests/test_startup_fault_isolation.py +0 -319
- messagefoundry-0.2.14/tests/test_stats_reset.py +0 -238
- messagefoundry-0.2.14/tests/test_step_up.py +0 -206
- messagefoundry-0.2.14/tests/test_store.py +0 -753
- messagefoundry-0.2.14/tests/test_store_backend.py +0 -103
- messagefoundry-0.2.14/tests/test_store_encryption.py +0 -593
- messagefoundry-0.2.14/tests/test_store_file_hardening.py +0 -94
- messagefoundry-0.2.14/tests/test_store_once_deliver_many.py +0 -285
- messagefoundry-0.2.14/tests/test_store_once_graph.py +0 -68
- messagefoundry-0.2.14/tests/test_store_read_pool.py +0 -145
- messagefoundry-0.2.14/tests/test_store_ssl.py +0 -76
- messagefoundry-0.2.14/tests/test_summary.py +0 -33
- messagefoundry-0.2.14/tests/test_supervisor.py +0 -275
- messagefoundry-0.2.14/tests/test_support_bundle.py +0 -236
- messagefoundry-0.2.14/tests/test_synchronous_baseline.py +0 -190
- messagefoundry-0.2.14/tests/test_task_resilience.py +0 -148
- messagefoundry-0.2.14/tests/test_tcp_transport.py +0 -341
- messagefoundry-0.2.14/tests/test_tee_cli.py +0 -203
- messagefoundry-0.2.14/tests/test_tee_compare.py +0 -78
- messagefoundry-0.2.14/tests/test_tee_correlate.py +0 -226
- messagefoundry-0.2.14/tests/test_tee_hl7_fields.py +0 -84
- messagefoundry-0.2.14/tests/test_tee_mefor_api.py +0 -107
- messagefoundry-0.2.14/tests/test_tee_mllp.py +0 -98
- messagefoundry-0.2.14/tests/test_tee_relay.py +0 -523
- messagefoundry-0.2.14/tests/test_tee_report.py +0 -86
- messagefoundry-0.2.14/tests/test_tee_store.py +0 -220
- messagefoundry-0.2.14/tests/test_timer_source.py +0 -285
- messagefoundry-0.2.14/tests/test_timezone.py +0 -278
- messagefoundry-0.2.14/tests/test_tls_policy.py +0 -101
- messagefoundry-0.2.14/tests/test_totp.py +0 -93
- messagefoundry-0.2.14/tests/test_totp_window.py +0 -75
- messagefoundry-0.2.14/tests/test_transform_offloop.py +0 -202
- messagefoundry-0.2.14/tests/test_transform_state.py +0 -528
- messagefoundry-0.2.14/tests/test_transports.py +0 -975
- messagefoundry-0.2.14/tests/test_update_check.py +0 -199
- messagefoundry-0.2.14/tests/test_verify.py +0 -331
- messagefoundry-0.2.14/tests/test_version.py +0 -33
- messagefoundry-0.2.14/tests/test_win2025_acceptance.py +0 -73
- messagefoundry-0.2.14/tests/test_wiring.py +0 -445
- messagefoundry-0.2.14/tests/test_wiring_engine.py +0 -1307
- messagefoundry-0.2.14/tests/test_wiring_reload.py +0 -516
- messagefoundry-0.2.14/tests/test_wiring_serve.py +0 -107
- messagefoundry-0.2.14/tests/test_ws_stats_revalidation.py +0 -155
- messagefoundry-0.2.14/tests/test_x12_parsing.py +0 -462
- messagefoundry-0.2.14/tests/test_x12_rte.py +0 -212
- messagefoundry-0.2.14/tests/test_x12_source_ip_allowlist.py +0 -170
- messagefoundry-0.2.14/tests/test_x12_transport.py +0 -379
- messagefoundry-0.2.14/tests/test_x12_validate.py +0 -110
- messagefoundry-0.2.14/tests/test_xml_message.py +0 -169
- messagefoundry-0.2.14/tests/test_xml_schema_signature.py +0 -66
- messagefoundry-0.2.14/tests/test_xml_signature_anchor.py +0 -44
- messagefoundry-0.2.14/uv.lock +0 -1721
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/.gitignore +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/LICENSE +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/NOTICE +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/adr_analyze.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/_pools.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/hl7.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/keying.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/leak.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/rules.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/anon/surrogates.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/approvals.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/field_authz.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/api/tls.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/data/common_passwords.txt +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/identity.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/notifications.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/passwords.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/policy.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/ratelimit.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/auth/totp.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/active_environment.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/alerts_edit.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/anchor.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/db_lookup.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/environments.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/fingerprint.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/ingest_time.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/reference.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/response.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/config/state.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/README.md +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/_core.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/_hl7data.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/all_types.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/bar.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/dft.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/documents.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/mdm.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/mfn.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/oml.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/orl.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/orm.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/oru.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/ras.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/rde.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/siu.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/generators/vxu.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/hl7schema.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/integrity.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/last_resort.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/_backend.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/consistency.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/_deps.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/_util.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/dataset.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/errors.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/dicom/peek.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/fhir/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/fhir/_deps.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/fhir/errors.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/fhir/peek.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/fhir/resource.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/groups.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/peek.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/summary.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/tree.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/validate.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/_deps.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/delimiters.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/errors.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/interchange.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/message.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/peek.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/x12/validate.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/_deps.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/errors.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/harden.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/message.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/schema.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/parsing/xml/signature.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/cert_expiry.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/config_convergence.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/connscale_shim.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/dr_backup.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/reference_sync.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/state_convergence.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/supervisor.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/pipeline/update_check.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/py.typed +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/redaction.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/scaffold.py +0 -0
- /messagefoundry-0.2.14/messagefoundry/console/service_control.py → /messagefoundry-0.3.0/messagefoundry/service.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/audit_tee.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/backup_codec.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/content_search.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/document_strip.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/keyprovider.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/store/pool_metrics.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/support/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/support/bundle.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/support/redact.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/timezone.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/http_listener.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/loopback.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/passthrough.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/signing.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/transports/timer.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/__init__.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/model.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/report.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/runner.py +0 -0
- {messagefoundry-0.2.14 → messagefoundry-0.3.0}/messagefoundry/verify/smoke.py +0 -0
|
@@ -6,6 +6,196 @@ All notable changes to MessageFoundry are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.3.0] — 2026-07-13 — Early Access
|
|
10
|
+
|
|
11
|
+
Highlights since 0.2.15 — streaming attachments end-to-end, a copy-on-Send message model, richer
|
|
12
|
+
connectivity, and a run of security hardening. (Concise highlights; the git history is the full change set.)
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Streaming large attachments end-to-end** (#149, ADR 0105) — very-large OBX-5 documents are detached from
|
|
16
|
+
the message skeleton at ingress and streamed through routing → transform → delivery on all three stores
|
|
17
|
+
(SQLite / SQL Server / Postgres), with an operator read/download surface.
|
|
18
|
+
- **Copy-on-Send message model** (ADR 0104) — `Send` snapshots the message at construction (opt-in
|
|
19
|
+
`[pipeline].snapshot_on_send`), plus `Message.copy()` and a recognition-first `message_type_of(accepts=)`
|
|
20
|
+
predicate; and in the IDE, a point-and-click HL7 field picker and the Steps-view authoring palette
|
|
21
|
+
(ADR 0103 / 0106).
|
|
22
|
+
- **Connectivity** — generic HTTP auth (OAuth 2.0 client-credentials + Digest) and HTTP response-header
|
|
23
|
+
capture (#154, #65); a connector `SecretProvider` seam with a HashiCorp Vault backend (#196).
|
|
24
|
+
- **Monitoring** — an engine-wide KPI roll-up with a saturation-derivative alert and DB-pool metrics (#93).
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- **pipeline: `batch_handoff_statements` now defaults ON on SQL Server** ([ADR 0075](docs/adr/0075-per-hop-sql-statement-batching.md))
|
|
28
|
+
— per-hop SQL statement batching (a **distance-insurance** lever: folds each message's per-hop store round-trips
|
|
29
|
+
into the fewest `pyodbc.execute()` T-SQL batches, cutting **network round-trips, NOT transactions** — the
|
|
30
|
+
single per-hop `COMMIT` is untouched, `commits/msg` stays 2.000) now activates **by default** on the SQL Server
|
|
31
|
+
store. Promoted 2026-07-08 after Bench B showed **harmless-near** (batch ON vs OFF within ±0.4% at ~0.28 ms RTT,
|
|
32
|
+
zero-loss) and **helps-far** (constant ~−18% ACK-p99, absolute saving widening with RTT: −84 ms @ +20 ms,
|
|
33
|
+
−212 ms @ +50 ms) over a green SS correctness precondition (`tests/test_adr0075_batch_sqlserver.py`, 9 passed).
|
|
34
|
+
**Fail-closed + SQL-Server-only** — Postgres (asyncpg) and SQLite are byte-identical no-ops; the flag is retained
|
|
35
|
+
**only as an emergency off-switch**: set `[pipeline].batch_handoff_statements = false` to disable.
|
|
36
|
+
|
|
37
|
+
### Security
|
|
38
|
+
- **The published PyPI source distribution no longer ships the whole repo** (#1020) — the sdist is pinned to
|
|
39
|
+
the `messagefoundry` package + its metadata, with a fail-closed "sdist is package-only" gate in the release
|
|
40
|
+
workflow. No release ever exposed PHI or customer data.
|
|
41
|
+
- **Transport hardening** — certificate-revocation refusal extended to outbound-connector TLS (#201); in-use
|
|
42
|
+
memory protection for the store (#198); the publish deny-list is read from the ref being published (#983).
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
- **CI reliability** — bound PHI-retention on the Windows service smoke (#1011); wrap pyodbc-heavy SQL Server
|
|
46
|
+
steps with a native-crash retry (#1010); multi-message finalizers take their per-message locks in canonical
|
|
47
|
+
order (#980).
|
|
48
|
+
|
|
49
|
+
## [0.2.15] — 2026-07-06 — Early Access
|
|
50
|
+
|
|
51
|
+
**Thread-hop fusion (ADR 0071 B5, flagged default-OFF) + the browser ops dashboard, pooled-claimer
|
|
52
|
+
primitives, and opt-in persistent outbound MLLP.** The headline engine change is **B5 thread-hop fusion** —
|
|
53
|
+
a SQL-Server-only path that fuses each off-loop CPU stage with its store handoff onto one synchronous-pyodbc
|
|
54
|
+
worker hop to cut the per-completion executor→loop marshaling wall; it ships **behind
|
|
55
|
+
`[pipeline].fuse_thread_hops` (default off)** pending the SQL-Server throughput bench. Everything else below
|
|
56
|
+
is additive / opt-in.
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **pipeline: thread-hop fusion — B5, opt-in** ([ADR 0071](docs/adr/0071-cut-executor-round-trips-b5.md);
|
|
60
|
+
`[pipeline].fuse_thread_hops` default **off**, SQL Server + `pooled` claim mode only) — fuses each off-loop
|
|
61
|
+
CPU stage (`route_only` / `transform_one`) with its adjacent store handoff onto **one** synchronous-pyodbc
|
|
62
|
+
worker hop, so a multi-statement aioodbc handoff marshals back to the loop **once** instead of per
|
|
63
|
+
statement (attacks the per-completion marshaling ceiling the 2026-07-04 profile named). Fuses **thread
|
|
64
|
+
hops, not transactions** — commits/msg are identical (the poison-guard is intact); Postgres (asyncpg
|
|
65
|
+
loop-native) and SQLite (loop-affine handoff lock) keep the async path by construction. Activation is
|
|
66
|
+
fail-closed: fusion only turns on when the dedicated sync pyodbc pool + per-stage fusing executors open
|
|
67
|
+
cleanly, otherwise the async path runs unchanged. Ships with the self-contained SQLite/Proactor
|
|
68
|
+
crossing-count micro-bench + a Windows CI mechanism gate, and a connscale B0/B1 fusion A/B harness axis
|
|
69
|
+
(`fuse_ab` profile, `trials`-banked); the throughput GO/NO-GO (ship-by-default vs escalate to
|
|
70
|
+
free-threading, ADR 0053) is a separate SQL-Server bench, not a merge gate.
|
|
71
|
+
- **Promote-gate resolved 2026-07-06 — NO-GO** ([ADR 0071](docs/adr/0071-cut-executor-round-trips-b5.md)
|
|
72
|
+
§8/§10, #787): the SQL-Server `fuse_ab` bench measured a real but sub-threshold **+6.5 / +9.3 / +10.0 %**
|
|
73
|
+
lift (below the ≥10% bar; zero-loss held), so `fuse_thread_hops` **stays default-OFF** and the lever
|
|
74
|
+
escalates to free-threading (ADR 0053). Bench-SHA provenance: the run was at commit `8bab40e2`, which is
|
|
75
|
+
**not** an ancestor of `main` (PR5 was squash-merged as `90f80a3`, #780) — but `git diff 8bab40e2 90f80a3`
|
|
76
|
+
is **empty**, so the NO-GO bench ran a code tree byte-identical to merged PR5.
|
|
77
|
+
- **store: pooled-claimer primitives** `claim_fifo_heads` / `list_fifo_lanes` / `release_claimed` on all
|
|
78
|
+
three backends ([ADR 0066](docs/adr/0066-pooled-stage-claimers.md) PR 2 — **now wired by the
|
|
79
|
+
`StageDispatcher` and the default claim path since #755/#744, see _Changed_ below**): a FIFO-safe
|
|
80
|
+
multi-lane head-claim (probe-then-claim, EMPTY-on-locked-head — never a #285 skip
|
|
81
|
+
to seq N+1), a read-only head-due-aware lane discovery for the pooled sweep, and an attempts-neutral
|
|
82
|
+
claim release. `claim_next_fifo` / `claim_next_fifo_batch` / `claim_ready` are untouched.
|
|
83
|
+
- **pipeline: bounded pooled-mode infra-fault handling (T17)** (ADR 0070; #766) — in `pooled` mode a lane
|
|
84
|
+
whose head keeps failing on an infrastructure fault now **re-pends its head at an exponential-capped
|
|
85
|
+
backoff** (cap `[pipeline].infra_fault_backoff_cap`, default **60 s**) instead of spinning the ~4×/s
|
|
86
|
+
discovery sweep, and after `[pipeline].infra_fault_stop_after` (default **10**) consecutive zero-progress
|
|
87
|
+
faults (~4 min of wall clock) applies `[pipeline].infra_fault_policy` (default **`stop`**): STOP-the-lane
|
|
88
|
+
with a throttled `lane_stuck` alert — **never** auto-dead-letter. `retry_forever` instead keeps re-pending
|
|
89
|
+
at the cap and alerts once the horizon is crossed. `per_lane` mode is unaffected.
|
|
90
|
+
- **Browser ops dashboard (read-only, M1)** (#75, [ADR 0065](docs/adr/0065-web-ops-dashboard.md)) — an
|
|
91
|
+
**opt-in** (`[api].serve_ui`, default **off**), same-origin, zero-install browser ops view served under
|
|
92
|
+
`/ui` by the engine's FastAPI app. Read-only: a live-polling connections dashboard (In/Out/Queued/
|
|
93
|
+
Errors/Last-Activity), a message log with filters, the **audited** raw-message view (reuses the exact
|
|
94
|
+
`GET /messages/{id}` PHI path — RBAC + per-access audit + redaction), and a dead-letter list. Auth is a
|
|
95
|
+
new **HttpOnly + SameSite=Strict** session cookie **confined to `/ui`** — the JSON API stays
|
|
96
|
+
Authorization-header-only, so a request bearing only the cookie is still rejected. Ships a strict CSP
|
|
97
|
+
(`script-src 'self'`, no `unsafe-*`), `Cache-Control: no-store` on `/ui` + PHI reads, and autoescape-by-
|
|
98
|
+
default rendering (a stdlib HTML builder — **no new runtime dependency, no npm**). A JSON-only
|
|
99
|
+
deployment is byte-identical (`serve_ui` off); off-loopback requires TLS (refused even under
|
|
100
|
+
`--allow-insecure-bind`).
|
|
101
|
+
- **Browser ops dashboard — connection controls (M2a)** (#75, ADR 0065) — the dashboard adds **safe
|
|
102
|
+
operator actions**: inbound connection **start / stop / restart**, reusing the JSON control handlers
|
|
103
|
+
(`connections:control` + per-channel guard). CSRF is defended in depth by an **Origin / Sec-Fetch-Site**
|
|
104
|
+
same-origin check on top of the SameSite=Strict session cookie — **token-free (no crypto import)**.
|
|
105
|
+
- **Browser ops dashboard — message replay + step-up re-auth (M2b)** (#75, ADR 0065) — single-message
|
|
106
|
+
**replay** from the browser (a Replay button on the message detail). Replay is `require_step_up` in the
|
|
107
|
+
JSON API, so the /ui route uses a cookie-world step-up gate (`require_ui_step_up`): if the session hasn't
|
|
108
|
+
recently stepped up it **redirects to a /ui re-auth page** (password, + TOTP when MFA is required)
|
|
109
|
+
instead of a 403 header a browser can't act on; after re-auth the browser **auto-retries** the pending
|
|
110
|
+
replay. The re-auth `next` target is validated to be a /ui replay action only (anti open-redirect).
|
|
111
|
+
- **Browser ops dashboard — dead-letter bulk replay (M3)** (#75, ADR 0065) — a per-channel **Replay all
|
|
112
|
+
dead** action on the dead-letters page, re-queuing every dead delivery for a channel via the JSON
|
|
113
|
+
`replay_dead_letters` handler. Same step-up gate as message replay (`require_ui_step_up` → /ui re-auth +
|
|
114
|
+
auto-retry; the channel is in the action **path** so the body-less re-POST carries it), and it honors the
|
|
115
|
+
**dual-control approval gate** — when a replay is held for a second approver it surfaces a "held for
|
|
116
|
+
approval" page instead of redirecting.
|
|
117
|
+
- **Browser ops dashboard — live `/ws/stats` channel (M-ws)** (#75, ADR 0065) — the dashboard now shows a
|
|
118
|
+
live queue-status strip pushed over the engine's `/ws/stats` WebSocket (previously only the desktop
|
|
119
|
+
path existed and it was unused). A browser can't set the WS `Authorization` header, so a **same-origin
|
|
120
|
+
browser handshake authenticates via the `mf_session` cookie** it carries; **CSWSH is defended** by a
|
|
121
|
+
same-origin `Origin`-vs-`Host` check plus the `SameSite=Strict` cookie (a cross-site handshake carries no
|
|
122
|
+
cookie). The native (header) path is unchanged — a client without an `Origin` falls through to it. The
|
|
123
|
+
the WS strip degrades to empty if the socket can't connect. The **connections table itself now updates
|
|
124
|
+
live over the socket** too: the server pushes the rendered (already-escaped) connections fragment, the
|
|
125
|
+
client swaps it in and stops polling, and polling resumes as a fallback if the socket drops.
|
|
126
|
+
- **Browser ops dashboard — HL7 parse-tree view** (#75, ADR 0065) — the message-detail page links to a
|
|
127
|
+
`GET /ui/messages/{id}/parse-tree` view that renders the HL7 segment/field tree server-side via the pure
|
|
128
|
+
`parsing` lib. It reuses the **single audited** `GET /messages/{id}` PHI path (no new PHI egress), every
|
|
129
|
+
field value is escaped (attacker-influenced HL7 can't inject markup), and a non-HL7 body (X12/DICOM/
|
|
130
|
+
binary) surfaces a "no parse tree" notice rather than an error.
|
|
131
|
+
- **Browser ops dashboard — per-destination dead-letter replay** (#75, ADR 0065) — the dead-letters page
|
|
132
|
+
now offers **Replay per (channel, destination)** buttons alongside the per-channel "Replay all dead"
|
|
133
|
+
(`POST /ui/dead-letters/{channel_id}/{destination_name}/replay`), same step-up + approval-gate + path-
|
|
134
|
+
based auto-retry as the channel-wide action. `is_safe_ui_action` was widened to the two-segment path and
|
|
135
|
+
hardened to reject any `..` traversal marker.
|
|
136
|
+
- **Browser ops dashboard — off-loopback exposure via `[api].public_origin`** (#75, ADR 0065) — a new
|
|
137
|
+
opt-in `[api].public_origin` (e.g. `https://ops.example.com`) makes the dashboard's same-origin **CSRF**
|
|
138
|
+
and **CSWSH** checks work when `/ui` is reached off-loopback through a reverse proxy that doesn't preserve
|
|
139
|
+
the `Host` header: the browser `Origin` is matched against the configured public origin instead of the
|
|
140
|
+
request `Host`. Default (unset) is unchanged — loopback / Host-preserving-proxy behavior. The safe
|
|
141
|
+
defaults stand: `[api].host` is `127.0.0.1`, and `serve_ui` off-loopback still requires TLS
|
|
142
|
+
(`exposure_protected`), refused even under `--allow-insecure-bind`. (Phishing-resistant MFA / managed-
|
|
143
|
+
admin-host controls for off-loopback admin remain a separate posture decision — WebAuthn #11 + the ASVS
|
|
144
|
+
8.4.2 residual.)
|
|
145
|
+
- **mllp: persistent outbound connections — OPT-IN** ([ADR 0067](docs/adr/0067-persistent-outbound-mllp.md);
|
|
146
|
+
`persistent=false` default **this release**, per-outbound opt-in via `persistent=true`) — the MLLP
|
|
147
|
+
destination can reuse **one** lazily-established connection across deliveries (with
|
|
148
|
+
`idle_timeout_seconds` / `max_connection_age_seconds` freshness knobs and reconnect-before-first-byte),
|
|
149
|
+
eliminating the per-message TCP/TLS handshake and the `TIME_WAIT` ephemeral-port exhaustion measured on
|
|
150
|
+
the 2026-07-02 load campaign. It ships **opt-in**: the default stays connect-per-message (today's proven
|
|
151
|
+
posture — no behavior change for existing deployments), and `persistent=true` is a documented opt-in for
|
|
152
|
+
sustained high-rate lanes.
|
|
153
|
+
- **Shipped default: `persistent=false` (connect-per-message).** Existing outbounds are byte-for-byte
|
|
154
|
+
unchanged. Set `persistent = true` on an `MLLP()` destination to opt into connection reuse (recommended
|
|
155
|
+
on sustained high-rate lanes; see [docs/SERVICE.md](docs/SERVICE.md) "High-delivery-rate TCP tuning").
|
|
156
|
+
The default flips to `persistent=true` in a subsequent release once the ADR 0067 §8 trigger is met:
|
|
157
|
+
a real deployment runs `persistent=true` clean on a live feed **and** the mid-transaction stray-frame
|
|
158
|
+
correctness edge is closed (a test / the MSA-2↔MSH-10 correlation, BACKLOG #82) or field-confirmed benign.
|
|
159
|
+
|
|
160
|
+
### Removed
|
|
161
|
+
- **Frozen zero-Python Windows console installer retired** (#39, [ADR 0032 Phase B](docs/adr/0032-console-desktop-launch.md)
|
|
162
|
+
*Amendment (2026-07-01)*). The PyInstaller `--onedir` + Inno Setup channel added in 0.2.11 is removed:
|
|
163
|
+
`packaging/console-installer/`, the `release-console-installer` job in the release workflow, and its
|
|
164
|
+
AC-linked tests are deleted, along with the Qt-LGPL frozen-binary written-offer/bundled-license apparatus
|
|
165
|
+
and the pending Authenticode signing-cert requirement. **Rationale:** zero uptake (the CI leg failed on
|
|
166
|
+
every tag release since it merged; one out-of-band `.exe` with no downloads), the no-Python/no-IT demand
|
|
167
|
+
gate never fired (adopters are pip + IT-covered), and it only ever shipped unsigned. **The desktop console
|
|
168
|
+
is unaffected** — it stays installable via `pip install messagefoundry[console]` + the ADR 0032 Phase A
|
|
169
|
+
`gui-script` and shortcut scripts; only the *frozen, zero-Python* conveyance is gone. The zero-install
|
|
170
|
+
audience is now served by the browser ops dashboard ([BACKLOG #75](docs/BACKLOG.md)).
|
|
171
|
+
|
|
172
|
+
### Changed
|
|
173
|
+
- **Server-DB store opens now skip the schema DDL batch when it already ran** ([ADR 0064](docs/adr/0064-schema-init-fastpath.md)).
|
|
174
|
+
A single-row `schema_meta` marker records the content hash of the shipped DDL batch; a re-open of a
|
|
175
|
+
current database skips the whole guarded batch **and** the exclusive schema lock (previously every
|
|
176
|
+
open re-ran dozens of check-then-create statements under `sp_getapplock`/the schema advisory lock —
|
|
177
|
+
the measured N≥4 co-start convoy of the WS-B bench, and wasted round-trips on every single-engine
|
|
178
|
+
restart). Any edit to the DDL batch changes the hash and forces exactly one full idempotent run, so
|
|
179
|
+
upgraded databases still adopt on-open migrations (ADR 0060) unchanged. **Operational note:**
|
|
180
|
+
out-of-band schema surgery is no longer self-healed at the next restart — run
|
|
181
|
+
`DELETE FROM schema_meta` afterward to force one full run. SQLite is unaffected.
|
|
182
|
+
- **Startup crash recovery (`reset_stale_inflight`) is now index-seekable** ([ADR 0064](docs/adr/0064-schema-init-fastpath.md)):
|
|
183
|
+
the all-stages pass runs one UPDATE per pipeline stage against the existing
|
|
184
|
+
`ix_queue_ready(stage, status, …)` index instead of one unindexed status-only full scan of the
|
|
185
|
+
queue (Postgres additionally drops an unsargable `OR $n IS NULL` form). Same rows recovered, same
|
|
186
|
+
single transaction — all three backends.
|
|
187
|
+
- **Default staged-pipeline claim path flipped to pooled per-stage claimers**
|
|
188
|
+
([ADR 0066](docs/adr/0066-pooled-stage-claimers.md); `[pipeline].claim_mode` default `per_lane` →
|
|
189
|
+
**`pooled`** — issue #744, shipped via PR #765). The `StageDispatcher` was first wired in behind
|
|
190
|
+
`[pipeline].claim_mode` **default-OFF** (#755, ADR 0066 PR4) and is now the **default** claim topology:
|
|
191
|
+
one dispatcher per stage running a handful of pooled claimer tasks over the `claim_fifo_heads` /
|
|
192
|
+
`list_fifo_lanes` / `release_claimed` primitives (batch-claiming head-prefixes across lanes), collapsing
|
|
193
|
+
the ~4,500 per-(lane×stage) claim loops that saturated a shared server DB at high fan-out and holding
|
|
194
|
+
zero-loss where `per_lane` dropped messages. **`per_lane` stays fully selectable as the byte-identical
|
|
195
|
+
opt-out** (`[pipeline].claim_mode = "per_lane"`), enforced by the zero-pooled-construction test sentinel.
|
|
196
|
+
Reliability-core — read once at engine start (a `/config/reload` does not toggle it; restart to change).
|
|
197
|
+
Single-node scope; the at-least-once / per-lane-FIFO / poison-guard invariants are unchanged in both modes.
|
|
198
|
+
|
|
9
199
|
## [0.2.14] — 2026-07-01 — Early Access
|
|
10
200
|
|
|
11
201
|
**Delta security-audit remediation.** A focused security audit of the surface added since the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: messagefoundry
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Open-source healthcare integration engine — route, transform, and validate messages across many formats and connection types
|
|
5
5
|
Project-URL: Homepage, https://messagefoundry.org/
|
|
6
6
|
Project-URL: Documentation, https://messagefoundry.org/
|
|
@@ -32,17 +32,13 @@ Requires-Dist: hl7>=0.4.5
|
|
|
32
32
|
Requires-Dist: hl7apy>=1.3
|
|
33
33
|
Requires-Dist: ldap3>=2.9
|
|
34
34
|
Requires-Dist: prometheus-client>=0.20
|
|
35
|
+
Requires-Dist: psutil>=6.0
|
|
35
36
|
Requires-Dist: pydantic>=2.6
|
|
36
37
|
Requires-Dist: pyspnego>=0.10
|
|
37
38
|
Requires-Dist: starlette>=1.3.1
|
|
38
39
|
Requires-Dist: tomlkit>=0.12
|
|
39
40
|
Requires-Dist: tzdata>=2024.1
|
|
40
41
|
Requires-Dist: uvicorn[standard]>=0.29
|
|
41
|
-
Provides-Extra: console
|
|
42
|
-
Requires-Dist: httpx>=0.27; extra == 'console'
|
|
43
|
-
Requires-Dist: keyring>=24.0; extra == 'console'
|
|
44
|
-
Requires-Dist: pyside6>=6.6; extra == 'console'
|
|
45
|
-
Requires-Dist: truststore>=0.10; extra == 'console'
|
|
46
42
|
Provides-Extra: dev
|
|
47
43
|
Requires-Dist: httpx>=0.27; extra == 'dev'
|
|
48
44
|
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
@@ -57,6 +53,10 @@ Requires-Dist: pynetdicom<4,>=3.0.4; extra == 'dicom'
|
|
|
57
53
|
Provides-Extra: fhir
|
|
58
54
|
Requires-Dist: fhir-resources>=7.1.0; extra == 'fhir'
|
|
59
55
|
Requires-Dist: fhirpathpy>=2.2.0; extra == 'fhir'
|
|
56
|
+
Provides-Extra: harness
|
|
57
|
+
Requires-Dist: httpx>=0.27; extra == 'harness'
|
|
58
|
+
Requires-Dist: pyside6>=6.6; extra == 'harness'
|
|
59
|
+
Requires-Dist: truststore>=0.10; extra == 'harness'
|
|
60
60
|
Provides-Extra: otel
|
|
61
61
|
Requires-Dist: opentelemetry-exporter-otlp>=1.20; extra == 'otel'
|
|
62
62
|
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'otel'
|
|
@@ -66,6 +66,10 @@ Provides-Extra: sftp
|
|
|
66
66
|
Requires-Dist: paramiko>=5.0; extra == 'sftp'
|
|
67
67
|
Provides-Extra: sqlserver
|
|
68
68
|
Requires-Dist: aioodbc>=0.5; extra == 'sqlserver'
|
|
69
|
+
Provides-Extra: vault
|
|
70
|
+
Requires-Dist: hvac>=2.3.0; extra == 'vault'
|
|
71
|
+
Provides-Extra: webauthn
|
|
72
|
+
Requires-Dist: webauthn<4,>=3.0.0; extra == 'webauthn'
|
|
69
73
|
Provides-Extra: x12
|
|
70
74
|
Requires-Dist: pyx12>=4.0.0; extra == 'x12'
|
|
71
75
|
Provides-Extra: xml
|
|
@@ -92,7 +96,8 @@ guided tooling or extend it in Python; it runs on SQLite, PostgreSQL, or SQL Ser
|
|
|
92
96
|
authentication, RBAC, audit logging, and encryption-at-rest built in.
|
|
93
97
|
|
|
94
98
|
> Python import package: `messagefoundry`. Built with **hl7apy** + **python-hl7** (HL7 parsing/
|
|
95
|
-
> validation), **FastAPI** (engine API), and **PySide6** (
|
|
99
|
+
> validation), **FastAPI** (engine API + the same-origin `/ui` web console), and **PySide6** (the
|
|
100
|
+
> standalone test harness).
|
|
96
101
|
|
|
97
102
|
## What it is
|
|
98
103
|
|
|
@@ -105,8 +110,8 @@ control; either way the configuration is version-controlled and yours.
|
|
|
105
110
|
## Architecture
|
|
106
111
|
|
|
107
112
|
**Engine-as-library + localhost API.** The engine is an importable Python package.
|
|
108
|
-
|
|
109
|
-
whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
113
|
+
A browser **web console** (served same-origin at `/ui`) talks to it over a localhost HTTP + WebSocket
|
|
114
|
+
API — the same way whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
110
115
|
No hand-rolled IPC; the deployment split is a config choice, not an architectural fork.
|
|
111
116
|
|
|
112
117
|
See **[docs/architecture-diagram.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/architecture-diagram.md)** for the rendered diagrams —
|
|
@@ -147,7 +152,7 @@ Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)*
|
|
|
147
152
|
|
|
148
153
|
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** — an
|
|
149
154
|
orientation guide to how the pieces fit: Connections → Router → Handlers → Connections, with the
|
|
150
|
-
headless engine and the console/IDE that drive it.
|
|
155
|
+
headless engine and the web console/IDE that drive it.
|
|
151
156
|
- **[Install Guide](https://messagefoundry.org/assets/docs/MessageFoundry-Install-Guide.pdf)** — install,
|
|
152
157
|
configure, secure, and roll out to production.
|
|
153
158
|
- **[User Guide](https://messagefoundry.org/assets/docs/MessageFoundry-User-Guide.pdf)** — author and
|
|
@@ -177,19 +182,21 @@ deliberate — replace `<version>` with the current release shown at the top of
|
|
|
177
182
|
needs (each is opt-in and lazy-imported):
|
|
178
183
|
|
|
179
184
|
```bash
|
|
180
|
-
pip install "messagefoundry
|
|
185
|
+
pip install "messagefoundry-webconsole==<version>" # the browser web console (/ui) — the operator UI; most operators want this
|
|
181
186
|
pip install "messagefoundry[postgres]==<version>" # PostgreSQL store backend (production server DB)
|
|
182
187
|
pip install "messagefoundry[sqlserver]==<version>" # SQL Server store backend (+ OS-level ODBC Driver 18)
|
|
183
188
|
pip install "messagefoundry[sftp]==<version>" # SFTP transport for the REMOTEFILE connector
|
|
184
189
|
pip install "messagefoundry[dicom]==<version>" # DICOM codec + C-STORE SCP (pydicom + pynetdicom)
|
|
190
|
+
pip install "messagefoundry[harness]==<version>" # the standalone PySide6 test harness GUI
|
|
185
191
|
```
|
|
186
192
|
|
|
187
|
-
**What's in the `messagefoundry` package — and what isn't.** It is the **engine
|
|
188
|
-
|
|
189
|
-
`
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
**What's in the `messagefoundry` package — and what isn't.** It is the **engine**; the operator UI is
|
|
194
|
+
the browser **web console** served same-origin at `/ui`, which ships as a separate, version-matched
|
|
195
|
+
wheel (`messagefoundry-webconsole`) the engine mounts in-process (turn it on with `[api].serve_ui`), so
|
|
196
|
+
a headless server, container, or adopter install stays lean. (The former PySide6 desktop console was
|
|
197
|
+
retired in favour of the web console — BACKLOG #103; PySide6 now backs only the opt-in `[harness]` test
|
|
198
|
+
tooling.) The **VS Code extension is a separate product, not on PyPI** (a VS Code extension is a
|
|
199
|
+
different ecosystem); see *VS Code extension & test harness* below for where to get it.
|
|
193
200
|
|
|
194
201
|
> **Verify before you install (supply chain).** Every release is built by a GitHub Actions workflow,
|
|
195
202
|
> Sigstore-signed, and carries SLSA build-provenance + PEP 740 attestations. Verify a downloaded
|
|
@@ -224,10 +231,11 @@ python -m messagefoundry serve --config samples/config --db messagefoundry.db --
|
|
|
224
231
|
# API on http://127.0.0.1:8765 — GET /connections, /messages, /stats, WS /ws/stats
|
|
225
232
|
```
|
|
226
233
|
|
|
227
|
-
Then open the admin console (
|
|
234
|
+
Then open the admin console in a browser (install the web console alongside the engine —
|
|
235
|
+
`pip install -e packaging/messagefoundry-webconsole` — and set `[api].serve_ui = true`):
|
|
228
236
|
|
|
229
237
|
```bash
|
|
230
|
-
|
|
238
|
+
# browse to http://127.0.0.1:8765/ui and sign in
|
|
231
239
|
```
|
|
232
240
|
|
|
233
241
|
### VS Code extension & test harness
|
|
@@ -16,7 +16,8 @@ guided tooling or extend it in Python; it runs on SQLite, PostgreSQL, or SQL Ser
|
|
|
16
16
|
authentication, RBAC, audit logging, and encryption-at-rest built in.
|
|
17
17
|
|
|
18
18
|
> Python import package: `messagefoundry`. Built with **hl7apy** + **python-hl7** (HL7 parsing/
|
|
19
|
-
> validation), **FastAPI** (engine API), and **PySide6** (
|
|
19
|
+
> validation), **FastAPI** (engine API + the same-origin `/ui` web console), and **PySide6** (the
|
|
20
|
+
> standalone test harness).
|
|
20
21
|
|
|
21
22
|
## What it is
|
|
22
23
|
|
|
@@ -29,8 +30,8 @@ control; either way the configuration is version-controlled and yours.
|
|
|
29
30
|
## Architecture
|
|
30
31
|
|
|
31
32
|
**Engine-as-library + localhost API.** The engine is an importable Python package.
|
|
32
|
-
|
|
33
|
-
whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
33
|
+
A browser **web console** (served same-origin at `/ui`) talks to it over a localhost HTTP + WebSocket
|
|
34
|
+
API — the same way whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
34
35
|
No hand-rolled IPC; the deployment split is a config choice, not an architectural fork.
|
|
35
36
|
|
|
36
37
|
See **[docs/architecture-diagram.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/architecture-diagram.md)** for the rendered diagrams —
|
|
@@ -71,7 +72,7 @@ Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)*
|
|
|
71
72
|
|
|
72
73
|
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** — an
|
|
73
74
|
orientation guide to how the pieces fit: Connections → Router → Handlers → Connections, with the
|
|
74
|
-
headless engine and the console/IDE that drive it.
|
|
75
|
+
headless engine and the web console/IDE that drive it.
|
|
75
76
|
- **[Install Guide](https://messagefoundry.org/assets/docs/MessageFoundry-Install-Guide.pdf)** — install,
|
|
76
77
|
configure, secure, and roll out to production.
|
|
77
78
|
- **[User Guide](https://messagefoundry.org/assets/docs/MessageFoundry-User-Guide.pdf)** — author and
|
|
@@ -101,19 +102,21 @@ deliberate — replace `<version>` with the current release shown at the top of
|
|
|
101
102
|
needs (each is opt-in and lazy-imported):
|
|
102
103
|
|
|
103
104
|
```bash
|
|
104
|
-
pip install "messagefoundry
|
|
105
|
+
pip install "messagefoundry-webconsole==<version>" # the browser web console (/ui) — the operator UI; most operators want this
|
|
105
106
|
pip install "messagefoundry[postgres]==<version>" # PostgreSQL store backend (production server DB)
|
|
106
107
|
pip install "messagefoundry[sqlserver]==<version>" # SQL Server store backend (+ OS-level ODBC Driver 18)
|
|
107
108
|
pip install "messagefoundry[sftp]==<version>" # SFTP transport for the REMOTEFILE connector
|
|
108
109
|
pip install "messagefoundry[dicom]==<version>" # DICOM codec + C-STORE SCP (pydicom + pynetdicom)
|
|
110
|
+
pip install "messagefoundry[harness]==<version>" # the standalone PySide6 test harness GUI
|
|
109
111
|
```
|
|
110
112
|
|
|
111
|
-
**What's in the `messagefoundry` package — and what isn't.** It is the **engine
|
|
112
|
-
|
|
113
|
-
`
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
**What's in the `messagefoundry` package — and what isn't.** It is the **engine**; the operator UI is
|
|
114
|
+
the browser **web console** served same-origin at `/ui`, which ships as a separate, version-matched
|
|
115
|
+
wheel (`messagefoundry-webconsole`) the engine mounts in-process (turn it on with `[api].serve_ui`), so
|
|
116
|
+
a headless server, container, or adopter install stays lean. (The former PySide6 desktop console was
|
|
117
|
+
retired in favour of the web console — BACKLOG #103; PySide6 now backs only the opt-in `[harness]` test
|
|
118
|
+
tooling.) The **VS Code extension is a separate product, not on PyPI** (a VS Code extension is a
|
|
119
|
+
different ecosystem); see *VS Code extension & test harness* below for where to get it.
|
|
117
120
|
|
|
118
121
|
> **Verify before you install (supply chain).** Every release is built by a GitHub Actions workflow,
|
|
119
122
|
> Sigstore-signed, and carries SLSA build-provenance + PEP 740 attestations. Verify a downloaded
|
|
@@ -148,10 +151,11 @@ python -m messagefoundry serve --config samples/config --db messagefoundry.db --
|
|
|
148
151
|
# API on http://127.0.0.1:8765 — GET /connections, /messages, /stats, WS /ws/stats
|
|
149
152
|
```
|
|
150
153
|
|
|
151
|
-
Then open the admin console (
|
|
154
|
+
Then open the admin console in a browser (install the web console alongside the engine —
|
|
155
|
+
`pip install -e packaging/messagefoundry-webconsole` — and set `[api].serve_ui = true`):
|
|
152
156
|
|
|
153
157
|
```bash
|
|
154
|
-
|
|
158
|
+
# browse to http://127.0.0.1:8765/ui and sign in
|
|
155
159
|
```
|
|
156
160
|
|
|
157
161
|
### VS Code extension & test harness
|
|
@@ -13,11 +13,13 @@ Config modules define the message graph against this surface::
|
|
|
13
13
|
|
|
14
14
|
from messagefoundry.config.models import (
|
|
15
15
|
AckMode,
|
|
16
|
+
BatchConfig,
|
|
16
17
|
BuildupThreshold,
|
|
17
18
|
ContentType,
|
|
18
19
|
InternalErrorPolicy,
|
|
19
20
|
OrderingMode,
|
|
20
21
|
RetryPolicy,
|
|
22
|
+
SaturationThreshold,
|
|
21
23
|
StallThreshold,
|
|
22
24
|
)
|
|
23
25
|
from messagefoundry.config.active_environment import current_environment
|
|
@@ -33,6 +35,7 @@ from messagefoundry.config.wiring import (
|
|
|
33
35
|
DatabaseLookup,
|
|
34
36
|
DatabasePoll,
|
|
35
37
|
DatabaseRef,
|
|
38
|
+
Direct,
|
|
36
39
|
Email,
|
|
37
40
|
FhirLookup,
|
|
38
41
|
File,
|
|
@@ -54,14 +57,35 @@ from messagefoundry.config.wiring import (
|
|
|
54
57
|
Timer,
|
|
55
58
|
X12,
|
|
56
59
|
Send,
|
|
60
|
+
SetMeta,
|
|
57
61
|
SetState,
|
|
62
|
+
MessageTypeError,
|
|
58
63
|
code_set,
|
|
59
64
|
env,
|
|
60
65
|
handler,
|
|
61
66
|
inbound,
|
|
67
|
+
message_type_of,
|
|
62
68
|
outbound,
|
|
63
69
|
router,
|
|
64
70
|
)
|
|
71
|
+
from messagefoundry.actions import (
|
|
72
|
+
append_to_field,
|
|
73
|
+
arith_field,
|
|
74
|
+
code_lookup,
|
|
75
|
+
convert_case,
|
|
76
|
+
copy_field,
|
|
77
|
+
copy_segment,
|
|
78
|
+
date_diff_field,
|
|
79
|
+
delete_segment,
|
|
80
|
+
format_date,
|
|
81
|
+
pad_field,
|
|
82
|
+
replace_literal,
|
|
83
|
+
set_field,
|
|
84
|
+
split_field,
|
|
85
|
+
substring_field,
|
|
86
|
+
trim_field,
|
|
87
|
+
)
|
|
88
|
+
from messagefoundry.diagnostics import checkpoint, log_note
|
|
65
89
|
from messagefoundry.parsing.groups import SegmentGroup
|
|
66
90
|
from messagefoundry.parsing.message import Message, RawMessage
|
|
67
91
|
from messagefoundry.parsing.split import split_by_obr
|
|
@@ -74,7 +98,7 @@ from messagefoundry.timezone import (
|
|
|
74
98
|
to_zone,
|
|
75
99
|
)
|
|
76
100
|
|
|
77
|
-
__version__ = "0.
|
|
101
|
+
__version__ = "0.3.0"
|
|
78
102
|
|
|
79
103
|
__all__ = [
|
|
80
104
|
"Message",
|
|
@@ -83,6 +107,7 @@ __all__ = [
|
|
|
83
107
|
"split_by_obr",
|
|
84
108
|
"Send",
|
|
85
109
|
"SetState",
|
|
110
|
+
"SetMeta",
|
|
86
111
|
"state_get",
|
|
87
112
|
"response_get",
|
|
88
113
|
"MLLP",
|
|
@@ -94,6 +119,7 @@ __all__ = [
|
|
|
94
119
|
"Loopback",
|
|
95
120
|
"PassThrough",
|
|
96
121
|
"Rest",
|
|
122
|
+
"Direct",
|
|
97
123
|
"Email",
|
|
98
124
|
"SMTP",
|
|
99
125
|
"FHIR",
|
|
@@ -125,11 +151,32 @@ __all__ = [
|
|
|
125
151
|
"InternalErrorPolicy",
|
|
126
152
|
"BuildupThreshold",
|
|
127
153
|
"StallThreshold",
|
|
154
|
+
"SaturationThreshold",
|
|
155
|
+
"BatchConfig",
|
|
128
156
|
"ContentType",
|
|
129
157
|
"inbound",
|
|
130
158
|
"outbound",
|
|
131
159
|
"router",
|
|
132
160
|
"handler",
|
|
161
|
+
"message_type_of",
|
|
162
|
+
"MessageTypeError",
|
|
163
|
+
"copy_field",
|
|
164
|
+
"set_field",
|
|
165
|
+
"append_to_field",
|
|
166
|
+
"trim_field",
|
|
167
|
+
"substring_field",
|
|
168
|
+
"pad_field",
|
|
169
|
+
"replace_literal",
|
|
170
|
+
"convert_case",
|
|
171
|
+
"arith_field",
|
|
172
|
+
"format_date",
|
|
173
|
+
"date_diff_field",
|
|
174
|
+
"split_field",
|
|
175
|
+
"code_lookup",
|
|
176
|
+
"copy_segment",
|
|
177
|
+
"delete_segment",
|
|
178
|
+
"log_note",
|
|
179
|
+
"checkpoint",
|
|
133
180
|
"convert_hl7_timestamp",
|
|
134
181
|
"to_zone",
|
|
135
182
|
"parse_hl7_timestamp",
|