Skip to the content.

Task 82 — RouterHealthTracker, Redis CAS, Postgres reconnect, BuildServiceProvider

Phase: 5 Initiative: 45 Status: done Owner: hercules-coder Started: 2026-08-16 Completed: 2026-08-16 Slug: router-redis-postgres-di-fixes

Goal

Четыре отдельных high-severity fix в mesh/DI layer:

  1. RouterHealthTracker (H13): RecordSuccess/RecordFailure (Mesh/Router/RouterHealthTracker.cs:120-131) мутируют _window, _index, _count, _successes без lock — data race, counter drift.
  2. Redis CAS (H14): RedisMeshStateStore.cs:148-170 — “optimistic locking” заявлен но не реализован: read-then-write без WATCH/MULTI/EXEC → race condition.
  3. Postgres LISTEN reconnect (H15): PostgresMeshBus.cs:278-289 — WaitAsync loop catch’ит Exception и тихо exits; при connection drop listener мёртв до restart процесса.
  4. BuildServiceProvider в registration (H16): MeshServiceExtensions.cs:451 — services.BuildServiceProvider() вызывается внутри AddMeshServices для resolution MeshProfileLoader → anti-pattern, duplicate container.

Acceptance criteria

Sub-tasks

Implementation notes (2026-08-16)

Behaviour delivered

Components

Tests

Validation

Scope / Likely files

src/agent/Mesh/Router/RouterHealthTracker.cs, src/agent/Mesh/Backends/Redis/RedisMeshStateStore.cs, src/agent/Mesh/Backends/Postgres/PostgresMeshBus.cs, src/agent/Mesh/MeshServiceExtensions.cs

Dependencies

Risks / Rollback

Redis WATCH/MULTI/EXEC добавляет round-trip; для non-CAS SetAsync не нужен. Postgres reconnect может маскировать persistent failure — log + metric на каждый reconnect. Rollback: individual git revert per fix.