vault backup: 2026-04-29 18:44:06

This commit is contained in:
Vadym Samoilenko 2026-04-29 18:44:06 +01:00
parent db2e77c234
commit e85de13875
3 changed files with 66 additions and 37 deletions

View file

@ -662,3 +662,9 @@ CLIENT-роль **внутри основного приложения долж
10. **Все деструктивные действия — с confirmation.** Delete job, Reassign linguist, Approve all languages — модалка с явным impact описанием.
11. **Email = mirror in-app.** Любая email-уведомление имеет deep-link на in-app экран. Любое in-app событие, требующее action, дублируется email'ом.
12. **Audit видим участникам.** Linguist/Reviewer/PM видят историю изменений в job-scope. Cross-org audit — только ADMIN.
## Sessions
### 2026-04-29 Review the client-side application flow and
**Asked:** Review the client-side application flow and identify logic breaks, UX inconsistencies, and areas needing improvement.
**Done:** Analyzed application flow in Obsidian and documented progress across 4 commits with PM features, deadline management, reject categories, and hotkey implementations.

View file

@ -85,38 +85,44 @@ status: in-progress
- PM добавлен к Audit Log (sidebar + RoleGate) — план PM-18
- `Upload Video` в sidebar теперь видит PM (был только client/production/admin)
### 🟡 PR-3 «PM productivity» — IN PROGRESS (branch: `feat/pm-productivity`, commit `460c6ce`)
### 🟡 PR-3+4+5 — IN PROGRESS (branch: `feat/pm-productivity`, последний commit `1bf0fb9`)
> [!info] Частично сделано — ветка запушена, продолжать от `feat/pm-productivity`
> [!info] Ветка объединяет PM productivity, Linguist/Reviewer improvements и tech debt
| ID | Задача | Файл | Статус |
|----|--------|------|--------|
| W-5 | Project defaults autofill при выборе existing project | `NewJob.tsx` | ✅ Done |
| PM-9 | "Needs my attention" quick filter presets (Final Review / In QC / Failed) | `JobsList.tsx` | ✅ Done |
| PM-10 | PM включён в `canManageJobs`, New Job button, Final Review action | `JobsList.tsx` | ✅ Done |
| PM-12 | Server pagination (`size:50` + page state + pagination controls) | `JobsList.tsx` | ✅ Done |
| W-4 | Team assignment matrix на форме создания job (до AI) | `NewJob.tsx` | ❌ Отложено |
| PM-1 | Deadline column + overdue colors | `JobsList.tsx` | ❌ Не начато |
| PM-2 | Clone project/job | `routes_projects.py`, `routes_jobs.py` | ❌ Не начато |
| PM-7 | Bulk assign linguist | `QCDetail.tsx`, `language_qc.py` | ❌ Не начато |
| PM-15 | Project share read-only link для CLIENT | `routes_share.py` (новый) | ❌ Не начато |
#### PR-3 (PM productivity)
### 🟡 PR-4 «Linguist & Reviewer productivity»
| ID | Задача | Статус |
|----|--------|--------|
| W-5 | Project defaults autofill при выборе existing project | ✅ Done |
| PM-9 | Quick filter presets (Final Review / In QC / TTS Failed / Render Failed) | ✅ Done |
| PM-10 | PM в `canManageJobs`, New Job button, Final Review row action | ✅ Done |
| PM-12 | Server pagination (size:50 + page controls, status server-side) | ✅ Done |
| PM-1 | Deadline field + column in JobsList + overdue red highlight + date picker in NewJob | ✅ Done |
| PM-2 | Clone job: `POST /jobs/{id}/clone` + Clone button in JobsList + useCloneJob hook | ✅ Done |
| W-4 | Team assignment matrix на форме создания job | ❌ Отложено (сложно) |
| PM-7 | Bulk assign linguist | ❌ Не начато |
| PM-15 | Project share read-only link для CLIENT (`routes_share.py`) | ❌ Не начато |
- Glossary inline в VttEditor
- Diff AI baseline vs current edit
- Optimistic locking (concurrent edits → 409)
- Reviewer reviewed-cues tracking + gate approve
- Reject reason categories (не free-text)
- Hotkeys (Cmd+Enter save, `]`/`[` prev/next cue)
#### PR-4 (Linguist & Reviewer productivity — частично)
### 🟢 PR-5 «Polish & tech debt»
| ID | Задача | Статус |
|----|--------|--------|
| R-4 | Reject reason categories (timing/mistranslation/terminology/profanity/length/other) pill-select в reject modal | ✅ Done |
| R-2 | Reviewed-cues progress bar + approve gated at 80% for reviewer | ✅ Done |
| L-9 | Hotkey Cmd+S saves full VTT; Escape closes all reject forms | ✅ Done |
| L-1/L-6 | Glossary inline в VttEditor, CPS warning | ❌ Не начато |
| L-3 | Optimistic locking (If-Match / 409) | ❌ Не начато |
| L-7 | Diff AI baseline vs current | ❌ Не начато |
- Единый `lib/jobStatusMessages.ts`
- Native `<track>` для captions (сейчас кастомный div)
- AD audio sync с video
- CSRF защита
- Unified upload size limit (сейчас 3 разных значения в коде)
#### PR-5 (Polish & tech debt — частично)
| ID | Задача | Статус |
|----|--------|--------|
| T-1 | Unified status labels — `JOB_STATUS_LABELS` + `getJobStatusLabel` в `jobStatusMessages.ts`; дублирование удалено из StatusBadge и JobsList | ✅ Done |
| T-14 | Unified upload size: `settings.upload_max_video_bytes` + `settings.upload_signed_url_ttl_hours` | ✅ Done |
| T-6 | Native `<track>` для captions (сейчас custom div) | ❌ Не начато |
| T-7 | AD audio sync с video | ❌ Не начато |
| T-11 | CSRF защита | ❌ Не начато |
---
@ -175,16 +181,30 @@ cd backend && ruff check .
### 2026-04-29 Session 2
**Done:**
- PR-3 `feat/pm-productivity` pushed (`460c6ce`):
- W-5: project defaults autofill on NewJob project select
- PM-9: quick filter presets for PM/admin (Final Review / In QC / TTS Failed / Render Failed)
- PM-10: PM added to `canManageJobs`, New Job button, Final Review row action
- PM-12: server-side pagination (size 50, page controls)
- PR-3 первая порция (`460c6ce`): W-5, PM-9, PM-10, PM-12
**Next session — continue PR-3:**
- PM-1: Deadline column in JobsList (need `deadline` field in Job model first)
- PM-2: Clone project/job endpoints (`routes_projects.py`, `routes_jobs.py`)
- PM-7: Bulk assign linguist (`QCDetail.tsx` + `language_qc.py`)
- PM-15: Read-only share link for CLIENT (`routes_share.py` new file)
- W-4: Team assignment matrix on NewJob form (deferred, complex)
### 2026-04-29 Session 3
**Done (commit `13db347`):**
- PM-1: deadline field in Job model, NewJob date picker, JobsList column + overdue red
- PM-2: `POST /jobs/{id}/clone`, `useCloneJob` hook, Clone button in JobsList
- R-4: reject categories (pill selector) in QCDetail reject modal + backend validation
- R-2: reviewed_cues/total_cues in LanguageQCState, progress bar + 80% approve gate, `/mark-cue-reviewed` endpoint
**Done (commit `1bf0fb9`):**
- L-9: Cmd+S saves full VTT, Escape closes all reject forms in QCDetail
- T-1: unified `JOB_STATUS_LABELS` / `getJobStatusLabel` in `jobStatusMessages.ts`, dups removed
- T-14: `settings.upload_max_video_bytes` + `settings.upload_signed_url_ttl_hours` in config.py
**Full plan saved to Obsidian:** `[[Full-Implementation-Plan]]`
**Remaining work:**
- PM-7: Bulk assign linguist
- PM-15: Read-only share link for CLIENT
- L-1/L-6: Glossary inline in VttEditor, CPS warning
- L-3: Optimistic locking (If-Match / 409)
- L-7: Diff AI baseline vs current
- T-6: Native `<track>` for captions
- T-7: AD audio sync
- T-11: CSRF

View file

@ -455,3 +455,6 @@ tags: [daily]
- 18:29 (3min) | `video-accessibility`
- **Asked:** Review client-side application flow and identify logic breaks, inconsistencies, and UX issues.
- **Done:** Analyzed application architecture and documented findings in Obsidian for handover.
- 18:42 | `video-accessibility`
- **Asked:** Review the client-side application flow and identify logic breaks, UX inconsistencies, and areas needing improvement.
- **Done:** Analyzed application flow in Obsidian and documented progress across 4 commits with PM features, deadline management, reject categories, and hotkey implementations.