Spaces:
Runtime error
Runtime error
Commit History
-
fix(qualite): ruff devient une vraie barriere, et trouve un schema mort et casse
Ruff tournait sans jeu de regles declare : 1332 signalements, dont 98 faux positifs sur le motif `Depends()` de FastAPI et 615 modernisations de style. Un controle que personne ne peut passer n'est pas un controle. Le jeu retenu ne garde que ce qui signale un defaut reel (F, E4, E7, E9, I, RUF100), avec des exceptions nommees la ou l'ordre des imports EST la protection : env.py doit poser sys.path avant d'importer les modeles, conftest doit surcharger DATABASE_URL avant d'importer l'application. Ce que le controle a alors trouve : - UN SCHEMA MORT ET CASSE. `LawDetailResponse` existait deja, exposant `List[ArticleResponse]`. Il n'etait branche sur aucune route, et il etait doublement inutilisable : ArticleResponse porte le CONTENU integral de chaque article — pour le Code Minier, 166 Ko servis deux fois — et son `number` etait plafonne a 20 caracteres alors que la colonne en fait 64 depuis qu'elle accueille « QUATRE-VINGT-DIX-SEPTIEME ». Le plafond du schema est corrige, et…7435134
-
fix(search): parametre lie au lieu de chaine castee pour le vecteur
BUG DE PRODUCTION : semantic_search construisait le vecteur de requete comme une chaine "[0.1,0.2,...]" puis la castait vers Vector(3072). Le convertisseur de pgvector attend une liste ou un ndarray et rejette une chaine ("expected list or ndarray") : la recherche semantique echouait a chaque appel. Le vecteur est desormais passe en parametre lie. Verifie sur une vraie base : 1 resultat, similarite 1.0000 sur vecteur identique. Egalement : - schemas/law.py : le validateur de statut n'autorisait que draft/published/ archived, alors que le pipeline utilise pending, processing et refused. LawResponse rejetait donc sa propre reponse (500) des qu'un document etait en cours de traitement ou en echec — precisement l'etat ou l'admin doit pouvoir le consulter. Les trois statuts du cycle d'ingestion sont ajoutes. Tests remis a niveau : - test_laws_api : fixture `db` inexistante, routes /api/v1/admin/laws au lieu de /api/v1/laws/admin (elles renvoyaient 404 depuis toujours), publicat…9697198 -
Etape 11 : authentification reelle branchee (demande n°2)
app/core/auth.py (188 lignes, JWT + bcrypt + roles) etait complet et importe par PERSONNE. Les 9 endpoints d'administration passaient par deux stubs renvoyant {"id": 1, "role": "admin"} : ils etaient ouverts a tous. BUG BLOQUANT decouvert en chemin : passlib 1.7.4 (derniere version, 2020) est incompatible avec bcrypt >= 4.1 — il lit bcrypt.__about__.__version__, supprime depuis. Avec bcrypt 5.x installe, hash_password echouait avec "password cannot be longer than 72 bytes" MEME pour 13 caracteres : l'authentification aurait ete inutilisable telle que declaree. -> bcrypt utilise directement, passlib retire des manifestes. Pre-hachage SHA-256 + base64 avant bcrypt : entree de longueur fixe, donc support des phrases de passe longues sans la troncature silencieuse a 72 octets de bcrypt (deux mots de passe partageant leurs 72 premiers octets etaient equivalents). Ajouts : - app/api/routes/auth.py : POST /login (formulaire OAuth2, l'URL exacte attendue par oauth2_scheme, donc le…da2ad52
-
chore: initial standalone backend for JuriX API (Render)
9cf9a2a