{ "ScadaLink": { "_nodeName": "Host-018: NodeName stamps SourceNode on AuditLog/Notifications/SiteCalls rows (CLAUDE.md 'Centralized Audit Log' decision) and backs IX_AuditLog_Node_Occurred. Convention: 'node-a'/'node-b' for site nodes, 'central-a'/'central-b' for central nodes. Override per-node in multi-node deployments (the docker per-node configs do this). When left at the default below, single-node dev rows are stamped with 'node-a'; an empty value normalises to a NULL SourceNode.", "Node": { "Role": "Site", "NodeHostname": "localhost", "SiteId": "site-a", "RemotingPort": 8082, "GrpcPort": 8083, "NodeName": "node-a" }, "Cluster": { "SeedNodes": [ "akka.tcp://scadalink@localhost:8082", "akka.tcp://scadalink@localhost:8084" ], "SplitBrainResolverStrategy": "keep-oldest", "StableAfter": "00:00:15", "HeartbeatInterval": "00:00:02", "FailureDetectionThreshold": "00:00:10", "MinNrOfMembers": 1 }, "Database": { "SiteDbPath": "./data/scadalink.db" }, "DataConnection": { "ReconnectInterval": "00:00:05", "TagResolutionRetryInterval": "00:00:10", "WriteTimeout": "00:00:30" }, "StoreAndForward": { "SqliteDbPath": "./data/store-and-forward.db", "ReplicationEnabled": true }, "Communication": { "_centralContactPoints": "Host-016: each entry MUST be a central node's remoting endpoint, NOT this site's own remoting port. The single dev-loopback default below points only at central-a (localhost:8081). In a multi-central deployment add the second central node here (e.g. 'akka.tcp://scadalink@central-b-host:8081') so ClusterClient can fail over when central-a is down. The previous template listed localhost:8082 as the second contact — that is THIS site's own RemotingPort and is a permanent failure in the initial-contact rotation.", "CentralContactPoints": [ "akka.tcp://scadalink@localhost:8081" ], "DeploymentTimeout": "00:02:00", "LifecycleTimeout": "00:00:30", "QueryTimeout": "00:00:30", "TransportHeartbeatInterval": "00:00:05", "TransportFailureThreshold": "00:00:15" }, "HealthMonitoring": { "ReportInterval": "00:00:30", "OfflineTimeout": "00:01:00" }, "SiteEventLog": { "RetentionDays": 30, "MaxStorageMb": 1024, "PurgeScheduleCron": "0 2 * * *" }, "Notification": {}, "Logging": { "MinimumLevel": "Information" } } }