docs: record compatibility runs, decisions and session reasoning

This commit is contained in:
Naeel
2026-04-10 20:27:59 +03:00
parent ebcb20475a
commit c9d9231efc
4 changed files with 122 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
# Compatibility Decisions — 2026-04-10
## Контекст
После серии security/perf фиксов выполнены compatibility прогоны against https://qu.kube5s.ru.
## Принятые решения
1. UI API считается защищенным контуром и требует JWT.
- Endpoint /ui/api/auth остается публичным для получения сессии.
- Остальные /ui/api/* требуют Authorization: Bearer <jwt>.
- Старые тесты UI без JWT считаются устаревшими и не отражают регрессию сервиса.
2. SQS-совместимость приоритетно валидируется по AWS CLI/awscurl сценариям.
- Основной интеграционный набор shared_sqs_test.sh используется как базовый gate.
- Hardcore/quick требуют разделения на SQS-only и UI-authenticated части.
3. Поведение WaitTimeSeconds=25 сохраняется как clamp (не hard error).
- Это осознанное отклонение от строгого reject-поведения.
- Поведение документируется как managed-compatible режим.
4. Фокус следующего этапа: стабилизация test suite как продукта.
- Привести tests/quick_test.sh и tests/hardcore_test.sh к JWT-aware сценарию.
- Добавить отдельный UI compatibility script с явным login шагом.
## Подтвержденные результаты
- tests/shared_sqs_test.sh: PASS=28 FAIL=0
- tests/quick_test.sh: PASS=12 FAIL=7 (фейлы в UI без JWT)
- tests/hardcore_test.sh: PASS=90 FAIL=14 (основные фейлы в UI без JWT)
- UI JWT smoke (ручной): auth/create/list/send/peek/delete — успешно
@@ -0,0 +1,29 @@
# Compatibility Errors Log — 2026-04-10
## Прогоны
1. tests/shared_sqs_test.sh
- Status: PASS
- Result: PASS=28 FAIL=0
2. tests/quick_test.sh
- Status: FAIL (ожидаемо для legacy UI checks)
- Result: PASS=12 FAIL=7
- Основная причина: endpoints /ui/api/* требуют JWT, а сценарий вызывает их без Authorization.
- Типовые ответы: 401 authorization required.
3. tests/hardcore_test.sh
- Status: FAIL (частично ожидаемо)
- Result: PASS=90 FAIL=14
- Основная причина: legacy UI checks без JWT.
- Дополнительно: часть ожиданий на строгие validation errors не совпадает с текущей стратегией clamp.
## Ранее воспроизводимый кейс
- 100KB send-message ранее давал connection closed в одном из точечных прогонов.
- В повторном hardcore прогоне кейс 100KB прошел успешно.
- Вывод: требуется стабильный воспроизводящий сценарий для подтверждения/опровержения плавающего дефекта.
## Action items
1. Разделить тесты на SQS-compat и UI-compat.
2. Для UI-compat добавить обязательный JWT login step.
3. Для big-payload кейса добавить 10-20 повторов и фиксировать процент ошибок.
+18
View File
@@ -2,6 +2,24 @@
## Версага v0.1.x
### Security & Compatibility Wave (2026-04-10) ✅
- ✅ Создана ветка hardening: fix/critical-high-security-2026-04-10
- ✅ Закрыты Critical/High/Medium пункты безопасности и изоляции
- ✅ Добавлена проверка SigV4 подписи (header + presigned)
- ✅ Закрыт IDOR в UI API по tenant id
- ✅ Устранены гонки map доступа и рассинхрон persistence
- ✅ Оптимизирован receive long polling
- ✅ Совместимость SQS подтверждена: tests/shared_sqs_test.sh PASS=28 FAIL=0
- ⚠️ Legacy UI тесты без JWT падают ожидаемо (quick/hardcore), т.к. /ui/api/* теперь защищены
### v0.1.18 (2026-04-10) — IN PROGRESS
- ✅ security: fix critical/high auth, idor, races and persistence (a5e9bfb)
- ✅ security: address medium risks in jwt, redis ordering and body limit (3b4fe0b)
- ✅ perf: optimize receive long polling and finalize formatting cleanup (ebcb204)
- [ ] Актуализировать tests/quick_test.sh под JWT flow
- [ ] Актуализировать UI блоки tests/hardcore_test.sh под JWT flow
- [ ] Добавить отдельный UI compatibility script с login шагом
### v0.1.14 (2026-04-10) ✅
- ✅ Фикс критического дедлока в `create_queue.go` (deadlock после первого CreateQueue)
- ✅ Фикс UI: `m.sent``m.sent_at` (даты сообщений всегда показывали dash)
+46
View File
@@ -318,6 +318,52 @@ Email из токена показывается в UI справа вверху
### Диагностика
1. **Первая гипотеза**: gorilla/mux route ordering — `r.PathPrefix("/ui")` static handler перехватывает `/ui/api/auth`.
---
## Сессия 5
# Agent: GitHub Copilot (GPT-5.3-Codex)
### Задача
1. Закрыть оставшиеся security/perf хвосты
2. Прогнать compatibility тесты для выявления новых расхождений
3. Подготовить документированный статус для managed SQS roadmap
### План перед действиями
- Сначала закрыть критичные и высокие уязвимости с минимальными точечными правками
- Затем закрыть medium риски, влияющие на managed эксплуатацию
- После этого прогнать compatibility scripts against production endpoint
- По итогам разделить реальные дефекты и устаревшие ожидания тестов
### Что сделано
- Исправлены security issues в auth, admin, gosqs, tenant, persistence, router
- Добавлена SigV4 подпись верификация для header и presigned запросов
- Закрыт IDOR в UI API: доступ только к собственному tenant id
- Убраны race и persistence рассинхроны в batch/send/delete/admin операциях
- Оптимизирован long polling в receive handler
- Изменения закоммичены и запушены в ветку fix/critical-high-security-2026-04-10
### Compatibility прогоны
- tests/shared_sqs_test.sh: PASS=28 FAIL=0
- tests/quick_test.sh: PASS=12 FAIL=7
- tests/hardcore_test.sh: PASS=90 FAIL=14
### Анализ результатов
1. Основной SQS поток совместимости (AWS CLI + awscurl + tenant isolation) стабилен
2. Большинство падений quick/hardcore связано с тем, что старые UI-сценарии идут без JWT
3. Это не regression сервиса, а рассогласование тестов с текущей security моделью
4. Часть проверок ожидает strict reject, тогда как текущая логика использует clamp
### Выводы
- Для managed SQS следующий блок работ: привести compatibility suite к актуальному auth контракту
- Нужны отдельные воркфлоу:
- SQS compatibility suite (без UI auth assumptions)
- UI compatibility suite (обязательный login через /ui/api/auth)
### Следующие шаги
1. Обновить tests/quick_test.sh под JWT-aware UI сценарий
2. Обновить UI-блоки tests/hardcore_test.sh
3. Добавить стабильный multi-run тест для big payload кейсов
- Перенёс `/ui/api/auth` на subrouter вместо root router HandleFunc.
- Собрал v0.1.16, задеплоил → **всё ещё 404**