Commit initial de l'existant avant toute modification (rĂšgle transverse du playbook OKI). data/input/ est en lecture seule pour toute la suite du projet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
10 KiB
Plan d'implĂ©mentation â Plateforme « Veille LĂ©gislative Guadeloupe »
Phase 0 du prompt
prompt-kimi-cli-veille-legislative.md. Rédigé le 25 juillet 2026. Statut : en attente de validation.
A. Rapport de lecture du corpus (Phase 0)
A.1 Volumétrie réelle
| Ensemble | Fichiers | Mots | RĂŽle retenu |
|---|---|---|---|
| Rapport consolidé | .agent.final.md (+ .converted.md, doublon) |
38 271 | Source de vérité rédactionnelle (résumés, points clés) |
| Chapitres | sec00 â sec10 |
28 642 | sec10 = parsing prioritaire (2 tableaux structurés) ; sec00 = synthÚse |
| Bibliographie | _ref.md |
9 591 | 481 rĂ©fĂ©rences numĂ©rotĂ©es [N] Ăditeur. Titre [EB/OL]. Date. URL |
| Dimensions | research/dim01 â dim12 |
91 530 | MatiÚre brute sourcée (claims + notes de bas de page) |
| Méta-recherche | cross_verification, insight, phase5_validation |
5 857 | Confiance, analyses transversales, arbitrages |
| Plan / outline | plan.md, .agent.outline.md |
2 332 | Taxonomie des chapitres |
Total â 214 500 mots. Les .docx sont des dĂ©rivĂ©s du markdown â non ingĂ©rĂ©s.
A.2 Découverte structurante : les fichiers dim ont trois dialectes
Le prompt (§2) postule un format unique Claim / Source / URL / Date / Excerpt / Confidence. La réalité mesurée :
| Dialecte | Fichiers | Motif |
|---|---|---|
| A â claim plat | dim01, dim02, dim03, dim04, dim07 | Claim: ⊠puis Source: / URL: / Date: / Excerpt: / Confidence: en dĂ©but de ligne |
| B â claim numĂ©rotĂ© gras | dim05 | **Claim 3 :** ⊠puis champs plats |
| C â claim en liste | dim10 (+ portions de dim06, dim08) | **Claim 1.2** â ⊠puis - **Source** : / - **URL** : (URLs parfois multiples, sĂ©parĂ©es par ;) |
| D â prose + notes | dim06, dim08, dim09, dim11, dim12 | Aucun bloc claim ; sources en fin de fichier sous forme [^N^] Ăditeur â titre : URL |
Comptage : 153 blocs Claim explicites, 258 dĂ©finitions de notes de bas de page, 884 usages de marqueurs [^N^] dans les dim. Le parseur doit gĂ©rer les quatre dialectes, sinon on perd dim06/08/09/11/12 â soit prĂ©cisĂ©ment les dimensions associations, entreprises, migration et calendrier.
A.3 Résolution des citations [^dimXX-N^]
Chaßne de résolution implémentable et vérifiée :
sec0X.md : « ⊠chlordécone [^dim07-24^] »
â dim07, note locale n° 24
â dim07 §« [^24^] Vie-publique â chlordĂ©cone ⊠: https://⊠» (ou bloc Claim portant [^24^])
â URL + date + extrait verbatim + confiance
Marqueurs distincts recensĂ©s dans les chapitres : 333, dont des marqueurs non-dim ([^phase5-3.1^], [^insight-5^]) qui pointent vers phase5_validation.md et insight.md â Ă traiter comme deux « pseudo-dimensions ».
A.4 Inventaire seed cible
- Tableau A de
sec10: 27 lois promulguĂ©es (23 avr. â 23 juill. 2026), colonnesN° de loi | Promulgation/JO | Objet | Statut libertĂ©s | Pertinence Guadeloupe-OM. - Tableau B de
sec10: 24 lignes (adoptĂ©s non promulguĂ©s, navette, dĂ©posĂ©s, annoncĂ©s) â dont 2 lignes portant chacune 2 textes (accords Kazakhstan + Colombie ; MACF ratification + accord plateforme) â 26 textes aprĂšs Ă©clatement. - DĂ©cisions CC identifiables : 2026-903, 904, 905, 906, 908, 909 (rendues) + 910 Ă 915 (en instance) = 12 affaires DC.
â Cible rĂ©aliste : 53 textes (27 + 26), au-delĂ du plancher de 49 exigĂ© au §2. Les dĂ©cisions CC alimentent la table decisions_cc et non le compteur textes.
A.5 Contradictions détectées dans le corpus (à encoder comme rÚgles, pas à masquer)
insight.md§1 annonce « 5 dĂ©cisions DC attendues fin aoĂ»t » puis en liste 6 ;sec10en compte 7 + Philippine hors suspension. â RĂšgle :sec10+phase5_validationpriment surinsightpour les faits ;insightn'est utilisĂ© que comme contenu Ă©ditorial (encart « point de veille »).dim11point de vigilance n° 1 dit la saisine Riposte « non confirmĂ©e par une source primaire » ;phase5_validation§3 la tranche comme effective, 24/07/2026, n° 2026-915 DC. âphase5_validationprime (rĂšgle explicite du §5.2 du prompt).- AFD free party : 1 500 ⏠(dim09) vs 500 ⏠(phase5). â 500 âŹ, conformĂ©ment au test d'acceptation §7 du prompt.
- Durées DOM chÎmage antérieures : divergence assumée
lowdanscross_verificationâ entrĂ©e marquĂ©e « Ă vĂ©rifier ».
Ces quatre rÚgles sont codées dans pipeline/resolution_conflits.py et testées.
B. Architecture décidée
veille_legislative_971/
âââ data/
â âââ input/ â LECTURE SEULE (jamais modifiĂ©)
â âââ veille.db â SQLite (gĂ©nĂ©rĂ©)
â âââ textes.json â dump statique (gĂ©nĂ©rĂ©, mode dĂ©gradĂ©)
âââ pipeline/ â Python 3.12 (uv)
â âââ modeles.py â pydantic : Texte, Source, Evenement, DecisionCC
â âââ db.py â connexion, migrations, FTS5
â âââ migrations/ â 001_initial.sql, âŠ
â âââ seed_from_research.py â orchestrateur du seed
â âââ parseurs/
â â âââ tableaux_sec10.py â tableaux A et B (chemin principal)
â â âââ blocs_claim.py â 4 dialectes dim (A/B/C/D)
â â âââ notes_bas_page.py â rĂ©solution [^dimXX-N^] â URL
â â âââ bibliographie.py â _ref.md, 481 entrĂ©es
â â âââ meta.py â cross_verification, insight, phase5
â âââ collecteurs/ â legifrance.py (PISTE), assemblee.py, senat.py,
â â conseil_constit.py, vie_publique.py
â âââ rapprochement.py â matching numero_officiel puis fuzzy titre
â âââ classification.py â thĂšmes/impacts heuristiques (config.yaml)
â âââ guadeloupe.py â dĂ©tection outre-mer
â âââ resolution_conflits.py â hiĂ©rarchie JO > AN/SĂ©nat > CC > presse
â âââ update.py â run complet, --dry-run obligatoire
â âââ config.yaml
âââ web/ â SvelteKit 2 + Svelte 5 runes + TS strict
â âââ src/lib/server/ â better-sqlite3, requĂȘtes FTS5, facettes
â âââ src/routes/
â â âââ +page.svelte SSR â tableau de bord
â â âââ recherche/ SSR â facettes dans url.searchParams
â â âââ textes/[slug]/ SSR â fiche + timeline + sources
â â âââ calendrier/ SSR â Ă©chĂ©ances aoĂ»t-octobre
â â âââ a-propos/ methode/ prerender = true
â â âââ api/textes|textes/[slug]|echeances/+server.ts
â âââ svelte.config.js â adapter-node, precompress
âââ systemd/
â âââ veille-legislative.service / .timer (6 h, 18 h + dimanche intensif)
â âââ veille-web.service / .socket (activation par socket, IDLE_TIMEOUT=300)
âââ tests/ â pytest (parseurs, fixtures figĂ©es)
âââ Makefile â seed, update, dev, build, check, test
âââ .env.example
âââ README.md
âââ README-pipeline.md
B.1 Arbitrages prompt â recommandations doc2sveltekit-transition
| Sujet | Prompt | Playbook OKI | Décision |
|---|---|---|---|
| Adapter | adapter-node, SSR, « non négociable » (§3bis) |
adapter-static, prerender intégral |
Prompt â le playbook vise des sites vitrines, ici les facettes URL et la fraĂźcheur pipeline exigent le SSR |
| ZĂ©ro tiers, self-hĂ©bergement polices | §3 « zĂ©ro CDN externe » | §2.2 idem | Convergent â appliquĂ© |
| ThÚme sombre / or / flag-bar | « sobre et institutionnel » | identité OKI obligatoire | à valider (question 2) |
| Tailwind | imposé (§3) | interdit (§2.3) | à valider (question 1) |
| ZĂ©ro emoji, set SVG krĂ©yĂČl | non traitĂ© | obligatoire | Playbook â appliquĂ© (badges de statut en SVG, pas d'emoji) |
Motion gwoka + prefers-reduced-motion |
non traité | obligatoire | Playbook, dosé : transitions †120 ms, aucune animation de scroll |
| Schema.org / SEO AI-Overview | non traitĂ© | PRD dĂ©diĂ© | Playbook â Legislation + Dataset JSON-LD sur les fiches, sitemap, robots.txt |
| Accessibilité WCAG AA | §6 | §2.8 | Convergent |
C. Phases d'exécution
| Phase | Contenu | Vérification exécutable |
|---|---|---|
| 1 | Squelette repo, uv + Python 3.12, schéma SQLite + FTS5, migrations, modÚles pydantic |
make db-init puis sqlite3 data/veille.db .schema |
| 2 | Parseurs sec10 (A + B) â 53 textes, avec statuts, dates, pertinence Guadeloupe |
make seed â compte-rendu â„ 49 textes ; pytest tests/test_tableaux_sec10.py |
| 3 | Parseurs dim (4 dialectes) + rĂ©solution [^dimXX-N^] + _ref.md â sources, extraits verbatim, confiance |
make seed â 100 % des textes avec â„ 1 source URL ; couverture pytest â„ 70 % |
| 4 | Enrichissement : resume, points_cles, impacts, timeline evenements, decisions_cc, insights |
Tests d'acceptation §7 du prompt (7 assertions) automatisés en pytest |
| 5 | Collecteurs live + update.py --dry-run + résolution de conflits + veille_log + dump JSON |
make update-dry â rapport de diffs rĂ©el affichĂ© |
| 6 | SvelteKit : layout, tokens, accueil, recherche à facettes, fiche, calendrier, à -propos/méthode, API JSON | npm run build, npm run check (0 erreur TS), node build répond sur 127.0.0.1 |
| 7 | PWA, systemd (4 unités), README d'installation Debian vierge, doc des dégradations sans clé PISTE | grep de conformité §3bis, démo des 5 scénarios du §8.7 |
Chaque phase se clÎt par la sortie réelle des commandes, montrée telle quelle.
D. Points bloquants Ă trancher avant la Phase 1
- Tailwind ou CSS vanilla + tokens OKI (prompt vs playbook).
- Identité visuelle : charte OKI complÚte, OKI sobrifiée, ou institutionnel neutre.
- Clé Légifrance : la clé fournie ressemble à un
client_idPISTE ; l'API OAuth2client_credentialsexige aussi unclient_secret. Sans lui, le collecteur Légifrance sera codé mais désactivé (dégradation documentée : repli scraping AN/Sénat). - Git : le dossier n'est pas un dépÎt.
git init+ commit initial recommandé avant toute écriture (rÚgle transverse n° 2 du playbook) ; publication Gitealabola.o-k-i.netoptionnelle.