Files
transcriber/tasks/items/record-ownership.md
T
av d21da8575c Единый список задач вместо двух секций, порядок по выполнению
Секции «Ядро» и «Инфра» слиты в одну «Очередь»: полок домена у проекта
нет, а две секции держали два независимых порядка вместо одного.

Порядок: красный гейт, потом долги, задевающие интерфейсы, потом
хранилище, вход, разграничение, приложение. Разведка потолков SpeechKit
последней — она обслуживает направление, а не очередь.
2026-08-10 21:39:55 +03:00

39 lines
2.7 KiB
Markdown

# ✨ Привязать запись к владельцу и отдавать только свои
- **Тип:** feature
- **Категория:** Очередь
- **Зачем:** У задачи и файла нет владельца, поэтому знание UUID задачи и есть право её читать.
- **Теги:** goal:multi-user
Двигает пункт 2 «Завершения» цели: выборка чужой записи по её идентификатору
возвращает «не найдено», а не содержимое.
Берётся после `oidc-login`: до входа неизвестно, кто владелец.
## Затрагивает
- таблица задач и таблица файлов — колонка владельца и её миграция;
- `internal/contract`, интерфейсы репозиториев: чтение сужается владельцем;
- `internal/adapter/repo/sqlite` — все четыре запроса задач;
- `internal/service`, оба метода заведения задачи;
- `GET /api/status/:id` — ответ на чужую запись;
- `docs/database.md` — схема и правило выборки.
## Критерии приёмки
- Запрос чужой записи по её идентификатору возвращает «не найдено», а не
содержимое и не «доступ запрещён». Оракул — тест: две сессии, задача первой
запрашивается второй, ответ 404 и пустое тело.
- Запись, заведённая из веба, принадлежит вошедшему; заведённая ботом —
пользователю, за которым закреплён чат. Оракул — тест на оба входа со сверкой
колонки владельца.
- Выборка воркера владельцем **не** сужается: конвейер обрабатывает записи всех.
Оракул — тест: задачи двух владельцев проходят конвейер одним воркером.
- База заводится с чистого листа, колонка владельца обязательна и без умолчания.
Оракул — прогон миграций на пустой базе и попытка вставки без владельца.
## Рамки
Совместного доступа, ролей и передачи записи другому не делаем: владелец один и
неизменяем. Данные не переносим — чистый лист.