This website requires JavaScript.
02177fec7c
docs(mesh): Phase 6 plan — mesh partition + co-location topology
Joseph Doherty
2026-07-24 01:07:54 -04:00
35552a9608
Merge feat/mesh-phase5: per-cluster mesh Phase 5 — gRPC live-telemetry stream
Joseph Doherty
2026-07-23 17:20:53 -04:00
f134935f99
docs(mesh-phase5): live gate PASSED — record + program status DONE
Joseph Doherty
2026-07-23 17:11:52 -04:00
97b2911327
chore(mesh-phase5): task ledger — tasks 0-11 complete, live gate pending
Joseph Doherty
2026-07-23 16:56:13 -04:00
d15c613ef3
feat(mesh-phase5): dark-switch central telemetry ingest (Dps bridges | Grpc dialer)
Joseph Doherty
2026-07-23 16:48:34 -04:00
84fa2e1e43
fix(mesh-phase5): dial supervisor — re-dial on endpoint change, pin no-restart invariant, throttle skip warnings
Joseph Doherty
2026-07-23 16:43:09 -04:00
ffb75b7854
chore(mesh-phase5): rig telemetry ports + shared key + ClusterNode.GrpcPort seed
Joseph Doherty
2026-07-23 16:39:29 -04:00
e99ea40e2f
docs(mesh-phase5): telemetry stream — Telemetry.md, config keys, supersede §6.3, program status
Joseph Doherty
2026-07-23 16:33:29 -04:00
1104785c89
feat(mesh-phase5): central telemetry dial supervisor (discover + reconnect + feed sinks)
Joseph Doherty
2026-07-23 16:28:57 -04:00
af9c9d78da
test(mesh-phase5): 3-port listener reachability + comment fix for the telemetry endpoint
Joseph Doherty
2026-07-23 16:18:15 -04:00
a279a43ed4
fix(mesh-phase5): harden telemetry client onError contract (validate/isolate/defend)
Joseph Doherty
2026-07-23 16:12:02 -04:00
f131c1cca5
feat(mesh-phase5): host the telemetry gRPC server on driver nodes (dedicated h2c port)
Joseph Doherty
2026-07-23 16:05:40 -04:00
2e70ef88aa
fix(mesh-phase5): telemetry service — graceful client-disconnect + null-safe required-string mapping
Joseph Doherty
2026-07-23 16:02:26 -04:00
50f1620d79
feat(mesh-phase5): fail-closed bearer interceptor for the telemetry stream
Joseph Doherty
2026-07-23 15:58:45 -04:00
c78034f0b9
feat(mesh-phase5): central telemetry dialer client + proto->domain converters
Joseph Doherty
2026-07-23 15:55:06 -04:00
e742fee452
feat(mesh-phase5): node-side TelemetryStreamService (hub -> server-streaming)
Joseph Doherty
2026-07-23 15:48:06 -04:00
909d75357b
test(mesh-phase5): cover the ScriptedAlarmHostActor + VirtualTagActor telemetry taps
Joseph Doherty
2026-07-23 15:38:12 -04:00
7bdb6d00ec
fix(mesh-phase5): telemetry hub — plain Dictionary under gate, concurrency stress test, priming/eviction notes
Joseph Doherty
2026-07-23 15:30:24 -04:00
8e5090edf3
feat(mesh-phase5): tap the 4 telemetry publish seams into the local hub (DPS intact)
Joseph Doherty
2026-07-23 15:27:29 -04:00
9882b1d250
feat(mesh-phase5): node-local telemetry hub (snapshot-replay + drop-oldest fan-out)
Joseph Doherty
2026-07-23 15:08:56 -04:00
53ae0100a2
feat(mesh-phase5): Telemetry/TelemetryDial options + fail-closed validators
Joseph Doherty
2026-07-23 15:03:40 -04:00
a845a6d2fd
feat(mesh-phase5): telemetry.proto contract + oneof + contract-lock test
Joseph Doherty
2026-07-23 14:58:53 -04:00
094c29d13d
docs(mesh-phase5): plan — gRPC live-telemetry stream (4-channel scope, dark switch, authed)
Joseph Doherty
2026-07-23 14:56:20 -04:00
3a590a0cb7
refactor(mesh-phase4): retire EfAlarmConditionStateStore + drop dead ScriptedAlarmState table (Task 9)
Joseph Doherty
2026-07-23 14:33:11 -04:00
26fad75c8a
Merge branch 'feat/mesh-phase4' — per-cluster mesh Phase 4 (cut the driver-side ConfigDb connection)
Joseph Doherty
2026-07-23 14:18:28 -04:00
1281aebfa7
docs(mesh-phase4): live gate PASSED — driver nodes run ConfigDb-free
Joseph Doherty
2026-07-23 14:03:28 -04:00
0170614961
docs(mesh-phase4): Task 10 done; Task 11 live gate in progress
Joseph Doherty
2026-07-23 13:22:35 -04:00
0be20ab4fb
chore(mesh-phase4): rig site nodes run with no ConfigDb string (FetchAndCache mandatory)
Joseph Doherty
2026-07-23 13:22:18 -04:00
95fa7bd5a0
docs(mesh-phase4): Task 8 done (55a6e1f2 recorded)
Joseph Doherty
2026-07-23 13:19:27 -04:00
55a6e1f2b2
docs(mesh-phase4): ServiceLevel semantics on DB-less nodes + driver ConfigDb cut
Joseph Doherty
2026-07-23 13:18:57 -04:00
6f21213f70
test(mesh-phase4): pin driver-only ConfigDb-free DI graph + fused-node mapper ordering
Joseph Doherty
2026-07-23 13:10:42 -04:00
4253d20248
docs(mesh-phase4): Task 3 done (73ae8ec5 ) — address-space wipe fixed
Joseph Doherty
2026-07-23 12:58:37 -04:00
73ae8ec5c5
fix(mesh-phase4): OpcUaPublish diff-applies from in-hand bytes with no ConfigDb (no wipe)
Joseph Doherty
2026-07-23 12:53:28 -04:00
e791832d7c
docs(mesh-phase4): Tasks 4+6 done (d9071607 ); Task 3 confirmed hard prereq
Joseph Doherty
2026-07-23 12:48:13 -04:00
d907160747
feat(mesh-phase4): DriverHostActor runs ConfigDb-free (LocalDb alarm store, guarded acks)
Joseph Doherty
2026-07-23 12:39:41 -04:00
4f4cdd05ec
feat(mesh-phase4): LocalDb alarm-condition-state store (replicated, pair-local)
Joseph Doherty
2026-07-23 12:19:44 -04:00
34b613d942
docs(mesh-phase4): Task 2 done; fold review findings into Task 4 brief
Joseph Doherty
2026-07-23 12:07:42 -04:00
9565827275
feat(mesh-phase4): retire DB-reachability from ServiceLevel on DB-less nodes
Joseph Doherty
2026-07-23 11:55:43 -04:00
5c40908a55
docs(mesh-phase4): add Task 1b (driver-only LDAP mapper) discovered during Task 1
Joseph Doherty
2026-07-23 11:48:45 -04:00
833e45db9c
fix(mesh-phase4): driver-only nodes map LDAP groups from appsettings (no ConfigDb grants)
Joseph Doherty
2026-07-23 11:44:44 -04:00
a41582ea6a
feat(mesh-phase4): register ConfigDb only on admin-role nodes
Joseph Doherty
2026-07-23 11:38:40 -04:00
d630a7e267
feat(mesh-phase4): driver-only node must be FetchAndCache (validator)
Joseph Doherty
2026-07-23 11:29:45 -04:00
bc611969a9
docs(mesh-phase4): plan — cut the driver-side ConfigDb connection
Joseph Doherty
2026-07-23 11:22:48 -04:00
d01b0695c2
Merge branch 'feat/mesh-phase3' — per-cluster mesh Phase 3 (config fetch-and-cache)
Joseph Doherty
2026-07-22 22:35:14 -04:00
248e70b425
docs(mesh): Phase 3 live-gate record — PASSED (caught+fixed the Sealed-gate deadlock)
Joseph Doherty
2026-07-22 20:48:58 -04:00
d9de4e3019
fix(mesh): serve the artifact regardless of deployment status (Phase 3 live-gate deadlock)
Joseph Doherty
2026-07-22 20:21:47 -04:00
44df30236e
fix(docker-dev): pin the build stage to linux/amd64 so Grpc.Tools protoc runs
Joseph Doherty
2026-07-22 20:11:28 -04:00
cf6110d02c
docs(mesh): ConfigSource/ConfigServe config, rig flip switch, Phase 3 as shipped
Joseph Doherty
2026-07-22 20:06:23 -04:00
b3210686e2
chore(mesh): mark Phase 3 tasks 7-8 complete
Joseph Doherty
2026-07-22 19:58:10 -04:00
ffbcaa93f2
test(mesh): real two-Host gRPC artifact-fetch boundary test with wrong-key control
Joseph Doherty
2026-07-22 19:57:48 -04:00
fc568ae0fa
test(mesh): #485 empty/corrupt/mismatch coverage on the FetchAndCache paths
Joseph Doherty
2026-07-22 19:54:42 -04:00
23cd6e0118
chore(mesh): mark Phase 3 tasks 5-6 complete
Joseph Doherty
2026-07-22 19:45:12 -04:00
6d00473866
feat(mesh): FetchAndCache bootstrap from the LocalDb pointer; no driver-side config SQL read
Joseph Doherty
2026-07-22 19:44:48 -04:00
648f173b18
feat(mesh): FetchAndCache apply path — fetch->cache->apply-from-bytes, null=apply-failure
Joseph Doherty
2026-07-22 19:39:26 -04:00
1a7e3f7ea3
chore(mesh): mark Phase 3 tasks 3-4 complete
Joseph Doherty
2026-07-22 19:29:09 -04:00
7a8fb5f129
feat(mesh): node gRPC artifact fetcher — SHA-verified reassembly, endpoint failover, null-on-any-failure
Joseph Doherty
2026-07-22 19:28:48 -04:00
4d88f67c0d
feat(mesh): config-serve auth interceptor + dedicated h2c listener (fail-closed bearer)
Joseph Doherty
2026-07-22 19:22:55 -04:00
b28c071bec
chore(mesh): mark Phase 3 tasks 0-2 complete
Joseph Doherty
2026-07-22 19:08:30 -04:00
7d7de482b7
feat(mesh): central DeploymentArtifactService — stream the sealed artifact, NotFound-hide the rest
Joseph Doherty
2026-07-22 19:08:20 -04:00
62e8f54f71
feat(mesh): deployment_artifact.v1 proto + first in-repo Grpc.Tools codegen
Joseph Doherty
2026-07-22 19:04:58 -04:00
9d1e60c00c
feat(mesh): ConfigSource/ConfigServe options + validator (Phase 3 dark switch)
Joseph Doherty
2026-07-22 19:03:39 -04:00
b3cb0f4a54
docs(mesh): Phase 3 plan — config fetch-and-cache from central (gRPC + shared key)
Joseph Doherty
2026-07-22 19:00:36 -04:00
6eaa81cae7
Merge branch 'feat/mesh-phase2' — per-cluster mesh Phase 2 (ClusterClient transport)
Joseph Doherty
2026-07-22 18:42:57 -04:00
32055c2238
docs(mesh): Phase 2 live-gate record + correct the buffer-size rationale
Joseph Doherty
2026-07-22 18:40:42 -04:00
986b640eea
chore(mesh): mark Phase 2 task 9 complete
Joseph Doherty
2026-07-22 17:46:55 -04:00
e4cb9a08e0
docs(mesh): MeshTransport config, Phase 2 as shipped, design-doc correction
Joseph Doherty
2026-07-22 17:46:46 -04:00
4eca87f04d
chore(mesh): mark Phase 2 task 8 complete; record the orphaned-client follow-up
Joseph Doherty
2026-07-22 17:32:49 -04:00
5468b79d19
test(mesh): real two-ActorSystem ClusterClient boundary test with falsifiability control
Joseph Doherty
2026-07-22 17:32:19 -04:00
d246a7e44d
docs(mesh): live-gate step 8 — single-oldest-central rotation discriminator for the per-node comm-actor property (replaces the dropped Task 6 assertion)
Joseph Doherty
2026-07-22 17:18:49 -04:00
68b804c88c
chore(mesh): mark Phase 2 tasks 6-7 complete
Joseph Doherty
2026-07-22 16:50:28 -04:00
2a2e54f083
feat(mesh): route deploy, driver-control and alarm commands through the mesh router
Joseph Doherty
2026-07-22 16:50:27 -04:00
16d598560a
feat(mesh): register comm actors with the receptionist; pin the wire-contract paths
Joseph Doherty
2026-07-22 16:42:07 -04:00
95e4f97529
chore(mesh): mark Phase 2 tasks 3-5 complete
Joseph Doherty
2026-07-22 12:19:37 -04:00
5cb0e72166
feat(mesh): node subscribers accept EventStream commands; _coordinatorOverride -> _ackRouter
Joseph Doherty
2026-07-22 12:19:29 -04:00
915beec11a
feat(mesh): NodeCommunicationActor — inbound commands to the node-local EventStream
Joseph Doherty
2026-07-22 12:12:12 -04:00
d5b5cb6ede
feat(mesh): CentralCommunicationActor — dark-switched fan-out, DB-sourced contacts
Joseph Doherty
2026-07-22 12:10:05 -04:00
e762ae00f2
chore(mesh): mark Phase 2 tasks 0-2 complete
Joseph Doherty
2026-07-22 10:45:25 -04:00
0d6669d5ff
feat(mesh): MeshCommand envelope + generation-suffixed ClusterClient factory
Joseph Doherty
2026-07-22 10:45:13 -04:00
7b71a6a35d
feat(mesh): receptionist extension, zero ClusterClient buffering, frame-size logging
Joseph Doherty
2026-07-22 10:42:54 -04:00
5439f14804
feat(mesh): MeshTransportOptions — dark switch between DPS and ClusterClient
Joseph Doherty
2026-07-22 10:39:37 -04:00
1ec831883c
docs(mesh): Phase 2 plan — comm actors + ClusterClient transport
Joseph Doherty
2026-07-22 10:37:37 -04:00
7654f24dab
test(harness): serialize Host.IntegrationTests; drop the reconciler's unused singleton proxy
Joseph Doherty
2026-07-22 09:51:10 -04:00
0b7c53f64f
test(harness): widen the deploy-seal timeout to match a real two-node deploy
Joseph Doherty
2026-07-22 09:28:32 -04:00
14746f2995
test(harness): seed ClusterNode rows in in-memory mode; retarget the failover deploy test
Joseph Doherty
2026-07-22 09:19:53 -04:00
e27b7f43f5
chore(mesh): mark Phase 1 tasks complete
Joseph Doherty
2026-07-22 09:07:48 -04:00
ee69caa270
feat(config): add ClusterNode.MaintenanceMode — the hatch the live gate proved missing
Joseph Doherty
2026-07-22 09:07:29 -04:00
57e1d01766
docs(mesh): rig seed + Phase 1 documentation
Joseph Doherty
2026-07-22 08:38:45 -04:00
90c1302f71
feat(fleet): reconcile ClusterNode dial targets against live membership
Joseph Doherty
2026-07-22 08:36:44 -04:00
d88e245503
feat(deploy): coordinator sources its expected-ack set from ClusterNode rows
Joseph Doherty
2026-07-22 08:30:46 -04:00
da74ebd696
feat(config): migration AddClusterNodeTransportPorts
Joseph Doherty
2026-07-22 08:26:39 -04:00
2bbb02713c
feat(config): add ClusterNode.AkkaPort/GrpcPort — central's dial targets
Joseph Doherty
2026-07-22 08:22:46 -04:00
e7311f11a6
docs(mesh): program tracking — Phase 1 plan already exists from the design session; surface its deploy-seal decision gate
Joseph Doherty
2026-07-22 08:12:57 -04:00
9af935f237
docs(cluster): self-first seed ordering replaces the self-form fallback
Joseph Doherty
2026-07-22 07:46:02 -04:00
3f24d4d6bf
feat(cluster)!: self-first seed ordering replaces the InitJoin self-form watchdog
Joseph Doherty
2026-07-22 07:42:06 -04:00
a78425ea8f
docs(plans): record the Task 8 live finding — self-form races the join handshake
Joseph Doherty
2026-07-22 07:19:34 -04:00
ea45ace1c3
fix(cluster): don't self-form while a seed peer is reachable — the fallback islanded a restarting node
Joseph Doherty
2026-07-22 07:03:07 -04:00
d8a85c3d89
feat(adminui): manual failover control on the cluster redundancy page
Joseph Doherty
2026-07-22 06:44:44 -04:00
69b697bc3e
feat(redundancy): manual failover service — graceful Leave of the driver Primary
Joseph Doherty
2026-07-22 06:40:58 -04:00
983310edbb
docs(redundancy): record the self-form fallback live gate as PASSED on docker-dev
Joseph Doherty
2026-07-22 06:35:06 -04:00
b853185cfd
docs(redundancy): SelfFormAfter closes the seed-node bootstrap gap
Joseph Doherty
2026-07-22 06:10:11 -04:00