docs(d-u28): component-scope UNS topics (retire main)#1
Merged
Conversation
Align file-replicator with the org-wide D-U28 UNS change: the instance
token is optional and the `main` sentinel is retired. Component-level
traffic (the command inbox, the `state` keepalive, component metrics,
and component-level events) is now component-scope and carries no
instance segment; per-instance events keep their real `component.instances[].id`.
Docs + code-comment accuracy only — no functional code change. Drops
`/main` from every UNS topic string and rewords `("main" instance)`
phrasing to `(component scope, no instance token)`. The fleet-consumer
subscription example is corrected for the new level count (component-scope
`state`/`metric`/component-level `evt` lose the instance `+`).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01628gPY2czyDFVkkeEdkRZr
Makes the built component emit component-scope topics (library heartbeat/facades/ command inbox on the D-U28 core drop the instance token). Flipped the one wire assertion: the component-scope get-status reply identity now has no instance (was `main`); per-instance emitters still carry Some(id). cargo test green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01628gPY2czyDFVkkeEdkRZr
…gets[])
Deployed Greengrass baseline on lab-5950x caught this: the recipe's default
ComponentConfig heartbeat still used the legacy `heartbeat.targets[]` array, which
the D-U28 core config schema rejects (`Additional properties are not allowed
('targets' was unexpected) at /heartbeat`) — so the component failed initial
config validation and never started. Move to the current schema
`{enabled, intervalSecs, destination, measures}`. Re-verified on-device: config
validates, and the republish listener, command inbox (both D-U28 scopes), and
heartbeat all init cleanly over IPC.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01628gPY2czyDFVkkeEdkRZr
mbreissi
marked this pull request as ready for review
July 16, 2026 19:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase-5 D-U28 alignment — file-replicator
Aligns file-replicator with the org-wide D-U28 UNS change: the instance token is now optional and the
mainsentinel is retired. Component-level traffic is component-scope (no instance segment); per-instance events keep their realcomponent.instances[].id.Docs + code-comment accuracy only — no functional code changed.
cargo checkis green.What changed
/mainfrom every UNS topic string: command inbox (…/cmd/#),statekeepalive (…/state), component metrics (…/metric/{name}),…/cmd/set-activation,…/cmd/get-status.("main" instance)/(main instance)doc-comment phrasing →(component scope, no instance token)insrc/{app,control,events}.rs.docs/reference/messaging-interface.md: component-scope inbox, instance token optional and present only for explicit multi-instance addressing.[{instance}/]), and corrected the fleet-consumer subscription example for the new level count (component-scopestate/metric/component-levelevtlose the instance+; a second+/evt/#line still catches per-instance events).Files
DESIGN.md— command-inbox topic stringdocs/how-to-guides.md— set-activation topic, metric topic, grammar + fleet-consumer subscriptions, "command inbox" wordingdocs/reference/configuration.md,docs/reference/metrics.md— metric topicdocs/reference/data-types.md— get-status topicdocs/reference/messaging-interface.md— grammar,{instance}bullet, command-inbox narrative, state + metric topicsdocs/tutorial.md— "component-scope command inbox" wordingsrc/app.rs,src/control.rs,src/events.rs— doc-comment/comment rewording + topic stringsVerification & a gap to flag
gg.commands()) / event facades (gg.instance(id).events()/gg.events()); the old hand-rolledparse_cmdrouter is already deleted. Every reference edited was a comment/doc/string.Cargo.tomlpinsedgecommonsto git rev1c01ace0, which is an ancestor of the D-U28 merge and does not include it — so the built component still emits themainsentinel today. These docs now lead the wired behavior.tests/p3_control_emqx.rs:396assertsidentity.instance() == "main"and is correct against the pinned pre-D-U28 core; it will need to flip to the no-instance value once the rev is bumped to a post-D-U28 commit. Bumping the rev + updating that test is a wire change requiring the interop matrix + lab regression, so it is intentionally not in this docs PR.🤖 Generated with Claude Code