fix(web): новые файлы клиента отдавались без запрета кэширования

A48 и A49 добавили workspace.js, workflow.js и workflow.css, но заголовки
Cache-Control им не прописали. Проверено запросом к серверу владельца:
у /, /app.js и /style.css стоит no-cache, must-revalidate, а у
/workspace.js и /workflow.js заголовков кэша нет вовсе.

Из-за этого браузер держал старые файлы после обновления сборки, и
владелец видел прежний интерфейс при новом номере сборки — та самая
поломка, ради которой запрет кэша когда-то вводился для app.js.

Перечисление файлов сделано общим списком, чтобы следующий добавленный
файл не оказался снова без заголовков.

609 passed, ruff clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hermes Team 2026-09-01 01:26:08 +07:00
parent 3e660c39bb
commit 4b6533281e

View file

@ -507,6 +507,23 @@ if _STATIC_DIR.is_dir():
headers=_NO_CACHE,
)
# A48 и A49 добавили новые файлы клиента, а заголовки кэширования им не
# прописали: браузер держал их сколько угодно. Владелец обновлял сборку и
# видел прежний интерфейс — ровно та поломка, ради которой запрет кэша
# вводился для app.js. Перечисление сделано общим, чтобы следующий
# добавленный файл не оказался снова без заголовков.
for _client_script in ("workspace.js", "workflow.js", "workflow.css"):
def _make_route(name: str):
media = "text/css" if name.endswith(".css") else "application/javascript"
def _serve():
return FileResponse(str(_STATIC_DIR / name), media_type=media, headers=_NO_CACHE)
return _serve
app.get("/" + _client_script)(_make_route(_client_script))
@app.get("/snapshot.example.json")
def _fixture():
return FileResponse(str(_STATIC_DIR / "snapshot.example.json"), media_type="application/json")