# Матрица задач Generated; state revision **88**. Canonical status: state/tasks.json. | ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача | | --- | --- | --- | --- | --- | --- | --- | --- | | [S00-001](tasks/S00-001.md) | S00 | orchestrator | security | done | auto-orchestrator-48aab142ecde | | Утвердить Web-профиль | | [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | done | auto-orchestrator-68a05c587e33 | S00-001, S00-011, S00-012 | Выбрать framework и build runtime | | [S00-003](tasks/S00-003.md) | S00 | protocol | qa | todo | | S00-001, S00-002, S00-017, S00-018, S00-019, S00-020 | Проверить XMPP WSS/auth библиотеку | | [S00-004](tasks/S00-004.md) | S00 | crypto | security | blocked | auto-crypto-fe1c81c17ded | S00-001, S00-002, S00-021, S00-022 | Проверить browser OMEMO backend | | [S00-005](tasks/S00-005.md) | S00 | storage | qa | blocked | auto-storage-88c3286c6641 | S00-002, S00-023 | Выбрать IndexedDB wrapper и migration policy | | [S00-006](tasks/S00-006.md) | S00 | orchestrator | security | todo | | S00-002 | Зафиксировать browser/reference matrix | | [S00-007](tasks/S00-007.md) | S00 | security | orchestrator | todo | | S00-004, S00-005 | Утвердить password и crypto unlock модель | | [S00-008](tasks/S00-008.md) | S00 | ci-cd | qa | todo | | S00-003, S00-004 | Описать WSS/upload/TURN/push topology | | [S00-009](tasks/S00-009.md) | S00 | orchestrator | security | todo | | S00-003, S00-004, S00-005, S00-006, S00-007, S00-008 | Согласовать результаты spikes | | [S00-011](tasks/S00-011.md) | S00 | ci-cd | security | done | auto-ci-cd-d105e8027730 | S00-001 | Restore verified npm registry access for the stack spike | | [S00-012](tasks/S00-012.md) | S00 | ci-cd | qa | done | auto-ci-cd-f101e40d9902 | S00-001, S00-011, S00-013, S00-014, S00-015 | Fix runner prompt delivery after partial stdin timeout | | [S00-013](tasks/S00-013.md) | S00 | ci-cd | qa | done | auto-ci-cd-5f68f03dd33b | S00-001, S00-011 | Bound oversized S21-006 runner context without truncating requirements | | [S00-014](tasks/S00-014.md) | S00 | ci-cd | qa | done | auto-ci-cd-14343249da62 | S00-001, S00-011, S00-013 | Fix repeated runner cleanup after a submitted parent is reaped | | [S00-015](tasks/S00-015.md) | S00 | ci-cd | qa | done | auto-ci-cd-84e209103f24 | S00-001, S00-011, S00-013, S00-014, S00-016 | Устранить прерывание: Fix runner prompt delivery after partial stdin timeout | | [S00-016](tasks/S00-016.md) | S00 | ci-cd | qa | done | auto-ci-cd-351a0cbbabef | S00-001, S00-011, S00-013, S00-014 | Restore reviewer model availability after provider capacity failure | | [S00-017](tasks/S00-017.md) | S00 | protocol | security | done | auto-protocol-599343cd9e3f | S00-001, S00-002 | Establish fail-closed SCRAM server-final validation | | [S00-018](tasks/S00-018.md) | S00 | protocol | security | done | auto-protocol-89fe6563092c | S00-001, S00-002, S00-017 | Validate bounded standalone XML ingress for the XMPP candidate | | [S00-019](tasks/S00-019.md) | S00 | crypto | security | done | auto-crypto-c68801170fa4 | S00-001, S00-002, S00-017, S00-018 | Validate browser-compatible SCRAM-SHA-512 through a public mechanism API | | [S00-020](tasks/S00-020.md) | S00 | ci-cd | qa | done | auto-ci-cd-2a0186c54ce9 | S00-001, S00-002, S00-017, S00-018, S00-019, S00-024 | Restore access to the pinned Linux XMPP experiment toolchain | | [S00-021](tasks/S00-021.md) | S00 | crypto | security | done | auto-crypto-fcef9b6781bf | S00-001, S00-002 | Устранить прерывание: Проверить browser OMEMO backend | | [S00-022](tasks/S00-022.md) | S00 | crypto | security | blocked | auto-crypto-316a193d6c3e | S00-001, S00-002, S00-021, S00-027 | Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint | | [S00-023](tasks/S00-023.md) | S00 | storage | qa | blocked | auto-storage-87486895c792 | S00-002, S00-025 | Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [S00-024](tasks/S00-024.md) | S00 | ci-cd | qa | done | auto-ci-cd-49907d48a6d1 | S00-001, S00-002, S00-017, S00-018, S00-019, S00-026 | Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain | | [S00-025](tasks/S00-025.md) | S00 | storage | qa | blocked | auto-storage-ae5930b6fbdf | S00-002, S00-028 | Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [S00-026](tasks/S00-026.md) | S00 | ci-cd | qa | done | auto-ci-cd-4255c34da227 | S00-001, S00-002, S00-017, S00-018, S00-019 | Provide approved access to the pinned Linux experiment artifacts | | [S00-027](tasks/S00-027.md) | S00 | ci-cd | security | review | auto-ci-cd-40ae46e8efe7 | S00-001, S00-002, S00-021 | Restore approved npm registry connectivity for the OMEMO2 backend investigation | | [S00-028](tasks/S00-028.md) | S00 | ci-cd | qa | todo | | S00-002 | Repair conflicting Codex harness sandbox arguments | | [S00-010](tasks/S00-010.md) | S00 | qa | orchestrator | todo | | S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009 | Gate: Профиль и проверка стека | | [S01-001](tasks/S01-001.md) | S01 | orchestrator | security | todo | | S00-010 | Описать identity/model contracts | | [S01-002](tasks/S01-002.md) | S01 | orchestrator | security | todo | | S00-010, S01-001 | Описать async account context | | [S01-003](tasks/S01-003.md) | S01 | storage | qa | todo | | S00-010, S01-001, S01-002 | Описать transaction contract | | [S01-004](tasks/S01-004.md) | S01 | protocol | qa | todo | | S00-010, S01-001, S01-002 | Описать XMPP event/command port | | [S01-005](tasks/S01-005.md) | S01 | crypto | security | todo | | S00-010, S01-001, S01-002 | Описать crypto port | | [S01-006](tasks/S01-006.md) | S01 | media | qa | todo | | S00-010, S01-001, S01-002, S01-005 | Описать staged asset contract | | [S01-007](tasks/S01-007.md) | S01 | realtime | qa | todo | | S00-010, S01-001, S01-002, S01-004 | Описать call engine contract | | [S01-008](tasks/S01-008.md) | S01 | backend | security | todo | | S00-010, S01-001, S01-002, S01-004 | Описать push API и binding | | [S01-009](tasks/S01-009.md) | S01 | qa | orchestrator | todo | | S01-001, S01-002, S01-003, S01-004, S01-005, S01-006, S01-007, S01-008 | Gate: Предметные контракты | | [S02-001](tasks/S02-001.md) | S02 | ci-cd | qa | todo | | S01-009 | Создать workspace по accepted ADR | | [S02-002](tasks/S02-002.md) | S02 | ci-cd | qa | todo | | S01-009, S02-001 | Настроить production build | | [S02-003](tasks/S02-003.md) | S02 | ci-cd | qa | todo | | S01-009, S02-001 | Настроить единый code quality check | | [S02-004](tasks/S02-004.md) | S02 | qa | orchestrator | todo | | S01-009, S02-001 | Настроить unit/contract runner | | [S02-005](tasks/S02-005.md) | S02 | qa | orchestrator | todo | | S01-009, S02-002, S02-004 | Настроить browser smoke runner | | [S02-006](tasks/S02-006.md) | S02 | ci-cd | qa | todo | | S01-009, S02-002, S02-003, S02-004, S02-005 | Подключить app CI | | [S02-007](tasks/S02-007.md) | S02 | front | qa | todo | | S01-009, S02-001, S02-004 | Создать route skeleton | | [S02-008](tasks/S02-008.md) | S02 | ci-cd | qa | todo | | S01-009, S02-001, S02-004 | Валидировать public runtime config | | [S02-009](tasks/S02-009.md) | S02 | protocol | qa | todo | | S01-009, S02-004 | Создать typed error vocabulary | | [S02-010](tasks/S02-010.md) | S02 | orchestrator | security | todo | | S01-009, S02-004, S02-009 | Реализовать operation context primitive | | [S02-011](tasks/S02-011.md) | S02 | crypto | security | todo | | S01-009, S02-004, S02-009, S02-010 | Создать worker request bridge | | [S02-012](tasks/S02-012.md) | S02 | qa | orchestrator | todo | | S02-001, S02-002, S02-003, S02-004, S02-005, S02-006, S02-007, S02-008, S02-009, S02-010, S02-011 | Gate: Workspace и инженерный каркас | | [S03-001](tasks/S03-001.md) | S03 | front | qa | todo | | S02-012 | Реализовать semantic palette | | [S03-002](tasks/S03-002.md) | S03 | front | qa | todo | | S02-012, S03-001 | Реализовать typography/spacing tokens | | [S03-003](tasks/S03-003.md) | S03 | front | qa | todo | | S02-012, S03-001, S03-002 | Реализовать theme preferences | | [S03-004](tasks/S03-004.md) | S03 | front | qa | todo | | S02-012, S03-002 | Создать Button/IconButton | | [S03-005](tasks/S03-005.md) | S03 | front | qa | todo | | S02-012, S03-002, S03-004 | Создать Input/PasswordInput | | [S03-006](tasks/S03-006.md) | S03 | front | qa | todo | | S02-012, S03-004 | Создать Dialog/Popover | | [S03-007](tasks/S03-007.md) | S03 | front | qa | todo | | S02-012, S03-004 | Создать Toast/InlineError | | [S03-008](tasks/S03-008.md) | S03 | front | qa | todo | | S02-012, S03-002 | Создать Empty/LoadingState | | [S03-009](tasks/S03-009.md) | S03 | front | qa | todo | | S02-012, S03-001, S03-002 | Создать Avatar | | [S03-010](tasks/S03-010.md) | S03 | front | qa | todo | | S02-012, S03-005 | Создать SearchField | | [S03-011](tasks/S03-011.md) | S03 | front | qa | todo | | S02-012, S03-001, S03-002 | Создать Badge/StatusChip | | [S03-012](tasks/S03-012.md) | S03 | front | qa | todo | | S02-012, S03-004 | Создать icon registry | | [S03-013](tasks/S03-013.md) | S03 | front | qa | todo | | S02-012, S03-003, S03-004, S03-005, S03-006, S03-007, S03-008, S03-009, S03-010, S03-011, S03-012 | Собрать primitive catalog | | [S03-014](tasks/S03-014.md) | S03 | qa | orchestrator | todo | | S02-012, S03-013 | Проверить primitives | | [S03-015](tasks/S03-015.md) | S03 | qa | orchestrator | todo | | S03-001, S03-002, S03-003, S03-004, S03-005, S03-006, S03-007, S03-008, S03-009, S03-010, S03-011, S03-012, S03-013, S03-014 | Gate: Токены и базовые компоненты | | [S04-001](tasks/S04-001.md) | S04 | storage | qa | todo | | S03-015 | Создать версионированную schema | | [S04-002](tasks/S04-002.md) | S04 | storage | qa | todo | | S03-015, S04-001 | Реализовать transaction wrapper | | [S04-003](tasks/S04-003.md) | S04 | storage | qa | todo | | S03-015, S04-002 | Реализовать message repository | | [S04-004](tasks/S04-004.md) | S04 | storage | qa | todo | | S03-015, S04-002 | Реализовать conversation repository | | [S04-005](tasks/S04-005.md) | S04 | storage | qa | todo | | S03-015, S04-002 | Реализовать checkpoint/suppression storage | | [S04-006](tasks/S04-006.md) | S04 | storage | qa | todo | | S03-015, S04-002 | Реализовать draft persistence | | [S04-007](tasks/S04-007.md) | S04 | storage | qa | todo | | S03-015, S04-002, S04-003 | Обработать quota/degraded mode | | [S04-008](tasks/S04-008.md) | S04 | storage | qa | todo | | S03-015, S04-001, S04-002 | Реализовать первую migration pipeline | | [S04-009](tasks/S04-009.md) | S04 | storage | qa | todo | | S03-015, S04-002 | Реализовать media cache policy | | [S04-010](tasks/S04-010.md) | S04 | qa | orchestrator | todo | | S03-015, S04-003, S04-004, S04-005, S04-006, S04-007, S04-008, S04-009 | Проверить reload/recovery suite | | [S04-011](tasks/S04-011.md) | S04 | qa | orchestrator | todo | | S04-001, S04-002, S04-003, S04-004, S04-005, S04-006, S04-007, S04-008, S04-009, S04-010 | Gate: Локальное хранилище | | [S05-001](tasks/S05-001.md) | S05 | protocol | qa | todo | | S04-011 | Валидировать WSS endpoint | | [S05-002](tasks/S05-002.md) | S05 | protocol | qa | todo | | S04-011, S05-001 | Реализовать WSS adapter | | [S05-003](tasks/S05-003.md) | S05 | protocol | qa | todo | | S04-011, S05-002 | Реализовать auth preference | | [S05-004](tasks/S05-004.md) | S05 | protocol | qa | todo | | S04-011, S05-003 | Проверить SCRAM challenge limits | | [S05-005](tasks/S05-005.md) | S05 | protocol | qa | todo | | S04-011, S05-002 | Реализовать stanza parser boundary | | [S05-006](tasks/S05-006.md) | S05 | protocol | qa | todo | | S04-011, S05-002, S05-005 | Реализовать capability discovery | | [S05-007](tasks/S05-007.md) | S05 | protocol | qa | todo | | S04-011, S05-002, S05-005, S05-006 | Интегрировать SM/Carbons/CSI/Ping | | [S05-008](tasks/S05-008.md) | S05 | protocol | qa | todo | | S04-011, S05-002, S05-007 | Реализовать bounded reconnect | | [S05-009](tasks/S05-009.md) | S05 | security | orchestrator | todo | | S04-011, S05-003, S05-004, S05-005, S05-008 | Проверить auth/secret boundary | | [S05-010](tasks/S05-010.md) | S05 | qa | orchestrator | todo | | S04-011, S05-006, S05-007, S05-008, S05-009 | Проверить WSS/reconnect интеграцию | | [S05-011](tasks/S05-011.md) | S05 | qa | security | todo | | S05-001, S05-002, S05-003, S05-004, S05-005, S05-006, S05-007, S05-008, S05-009, S05-010 | Gate: WSS и аутентификация | | [S06-001](tasks/S06-001.md) | S06 | protocol | qa | todo | | S05-011 | Реализовать JID/resource policy | | [S06-002](tasks/S06-002.md) | S06 | storage | qa | todo | | S05-011, S06-001 | Реализовать saved account configs | | [S06-003](tasks/S06-003.md) | S06 | front | qa | todo | | S05-011, S06-001 | Создать Web LoginForm | | [S06-004](tasks/S06-004.md) | S06 | protocol | qa | todo | | S05-011, S06-001, S06-002 | Реализовать sign-in use case | | [S06-005](tasks/S06-005.md) | S06 | protocol | qa | todo | | S05-011, S06-004 | Реализовать in-memory credentials | | [S06-006](tasks/S06-006.md) | S06 | protocol | qa | todo | | S05-011, S06-002, S06-004, S06-005 | Реализовать switch cancellation | | [S06-007](tasks/S06-007.md) | S06 | protocol | qa | todo | | S05-011, S06-005, S06-006 | Реализовать logout orchestration | | [S06-008](tasks/S06-008.md) | S06 | storage | qa | todo | | S05-011, S06-002, S06-007 | Реализовать explicit local erase | | [S06-009](tasks/S06-009.md) | S06 | front | qa | todo | | S05-011, S06-003, S06-006, S06-007, S06-008 | Создать account switch/logout UI | | [S06-010](tasks/S06-010.md) | S06 | qa | orchestrator | todo | | S05-011, S06-004, S06-005, S06-006, S06-007, S06-008, S06-009 | Проверить lifecycle races | | [S06-011](tasks/S06-011.md) | S06 | qa | orchestrator | todo | | S06-001, S06-002, S06-003, S06-004, S06-005, S06-006, S06-007, S06-008, S06-009, S06-010 | Gate: Аккаунты и lifecycle | | [S07-001](tasks/S07-001.md) | S07 | front | qa | todo | | S06-011 | Создать adaptive shell | | [S07-002](tasks/S07-002.md) | S07 | front | qa | todo | | S06-011, S07-001 | Реализовать Back/selection routes | | [S07-003](tasks/S07-003.md) | S07 | front | qa | todo | | S06-011, S07-001 | Создать ConversationRow | | [S07-004](tasks/S07-004.md) | S07 | front | qa | todo | | S06-011, S07-003 | Реализовать search/sort policies | | [S07-005](tasks/S07-005.md) | S07 | front | qa | todo | | S06-011, S07-003, S07-004 | Подключить empty/no-results states | | [S07-006](tasks/S07-006.md) | S07 | protocol | qa | todo | | S06-011 | Реализовать roster initial/push | | [S07-007](tasks/S07-007.md) | S07 | protocol | qa | todo | | S06-011, S07-006 | Реализовать presence reducer | | [S07-008](tasks/S07-008.md) | S07 | protocol | qa | todo | | S06-011, S07-006 | Реализовать avatar fetch/publish adapter | | [S07-009](tasks/S07-009.md) | S07 | media | qa | todo | | S06-011, S07-008 | Нормализовать avatar asset | | [S07-010](tasks/S07-010.md) | S07 | front | qa | todo | | S06-011, S07-003, S07-004, S07-005, S07-006, S07-007, S07-008, S07-009 | Собрать ContactsView | | [S07-011](tasks/S07-011.md) | S07 | front | qa | todo | | S06-011, S07-002, S07-006, S07-010 | Создать new direct chat flow | | [S07-012](tasks/S07-012.md) | S07 | qa | orchestrator | todo | | S06-011, S07-002, S07-004, S07-005, S07-010, S07-011 | Проверить shell и roster UI | | [S07-013](tasks/S07-013.md) | S07 | qa | orchestrator | todo | | S07-001, S07-002, S07-003, S07-004, S07-005, S07-006, S07-007, S07-008, S07-009, S07-010, S07-011, S07-012 | Gate: Навигация, контакты и списки | | [S08-001](tasks/S08-001.md) | S08 | protocol | qa | todo | | S07-013 | Реализовать message identity merge | | [S08-002](tasks/S08-002.md) | S08 | protocol | qa | todo | | S07-013, S08-001 | Реализовать delivery merge | | [S08-003](tasks/S08-003.md) | S08 | protocol | qa | todo | | S07-013, S08-001, S08-002 | Реализовать incoming decode reducer | | [S08-004](tasks/S08-004.md) | S08 | protocol | qa | todo | | S07-013, S08-001, S08-002, S08-003 | Реализовать optimistic text send | | [S08-005](tasks/S08-005.md) | S08 | protocol | qa | todo | | S07-013, S08-004 | Реализовать text retry | | [S08-006](tasks/S08-006.md) | S08 | protocol | qa | todo | | S07-013, S08-001, S08-002, S08-003 | Обработать delivery receipts | | [S08-007](tasks/S08-007.md) | S08 | protocol | qa | todo | | S07-013, S08-004, S08-006 | Реализовать displayed/markable | | [S08-008](tasks/S08-008.md) | S08 | protocol | qa | todo | | S07-013, S08-003, S08-007 | Реализовать own-device read sync | | [S08-009](tasks/S08-009.md) | S08 | protocol | qa | todo | | S07-013, S08-003, S08-008 | Реализовать unread/preview reducer | | [S08-010](tasks/S08-010.md) | S08 | protocol | qa | todo | | S07-013, S08-004, S08-008, S08-009 | Реализовать self-chat policy | | [S08-011](tasks/S08-011.md) | S08 | qa | orchestrator | todo | | S08-001, S08-002, S08-003, S08-004, S08-005, S08-006, S08-007, S08-008, S08-009, S08-010 | Gate: Сообщения и read state | | [S09-001](tasks/S09-001.md) | S09 | front | qa | todo | | S08-011 | Создать text/file bubble | | [S09-002](tasks/S09-002.md) | S09 | front | qa | todo | | S08-011, S09-001 | Реализовать bounded timeline | | [S09-003](tasks/S09-003.md) | S09 | front | qa | todo | | S08-011, S09-002 | Сохранить viewport при history insert | | [S09-004](tasks/S09-004.md) | S09 | front | qa | todo | | S08-011, S09-001 | Создать multiline composer | | [S09-005](tasks/S09-005.md) | S09 | front | qa | todo | | S08-011, S09-004 | Реализовать Enter/IME policy | | [S09-006](tasks/S09-006.md) | S09 | front | qa | todo | | S08-011, S09-004, S09-005 | Подключить composer к send/retry | | [S09-007](tasks/S09-007.md) | S09 | front | qa | todo | | S08-011, S09-001, S09-002 | Создать date separators/metadata | | [S09-008](tasks/S09-008.md) | S09 | front | qa | todo | | S08-011, S09-001, S09-002 | Создать message selection state | | [S09-009](tasks/S09-009.md) | S09 | front | qa | todo | | S08-011, S09-003 | Создать jump-to-latest | | [S09-010](tasks/S09-010.md) | S09 | front | qa | todo | | S08-011, S09-002, S09-003 | Реализовать bounded message motion | | [S09-011](tasks/S09-011.md) | S09 | qa | orchestrator | todo | | S08-011, S09-005, S09-006, S09-007, S09-008, S09-009, S09-010 | Проверить chat keyboard/scale | | [S09-012](tasks/S09-012.md) | S09 | qa | orchestrator | todo | | S09-001, S09-002, S09-003, S09-004, S09-005, S09-006, S09-007, S09-008, S09-009, S09-010, S09-011 | Gate: Лента и composer | | [S10-001](tasks/S10-001.md) | S10 | protocol | qa | todo | | S09-012 | Реализовать action predicates | | [S10-002](tasks/S10-002.md) | S10 | protocol | qa | todo | | S09-012, S10-001 | Реализовать reply/fallback encoder | | [S10-003](tasks/S10-003.md) | S10 | protocol | qa | todo | | S09-012, S10-002 | Реализовать XML/legacy reply parser | | [S10-004](tasks/S10-004.md) | S10 | front | qa | todo | | S09-012, S10-003 | Создать CompactReply/ThreadFocus | | [S10-005](tasks/S10-005.md) | S10 | protocol | qa | todo | | S09-012, S10-001 | Реализовать correction reducer/command | | [S10-006](tasks/S10-006.md) | S10 | front | qa | todo | | S09-012, S10-005 | Подключить edit composer mode | | [S10-007](tasks/S10-007.md) | S10 | storage | qa | todo | | S09-012, S10-001 | Реализовать local deletion transaction | | [S10-008](tasks/S10-008.md) | S10 | protocol | qa | todo | | S09-012, S10-001 | Реализовать retraction command/reducer | | [S10-009](tasks/S10-009.md) | S10 | protocol | qa | todo | | S09-012, S10-001 | Реализовать ordered text/location forwarding | | [S10-010](tasks/S10-010.md) | S10 | protocol | qa | todo | | S09-012, S10-001 | Реализовать reaction set reducer | | [S10-011](tasks/S10-011.md) | S10 | front | qa | todo | | S09-012, S10-010 | Подключить ReactionChip/EmojiPicker | | [S10-012](tasks/S10-012.md) | S10 | protocol | qa | todo | | S09-012 | Реализовать typing policy/events | | [S10-013](tasks/S10-013.md) | S10 | front | qa | todo | | S09-012, S10-004, S10-006, S10-007, S10-008, S10-009, S10-011 | Подключить context/selection actions | | [S10-014](tasks/S10-014.md) | S10 | qa | orchestrator | todo | | S09-012, S10-005, S10-007, S10-008, S10-010, S10-012, S10-013 | Проверить out-of-order actions | | [S10-015](tasks/S10-015.md) | S10 | qa | orchestrator | todo | | S10-001, S10-002, S10-003, S10-004, S10-005, S10-006, S10-007, S10-008, S10-009, S10-010, S10-011, S10-012, S10-013, S10-014 | Gate: Действия над сообщениями | | [S11-001](tasks/S11-001.md) | S11 | protocol | qa | todo | | S10-015 | Реализовать MAM query envelope | | [S11-002](tasks/S11-002.md) | S11 | protocol | qa | todo | | S10-015, S11-001 | Реализовать cursor policy | | [S11-003](tasks/S11-003.md) | S11 | protocol | qa | todo | | S10-015, S11-001, S11-002 | Реализовать recent bootstrap | | [S11-004](tasks/S11-004.md) | S11 | protocol | qa | todo | | S10-015, S11-001 | Реализовать bounded decode slices | | [S11-005](tasks/S11-005.md) | S11 | storage | qa | todo | | S10-015, S11-002, S11-004 | Реализовать archive commit transaction | | [S11-006](tasks/S11-006.md) | S11 | protocol | qa | todo | | S10-015, S11-002, S11-005 | Реализовать incremental catch-up | | [S11-007](tasks/S11-007.md) | S11 | protocol | qa | todo | | S10-015, S11-001, S11-004, S11-006 | Реализовать bounded archive recovery | | [S11-008](tasks/S11-008.md) | S11 | protocol | qa | todo | | S10-015, S11-001, S11-002, S11-005 | Реализовать interactive backward paging | | [S11-009](tasks/S11-009.md) | S11 | protocol | qa | todo | | S10-015, S11-004 | Ограничить pending target queues | | [S11-010](tasks/S11-010.md) | S11 | protocol | qa | todo | | S10-015, S11-006, S11-007 | Подключить archive pause/resume | | [S11-011](tasks/S11-011.md) | S11 | front | qa | todo | | S10-015, S11-003, S11-008, S11-010 | Подключить older history UI | | [S11-012](tasks/S11-012.md) | S11 | qa | orchestrator | todo | | S10-015, S11-005, S11-007, S11-008, S11-009, S11-010, S11-011 | Проверить archive restart failures | | [S11-013](tasks/S11-013.md) | S11 | qa | orchestrator | todo | | S11-001, S11-002, S11-003, S11-004, S11-005, S11-006, S11-007, S11-008, S11-009, S11-010, S11-011, S11-012 | Gate: Архив и восстановление | | [S12-001](tasks/S12-001.md) | S12 | crypto | security | todo | | S11-013 | Подключить accepted crypto backend | | [S12-002](tasks/S12-002.md) | S12 | crypto | security | todo | | S11-013, S12-001 | Реализовать identity bootstrap | | [S12-003](tasks/S12-003.md) | S12 | crypto | security | todo | | S11-013, S12-002 | Реализовать protected crypto persistence | | [S12-004](tasks/S12-004.md) | S12 | crypto | security | todo | | S11-013, S12-002 | Реализовать device trust model | | [S12-005](tasks/S12-005.md) | S12 | protocol | qa | todo | | S11-013 | Реализовать legacy device list PEP | | [S12-006](tasks/S12-006.md) | S12 | protocol | qa | todo | | S11-013, S12-005 | Реализовать legacy bundle PEP | | [S12-007](tasks/S12-007.md) | S12 | crypto | security | todo | | S11-013, S12-001, S12-004, S12-006 | Реализовать legacy session builder | | [S12-008](tasks/S12-008.md) | S12 | crypto | security | todo | | S11-013, S12-007 | Реализовать legacy stanza encryption | | [S12-009](tasks/S12-009.md) | S12 | crypto | security | todo | | S11-013, S12-007, S12-008 | Реализовать legacy stanza decryption | | [S12-010](tasks/S12-010.md) | S12 | protocol | qa | todo | | S11-013 | Реализовать OMEMO2 devices PEP | | [S12-011](tasks/S12-011.md) | S12 | protocol | qa | todo | | S11-013, S12-010 | Реализовать OMEMO2 bundle PEP | | [S12-012](tasks/S12-012.md) | S12 | crypto | security | todo | | S11-013, S12-001, S12-003, S12-004, S12-011 | Реализовать OMEMO2 session adapter | | [S12-013](tasks/S12-013.md) | S12 | crypto | security | todo | | S11-013, S12-012 | Интегрировать OMEMO2 payload/SCE codec | | [S12-014](tasks/S12-014.md) | S12 | crypto | security | todo | | S11-013, S12-013 | Реализовать OMEMO2 stanza adapter | | [S12-015](tasks/S12-015.md) | S12 | crypto | security | todo | | S11-013, S12-008, S12-009, S12-014 | Реализовать OMEMO format preference | | [S12-016](tasks/S12-016.md) | S12 | crypto | security | todo | | S11-013, S12-015 | Подключить own-device recipients | | [S12-017](tasks/S12-017.md) | S12 | crypto | security | todo | | S11-013, S12-001, S12-003 | Реализовать encrypted file port | | [S12-018](tasks/S12-018.md) | S12 | front | qa | todo | | S11-013, S12-015 | Создать encryption controls | | [S12-019](tasks/S12-019.md) | S12 | front | qa | todo | | S11-013, S12-004, S12-015 | Создать devices/fingerprint UI | | [S12-020](tasks/S12-020.md) | S12 | security | orchestrator | todo | | S11-013, S12-003, S12-008, S12-009, S12-014, S12-015, S12-016, S12-017, S12-018, S12-019 | Проверить client crypto boundaries | | [S12-021](tasks/S12-021.md) | S12 | qa | orchestrator | todo | | S11-013, S12-020 | Проверить OMEMO interoperability | | [S12-022](tasks/S12-022.md) | S12 | qa | security | todo | | S12-001, S12-002, S12-003, S12-004, S12-005, S12-006, S12-007, S12-008, S12-009, S12-010, S12-011, S12-012, S12-013, S12-014, S12-015, S12-016, S12-017, S12-018, S12-019, S12-020, S12-021 | Gate: OMEMO и доверие | | [S13-001](tasks/S13-001.md) | S13 | protocol | qa | todo | | S12-022 | Реализовать room join/password | | [S13-002](tasks/S13-002.md) | S13 | protocol | qa | todo | | S12-022, S13-001 | Реализовать encrypted-friendly config | | [S13-003](tasks/S13-003.md) | S13 | protocol | qa | todo | | S12-022, S13-001 | Реализовать occupants/invitations | | [S13-004](tasks/S13-004.md) | S13 | protocol | qa | todo | | S12-022, S13-001, S13-002, S13-003 | Реализовать affiliation lists | | [S13-005](tasks/S13-005.md) | S13 | crypto | security | todo | | S12-022, S13-004 | Реализовать group recipient policy | | [S13-006](tasks/S13-006.md) | S13 | crypto | security | todo | | S12-022, S13-005 | Подключить encrypted group send | | [S13-007](tasks/S13-007.md) | S13 | protocol | qa | todo | | S12-022, S13-003, S13-006 | Реализовать group echo/stanza merge | | [S13-008](tasks/S13-008.md) | S13 | protocol | qa | todo | | S12-022, S13-001, S13-003 | Реализовать saved autojoin | | [S13-009](tasks/S13-009.md) | S13 | protocol | qa | todo | | S12-022, S13-001, S13-007, S13-008 | Реализовать leave/delete semantics | | [S13-010](tasks/S13-010.md) | S13 | front | qa | todo | | S12-022, S13-002, S13-003, S13-008 | Создать create/join/invite UI | | [S13-011](tasks/S13-011.md) | S13 | front | qa | todo | | S12-022, S13-005, S13-009, S13-010 | Создать GroupInfo | | [S13-012](tasks/S13-012.md) | S13 | qa | orchestrator | todo | | S12-022, S13-006, S13-007, S13-009, S13-011 | Проверить group OMEMO/replies | | [S13-013](tasks/S13-013.md) | S13 | qa | orchestrator | todo | | S13-001, S13-002, S13-003, S13-004, S13-005, S13-006, S13-007, S13-008, S13-009, S13-010, S13-011, S13-012 | Gate: MUC | | [S14-001](tasks/S14-001.md) | S14 | media | qa | todo | | S13-013 | Реализовать file staging | | [S14-002](tasks/S14-002.md) | S14 | media | qa | todo | | S13-013, S14-001 | Реализовать safe media inference | | [S14-003](tasks/S14-003.md) | S14 | protocol | qa | todo | | S13-013, S14-002 | Реализовать upload discovery/slot | | [S14-004](tasks/S14-004.md) | S14 | media | qa | todo | | S13-013, S14-003 | Реализовать PUT with redirect policy | | [S14-005](tasks/S14-005.md) | S14 | crypto | security | todo | | S13-013, S14-002, S14-004 | Подключить file encryption до PUT | | [S14-006](tasks/S14-006.md) | S14 | protocol | qa | todo | | S13-013, S14-005 | Реализовать media message body | | [S14-007](tasks/S14-007.md) | S14 | media | qa | todo | | S13-013, S14-004, S14-006 | Реализовать upload retry/cancel | | [S14-008](tasks/S14-008.md) | S14 | media | qa | todo | | S13-013, S14-005 | Реализовать HTTPS/aesgcm download | | [S14-009](tasks/S14-009.md) | S14 | media | qa | todo | | S13-013, S14-006, S14-007 | Реализовать sequential batch | | [S14-010](tasks/S14-010.md) | S14 | media | qa | todo | | S13-013, S14-008, S14-009 | Реализовать media forwarding | | [S14-011](tasks/S14-011.md) | S14 | front | qa | todo | | S13-013, S14-001, S14-002, S14-009 | Создать batch preview UI | | [S14-012](tasks/S14-012.md) | S14 | qa | orchestrator | todo | | S13-013, S14-007, S14-008, S14-010, S14-011 | Проверить upload integration | | [S14-013](tasks/S14-013.md) | S14 | qa | orchestrator | todo | | S14-001, S14-002, S14-003, S14-004, S14-005, S14-006, S14-007, S14-008, S14-009, S14-010, S14-011, S14-012 | Gate: Файлы и upload | | [S15-001](tasks/S15-001.md) | S15 | media | qa | todo | | S14-013 | Создать media thumbnail worker | | [S15-002](tasks/S15-002.md) | S15 | storage | qa | todo | | S14-013, S15-001 | Подключить deduplicated preview cache | | [S15-003](tasks/S15-003.md) | S15 | front | qa | todo | | S14-013, S15-001, S15-002 | Создать photo/video island | | [S15-004](tasks/S15-004.md) | S15 | media | qa | todo | | S14-013 | Реализовать playback coordinator | | [S15-005](tasks/S15-005.md) | S15 | front | qa | todo | | S14-013, S15-004 | Создать voice/audio controls | | [S15-006](tasks/S15-006.md) | S15 | front | qa | todo | | S14-013, S15-001, S15-004 | Создать round videoNote player | | [S15-007](tasks/S15-007.md) | S15 | front | qa | todo | | S14-013, S15-003, S15-004 | Создать full-window viewer | | [S15-008](tasks/S15-008.md) | S15 | media | qa | todo | | S14-013, S15-002 | Реализовать explicit export/download | | [S15-009](tasks/S15-009.md) | S15 | front | qa | todo | | S14-013, S15-005, S15-006, S15-007, S15-008 | Подключить media menus/errors | | [S15-010](tasks/S15-010.md) | S15 | qa | orchestrator | todo | | S14-013, S15-003, S15-005, S15-006, S15-007, S15-008, S15-009 | Проверить browser media states | | [S15-011](tasks/S15-011.md) | S15 | qa | orchestrator | todo | | S15-001, S15-002, S15-003, S15-004, S15-005, S15-006, S15-007, S15-008, S15-009, S15-010 | Gate: Просмотр медиа | | [S16-001](tasks/S16-001.md) | S16 | media | qa | todo | | S15-011 | Реализовать permission adapter | | [S16-002](tasks/S16-002.md) | S16 | media | qa | todo | | S15-011, S16-001 | Реализовать voice recorder | | [S16-003](tasks/S16-003.md) | S16 | media | qa | todo | | S15-011, S16-001 | Реализовать videoNote recorder | | [S16-004](tasks/S16-004.md) | S16 | media | qa | todo | | S15-011, S16-002, S16-003 | Реализовать early-stop/finalization | | [S16-005](tasks/S16-005.md) | S16 | front | qa | todo | | S15-011, S16-004 | Создать accessible capture controls | | [S16-006](tasks/S16-006.md) | S16 | media | qa | todo | | S15-011 | Реализовать geo URI codec | | [S16-007](tasks/S16-007.md) | S16 | media | qa | todo | | S15-011, S16-001, S16-006 | Реализовать current location adapter | | [S16-008](tasks/S16-008.md) | S16 | front | qa | todo | | S15-011, S16-006, S16-007 | Создать manual location picker | | [S16-009](tasks/S16-009.md) | S16 | security | orchestrator | todo | | S15-011, S16-008 | Проверить maps provider disclosure | | [S16-010](tasks/S16-010.md) | S16 | qa | orchestrator | todo | | S15-011, S16-005, S16-008, S16-009 | Проверить capture/geo flows | | [S16-011](tasks/S16-011.md) | S16 | qa | orchestrator | todo | | S16-001, S16-002, S16-003, S16-004, S16-005, S16-006, S16-007, S16-008, S16-009, S16-010 | Gate: Recording и геопозиция | | [S17-001](tasks/S17-001.md) | S17 | realtime | qa | todo | | S16-011 | Реализовать call state machine | | [S17-002](tasks/S17-002.md) | S17 | realtime | qa | todo | | S16-011, S17-001 | Реализовать full JID selection | | [S17-003](tasks/S17-003.md) | S17 | protocol | qa | todo | | S16-011, S17-002 | Реализовать JMI adapter | | [S17-004](tasks/S17-004.md) | S17 | realtime | qa | todo | | S16-011, S17-001 | Создать WebRTC media adapter | | [S17-005](tasks/S17-005.md) | S17 | realtime | qa | todo | | S16-011, S17-003, S17-004 | Реализовать Jingle/SDP codec | | [S17-006](tasks/S17-006.md) | S17 | protocol | qa | todo | | S16-011 | Реализовать extdisco ICE validation | | [S17-007](tasks/S17-007.md) | S17 | realtime | qa | todo | | S16-011, S17-002, S17-005, S17-006 | Реализовать trickle candidate queues | | [S17-008](tasks/S17-008.md) | S17 | realtime | qa | todo | | S16-011, S17-004 | Реализовать mute/camera/route use cases | | [S17-009](tasks/S17-009.md) | S17 | realtime | qa | todo | | S16-011, S17-001, S17-007 | Реализовать ringing/recovery deadlines | | [S17-010](tasks/S17-010.md) | S17 | realtime | qa | todo | | S16-011, S17-001, S17-009 | Реализовать history outcome policy | | [S17-011](tasks/S17-011.md) | S17 | protocol | qa | todo | | S16-011, S17-010 | Реализовать own-device call history | | [S17-012](tasks/S17-012.md) | S17 | front | qa | todo | | S16-011, S17-008, S17-009, S17-010, S17-011 | Создать CallScene/HistoryCard | | [S17-013](tasks/S17-013.md) | S17 | qa | orchestrator | todo | | S16-011, S17-006, S17-007, S17-009, S17-012 | Проверить NAT/TURN/endpoint scenarios | | [S17-014](tasks/S17-014.md) | S17 | qa | orchestrator | todo | | S17-001, S17-002, S17-003, S17-004, S17-005, S17-006, S17-007, S17-008, S17-009, S17-010, S17-011, S17-012, S17-013 | Gate: Личные звонки | | [S18-001](tasks/S18-001.md) | S18 | backend | security | todo | | S17-014 | Создать gateway service shell | | [S18-002](tasks/S18-002.md) | S18 | backend | security | todo | | S17-014, S18-001 | Реализовать subscription storage | | [S18-003](tasks/S18-003.md) | S18 | backend | security | todo | | S17-014, S18-002 | Реализовать ownership proof | | [S18-004](tasks/S18-004.md) | S18 | backend | security | todo | | S17-014, S18-003 | Реализовать API limits/origin policy | | [S18-005](tasks/S18-005.md) | S18 | backend | security | todo | | S17-014, S18-004 | Реализовать Web Push provider adapter | | [S18-006](tasks/S18-006.md) | S18 | protocol | qa | todo | | S17-014, S18-003, S18-005 | Реализовать XMPP enable/disable | | [S18-007](tasks/S18-007.md) | S18 | front | qa | todo | | S17-014, S18-006 | Создать notification preferences | | [S18-008](tasks/S18-008.md) | S18 | protocol | qa | todo | | S17-014, S18-006 | Реализовать event notification policy | | [S18-009](tasks/S18-009.md) | S18 | front | qa | todo | | S17-014, S18-005, S18-007, S18-008 | Реализовать service worker push | | [S18-010](tasks/S18-010.md) | S18 | front | qa | todo | | S17-014, S18-008, S18-009 | Реализовать safe notification routing | | [S18-011](tasks/S18-011.md) | S18 | protocol | qa | todo | | S17-014 | Реализовать multi-tab leader | | [S18-012](tasks/S18-012.md) | S18 | backend | security | todo | | S17-014, S18-003, S18-005, S18-006 | Реализовать revoke/expiry/rotation | | [S18-013](tasks/S18-013.md) | S18 | security | orchestrator | todo | | S17-014, S18-004, S18-005, S18-009, S18-012 | Проверить gateway secrets/ownership | | [S18-014](tasks/S18-014.md) | S18 | qa | orchestrator | todo | | S17-014, S18-007, S18-008, S18-009, S18-010, S18-011, S18-012, S18-013 | Проверить push/closed-tab matrix | | [S18-015](tasks/S18-015.md) | S18 | qa | security | todo | | S18-001, S18-002, S18-003, S18-004, S18-005, S18-006, S18-007, S18-008, S18-009, S18-010, S18-011, S18-012, S18-013, S18-014 | Gate: Web Push и gateway | | [S19-001](tasks/S19-001.md) | S19 | security | orchestrator | todo | | S18-015 | Реализовать approved lock verifier | | [S19-002](tasks/S19-002.md) | S19 | protocol | qa | todo | | S18-015, S19-001 | Реализовать lock lifecycle | | [S19-003](tasks/S19-003.md) | S19 | front | qa | todo | | S18-015, S19-001, S19-002 | Создать LockScreen | | [S19-004](tasks/S19-004.md) | S19 | protocol | qa | todo | | S18-015, S19-002 | Подключить lock preview policy | | [S19-005](tasks/S19-005.md) | S19 | security | orchestrator | todo | | S18-015 | Проверить XSS/text/URL boundary | | [S19-006](tasks/S19-006.md) | S19 | security | orchestrator | todo | | S18-015 | Проверить logs/evidence redaction | | [S19-007](tasks/S19-007.md) | S19 | security | orchestrator | todo | | S18-015 | Проверить forged own-device events | | [S19-008](tasks/S19-008.md) | S19 | security | orchestrator | todo | | S18-015, S19-003, S19-004 | Проверить erase/export boundaries | | [S19-009](tasks/S19-009.md) | S19 | security | orchestrator | todo | | S18-015, S19-005, S19-006, S19-007 | Проверить resource exhaustion limits | | [S19-010](tasks/S19-010.md) | S19 | qa | orchestrator | todo | | S18-015, S19-003, S19-004, S19-005, S19-006, S19-007, S19-008, S19-009 | Проверить lock/security integration | | [S19-011](tasks/S19-011.md) | S19 | qa | security | todo | | S19-001, S19-002, S19-003, S19-004, S19-005, S19-006, S19-007, S19-008, S19-009, S19-010 | Gate: Lock и security hardening | | [S20-001](tasks/S20-001.md) | S20 | front | qa | todo | | S19-011 | Собрать SettingsView | | [S20-002](tasks/S20-002.md) | S20 | front | qa | todo | | S19-011, S20-001 | Создать ServerInfo | | [S20-003](tasks/S20-003.md) | S20 | protocol | qa | todo | | S19-011 | Реализовать safe diagnostic snapshot | | [S20-004](tasks/S20-004.md) | S20 | front | qa | todo | | S19-011, S20-001 | Подключить typing/privacy toggles | | [S20-005](tasks/S20-005.md) | S20 | front | qa | todo | | S19-011, S20-001 | Подключить own avatar update | | [S20-006](tasks/S20-006.md) | S20 | front | qa | todo | | S19-011, S20-001, S20-002, S20-003 | Показать permission/capability ограничения | | [S20-007](tasks/S20-007.md) | S20 | front | qa | todo | | S19-011, S20-001 | Создать Calls list/search | | [S20-008](tasks/S20-008.md) | S20 | qa | orchestrator | todo | | S19-011, S20-002, S20-003, S20-004, S20-005, S20-006, S20-007 | Проверить settings integration | | [S20-009](tasks/S20-009.md) | S20 | qa | orchestrator | todo | | S20-001, S20-002, S20-003, S20-004, S20-005, S20-006, S20-007, S20-008 | Gate: Настройки и диагностика | | [S21-001](tasks/S21-001.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять accounts/transport/storage | | [S21-002](tasks/S21-002.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять messages/actions/history | | [S21-003](tasks/S21-003.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять crypto/MUC interoperability | | [S21-004](tasks/S21-004.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять media/recording/calls | | [S21-005](tasks/S21-005.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять push/lock/security | | [S21-006](tasks/S21-006.md) | S21 | qa | orchestrator | todo | | S20-009 | Принять UI/accessibility matrix | | [S21-007](tasks/S21-007.md) | S21 | qa | orchestrator | todo | | S20-009 | Измерить принятые performance budgets | | [S21-008](tasks/S21-008.md) | S21 | ci-cd | qa | todo | | S20-009 | Подготовить воспроизводимую test environment | | [S21-009](tasks/S21-009.md) | S21 | ci-cd | qa | todo | | S20-009, S21-008 | Подготовить deploy/rollback pipeline | | [S21-010](tasks/S21-010.md) | S21 | security | orchestrator | todo | | S20-009, S21-001, S21-002, S21-003, S21-004, S21-005, S21-006, S21-007, S21-009 | Проверить release threat/privacy checklist | | [S21-011](tasks/S21-011.md) | S21 | docs | orchestrator | todo | | S20-009, S21-010 | Написать guide и release passport | | [S21-012](tasks/S21-012.md) | S21 | orchestrator | security | todo | | S20-009, S21-001, S21-002, S21-003, S21-004, S21-005, S21-006, S21-007, S21-008, S21-009, S21-010, S21-011 | Согласовать полный Web scope | | [S21-013](tasks/S21-013.md) | S21 | qa | orchestrator | todo | | S21-001, S21-002, S21-003, S21-004, S21-005, S21-006, S21-007, S21-008, S21-009, S21-010, S21-011, S21-012 | Gate: Полная Web-приёмка и поставка |