AppContext extended with kis_client + kis_ws. lifespan: - If KIS_APP_KEY set: create KISClient + KISWebSocket, fetch portfolio, subscribe WebSocket H0STASP0 for holdings. - If unset: WARNING log, signal_v2 still serves /health (no KIS data). - Shutdown closes kis_ws → kis_client → stock client in order. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>