---
title: Video Accessibility — Next Session Prompt
date: 2026-04-29
tags:
  - video-accessibility
  - prompt
  - handover
---

# Next Session Start Prompt

> Copy the block below and paste as the first message in the new Claude Code session.

---

```
Продолжаем работу над video-accessibility проектом.

## Контекст

Платформа — AI SaaS для генерации accessibility-материалов (CC, AD, SDH) из видео.
Рабочая директория: /Users/ai_leed/Documents/Projects/Oliver/video-accessibility
Текущая ветка: feat/pm-productivity (от main)
Последний коммит: 08fcb4d

## Полный план

Хендовер с историей что сделано и что осталось:
/Users/ai_leed/Library/Mobile Documents/iCloud~md~obsidian/Documents/VadymSamoilenko/01 Projects/video-accessibility/Multi-Tenant Audit — Handover.md

## Что уже сделано (не трогать)

### PR-1 (merged): Multi-tenancy foundations
- org-изоляция во всех эндпоинтах (assert_job_in_user_org)
- WebSocket membership check
- organization_id в моделях
- миграция 2026_05_add_organization_id.py

### PR-2 (pushed feat/workflow-blockers, commit c7a6f13):
- PM dashboard + Production dashboard
- role-based login redirect (linguist/reviewer → /qc/queue)
- sidebar badges (live QC count)
- two-stage QC enforcement (_assert_can_approve)
- email notifications enabled
- PM в complete_job, Final Review, Audit Log

### PR-3+4+5 (pushed feat/pm-productivity, commit 1bf0fb9):
- W-5: project defaults autofill в NewJob
- PM-9: quick filter presets в JobsList
- PM-10: PM в canManageJobs / New Job button / Final Review action
- PM-12: server pagination (size:50, page state, pagination controls)
- PM-1: deadline field в Job model + JobsList column + overdue red + NewJob date picker
- PM-2: POST /jobs/{id}/clone + useCloneJob hook + Clone button
- R-4: reject categories (pill-select) в QCDetail reject modal
- R-2: reviewed_cues/total_cues + progress bar + 80% approve gate + /mark-cue-reviewed
- L-9: Cmd+S saves full VTT, Escape closes modals
- T-1: JOB_STATUS_LABELS / getJobStatusLabel unified in jobStatusMessages.ts
- T-14: settings.upload_max_video_bytes + settings.upload_signed_url_ttl_hours

### PR-6 (pushed feat/pm-productivity, commit 08fcb4d):
- W-4: Job stores initial_linguist_id/reviewer_id; auto-assigned on first GET /language-qc
       NewJob shows team-assignment grid when project selected
- L-3 WS: GET /vtt → broadcast_to_job(language_editing_started)
          QCDetail shows "User X is editing [lang]" banner (auto-clears 5s)
- R-5 WS: add_comment() → broadcast_to_job(language_qc_comment)
          QCDetail live-invalidates comments cache
- L-15: language_qc_assigned WS → QCDetail refetches lang-qc + toast
- R-7: VttEditor gets onCuePlay prop; AD cues get ▶ play button (seeks accessible video)
- T-15: beforeunload guard in NewJob while upload is in progress
- BUGFIX: broadcast_to_job() + broadcast_to_user() added to ConnectionManager (were missing)

## Что осталось

### W-12/13/14 — Job Brief / client intake form
- ОТЛОЖЕНО: требует новый EntityJobBrief, новые состояния стейт-машины
- Слишком большой скоуп для текущей итерации

### Открытые риски перед деплоем
1. Запустить миграцию 2026_05_add_organization_id.py
2. Проверить что у существующих staff есть memberships/teams
3. MT-12 (_assert_client_access legacy bypass для PM) ещё не закрыт
4. MT-16 (JWT без org_ids) — каждый запрос ходит в Mongo для memberships; 60s cache есть

## Инструкции

1. Перед началом прочти хендовер в Obsidian (ссылка выше)
2. Работаем на ветке feat/pm-productivity
3. Ветка готова к код-ревью и мержу в main
4. После деплоя запустить миграцию
```