docs(review): Opus code-review report verbatim + critical analysis (confirmed 🔴1/🔴5/🔴8, open JWT and byte-limit decisions)

This commit is contained in:
Repinoid
2026-10-10 17:03:20 +03:00
parent 073977286f
commit ea7b539d19
3 changed files with 347 additions and 0 deletions
+26
View File
@@ -152,6 +152,26 @@
- Док (коммит `865db49`): почему C, механика, замеры, ограничения, пошаговое включение, откат,
путь к варианту A (5 шагов) и триггеры перехода.
### 2.17. Код-ревью Opus + критический разбор
- Дал промпт Opus: полное код-ревью + советы по архитектуре. Дословный ответ:
`doc/thinking/opus-report-2026-10-10.md`; критический разбор + что подтверждено:
`doc/thinking/opus-report-analysis-2026-10-10.md`.
- Opus указал ~50 пунктов (🔴/🟡/🟢). Моя оценка: силён по конкуренции/durability, но смешивает
баги / осознанный дизайн / отклонения от семантики AWS; часть 🔴 надо понизить.
- **Подтверждено по коду (чинится без владельца):**
- 🔴1 фатал `concurrent map iteration and map write`: `create_queue.go:84` зовёт `SaveQueue`
под `SyncQueues.Lock` без `queue.mu`; `SaveQueue`→`json.Marshal` итерирует `Duplicates`/`FIFO*`/`Tags`,
а мутаторы держат только `queue.mu`. Условие: идемпотентный CreateQueue существующей FIFO-очереди + SendMessage.
- 🔴5 неполный откат dedup при сбое `SaveMessageSync` (`send_message.go:151-160`) → ретрай 200 без сохранения.
- 🔴8 пустой `ReceiptHandle` в DeleteMessageBatch удаляет все невыданные сообщения — **только
через JSON-протокол** (`x-amz-json-1.0`); Query-форма защищена (`requests.go:568` не на этом пути).
- Порядок локов + I/O под глобальным локом; fail-fast на старте без Redis отсутствует.
- **Нужны решения владельца:**
- JWT: проверяет ли шлюз подпись (trusted-perimeter из `jwt.go:7-11`)? Независимо чинятся:
три шлюза prod/test/dev → prod; потолок grace в `cache.go:68-75`; идентичность по `sub`, не email.
- Лимит по байтам (OOM, 🔴14): нужны RAM ВМ + число тенантов → cap на тенанта/очередь + глобальный предохранитель по RSS.
- Порядок исправления — §5 дока анализа.
## 3. Грабли (для повторного использования)
1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`.
@@ -216,3 +236,9 @@ pkill -x shared-sqs
вторая ВМ, LB с проверкой `/ready`. Пока всё это не готово — флаг выключен.
5. Дальше по мануалу: обновить устаревший `MANUAL-NEXT-2026-10-08.md` (ещё говорит «Шаг 1 — проверить
гипотезу» и «вопрос по домену открыт»); решить вопрос push в origin (18 коммитов впереди).
6. **JWT (решение владельца):** проверяет ли шлюз подпись и отдаёт 200 только для валидных токенов?
От этого — 🔴 или «доверяем шлюзу». См. `opus-report-analysis-2026-10-10.md` §3.
7. **Лимит по байтам (решение владельца):** нужны RAM ВМ 213 и целевое число тенантов для цифр cap.
См. `opus-report-analysis-2026-10-10.md` §4.
8. Подтверждённый критический набор к исправлению (🔴1/🔴5/🔴8 + lock order + fail-fast) —
ожидает команды на правку.