From 6ae072e5027338c389d9ae6e9643546cb6ee7e2f Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 4 Oct 2026 03:50:22 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20R-36..R-40=20(=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B8=D0=BA=D1=81-=D1=80=D0=B0?= =?UTF-8?q?=D1=83=D0=BD=D0=B4)=20=D0=B2=20design.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- openspec/changes/slice-0-skeleton/design.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openspec/changes/slice-0-skeleton/design.md b/openspec/changes/slice-0-skeleton/design.md index 62ef6d1..e807d7d 100644 --- a/openspec/changes/slice-0-skeleton/design.md +++ b/openspec/changes/slice-0-skeleton/design.md @@ -122,3 +122,8 @@ compose-NATS/MinIO — реальный запрос из примера `reques | 40 | 2026-10-04 | R-33 (D10-5): остановка воркера проверяется в teardown через приватный `worker._tasks` | дешёвая проверка чистой остановки (T10.1: проверка тавтологична — править в cleanup) | хрупкая связь с приватным полем | | 41 | 2026-10-04 | R-34 (отменяет R-11, I-1 финального ревью): добавляется `.dockerignore` (исключает `api/.env`, `api/.venv`, кэши, `api/tests`, `.superpowers`), строка `.dockerignore` убирается из `.gitignore` | образ собирается `make check-full` из рабочего дерева с `api/.env` и `api/.venv` (проверено: в образе были `.env` с паролем MinIO и `.venv` 159 МБ; `SERVER__HOST=127.0.0.1` из `.env.example` сделал бы контейнер недоступным) | вернуть строку в `.gitignore`, удалить файл | | 42 | 2026-10-04 | R-35 (M-1 финального ревью): `SERVICE_NAME` остаётся настройкой с типом `Literal["tabular-parser"]`; queue group — константа `REQUEST_QUEUE_GROUP`; формулировки «SERVICE_NAME — имя queue group» исправляются | настройка не управляла группой и могла привести к падению lifespan при другом значении | снять Literal | +| 43 | 2026-10-04 | R-36: `.dockerignore` исключает сверх перечня также `api/.env.test`, `.claude`, `setup`, `.gitignore`, `.bounded`, `**/*.pyc`, `**/.DS_Store`; `api/.env.example` остаётся в образе | документация без секретов; образ без dev-артефактов | лишний файл в образе / одна строка | +| 44 | 2026-10-04 | R-37: отказ в правах NATS логируется на каждый `-ERR` без лимита частоты (`error_category=nats_permission`) | сервер шлёт -ERR на каждую запрещённую операцию; видимость важнее шума | шум в логе (до 8 строк на задание при запрете публикации); лимит — как у ошибок подключения | +| 45 | 2026-10-04 | R-38: `DRAIN_TIMEOUT = 10 с` для NATS | 10 (STOP_TIMEOUT) + 10 (drain) + закрытие S3 < 30 с grace-периода платформы | константа | +| 46 | 2026-10-04 | R-39: тест «старт с минимальным окружением» разнесён: умолчания Settings — `test_config.py`, `/healthcheck` — `test_app.py`; фабрика Settings в `tests/conftest.py` | фикстуры фейковых NATS/S3 живут в test_app.py; тестовые модули не импортируют друг друга | перенос | +| 47 | 2026-10-04 | R-40: страж зависимостей сравнивает имена пакетов по PEP 503 | `argon2_cffi` = `argon2-cffi` | ложный пропуск при нестандартном написании |