docs: видимость активов и итоговые проверки

This commit is contained in:
2026-10-27 19:41:42 +03:00
parent 9aef82e217
commit d6461a3a9c
9 changed files with 109 additions and 56 deletions

View File

@@ -2,7 +2,7 @@
**Статус:** план согласован, этапы 0–5 выполнены. Проверка этапа 6 выполнена
(тесты, upgrade миграций, security, deploy-runbook), но этап 6 закрыт не
полностью: остаются права преподавателя на запись, видимость активов и CI —
полностью: остаются права преподавателя на запись и CI —
см. § 9.1 и [16-stage6-report.md](16-stage6-report.md).
**Основа:** [07-groups-courses.md](07-groups-courses.md).
**Дата решений:** 2026-10-23.
@@ -205,12 +205,12 @@
Номера уточняются при реализации, чтобы не конфликтовать с максимумами master
(identity V3, **academic V5**, progress V12). Максимумы этой ветки:
identity V9, **academic V11**, progress V13 (+V14 при необходимости аудита).
identity V9, **academic V12**, progress V13 (+V14 при необходимости аудита).
| Сервис | Миграции | Содержание |
|---|---|---|
| identity | V4–V9 | роли, поля групп, статусы студентов, `membership_history`, `promotion_runs/items`, `accounts.status` |
| academic | V6–V11 + post-bootstrap step | курсы, преподаватели, группы курса, `labs.course_id` (nullable), материалы курса/аудитории, частичные индексы, активы; `V10` — уникальный индекс `lower(title)` по курсам; `V11` — backfill `audience='ALL'` для глобальных глав; `SET NOT NULL` — post-bootstrap шаг вне Flyway |
| academic | V6–V12 + post-bootstrap step | курсы, преподаватели, группы курса, `labs.course_id` (nullable), материалы курса/аудитории, частичные индексы, активы; `V10` — уникальный индекс `lower(title)` по курсам; `V11` — backfill `audience='ALL'` для глобальных глав; `V12` — backfill связей `article_assets` из markdown-ссылок; `SET NOT NULL` — post-bootstrap шаг вне Flyway |
| progress | V13 (+ V14 при необходимости аудита) | `grade_comments.author_account_id`, `lab_grades.updated_by_account_id`, индекс `lab_grades(lab_id)`; аудит скачиваний — этап 6 |
### Переход со старой feature-миграции V10 на V13
@@ -288,7 +288,9 @@ identity V9, **academic V11**, progress V13 (+V14 при необходимос
- **Межсервисная авторизация.** Самый сложный участок; ADR до кода.
- **Перенос данных.** Нужны preflight и копия БД; группы с нестандартными именами
и дубли номеров лаб могут заблокировать `NOT NULL`.
- **Активы.** Сейчас публичны и не связаны со статьями; нужна миграция связей.
- **Legacy-активы.** Связанные активы наследуют видимость статьи (миграция `V12`),
но файлы без markdown-ссылки остаются публичными; нужна инвентаризация и
привязка или удаление.
- **JWT 30 дней.** Средний вариант блокировки оставляет остаточный риск для
прямого API; фиксируем в документации.
- **Комментарии без автора.** Старые записи останутся с «автор не указан».
@@ -320,16 +322,17 @@ identity V9, **academic V11**, progress V13 (+V14 при необходимос
Отчёт: [15-stage5-course-materials.md](15-stage5-course-materials.md).
- **Этап 6 — проверка выполнена, закрыт не полностью.** Проверены полный
прогон тестов/линтеров, upgrade миграций с master-схемы, security-матрица,
gateway и deploy-runbook. Отчёт: [16-stage6-report.md](16-stage6-report.md).
Не закрыты: права преподавателя на запись, видимость активов, аудит
скачиваний и CI. Остальные пункты hardening (индексы, backup/restore,
документация, smoke) описаны в отчёте и чек-листе.
gateway, видимость активов и deploy-runbook. Отчёт: [16-stage6-report.md](16-stage6-report.md).
Не закрыты: права преподавателя на запись, аудит скачиваний и CI. Остальные
пункты hardening (индексы, backup/restore, документация, smoke) описаны в
отчёте и чек-листе.
### 9.1. Известные пробелы после этапа 6
- **Активы публичны.** `/api/v1/content/assets/{name}` не проверяет курс и
статью; нужна проверка `article_assets → article → section → chapter` и
visibility-aware маршруты.
- **Legacy-активы без привязки.** Маршрут `/api/v1/content/assets/{name}`
проверяет `article_assets → article → section → chapter`, а `V12`
восстанавливает связи из markdown. Файлы без ссылок в статьях остаются
публичными; нужна инвентаризация и привязка или удаление.
- **Преподаватель — в основном read-only.** Авторство лабораторных/материалов,
распределение, оценки, комментарии и защита остаются admin-only в UI/API;
ТЗ ожидает преподавательский self-service.