Данные и доступ
Каждая бизнес-запись содержит family_id. PostgreSQL RLS проверяет активное
членство через auth.uid(). Роль берётся из таблицы членства, а не из изменяемых
метаданных пользователя. Пользователь вне семьи не видит её записи.
Родитель управляет стратегией, школьными оценками и требованиями университетов. Ученик работает с действиями и результатами. Секретный ключ доступен только серверным операциям администрирования; обычные операции используют RLS.
Неизвестные баллы и даты хранятся как null. В интерфейсе они не превращаются в
нулевые результаты. Исходная школьная оценка и её документ сохраняются отдельно
от исправленной оценки. Обязательные условия gate определяют его прогресс.
Файлы хранятся в закрытых bucket. Путь начинается с UUID семьи. Оригиналы нельзя перезаписать обычным пользовательским запросом. Завершённый месячный обзор сохраняет снимок направлений и защищён от изменения.
Миграции находятся в supabase/migrations. Начальные стратегические данные
создаются scripts/generate-seed.py; повторная загрузка не заменяет существующие
записи с тем же идентификатором. Аутентификационные пользователи не входят в seed.