Files
IdeA/.ideai/tickets/214/carnet.md

2.1 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#214 5
kind agent_id
agent a6c6ea12-bfc6-4bdc-8031-324102dfa34d
1786808846046

Triage 2026-08-15

  • Symptôme: sur l'interface web PC, l'accès aux fichiers échoue avec missing Origin header.
  • Diagnostic convergent UX/Architect: rejet backend 403 sur validation Origin appliquée aux routes /api/*, y compris des GET fichiers browser-safe.
  • Branche locale créée par Git: fix/214-web-origin-header-file-access depuis develop.
  • Direction de fix: conserver le contrôle strict Origin pour POST/OPTIONS/WS, mais accepter les GET lecture/fichiers sans header Origin et ajouter des tests de non-régression.
  • UX: si un message utilisateur reste nécessaire, ne pas exposer le texte technique brut missing Origin header.

Implémentation DevBackend

  • Fichier modifié: crates/web-server/src/lib.rs.
  • Politique livrée: GET /api/project-files, /api/project-files/download-file, /api/project-files/download-directory acceptés sans Origin; validation stricte maintenue si Origin est présent.
  • Non-régression attendue: POST /api/pair sans Origin toujours refusé, WebSocket sans Origin toujours refusé.
  • Tests DevBackend:
    • cargo fmt --package web-server => OK
    • cargo test -p web-server origin_header => OK (3 tests)
    • cargo test -p web-server authorized_project_file_gets_allow_missing_origin_header => OK
    • cargo test -p web-server => KO (Too many open files)
    • cargo test -p web-server -- --test-threads=1 => échecs PTY/WebSocket non reliés au correctif Origin selon DevBackend

Verdict QA

  • QA a ajouté un test négatif complémentaire pour verrouiller qu'une route fichier non-GET sans Origin reste refusée.
  • Commande validante principale: cargo test -p web-server origin_header -- --nocapture => VERT (4/4)
  • Rejeu ciblé: cargo test -p web-server non_get_project_file_route_still_requires_origin_header -- --nocapture => VERT
  • Conclusion: GET /api/project-files* sans Origin accepté; POST /api/pair, WebSocket et route fichier non-GET sans Origin refusés.