vault backup: 2026-05-18 19:46:13

This commit is contained in:
Vadym Samoilenko 2026-05-18 19:46:13 +01:00
parent fe3278e7ab
commit 56707b4ccf
21 changed files with 0 additions and 96 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="88" height="20" role="img" aria-label="npm: v3.84.1"><title>npm: v3.84.1</title><filter id="blur"><feGaussianBlur in="SourceGraphic" stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="88" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="35" height="20" fill="#555"/><rect x="35" width="53" height="20" fill="#007ec6"/><rect width="88" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="185" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="250">npm</text><text aria-hidden="true" x="185" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">npm</text><text x="185" y="140" transform="scale(.1)" fill="#fff" textLength="250">npm</text><text aria-hidden="true" x="605" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="430">v3.84.1</text><text aria-hidden="true" x="605" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">v3.84.1</text><text x="605" y="140" transform="scale(.1)" fill="#fff" textLength="430">v3.84.1</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="124.5" height="28" role="img" aria-label="LICENSE: MIT"><title>LICENSE: MIT</title><g shape-rendering="crispEdges"><rect width="75.75" height="28" fill="#555"/><rect x="75.75" width="48.75" height="28" fill="#97ca00"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100"><text transform="scale(.1)" x="378.75" y="175" textLength="517.5" fill="#fff">LICENSE</text><text transform="scale(.1)" x="1001.25" y="175" textLength="247.5" fill="#fff" font-weight="bold">MIT</text></g></svg>

Before

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="215.25" height="28" role="img" aria-label="BUILT BY: NOUS RESEARCH"><title>BUILT BY: NOUS RESEARCH</title><g shape-rendering="crispEdges"><rect width="80" height="28" fill="#555"/><rect x="80" width="135.25" height="28" fill="blueviolet"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100"><text transform="scale(.1)" x="400" y="175" textLength="560" fill="#fff">BUILT BY</text><text transform="scale(.1)" x="1476.25" y="175" textLength="1112.5" fill="#fff" font-weight="bold">NOUS RESEARCH</text></g></svg>

Before

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 MiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="102.5" height="28" role="img" aria-label="LANG: 中文"><title>LANG: 中文</title><g shape-rendering="crispEdges"><rect width="56" height="28" fill="#555"/><rect x="56" width="46.5" height="28" fill="#e05d44"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100"><text transform="scale(.1)" x="280" y="175" textLength="320" fill="#fff">LANG</text><text transform="scale(.1)" x="792.5" y="175" textLength="225" fill="#fff" font-weight="bold">中文</text></g></svg>

Before

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

View file

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

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="104.75" height="28" role="img" aria-label="DISCORD"><title>DISCORD</title><g shape-rendering="crispEdges"><rect width="104.75" height="28" fill="#5865f2"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100"><image x="9" y="7" width="14" height="14" href="data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRpc2NvcmQ8L3RpdGxlPjxwYXRoIGQ9Ik0yMC4zMTcgNC4zNjk4YTE5Ljc5MTMgMTkuNzkxMyAwIDAwLTQuODg1MS0xLjUxNTIuMDc0MS4wNzQxIDAgMDAtLjA3ODUuMDM3MWMtLjIxMS4zNzUzLS40NDQ3Ljg2NDgtLjYwODMgMS4yNDk1LTEuODQ0Ny0uMjc2Mi0zLjY4LS4yNzYyLTUuNDg2OCAwLS4xNjM2LS4zOTMzLS40MDU4LS44NzQyLS42MTc3LTEuMjQ5NWEuMDc3LjA3NyAwIDAwLS4wNzg1LS4wMzcgMTkuNzM2MyAxOS43MzYzIDAgMDAtNC44ODUyIDEuNTE1LjA2OTkuMDY5OSAwIDAwLS4wMzIxLjAyNzdDLjUzMzQgOS4wNDU4LS4zMTkgMTMuNTc5OS4wOTkyIDE4LjA1NzhhLjA4MjQuMDgyNCAwIDAwLjAzMTIuMDU2MWMyLjA1MjggMS41MDc2IDQuMDQxMyAyLjQyMjggNS45OTI5IDMuMDI5NGEuMDc3Ny4wNzc3IDAgMDAuMDg0Mi0uMDI3NmMuNDYxNi0uNjMwNC44NzMxLTEuMjk1MiAxLjIyNi0xLjk5NDJhLjA3Ni4wNzYgMCAwMC0uMDQxNi0uMTA1N2MtLjY1MjgtLjI0NzYtMS4yNzQzLS41NDk1LTEuODcyMi0uODkyM2EuMDc3LjA3NyAwIDAxLS4wMDc2LS4xMjc3Yy4xMjU4LS4wOTQzLjI1MTctLjE5MjMuMzcxOC0uMjkxNGEuMDc0My4wNzQzIDAgMDEuMDc3Ni0uMDEwNWMzLjkyNzggMS43OTMzIDguMTggMS43OTMzIDEyLjA2MTQgMGEuMDczOS4wNzM5IDAgMDEuMDc4NS4wMDk1Yy4xMjAyLjA5OS4yNDYuMTk4MS4zNzI4LjI5MjRhLjA3Ny4wNzcgMCAwMS0uMDA2Ni4xMjc2IDEyLjI5ODYgMTIuMjk4NiAwIDAxLTEuODczLjg5MTQuMDc2Ni4wNzY2IDAgMDAtLjA0MDcuMTA2N2MuMzYwNC42OTguNzcxOSAxLjM2MjggMS4yMjUgMS45OTMyYS4wNzYuMDc2IDAgMDAuMDg0Mi4wMjg2YzEuOTYxLS42MDY3IDMuOTQ5NS0xLjUyMTkgNi4wMDIzLTMuMDI5NGEuMDc3LjA3NyAwIDAwLjAzMTMtLjA1NTJjLjUwMDQtNS4xNzctLjgzODItOS42NzM5LTMuNTQ4NS0xMy42NjA0YS4wNjEuMDYxIDAgMDAtLjAzMTItLjAyODZ6TTguMDIgMTUuMzMxMmMtMS4xODI1IDAtMi4xNTY5LTEuMDg1Ny0yLjE1NjktMi40MTkgMC0xLjMzMzIuOTU1NS0yLjQxODkgMi4xNTctMi40MTg5IDEuMjEwOCAwIDIuMTc1NyAxLjA5NTIgMi4xNTY4IDIuNDE5IDAgMS4zMzMyLS45NTU1IDIuNDE4OS0yLjE1NjkgMi40MTg5em03Ljk3NDggMGMtMS4xODI1IDAtMi4xNTY5LTEuMDg1Ny0yLjE1NjktMi40MTkgMC0xLjMzMzIuOTU1NC0yLjQxODkgMi4xNTY5LTIuNDE4OSAxLjIxMDggMCAyLjE3NTcgMS4wOTUyIDIuMTU2OCAyLjQxOSAwIDEuMzMzMi0uOTQ2IDIuNDE4OS0yLjE1NjggMi40MTg5WiIvPjwvc3ZnPg=="/><text transform="scale(.1)" x="623.75" y="175" textLength="607.5" fill="#fff" font-weight="bold">DISCORD</text></g></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="331.25" height="28" role="img" aria-label="DOCS: HERMES-AGENT.NOUSRESEARCH.COM"><title>DOCS: HERMES-AGENT.NOUSRESEARCH.COM</title><g shape-rendering="crispEdges"><rect width="58" height="28" fill="#555"/><rect x="58" width="273.25" height="28" fill="#ffd700"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100"><text transform="scale(.1)" x="290" y="175" textLength="340" fill="#fff">DOCS</text><text transform="scale(.1)" x="1946.25" y="175" textLength="2492.5" fill="#333" font-weight="bold">HERMES-AGENT.NOUSRESEARCH.COM</text></g></svg>

Before

Width:  |  Height:  |  Size: 680 B