fix: evita cache heuristico do navegador em GETs com Last-Modified #59
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/stale-get-cache"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Achado durante a verificacao manual do item 9 (Datasets, PR #58):
GET /api/runs/{id}(e os outros 4 recursos que usamservices/concurrency.py::set_last_modified_header-- reports, issues, requirements, technical-validations) mandaLast-ModifiedsemCache-Control. Como esse header nunca e bumpado quando uma colecao filha embutida na resposta muda (ex.: adicionar um cenario a um Run), o navegador aplica cache heuristico (RFC 7234, ~10% da idade Date-menos-Last-Modified) e pode servir uma resposta desatualizada por horas apos uma escrita -- confirmado comparando um fetch normal (dado velho) comfetch(url, {cache: "no-store"})(dado correto) pra mesma URL.Por que nao bumpar
updated_atdo pai em vez disso:Last-Modifiedaqui alimentaIf-Unmodified-Since(concorrencia otimista) emcheck_not_modified_since. Bumpar oupdated_atdo Run toda vez que um cenario filho muda faria um PUT que so edita campos do proprio Run (nome/status) falhar com 412 espurio por causa de uma edicao completamente nao relacionada num filho -- pioraria a UX de concorrencia pra resolver um problema de cache.Cache-Control: no-storeresolve o cache sem tocar nessa semantica.Fix de um unico ponto em
set_last_modified_header(helper compartilhado), cobre os 5 routers que usam o padrao. Teste novo confirma o header em GET e PUT; suite completa (191 testes) verde.