69b3ccfc37
CLAUDE.md was corrected in34227991but the component docs were not, so the same understatements — plus several outright wrong statements — survived where a reader is most likely to meet them. ClusterInfrastructure.md carried the worst of it. It described active/standby as cluster leadership and showed an IsActiveNode snippet doing `cluster.State.Leader == self.Address`. No such code exists: ActiveNodeGate returns ClusterActivityEvaluator.SelfIsOldest, and ActiveNodeEvaluator's own doc comment says "never cluster.State.Leader". A second snippet (siteCallAuditShutdown .AddTask) described a hand-rolled drain that has since been folded into SingletonRegistrar.Start. Both snippets are replaced with what the code does. The central singleton table listed 3 of the 7 registered singletons. The downing section still described keep-oldest as the strategy and omitted downing-provider-class entirely; it now shows the branching blockcf3bd52fintroduced, with the accepted dual-active trade stated rather than the old "impossible to boot" framing. Note the requirements-side spec, docs/requirements/Component-ClusterInfrastructure.md, was already rewritten bycf3bd52f— this is the components-side doc, which was untouched. Communication.md described two transports; there are three — the deployment config fetch over HTTP was missing. Each row now names which side dials, because the gRPC entry gave a data direction (site to central) without saying who hosts the server, which reads as the opposite of the truth: the only MapGrpcService in the tree is in Program.cs's Site branch, and central dials in. The SiteEnvelope snippet called DeployInstanceAsync, which is not a member of CommunicationService; the heartbeat bullet claimed a cluster-leadership check; the proto summary listed 4 of 6 RPCs. DeploymentManager.md still said the pipeline sends DeployInstanceCommand carrying FlattenedConfigurationJson. It stages a PendingDeployment and sends a RefreshDeploymentCommand; the config travels over the HTTP fetch. That is the change the 128 KB frame-size issue forced, and the doc predated it. Two of the five briefed drifts turned out not to be errors: nothing claimed the transports were authenticated, and nothing asserted per-site ActorSystem names — both were simply unstated. They are now stated, since silence about an unauthenticated boundary is its own problem. Docs only; no code changed. Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW