Unblock connect-subgraph CI: IRedisClient missing sadd/expire after bullmq 5.78 upgrade
completedConnect-subgraph test + build have been failing on main since 2026-06-12 with:
src/jobs/connectionQueue/index.ts(155,16): error TS2339: Property 'sadd' does not exist on type 'IRedisClient'.
src/jobs/connectionQueue/index.ts(156,16): error TS2339: Property 'expire' does not exist on type 'IRedisClient'.
ROOT CAUSE: bullmq 5.78 introduced a generic IRedisClient type in dist/esm/interfaces/redis-client.d.ts that only declares the subset of commands BullMQ uses. The connect-subgraph circuit-breaker code calls `await connectionQueue.client` (which is typed as IRedisClient) and then uses `client.sadd(key, member)` / `client.expire(key, ttl)`. These methods exist at runtime (ioredis is the backing client) but are not part of the IRedisClient surface.
FIX: in domains/connect/subgraph/src/jobs/connectionQueue/index.ts (around lines 145–165, the `addManufacturerRefreshFailure` and any related circuit-breaker helpers), cast the client to ioredis Redis (or any with eslint-disable) before calling sadd/expire. Cleanest: import `Redis` from 'ioredis' and cast: `const ioClient = (await connectionQueue.client) as unknown as import('ioredis').Redis;` Then ioClient.sadd / ioClient.expire / ioClient.smembers work with full types.
IMPACT: blocks every PR against connect-subgraph (incl. winston/connect-always-write-terminated-log #12309 BOLT-1286).
VERIFY: `cd domains/connect/subgraph && yarn typecheck` must pass before push. Then open PR with title 'fix(connect): cast bullmq IRedisClient to ioredis Redis for sadd/expire/smembers' and prefix [no-bolt-issue]. Tag in PR body: 'unblocks main CI which has been red since 2026-06-12'.
WORK SCOPE: ONLY domains/connect/subgraph/src/jobs/connectionQueue/index.ts. Do NOT touch the audit-log work from BOLT-1286 PR #12309.
Event Timeline
created
status_change
queued → in_progress
subagent_spawned
spawn claim: iredisclient-cast-fix
subagent_completed
subagent done: PR #12313 opened — typecheck+tests pass, awaiting CI+merge
status_change
in_progress → completed