tasks: очередь расставлена от базы к деталям

- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
This commit is contained in:
av
2026-08-12 20:48:53 +03:00
parent ddc34b3182
commit 8739b18a9f
73 changed files with 490 additions and 139 deletions
+8 -6
View File
@@ -1,7 +1,7 @@
# ✨ Привязать запись к владельцу и отдавать только свои
- **Тип:** feature
- **Категория:** Очередь
- **Категория:** Очередь — Фундамент домена: без владельца знание UUID и есть право читать чужое, и на владельце стоят список, дедуп, удаление, учёт и квота.
- **Зачем:** У задачи и файла нет владельца, поэтому знание UUID задачи и есть право её читать.
- **Теги:** goal:multi-user
@@ -14,7 +14,8 @@
- таблица задач и таблица файлов — колонка владельца и её миграция;
- `internal/contract`, интерфейсы репозиториев: чтение сужается владельцем;
- `internal/adapter/repo/sqlite` — все четыре запроса задач;
- `internal/adapter/repo/pocketbase` — все четыре места, где правятся колонки
очереди: `applyToRecord`, `recordToJob`, `acquireColumns` и `acquiredRow`;
- `internal/service`, оба метода заведения задачи;
- `GET /api/status/:id` — ответ на чужую запись;
- `docs/database.md` — схема и правило выборки.
@@ -24,9 +25,8 @@
- Запрос чужой записи по её идентификатору возвращает «не найдено», а не
содержимое и не «доступ запрещён». Оракул — тест: две сессии, задача первой
запрашивается второй, ответ 404 и пустое тело.
- Запись, заведённая из веба, принадлежит вошедшему; заведённая ботом —
пользователю, за которым закреплён чат. Оракул — тест на оба входа со сверкой
колонки владельца.
- Запись, заведённая из веба, принадлежит вошедшему. Оракул — тест приёма по
HTTP со сверкой колонки владельца.
- Выборка воркера владельцем **не** сужается: конвейер обрабатывает записи всех.
Оракул — тест: задачи двух владельцев проходят конвейер одним воркером.
- База заводится с чистого листа, колонка владельца обязательна и без умолчания.
@@ -35,4 +35,6 @@
## Рамки
Совместного доступа, ролей и передачи записи другому не делаем: владелец один и
неизменяем. Данные не переносим — чистый лист.
неизменяем. Данные не переносим — чистый лист. Владельца записи, пришедшей
ботом, здесь не назначаем: связи чата с учётной записью ещё нет, её заводит
`telegram-account-link` следующей задачей.