refactor(mesh): collapse MeshPaths to local actor names — no longer a wire contract (review follow-up)

MeshPaths.CentralCommunication / .NodeCommunication (the "/user/..." full-path constants) had
ZERO production consumers after the ClusterClient deletion: both gRPC services resolve their
comm actor through ActorRegistry by typed key, never by ActorSelection over a path. Only the
path-probe test still read them, while the class doc went on calling them "the wire contract
of the central↔node boundary" — a claim that stopped being true the moment nothing addressed
an actor across a process boundary by name.

  - The two full-path constants are deleted; the two Name constants remain.
  - MeshPaths' doc now says what it is (the local actor-naming convention the registry-keyed
    services are spawned under) and records what it stopped being, so the next reader does not
    re-derive a contract from the file's history.
  - MeshCommActorPathTests composes "/user/" + Name itself — the absolute path is that test's
    own addressing detail now, not something the product declares. Renamed
    Both_mesh_comm_actors_exist_at_their_contract_paths ->
    ..._are_spawned_under_their_declared_names, because what it still pins is that the two
    registration sites actually ran on a real booted node; a rename is now a compile error, so
    "contract" was the wrong word for what would break.
  - NodeCommunicationActor's summary no longer cross-references the deleted constant or calls
    the name an address. CentralCommunicationActor was checked and makes no such claim.
This commit is contained in:
Joseph Doherty
2026-08-06 16:14:25 -04:00
parent 4d2dfb5b50
commit cd7135570c
3 changed files with 62 additions and 37 deletions
@@ -8,9 +8,11 @@ using ZB.MOM.WW.OtOpcUa.Commons.OpcUa;
namespace ZB.MOM.WW.OtOpcUa.Runtime.Communication;
/// <summary>
/// Node-side end of the central↔node command boundary (per-cluster mesh Phase 2), living at
/// <see cref="MeshPaths.NodeCommunication"/> — the path this node's <c>NodeCommandService</c>
/// gRPC ingress hands every decoded command to.
/// Node-side end of the central↔node command boundary (per-cluster mesh Phase 2). This node's
/// <c>NodeCommandService</c> gRPC ingress hands it every decoded command, resolving it from
/// <c>ActorRegistry</c> by <c>NodeCommunicationActorKey</c> — the actor's name
/// (<see cref="MeshPaths.NodeCommunicationName"/>) is a local convention, not an address anything
/// off-process uses.
/// </summary>
/// <remarks>
/// <para>