Repository navigation
docs: add custom workload MQTT contract guidance to AIO messaging paper - #852
Conversation
📚 Documentation Health ReportGenerated on: 2026-10-05 22:11:46 UTC 📈 Documentation Statistics
🏗️ Three-Tree Architecture Status
🔍 Quality Metrics
This report is automatically generated by the Documentation Automation workflow. |
|
Decision 5 (component 507) is resolved: I confirmed the guidance doesn't conflict with the |
Marcel Bindseil (bindsi)
left a comment
There was a problem hiding this comment.
Thanks Alain, this is a solid, well-scoped addition and the core guidance is sound. On the owner decisions:
- Destination: Extending
aio-messaging-design.mdis fine. The paper already covers custom workloads on AIO messaging. - Security: I'm OK to review this, with three changes needed before sign-off:
- State that default-deny only applies when a BrokerAuthorization is bound to the listener via
authorizationRef. - Scope
Connectrules so a principal can only use its own client IDs, which prevents cross-workload session takeover. - Require TLS for listeners and external brokers.
- State that default-deny only applies when a BrokerAuthorization is bound to the listener via
- Privacy: A separate review isn't needed if the identifier rules are tightened:
{producer}and{resource-id}stay opaque and non-identifying.- Logged topics contain no site, customer, or person identifiers.
- Correlation IDs are random.
- Any payload digest is keyed (HMAC).
The main blocker is #835 decision 3, which isn't in the PR's decision list. Earlier in the same paper, custom connectors are told to follow the CloudEvents MQTT binding. The new envelope defines parallel fields with no mapping and doesn't say whether they're carried as MQTTv5 properties or in the body. Please either map each field to its CloudEvents attribute, or explicitly scope the envelope away from that convention. Decision 5 (principal substitution in topic rules) should also be added or explicitly deferred.
Smaller items:
- Reconcile "no site identifiers in topics" with the paper's
site01/...asset example and the UNS section. - Broaden the publish-loop rule to wildcard subscriptions that match the workload's own output.
- Clarify dedup scope and window, and the meaning of "client ID per trust boundary" vs. "per replica".
- Link the AIO 2609 release notes for the three version-specific claims.
- Update
estimated_reading_timeandkeywords. - Rebase on
main, since the branch is behind. - Consider
Refs #835until the owner approvals are recorded on the PR.
Happy to re-review once these are in.
PR description items (not anchorable inline; document findings are inline):
- Owner Decisions list (Medium): add #835 D3 (envelope alignment with CloudEvents) and D5 (which topic segments may use authenticated-principal substitution), and name who resolved the Component 507 item.
Closes #835(Medium): merging closes #835 while documentation-owner confirmation, security-owner approval, and two reviewer approvals are still open. Record approvals here before merge, or switch toRefs #835.- Branch BEHIND
main(Medium): update and let the docs checks re-run on the new head. - Security Review checkboxes (Low): "RBAC and identity changes follow least-privilege" and "No new network exposure" are checked, but this PR has no RBAC or network change. Mark them N/A pending security-owner review so they aren't read as sign-off.
- Republish rule wording (Low): the description calls it "the AIO 2609 rule that a workload never republishes to its source topic"; the doc correctly frames it as a recommendation mirroring the MQTT connector check. Suggest: "Recommends that workloads never republish to their source topic, mirroring the AIO 2609 MQTT connector rule that rejects identical source and destination topics."
- Sources and validation (Low): the MQTT QoS ADR link is repo-relative and 404s from the PR page; use
https://github.com/microsoft/edge-ai/blob/main/docs/solution-adr-library/mqtt-qos.md. Also add the 2609 release-notes URL to Sources and describe what "Manual validation" covered.
4d12a68 to
e800345
Compare
|
Thanks Marcel Bindseil (@bindsi), really thorough review. All findings are addressed in e800345, and the branch is rebased on
One deviation: for SAT refresh I followed the Learn authentication page (read the current token on each connection and reconnect after an unauthorized error) instead of MQTTv5 re-authentication before expiry, which Learn doesn't describe. I replied on each thread and left them unresolved for you to confirm. |
📚 Documentation Health ReportGenerated on: 2026-10-07 17:25:51 UTC 📈 Documentation Statistics
🏗️ Three-Tree Architecture Status
🔍 Quality Metrics
This report is automatically generated by the Documentation Automation workflow. |
- versioned topics, envelopes, and AIO 2609 publish-loop and external-broker rules - workload identity and least-privilege authorization with shared-subscription grants - payload-safe diagnostics, synthetic validation cases, and ownership roles - update the schema generation tool link 📨 - Generated by Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- carry the envelope as CloudEvents attributes with a mapping table - require bound authorization, TLS, client-ID scoped Connect rules, AIO 2609 minimum - broaden publish-loop and dedup rules; split unit and authorization checks - tighten identifier, digest, and logging rules; cite release notes; update frontmatter 📨 - Generated by Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- carry the semantic version in the schema URI format or an extension attribute - warn that a conflicting dataschema makes data flows drop the message 📨 - Generated by Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
e800345 to
fadc99f
Compare
📚 Documentation Health ReportGenerated on: 2026-10-08 11:40:18 UTC 📈 Documentation Statistics
🏗️ Three-Tree Architecture Status
🔍 Quality Metrics
This report is automatically generated by the Documentation Automation workflow. |
All requested changes were addressed in e800345 and fadc99f (CloudEvents envelope mapping, authorizationRef binding, client-ID-scoped Connect rules, TLS, privacy rules, D5 token substitution, and the smaller items), with a reply on each thread. Approved by @katriendg and @rezatnoMsirhC. Dismissing to unblock the dependent PRs; happy to follow up on anything further in a new PR.
📚 Documentation Health ReportGenerated on: 2026-10-08 13:22:13 UTC 📈 Documentation Statistics
🏗️ Three-Tree Architecture Status
🔍 Quality Metrics
This report is automatically generated by the Documentation Automation workflow. |
Pull Request
Description
Adds a Custom Workload Messaging Contracts section to
docs/solution-technology-paper-library/aio-messaging-design.md. The section gives product-neutral guidance for custom workloads that publish to or consume from the AIO MQTT broker:dataschema. Existing schemas such as the 507image_snapshotv1 schema from feat(application): add transport-independent snapshot-normalizer-core crate to component 507 #831 are referenced, not redefined.authorizationRef.Connectrules scoped to each principal's client IDs, with principal token substitution for per-workload topic scoping.The guidance is documentation only. It adds no broker configuration, runtime code, or environment-specific values. The PR also updates the paper's existing schema-generation tool link (the old URL returns 404), its frontmatter description, keywords, and reading time, and adds
SUBACKto the IoT Operations spelling dictionary.Related Issue
Refs #835. Once the owner approvals below are recorded on this PR, #835 can be closed.
Owner Decisions From #835
aio-messaging-design.mdis fineauthorizationRef,Connectrules scoped to each principal's client IDs, and TLS for listeners and external brokers. Awaiting sign-off.{producer}and{resource-id}are opaque, logged topics exclude identifiers, IDs are generated randomly, and digests are keyed (HMAC). Awaiting confirmation.{principal.attributes.<name>}on the{producer}segment, and{principal.clientId}only with client-ID-scopedConnectrules. Awaiting confirmation.image_snapshotv1 schema and doesn't replace any component-owned schema.Type of Change
Implementation Details
Sources:
authorizationRefbinding, which also requires a linked BrokerAuthentication;authorizationRef;ConnectrulesTesting Performed
Validation Steps
image-snapshot-v1.schema.json.Connectclient-ID scoping, SAT audience and token refresh, and the three 2609 changes. Each envelope mapping was checked against the CloudEvents attributes in the paper's Data Source section.Checklist
terraform fmton all Terraform codeterraform validateon all Terraform codeaz bicep formaton all Bicep codeaz bicep buildto validate all Bicep codeSecurity Review
Additional Notes
ms.topic: solution-articleon this file. The warning predates this change, and I left the value alone so the paper's documentation-site placement doesn't change.