Skip to content

feat(orchestrator): auto node interview after inclusion (part of #203)#224

Merged
Assar63 merged 1 commit into
masterfrom
feat/interview-orchestrator
Jun 18, 2026
Merged

feat(orchestrator): auto node interview after inclusion (part of #203)#224
Assar63 merged 1 commit into
masterfrom
feat/interview-orchestrator

Conversation

@Assar63

@Assar63 Assar63 commented Jun 18, 2026

Copy link
Copy Markdown
Owner

The core of #203 — the post-inclusion interview now runs automatically, closing the gap where device identity was only gathered on a manual poke.

What

src/orchestrator/InterviewOrchestrator.cpp (bus-only, priority 204): on a node joining it runs an ordered Get sequence, advancing on each matching typed report:

ManufacturerSpecific -> Version -> [Multi Channel endpoints if CC 0x60] -> [Z-Wave+ Info if CC 0x5E] -> NodeInterviewComplete
  • The ManufacturerSpecificReport it triggers feeds PolicyRegister::noteDeviceIdentity, so device-level policy defaults become matchable (the headline gap from the issue).
  • Ordering: realises SecurityBootstrap → Interview — a node whose NIF advertises S0/S2 is deferred until it reports secure (NodeSecurityStatus), so the Gets ride the encrypted channel; a non-secure node is interviewed straight off NodeIncluded.
  • Emits NodeInterviewComplete{nodeId} — the seam the InclusionOrchestrator policy step will key off (next layer).

Manifest adds the NodeInterviewComplete event and an orchestrator publisher on the four Get*Command events.

Tests

3 bus-driven tests: rich node runs the full 4-step sequence to completion; a minimal node skips the optional endpoint/Z-Wave+ steps; a secure node defers until NodeSecurityStatus. 474/474 ctest green on both gnu and llvm; clang-format + clang-tidy clean.

Remaining #203 layers

  • gate the InclusionOrchestrator policy step on NodeInterviewComplete (order becomes SecurityBootstrap → Interview → Policy, device defaults match);
  • persist the gathered identity (mfr/product, CC versions, endpoints, Z-Wave+ role) into node-registry so the console detail pane + Node info window #45 show it;
  • sleeping-node interview via PendingQueue.

Part of #203. Hardware acceptance under #189.

🤖 Generated with Claude Code

Add InterviewOrchestrator (bus-only, priority 204): on a node joining it runs
an ordered Get sequence and advances on each matching typed report —

  ManufacturerSpecific -> Version -> [Multi Channel endpoints if CC 0x60]
  -> [Z-Wave+ Info if CC 0x5E] -> NodeInterviewComplete

— so device identity is gathered automatically instead of only on a manual
poke. The ManufacturerSpecific report it triggers feeds PolicyRegister's
noteDeviceIdentity, so device-level policy defaults become matchable.

Realises the SecurityBootstrap -> Interview ordering: a node whose NIF lists
S0/S2 is deferred until it reports secure (NodeSecurityStatus), so the Gets
ride the encrypted channel; a non-secure node is interviewed off NodeIncluded.

Manifest adds the NodeInterviewComplete event and an `orchestrator` publisher
on the four Get*Command events. 3 bus-driven tests (rich node full sequence,
minimal node skips optional steps, secure node defers). 474/474 ctest green on
gnu + llvm; clang-format + clang-tidy clean.

Remaining #203 layers: gate the InclusionOrchestrator policy step on
NodeInterviewComplete; persist the gathered identity into node-registry;
sleeping-node interview via PendingQueue. Hardware-verified in #189.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Assar63 Assar63 merged commit 11f73ec into master Jun 18, 2026
3 checks passed
@Assar63 Assar63 deleted the feat/interview-orchestrator branch June 18, 2026 05:35
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