docs(s28): сводка interim soak (31min, 91k iter, 0 fail) + overnight work
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run

This commit is contained in:
nns 2026-06-09 03:47:03 +05:00
parent 05a34a7dd8
commit f6b50baa50

View file

@ -81,12 +81,71 @@ cross-feature suite" после regression flows+visual. На failure артеф
ETA финиша: ~07:15. Финальные числа добавлю в этот файл после
завершения.
## Soak: интерим-результаты
## Soak: интерим-результаты (на момент 03:46, 31 мин run)
В 03:24 (9 минут run): 28005 iterations, 0 interrupted, p95 латентность
ровная, RPS ровно 50.
| Метрика | Значение | Замечание |
|---|---|---|
| iterations | 91371 | 0 interrupted |
| iter/sec | 49.2 | target 50 (constant-arrival-rate) |
| api_mem_mb (range) | 250-465 | spike 465 — это redeploy для HSTS, нормальное |
| api_cpu_pct (steady) | 54-83% | под нагрузкой |
| pg_connections | 19-56 | spike 56 во время restart, обратно к 19 |
| disk_free_gb | 30 | без изменений |
| products p95 | 32-256ms | 256ms был во время старта (warmup) |
<!-- SOAK_FINAL -->
Зафиксированы 0 failures (`http_req_failed.rate=0.0`). Memory не растёт
линейно — bounces around 250-300 MiB после warmup.
Soak продолжается до ~07:15. Финальные числа в этом разделе после
завершения.
## Дополнительная работа (overnight)
После основных 6 пунктов чек-листа также сделано:
### 7. fix: ApiReferenceDocsJob handle `~/path` ASP.NET convention
`HttpPost("~/connect/token")` — ASP.NET Core конвенция «absolute from
root, ignore class [Route]». До фикса генератор клеил с base-route'ом →
`/~/connect/token` (невалидный). Теперь tilde корректно срезается.
Виден `/connect/token` в api-reference.md.
### 8. fix(security): HSTS header on stage
Найдено: stage отдавал security-headers (CSP, X-Frame-Options, etc.) но
БЕЗ Strict-Transport-Security. Причина: `UseHsts()` в ASP.NET Core не
срабатывает за nginx-прокси (api видит HTTP, не HTTPS — нет
ForwardedHeaders middleware'a).
Фикс: добавлен `add_header Strict-Transport-Security` в
`deploy/nginx.conf`. max-age=2592000 (30 дней), без includeSubDomains
и без preload — pre-emptive consent, можно безопасно убрать.
Verified: `curl -I https://test.admin.food-market.kz/``strict-transport-security: max-age=2592000`.
Integration test `tests/integration/08-security-headers.spec.ts` (2
[Fact]) проверяет 7 security-заголовков на главной + на 404.
### 9. test: ApiReferenceDocsJob regex lock-down
`tests/food-market.UnitTests/ApiReferenceDocsJobTests.cs` — создаёт
временный controller-файл с double-nested generic
(`Task<ActionResult<PagedResult<Dto>>>`), прогоняет GenerateAsync,
проверяет count=3 и наличие всех routes в output.
Защищает от регрессии Sprint 28 fix'a.
### 10. perf: integration suite workers=2 (46% speedup)
Раньше `tests/integration/playwright.config.ts` имел `workers: 1`
из-за signup rate-limit. После Sprint 26 повышения stage до
5000/min — больше не упирается. Включил `workers: 2` → прогон 66s → 36s.
### 11. README + ONBOARDING update до Sprint 28
Sprint history дополнен 25-28. Endpoint count обновлён до 240. Sprint
counter unified.
## Метрики