Skip to content

docs(d-u28): component-scope UNS topics (retire main)#1

Merged
mbreissi merged 3 commits into
mainfrom
feat/d-u28-topics
Jul 16, 2026
Merged

docs(d-u28): component-scope UNS topics (retire main)#1
mbreissi merged 3 commits into
mainfrom
feat/d-u28-topics

Conversation

@mbreissi

Copy link
Copy Markdown
Contributor

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 main sentinel is retired. Component-level traffic is component-scope (no instance segment); per-instance events keep their real component.instances[].id.

Docs + code-comment accuracy only — no functional code changed. cargo check is green.

What changed

  • Dropped /main from every UNS topic string: command inbox (…/cmd/#), state keepalive (…/state), component metrics (…/metric/{name}), …/cmd/set-activation, …/cmd/get-status.
  • Reworded ("main" instance) / (main instance) doc-comment phrasing → (component scope, no instance token) in src/{app,control,events}.rs.
  • Rewrote the narrative command-inbox line in docs/reference/messaging-interface.md: component-scope inbox, instance token optional and present only for explicit multi-instance addressing.
  • Made the UNS grammar show the instance segment as optional ([{instance}/]), and corrected the fleet-consumer subscription example for the new level count (component-scope state/metric/component-level evt lose the instance +; a second +/evt/# line still catches per-instance events).

Files

  • DESIGN.md — command-inbox topic string
  • docs/how-to-guides.md — set-activation topic, metric topic, grammar + fleet-consumer subscriptions, "command inbox" wording
  • docs/reference/configuration.md, docs/reference/metrics.md — metric topic
  • docs/reference/data-types.md — get-status topic
  • docs/reference/messaging-interface.md — grammar, {instance} bullet, command-inbox narrative, state + metric topics
  • docs/tutorial.md — "component-scope command inbox" wording
  • src/app.rs, src/control.rs, src/events.rs — doc-comment/comment rewording + topic strings

Verification & a gap to flag

  • No topic-parsing code touched. file-replicator delegates all topic handling to the library command inbox (gg.commands()) / event facades (gg.instance(id).events() / gg.events()); the old hand-rolled parse_cmd router is already deleted. Every reference edited was a comment/doc/string.
  • Dependency gap: Cargo.toml pins edgecommons to git rev 1c01ace0, which is an ancestor of the D-U28 merge and does not include it — so the built component still emits the main sentinel today. These docs now lead the wired behavior. tests/p3_control_emqx.rs:396 asserts identity.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

mbreissi and others added 3 commits July 16, 2026 02:48
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
mbreissi marked this pull request as ready for review July 16, 2026 19:06
@mbreissi
mbreissi merged commit 55741dc into main Jul 16, 2026
4 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.

1 participant