5fd7bf524a
Adds the third replicator sibling next to Replicator.SqlServer and Replicator.AkkaDotNet: the central-hosted gRPC secrets hub. This commit is scaffold only -- project, wire contract, solution wiring -- no service or client implementation. The proto mirrors exactly the read half of ISecretReplicationHub (GetManifestAsync, GetManyAsync). ApplyReplicatedAsync is deliberately NOT mirrored: in this topology every update originates at central and a site node is a strict follower, so the narrow contract IS the enforcement -- with no write RPC on the wire, a mis-wired or compromised site node has no way to push a row into the hub regardless of what its authorization allows. Messages are hand-written mirrors of StoredSecret and SecretManifestEntry rather than serializations of the domain types, following the Akka replicator's SecretRowDto precedent: the trust boundary stays structural, and a field added to StoredSecret later cannot start crossing the network merely by existing. Timestamps are ISO-8601 "O" strings (not google.protobuf. Timestamp, which cannot round-trip a DateTimeOffset's offset) so a relayed row is byte-identical to the one central holds; nullable .NET fields use proto3 explicit presence so null and empty string stay distinguishable. Grpc 2.76.0 / Google.Protobuf 3.34.1 match what ScadaBridge, OtOpcUa and the sibling ZB.MOM.WW.LocalDb libraries already resolve, so a consumer taking both gets one Grpc rather than a downgrade warning. Claude-Session: https://claude.ai/code/session_014WNM4vjoVksyyBraTXSZE1