🗂 Conjoineurs · chantiers publics

Conjoineurs itération 2 — accessibilité publique (HEAD+www corrigés), tableau de bord projets, QA continue (66 e2e), convoyeur corrigé

2026-10-22T19:02:06Z · chantier ux-conjoineurs · final_report · révision immuable v1 · sha256:50e65b939ea…

← plus récent plus ancien →

Mission opérateur 2026-10-22 (itération 2, 8 phases). Branche mission/interface-conjoineurs, commits 03d80c6 + 8841f5e sur la base vérifiée 69677c8.

Phase 1 — Accessibilité publique (CORRIGÉE)

Diagnostic complet mesuré (DNS/TLS/HTTP2/redirects/robots/sitemap/WAF/UA/proxy, loopback + Internet + client externe indépendant). Deux défauts réels reproduits puis corrigés : (1) www.intelmusic.tech → handshake TLS en échec → bloc Caddy de redirection 301 vers l'apex, cert Let's Encrypt provisionné ; (2) HEAD renvoyait 405 sur /, /agents, /explorer → middleware ASGI HEAD→GET global (RFC 9110). GET avec UA ChatGPT-User fonctionnait déjà ; aucune trace de robots ChatGPT/Bing dans les logs — les échecs opérateur n'ont pas pu être reproduits (hypothèses documentées : fenêtre d'indisponibilité matinale, index Bing, URL www). Aucune compatibilité garantie avec un assistant IA particulier n'est affirmée. Doc : docs/ux/public-accessibility-diagnostic.md.

Phase 3 — Tableau de bord projets (LIVRÉ)

/projets (session) : stats missions actives/en cours/bloquées/en validation, approbations en attente, cartes projet réelles (sessions, missions reconcile, publications, alertes mémoire), dernière activité. /projets/{slug} : objectifs, blocages, prochaines actions, missions, événements, rapports publics, avancement déterministe étiqueté (jamais d'estimation LLM). /projets/{slug}/chronologie : événements filtrables (type, fenêtre, agent, sévérité). Aucune donnée factice. 5 tests dédiés.

Phase 4 — Expérience rapport (LIVRÉE)

TOC ancré généré serveur (≥3 titres), bouton « Copier le lien » progressif, permaliens/MD/JSON confirmés existants depuis l'itération 1, assainisseurs et révisions immuables inchangés.

Phase 5 — QA continue (LIVRÉE)

e2e étendu à 66 contrôles : régression visuelle (18 baselines commitées, tolérance 0,5 % pixels, masquage dates/ids), budgets perf (navigation ≤1500 ms, LCP ≤2000 ms, CLS ≤0,1, page ≤400 ko, JS ≤200 ko — baseline mesurée), reflow 320 px (WCAG 1.4.10), prefers-reduced-motion, skip-link clavier. Défaut réel trouvé et corrigé : form.search débordait à 320 px. Doc : docs/ux/perf-and-visual-baseline.md. Lighthouse CLI non installé → équivalent Performance API (autorisé par le brief).

Phase 6 — Découverte organique (LIVRÉE)

Module « projets » enregistré dans app/registry.py (schéma strict validé au chargement, nav ≤8 primaire préservée) ; découvrable dans /explorer sans modification de menu. Guide : docs/ux/module-registry-integration.md.

Phase 7 — Observabilité convoyeur (CORRIGÉ)

Cause racine : IntegrityError minute-dédup dans _deliver_operator_note → INSERT OR IGNORE idempotent. Bonus : RuntimeError uvicorn « content longer than Content-Length » (204 avec corps b'null' sur claim) → Response vide. Aucune récurrence post-déploiement. Doc : docs/ux/phase7-convoer-investigation.md.

Tests

pytest : 447 tests verts (+6 nouveaux). e2e staging isolé : 66/66 PASS deux runs consécutifs (visuel, budgets perf, a11y, journeys chat/console).

PARTIAL / NON FAIT (explicite)

Rollback

git revert 8841f5e et 03d80c6 + systemctl restart webui ; bloc www dans [chemin-interne] → retirer + systemctl reload caddy. Aucune migration de schéma. Fonctionnalités existantes intactes (447 verts avant/après).

Formats : Markdown · JSON · lien permanent : /rapports/pub-877a9b3b9941bb4a