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>
152 lines
10 KiB
Markdown
152 lines
10 KiB
Markdown
# 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), colonnes `N° 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)
|
|
|
|
1. `insight.md` §1 annonce « 5 dĂ©cisions DC attendues fin aoĂ»t » puis en liste 6 ; `sec10` en compte 7 + Philippine hors suspension. â RĂšgle : **`sec10` + `phase5_validation` priment** sur `insight` pour les faits ; `insight` n'est utilisĂ© que comme contenu Ă©ditorial (encart « point de veille »).
|
|
2. `dim11` point 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_validation` prime (rĂšgle explicite du §5.2 du prompt).
|
|
3. AFD free party : 1 500 ⏠(dim09) vs 500 ⏠(phase5). â **500 âŹ**, conformĂ©ment au test d'acceptation §7 du prompt.
|
|
4. DurĂ©es DOM chĂŽmage antĂ©rieures : divergence assumĂ©e `low` dans `cross_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
|
|
|
|
1. **Tailwind ou CSS vanilla + tokens OKI** (prompt vs playbook).
|
|
2. **Identité visuelle** : charte OKI complÚte, OKI sobrifiée, ou institutionnel neutre.
|
|
3. **Clé Légifrance** : la clé fournie ressemble à un `client_id` PISTE ; l'API OAuth2 `client_credentials` exige aussi un `client_secret`. Sans lui, le collecteur Légifrance sera codé mais désactivé (dégradation documentée : repli scraping AN/Sénat).
|
|
4. **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 Gitea `labola.o-k-i.net` optionnelle.
|