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