Spaces:
Runtime error
Runtime error
Commit History
29 days ago
-
fix(image): les versions de l'image sont celles que la suite a testees
L'essai de deploiement de bout en bout a fait planter l'API au demarrage, des la migration : « The SQLAlchemy asyncio module requires that the Python 'greenlet' library is installed ». requirements.txt ne donne que des fourchettes, et l'image prenait les dernieres versions du jour : 21 paquets sur 73 differaient du venv, dont SQLAlchemy 2.1.4 (contre 2.0.52), qui n'installe plus greenlet de lui-meme. - requirements.txt : sqlalchemy[asyncio], qui apporte greenlet. - constraints.txt : les 76 versions exactes que requirements.txt fait installer, prises dans le venv ; le Dockerfile les impose (pip -c). scripts/figer_versions.sh le regenere, par une resolution dans python:3.11-slim. Chaque paquet compile a une roue cp311 manylinux aarch64 : rien a compiler sur la VM ARM. - Dockerfile : utilisateur et modele fastText (126 Mo) AVANT la copie du code, qui passe en COPY --chown. Avant, chaque mise a jour retelechargeait le modele, le chown -R le recopiait dans une couche de plus (i…e74628e
30 days ago
-
fix(deploiement): corrections de la revue avant le premier deploiement
Issus d'une revue adversariale des fichiers de deploiement : - deployer.sh passait la fin du deploiement a `ssh ... bash -s` sur l'entree standard : le premier `docker compose exec` (qui garde l'entree ouverte) avalait la suite du script. Rien apres l'attente de la base ne s'executait — ni restauration, ni build, ni demarrage — et le script finissait sans erreur. La fin vit dans demarrer.sh, un fichier lance sur la VM ; chaque exec sans entree recoit </dev/null. - La restauration initiale ne regardait que l'existence de la table laws : un seul demarrage de l'API (qui cree le schema) la faisait sauter pour toujours, sans un mot. Elle se fait si la base n'a AUCUNE loi, dans une base recreee, avec --exit-on-error. - Le dump embarquait les comptes de developpement (et leurs mots de passe d'essai), conversations, jetons et caches : joignables depuis internet. Il n'en garde que le schema ; demarrer.sh cree l'administrateur de production (ADMIN_EMAIL, ADMIN_PASSWORD). -…2afa5a5
-
fix(docker): le signal d'arret n'atteignait jamais uvicorn
`CMD` etait en forme shell : docker lance alors `/bin/sh -c "..."`, et c'est le SHELL qui recoit le SIGTERM de `docker stop`. uvicorn ne le voyait jamais et se faisait tuer au bout du delai de grace — donc le lifespan n'atteignait jamais son `finally`, ou vivent desormais la fermeture du pool de connexions et l'arret de la tache de purge des caches. Autrement dit, l'arret propre cable plus tot dans cette serie n'aurait pas fonctionne en production. Forme JSON avec `exec` : le shell reste necessaire pour `&&` et l'expansion de ${PORT}, mais il se fait remplacer par uvicorn, qui recoit alors le signal directement. `docker build --check` ne signale plus rien. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>44b9a02 -
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: nom du fichier telecharge, image de production, flux non bloquant
Le fichier telecharge portait le nom brut du fichier aspire depuis prc.cm : "10691_decret-n-2026-164-du-4-mai-2026-portant-approbation-des-statuts-...". Le prefixe numerique est l'identifiant interne du site source et les tirets remplacent une ponctuation qui existait. Le nom propose est desormais construit sur le TITRE du document, accents compris — Content-Disposition les encode via filename* (RFC 5987) — en ne retirant que les caracteres interdits par les systemes de fichiers et en bornant la longueur. Dockerfile. poppler-utils et tesseract-ocr (avec les dictionnaires francais et anglais) sont installes : sans poppler, GET /laws/{id}/page/{n} — la visionneuse par images — repond 500 en production alors qu'il fonctionne en developpement, ou le binaire est sur la machine. TESSERACT_PATH pointe le binaire Linux. Les migrations sont jouees au demarrage : le schema du produit vit dans alembic (search_vector, index GIN, declencheurs, extensions) et non dans Base.metadata, donc un contene…4093877
-
fix: restore requirements.txt for Docker build, remove obsolete redis/meilisearch/celery packages
a28fd7a
-
chore(backend): remove heavy ML models and spacy to reduce image size
d2e4a4d -
fix: switch from poetry to uv-compiled requirements.txt to fix deployment timeouts
aabe2a2
-
chore: migrate deployment config from Render to Railway
23d4e78
-
chore: initial standalone backend for JuriX API (Render)
9cf9a2a