[DTP-Worker] Sprint 1 · Baseline QA Playwright (4 endpoints) + fix gate rouge

Livrable QA Sprint 1 (roadmap §Sprint 1 · GAP_ANALYSIS §7) : projet Playwright
auto-contenu sous tests/, data-driven sur e2e/routes.json pour /waf-home /crm
/qa /choisir-mon-unite. 4 contrôles/route : status<400 · HTML titré+lang ·
brand luxury (#0a0a12/#f0b429 + Fraunces/Cormorant) · zéro erreur JS/5xx.
Cible via DTP_BASE_URL (aucune URL codée en dur). Zéro invention de chiffres (#6).

- tests/{playwright.config.ts,package.json,tsconfig.json,.gitignore,README.md}
- tests/e2e/{routes.json,smoke.spec.ts,_shared/contract.ts}
- CI : job e2e-baseline manuel (workflow_dispatch) dans .gitea/workflows/ci.yml
  — hors gate push/PR (exige serveur live), Gitea Actions only (#2)
- Fix : gate CI rouge sur HEAD (guard flaguait sa propre doc de test négatif)
  → escape hatch documenté ci-allow. Les 3 scripts du gate repassent verts.
- GAP_ANALYSIS §7 : critère Baseline Playwright →  (exécution VPS différée)
- daily report 2026-07-30 (session 2)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 01:02:04 +00:00
parent 1cfb8191f4
commit 1a87b22fd7
11 changed files with 452 additions and 2 deletions
+1 -1
View File
@@ -202,7 +202,7 @@ Chaque item confirmé lève le marqueur **⚠ à confirmer VPS** correspondant.
| CI/CD Gitea Actions configuré | DevOps | ✅ `.gitea/workflows/ci.yml` + `ci/` (guard contraintes · JSON · docs) — ⚠ enregistrement runner VPS restant |
| **Gap analysis complète** | Tous / ce doc | ✅ **présent document** |
| Template faisabilité canonique v1.0 | Faisabilité | ✅ `faisabilite/TEMPLATE_FAISABILITE_CANONIQUE_v1.0.md` (+ schémas) |
| Baseline Playwright (`/crm` `/waf-home` `/qa` `/choisir-mon-unite`) | QA | ☐ à faire |
| Baseline Playwright (`/crm` `/waf-home` `/qa` `/choisir-mon-unite`) | QA | `tests/` (Playwright auto-contenu · data-driven · smoke + brand) — ⚠ exécution serveur différée VPS (runner + `DTP_BASE_URL`) |
| Cartographie DocTypes `otov7_platform` | ERPNext | ☐ à faire (⚠ VPS) |
**Sprint 1 = terminé** quand les 6 critères sont ✅ et l'audit 4Big du livrable ≥ 95/100.
@@ -23,7 +23,8 @@
## Vérifications effectuées (dans le repo, sans toucher au VPS)
- Les 3 scripts passent au **vert (exit 0)** sur l'état actuel du repo — aucun faux positif sur le texte de politique de CLAUDE.md/AGENT.md.
- **Test négatif** : fichier de violation temporaire (`hubspot` + `github.com`) → guard retourne **exit 1** et pointe les 2 violations, en ignorant correctement les lignes de prohibition. Fichier de test retiré (repo propre).
- **Test négatif** : fichier de violation temporaire (`hubspot` + `github.com`) → guard retourne **exit 1** et pointe les 2 violations, en ignorant correctement les lignes de prohibition. Fichier de test retiré (repo propre). <!-- ci-allow : cette ligne décrit le test négatif du guard lui-même -->
- `git remote -v` = Gitea (`gitea.otov7.com`) → conforme #2.
## Non fait (hors périmètre worker · touche au VPS)
@@ -42,3 +43,51 @@ Rapport écrit dans `05_deliverables_mvp/daily_reports/` (chemin canonique fixé
---
**Auto-score 4Big du livrable CI/CD : 96/100.** Réserve 4 : runner Gitea à enregistrer sur VPS (DevOps) avant exécution serveur ; scripts validés localement.
---
# Daily Report · 2026-07-30 · Claude Code DTP Worker (session 2)
**Session** : `20260730_005632`
## Tâche exécutée
**Sprint 1 · Livrable QA « Baseline Playwright »**
(roadmap §Sprint 1 · `GAP_ANALYSIS_SPRINT1` §7 = `☐ à faire` · suggérée par la session 1).
## Contexte / analyse
- Relu `CLAUDE.md`, `ROADMAP_8_WEEKS_OR_LESS.md`, `GAP_ANALYSIS_SPRINT1.md`, daily report session 1, `AGENT.md` QA, spec `CHOISIR_MON_UNITE`, `ci/ci.yml`.
- **2 critères de sortie Sprint 1 restants** (§7) : (a) **Baseline Playwright** — 100 % authorable en-repo, exécution différée VPS ; (b) Cartographie DocTypes `otov7_platform`**nécessite le VPS → hors périmètre worker**.
- Priorité évidente : **Baseline Playwright** (seul critère S1 restant autorable sans toucher la prod).
## Réalisé
- Projet Playwright **auto-contenu** sous `tests/` :
- `tests/e2e/routes.json` — data-contract des 4 endpoints Sprint 1 (`/waf-home`, `/crm`, `/qa`, `/choisir-mon-unite`) avec flag `gated`.
- `tests/e2e/smoke.spec.ts`**data-driven** : 4 contrôles/route → status < 400 · HTML titré + `<html lang>` · **brand luxury** (`#0a0a12`/`#f0b429` + Fraunces/Cormorant dans le CSS servi) · zéro erreur JS/5xx.
- `tests/e2e/_shared/contract.ts` — tokens de marque (CLAUDE.md #4) + helpers (reachable, détection mur de login, collecte surface CSS).
- `tests/playwright.config.ts`**cible via `DTP_BASE_URL`** (aucune URL codée en dur) · chromium + mobile-safari (acheteurs mobiles) · reporters list/html/junit.
- `tests/package.json`, `tests/tsconfig.json`, `tests/.gitignore`, `tests/README.md`.
- **CI** : ajout d'un job `e2e-baseline` **manuel** (`workflow_dispatch`) dans `.gitea/workflows/ci.yml` — hors du gate push/PR (exige serveur live + navigateurs), upload artefact rapport. Reste **Gitea Actions uniquement** (contrainte #2).
- **Zéro invention (#6)** : aucun prix/superficie/dispo asserté — santé + brand uniquement. Routes `gated` non authentifiées : brand annoté + sauté, pas échoué (baseline tolérante).
## Bug corrigé (gate rouge sur `main`)
- Constat : le gate CI **échouait déjà sur HEAD** (exit 1) — le daily report session 1 (l.26) citait les deux plateformes interdites en prose pour décrire le test négatif du guard, sans marqueur de prohibition reconnu par l'heuristique → **faux positif du guard sur sa propre doc**. <!-- ci-allow : méta-description du correctif, aucun usage réel -->
- Correctif : escape hatch documenté `ci-allow` ajouté sur la ligne concernée (mécanisme prévu à cet effet). Gate **repassé au vert**.
## Vérifications effectuées (en-repo, sans toucher au VPS)
- `routes.json` : JSON valide (parse strict).
- `ci.yml` : YAML valide.
- **Les 3 scripts du gate** (`guard_constraints.sh`, `validate_json.sh`, `check_docs.sh`) → **exit 0** (vert) après correctif.
- Confirmé que le gate rouge **préexistait** à mes changements (`git stash` → guard exit 1 sur HEAD).
## Non fait (hors périmètre worker · touche au VPS)
- Exécution réelle de la baseline (`npm install` + `playwright install` + `npm test`) → runner Gitea + `DTP_BASE_URL` sur VPS (DevOps · `ci/README.md §4`).
- Cartographie DocTypes `otov7_platform` (dernier critère S1) → ERPNext Backend sur VPS.
## Prochaine tâche suggérée
- **Sprint 1 quasi bouclé** : ne reste que la cartographie DocTypes (VPS · ERPNext) + confirmation runner/endpoints (VPS · DevOps/QA).
- Sinon démarrer S2 en-repo : scaffold doc `otoia/capabilities/publiciste.py` (seul module net-neuf, chemin critique) **ou** spec RBAC 50 rôles (ERPNext S2).
---
**Auto-score 4Big du livrable Baseline QA : 95/100.** Réserve 5 : exécution serveur différée (runner + `DTP_BASE_URL` VPS, hors périmètre) ; specs validées statiquement en-repo (JSON + YAML + gate vert).