Commit Graph

1002 Commits

Author SHA1 Message Date
Colin Maudry a38b2d5e71 Remplacement du Loading... screen 2026-07-02 12:03:50 +02:00
Colin Maudry 74afb7aef8 Nettoayge 2026-07-02 11:46:42 +02:00
Colin Maudry 2ed560d4e8 Nettoayge 2026-07-02 11:32:45 +02:00
Colin Maudry cd107a0213 Refactor structure modules pages/compte, petits changements de texte 2026-07-02 10:53:01 +02:00
Colin Maudry 9ff2373ccb decp.info => colibre 2026-07-01 18:00:36 +02:00
Colin Maudry 126834c7d4 fix(subscriptions): un abonnement en échec (failed) ne bloque plus le réabonnement 2026-07-01 16:56:34 +02:00
Colin Maudry 872fc33dd7 feat(subscriptions): cancel/webhook/add_payment_callback sur get_current et customer_known 2026-07-01 16:41:57 +02:00
Colin Maudry 0ffe647657 feat(subscriptions): subscribe() génère et transmet le handle, mark_failed en cas d'échec 2026-07-01 14:37:25 +02:00
Colin Maudry 179e6e436d feat(subscriptions): create_subscription_session prend le handle en paramètre 2026-07-01 14:34:09 +02:00
Colin Maudry 64158e9080 feat(subscriptions): historique multi-lignes + subscriber_state + handle abo-{user_id}-N
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 14:29:47 +02:00
Colin Maudry f52b2b7b71 docs: plan d'implémentation pour le handle d'abonnement et l'historique
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 14:24:42 +02:00
Colin Maudry b077fd318d docs: note la vérification de méthode de paiement réelle comme suivi séparé
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 14:13:39 +02:00
Colin Maudry 17c379f0b3 docs: design pour le handle d'abonnement personnalisé et l'historique des abonnements
Spec pour remplacer generate_handle par un handle abo-{user_id}-N unique,
ce qui nécessite de scinder subscriptions en historique multi-lignes et
d'introduire subscriber_state pour l'état cumulatif (votes, essai).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 14:12:11 +02:00
Colin Maudry a2c20adb4e perf: paginer/agréger les pages acheteur et titulaire côté DuckDB
Les pages acheteur/titulaire chargeaient l'intégralité des marchés d'une
organisation dans un dcc.Store côté client (jusqu'à 16k lignes pour les
plus gros acheteurs), envoyée sur le réseau à chaque interaction. Le
tableau, le top 10 et l'histogramme des distances récupèrent maintenant
leurs données via des requêtes DuckDB scopées (pagination/agrégation
poussées en SQL), sur le modèle déjà utilisé par la page tableau.

Corrige aussi le CLS des mêmes pages en réservant l'espace des
conteneurs remplis par callback (carte, top 10, histogramme).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 13:46:44 +02:00
Colin Maudry 8515ba8d84 refactor: replace all decpinfo with colibre in test suite
Update all client and fixture references throughout the test suite
to use colibre branding instead of the legacy decpinfo naming.

- test_auth.py: token format
- benchmark.py: token format documentation
- test_routes.py: customer handles
- test_client.py: customer identifiers
- test_db.py: all database fixtures

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-01 11:19:25 +02:00
Colin Maudry 190b8154b4 refactor: replace decpinfo with colibre in test client identifiers
Update test fixtures and client references to use colibre branding
instead of the legacy decpinfo naming convention.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-01 11:17:18 +02:00
Colin Maudry a1bf0b381b fix: reduce subscribe button width to fit content
Adjust the width of the 'S'abonner' button to match the label size
using CSS width: fit-content property.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-01 11:10:19 +02:00
Colin Maudry 63a7ff3d89 Petites améliorations de formulation et d'UI 2026-07-01 10:17:25 +02:00
Colin Maudry 502d3b390a Icones colibre temporaires #57 2026-06-30 23:09:26 +02:00
Colin Maudry 2e9888998a Bump 3.0.0 2026-06-30 23:07:50 +02:00
Colin Maudry 7184b7768a feat(seo): index de sitemaps acheteurs/titulaires, canonical, robots
- robots.txt déclare désormais le sitemap
- /sitemap.xml devient un index de sous-sitemaps paginés (limite 50k URLs/fichier)
  générés depuis DuckDB et mis en cache 24h : pages statiques, acheteurs, titulaires
- balise canonical auto-référente (JS, car index_string Dash partagé)
- config nginx de référence : 301 decp.info → colibre.fr (chemin préservé)
- tests SEO via test client Flask

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 23:06:46 +02:00
Colin Maudry 9e8ad6c74b decp.info => colibre dans llms.md #57 2026-06-30 22:48:13 +02:00
Colin Maudry 41491159a3 Ajouts des icones colibre #57 2026-06-30 22:41:19 +02:00
Colin Maudry 64d4821fae fix(tests): met à jour le préfixe de token decpinfo_ → colibre_ #57
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 21:49:51 +02:00
Colin Maudry 9b124deeea refactor: rebrand decp.info to colibre #57
- Rename project from decp.info to colibre across all codebase
- Update domain from https://decp.info to https://colibre.fr
- Update GitHub repo references to ColinMaudry/colibre
- Rename deployment files: decpinfo-backup.* → colibre-backup.*
- Update project configuration and documentation
- Rename project assets: decp.info.png → colibre.png
- Update environment variables and constants (DOMAIN_NAME, TOKEN_PREFIX, GITHUB_REPO, etc.)
- Update URLs in all pages, tests, and configuration files
- Keep DECP acronym in text (unchanged per requirements)
- Add rebrand note to README.md

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-30 21:43:33 +02:00
Colin Maudry b46d5d8244 Redirection llms.txt pour les LLMS 2026-06-30 21:02:14 +02:00
Colin Maudry d8faccab46 fix: corrige bug build_database + fiabilise et isole la suite de tests
src/db.py : le remplacement des noms d'organisation nuls utilisait
.name.keep() sur une expression concat_str référençant *_id ; Polars nommait
alors le résultat d'après *_id, écrasant la colonne titulaire_id/acheteur_id et
laissant *_nom inchangée. Remplacé par .alias(col).

Suite de tests — élimination de la pollution inter-tests (callbacks/conn
globaux Dash) qui faisait échouer ~15 tests Selenium en exécution complète :
- tests/conftest.py : DUCKDB_PATH et DATA_SCHEMA_CACHE pointent sur des chemins
  de test isolés (tests/decp.duckdb, tests/schema.cache.json, gitignorés) — on
  ne touche plus jamais aux fichiers versionnés decp.duckdb et
  schema.fixture.json (qui étaient mutés et cassaient la collecte au run
  suivant). Viewport Chrome élargi à 1600px.
- tests/test_db.py : fixture module-scoped qui recharge src.db après le module
  (test_query_marches faisait importlib.reload vers une DB temporaire au schéma
  réduit, polluant le conn global → ColumnNotFoundError ensuite). Assertion mise
  à jour pour le nouveau libellé "[Inconnu de l'INSEE (...)]".

Tests périmés / fragiles corrigés :
- tests/auth/test_oauth_routes.py : mock LinkedIn aligné sur la route (userinfo
  récupéré via .get() séparé) ; destination post-login /compte/abonnement.
- tests/test_main.py : test_002 filtre sur dateNotification (uid retiré du
  tableau), scrollIntoView (colonne hors viewport), attentes de l'application du
  filtre et de la restauration de la persistance ; test_015 via
  wait_for_no_elements.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:22:27 +02:00
Colin Maudry 60b59d2d03 Précision sur les SIRET inconnu 2026-06-30 17:34:27 +02:00
Colin Maudry 5a64f0f682 Ordre des sections 2026-06-30 17:34:08 +02:00
Colin Maudry 69a8b847ae style(toolbar): aligne le style des boutons acheteur/titulaire/observatoire sur tableau.py
- table-menu → table-toolbar sur les 3 vues
- Boutons colonnes/télécharger : color=secondary size=sm ; html.Button → dbc.Button
- Bouton reset : color=danger outline=True size=sm, label "Réinitialiser"
- Compteur nb_rows sorti du toolbar vers un div.table-meta séparé

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 17:19:39 +02:00
Colin Maudry 8825e76101 Possible de remplacer une vue existante #95 2026-06-30 16:59:37 +02:00
Colin Maudry c4aa90b0d1 feat: améliorations UX roadmap votes #94
- Votes cappés à VOTES_PER_WEEK (pas d'accumulation) pour valoriser
  les connexions régulières
- Solde de votes affiché dans la liste (input inéditable) à la place
  du bandeau Alert, avec date de prochain rechargement
- Compteur de votes par feature affiché comme input inéditable en
  fin de ligne (avant le bouton "+")
- Animation FLIP JS (roadmap_flip.js) : seules les lignes qui changent
  de position sont animées après un vote
- Renommage votes_credited_until → votes_last_credited_at (migration 0005)
- Constantes du module utilisées dans les assertions de tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 16:39:13 +02:00
Colin Maudry f04e1b4c44 Petites améliorations tableau.py 2026-06-30 15:14:43 +02:00
Colin Maudry 9a93ec986a fix: guard is_authenticated dans cast_vote #94 2026-06-30 14:37:54 +02:00
Colin Maudry 78534000a0 refactor(tableau): barre d'outils compacte sur une ligne + légende d'aide
Barre d'outils repensée au-dessus du tableau :
- boutons compacts (size=sm) sur une seule rangée + ligne d'infos discrète
  en dessous (2 lignes au total sur desktop)
- libellés explicites (Sauvegarder la vue, Partager la vue, Télécharger
  (Excel)), espacement homogène, couleurs conformes à la charte
  (neutre=secondary, Réinitialiser=danger outline)
- Mode d'emploi rejeté en fin de barre via CSS order (DOM/callbacks intacts)
- .table-menu (3 autres pages) laissée intacte

Téléchargement bloqué (>65 000 lignes) : la raison s'affiche en clair dans
la ligne d'infos (fiable cross-browser) plutôt que dans une infobulle sur
bouton désactivé. Override scopé au tableau via update_table ; acheteur/
titulaire non touchés.

Mode d'emploi : légende en tête listant chaque bouton reproduit (inerte)
en face de sa fonction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:33:28 +02:00
Colin Maudry ce3c3a5e6f feat: le lien de version pointe vers /a-propos/roadmap #94 2026-06-30 14:30:07 +02:00
Colin Maudry 9bed4e3fb9 feat: page publique /a-propos/roadmap (lecture seule) #94 2026-06-30 14:25:59 +02:00
Colin Maudry 8161a8b8b4 fix: test_visible_sections vérifie roadmap au lieu d'archives #94
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 14:20:51 +02:00
Colin Maudry 5b9faa5a76 feat: page abonné /compte/roadmap avec vote #94 2026-06-30 14:19:34 +02:00
Colin Maudry 147c943cdf fix: vote_counts() dans le bloc try/except de roadmap_content #94
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 14:17:04 +02:00
Colin Maudry 0403d5212e feat: composants d'affichage de la roadmap #94 2026-06-30 14:14:17 +02:00
Colin Maudry 50e3299ffb feat: récupération cachée des issues roadmap GitHub #94 2026-06-30 14:05:28 +02:00
Colin Maudry fb45c8e7d5 feat: registre des votes feature_votes #94
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 13:55:28 +02:00
Colin Maudry d98e7313de feat: gel des votes au désabonnement/réabonnement #94 2026-06-30 13:48:44 +02:00
Colin Maudry 04e6fca765 feat: accumulation paresseuse et dépense de votes #94 2026-06-30 13:44:25 +02:00
Colin Maudry 4b754c9d77 feat: colonnes de votes sur subscriptions #94
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 13:41:37 +02:00
Colin Maudry b7ca9c1ffa docs: plan implémentation vote roadmap #94
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:30:58 +02:00
Colin Maudry 0cfafedeef feat: charte graphique des boutons (primary/secondary/danger)
Override CSS scopé aux classes .btn-* (jamais les variables --bs-* racine,
donc alertes/badges inchangés) pour remplacer les couleurs dérivées du thème
Simplex (danger mauve, secondary gris illisible). Trois rôles : la couleur
encode la fonction, le remplissage l'emphase.

- primary terracotta : action principale validante
- secondary gris ardoise : action neutre/alternative (lisible)
- danger rouge #c0392b : destructif (outline par défaut, plein en confirmation)

Audit + conformation des usages :
- compte_admin « Supprimer mon compte » : primary outline -> danger outline
- compte_abonnement « Me désabonner » : outline-primary -> outline-danger
- compte_abonnement « Je suis sûr » : outline-primary -> danger plein

Tests : ajout tests/test_boutons.py (garde de non-régression du primary).
conftest : implémente le hook pytest_setup_options (--headless=new) ; la
fixture chrome_options n'était jamais utilisée par dash.testing, d'où les
fenêtres Chrome qui s'ouvraient pendant les tests.

Specs et plan : docs/superpowers/{specs,plans}/2026-06-30-charte-boutons*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:21:24 +02:00
Colin Maudry d436fd4d9e docs: fix chemin src/utils dans spec roadmap #94
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:19:02 +02:00
Colin Maudry 5578a9deb0 docs: spec design vote roadmap #94
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:17:44 +02:00