# Deployment compatibility decisions

The [reference-scenario contract](../contracts/scenario-support-v1.json)
separates exercised behavior from customer approval. These findings are case
inputs, not reasons to repeat completed lab matrices. For an actual deployment,
record the required source behavior, chosen exact target setting or client/
application change, decision authority, verification receipt and rollback
consequence in its private case. Keep unresolved requirements as blockers.

| Decision | Required resolution before customer cutover |
| --- | --- |
| `B3-MOSQ-ACL-001` | Inventory actual subscription filters and denial-response handling. Mosquitto can grant a broad filter and filter deliveries; target rejects filters outside explicit ACL coverage. Use a verified explicit-filter client plan with an accepted change, or supply equivalent required behavior. Unauthorized MQTT 3.1.1 PUBACK versus close also needs a client response decision. No lab receipt approves a client change. |
| `B3-EMQX-LIMIT-001` | Record required packet/payload, inflight, client-ID, topic-alias/depth, subscription and session limits. Native-check exact target settings and replay the required boundary cases. Small-packet reference traffic does not approve reduced limits; leave unsupported limits blocked rather than truncating or dropping data. |
| `B3-EMQX-DENY-001` | Verify how clients handle unauthorized publication. Source ACK/ignore and target disconnect both prevent application delivery but have different reconnect/retry behavior. Record an accepted response contract or implement and verify the required mapping. |
| `B3-MOSQ-BRIDGE-RETRY-001` | Resolve source automatic reconnect versus finite target application retries and terminal dead letters. If indefinite automatic delivery is required, the bounded reference profile does not satisfy it. A chosen manual/application recovery procedure needs stable IDs, duplicate handling, terminal ownership and an exercised reconciliation path. Do not automatically requeue a completed or ambiguous effect. |
| `B3-EMQX-ACTION-POLICY-001` | Resolve source elapsed TTL/drop versus finite target attempts and durable quarantine, including buffer bytes/counts/concurrency. Define the allowed delivery deadline and terminal outcome; equal numeric settings do not imply equal policies. Preserve source-expired and target-quarantined IDs separately. A chosen loss/retry/compensation change needs the deployment's decision receipt. |

The reference profiles also have limits that need a new case when selected:
custom auth plugins/backends/chains, mTLS identity mapping, broad or overlapping
ACL semantics outside the exercised policies, arbitrary rule SQL/transforms,
multiple actions/fallback ordering, other connectors, bidirectional links,
MQTT 5 bridge lineage, persistent remote bridge sessions and clustered ownership.
These are **unqualified by this migration kit**, not declarations that every
underlying product feature is absent.

State movement uses explicit drain, retained reseed/reconciliation and client
reconnect/resubscription. Native database files, sessions, offline queues,
packet IDs and expiry timers are not automatically imported. Same-broker
PostgreSQL recovery evidence does not prove cross-broker state conversion.

Readiness is per deployment: unresolved mappings, absent required traffic,
unproven state treatment, failed drain, missing ownership authority or unknown
external effects block its cutover. Repository kit completion does not set a
customer case's `live_migration_completed` or grant a production deployment.
