database.py codait la base en dur en SQLite et ignorait la variable
DATABASE_URL fournie par le compose. Le conteneur recréait donc un
/app/regwatch.db vide à chaque démarrage (aucun volume), pendant que les
397 documents réels dormaient dans PostgreSQL : GET /documents renvoyait
[] et le cron de veille comptait dans PG des documents que les scrapers
écrivaient dans le SQLite jetable.
- DATABASE_URL est lu depuis l'environnement, le SQLite ne reste qu'en repli.
- check_same_thread n'est passé que pour SQLite (psycopg2 le rejette).
- psycopg2-binary ajouté : aucun driver PostgreSQL n'était installé.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le BOM (EF BB BF) précédait le shebang de entrypoint.sh : le noyau ne
voyait plus de shebang valide, d'où « exec ./entrypoint.sh: exec format
error » et le conteneur regwatch-backend en boucle de redémarrage.
Même BOM sur .gitignore, où il neutralisait le premier motif
(__pycache__/).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>