Problem
Four *-log-tracker.ts files each copy-paste ~70 lines of identical global store + subscriber logic:
claude-log-tracker.ts
codex-log-tracker.ts
copilot-cli-log-tracker.ts
copilot-sdk-log-tracker.ts
Each file implements the same pattern:
Symbol.for() global store keys
getLogStore() / getSubscriberStore() helpers
notifySubscribers() with identical error swallowing
recordXxxLogEntry() / consumeXxxLogEntries() / subscribeToXxxLogEntries()
Total: ~280 lines of duplicated boilerplate.
Proposal
Create a generic createLogTracker<T>(namespace: string) factory in a shared log-tracker-factory.ts that returns typed { record, consume, subscribe } functions. Each provider tracker becomes a one-liner.
Acceptance criteria