35 lines
1.6 KiB
Markdown

# Aliyun key hot reload
This patch closes two key-rotation gaps in the production Chat API without
storing any credential in Git:
1. `video_gateway_api_key()` prefers a protected `*_API_KEY_FILE` on every
call, so the AI skill router cannot keep using the startup-cached value.
2. `CodexAppServerProcess` fingerprints the protected provider key before
every request. When the file changes and no request is pending, it replaces
only the persistent Codex child and resumes the existing thread.
Production base hashes used by this patch:
- `chat_api.py`: `de81004c50a96fdf2e0064340edab213139da6ef304014c1586a4059871a8a1b`
- `codex_app_server_runtime.py`: `13c4463c6226840ae1a751279b4ec830796fb8cb46e2491f245bbdfebc71dfb9`
Deployed hashes on 2026-09-08:
- `chat_api.py`: `878e4e0d4c7e5b91190f53b64dccca3154fa3a189ea006d2182d0930a9079c4f`
- `codex_app_server_runtime.py`: `1ba04cbd15842114c77e89e71c7f36a43a24bc77bac22fd88eeb5d714b573cb3`
The deployment was gated on zero queued/running durable tasks and zero real
Chat API requests in the previous five minutes. A backup was created at
`/opt/dalongxia-chat-api/backups/aliyun-key-hot-reload-mLOvGl` before the
service restart.
Verification:
- the supplied key file fingerprint matched the protected server key file;
- a direct `qwen3-vl-plus` request returned HTTP 200;
- the production health endpoint returned HTTP 200 after restart;
- the next two Codex shadow records completed successfully, while the three
immediately preceding records had failed with `CodexAppServerError`;
- no post-deployment `InvalidApiKey` or `API-key is blocked` error appeared.