| ID | Critère | Statut | Évidence / Localisation |
|---|---|---|---|
| AC-001 | articles.json contient ≥ 30 500 entrées après le crawl | MISSING |
src/steps/1-crawl.ts — Crawler non implémenté. Retourne un tableau vide écrit dans articles.json.
TODO lines 22-27. url-map.csv absent.
|
| AC-002 | 100% des articles ont title, content, published_at, legacy_url | PARTIAL |
src/shared/types.ts — CrawledArticleSchema (Zod) enforce ces champs (lines 5-16).
Mais crawler non implémenté → 0 articles produits à l'exécution.
|
| AC-003 | 3-import-strapi.ts est idempotent (2 exécutions → même résultat) | MISSING |
src/steps/3-import-strapi.ts — Boucle présente (lines 47-65) mais 0 appel API Strapi. Tous les articles loggés status: "error", error: "Not implemented yet".
Aucune vérification d'existence par legacy_url. Idempotence non vérifiable.
|
| AC-004 | redirects.json contient une entrée pour chaque URL crawlée | PARTIAL |
src/steps/5-generate-redirects.ts — Logic structurée (normalizeLegacyPath, buildNewPath, déduplification). Tests passent.
Dépend du step 3 non implémenté. Format dévie du spec (array vs flat object). /node/NNNNN absent.
|
| AC-005 | Rapport de vérification ≥ 99% de succès sur tous les checks | MISSING |
src/steps/6-verify.ts — 8 checks tous hardcodés à false (lines 42-51). Aucune requête Strapi, aucun sampling HTTP.
Erreur explicite : "Verification not fully implemented".
|
| AC-006 | 0 doublon de slug dans Strapi après l'import | PARTIAL |
src/shared/slugify.ts — slugifyUnique génère slugs uniques avec suffixe -2, -3. Testé (slugify.test.ts lines 26-52).
Mais step 3 non implémenté → slugs n'atteignent jamais Strapi.
|
| AC-007 | Images accessibles via Strapi/S3 après import médias | MISSING |
src/steps/4-import-media.ts — Scaffold TODO uniquement (lines 29-37). Dépendance sharp déclarée mais non utilisée.
Aucun téléchargement, MD5, conversion WebP, ni upload implémentés.
|
| 7 critères | MET: 0 · PARTIAL: 3 · MISSING: 4 | Couverture réelle : 0% |
| Sévérité | Description | Référence spec |
|---|---|---|
| HIGH |
Step 1 — Crawler non implémenté. Crawlee/Playwright : stub TODO. Tableau vide écrit dans articles.json. url-map.csv absent.
|
Step 1 — méthode, rate limiting, checkpoint, outputs |
| HIGH |
Step 3 — Import Strapi non implémenté. Tous articles : status: "error". Aucun appel API, aucun check idempotence, aucun retry.
|
Step 3 — algorithme, idempotence, gestion erreurs |
| HIGH | Step 4 — Import médias non implémenté. TODO complet. Aucun download, MD5, conversion WebP, ni upload Strapi. | Step 4 — algorithme, contraintes images |
| HIGH |
Step 6 — Vérification non implémentée. 8 checks hardcodés à false. Aucune requête Strapi ni sampling HTTP 301.
|
Step 6 — checks list, verification-report.json |
| MED |
Noms de scripts npm incorrects. Spec : step:1:crawl, step:2:extract… Implémentation : crawl, extract, import-strapi…
|
Exécution — npm run step:X |
| MED |
Format redirects.json déviant. Spec : objet plat {"/old": "/new"}. Implémentation : array [{source, destination, permanent}].
|
Step 5 — Output redirects.json format |
| MED | Format WMaker /node/NNNNN non géré. Step 5 ne traite pas la résolution des anciennes URLs WMaker par ID. | Step 5 — Règles de mapping : Format WMaker |
| LOW |
country_codes hardcodé à ["sn"]. Spec requiert détection par mots-clés dans titre/catégorie.
|
Step 2 — country_codes depuis contenu |
| LOW |
Structure src/shared/ au lieu de src/lib/. Fichiers strapi-client.ts, url-normalizer.ts, html-cleaner.ts absents.
|
Structure — src/lib/ directory |
| 9 déviations | HIGH: 4 · MEDIUM: 3 · LOW: 2 |
cleanHtml, extractExcerpt, isArchived, computeArchiveDate, mapCategorynormalizeLegacyPath, buildNewPath, déduplication-2/-3, testétypes.tsdata/logs/)step:1:crawl etc.), corriger format redirects.json (objet plat), ajouter résolution /node/NNNNN WMaker.country_codes depuis contenu, ajouter src/lib/strapi-client.ts, url-normalizer.ts, html-cleaner.ts.