--- 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. После деплоя запустить миграцию ```