mirror of
https://github.com/turnstonelabs/turnstone.git
synced 2026-08-21 03:20:59 -06:00
9a2db63c07
* fix: collector JWT expiry causes silent workstream data wipe The console collector baked a one-time JWT snapshot into its httpx client headers at startup. After 1 hour (JWT expiry), every poll to server nodes returned 401. The error JSON was silently parsed as valid empty data, wiping all workstream state while nodes still appeared reachable — the cluster showed "10 nodes, 0 workstreams." Root causes fixed: - Collector: no auth baked into httpx.Client; per-request headers from ServiceTokenManager.token (auto-rotating) or static fallback - Proxy: same pattern — proxy_client/proxy_sse_client created without auth headers; _proxy_auth_headers() injects fresh token per-request - main(): static token snapshot only passed when no token_manager exists, preventing stale JWT from being stored anywhere - _fetch_node: raise_for_status() before .json() so 401s throw instead of returning error JSON as "0 workstreams" - Auth errors (401/403) logged at warning level for operator visibility * fix: address PR #126 review — type annotation, regression tests, log messages Tighten token_manager type from Any to ServiceTokenManager | None. Add two regression tests verifying 401/403 poll responses preserve existing workstream data and mark nodes unreachable. Fix misleading log messages: "jwt_minted" → "token_manager_created" since ServiceTokenManager mints lazily on first .token access.