Skip to content

Update Chapter 7 ACL examples for v4 - #621

Merged
wes-johnson merged 1 commit into
eclipse-sparkplug:developfrom
wes-johnson:develop
Aug 13, 2026
Merged

wes-johnson merged 1 commit into
eclipse-sparkplug:developfrom
wes-johnson:develop

Conversation

@wes-johnson

@wes-johnson wes-johnson commented Aug 13, 2026 •

Copy link
Copy Markdown
Contributor

Update Chapter 7 ACL examples for v4

Removes one merged assertion — see Normative impact below.

The ACL examples predated the v4 message set, and an Edge Node provisioned from them would not be
conformant. Three subscriptions required by MUST statements were missing: REBIRTH
(tck-id-message-flow-edge-node-rebirth-subscribe), and the Edge Node's own NMETA plus each
Device's DMETA (tck-id-operational-behavior-meta-subscribe).

Example changes

  • All three Edge Node examples carry the full v4 publish set: NMETA, NMMETA, NBIRTH, NREBIRTH, NDATA,
    NRESP, NDEATH and the seven D-scoped equivalents. Noted which are conditional — NRESP/DRESP only for
    an Edge Node exposing Command metrics, NMMETA/DMMETA only for one that changes its metric structure
    while online.
  • Device level wildcard changed from + to #. device_tokens is one or more topic levels, so a
    single level wildcard silently fails for any Device addressed with more than one token.
  • The third example shows only the subscribe block, since the publishes are identical to the second.
    Added a note that REBIRTH cannot be dropped the way DCMD can.
  • Added a Sparkplug Host Application ACL example, which the chapter did not have.

Normative impact

This PR removes tck-id-security-acl-host-state-publish and adds nothing. Net effect on the
specification is one fewer assertion.

Review feedback on the first revision flagged an unmarked RFC2119 SHOULD NOT in the new Host
Application prose, duplicating that assertion. Addressing it surfaced two problems with the assertion
itself:

  1. Chapter 7 states "This chapter is provided for guidance only and is non-normative," and this was
    the only tck-testable statement in it. The chapter had zero at the v3 baseline and zero before
    [IMM-547] Added statements to protect against PHID bad actors and mis-configuration of PHID #620, which introduced it.
  2. It constrained how a deployment is provisioned, not the behavior of any conformance profile the
    spec defines — Sparkplug Edge Node, Sparkplug Host Application, Sparkplug Compliant MQTT Server,
    Sparkplug Aware MQTT Server. Every existing MQTT Server assertion is a capability requirement on a
    server implementation. No actor could claim or fail conformance against this one.

The substance is retained as guidance in both chapters, and Chapter 7 now contains no RFC2119
keywords, consistent with its own declaration. tck-id-security-acl-host-state-publish disappears
from Requirements.java on the next regeneration.

An earlier revision of this PR relocated the statement to Chapter 5 as a [tck-not-testable] MUST.
That has been reverted — it fixed the chapter placement but left an unbindable requirement and
silently raised the level from SHOULD to MUST. Chapter 5 is untouched by this PR.

Comment thread specification/src/main/asciidoc/chapters/Sparkplug_7_Security.adoc Outdated
The ACL examples predated the v4 message set, and an Edge Node provisioned
from them would not be conformant. Adds the full v4 publish set and the
three missing mandatory subscriptions: REBIRTH, the Edge Node's own NMETA,
and each Device's DMETA. Changes the device level wildcard from + to #,
since device_tokens may be more than one topic level deep. Adds a Host
Application ACL example, which the chapter did not have.

Also removes tck-id-security-acl-host-state-publish, which was added to
this chapter in the previous commit. Chapter 7 declares itself
non-normative, and that assertion was the only tck-testable statement in
it. It also constrained how a deployment is provisioned rather than the
behavior of any of the conformance profiles the specification defines, so
no actor could claim or fail conformance against it. The substance is
retained as guidance, and chapter 7 now contains no RFC2119 keywords.

If the working group wants this enforceable, the path is a requirement on
the Sparkplug Aware MQTT Server profile, which needs a binding from MQTT
client identity to Sparkplug Host Application ID that the specification
does not currently define. That is a separate proposal.
@wes-johnson
wes-johnson merged commit 8b6d1d4 into eclipse-sparkplug:develop Aug 13, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants