Prep — End-to-End Tests ============================================================ [1] Config Validation PASS valid config passes PASS missing AI_API_KEY fails PASS missing AI_MODEL fails PASS missing AI_BASE_URL fails PASS non-HTTPS URL rejected in production PASS non-HTTPS URL allowed in local PASS localhost URL rejected in production PASS localhost URL allowed with AI_ALLOW_LOCAL_URL PASS private IP rejected in production PASS unsafe provider string rejected PASS known provider passes PASS unknown provider treated as generic [2] AI Response Handling PASS valid questions JSON returns success PASS valid suggestions JSON returns success PASS AI returns insufficient document note PASS invalid JSON in AI content returns error — no provider dump PASS HTTP 500 returns only user-safe message PASS AI timeout returns user-safe message [3] Partial Results / Failure Flows PASS one task succeeds, other fails — partial results possible PASS both tasks fail — graceful total failure [4] Output Safety PASS error message never contains API key pattern PASS error message never contains file paths PASS error message never contains raw HTTP body PASS success response has clean structure [5] Provider-Specific PASS DeepSeek: json_object not sent, JSON instruction applied PASS DeepSeek markdown fence stripping works PASS OpenAI: json_object is sent for known providers ============================================================ Results: 27 passed, 0 failed, 27 total All E2E tests passed.