messagefoundry 0.2.6__tar.gz → 0.2.8__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.6 → messagefoundry-0.2.8}/.gitattributes +1 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/release.yml +15 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.gitignore +5 -0
- messagefoundry-0.2.8/.mefor-hooks/pre-commit +25 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/CHANGELOG.md +67 -1
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/PKG-INFO +29 -22
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/README.md +24 -21
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/BACKLOG.md +82 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/SERVICE.md +19 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/__main__.py +20 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/config/load/_shape.py +21 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/config/load/graph.py +13 -4
- messagefoundry-0.2.8/harness/config/passthrough/graph.py +68 -0
- messagefoundry-0.2.8/harness/config/store_once/graph.py +73 -0
- messagefoundry-0.2.8/harness/load/enginepoll.py +244 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/runner.py +15 -2
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/__init__.py +1 -1
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/__main__.py +8 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/supervisor.py +10 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/pyproject.toml +7 -0
- messagefoundry-0.2.8/tests/test_enginepoll_aggregate.py +152 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_config.py +30 -1
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_report.py +19 -15
- messagefoundry-0.2.8/tests/test_passthrough_graph.py +64 -0
- messagefoundry-0.2.8/tests/test_store_once_graph.py +68 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_supervisor.py +22 -0
- messagefoundry-0.2.6/harness/load/enginepoll.py +0 -162
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.claude/settings.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.dockerignore +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/CODEOWNERS +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/SECURITY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/dependabot.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/benchmark.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/ci.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/cla.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/codeql.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/dependabot-auto-merge.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/dependabot-lock-resync.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/freethread-smoke.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/release-sync-check.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/scorecard.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/security.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/workflows/vuln-metrics.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.github/zizmor.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.gitleaks.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.pre-commit-config.yaml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/.semgrep/messagefoundry.yml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/CLA.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/CLAUDE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/CODE_OF_CONDUCT.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/COMMERCIAL-LICENSE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/CONTRIBUTING.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/GOVERNANCE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/LICENSE +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/MAINTAINERS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/NOTICE +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/Dockerfile +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/compose.yaml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/k8s/secret.example.yaml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/k8s/statefulset.yaml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/locks/requirements-core.lock +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/locks/requirements-sqlserver.lock +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/secrets.env.example +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/smoke/Dockerfile +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/smoke/config/IB_Test_ADT.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docker/smoke/send_adt.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/ADOPTER-CI.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/AI.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/ARCHITECTURE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CI-QUALITY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CLUSTERING.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CODESETS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CONFIGURATION.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CONNECTIONS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CONTAINER-EXPOSURE-EVALUATION.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CONTRIBUTOR-FIRST-ISSUES.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/CONTRIBUTOR-PROGRAM-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/COUNSEL-ENGAGEMENT-BRIEF.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/DEPLOY-SERVER-DB.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/DEPLOYMENT.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/DICOM.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/DUAL_LICENSING_PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/EARLY-ADOPTER-GUIDE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/FEATURE-MAP.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/HL7-VALIDATION.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/INSTALL-GUIDE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/LOAD-TESTING.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/MENTAL-MODEL.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/MessageFoundry-Mental-Model.docx +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/PHI.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/REMOTE-CONSOLE-CUSTOMER-GUIDE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/REMOTE-CONSOLE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/SECURITY-REMEDIATION-LEDGER.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/SECURITY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/SUPPORT-POLICY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/SYSTEM-REQUIREMENTS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/Secure_AI_Development_Standards.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/Secure_Development_Standards.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/TEE-RELAY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/THROUGHPUT-IMPROVEMENTS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/USER-GUIDE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/WORKTREES.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0001-staged-pipeline-architecture.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0002-phase2-transport-security-and-strong-auth.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0003-non-hl7-transports-database-rest-soap.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0004-payload-agnostic-ingress.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0005-transform-accessible-state.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0006-external-data-lookups.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0007-gui-manageable-connections-toml.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0008-cluster-observability-api.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0009-run-scoped-context-providers.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0010-handler-callable-db-lookup.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0011-timer-scheduled-source.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0012-x12-edi-codec.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0013-increment-2-reingress-design.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0013-query-response-orchestration.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0014-alerting-rules-engine.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0015-ws-soap-outbound-mtls-wssecurity.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0016-synchronous-x12-request-response.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0017-consumer-deployment-model.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0018-per-message-signatures-accepted-risk.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0019-pluggable-keyprovider-hsm-kms-vault.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0020-protocol-diagnostic-capture.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0021-inbound-ack-nak-capture-response-sent.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0022-fhir-resource-codec-rest-client.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0024-smart-backend-services-token-provider.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0025-dicom-codec-store-connectors.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0026-off-box-egress-update-check.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0028-base64-binary-carriage-codec.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0030-anonymization-test-harness-tee.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0031-startup-connection-fault-isolation.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0032-console-desktop-launch.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0033-gui-manageable-code-sets.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0034-static-analysis-triage-policy-accepted-risk-register.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0035-ide-extension-workspace-trust-and-scope.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0036-windows-config-source-trust.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0037-multi-process-sharding-l3.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0038-internal-pass-through-connector.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0039-database-tier-sharding-l5.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0040-free-threaded-engine-support.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/0041-load-path-attestation-and-change-attribution.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/adr/TEMPLATE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-components.png +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-components.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-config-graph.png +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-config-graph.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-diagram.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-message-flow.png +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-message-flow.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-topology.png +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/architecture-topology.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/TUNING-BASELINE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/environment.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/failover-postgres.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/failover-sqlserver.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/reference-postgres.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlite.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/results/2026-06-16-ci-linux/reference-sqlserver.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/benchmarks/step-b-write-amplification.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/design/dbshard.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/design/freethread.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/design/multiproc.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/hl7-message-ordering-reference.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/message-ordering-design.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/ASVS-OPTION-A-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/ASVS-PARTIALS-SWEEP-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/DOGFOOD-BACKLOG-MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/MULTISESSION-PLAN-3.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/MULTISESSION-PLAN-v0.2.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/MULTISESSION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/PLAN-3-LANE-HANDOFFS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/V0.2-LANE-HANDOFFS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/v0.1-EXECUTION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/v0.1-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/releases/v0.1.0-PRETAG-CHECKLIST.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/research/cloud-deployment-research-2026-06.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/research/config-ux-review.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/research/non-hl7-transform-components.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/reviews/DEPENDENCY-INFOSEC-POSTURE-2026-06-23.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/reviews/FULL-REVIEW-2026-06-10.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ADVISORY-PROCESS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-FAILS-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-L2-PHASE0-CHANGES.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-L2-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-L3-ASSESSMENT.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-L3-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/ASVS-L3-STATUS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/BEYOND-ASVS-L3-ONEPAGE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN-ONEPAGE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/BEYOND-ASVS-L3-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/BEYOND-ASVS-L3.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/DEP-CVE-RUNBOOK.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/DEPENDENCY-METRICS.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/MEFOR-Code-Review-Checklist.xlsx +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/PHASE-8C-RBAC.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/PUBLISHING.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/RCA-TEMPLATE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/RELEASE-GATE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/REVIEW-2026-06-07.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SDS-CONFORMANCE-REVIEW-2026-06-12.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SDS-REMEDIATION-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SECURITY-POSTURE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SOUP-DEPENDENCY-HANDLING.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SOUP-REVIEW-2026-06-18.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/SOUP-REVIEW-PROCEDURE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/security/THREAT-MODEL.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/testing/VERIFY.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/testing/WIN2025-ACCEPTANCE.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/testing/WIN2025-TEST-MATRIX.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/docs/testing/WIN2025-TEST-PLAN.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/environments/dev.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/environments/prod.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/__main__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/matrix.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/probes.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/acceptance/runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/compose.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/config/coverage.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/file_panel.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/file_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/corpus.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/correlator.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/failover.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/failover_track.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/governor.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/ids.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/metrics.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profile.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/adt-fanout-stress.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/closed-loop.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/failover.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/fanout-baseline.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/malformed-load.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/reference.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/smoke-sqlserver.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/smoke.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/soak.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/spike-burst.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/sustained-overload.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/profiles/writeamp.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/sender.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/load/sink.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/mllp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/monitor.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/receive.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/__main__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/capture.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/compare.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/normalize.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/reconcile/report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/scenarios.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/send.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/harness/window.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/.gitignore +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/.vscodeignore +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/esbuild.js +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/media/hl7schema.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/media/icon-amber.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/media/icon.png +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/media/icon.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/package-lock.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/package.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/snippets/messagefoundry.code-snippets +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/aiPolicy.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/alertEditor.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/auth.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/chat.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/cli.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/codeSetEditor.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/codesetsTree.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/completion.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/connectionEditor.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/editorToolbar.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/engineClient.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/engineTarget.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/extension.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/generate.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/git.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/graphTree.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/home.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/insertElement.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/newRoute.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/promote.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/promoteTarget.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/sourceControl.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/runTest.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/ai-policy.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/chat.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/editor-toolbar.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/engine-target.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/extension.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/index.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/insert-element.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/promote-target.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/pythonpath.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/test/suite/settings-scope.test.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/testBench.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/src/validate.ts +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/tsconfig.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/ide/tsconfig.test.json +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/mefor.code-workspace +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/adr_analyze.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/_pools.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/hl7.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/keying.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/leak.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/rules.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/anon/surrogates.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/app.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/approvals.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/auth_models.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/auth_routes.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/field_authz.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/metrics.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/models.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/security.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/api/tls.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/data/common_passwords.NOTICE +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/data/common_passwords.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/identity.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/ldap.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/notifications.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/passwords.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/permissions.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/policy.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/ratelimit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/service.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/tokens.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/auth/totp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/checks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/active_environment.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/ai_policy.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/alerts_edit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/code_sets.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/codeset_edit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/connections_edit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/connections_file.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/db_lookup.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/environments.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/fingerprint.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/ingest_time.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/models.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/reference.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/response.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/run_context.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/settings.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/state.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/tls_policy.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/config/wiring.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/__main__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/_async.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/alerts_page.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/change_password.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/client.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/connections.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/dead_letters_page.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/delegates.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/event_log_page.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/alerts.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/connections.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/dead-letters.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/engine-status.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/log-search.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/logo-lockup.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/icons/users.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/login.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/mfa.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/reauth.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/resources/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/resources/app.ico +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/resources/app.svg +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/search.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/service_control.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/sessions.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/shards.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/shell.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/status.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/theme.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/users_page.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/console/widgets.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/_core.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/_hl7data.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/adt.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/all_types.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/bar.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/dft.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/documents.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/mdm.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/mfn.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/oml.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/orl.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/orm.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/oru.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/ras.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/rde.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/siu.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/generators/vxu.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/hl7schema.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/last_resort.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/logging_setup.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/binary.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/consistency.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/_deps.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/_util.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/dataset.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/errors.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/hl7_map.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/dicom/peek.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/fhir/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/fhir/_deps.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/fhir/errors.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/fhir/peek.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/fhir/resource.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/groups.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/message.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/peek.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/split.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/summary.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/tree.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/validate.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/delimiters.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/errors.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/interchange.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/message.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/parsing/x12/peek.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/alert_sinks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/alerts.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/cert_expiry.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/cluster.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/cluster_sqlserver.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/config_convergence.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/dryrun.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/engine.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/leader_tasks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/reference_sync.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/retention.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/security_notify.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/sharding.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/state_convergence.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/pipeline/wiring_runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/py.typed +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/redaction.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/scaffold.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/secrets_dpapi.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/audit_tee.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/base.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/crypto.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/keyprovider.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/postgres.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/sqlserver.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/store/store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/timezone.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/base.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/database.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/dicom.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/dicomweb.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/fhir.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/file.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/framing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/loopback.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/mllp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/passthrough.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/remotefile.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/rest.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/signing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/smart.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/soap.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/tcp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/timer.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/transports/x12.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/checks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/model.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/messagefoundry/verify/smoke.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/packaging/messagefoundry-harness/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/packaging/messagefoundry-harness/pyproject.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/requirements.lock +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_ACME_ADT.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_FHIR_INTAKE.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_IMMUNIZATION_VXU.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_PARTNER_X12.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_RADIOLOGY_SR.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/IB_RTE_ELIGIBILITY.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/adt.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/codesets/event_labels.csv +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/codesets/facility_mnemonics.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/config/connections.toml +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/consistency/validated_adt.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/dicom/generate_sr_sample.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/adt_a01.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/adt_batch.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/.gitattributes +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/adt_a01.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/adt_a03.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/batch_18_messages.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/erp_z99_v231.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/omd_o03.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/omd_o03_rep.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/hapi-hl7v2/oml_o21.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/messages/x12_270_eligibility.edi +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/results_relay/README.md +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/results_relay/codesets/test_codes.csv +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/results_relay/messages/oru_all_cancelled.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/results_relay/messages/oru_results.hl7 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/results_relay/results_relay.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/samples/send_mllp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/console/install-console-shortcut.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/console/pack_ico.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/console/uninstall-console-shortcut.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/dev/postgres.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/dev/sqlserver-docker.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/dev/sqlserver.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/hooks/block-blanket-git-stage.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/publish/check_release_sync.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/publish/publish-denylist.txt +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/publish/publish.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/publish/scan_forbidden.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/security/crypto_inventory_check.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/security/vuln_metrics.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/service/import-db-ca.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/service/install-service.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/service/uninstall-service.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/trace_icon.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/worktree/new.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/worktree/remove.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/worktree/session-context.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/scripts/worktree/spawn.ps1 +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/__main__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/__init__.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/_hl7data.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/_pools.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/hl7.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/keying.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/leak.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/rules.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/anon/surrogates.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/compare.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/correlate.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/hl7_fields.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/mefor_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/mllp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/relay.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tee/store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/_dicom_sample.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/_failover_load_support.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/_fhir_fixtures.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/conftest.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_acceptance_framework.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ack_capture_runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ack_sent_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_active_environment.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ad_group_scope.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_admin_new_ip.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_adr_analyze.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ai_policy.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_alert_rules.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_alert_sinks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_alerts_edit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_alerts_rules_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_anon_core.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_anon_integration.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_anon_parity.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_api_auth.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_api_reload.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_api_tls.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_approvals.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_asvs_phase0.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_audit_integrity.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_audit_offbox_tee.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_core.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_entry_hardening.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_hardening.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_service.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_session_lifecycle.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_auth_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_binary_carriage.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_bootstrap_admin_perms.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cert_expiry.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_channel_rbac.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_checks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_checks_lint.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cli.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cluster.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cluster_failover_postgres.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cluster_failover_sqlserver.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cluster_graph_gating.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_cluster_lease.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_code_sets.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_codeset_edit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_config_fingerprint.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_config_source_trust.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_event_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_event_emit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_event_outbound.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_event_scope.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_event_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connection_resilience.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connections_cli.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_connections_file.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_consistency.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_alerts.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_auth.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_client.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_dead_letters.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_event_log.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_hardening.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_icon.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_password.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_sessions.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_shards.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_status.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_step_up.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_theme.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_users.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_console_widgets.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_database_connector_integration.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_database_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_db_lookup.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_db_lookup_live_runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_delivery_settings.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dependabot_automerge_guardrails.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dependency_boundaries.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicom_codec.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicom_scp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicom_scp_security.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicom_scu.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicom_wiring.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dicomweb.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_docs_runbooks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_dryrun.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ed_documents.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ed_documents_e2e.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_egress_allowlist.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_environments.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_fhir_parsing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_fhir_resource.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_fhir_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_field_authz.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_field_authz_metadata.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_fifo_ordering.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_generate_cli.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_generated_adt.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_generators_core.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_generators_types.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_groups.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_compose.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_config.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_faults.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_file.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_monitor.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_harness_scenarios.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_hl7_core_features.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_hl7schema.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_inbound_bind.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ingest_time.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_keyprovider.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_last_admin_guard.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_last_resort.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_leader_tasks.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_listener_tls_exposure.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_corpus.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_failover_postgres.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_failover_sqlserver.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_failover_unit.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_metrics.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_profile.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_runner.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_sender.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_load_sink.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_logging.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_message.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_message_split.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_metrics_exporter.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_mfa.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_mllp_encoding_override.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_mllp_tls.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_nonhl7_ingress_size_cap.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_operability_config.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_outbound_signing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_outbound_simulate.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_packaging.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_parse_tree.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_parsing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_passthrough.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_payload_agnostic_ingress.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_postgres_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_reconcile_capture.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_reconcile_compare.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_reconcile_harness.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_redaction.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_reference_sets.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_reingress.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_remotefile_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_response_capture.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_rest_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_retention.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_run_context.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_scaffold.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_scaffold_requirements.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_scan_forbidden.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_secrets_dpapi.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_security_notify.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_security_static.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_service_control.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_settings.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sharding.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sibling_helper_finder.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_smart_backend.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_soap_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_soap_wssecurity.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sqlserver_coordinator.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sqlserver_cursor_close.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sqlserver_schema_init.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_sqlserver_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_staged_pipeline.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_startup_fault_isolation.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_stats_reset.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_step_up.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_backend.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_encryption.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_file_hardening.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_once_deliver_many.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_read_pool.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_store_ssl.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_summary.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_task_resilience.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tcp_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_cli.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_compare.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_correlate.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_hl7_fields.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_mefor_api.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_mllp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_relay.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_report.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tee_store.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_timer_source.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_timezone.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_tls_policy.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_totp.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_totp_window.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_transform_offloop.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_transform_state.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_transports.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_verify.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_version.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_win2025_acceptance.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_wiring.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_wiring_engine.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_wiring_reload.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_wiring_serve.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_ws_stats_revalidation.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_x12_parsing.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_x12_rte.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_x12_source_ip_allowlist.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/tests/test_x12_transport.py +0 -0
- {messagefoundry-0.2.6 → messagefoundry-0.2.8}/uv.lock +0 -0
|
@@ -54,6 +54,21 @@ jobs:
|
|
|
54
54
|
with:
|
|
55
55
|
python-version: "3.14"
|
|
56
56
|
|
|
57
|
+
- name: Rewrite README repo slug for the public PyPI long_description
|
|
58
|
+
run: |
|
|
59
|
+
# PyPI renders README.md (pyproject `readme = "README.md"`) as the project description and
|
|
60
|
+
# fetches it anonymously. The source README points at the PRIVATE source repo
|
|
61
|
+
# (wshallwshall/MessageFoundry) so the team's GitHub view shows the private repo's own CI
|
|
62
|
+
# badges — but anonymous fetches of a private repo's Actions badge SVG 404 (broken badge
|
|
63
|
+
# images), and every body link 404s on click. The public mirror (MEFORORG/MessageFoundry)
|
|
64
|
+
# runs the same workflows and is anonymously reachable, so rewrite the slug here (the same
|
|
65
|
+
# rewrite scripts/publish/publish.ps1 applies to the mirror) before `python -m build` embeds
|
|
66
|
+
# the README. Ephemeral runner edit only — never committed.
|
|
67
|
+
sed -i 's#wshallwshall/MessageFoundry#MEFORORG/MessageFoundry#g' README.md
|
|
68
|
+
if grep -q 'wshallwshall/MessageFoundry' README.md; then
|
|
69
|
+
echo '::error::README slug rewrite left private-repo links'; exit 1
|
|
70
|
+
fi
|
|
71
|
+
|
|
57
72
|
- name: Build sdist + wheel
|
|
58
73
|
run: |
|
|
59
74
|
python -m pip install --upgrade pip build
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# MessageFoundry pre-commit checks — generated by the VS Code extension.
|
|
3
|
+
# Runs `messagefoundry check` so a commit can't introduce a broken config.
|
|
4
|
+
# Bypass once with: git commit --no-verify
|
|
5
|
+
|
|
6
|
+
PY=python
|
|
7
|
+
command -v python >/dev/null 2>&1 || PY=python3
|
|
8
|
+
if ! command -v "$PY" >/dev/null 2>&1; then
|
|
9
|
+
echo "MessageFoundry: python not found; skipping checks." >&2
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Prefer a project virtualenv if present (Windows + POSIX layouts).
|
|
14
|
+
if [ -x ".venv/Scripts/python.exe" ]; then
|
|
15
|
+
PY=".venv/Scripts/python.exe"
|
|
16
|
+
elif [ -x ".venv/bin/python" ]; then
|
|
17
|
+
PY=".venv/bin/python"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
if ! "$PY" -c "import messagefoundry" >/dev/null 2>&1; then
|
|
21
|
+
echo "MessageFoundry: 'messagefoundry' not importable in this environment; skipping checks." >&2
|
|
22
|
+
exit 0
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
exec "$PY" -m messagefoundry check --config 'samples/config' --messages 'samples/messages'
|
|
@@ -6,6 +6,70 @@ All notable changes to MessageFoundry are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.8] — 2026-06-27 — Early Access
|
|
10
|
+
|
|
11
|
+
A tooling/ops release: the load harness gains a **multi-shard driver** so one harness can drive a
|
|
12
|
+
`supervise` cluster (unblocking the multi-core throughput measurement), `supervise` resolves
|
|
13
|
+
`--env` files for its shards, and a prominent upgrade note for the config-directory permission
|
|
14
|
+
guard introduced in 0.2.6.
|
|
15
|
+
|
|
16
|
+
> ### ⚠ Upgrading from ≤ 0.2.5 — tighten config-dir ACLs first
|
|
17
|
+
> The config-directory permission guard (SEC-003 / ADR 0036), added in **0.2.6**, refuses to load a
|
|
18
|
+
> `--config` directory that is **writable by a broad principal** (e.g. `Authenticated Users` /
|
|
19
|
+
> `S-1-5-11`). A deployment whose config dir inherits that write — common under `C:\srv\…` — will
|
|
20
|
+
> **fail to start on first upgrade to ≥ 0.2.6** with *"refusing to load config from writable-by-others
|
|
21
|
+
> path …"*. **Before upgrading**, tighten the directory (elevated):
|
|
22
|
+
> ```powershell
|
|
23
|
+
> icacls "<config-dir>" /inheritance:d /T
|
|
24
|
+
> icacls "<config-dir>" /remove:g *S-1-5-11 /T # drop Authenticated Users
|
|
25
|
+
> icacls "<config-dir>" /grant *S-1-5-18:(OI)(CI)F /grant *S-1-5-32-544:(OI)(CI)F /T # SYSTEM + Admins
|
|
26
|
+
> ```
|
|
27
|
+
> See [`docs/SERVICE.md`](docs/SERVICE.md) → *Update to a new build* and *Lock down the config
|
|
28
|
+
> directory (CONFIG-2)*.
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **Multi-shard load driving (`messagefoundry-harness`).** `python -m harness` gains
|
|
32
|
+
**`--skip-preflight`** (drive shard MLLP ports that no single `--engine` owns) and a repeatable
|
|
33
|
+
**`--shard-engine <url>`**: the engine poller now takes a list of shard APIs and **sums** each
|
|
34
|
+
shard's `/stats` (read/written/backlog/in_pipeline/queue_depth/dead) into one cluster sample, so
|
|
35
|
+
the no-loss reconcile and drain are **cluster-aggregate** — a healthy K-shard run reports pass,
|
|
36
|
+
not a false "lost on intake". With no `--shard-engine` the behavior is byte-identical to before.
|
|
37
|
+
Two sample graphs ship for the throughput suite: `harness/config/store_once` (the
|
|
38
|
+
dedup-triggering one-handler-`list[Send]`-of-identical-body shape for store-once) and
|
|
39
|
+
`harness/config/passthrough` (an internal `PassThrough()` re-ingress hop); the load graph
|
|
40
|
+
(`harness/config/load`) is now shard-taggable via `MEFOR_LOAD_SHARD_ADT`/`_RESULTS`/`_OTHER`. (#604)
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
- **`supervise --project-root`.** `supervise` now accepts `--project-root` and forwards it to each
|
|
44
|
+
spawned `serve --shard`, so `supervise --config <dir> --env <env>` resolves each shard's
|
|
45
|
+
`environments/<env>.toml` (previously the shards resolved nothing from their spawned cwd and
|
|
46
|
+
required an explicit `--service-config` posture). Backward compatible — no `--project-root` is
|
|
47
|
+
unchanged. (#602)
|
|
48
|
+
|
|
49
|
+
## [0.2.7] — 2026-06-27 — Early Access
|
|
50
|
+
|
|
51
|
+
A docs/packaging release that fixes the broken badge images on the PyPI project page
|
|
52
|
+
and adds a config-check pre-commit hook.
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
- **Broken badge images in the PyPI project description.** The CI and Security status
|
|
56
|
+
badges in the README pointed at the **private** source repo, so they rendered as
|
|
57
|
+
broken images on the public PyPI page — an anonymous viewer can't fetch a private
|
|
58
|
+
repo's GitHub Actions badge SVG (it 404s). The README now points at the public
|
|
59
|
+
mirror (`MEFORORG/MessageFoundry`), and the release build additionally rewrites any
|
|
60
|
+
remaining `wshallwshall`→`MEFORORG` repo slug in the README before it is embedded as
|
|
61
|
+
the PyPI `long_description`, so the rendered badges resolve anonymously. (#568)
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- **`messagefoundry check` pre-commit hook.** A VS Code-extension-generated
|
|
65
|
+
`.mefor-hooks/pre-commit` runs `messagefoundry check` so a commit can't introduce a
|
|
66
|
+
broken config (skips cleanly if python or the package isn't importable; bypass with
|
|
67
|
+
`--no-verify`). (#568)
|
|
68
|
+
|
|
69
|
+
### Docs
|
|
70
|
+
- Backlog **#47** — base64 embedded-document (attachment) pruning (Mirth
|
|
71
|
+
attachment-handler / data-pruner parity); and a Changelog link in the README. (#568)
|
|
72
|
+
|
|
9
73
|
## [0.2.6] — 2026-06-27 — Early Access
|
|
10
74
|
|
|
11
75
|
A large release: the **throughput-maximization build** (high-fan-out store-once, multi-process
|
|
@@ -275,7 +339,9 @@ tests, but the external code review + penetration test (the bar for a security-c
|
|
|
275
339
|
- Releases are built, SBOM'd (CycloneDX), and signed with [Sigstore](https://www.sigstore.dev/) — see the
|
|
276
340
|
`release` workflow.
|
|
277
341
|
|
|
278
|
-
[Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.
|
|
342
|
+
[Unreleased]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.8...HEAD
|
|
343
|
+
[0.2.8]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.7...v0.2.8
|
|
344
|
+
[0.2.7]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.6...v0.2.7
|
|
279
345
|
[0.2.6]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.5...v0.2.6
|
|
280
346
|
[0.2.5]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.4...v0.2.5
|
|
281
347
|
[0.2.4]: https://github.com/wshallwshall/MessageFoundry/compare/v0.2.3...v0.2.4
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: messagefoundry
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: Open-source healthcare integration engine — route, transform, and validate messages across many formats and connection types
|
|
5
|
+
Project-URL: Homepage, https://messagefoundry.org/
|
|
6
|
+
Project-URL: Documentation, https://messagefoundry.org/
|
|
7
|
+
Project-URL: Repository, https://github.com/MEFORORG/MessageFoundry
|
|
8
|
+
Project-URL: Issues, https://github.com/MEFORORG/MessageFoundry/issues
|
|
5
9
|
License-Expression: AGPL-3.0-or-later
|
|
6
10
|
License-File: LICENSE
|
|
7
11
|
License-File: NOTICE
|
|
@@ -66,10 +70,13 @@ Description-Content-Type: text/markdown
|
|
|
66
70
|
|
|
67
71
|
# MessageFoundry
|
|
68
72
|
|
|
69
|
-
[](https://github.com/
|
|
72
|
-
[](https://github.com/
|
|
73
|
+
[](https://github.com/MEFORORG/MessageFoundry/actions/workflows/ci.yml)
|
|
74
|
+
[](https://github.com/MEFORORG/MessageFoundry/actions/workflows/security.yml)
|
|
75
|
+
[](https://github.com/MEFORORG/MessageFoundry/blob/main/LICENSE)
|
|
76
|
+
[](https://github.com/MEFORORG/MessageFoundry/blob/main/pyproject.toml)
|
|
77
|
+
|
|
78
|
+
**Website & documentation: [messagefoundry.org](https://messagefoundry.org/)** ·
|
|
79
|
+
**[Changelog](https://github.com/MEFORORG/MessageFoundry/blob/main/CHANGELOG.md)**
|
|
73
80
|
|
|
74
81
|
MessageFoundry is an **open-source healthcare integration engine** — a modern, Python-native HL7
|
|
75
82
|
interface engine. It connects clinical and business systems by routing, transforming, and validating
|
|
@@ -96,10 +103,10 @@ The PySide6 console talks to it over a localhost HTTP + WebSocket API — the sa
|
|
|
96
103
|
whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
97
104
|
No hand-rolled IPC; the deployment split is a config choice, not an architectural fork.
|
|
98
105
|
|
|
99
|
-
See **[docs/architecture-diagram.md](https://github.com/
|
|
106
|
+
See **[docs/architecture-diagram.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/architecture-diagram.md)** for the rendered diagrams —
|
|
100
107
|
system topology, runtime message flow through the staged queue, and the config wiring graph (Mermaid,
|
|
101
108
|
renders on GitHub and in the VS Code preview). The prose source of truth is
|
|
102
|
-
[docs/ARCHITECTURE.md](https://github.com/
|
|
109
|
+
[docs/ARCHITECTURE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/ARCHITECTURE.md).
|
|
103
110
|
|
|
104
111
|
### Key decisions
|
|
105
112
|
- **Reliable by default.** A durable, transactional pipeline gives at-least-once delivery,
|
|
@@ -113,7 +120,7 @@ renders on GitHub and in the VS Code preview). The prose source of truth is
|
|
|
113
120
|
- **PHI is first-class.** Authentication, RBAC, a user-attributed audit log of message
|
|
114
121
|
views/replays, **encryption-at-rest** for message bodies (AES-256-GCM), **global PHI log redaction**,
|
|
115
122
|
and **transport TLS** (HTTPS/WSS for the API plus MLLP-over-TLS) are **built**; MFA and off-box log
|
|
116
|
-
shipping remain on the roadmap. See [docs/PHI.md](https://github.com/
|
|
123
|
+
shipping remain on the roadmap. See [docs/PHI.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/PHI.md) for the full data-protection map.
|
|
117
124
|
|
|
118
125
|
## Features
|
|
119
126
|
|
|
@@ -132,9 +139,9 @@ transport TLS — and it runs single-node or in active-passive high availability
|
|
|
132
139
|
|
|
133
140
|
Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)**:
|
|
134
141
|
|
|
135
|
-
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** —
|
|
136
|
-
|
|
137
|
-
engine and the console/IDE that drive it.
|
|
142
|
+
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** — an
|
|
143
|
+
orientation guide to how the pieces fit: Connections → Router → Handlers → Connections, with the
|
|
144
|
+
headless engine and the console/IDE that drive it.
|
|
138
145
|
- **[Install Guide](https://messagefoundry.org/assets/docs/MessageFoundry-Install-Guide.pdf)** — install,
|
|
139
146
|
configure, secure, and roll out to production.
|
|
140
147
|
- **[User Guide](https://messagefoundry.org/assets/docs/MessageFoundry-User-Guide.pdf)** — author and
|
|
@@ -149,7 +156,7 @@ Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)*
|
|
|
149
156
|
**The recommended way to deploy MessageFoundry is to install the published package from
|
|
150
157
|
[PyPI](https://pypi.org/project/messagefoundry/)** — a signed, version-pinned wheel is the
|
|
151
158
|
supported production artifact, with no source checkout required. Install it as a **pinned
|
|
152
|
-
dependency**, then scaffold your own config repo ([ADR 0017](https://github.com/
|
|
159
|
+
dependency**, then scaffold your own config repo ([ADR 0017](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/adr/0017-consumer-deployment-model.md)):
|
|
153
160
|
|
|
154
161
|
```bash
|
|
155
162
|
pip install "messagefoundry==<version>" # pin the exact engine version (core runtime, SQLite store)
|
|
@@ -181,8 +188,8 @@ test harness* below for where to get it.
|
|
|
181
188
|
> **Verify before you install (supply chain).** Every release is built by a GitHub Actions workflow,
|
|
182
189
|
> Sigstore-signed, and carries SLSA build-provenance + PEP 740 attestations. Verify a downloaded
|
|
183
190
|
> wheel against its source commit with
|
|
184
|
-
> `gh attestation verify <wheel> --repo
|
|
185
|
-
> from the [GitHub Release assets](https://github.com/
|
|
191
|
+
> `gh attestation verify <wheel> --repo MEFORORG/MessageFoundry`, or pull the signed wheel + SBOM
|
|
192
|
+
> from the [GitHub Release assets](https://github.com/MEFORORG/MessageFoundry/releases). For an
|
|
186
193
|
> air-gapped site, mirror the wheel to a private index.
|
|
187
194
|
>
|
|
188
195
|
> *(Engine developers install from a checkout instead — see [Development](#development).)*
|
|
@@ -219,14 +226,14 @@ python -m messagefoundry.console --url http://127.0.0.1:8765
|
|
|
219
226
|
|
|
220
227
|
### VS Code extension & test harness
|
|
221
228
|
|
|
222
|
-
- **VS Code extension** ([`ide/`](https://github.com/
|
|
229
|
+
- **VS Code extension** ([`ide/`](https://github.com/MEFORORG/MessageFoundry/tree/main/ide/)) — author and test interfaces in your editor: a New Route
|
|
223
230
|
Wizard, validate-on-save, a Test Bench (dry-run `.hl7` files with before/after diffs), Stage →
|
|
224
231
|
Promote to a running engine, and an HL7-aware `@messagefoundry` chat participant. **It is not on PyPI**
|
|
225
232
|
(a VS Code extension is a different ecosystem) **and not yet on the VS Code Marketplace** — Marketplace
|
|
226
|
-
+ Open VSX publishing is **planned** (see [the backlog](https://github.com/
|
|
233
|
+
+ Open VSX publishing is **planned** (see [the backlog](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/BACKLOG.md)). Until then, get it from
|
|
227
234
|
this repo: open the `ide/` folder in VS Code and press **F5** (Extension Development Host), or build the
|
|
228
235
|
VSIX (`cd ide && npm install && npx @vscode/vsce package`) and install the `.vsix`. See
|
|
229
|
-
[ide/README.md](https://github.com/
|
|
236
|
+
[ide/README.md](https://github.com/MEFORORG/MessageFoundry/blob/main/ide/README.md).
|
|
230
237
|
- **Test harness** — synthetic-only send/receive (MLLP), load, and failover tooling for exercising a
|
|
231
238
|
running engine. It ships as a **separate distribution, `messagefoundry-harness`**, released in lockstep
|
|
232
239
|
with the engine (it is *not* in the engine wheel): `pip install messagefoundry-harness`, then
|
|
@@ -235,14 +242,14 @@ python -m messagefoundry.console --url http://127.0.0.1:8765
|
|
|
235
242
|
## License
|
|
236
243
|
|
|
237
244
|
MessageFoundry is licensed under the **GNU Affero General Public License v3.0 or later**
|
|
238
|
-
(`AGPL-3.0-or-later`) — see [LICENSE](https://github.com/
|
|
245
|
+
(`AGPL-3.0-or-later`) — see [LICENSE](https://github.com/MEFORORG/MessageFoundry/blob/main/LICENSE). Running a modified version as a network service
|
|
239
246
|
triggers the AGPL's §13 source-offer obligation. A separately-licensed commercial edition is planned
|
|
240
247
|
by **MessageFoundry Organization** under the standard open-core model — see
|
|
241
|
-
[COMMERCIAL-LICENSE.md](https://github.com/
|
|
248
|
+
[COMMERCIAL-LICENSE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/COMMERCIAL-LICENSE.md) (terms pending legal review). See [NOTICE](https://github.com/MEFORORG/MessageFoundry/blob/main/NOTICE)
|
|
242
249
|
for copyright and attribution.
|
|
243
250
|
|
|
244
251
|
## Contributing
|
|
245
252
|
|
|
246
|
-
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/
|
|
247
|
-
[Code of Conduct](https://github.com/
|
|
248
|
-
A signed [Contributor License Agreement](https://github.com/
|
|
253
|
+
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/MEFORORG/MessageFoundry/blob/main/CONTRIBUTING.md), our
|
|
254
|
+
[Code of Conduct](https://github.com/MEFORORG/MessageFoundry/blob/main/CODE_OF_CONDUCT.md), and how the project is governed in [GOVERNANCE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/GOVERNANCE.md).
|
|
255
|
+
A signed [Contributor License Agreement](https://github.com/MEFORORG/MessageFoundry/blob/main/CLA.md) is required before a pull request can be merged.
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# MessageFoundry
|
|
2
2
|
|
|
3
|
-
[](https://github.com/
|
|
6
|
-
[](https://github.com/
|
|
3
|
+
[](https://github.com/MEFORORG/MessageFoundry/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/MEFORORG/MessageFoundry/actions/workflows/security.yml)
|
|
5
|
+
[](https://github.com/MEFORORG/MessageFoundry/blob/main/LICENSE)
|
|
6
|
+
[](https://github.com/MEFORORG/MessageFoundry/blob/main/pyproject.toml)
|
|
7
|
+
|
|
8
|
+
**Website & documentation: [messagefoundry.org](https://messagefoundry.org/)** ·
|
|
9
|
+
**[Changelog](https://github.com/MEFORORG/MessageFoundry/blob/main/CHANGELOG.md)**
|
|
7
10
|
|
|
8
11
|
MessageFoundry is an **open-source healthcare integration engine** — a modern, Python-native HL7
|
|
9
12
|
interface engine. It connects clinical and business systems by routing, transforming, and validating
|
|
@@ -30,10 +33,10 @@ The PySide6 console talks to it over a localhost HTTP + WebSocket API — the sa
|
|
|
30
33
|
whether the engine runs in-process, as a local daemon, or (later) on a remote host.
|
|
31
34
|
No hand-rolled IPC; the deployment split is a config choice, not an architectural fork.
|
|
32
35
|
|
|
33
|
-
See **[docs/architecture-diagram.md](https://github.com/
|
|
36
|
+
See **[docs/architecture-diagram.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/architecture-diagram.md)** for the rendered diagrams —
|
|
34
37
|
system topology, runtime message flow through the staged queue, and the config wiring graph (Mermaid,
|
|
35
38
|
renders on GitHub and in the VS Code preview). The prose source of truth is
|
|
36
|
-
[docs/ARCHITECTURE.md](https://github.com/
|
|
39
|
+
[docs/ARCHITECTURE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/ARCHITECTURE.md).
|
|
37
40
|
|
|
38
41
|
### Key decisions
|
|
39
42
|
- **Reliable by default.** A durable, transactional pipeline gives at-least-once delivery,
|
|
@@ -47,7 +50,7 @@ renders on GitHub and in the VS Code preview). The prose source of truth is
|
|
|
47
50
|
- **PHI is first-class.** Authentication, RBAC, a user-attributed audit log of message
|
|
48
51
|
views/replays, **encryption-at-rest** for message bodies (AES-256-GCM), **global PHI log redaction**,
|
|
49
52
|
and **transport TLS** (HTTPS/WSS for the API plus MLLP-over-TLS) are **built**; MFA and off-box log
|
|
50
|
-
shipping remain on the roadmap. See [docs/PHI.md](https://github.com/
|
|
53
|
+
shipping remain on the roadmap. See [docs/PHI.md](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/PHI.md) for the full data-protection map.
|
|
51
54
|
|
|
52
55
|
## Features
|
|
53
56
|
|
|
@@ -66,9 +69,9 @@ transport TLS — and it runs single-node or in active-passive high availability
|
|
|
66
69
|
|
|
67
70
|
Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)**:
|
|
68
71
|
|
|
69
|
-
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** —
|
|
70
|
-
|
|
71
|
-
engine and the console/IDE that drive it.
|
|
72
|
+
- **[Mental map](https://messagefoundry.org/assets/docs/MessageFoundry-Mental-Model.pdf)** — an
|
|
73
|
+
orientation guide to how the pieces fit: Connections → Router → Handlers → Connections, with the
|
|
74
|
+
headless engine and the console/IDE that drive it.
|
|
72
75
|
- **[Install Guide](https://messagefoundry.org/assets/docs/MessageFoundry-Install-Guide.pdf)** — install,
|
|
73
76
|
configure, secure, and roll out to production.
|
|
74
77
|
- **[User Guide](https://messagefoundry.org/assets/docs/MessageFoundry-User-Guide.pdf)** — author and
|
|
@@ -83,7 +86,7 @@ Full documentation lives on **[messagefoundry.org](https://messagefoundry.org/)*
|
|
|
83
86
|
**The recommended way to deploy MessageFoundry is to install the published package from
|
|
84
87
|
[PyPI](https://pypi.org/project/messagefoundry/)** — a signed, version-pinned wheel is the
|
|
85
88
|
supported production artifact, with no source checkout required. Install it as a **pinned
|
|
86
|
-
dependency**, then scaffold your own config repo ([ADR 0017](https://github.com/
|
|
89
|
+
dependency**, then scaffold your own config repo ([ADR 0017](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/adr/0017-consumer-deployment-model.md)):
|
|
87
90
|
|
|
88
91
|
```bash
|
|
89
92
|
pip install "messagefoundry==<version>" # pin the exact engine version (core runtime, SQLite store)
|
|
@@ -115,8 +118,8 @@ test harness* below for where to get it.
|
|
|
115
118
|
> **Verify before you install (supply chain).** Every release is built by a GitHub Actions workflow,
|
|
116
119
|
> Sigstore-signed, and carries SLSA build-provenance + PEP 740 attestations. Verify a downloaded
|
|
117
120
|
> wheel against its source commit with
|
|
118
|
-
> `gh attestation verify <wheel> --repo
|
|
119
|
-
> from the [GitHub Release assets](https://github.com/
|
|
121
|
+
> `gh attestation verify <wheel> --repo MEFORORG/MessageFoundry`, or pull the signed wheel + SBOM
|
|
122
|
+
> from the [GitHub Release assets](https://github.com/MEFORORG/MessageFoundry/releases). For an
|
|
120
123
|
> air-gapped site, mirror the wheel to a private index.
|
|
121
124
|
>
|
|
122
125
|
> *(Engine developers install from a checkout instead — see [Development](#development).)*
|
|
@@ -153,14 +156,14 @@ python -m messagefoundry.console --url http://127.0.0.1:8765
|
|
|
153
156
|
|
|
154
157
|
### VS Code extension & test harness
|
|
155
158
|
|
|
156
|
-
- **VS Code extension** ([`ide/`](https://github.com/
|
|
159
|
+
- **VS Code extension** ([`ide/`](https://github.com/MEFORORG/MessageFoundry/tree/main/ide/)) — author and test interfaces in your editor: a New Route
|
|
157
160
|
Wizard, validate-on-save, a Test Bench (dry-run `.hl7` files with before/after diffs), Stage →
|
|
158
161
|
Promote to a running engine, and an HL7-aware `@messagefoundry` chat participant. **It is not on PyPI**
|
|
159
162
|
(a VS Code extension is a different ecosystem) **and not yet on the VS Code Marketplace** — Marketplace
|
|
160
|
-
+ Open VSX publishing is **planned** (see [the backlog](https://github.com/
|
|
163
|
+
+ Open VSX publishing is **planned** (see [the backlog](https://github.com/MEFORORG/MessageFoundry/blob/main/docs/BACKLOG.md)). Until then, get it from
|
|
161
164
|
this repo: open the `ide/` folder in VS Code and press **F5** (Extension Development Host), or build the
|
|
162
165
|
VSIX (`cd ide && npm install && npx @vscode/vsce package`) and install the `.vsix`. See
|
|
163
|
-
[ide/README.md](https://github.com/
|
|
166
|
+
[ide/README.md](https://github.com/MEFORORG/MessageFoundry/blob/main/ide/README.md).
|
|
164
167
|
- **Test harness** — synthetic-only send/receive (MLLP), load, and failover tooling for exercising a
|
|
165
168
|
running engine. It ships as a **separate distribution, `messagefoundry-harness`**, released in lockstep
|
|
166
169
|
with the engine (it is *not* in the engine wheel): `pip install messagefoundry-harness`, then
|
|
@@ -169,14 +172,14 @@ python -m messagefoundry.console --url http://127.0.0.1:8765
|
|
|
169
172
|
## License
|
|
170
173
|
|
|
171
174
|
MessageFoundry is licensed under the **GNU Affero General Public License v3.0 or later**
|
|
172
|
-
(`AGPL-3.0-or-later`) — see [LICENSE](https://github.com/
|
|
175
|
+
(`AGPL-3.0-or-later`) — see [LICENSE](https://github.com/MEFORORG/MessageFoundry/blob/main/LICENSE). Running a modified version as a network service
|
|
173
176
|
triggers the AGPL's §13 source-offer obligation. A separately-licensed commercial edition is planned
|
|
174
177
|
by **MessageFoundry Organization** under the standard open-core model — see
|
|
175
|
-
[COMMERCIAL-LICENSE.md](https://github.com/
|
|
178
|
+
[COMMERCIAL-LICENSE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/COMMERCIAL-LICENSE.md) (terms pending legal review). See [NOTICE](https://github.com/MEFORORG/MessageFoundry/blob/main/NOTICE)
|
|
176
179
|
for copyright and attribution.
|
|
177
180
|
|
|
178
181
|
## Contributing
|
|
179
182
|
|
|
180
|
-
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/
|
|
181
|
-
[Code of Conduct](https://github.com/
|
|
182
|
-
A signed [Contributor License Agreement](https://github.com/
|
|
183
|
+
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/MEFORORG/MessageFoundry/blob/main/CONTRIBUTING.md), our
|
|
184
|
+
[Code of Conduct](https://github.com/MEFORORG/MessageFoundry/blob/main/CODE_OF_CONDUCT.md), and how the project is governed in [GOVERNANCE.md](https://github.com/MEFORORG/MessageFoundry/blob/main/GOVERNANCE.md).
|
|
185
|
+
A signed [Contributor License Agreement](https://github.com/MEFORORG/MessageFoundry/blob/main/CLA.md) is required before a pull request can be merged.
|
|
@@ -2419,6 +2419,88 @@ investigation (2026-06-27).
|
|
|
2419
2419
|
|
|
2420
2420
|
---
|
|
2421
2421
|
|
|
2422
|
+
## 47. Embedded-document (base64 attachment) pruning — strip OBX-5 / `mfb64:` blobs after a per-connection window (Mirth attachment-handler parity) (P2)
|
|
2423
|
+
|
|
2424
|
+
**Type:** feature — selective PHI/storage minimization. Large **base64-encoded embedded documents** (PDF
|
|
2425
|
+
reports, CCD/C-CDA, scanned images) ride inline in messages — in HL7 they arrive in **OBX-5** (ED data
|
|
2426
|
+
type), and generically anywhere via the ADR 0028 `mfb64:v1:` carriage marker
|
|
2427
|
+
([`adr/0028-base64-binary-carriage-codec.md`](adr/0028-base64-binary-carriage-codec.md)). These blobs are
|
|
2428
|
+
often tens to hundreds of KB each and are stored verbatim in the raw message at **every** persisted stage
|
|
2429
|
+
(`ingress` → `routed` → `outbound`), so a chatty document feed bloats the store far out of proportion to
|
|
2430
|
+
its message *count*. The ask: let **each connection** carry a setting to **purge just the embedded
|
|
2431
|
+
documents** after a timeframe, keeping the rest of the message (segments, fields, metadata, disposition)
|
|
2432
|
+
intact.
|
|
2433
|
+
|
|
2434
|
+
**Gap today.** Retention is all-or-nothing on the whole body: the global `RetentionRunner`
|
|
2435
|
+
([`pipeline/retention.py`](../messagefoundry/pipeline/retention.py)) calls `purge_message_bodies`
|
|
2436
|
+
([`store/store.py`](../messagefoundry/store/store.py)), which **nulls the entire raw body** keep-metadata,
|
|
2437
|
+
store-wide, by message age only. There is no way to evict *only the bulky attachment* while preserving the
|
|
2438
|
+
surrounding HL7 (the segments an operator still wants to see), and no per-connection window (that broader
|
|
2439
|
+
gap is **#34**). Nothing offloads the blob at ingest either — it rides the pipeline inline.
|
|
2440
|
+
|
|
2441
|
+
**What Mirth does (researched 2026-06-26).** Mirth solves this with **two** complementary mechanisms, and
|
|
2442
|
+
it's worth deciding which we mirror:
|
|
2443
|
+
- **Attachment Handler (offload at ingest).** A per-channel handler on the source connector extracts bulky
|
|
2444
|
+
embedded content *before* the message is stored/transformed — e.g. a **Regex** handler pulls the base64
|
|
2445
|
+
PDF out of OBX-5, a **DICOM**/**JavaScript**/**Custom** handler for other shapes. The extracted bytes go
|
|
2446
|
+
to a **separate attachment table** (`d_ma<channelId>`) and the inline blob is replaced in the message by
|
|
2447
|
+
an **attachment token** (`${ATTACH:...}`); it's reattached on the outbound via the same token. A Base64
|
|
2448
|
+
decode option ([MIRTH-2799](https://www.mirthcorp.com/community/issues/si/jira.issueviews:issue-html/MIRTH-2799/MIRTH-2799.html))
|
|
2449
|
+
stores the *decoded* bytes, not the base64 string. This keeps the main message rows small and avoids
|
|
2450
|
+
loading the blob through every transformer step — the recommended lever to bound DB growth.
|
|
2451
|
+
- **Data Pruner (prune after a window).** A scheduled task prunes message **content** and **metadata** on
|
|
2452
|
+
*independent* clocks per channel's Message Storage settings — e.g. keep metadata indefinitely but prune
|
|
2453
|
+
content (incl. attachments) after 1 day. Attachments live in their own tables and are pruned with the
|
|
2454
|
+
content. Pruning runs only when the scheduler is enabled, and *which* messages prune is governed by the
|
|
2455
|
+
per-channel storage/`max_message_age` settings.
|
|
2456
|
+
*(Sources: [Zen Healthcare — The Data Pruner](https://consultzen.com/mirth-connect-tutorial-data-pruner/);
|
|
2457
|
+
[NextGen — Message Pruning Settings](https://docs.nextgen.com/en-US/mirth%C2%AE-connect-by-nextgen-healthcare-user-guide-3273569/message-pruning-settings-14245);
|
|
2458
|
+
[CapMinds — high-volume CCD/C-CDA channels](https://www.capminds.com/blog/optimizing-mirth-connect-channels-for-high-volume-ccd-c-cda-document-workflows/).)*
|
|
2459
|
+
|
|
2460
|
+
**Design fork (for the ADR).** The user's literal ask is the **prune-after-a-window** half (Mirth's Data
|
|
2461
|
+
Pruner, attachment-scoped). The more impactful half is **offload-at-ingest** (Mirth's Attachment Handler),
|
|
2462
|
+
which stops the bloat at the source instead of carrying it through three stages first. Decide whether to
|
|
2463
|
+
build (a) an in-place **selective strip** of the embedded document after a per-connection window — cheaper,
|
|
2464
|
+
matches the request, but the blob still bloats the store until the window elapses and is duplicated across
|
|
2465
|
+
stages meanwhile; (b) an **ingest-time offload** to a separate attachment store with a placeholder marker
|
|
2466
|
+
(true Mirth parity, bounds growth from the start, but a larger build touching the pipeline + a new store
|
|
2467
|
+
table + reattach-on-outbound); or (c) both, with (a) as the near-term increment.
|
|
2468
|
+
|
|
2469
|
+
**Scope (when built — increment (a)):**
|
|
2470
|
+
- A **per-connection `prune_documents_after` window** (with an embedded-doc size threshold), layered over a
|
|
2471
|
+
global default — the same **global-default + per-connection-override** model used for FIFO,
|
|
2472
|
+
`RetryPolicy`, `BuildupThreshold`, and proposed for **#34** retention. Author it on the inbound
|
|
2473
|
+
`ConnectionSpec` and/or as `connections.toml` keys (ADR 0007) so it stays hand-/GUI-editable.
|
|
2474
|
+
- A new store purge path (sibling to `purge_message_bodies`) that **rewrites the stored raw in place**,
|
|
2475
|
+
replacing each embedded document with a small **placeholder/tombstone** (size + content-type + a
|
|
2476
|
+
"pruned <ts>" marker) while leaving the rest of the message byte-stable. Target both carriage forms: the
|
|
2477
|
+
generic `mfb64:v1:` marker and HL7 **OBX-5 ED** embeds. **Never string-slice raw HL7** (CLAUDE.md §8) —
|
|
2478
|
+
edit via the parsed model / codec and re-encode. Must land on **all three** backends (SQLite / Postgres /
|
|
2479
|
+
SQL Server).
|
|
2480
|
+
- Preserve every invariant: **never delete the row** (counts / disposition / audit stay intact), the
|
|
2481
|
+
message remains parseable after the strip, and emit **one audit entry per pass** recording the
|
|
2482
|
+
per-connection window + counts + bytes reclaimed (no message content). Pruning a document is irreversible —
|
|
2483
|
+
surface it as a distinct disposition/flag so an operator viewing the message knows the attachment was
|
|
2484
|
+
evicted vs never present.
|
|
2485
|
+
|
|
2486
|
+
**Out of scope / leave to siblings:** whole-message retention windows and dead-letter pruning are **#34**
|
|
2487
|
+
(this is the *document-only*, finer-grained cut — they should share the per-connection-override plumbing).
|
|
2488
|
+
`audit_days` stays keep-forever. The ingest-time offload (fork (b)) is its own ADR if pursued.
|
|
2489
|
+
|
|
2490
|
+
**Why P2 / on-trigger.** Real document feeds (radiology results with embedded PDFs, CCDs) are exactly where
|
|
2491
|
+
store bloat bites, and PHI data-minimization wants the bulky attachment gone on a *shorter* clock than the
|
|
2492
|
+
clinical metadata — a standard Mirth operator expectation. But it's not an open exposure on the shipping
|
|
2493
|
+
config and wants an ADR (the design fork above) before code. **Trigger:** a feed carrying large OBX-5 / base64
|
|
2494
|
+
embedded documents whose volume bloats the store. Relates to **#34** (per-connection retention — shared
|
|
2495
|
+
override plumbing), **ADR 0028** (base64 carriage), and **#21**/**#33** (per-connection observability /
|
|
2496
|
+
config-UX).
|
|
2497
|
+
|
|
2498
|
+
**Source:** owner request (2026-06-26) — "let each connection purge base64 embedded documents (OBX-5 in
|
|
2499
|
+
HL7, or other message types) after a timeframe; they bloat the logs — research what Mirth does." Mirth
|
|
2500
|
+
attachment-handler + data-pruner behavior researched the same day (citations above).
|
|
2501
|
+
|
|
2502
|
+
---
|
|
2503
|
+
|
|
2422
2504
|
*Everything else from the 2026-06-10 full-codebase review (1 critical, 13 high, 33 medium, 31 low —
|
|
2423
2505
|
78 findings) has been remediated; see the review report's §6 action order. The two items it still
|
|
2424
2506
|
sourced — **#1 (SQL Server concurrency)** and **#2 (console off-thread)** — are now both **DONE**
|
|
@@ -91,6 +91,16 @@ definition drifted — the install script is idempotent (it stops and reconfigur
|
|
|
91
91
|
If the package was installed **non-editable** (a plain `pip install .`), the venv holds a
|
|
92
92
|
snapshot of the old code — run `.venv\Scripts\python.exe -m pip install -e .` first, then restart.
|
|
93
93
|
|
|
94
|
+
> **⚠ Upgrading from ≤ 0.2.5 → ≥ 0.2.6: tighten the config-dir ACLs first.** The config-directory
|
|
95
|
+
> permission guard (SEC-003 / ADR 0036) did **not** exist in 0.2.5. From 0.2.6 on, `serve` refuses to
|
|
96
|
+
> start against a `--config` directory **writable by a broad principal** (e.g. `Authenticated Users` /
|
|
97
|
+
> `S-1-5-11`) — *"refusing to load config from writable-by-others path …"*. A config dir that inherits
|
|
98
|
+
> that write (common under `C:\srv\…`) therefore **fails its first start after the upgrade**. Lock it
|
|
99
|
+
> down **before** restarting onto the new build — use the surgical recipe under
|
|
100
|
+
> [Lock down the config directory (CONFIG-2)](#lock-down-the-config-directory-config-2)
|
|
101
|
+
> (`icacls /inheritance:d /T` + `/remove:g *S-1-5-11 /T` + grant SYSTEM/Admins), the lighter-touch
|
|
102
|
+
> alternative to a full `/inheritance:r` reset for a shared tree.
|
|
103
|
+
|
|
94
104
|
## Start / stop / status
|
|
95
105
|
|
|
96
106
|
```powershell
|
|
@@ -190,6 +200,15 @@ trust boundary: anyone who can write a `.py` file there can run code as the serv
|
|
|
190
200
|
(full) and the service account (read+execute). It is **opt-in** because the config dir often lives
|
|
191
201
|
inside a developer's repo where stripping inheritance is surprising — for production, point
|
|
192
202
|
`-Config` at a dedicated admin-owned directory and pass `-LockConfigDir`.
|
|
203
|
+
- **Fix an existing tree that inherits a broad write grant** without a full ACL reset. A config dir
|
|
204
|
+
placed under a shared root (e.g. `C:\srv\…`) often inherits `Authenticated Users` (`S-1-5-11`)
|
|
205
|
+
write, which trips the guard below. The lighter-touch alternative to `/inheritance:r` is to break
|
|
206
|
+
inheritance, surgically drop just the broad principal, and grant the run-as user read+execute:
|
|
207
|
+
```powershell
|
|
208
|
+
icacls "C:\srv\mefor\config" /inheritance:d /T
|
|
209
|
+
icacls "C:\srv\mefor\config" /remove:g *S-1-5-11 /T
|
|
210
|
+
icacls "C:\srv\mefor\config" /grant "<run-as-user>:(OI)(CI)RX" /T
|
|
211
|
+
```
|
|
193
212
|
- The loader **actively enforces** this at load time (and on `/config/reload`), not just as a
|
|
194
213
|
documented recommendation (ADR 0036, SEC-003):
|
|
195
214
|
- On **Windows** the loader now parses the directory's and each `*.py`'s NTFS owner + DACL and
|
|
@@ -69,6 +69,24 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
69
69
|
"--sink-port", type=int, default=2700, help="load: base correlation-sink port"
|
|
70
70
|
)
|
|
71
71
|
parser.add_argument("--sink-ports", type=int, default=1, help="load: contiguous sink ports")
|
|
72
|
+
parser.add_argument(
|
|
73
|
+
"--skip-preflight",
|
|
74
|
+
action="store_true",
|
|
75
|
+
help="load: skip the 'engine serves all target ports' check — for driving a `supervise` "
|
|
76
|
+
"multi-shard cluster from one harness (the MLLP ports are spread across the shard engines, "
|
|
77
|
+
"so no single --engine serves them all). Point every shard's MEFOR_LOAD_SINK_PORT at this "
|
|
78
|
+
"run's --sink-port so the one correlation sink aggregates all shards' end-to-end throughput.",
|
|
79
|
+
)
|
|
80
|
+
parser.add_argument(
|
|
81
|
+
"--shard-engine",
|
|
82
|
+
action="append",
|
|
83
|
+
metavar="URL",
|
|
84
|
+
help="load: an EXTRA engine API base URL to poll + aggregate alongside --engine (repeatable). "
|
|
85
|
+
"Drives a `supervise` multi-shard cluster: pass --engine for the primary shard and one "
|
|
86
|
+
"--shard-engine per other shard, and the harness sums every shard's /stats so the no-loss "
|
|
87
|
+
"reconcile + drain see true cluster totals. Pair with --skip-preflight (no one engine serves "
|
|
88
|
+
"all MLLP ports). With none given the single --engine is polled exactly as before.",
|
|
89
|
+
)
|
|
72
90
|
parser.add_argument("--report-json", help="load: write the JSON report to this path")
|
|
73
91
|
parser.add_argument("--report-csv", help="load: write the per-phase CSV to this path")
|
|
74
92
|
parser.add_argument("--baseline", help="load: compare against this saved JSON report")
|
|
@@ -166,6 +184,8 @@ def _run_load(args: argparse.Namespace) -> int:
|
|
|
166
184
|
sink_port=args.sink_port,
|
|
167
185
|
sink_ports=args.sink_ports,
|
|
168
186
|
db_backend=args.db_backend,
|
|
187
|
+
skip_preflight=args.skip_preflight,
|
|
188
|
+
shard_engines=tuple(args.shard_engine or ()),
|
|
169
189
|
)
|
|
170
190
|
)
|
|
171
191
|
except PreflightError as exc:
|
|
@@ -18,6 +18,14 @@ Knobs (all optional, with safe defaults so ``serve`` works with none set):
|
|
|
18
18
|
* ``MEFOR_LOAD_ADT_PORT`` — ADT hub inbound MLLP port (default 2600).
|
|
19
19
|
* ``MEFOR_LOAD_RESULTS_PORT`` — results hub inbound MLLP port (default 2601).
|
|
20
20
|
* ``MEFOR_LOAD_OTHER_PORT`` — other hub inbound MLLP port (default 2602).
|
|
21
|
+
* ``MEFOR_LOAD_SHARD_ADT`` — ``supervise`` shard id for the ADT hub (default unset → no tag).
|
|
22
|
+
* ``MEFOR_LOAD_SHARD_RESULTS`` — ``supervise`` shard id for the results hub (default unset → no tag).
|
|
23
|
+
* ``MEFOR_LOAD_SHARD_OTHER`` — ``supervise`` shard id for the other hub (default unset → no tag).
|
|
24
|
+
|
|
25
|
+
Shards (all optional): tagging a hub with ``shard=`` routes it to a named ``messagefoundry supervise``
|
|
26
|
+
subprocess. **Unset (the default) = no tag = a single implicit shard**, so the SAME load graph serves
|
|
27
|
+
both unsharded (default) and sharded (e.g. ``MEFOR_LOAD_SHARD_ADT=a`` / ``_RESULTS=b`` / ``_OTHER=b``
|
|
28
|
+
→ a 2-shard layout) with no other change. The tags never affect routing.
|
|
21
29
|
|
|
22
30
|
The graph is **synthetic and generic** — it models the *shape* of a high-fan-out estate (one big ADT
|
|
23
31
|
hub plus results/orders hubs), never a real site. See ``docs/LOAD-TESTING.md``.
|
|
@@ -64,6 +72,13 @@ def _env_float(name: str, default: float, *, minimum: float = 0.0) -> float:
|
|
|
64
72
|
return value
|
|
65
73
|
|
|
66
74
|
|
|
75
|
+
def _env_shard(name: str) -> str | None:
|
|
76
|
+
"""A shard id from the environment, or ``None`` when unset/blank (= no shard tag)."""
|
|
77
|
+
raw = os.environ.get(name)
|
|
78
|
+
raw = raw.strip() if raw else ""
|
|
79
|
+
return raw or None
|
|
80
|
+
|
|
81
|
+
|
|
67
82
|
@dataclass(frozen=True)
|
|
68
83
|
class Shape:
|
|
69
84
|
"""Resolved load-graph parameters (read once from the environment at load time)."""
|
|
@@ -78,6 +93,9 @@ class Shape:
|
|
|
78
93
|
adt_port: int
|
|
79
94
|
results_port: int
|
|
80
95
|
other_port: int
|
|
96
|
+
shard_adt: str | None
|
|
97
|
+
shard_results: str | None
|
|
98
|
+
shard_other: str | None
|
|
81
99
|
|
|
82
100
|
def sink_endpoint(self, index: int) -> tuple[str, int]:
|
|
83
101
|
"""Round-robin a destination index across the contiguous sink port range."""
|
|
@@ -101,6 +119,9 @@ def load_shape() -> Shape:
|
|
|
101
119
|
adt_port=_env_int("MEFOR_LOAD_ADT_PORT", 2600, minimum=1),
|
|
102
120
|
results_port=_env_int("MEFOR_LOAD_RESULTS_PORT", 2601, minimum=1),
|
|
103
121
|
other_port=_env_int("MEFOR_LOAD_OTHER_PORT", 2602, minimum=1),
|
|
122
|
+
shard_adt=_env_shard("MEFOR_LOAD_SHARD_ADT"),
|
|
123
|
+
shard_results=_env_shard("MEFOR_LOAD_SHARD_RESULTS"),
|
|
124
|
+
shard_other=_env_shard("MEFOR_LOAD_SHARD_OTHER"),
|
|
104
125
|
)
|
|
105
126
|
|
|
106
127
|
|
|
@@ -69,10 +69,19 @@ _OTH_HANDLERS = _register_lane("OTH", _SHAPE.results_fanout, _SHAPE)
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
# Three inbound MLLP hubs matching the load profiles' target ports. Each fans every received message
|
|
72
|
-
# to its lane's full handler set (the sender sends only the matching types to each port).
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
inbound("
|
|
72
|
+
# to its lane's full handler set (the sender sends only the matching types to each port). Each hub may
|
|
73
|
+
# be tagged to a `supervise` shard via MEFOR_LOAD_SHARD_* (default unset → shard=None → no tag → a
|
|
74
|
+
# single implicit shard = byte-identical to the unsharded graph); see _shape.
|
|
75
|
+
inbound("IB_Load_ADT", MLLP(port=_SHAPE.adt_port), router="adt_router", shard=_SHAPE.shard_adt)
|
|
76
|
+
inbound(
|
|
77
|
+
"IB_Load_Results",
|
|
78
|
+
MLLP(port=_SHAPE.results_port),
|
|
79
|
+
router="results_router",
|
|
80
|
+
shard=_SHAPE.shard_results,
|
|
81
|
+
)
|
|
82
|
+
inbound(
|
|
83
|
+
"IB_Load_Other", MLLP(port=_SHAPE.other_port), router="other_router", shard=_SHAPE.shard_other
|
|
84
|
+
)
|
|
76
85
|
|
|
77
86
|
|
|
78
87
|
@router("adt_router")
|