messagefoundry 0.2.5__tar.gz → 0.2.6__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.5 → messagefoundry-0.2.6}/.github/dependabot.yml +4 -1
- messagefoundry-0.2.6/.github/workflows/dependabot-auto-merge.yml +165 -0
- messagefoundry-0.2.6/.github/workflows/freethread-smoke.yml +95 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/release.yml +1 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/CHANGELOG.md +74 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/PKG-INFO +1 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/BACKLOG.md +209 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CONNECTIONS.md +23 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/PHI.md +8 -2
- messagefoundry-0.2.6/docs/SECURITY-REMEDIATION-LEDGER.md +84 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/SECURITY.md +12 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/SERVICE.md +21 -2
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/Secure_AI_Development_Standards.md +16 -0
- messagefoundry-0.2.6/docs/adr/0034-static-analysis-triage-policy-accepted-risk-register.md +80 -0
- messagefoundry-0.2.6/docs/adr/0035-ide-extension-workspace-trust-and-scope.md +102 -0
- messagefoundry-0.2.6/docs/adr/0036-windows-config-source-trust.md +107 -0
- messagefoundry-0.2.6/docs/adr/0037-multi-process-sharding-l3.md +106 -0
- messagefoundry-0.2.6/docs/adr/0038-internal-pass-through-connector.md +111 -0
- messagefoundry-0.2.6/docs/adr/0039-database-tier-sharding-l5.md +110 -0
- messagefoundry-0.2.6/docs/adr/0040-free-threaded-engine-support.md +92 -0
- messagefoundry-0.2.6/docs/adr/0041-load-path-attestation-and-change-attribution.md +219 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/README.md +8 -0
- messagefoundry-0.2.6/docs/design/dbshard.md +289 -0
- messagefoundry-0.2.6/docs/design/freethread.md +253 -0
- messagefoundry-0.2.6/docs/design/multiproc.md +53 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-L2-PHASE0-CHANGES.md +1 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/README.md +1 -0
- messagefoundry-0.2.6/harness/load/profiles/adt-fanout-stress.toml +116 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/reference.toml +48 -0
- messagefoundry-0.2.6/ide/.gitignore +7 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/.vscodeignore +4 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/README.md +21 -7
- messagefoundry-0.2.6/ide/media/icon-amber.svg +5 -0
- messagefoundry-0.2.6/ide/package-lock.json +5685 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/package.json +86 -12
- messagefoundry-0.2.6/ide/snippets/messagefoundry.code-snippets +145 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/aiPolicy.ts +51 -14
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/auth.ts +8 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/chat.ts +1 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/cli.ts +88 -17
- messagefoundry-0.2.6/ide/src/editorToolbar.ts +122 -0
- messagefoundry-0.2.6/ide/src/engineTarget.ts +44 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/extension.ts +15 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/home.ts +34 -11
- messagefoundry-0.2.6/ide/src/insertElement.ts +78 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/promote.ts +55 -13
- messagefoundry-0.2.6/ide/src/promoteTarget.ts +55 -0
- messagefoundry-0.2.6/ide/src/test/suite/ai-policy.test.ts +65 -0
- messagefoundry-0.2.6/ide/src/test/suite/editor-toolbar.test.ts +101 -0
- messagefoundry-0.2.6/ide/src/test/suite/engine-target.test.ts +43 -0
- messagefoundry-0.2.6/ide/src/test/suite/insert-element.test.ts +83 -0
- messagefoundry-0.2.6/ide/src/test/suite/promote-target.test.ts +85 -0
- messagefoundry-0.2.6/ide/src/test/suite/pythonpath.test.ts +79 -0
- messagefoundry-0.2.6/ide/src/test/suite/settings-scope.test.ts +37 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/testBench.ts +9 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/__init__.py +3 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/__main__.py +75 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/app.py +113 -21
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/auth_routes.py +21 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/field_authz.py +9 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/security.py +5 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/permissions.py +4 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/service.py +4 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/totp.py +8 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/checks.py +57 -2
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/connections_file.py +2 -0
- messagefoundry-0.2.6/messagefoundry/config/fingerprint.py +185 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/models.py +1 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/settings.py +23 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/wiring.py +410 -23
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/__main__.py +53 -2
- messagefoundry-0.2.6/messagefoundry/console/shards.py +224 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/shell.py +171 -33
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/logging_setup.py +5 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/dryrun.py +81 -13
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/engine.py +35 -1
- messagefoundry-0.2.6/messagefoundry/pipeline/sharding.py +94 -0
- messagefoundry-0.2.6/messagefoundry/pipeline/supervisor.py +330 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/wiring_runner.py +173 -25
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/redaction.py +37 -7
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/scaffold.py +46 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/base.py +30 -2
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/postgres.py +211 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/sqlserver.py +211 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/store.py +487 -27
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/__init__.py +1 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/database.py +74 -6
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/dicom.py +48 -4
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/fhir.py +42 -8
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/file.py +4 -1
- messagefoundry-0.2.6/messagefoundry/transports/passthrough.py +68 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/remotefile.py +57 -3
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/x12.py +12 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/security/crypto_inventory_check.py +7 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/service/install-service.ps1 +48 -1
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/conftest.py +28 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_api_reload.py +21 -0
- messagefoundry-0.2.6/tests/test_bootstrap_admin_perms.py +77 -0
- messagefoundry-0.2.6/tests/test_checks_lint.py +66 -0
- messagefoundry-0.2.6/tests/test_config_fingerprint.py +124 -0
- messagefoundry-0.2.6/tests/test_config_source_trust.py +214 -0
- messagefoundry-0.2.6/tests/test_connection_event_scope.py +255 -0
- messagefoundry-0.2.6/tests/test_console_shards.py +257 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_db_lookup.py +73 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_db_lookup_live_runner.py +5 -1
- messagefoundry-0.2.6/tests/test_dependabot_automerge_guardrails.py +101 -0
- messagefoundry-0.2.6/tests/test_dicom_scp_security.py +197 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dryrun.py +106 -4
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_fhir_transport.py +43 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_field_authz.py +2 -2
- messagefoundry-0.2.6/tests/test_field_authz_metadata.py +116 -0
- messagefoundry-0.2.6/tests/test_last_admin_guard.py +150 -0
- messagefoundry-0.2.6/tests/test_listener_tls_exposure.py +60 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_profile.py +37 -2
- messagefoundry-0.2.6/tests/test_nonhl7_ingress_size_cap.py +145 -0
- messagefoundry-0.2.6/tests/test_passthrough.py +674 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_postgres_store.py +194 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_redaction.py +51 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_remotefile_transport.py +79 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_scaffold.py +11 -0
- messagefoundry-0.2.6/tests/test_scaffold_requirements.py +54 -0
- messagefoundry-0.2.6/tests/test_sharding.py +218 -0
- messagefoundry-0.2.6/tests/test_sibling_helper_finder.py +98 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_sqlserver_store.py +194 -0
- messagefoundry-0.2.6/tests/test_store_once_deliver_many.py +285 -0
- messagefoundry-0.2.6/tests/test_supervisor.py +202 -0
- messagefoundry-0.2.6/tests/test_totp_window.py +75 -0
- messagefoundry-0.2.6/tests/test_transform_offloop.py +202 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_transports.py +23 -0
- messagefoundry-0.2.6/tests/test_ws_stats_revalidation.py +155 -0
- messagefoundry-0.2.6/tests/test_x12_source_ip_allowlist.py +170 -0
- messagefoundry-0.2.5/.github/workflows/dependabot-auto-merge.yml +0 -58
- messagefoundry-0.2.5/ide/.gitignore +0 -5
- messagefoundry-0.2.5/ide/package-lock.json +0 -2234
- messagefoundry-0.2.5/ide/snippets/messagefoundry.code-snippets +0 -37
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.claude/settings.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.dockerignore +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.gitattributes +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/CODEOWNERS +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/SECURITY.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/benchmark.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/ci.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/cla.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/codeql.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/dependabot-lock-resync.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/release-sync-check.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/scorecard.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/security.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/workflows/vuln-metrics.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.github/zizmor.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.gitignore +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.gitleaks.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.pre-commit-config.yaml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/.semgrep/messagefoundry.yml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/CLA.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/CLAUDE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/CODE_OF_CONDUCT.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/COMMERCIAL-LICENSE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/CONTRIBUTING.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/GOVERNANCE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/LICENSE +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/MAINTAINERS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/NOTICE +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/Dockerfile +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/compose.yaml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/k8s/secret.example.yaml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/k8s/statefulset.yaml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/locks/requirements-core.lock +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/locks/requirements-sqlserver.lock +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/secrets.env.example +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/smoke/Dockerfile +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/smoke/config/IB_Test_ADT.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docker/smoke/send_adt.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/ADOPTER-CI.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/AI.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/ARCHITECTURE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CI-QUALITY.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CLUSTERING.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CODESETS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CONFIGURATION.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/DEPLOY-SERVER-DB.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/DEPLOYMENT.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/DICOM.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/DUAL_LICENSING_PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/EARLY-ADOPTER-GUIDE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/FEATURE-MAP.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/HL7-VALIDATION.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/INSTALL-GUIDE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/LOAD-TESTING.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/MENTAL-MODEL.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/MessageFoundry-Mental-Model.docx +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/REMOTE-CONSOLE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/SUPPORT-POLICY.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/SYSTEM-REQUIREMENTS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/Secure_Development_Standards.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/TEE-RELAY.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/THROUGHPUT-IMPROVEMENTS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/USER-GUIDE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/WORKTREES.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0001-staged-pipeline-architecture.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0004-payload-agnostic-ingress.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0005-transform-accessible-state.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0006-external-data-lookups.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0007-gui-manageable-connections-toml.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0008-cluster-observability-api.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0009-run-scoped-context-providers.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0010-handler-callable-db-lookup.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0011-timer-scheduled-source.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0012-x12-edi-codec.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0013-increment-2-reingress-design.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0013-query-response-orchestration.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0014-alerting-rules-engine.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0016-synchronous-x12-request-response.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0017-consumer-deployment-model.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0020-protocol-diagnostic-capture.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0024-smart-backend-services-token-provider.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0025-dicom-codec-store-connectors.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0026-off-box-egress-update-check.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0028-base64-binary-carriage-codec.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0030-anonymization-test-harness-tee.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0031-startup-connection-fault-isolation.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0032-console-desktop-launch.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/0033-gui-manageable-code-sets.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/adr/TEMPLATE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-components.png +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-components.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-config-graph.png +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-config-graph.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-diagram.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-message-flow.png +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-message-flow.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-topology.png +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/architecture-topology.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/TUNING-BASELINE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/benchmarks/step-b-write-amplification.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/hl7-message-ordering-reference.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/message-ordering-design.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/MULTISESSION-PLAN-3.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/V0.2-LANE-HANDOFFS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/v0.1-EXECUTION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/v0.1-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/research/cloud-deployment-research-2026-06.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/research/config-ux-review.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/research/non-hl7-transform-components.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ADVISORY-PROCESS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-L3-ASSESSMENT.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/ASVS-L3-STATUS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/BEYOND-ASVS-L3.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/DEP-CVE-RUNBOOK.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/DEPENDENCY-METRICS.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/PHASE-8C-RBAC.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/PUBLISHING.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/RCA-TEMPLATE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/RELEASE-GATE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/REVIEW-2026-06-07.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SDS-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SECURITY-POSTURE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SOUP-REVIEW-2026-06-18.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/security/THREAT-MODEL.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/testing/VERIFY.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/testing/WIN2025-ACCEPTANCE.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/testing/WIN2025-TEST-MATRIX.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/docs/testing/WIN2025-TEST-PLAN.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/environments/dev.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/environments/prod.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/__main__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/__main__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/matrix.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/probes.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/acceptance/runner.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/compose.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/config/coverage.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/config/load/_shape.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/config/load/graph.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/file_panel.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/file_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/corpus.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/correlator.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/enginepoll.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/failover.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/failover_track.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/governor.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/ids.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/metrics.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profile.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/closed-loop.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/failover.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/fanout-baseline.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/malformed-load.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/smoke-sqlserver.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/smoke.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/soak.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/spike-burst.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/sustained-overload.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/profiles/writeamp.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/runner.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/sender.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/load/sink.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/mllp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/monitor.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/receive.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/__main__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/capture.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/compare.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/normalize.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/reconcile/report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/scenarios.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/send.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/harness/window.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/esbuild.js +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/media/hl7schema.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/media/icon.png +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/media/icon.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/alertEditor.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/codeSetEditor.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/codesetsTree.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/completion.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/connectionEditor.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/engineClient.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/generate.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/git.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/graphTree.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/newRoute.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/sourceControl.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/test/runTest.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/test/suite/chat.test.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/test/suite/extension.test.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/test/suite/index.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/src/validate.ts +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/tsconfig.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/ide/tsconfig.test.json +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/mefor.code-workspace +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/adr_analyze.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/_pools.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/hl7.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/keying.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/leak.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/rules.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/anon/surrogates.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/approvals.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/auth_models.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/metrics.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/models.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/api/tls.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/data/common_passwords.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/identity.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/ldap.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/notifications.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/passwords.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/policy.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/ratelimit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/auth/tokens.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/active_environment.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/ai_policy.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/alerts_edit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/code_sets.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/codeset_edit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/connections_edit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/db_lookup.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/environments.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/ingest_time.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/reference.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/response.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/run_context.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/state.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/config/tls_policy.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/_async.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/alerts_page.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/change_password.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/client.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/connections.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/dead_letters_page.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/delegates.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/event_log_page.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/alerts.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/connections.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/dead-letters.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/engine-status.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/log-search.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/logo-lockup.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/icons/users.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/login.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/mfa.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/reauth.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/resources/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/resources/app.ico +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/resources/app.svg +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/search.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/service_control.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/sessions.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/status.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/theme.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/users_page.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/console/widgets.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/_core.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/_hl7data.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/adt.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/all_types.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/bar.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/dft.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/documents.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/mdm.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/mfn.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/oml.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/orl.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/orm.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/oru.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/ras.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/rde.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/siu.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/generators/vxu.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/hl7schema.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/last_resort.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/binary.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/consistency.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/_deps.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/_util.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/dataset.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/errors.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/dicom/peek.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/fhir/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/fhir/_deps.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/fhir/errors.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/fhir/peek.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/fhir/resource.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/groups.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/message.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/peek.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/split.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/summary.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/tree.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/validate.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/delimiters.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/errors.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/interchange.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/message.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/parsing/x12/peek.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/alert_sinks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/alerts.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/cert_expiry.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/cluster.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/cluster_sqlserver.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/config_convergence.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/leader_tasks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/reference_sync.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/retention.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/security_notify.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/pipeline/state_convergence.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/py.typed +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/secrets_dpapi.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/audit_tee.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/crypto.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/store/keyprovider.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/timezone.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/base.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/dicomweb.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/framing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/loopback.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/mllp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/rest.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/signing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/smart.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/soap.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/tcp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/transports/timer.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/checks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/model.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/runner.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/messagefoundry/verify/smoke.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/packaging/messagefoundry-harness/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/packaging/messagefoundry-harness/pyproject.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/pyproject.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/requirements.lock +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_ACME_ADT.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_FHIR_INTAKE.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_IMMUNIZATION_VXU.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_PARTNER_X12.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_RADIOLOGY_SR.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/IB_RTE_ELIGIBILITY.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/adt.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/codesets/event_labels.csv +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/codesets/facility_mnemonics.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/config/connections.toml +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/consistency/validated_adt.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/dicom/generate_sr_sample.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/adt_a01.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/adt_batch.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/.gitattributes +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/adt_a01.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/adt_a03.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/omd_o03.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/messages/x12_270_eligibility.edi +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/results_relay/README.md +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/results_relay/codesets/test_codes.csv +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/results_relay/messages/oru_results.hl7 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/results_relay/results_relay.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/samples/send_mllp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/console/install-console-shortcut.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/console/pack_ico.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/console/uninstall-console-shortcut.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/dev/postgres.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/dev/sqlserver-docker.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/dev/sqlserver.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/hooks/block-blanket-git-stage.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/publish/check_release_sync.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/publish/publish-denylist.txt +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/publish/publish.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/publish/scan_forbidden.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/security/vuln_metrics.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/service/import-db-ca.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/service/uninstall-service.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/trace_icon.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/worktree/new.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/worktree/remove.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/worktree/session-context.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/scripts/worktree/spawn.ps1 +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/__main__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/__init__.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/_hl7data.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/_pools.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/hl7.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/keying.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/leak.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/rules.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/anon/surrogates.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/compare.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/correlate.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/hl7_fields.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/mefor_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/mllp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/relay.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tee/store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/_dicom_sample.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/_failover_load_support.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/_fhir_fixtures.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_acceptance_framework.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ack_capture_runner.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ack_sent_store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_active_environment.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ad_group_scope.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_admin_new_ip.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_adr_analyze.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ai_policy.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_alert_rules.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_alert_sinks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_alerts_edit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_alerts_rules_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_anon_core.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_anon_integration.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_anon_parity.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_api_auth.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_api_tls.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_approvals.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_asvs_phase0.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_audit_integrity.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_audit_offbox_tee.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_core.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_entry_hardening.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_hardening.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_service.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_session_lifecycle.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_auth_store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_binary_carriage.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cert_expiry.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_channel_rbac.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_checks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cli.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cluster.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cluster_failover_postgres.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cluster_failover_sqlserver.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cluster_graph_gating.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_cluster_lease.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_code_sets.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_codeset_edit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_event_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_event_emit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_event_outbound.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_event_store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connection_resilience.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connections_cli.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_connections_file.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_consistency.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_alerts.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_auth.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_client.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_dead_letters.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_event_log.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_hardening.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_icon.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_password.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_sessions.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_status.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_step_up.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_theme.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_users.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_console_widgets.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_database_connector_integration.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_database_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_delivery_settings.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dependency_boundaries.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dicom_codec.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dicom_scp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dicom_scu.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dicom_wiring.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_dicomweb.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_docs_runbooks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ed_documents.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ed_documents_e2e.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_egress_allowlist.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_environments.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_fhir_parsing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_fhir_resource.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_fifo_ordering.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_generate_cli.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_generated_adt.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_generators_core.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_generators_types.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_groups.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_compose.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_config.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_faults.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_file.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_monitor.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_harness_scenarios.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_hl7_core_features.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_hl7schema.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_inbound_bind.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_ingest_time.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_keyprovider.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_last_resort.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_leader_tasks.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_config.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_corpus.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_failover_postgres.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_failover_sqlserver.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_failover_unit.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_metrics.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_runner.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_sender.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_load_sink.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_logging.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_message.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_message_split.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_metrics_exporter.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_mfa.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_mllp_encoding_override.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_mllp_tls.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_operability_config.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_outbound_signing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_outbound_simulate.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_packaging.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_parse_tree.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_parsing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_payload_agnostic_ingress.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_reconcile_capture.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_reconcile_compare.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_reconcile_harness.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_reference_sets.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_reingress.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_response_capture.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_rest_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_retention.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_run_context.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_scan_forbidden.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_secrets_dpapi.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_security_notify.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_security_static.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_service_control.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_settings.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_smart_backend.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_soap_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_soap_wssecurity.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_sqlserver_coordinator.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_sqlserver_cursor_close.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_sqlserver_schema_init.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_staged_pipeline.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_startup_fault_isolation.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_stats_reset.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_step_up.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store_backend.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store_encryption.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store_file_hardening.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store_read_pool.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_store_ssl.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_summary.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_task_resilience.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tcp_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_cli.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_compare.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_correlate.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_hl7_fields.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_mefor_api.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_mllp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_relay.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_report.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tee_store.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_timer_source.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_timezone.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_tls_policy.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_totp.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_transform_state.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_verify.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_version.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_win2025_acceptance.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_wiring.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_wiring_engine.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_wiring_reload.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_wiring_serve.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_x12_parsing.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_x12_rte.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/tests/test_x12_transport.py +0 -0
- {messagefoundry-0.2.5 → messagefoundry-0.2.6}/uv.lock +0 -0
|
@@ -18,7 +18,10 @@ updates:
|
|
|
18
18
|
# behavior), so a real advisory fix still arrives immediately. Pairs with the auto-merge
|
|
19
19
|
# workflow: routine patches auto-merge AFTER aging; security patches auto-merge now.
|
|
20
20
|
cooldown:
|
|
21
|
-
|
|
21
|
+
# ~5-day aging window (DEPENDENCY-POSTURE-REVIEW.md) lengthens the malicious-fresh-publish
|
|
22
|
+
# dodge on the routine VERSION track; the SECURITY track still bypasses cooldown (Dependabot
|
|
23
|
+
# design), now backstopped by the published-GHSA gate in dependabot-auto-merge.yml (SEC-007 #2).
|
|
24
|
+
default-days: 5
|
|
22
25
|
semver-major-days: 7
|
|
23
26
|
groups:
|
|
24
27
|
# Version-update grouping (applies-to defaults to version-updates).
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
name: Dependabot auto-merge
|
|
2
|
+
|
|
3
|
+
# Scoped auto-merge for Dependabot PRs (A4 of the dependency fast-response plan).
|
|
4
|
+
#
|
|
5
|
+
# SAFE because main's required status checks are the gate: the full pytest suite, pip-audit, the
|
|
6
|
+
# DEP-1 lock-sync check (incl. the A3 lock-resync commit), bandit/semgrep/gitleaks all must pass
|
|
7
|
+
# before GitHub completes the merge. A bad bump turns CI red and never merges — auto-merge only
|
|
8
|
+
# removes the human-latency on the safe, common case, not the safety net.
|
|
9
|
+
#
|
|
10
|
+
# IN SCOPE (auto-merged):
|
|
11
|
+
# - any PATCH update (incl. security patches — most security fixes are patches)
|
|
12
|
+
# - MINOR updates of DEV-only dependencies
|
|
13
|
+
# OUT OF SCOPE (left for human review, surfaced same-day by the daily security cron + alerts):
|
|
14
|
+
# - MINOR/MAJOR updates of runtime deps, and ALL MAJOR updates
|
|
15
|
+
#
|
|
16
|
+
# Fresh-release supply-chain poisoning is handled upstream by the dependabot.yml `cooldown`
|
|
17
|
+
# (routine updates age before a PR opens); SECURITY updates bypass cooldown by design, so a real
|
|
18
|
+
# advisory fix still arrives immediately and (if a patch) auto-merges.
|
|
19
|
+
#
|
|
20
|
+
# SECURITY-TRACK GUARDRAILS (DEPENDENCY-POSTURE-REVIEW.md #2 and #3 — close SEC-007, CWE-829):
|
|
21
|
+
# #3 DENY-LIST — the auth/token/crypto stack (cryptography, argon2-cffi, fastapi, …) is NEVER
|
|
22
|
+
# auto-merged, not even for a patch: any such dep routes the PR to MANUAL review. A grouped
|
|
23
|
+
# PR that includes ANY denied dep is denied WHOLE (fail-safe — never partial-merge a group).
|
|
24
|
+
# #2 PUBLISHED-GHSA GATE — a SECURITY-track PR (which bypasses the cooldown by Dependabot design)
|
|
25
|
+
# auto-merges ONLY when a real, published, non-withdrawn advisory is confirmed against the
|
|
26
|
+
# dependency's PREVIOUS version (the axios-1.14.1 pattern). The advisory lookup FAILS CLOSED:
|
|
27
|
+
# a rate-limit/API error or no-matching-advisory routes to manual review, never auto-merge.
|
|
28
|
+
# The non-security VERSION track keeps its cooldown-aged auto-merge unchanged (already aged by
|
|
29
|
+
# dependabot.yml, so it does not need the GHSA gate).
|
|
30
|
+
#
|
|
31
|
+
# RESIDUAL ACCEPTED RISK: a malicious patch that BOTH rides a real concurrent published advisory
|
|
32
|
+
# AND is not on the deny-list would still auto-merge. The deny-list shields the highest-value
|
|
33
|
+
# (auth/crypto) deps unconditionally; the GHSA gate blocks the no-advisory fast-publish poison on
|
|
34
|
+
# the security track; main's required CI (pip-audit/bandit/tests/lock-sync) backstops both.
|
|
35
|
+
#
|
|
36
|
+
# Why `pull_request` (not pull_request_target): a Dependabot `pull_request` run gets a read-only
|
|
37
|
+
# GITHUB_TOKEN by default, which the `permissions:` block below elevates to exactly what the merge
|
|
38
|
+
# API needs — no untrusted-code-with-secrets exposure, no GitHub App required. This is the pattern
|
|
39
|
+
# GitHub documents for Dependabot auto-merge.
|
|
40
|
+
|
|
41
|
+
on: pull_request
|
|
42
|
+
|
|
43
|
+
permissions:
|
|
44
|
+
contents: write # complete the merge
|
|
45
|
+
pull-requests: write # enable auto-merge on the PR
|
|
46
|
+
security-events: read # read Dependabot alerts for the published-GHSA gate (#2)
|
|
47
|
+
|
|
48
|
+
concurrency:
|
|
49
|
+
group: dependabot-automerge-${{ github.event.pull_request.number }}
|
|
50
|
+
cancel-in-progress: false
|
|
51
|
+
|
|
52
|
+
jobs:
|
|
53
|
+
auto-merge:
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
# Only Dependabot's own PRs. pull_request.user.login is the immutable PR author, so an A3
|
|
56
|
+
# lock-resync `synchronize` (pushed by the App) still satisfies this — the author stays
|
|
57
|
+
# dependabot[bot] even though the triggering actor is the App.
|
|
58
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
59
|
+
timeout-minutes: 10
|
|
60
|
+
steps:
|
|
61
|
+
- name: Fetch Dependabot metadata
|
|
62
|
+
id: meta
|
|
63
|
+
uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.0
|
|
64
|
+
with:
|
|
65
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
66
|
+
|
|
67
|
+
# Guardrail #3 (DEPENDENCY-POSTURE-REVIEW.md): the auth/token/crypto stack NEVER auto-merges,
|
|
68
|
+
# not even a patch. dependency-names is comma-separated for grouped PRs; we deny the WHOLE
|
|
69
|
+
# group if ANY token matches (fail-safe — never partial-merge a group). Exact token match on
|
|
70
|
+
# the comma-split names (not a naive substring) so 'cffi' does not match 'argon2-cffi-bindings'
|
|
71
|
+
# and vice-versa.
|
|
72
|
+
- name: Reject security-critical deps (deny-list)
|
|
73
|
+
id: denylist
|
|
74
|
+
env:
|
|
75
|
+
DEP_NAMES: ${{ steps.meta.outputs.dependency-names }}
|
|
76
|
+
run: |
|
|
77
|
+
# Single source of truth for the security-critical deny-list.
|
|
78
|
+
denylist="cryptography argon2-cffi argon2-cffi-bindings paramiko ldap3 pyspnego \
|
|
79
|
+
fastapi starlette uvicorn pydantic pydantic-core python-jose pyjwt passlib bcrypt cffi"
|
|
80
|
+
deny=false
|
|
81
|
+
IFS=',' read -ra names <<< "$DEP_NAMES"
|
|
82
|
+
for raw in "${names[@]}"; do
|
|
83
|
+
# trim surrounding whitespace and lowercase
|
|
84
|
+
name="$(echo "$raw" | tr '[:upper:]' '[:lower:]' | xargs)"
|
|
85
|
+
[ -z "$name" ] && continue
|
|
86
|
+
for crit in $denylist; do
|
|
87
|
+
if [ "$name" = "$crit" ]; then
|
|
88
|
+
echo "::notice::'$name' is a security-critical dependency — routing to manual review (no auto-merge)."
|
|
89
|
+
deny=true
|
|
90
|
+
fi
|
|
91
|
+
done
|
|
92
|
+
done
|
|
93
|
+
echo "deny=$deny" >> "$GITHUB_OUTPUT"
|
|
94
|
+
|
|
95
|
+
# Guardrail #2 (DEPENDENCY-POSTURE-REVIEW.md): a SECURITY-track PR auto-merges ONLY when a
|
|
96
|
+
# real, published, non-withdrawn advisory covers the dependency's PREVIOUS version. The
|
|
97
|
+
# security track is detected by Dependabot's `dependency-group` (python-security/ide-security)
|
|
98
|
+
# — a security-update group — falling back to a present-but-empty group meaning version track.
|
|
99
|
+
# The advisory lookup FAILS CLOSED: any error or no-match leaves advisory_ok=false.
|
|
100
|
+
- name: Verify a published advisory backs the security track
|
|
101
|
+
id: ghsa
|
|
102
|
+
env:
|
|
103
|
+
DEP_NAMES: ${{ steps.meta.outputs.dependency-names }}
|
|
104
|
+
DEP_GROUP: ${{ steps.meta.outputs.dependency-group }}
|
|
105
|
+
PREV_VERSION: ${{ steps.meta.outputs.previous-version }}
|
|
106
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
107
|
+
run: |
|
|
108
|
+
set -u
|
|
109
|
+
# Is this the security track? Dependabot tags security-update grouped PRs with a
|
|
110
|
+
# *-security dependency-group. A non-security (version) PR has no security group.
|
|
111
|
+
is_security=false
|
|
112
|
+
case "$DEP_GROUP" in
|
|
113
|
+
*security*) is_security=true ;;
|
|
114
|
+
esac
|
|
115
|
+
|
|
116
|
+
if [ "$is_security" != "true" ]; then
|
|
117
|
+
# Version track: already cooldown-aged by dependabot.yml — the GHSA gate does not apply.
|
|
118
|
+
echo "security_track=false" >> "$GITHUB_OUTPUT"
|
|
119
|
+
echo "advisory_ok=false" >> "$GITHUB_OUTPUT"
|
|
120
|
+
exit 0
|
|
121
|
+
fi
|
|
122
|
+
echo "security_track=true" >> "$GITHUB_OUTPUT"
|
|
123
|
+
|
|
124
|
+
# Require at least one matching published (non-withdrawn) advisory for EVERY named dep at
|
|
125
|
+
# the previous version. Query the global advisories endpoint (ecosystem pip — Python
|
|
126
|
+
# advisories are pip-keyed). Fail closed on any error.
|
|
127
|
+
advisory_ok=true
|
|
128
|
+
IFS=',' read -ra names <<< "$DEP_NAMES"
|
|
129
|
+
for raw in "${names[@]}"; do
|
|
130
|
+
name="$(echo "$raw" | tr '[:upper:]' '[:lower:]' | xargs)"
|
|
131
|
+
[ -z "$name" ] && continue
|
|
132
|
+
count="$(gh api -X GET /advisories \
|
|
133
|
+
-f ecosystem=pip \
|
|
134
|
+
-f affects="${name}@${PREV_VERSION}" \
|
|
135
|
+
--jq '[.[] | select(.withdrawn_at == null)] | length' 2>/dev/null || echo "ERR")"
|
|
136
|
+
if [ "$count" = "ERR" ] || [ -z "$count" ]; then
|
|
137
|
+
echo "::warning::advisory lookup failed for '$name' — failing closed (manual review)."
|
|
138
|
+
advisory_ok=false
|
|
139
|
+
break
|
|
140
|
+
fi
|
|
141
|
+
if [ "$count" -lt 1 ]; then
|
|
142
|
+
echo "::warning::no published advisory covers '${name}@${PREV_VERSION}' — failing closed (manual review)."
|
|
143
|
+
advisory_ok=false
|
|
144
|
+
break
|
|
145
|
+
fi
|
|
146
|
+
echo "::notice::published advisory confirmed for '${name}@${PREV_VERSION}'."
|
|
147
|
+
done
|
|
148
|
+
echo "advisory_ok=$advisory_ok" >> "$GITHUB_OUTPUT"
|
|
149
|
+
|
|
150
|
+
- name: Enable auto-merge for in-scope updates
|
|
151
|
+
# Auto-merge only when: (a) the update is an in-scope type (any patch, or a dev-only minor),
|
|
152
|
+
# AND (b) no security-critical dep is involved (deny-list #3), AND (c) for the SECURITY track
|
|
153
|
+
# ONLY, a published advisory is confirmed (#2). A non-security (version-track) patch keeps its
|
|
154
|
+
# cooldown-aged auto-merge — advisory_ok is not required there.
|
|
155
|
+
if: >-
|
|
156
|
+
steps.denylist.outputs.deny != 'true' &&
|
|
157
|
+
(steps.ghsa.outputs.security_track != 'true' ||
|
|
158
|
+
steps.ghsa.outputs.advisory_ok == 'true') &&
|
|
159
|
+
(steps.meta.outputs.update-type == 'version-update:semver-patch' ||
|
|
160
|
+
(steps.meta.outputs.update-type == 'version-update:semver-minor' &&
|
|
161
|
+
steps.meta.outputs.dependency-type == 'direct:development'))
|
|
162
|
+
run: gh pr merge --auto --squash "$PR_URL"
|
|
163
|
+
env:
|
|
164
|
+
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
165
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Free-threaded (no-GIL / PEP 703, cp314t) engine canary — INFORMATIONAL, NEVER BLOCKING.
|
|
2
|
+
#
|
|
3
|
+
# This is an EXPLORATORY signal (see docs/design/freethread.md), not a supported config. The engine
|
|
4
|
+
# ships on the GIL build; this leg only tells us, on a weekly schedule, whether the engine still
|
|
5
|
+
# installs + imports + smoke-tests under the free-threaded 3.14t interpreter, so a regression in a
|
|
6
|
+
# dependency's cp314t wheel surfaces early. It is an early-warning tripwire, not a per-PR gate —
|
|
7
|
+
# hence weekly (+ manual dispatch), not on every push/PR.
|
|
8
|
+
#
|
|
9
|
+
# IT MUST NEVER BLOCK A MERGE:
|
|
10
|
+
# * It is a SEPARATE workflow, deliberately not part of ci.yml's `ci-gate` (the required "CI gate"
|
|
11
|
+
# context). It is not in any `needs:` list a PR waits on.
|
|
12
|
+
# * The job AND its fragile steps are `continue-on-error: true`, so a red canary is an informational
|
|
13
|
+
# red check, never a failed required one.
|
|
14
|
+
# * DO NOT add the "freethread smoke (3.14t)" context to branch-protection required checks. The
|
|
15
|
+
# required set is the `test` matrix + bandit + pip-audit + cla — keep it that way.
|
|
16
|
+
#
|
|
17
|
+
# If actions/setup-python ever cannot provision 3.14t on the runner, the continue-on-error job simply
|
|
18
|
+
# goes red as information; nothing downstream is gated on it.
|
|
19
|
+
|
|
20
|
+
name: freethread smoke
|
|
21
|
+
|
|
22
|
+
on:
|
|
23
|
+
# Weekly early-warning tripwire (Mondays 06:00 UTC) + manual dispatch. NOT per-PR/per-push: this is
|
|
24
|
+
# an informational cp314t-readiness signal, not a gate, so it doesn't need to run on every change.
|
|
25
|
+
schedule:
|
|
26
|
+
- cron: "0 6 * * 1"
|
|
27
|
+
workflow_dispatch:
|
|
28
|
+
|
|
29
|
+
concurrency:
|
|
30
|
+
group: freethread-${{ github.ref }}
|
|
31
|
+
cancel-in-progress: true
|
|
32
|
+
|
|
33
|
+
# Read-only: install deps + run a pure test subset. No gh writes, no secrets.
|
|
34
|
+
permissions:
|
|
35
|
+
contents: read
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
freethread:
|
|
39
|
+
name: freethread smoke (3.14t)
|
|
40
|
+
# The whole job is non-blocking: a failure here is reported but never fails the workflow's
|
|
41
|
+
# required-context resolution, so it cannot block a PR even if it is ever (mis)added to protection.
|
|
42
|
+
continue-on-error: true
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
timeout-minutes: 15
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
47
|
+
with:
|
|
48
|
+
persist-credentials: false # read-only smoke job; don't persist the token (zizmor: artipacked)
|
|
49
|
+
|
|
50
|
+
# Provision the FREE-THREADED 3.14 interpreter (distinct cp314t ABI). `freethreaded: true` +
|
|
51
|
+
# the `t` suffix both select it; allow-prereleases covers the 3.14 line. This step is allowed to
|
|
52
|
+
# fail (continue-on-error) so a runner that cannot yet provide 3.14t never reds a blocking check.
|
|
53
|
+
- name: Set up free-threaded Python 3.14t
|
|
54
|
+
id: setup
|
|
55
|
+
continue-on-error: true
|
|
56
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.14t"
|
|
59
|
+
freethreaded: true
|
|
60
|
+
allow-prereleases: true
|
|
61
|
+
|
|
62
|
+
# Install the CORE engine only (no Qt/SQL/DICOM/SFTP extras), so the smoke exercises the minimal
|
|
63
|
+
# free-threaded-relevant compiled surface: pydantic-core, cryptography, and the argon2-cffi + cffi
|
|
64
|
+
# chain. --prerelease handling: pip resolves the cp314t wheels; the cffi 2.0 chain may need a
|
|
65
|
+
# prerelease allowance depending on the index state at run time.
|
|
66
|
+
- name: Install the core engine (dev extra; no compiled-heavy extras)
|
|
67
|
+
if: steps.setup.outcome == 'success'
|
|
68
|
+
continue-on-error: true
|
|
69
|
+
run: |
|
|
70
|
+
python -m pip install --upgrade pip
|
|
71
|
+
pip install -e ".[dev]"
|
|
72
|
+
|
|
73
|
+
# Prove we are actually on the no-GIL interpreter — an incompatible C extension importing can make
|
|
74
|
+
# CPython silently RE-ENABLE the GIL, which would make a "green" canary meaningless. Fail (softly)
|
|
75
|
+
# if the GIL is back on.
|
|
76
|
+
- name: Assert the GIL is actually disabled
|
|
77
|
+
if: steps.setup.outcome == 'success'
|
|
78
|
+
continue-on-error: true
|
|
79
|
+
run: |
|
|
80
|
+
python - <<'PY'
|
|
81
|
+
import sys
|
|
82
|
+
gil_on = sys._is_gil_enabled()
|
|
83
|
+
print(f"sys._is_gil_enabled() = {gil_on}")
|
|
84
|
+
print(f"sys.version = {sys.version}")
|
|
85
|
+
if gil_on:
|
|
86
|
+
raise SystemExit("GIL is ENABLED on the 3.14t build — an extension likely forced it back on")
|
|
87
|
+
PY
|
|
88
|
+
|
|
89
|
+
# Run a PURE, fast subset under 3.14t: parsing (pure HL7 library) + config wiring. This is the
|
|
90
|
+
# cheap install-and-import + smoke signal, NOT the perf experiment (that lives in the load harness,
|
|
91
|
+
# run manually — see docs/LOAD-TESTING.md / docs/design/freethread.md §4).
|
|
92
|
+
- name: Smoke a pure test subset under 3.14t
|
|
93
|
+
if: steps.setup.outcome == 'success'
|
|
94
|
+
continue-on-error: true
|
|
95
|
+
run: pytest -q tests/test_parsing.py tests/test_wiring.py
|
|
@@ -117,7 +117,7 @@ jobs:
|
|
|
117
117
|
# `github.event.repository.private` is populated on the tag-push event.
|
|
118
118
|
- name: Attest build provenance (SLSA) for sdist + wheel
|
|
119
119
|
if: ${{ !github.event.repository.private }}
|
|
120
|
-
uses: actions/attest-build-provenance@
|
|
120
|
+
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
|
|
121
121
|
with:
|
|
122
122
|
subject-path: "dist/*.tar.gz, dist/*.whl"
|
|
123
123
|
|
|
@@ -6,6 +6,78 @@ All notable changes to MessageFoundry are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.6] — 2026-06-27 — Early Access
|
|
10
|
+
|
|
11
|
+
A large release: the **throughput-maximization build** (high-fan-out store-once, multi-process
|
|
12
|
+
sharding, and internal pass-through connectors with full Postgres/SQL Server parity), a console +
|
|
13
|
+
IDE **"fleet" tier** for managing multiple engine shards, and a broad **security-hardening wave**
|
|
14
|
+
from the 2026-06 audit.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **Multi-process sharding (L3).** An inbound connection can carry an optional `shard` tag;
|
|
18
|
+
`serve --shard <id>` runs an engine process that owns only that shard's inbound connections
|
|
19
|
+
(outbound + routing/handlers are shared), and a new `supervise` command spawns, monitors, and
|
|
20
|
+
restarts one `serve` subprocess per shard (each with its own SQLite db file and API port).
|
|
21
|
+
Per-connection sharding parallelizes intake across CPU cores; per-channel FIFO is preserved
|
|
22
|
+
within a shard. (#584)
|
|
23
|
+
- **Internal pass-through (PT) connectors (L4).** A Handler may `Send` into an internal
|
|
24
|
+
`PassThrough()` inbound that carries its own router; the message re-ingresses as a new
|
|
25
|
+
content-addressed child message inside the same transaction (at-least-once, count-and-log, and
|
|
26
|
+
single-finalizer authority all preserved), bounded by a correlation-depth loop guard. This
|
|
27
|
+
generalizes the ADR 0013 re-ingress primitive. Implemented on **all three store backends** —
|
|
28
|
+
SQLite, plus full **Postgres and SQL Server parity** for the atomic re-ingress. (#585, #590)
|
|
29
|
+
- **Store-once-deliver-many (L2b).** A high-fan-out outbound now stores the message body **once**
|
|
30
|
+
(content-addressed, reference-counted `shared_body`) instead of once per destination;
|
|
31
|
+
single-destination delivery is unchanged (inline, byte-identical). (#580)
|
|
32
|
+
- **Fleet tier — manage multiple engine shards.** The console can register and switch between
|
|
33
|
+
multiple engine endpoints (#582); the IDE promote flow can target a specific engine
|
|
34
|
+
instance/shard (#583).
|
|
35
|
+
- **IDE editor productivity.** A MessageFoundry build toolbar + CodeLens on config files (#593),
|
|
36
|
+
an "Insert Element" quick-pick with expanded transform-idiom snippets (#595), a Wizards group
|
|
37
|
+
with collapsible Home groups (#578), and a `vsce` VSIX packaging script (#577).
|
|
38
|
+
- **Config-fingerprint attestation.** Config reloads record a config fingerprint in the reload
|
|
39
|
+
audit (ADR 0041 load-path attestation). (#597)
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
- **Faster fan-out.** On a fan-out the engine parses the per-message payload once where it is
|
|
43
|
+
value-identical, avoiding redundant re-parsing. (#581)
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
- **Fail-fast pass-through guard.** A graph with a PT inbound on a store backend that does not
|
|
47
|
+
implement PT re-ingress is now rejected at startup *and* on reload/dry-run (a clear configuration
|
|
48
|
+
error, HTTP 422) — before any listener binds — instead of failing at the first `Send`. (#587)
|
|
49
|
+
- **Auth hardening.** Tighter field-level authorization, a last-admin guard, a corrected TOTP
|
|
50
|
+
window, and rate-limit documentation fixes. (#563)
|
|
51
|
+
- **API / store.** Channel-scoped event and topology reads, faster WebSocket session revocation,
|
|
52
|
+
and atomic bootstrap-secret creation. (#565)
|
|
53
|
+
- **IDE.** Workspace-trust gating, machine-scoped promote targets, and a fail-closed AI-assist
|
|
54
|
+
policy (SEC-004/005/022). (#561)
|
|
55
|
+
|
|
56
|
+
### Security
|
|
57
|
+
The 2026-06 security-audit remediation wave (in-repo remediation ledger, #566):
|
|
58
|
+
- **Transport TLS / SSRF / injection:** FTPS TLS verification, an FHIR-path SSRF guard, and
|
|
59
|
+
read-only enforcement on `db_lookup` (SEC-001/010/009). (#560)
|
|
60
|
+
- **Listener hardening:** a cleartext-bind guard plus source-IP allowlist for the raw-TCP/X12
|
|
61
|
+
listeners. (#558)
|
|
62
|
+
- **DICOM:** fail-closed C-STORE SCP peer controls (calling-AE + peer-IP) and a passphrase-key
|
|
63
|
+
callback (SEC-012/016). (#559)
|
|
64
|
+
- **Pipeline:** off-event-loop router/transform execution and a non-HL7 ingress size cap
|
|
65
|
+
(SEC-013/017). (#562)
|
|
66
|
+
- **Config trust:** enforce Windows config-source trust and scope the sibling-helper finder
|
|
67
|
+
(SEC-003/019). (#564)
|
|
68
|
+
- **PHI redaction:** narrowed a free-text PHI residual and added an advisory raise-fstring lint
|
|
69
|
+
(SEC-023). (#557)
|
|
70
|
+
- **Supply chain:** Dependabot security-track guardrails and adopter-scaffold hash-pinning. (#556)
|
|
71
|
+
- **Static analysis:** resolved two real CodeQL findings (webview HTML attribute escaping;
|
|
72
|
+
owner-only file-delivery fallback) (#554) and adopted a CodeQL triage policy + accepted-risk
|
|
73
|
+
register (ADR 0034). (#567)
|
|
74
|
+
|
|
75
|
+
### Docs
|
|
76
|
+
- ADRs 0037–0040 record the throughput-build decisions (multi-process sharding, pass-through
|
|
77
|
+
connectors, the shelved L5 DB-sharding design, and the not-adopted free-threading assessment)
|
|
78
|
+
(#591); design notes for L5 DB-sharding (#588) and cp314t readiness (#589); and the Secure
|
|
79
|
+
AI-Assisted Development Standards updated with the audit lessons (#576).
|
|
80
|
+
|
|
9
81
|
## [0.2.5] — 2026-06-26 — Early Access
|
|
10
82
|
|
|
11
83
|
A bug-fix release hardening SQL Server cluster cold-start.
|
|
@@ -203,7 +275,8 @@ tests, but the external code review + penetration test (the bar for a security-c
|
|
|
203
275
|
- Releases are built, SBOM'd (CycloneDX), and signed with [Sigstore](https://www.sigstore.dev/) — see the
|
|
204
276
|
`release` workflow.
|
|
205
277
|
|
|
206
|
-
[Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.
|
|
278
|
+
[Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.6...HEAD
|
|
279
|
+
[0.2.6]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.5...v0.2.6
|
|
207
280
|
[0.2.5]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.4...v0.2.5
|
|
208
281
|
[0.2.4]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.3...v0.2.4
|
|
209
282
|
[0.2.3]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.2...v0.2.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: messagefoundry
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: Open-source healthcare integration engine — route, transform, and validate messages across many formats and connection types
|
|
5
5
|
License-Expression: AGPL-3.0-or-later
|
|
6
6
|
License-File: LICENSE
|
|
@@ -2208,6 +2208,215 @@ connection-event visibility. **Trigger:** a pilot/adopter asks for a connection-
|
|
|
2208
2208
|
connect?") — confirmed against `transports/mllp.py`, `transports/tcp.py`, and the `wiring_runner.py` delivery
|
|
2209
2209
|
loop; relationship to the #16 Corepoint event-log gap analysis (2026-06-17) + ADRs 0020/0021.
|
|
2210
2210
|
|
|
2211
|
+
## 48. IDE "Insert Element" — grow the scaffold-snippet library + a most-used-idiom quick-pick (P2)
|
|
2212
|
+
|
|
2213
|
+
**The code-first answer to Corepoint's Action List "Add Action" palette.** Handlers and Routers are the core
|
|
2214
|
+
authoring surface; developers repeatedly drop the same ~12–15 idioms (field copy, format, date convert, code
|
|
2215
|
+
lookup, loop over repetitions, decision branch, `db_lookup`). Today's IDE scaffold snippets
|
|
2216
|
+
(`meforinbound`/`meforoutbound`/`meforrouter`/`meforhandler`) jump-start the *module* frame but not the in-body
|
|
2217
|
+
idioms — authors hand-type or hunt the docs. Grounded in a catalog of Corepoint's **71 Action List actions**
|
|
2218
|
+
(2026-06-27) mapped to our model: the pure `have`/`snippet` ones are exactly the high-frequency transform building
|
|
2219
|
+
blocks (`ItemCopy`/`ItemFormat`/`ItemTransformDate`/`ItemCodeLookup`/`ForEach`/`If-Else`/`ChooseFrom`/`Filter`/
|
|
2220
|
+
`MsgSend`/`MsgPass`).
|
|
2221
|
+
|
|
2222
|
+
**Proposed shape (code-first — NOT #26's declined visual/declarative builder):**
|
|
2223
|
+
1. **Expand `ide/snippets/messagefoundry.code-snippets`** with ~12–15 *body-level* snippets that drop real,
|
|
2224
|
+
editable Python inside a handler — e.g. `ItemCopy` → `msg.set("${1:dest}", msg.field("${2:src}"))`;
|
|
2225
|
+
ForEach-reps → `for rep in msg.repetitions("${1:path}"):`; code lookup → `code_set("${1:name}").get(...)`;
|
|
2226
|
+
date → `convert_hl7_timestamp(...)`; a `db_lookup(...)` template; `return Send("${1:outbound}", msg)`.
|
|
2227
|
+
2. **Add a `messagefoundry.insertElement` Command-Palette quick-pick** grouped by category (Field / Decision /
|
|
2228
|
+
Loop / Lookup / Date / Data source / Send), each choice inserting its snippet via `editor.insertSnippet()`.
|
|
2229
|
+
|
|
2230
|
+
Lean on the existing HL7-path completion (unchanged); assume handler-body context (the `newHandler`/`newRouter`
|
|
2231
|
+
scaffolds still own the outer frame). No new editor toolbar or sidebar — one Command-Palette command, keybindable.
|
|
2232
|
+
|
|
2233
|
+
**Why this is not #26:** snippets drop **editable Python**, not declarative "configure-a-step" boxes — a typing
|
|
2234
|
+
accelerator, not a builder. Reaffirms the code-first identity (the strategic failure mode #26 guards against).
|
|
2235
|
+
**Effort:** S–M (snippets + one command + offscreen tests + `ide/README.md`). **Source:** Corepoint Action List
|
|
2236
|
+
"Add Action" palette review (2026-06-27) + the 71-action catalog / code-first mapping.
|
|
2237
|
+
|
|
2238
|
+
**Status / follow-up:** shipped in **#595** (14 body-level idiom snippets + a `messagefoundry.insertElement`
|
|
2239
|
+
quick-pick that reads the same snippets file — one source of truth). Optional follow-up: also surface
|
|
2240
|
+
*Insert Element…* in the editor-title MessageFoundry dropdown (#593) for discoverability — #595 ships it
|
|
2241
|
+
Command-Palette-only by design.
|
|
2242
|
+
|
|
2243
|
+
## 49. Export-to-Support diagnostic bundle — PHI-safe (P3, on-trigger)
|
|
2244
|
+
|
|
2245
|
+
Corepoint's Console exports logs + config + version info for support escalation. We have no equivalent.
|
|
2246
|
+
**Proposed shape:** a `messagefoundry support-bundle` CLI (and/or admin-gated, step-up `POST /support/bundle`)
|
|
2247
|
+
that collects the engine version/uptime, a **secret-free** config summary (inbound/outbound/router/handler
|
|
2248
|
+
counts), a `GET /status` snapshot (DB size, disk-free, row counts — already exposed), and recent **app-log**
|
|
2249
|
+
lines, run through the existing PHI redaction before zipping. **No raw message bodies.** Good for the OSS support
|
|
2250
|
+
story (a one-attach bundle for a GitHub issue). **Why on-trigger:** nice-to-have; pull forward when an adopter
|
|
2251
|
+
must escalate a production issue. **Source:** Corepoint Service-menu + connection-log "Export to Support" review
|
|
2252
|
+
(2026-06-27).
|
|
2253
|
+
|
|
2254
|
+
## 50. Operational-health gaps: app-log disk metering + a message-stall alert rule (P3)
|
|
2255
|
+
|
|
2256
|
+
Most of Corepoint's Monitor Health/Metrics surface is **already built** — `GET /status` carries DB `size_bytes` +
|
|
2257
|
+
`disk_free_bytes`; the Connections dashboard carries per-connection `queue_depth`/`idle`/`delivered_age`/`errored`;
|
|
2258
|
+
the ADR 0014 alert engine already ships `queue_buildup`/`connection_stopped` rules. Two small deltas remain:
|
|
2259
|
+
- **App-log storage metering** — meter the app-log directory's disk usage (`shutil.disk_usage` / `pathlib.stat`)
|
|
2260
|
+
and surface it in `GET /status` alongside the DB size, so operators see log-disk growth (Corepoint's
|
|
2261
|
+
"Application Log Storage" health tile). Distinct from retention **#34** (which prunes the *store*).
|
|
2262
|
+
- **Message-stall alert rule** — a first-class alert when a connection's oldest-undelivered age (`delivered_age`)
|
|
2263
|
+
crosses a per-connection threshold (Corepoint's "Max Message Stall"). The metric already exists; this just binds
|
|
2264
|
+
it as an ADR 0014 rule.
|
|
2265
|
+
|
|
2266
|
+
**Effort:** S each. **Source:** Corepoint Monitor Health + Metrics review (2026-06-27).
|
|
2267
|
+
|
|
2268
|
+
## 51. Message-content search — HL7 field-path / raw-content matching in Log Search (P3, needs ADR)
|
|
2269
|
+
|
|
2270
|
+
Corepoint operators search the message store by **content** ("PID-3 = A123456", "OBX-3 contains K7"). Our Log
|
|
2271
|
+
Search filters on metadata (status / time / channel / control-id) plus the per-message parse tree, but not by
|
|
2272
|
+
field-path/content **across** the store. **Proposed shape:** extend the `/messages` query with a content filter —
|
|
2273
|
+
start with a bounded raw-substring match, escalate to structured `HL7-path = value` if a field index is added.
|
|
2274
|
+
**Needs an ADR** on the indexing strategy (scan raw vs. pre-index key fields) and on **PHI-query auditing** (every
|
|
2275
|
+
content search touches PHI → audit + step-up + a bounded result count, reusing the existing message-access gates).
|
|
2276
|
+
**Why deferred:** indexing design + PHI-audit implications; pull forward when an operator needs clinical-content
|
|
2277
|
+
search. **Source:** Corepoint connection-log "Message Filters (HL7 path = value)" review (2026-06-27).
|
|
2278
|
+
|
|
2279
|
+
## 53. Dual-control `config:deploy` — require a second approver for a reload (ADR 0041 D2) (P2)
|
|
2280
|
+
|
|
2281
|
+
`POST /config/reload` is the broadest-blast-radius runtime action (it swaps the entire live graph, including any
|
|
2282
|
+
planted code) yet is gated by step-up re-verification **only** — a single re-authenticated operator applies it
|
|
2283
|
+
alone. The dual-control maker-checker machinery already exists ([`api/approvals.py`](../messagefoundry/api/approvals.py),
|
|
2284
|
+
used today for bulk dead-letter replay + connection purge); `config:deploy` is simply not in the gated set.
|
|
2285
|
+
**Shape:** add `config_reload` to the configurable `[approvals].operations`, so a **distinct** second approver
|
|
2286
|
+
releases it (the requester can never self-approve; both identities written to the hash-chained audit). **Opt-in /
|
|
2287
|
+
deny-by-default** — single-operator deployments are unchanged until enabled. Pairs with the ADR 0041 D1 fingerprint
|
|
2288
|
+
(the approver sees *which bytes* they are releasing). **Source:** insider-code-tampering review (2026-06-27);
|
|
2289
|
+
[ADR 0041](adr/0041-load-path-attestation-and-change-attribution.md) D2.
|
|
2290
|
+
|
|
2291
|
+
## 54. Startup engine self-attestation vs `dist-info/RECORD` + enforced non-editable wheel (ADR 0041 D3) (P2)
|
|
2292
|
+
|
|
2293
|
+
Install-time supply-chain integrity (hash-pinned `requirements.lock`, SLSA provenance, Sigstore signing) is never
|
|
2294
|
+
re-checked against the *running* bytes, so an admin with venv-write + restart rights can edit installed
|
|
2295
|
+
`messagefoundry` code in place (e.g. neuter `field_authz` redaction or the off-box audit tee) and it runs with **no
|
|
2296
|
+
audit row at all** — `messagefoundry verify` checks host/flow and `integrity-check` checks the DB, neither checks the
|
|
2297
|
+
code. **Shape:** at startup (and on demand) hash the loaded engine module files against the wheel's
|
|
2298
|
+
`*.dist-info/RECORD` (a zero-new-artifact baseline already shipped in the wheel); on drift, **fail-closed or alert
|
|
2299
|
+
(policy-driven)** and write a `startup_integrity` row to the hash-chained, off-box-teed audit. Tighten
|
|
2300
|
+
[ADR 0017](adr/0017-consumer-deployment-model.md)'s non-editable, hash-locked wheel from recommendation to the
|
|
2301
|
+
**enforced production default** (retire editable `pip install -e .` from prod docs); the attestation must be a
|
|
2302
|
+
no-op/advisory off an editable dev install so it never bricks development. **Source:** insider-code-tampering review
|
|
2303
|
+
(2026-06-27); [ADR 0041](adr/0041-load-path-attestation-and-change-attribution.md) D3.
|
|
2304
|
+
|
|
2305
|
+
---
|
|
2306
|
+
|
|
2307
|
+
## 52. Corepoint capability-parity gaps — prioritized roadmap input (2026-06-27)
|
|
2308
|
+
|
|
2309
|
+
**Type:** competitive analysis → roadmap input (not a single build). A capability gap analysis of
|
|
2310
|
+
**Corepoint Integration Engine v8.1.0** vs MessageFoundry: **393 distinct capabilities**, each classified
|
|
2311
|
+
**HAS / PARTIAL / GAP / EXCEEDS / DECLINED** and **grep-verified against the codebase**.
|
|
2312
|
+
Tally: **HAS 133 · PARTIAL 147 · GAP 65 · EXCEEDS 27 · DECLINED 21**. Full report (local-only, gitignored):
|
|
2313
|
+
[`marketing/corepoint-gap-analysis.md`](marketing/corepoint-gap-analysis.md).
|
|
2314
|
+
|
|
2315
|
+
This item is the **tracking anchor + cross-reference index**; promote individual rows below to their own
|
|
2316
|
+
numbered items as they're scheduled. Each line notes whether it maps to an **existing** backlog item/ADR or
|
|
2317
|
+
is a **NEW** candidate.
|
|
2318
|
+
|
|
2319
|
+
**Major gaps (buyer-visible).**
|
|
2320
|
+
- **Inbound HTTP/REST/SOAP/FHIR listener** — no message-ingest HTTP surface; outbound clients only; the lone
|
|
2321
|
+
HTTP surface is the loopback management API. *Already tracked:* **#7** (inbound HTTP listener) + ADR 0023
|
|
2322
|
+
facade; FEATURE-MAP REST-IN/SOAP-IN/FHIR-IN deferred.
|
|
2323
|
+
- **Operator alert *state*** — active-vs-unresolved alert instances, acknowledge/resolve/suspend, escalation
|
|
2324
|
+
tiers, content-based (Action-Point) alerting, day/time-aware thresholds. `alerts_active` is hard-stubbed to
|
|
2325
|
+
0 (`api/models.py:250`). *Partly bounded by ADR 0014 (alerting scope); the resolvable-alert-state + escalation
|
|
2326
|
+
model is **NEW** candidate work.*
|
|
2327
|
+
- **Turnkey disaster recovery** — engine-managed scheduled/on-demand backups, standby failover/failback, DR
|
|
2328
|
+
reports. Today: config DR = redeploy-from-git, DB DR delegated to the DBA. **NEW** candidate.
|
|
2329
|
+
|
|
2330
|
+
**Moderate-gap clusters.**
|
|
2331
|
+
- **Declarative HL7 modeling** — persistent custom message-definition model, derivatives/inheritance tree,
|
|
2332
|
+
conformance tester + auto-repair (Fix-All), CDA/C-CDA/HL7-v3, NCPDP. *XML/CDA partly **#31**; X12-strict/999
|
|
2333
|
+
**#32**; the custom-definition + derivatives + NCPDP pieces are **NEW**.* (MeFor works at the data layer; this
|
|
2334
|
+
is the code-first identity, but real migration friction for modeling-heavy estates.)
|
|
2335
|
+
- **Correlation object UX** — first-class bidirectional multi-partner *correlation* artifact, auto-match-by-
|
|
2336
|
+
description, qualified/non-singular correlations, visual correlation editor (plain code sets/lookups **are**
|
|
2337
|
+
covered — ADR 0006). **NEW**.
|
|
2338
|
+
- **Operational / monitoring** — browser/web monitor (MeFor console is PySide6 desktop), host/system metrics
|
|
2339
|
+
(CPU/mem/SQL internals), historical metrics charting, live status-colored data-flow graph, bulk/multi-select
|
|
2340
|
+
console connection control. *App-log disk metering + message-stall alert = **#50**; HL7-path/content log search
|
|
2341
|
+
= **#51**; per-connection start/stop **API already exists** (`POST /connections/{name}/start|stop|restart`).
|
|
2342
|
+
Web monitor + host metrics + historical charts + bulk console control are **NEW**.*
|
|
2343
|
+
- **DB & web-service breadth** — Oracle / MySQL / generic-ODBC-DSN; stored-proc OUT/return-value binding;
|
|
2344
|
+
WSDL import → type-tree + validate-against-WSDL; synchronous in-transform WSCall (vs MeFor's pure-transform
|
|
2345
|
+
invariant); generic OAuth2-client-credentials / Digest / NTLM; FHIR search/read + CapabilityStatement;
|
|
2346
|
+
dynamic per-message HTTP headers. *FHIR base = **#20** / **#35**; Oracle/MySQL = FEATURE-MAP "Later"; the rest **NEW**.*
|
|
2347
|
+
- **Security** — user-definable custom RBAC roles (6 fixed roles + per-channel scope today); PKCS#12/.pfx cert
|
|
2348
|
+
import + cert inventory + trust-flag UX (PEM-only today); self-signed cert generation; explicit FIPS-mode
|
|
2349
|
+
attestation. **NEW** (openssl/PKI-replaceable).
|
|
2350
|
+
|
|
2351
|
+
**Minor gaps (summarized — full list in the report).** sender inter-message pacing; MSA-2↔MSH-10 response
|
|
2352
|
+
matching; FTPS implicit/active-passive + SFTP keyboard-interactive; TCP keep-alive/persistent-reconnect;
|
|
2353
|
+
rich file-output disposition (archive-to-dated-subfolder, append, header/trailer, enqueue-empty toggle);
|
|
2354
|
+
SMTP/POP3-IMAP mail + S3/cloud-blob + JMS transports; HL7 timestamp/age/LOS helpers; integrated hex +
|
|
2355
|
+
profiling/coverage panes + HL7-aware before/after diff; inbound ACK/NAK persistence (*ADR 0021 / **#16***);
|
|
2356
|
+
per-connection retention windows (***#34***); embedded-doc pruning (***#47***); Export-to-Support bundle
|
|
2357
|
+
(***#49***); auto-generated interface docs; searchable in-product KB; edit-a-stored-message-before-resend
|
|
2358
|
+
(*tension with the purity/at-least-once invariant — bordering on declined*).
|
|
2359
|
+
|
|
2360
|
+
**Declined by design (NOT gaps).** No-code / visual / template-driven authoring (***#26***, CLAUDE.md §12);
|
|
2361
|
+
the "channel"/"route" bundling element — hence no Org→App→Connection hierarchy/health-roll-up or subscription
|
|
2362
|
+
pools (CLAUDE.md §1); side-effecting / synchronous-external-call transforms incl. CommandLineCall/COM (purity
|
|
2363
|
+
invariant; sole carve-out = read-only `db_lookup`, ADR 0010); license-key / per-seat gating; active-active
|
|
2364
|
+
horizontal scale-out (dropped 2026-06-18); DB-tier backup/HA/restore mechanics (delegated to the DBA);
|
|
2365
|
+
serial / ASTM lab-instrument connectivity (***#27***).
|
|
2366
|
+
|
|
2367
|
+
**Where MeFor already exceeds Corepoint (so gaps stay in context).** Broker-free transactional staged
|
|
2368
|
+
at-least-once pipeline; full-Python transforms (superset of the action-list DSL); git-native config/repository;
|
|
2369
|
+
hash-chained tamper-evident audit + off-box PHI-redacted SIEM tee; Prometheus/OTel telemetry; DICOMweb STOW-RS
|
|
2370
|
+
+ SMART Backend Services (neither shipped by Corepoint); a real debugpy step-through debugger + Test Bench;
|
|
2371
|
+
fail-closed de-identification framework (ADR 0030). Across the great majority of the 16 domains MeFor matches
|
|
2372
|
+
or exceeds Corepoint — the gaps concentrate in inbound-HTTP, operator-alert-state, declarative
|
|
2373
|
+
modeling/correlation UX, and packaged DR/ops tooling.
|
|
2374
|
+
|
|
2375
|
+
**Caveat.** Capability **presence ≠ production maturity** — a HAS/PARTIAL marks that a code-first or built
|
|
2376
|
+
mechanism exists, not that it is hardened or feature-complete to Corepoint's depth. Where the models differ
|
|
2377
|
+
structurally (code-first vs no-code; flat by-name graph vs object hierarchy; one store vs four DBs; git vs
|
|
2378
|
+
proprietary repository), "equivalent" means the buyer-facing *outcome* is met even when ergonomics differ.
|
|
2379
|
+
|
|
2380
|
+
**Source:** owner request (2026-06-27) — identify the capability gaps between Corepoint and MessageFoundry.
|
|
2381
|
+
Per-domain gap classification, grep-verified against the codebase, with adversarial review. Relates to
|
|
2382
|
+
**#7**, **#16**, **#20**, **#26**, **#27**, **#31**, **#32**, **#34**, **#35**, **#46**, **#47**, **#49**,
|
|
2383
|
+
**#50**, **#51**, and ADRs 0010 / 0014 / 0021 / 0023.
|
|
2384
|
+
|
|
2385
|
+
## 55. CI: intermittent `windows-2022` pytest hang — whole job times out at the 15-min cap (P2)
|
|
2386
|
+
|
|
2387
|
+
**Symptom:** the `test (windows-2022, py3.14)` leg **intermittently hangs ~25% into the suite** and emits **no
|
|
2388
|
+
further output for ~12 minutes** until the job hits its 15-minute cap and is cancelled — a red ✗, not a test
|
|
2389
|
+
assertion failure. `pytest-timeout` does **not** fire, so the hang is something its (thread-based) method can't
|
|
2390
|
+
interrupt on Windows — a blocking syscall / socket-accept / subprocess wait rather than a Python-level deadlock.
|
|
2391
|
+
The other legs (`ubuntu`, `windows-2025`) pass.
|
|
2392
|
+
|
|
2393
|
+
**Evidence (2026-06-27):** PR #596 — a **one-line `BACKLOG.md` edit** — timed out on `windows-2022` **twice**
|
|
2394
|
+
(run 28296717204, original + a `--failed` re-run), each at exactly 15m. The same suite **passed** on
|
|
2395
|
+
`windows-2022` for #595 minutes earlier (~5m34s). Last pytest progress line at `[ 25%]` (17:58:28), then silence
|
|
2396
|
+
to `##[error]The operation was canceled.` at 18:10:26. #596 was ultimately **admin-merged** past the flaky check.
|
|
2397
|
+
|
|
2398
|
+
**Impact:** flaky red on **unrelated** PRs (incl. docs-only); because `windows-2022` is a **required** check it
|
|
2399
|
+
wedges merges until a re-run happens to pass or an admin override is used (~15 min burned per hang).
|
|
2400
|
+
|
|
2401
|
+
**Prior art:** the resolved/obsolete **#17** (the old `py3.11` leg hang — a CPython 3.11 asyncio cancellation
|
|
2402
|
+
race in `TeeRelay.stop()`, fixed via a sentinel shutdown; the py3.11/3.13 legs were since removed). This is a
|
|
2403
|
+
**new** occurrence on `windows-2022` / py3.14 — same *class* (a Windows asyncio/socket hang `pytest-timeout`
|
|
2404
|
+
can't interrupt), different test.
|
|
2405
|
+
|
|
2406
|
+
**Proposed (when picked up):**
|
|
2407
|
+
1. **Surface the culprit** — add a tight per-test `--timeout=<n>` so a hang **fails that one test fast** and
|
|
2408
|
+
names it instead of silently cancelling the whole job at 15m; dump a `faulthandler` traceback on timeout to
|
|
2409
|
+
pin the stuck frame. (Note the limits of `--timeout-method=thread` on Windows: a true socket-accept hang is
|
|
2410
|
+
not interruptible by it.)
|
|
2411
|
+
2. **Find + fix the test** — the stall is ~25% into collection order on `windows-2022`; likely an MLLP/TCP
|
|
2412
|
+
listener or subprocess test whose teardown wedges on that runner. Make its teardown forcibly cancel + close
|
|
2413
|
+
the listener (the #17 sentinel-shutdown pattern).
|
|
2414
|
+
3. **CI guard** — a step-level no-output watchdog that fails the job well before 15m so a flake doesn't burn the
|
|
2415
|
+
full budget.
|
|
2416
|
+
|
|
2417
|
+
**Priority:** **P2** — intermittent, but a *required* check that wedges unrelated PRs. **Source:** #596 CI
|
|
2418
|
+
investigation (2026-06-27).
|
|
2419
|
+
|
|
2211
2420
|
---
|
|
2212
2421
|
|
|
2213
2422
|
*Everything else from the 2026-06-10 full-codebase review (1 critical, 13 high, 33 medium, 31 low —
|