## Résumé
Applique une validation structurelle partagée à `AI_BASE_URL` pour les trois providers (`openai`, `litellm`, `openai-compatible`) :
- HTTPS sauf `AI_ALLOW_INSECURE_HTTP=true`
- refus des credentials embarqués et des paramètres sensibles en query (y compris sans valeur)
- hostname requis, URL parseable, ports invalides rejetés gracieusement (aucune exception propagée)
- aucun ajout/retrait automatique de `/v1`
- warnings homogènes, portés par le provider et expurgés via `redact_url()`
- la factory ne lève jamais et ne fait aucun appel réseau
- `openai-compatible` reste le seul à exiger `AI_BASE_URL` et `AI_MODEL`
## Validation
- `tests/unit/test_synthesis.py` : 79 tests
- suite complète : 784 tests passés
- Ruff, mypy strict, pre-commit complet passés
- revue indépendante : APPROVED ; vérification indépendante : VERIFIED (matrice d'URL invalides/valides, aucun accès réseau, URL transmise inchangée)
Closes #17
Applique une validation structurelle partagée (https, absence de credentials et de paramètres sensibles, aucun ajout /v1) aux providers openai, litellm et openai-compatible ; homogénéise les warnings expurgés et durcit le parsing pour que la factory ne lève jamais.
Refs #17
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Résumé
Applique une validation structurelle partagée à
AI_BASE_URLpour les trois providers (openai,litellm,openai-compatible) :AI_ALLOW_INSECURE_HTTP=true/v1redact_url()openai-compatiblereste le seul à exigerAI_BASE_URLetAI_MODELValidation
tests/unit/test_synthesis.py: 79 testsCloses #17
OK pour fusion