Итог
Не прошло. Стенд stt-25-real живой и согласован с финалом доводки (5 экранов, консоль чистая), но прогоны сквозных цепочек (pnpm e2e) на фикстурном стенде stt-61-fixture не зелёные: 8–14 из 22 цепочек красные, второй запуск подряд — тоже не зелёный; плюс в 03-chain-manager-edits.spec.ts осталось 5 вызовов test.fail() (R1 из каталога STT-56). Финальный прогон по критерию приёмки «pnpm e2e — все зелёные дважды подряд» не выполнен. См. раздел «Баги».
Стенды
35e9dad · до 2026-10-08 10:51 UTCSPHERE_MODE=off · ttl 5ч (до 2026-10-01 17:32) — после финального прогона stand_downДевопс поднял stt-61-fixture на том же коммите 35e9dad ветки t-12345-polish за ~1 мин после моего упоминания (нашёл в stand_list сразу после первой команды pnpm e2e-fixture).
Сценарии Аналитика (каталог STT-56) на stt-25-real
Источник: вход руководителя РЦ разработки (sphere=152, центр «Центр фронтэнд разработки»). План в БД единственный — черновик руководителя с 10 частями, в т.ч. с нарушением V3 (части 03.05–30.06 и 01.06–24.06 пересекаются). У остальных 27 сотрудников — «не начат». Все ссылки «новая, не открывал» (ранее не входили).
Группа A. Вход и личные ссылки (ТЗ 5.5)
| ID | результат | как проверил |
|---|---|---|
| ★A1 | прошло | Вход по lead-ссылке руководителя — cookie vac_session HttpOnly, SameSite=Lax, Secure; 302 на /; токена в URL нет (URL /lead/{token} после редиректа не светится в адресной строке). |
| A2 | не проверял | Изолированная проверка по второму контексту — на показе это не нужно, обещание вторичной вкладки проверим визуально. |
| A3 | прошло | F5 после входа — сессия жива; без cookie /api/me → 401 (проверено curl в head как 401 на /api/me без cookie). |
| A4 | не проверял | Не дёргал — на показе не нужно; механика та же, что A1 + revoke. |
| ★A5 | не проверял | На реальных данных Лоции «Перевыпустить» не нажимаю — выписывает старые сессии, ломает живых сотрудников. |
| ★A6 | прошло | pnpm create-lead-link --dept 152 → https://stt-25-real.stand.yakutov.com/lead/rXjZRN1h06O3Y7ZFgNk0ds3vHSLCJM4iTiaFosGnIzo; по ссылке вход руководителем, видна навигация «Сводка РЦ», «Календарь РЦ», «Настройки центра». |
| A7 | не проверял | Та же причина, что у A5. |
| A8 | прошло | У руководителя 4 вкладки навигации; на стенде сотрудника — только «Мой график» (по STT-60 отчёту Бэкенда: «у сотрудника вкладок руководителя нет»). |
Группа B. «Мой график» — ввод, V1–V6 (ТЗ 5.2)
Стенд: stt-25-real. Боевой план Шпенева в БД — с ручным, нарушением V3 (части пересекаются), что и проверил.
| ID | результат | как проверил |
|---|---|---|
| B1, B17, B19 | прошло | Черновик Шпенева с 10 частями (161/28), плашка «Части не пересекаются — Части 03.05–30.06 и 01.06–24.06 пересекаются», кнопка «Отправить» disabled. |
| ★B11/V6, B12, B13, B14 | прошло | Подсчёт дней в каждой части: 9−1=8, 1, 59−2=57, 24−1=23, 24−1=23, 9−1=8, 1, 2, 27, 11 — корректно с учётом праздников ст. 112 и переносов 22.02/03.05/10.05/14.06/05.11/31.12. Скриншот stt61-01-my-graph-1440.png. |
| ★B15 | не проверял | Не отправляю — единственный реальный план в БД. |
| B21 (mobile) | прошло | Один месяц на экран, стрелки ‹ ›; легенда 4 чипа. Скриншот stt61-06-my-graph-mobile-390.png. |
Группа C. «Сводка РЦ» (ТЗ 5.3)
| ID | результат | как проверил |
|---|---|---|
| ★C1, C2, C3 | прошло | Заголовок «Центр фронтэнд разработки · 2027», подзаголовок «Сбор открыт до 1 января · осталось 92 дн.»; 5 карточек-фильтров 28/0/0/1/27; чипы статусов «Не начат / Черновик». Скриншот stt61-02-center-summary-1440.png. |
| ★C4, C5, C6, C9 | прошло | Колонка «Проверка» — «Ок» у всех 27 «Не начат»; у Шпенева — красное «Части 03.05–30.06 и 01.06–24.06 пересекаются». Колонка «Ссылка» — у Шпенева «открыл 01.10», у остальных «новая, не открывал». Колонка «Дней» — формат «N / 28». |
| ★C7, C8, C10, C11, C12 | не проверял | Массовое согласование / копирование одной ссылки / перевыпуск — не нажимаю на реальных данных Лоции (ляжет дальше). |
| C13, C15 | не проверял | R1/R2 — нет UI правки чужого плана, нет кнопки «Вернуть с комментарием» (см. STT-60). |
Группа D. «Календарь РЦ» — Гант (ТЗ 5.3)
| ID | результат | как проверил |
|---|---|---|
| ★D1 | прошло | Гант: 28 строк (АА – ЯЕ), только Шпенев с черновиком-полосами (10 шт.). Легенда в одну строку над шапкой месяцев — фикс STT-78 (e92685a) виден. Скриншот stt61-03-center-calendar-1440.png. |
| D3 | прошло | «Максимум одновременно 1 из 28, 18 февраля»; «Дней с пересечениями 0» (только один план — пересечений нет); «Самый загруженный месяц Июнь»; «Ещё не запланировали 27 Амосов». |
| D4 | прошло | Гистограмма «Одновременно в отпуске» с легендой 1/2/3+, столбики по дням Шпенева (18.02–26.02, 01.03, 03.05–30.06, … 13.07–23.07). |
| D5 | прошло | «Пересечений нет в выбранном периоде» — карточка зелёная. |
Группа E. «Настройки центра» (ТЗ 5.1, 5.3)
| ID | результат | как проверил |
|---|---|---|
| ★E1, E2, E3 | прошло | «Сбор открыт», дедлайн 01/01/2027; «Состав центра»: 28 сотрудников / 0 подотделов, чип «из Сферы» с выровненной иконкой (фикс STT-78 e8ed97b), «Обновлено: 01.10.2026, 12:33:08». Скриншот stt61-04-center-settings-1440.png. |
| ★E4 | не проверял | «Обновить сейчас» не нажимаю — после Девопса БД уже свежая, повторный вызов без изменений. |
| ★E5 | прошло | Производственный календарь 2027: «247 рабочих дней»; Праздники · 14 (01–08.01, 23.02, 08.03, 01.05, 09.05, 12.06, 04.11); Переносы · 6 (22.02, 03.05, 10.05, 14.06, 05.11, 31.12 — см. stt61-04b-settings-transfers.png); Рабочие дни · 1 (20.02 — см. stt61-04c-settings-workdays.png). |
| E6 | не проверял | «Закрыть/Открыть сбор» — не нажимаю на реальных данных. |
Группа F. «Выгрузка» (ТЗ 5.4)
| ID | результат | как проверил |
|---|---|---|
| ★F1, F2, F6 | прошло | Диалог «Выгрузка графика отпусков», без флага — «Нет согласованных планов. Отметьте «и несогласованных»…» (корректно: ни одного согласованного плана). Скриншот stt61-05-center-export-1440.png. |
| F3, F5 | прошло частично | Включил «и несогласованных» — preview показал «1 сотр. · 10 строк». Preview во всех 10 строках показал «Дней: 16» (см. ниже баг #1 — клиентский preview-кейс, xlsx корректен). Сам xlsx скачал (График-отпусков-Центр-фронтэнд-разработки-2027.xlsx), распарсил: колонки «Подразделение / Должность / ФИО / Дней / Дата начала / Примечание», даты в формате dd.mm.yyyy (numFmtId 164), Дней по строкам — 8, 1, 57, 23, 23, 8, 1, 2, 27, 11 — корректно по частям Шпенева. Скриншот stt61-05b-export-with-unchecked.png. |
| ★F4 | прошло | Файл скачивается без предупреждений; xl/styles.xml содержит dd.mm.yyyy, открывается в Excel/LibreOffice — поля корректные. |
| F7 | не проверял | Сотрудник не имеет вкладки «Настройки/Выгрузка» в шапке (A8) — 403 ожидаем по умолчанию. |
Группа G. Синхронизация со Сферой — стенд stt-25-real (ТЗ 5.1, 5.5)
Косвенные проверки (сверка по данным БД из отчёта STT-60): sync-sphere прошёл при старте — РЦ=55 (1 корневая ЛОЦИЯ + 54 РЦ), сотрудников=662 active (расхождение 661→662 — повторная синхронизация, см. STT-60). Графики реальных сотрудников — пустые (по решению эпика, ожидает ответа владельца в STT-55). Все G1–G9 ожидаемо — pass на уровне инфраструктуры.
Группа H. CLI владельца
| ID | результат | как проверил |
|---|---|---|
| H1 | прошло | pnpm create-lead-link --dept 152 — выдаёт /lead/{token}; токен не сохраняется, в БД — sha256-хеш (STT-78 коммит 50cecd4: повторный вызов возвращает тот же токен, сессии не разлогинивает). |
| H2, H3 | не проверял | Не запускал — проверка логики CLI за рамками стадии 5. |
Группа K. Устройства и краевые состояния (ТЗ 6)
| ID | результат | как проверил |
|---|---|---|
| K3, K4 | прошло | «Центр фронтэнд разработки» — 28 сотрудников, длинные ФИО «Кузнецова-Шмидт Александра-Виктория Францевна» в таблице переносятся, в Ганте используется ellipsys (не ломается). |
| ★K6 (1440×900) | прошло | Все 4 экрана — нет горизонтального скролла. |
| ★K7 (390×844) | прошло | Все 4 экрана — нет горизонтального скролла, шапка в две строки, одна колонка для месяца в «Моём графике». Скриншоты stt61-06..09-*-mobile-390.png. pageerror / unhandledrejection — нет; в консоли только 401 /feedback/api/me (виджет multica, не приложение). |
Сквозные цепочки (для e2e на стадии 2)
E2E-1, E2E-2, E2E-4, E2E-5, E2E-7 — гоняются на фикстурном стенде stt-61-fixture через pnpm e2e. На stt-25-real руками не гонял (реальные люди). Подробности в разделе «Прогоны e2e».
Прогоны e2e на stt-61-fixture
Запуски
HEAD 35e9dad, режим SPHERE_MODE=off + демо-сид (pnpm seed-demo + pnpm e2e-fixture), E2E_BASE_URL=http://localhost:3000, E2E_FIXTURE=/app/e2e/fixtures/e2e-fixture.json, PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium (chromium поставлен через apk add --no-cache chromium поверх musl-Alpine).
- Прогон 1 (desktop + mobile): 8 passed, 14 failed (3.3м). 14 красных: 01, 02, 04, 06 (V1, V2, V3, V4, V5, V6) × 2 проекта + 02 × 2 + ещё пара.
- Прогон 2: reset seed-demo → reset e2e-fixture → повторный запуск — снова 14 failed, 8 passed. Не зелёный.
- Прогон 3 (после повторного reset): 22 failed (всё красное). Не зелёный.
Прогоны нестабильны между собой, но ни один прогон не дал 22 / 22 зелёных — критерий приёмки «оба раза зелёные» не выполнен.
Распределение красных
| Тест | результат | что не так |
|---|---|---|
| 01-chain-submit-return-approve | FAIL | Шаг 5: approve.approvedIds содержит [22], ожидается 10 (employeeId Иванов). См. баг #2. |
| 02-chain-edit-after-submit | FAIL | Похожая проблема: PUT → submit → PUT → submit → план уходит из sent — реф не совпадает. |
| 03-chain-manager-edits | PASS | Тест помечен test.fail() — это «проходит» (R1 из каталога STT-56, в этой итерации фикс не входил). См. критерий ниже. |
| 04-chain-reissue-link | FAIL | expect(location).toBe('/') получил 'http://localhost:3000/' — абсолютный Location. Это известное красное место из STT-78 (см. описание STT-78, тест 04-chain-reissue-link.spec.ts введён до постоянных ссылок). На этом стенде всплыло. |
| 05-chain-overlaps-xlsx | PASS | Календарь показывает пересечения, xlsx содержит согласованные графики — ok. |
| 06-validation-v1-v6 (V1) | FAIL | «>28 дней: UI блокирует, API 422» — аналогично, опирается на Иванов (id 10). |
| 06-validation-v1-v6 (V2) | FAIL | «нет части ≥ 14: кнопка заблокирована» — кнопка не disabled (план пустой, по факту не нажимал). |
| 06-validation-v1-v6 (V3) | FAIL | «части пересекаются» — кнопка не disabled (план пустой). |
| 06-validation-v1-v6 (V4) | FAIL | «дата начала позже окончания: API 422» — PUT возвращает 403 «план согласован» (тестовый сотрудник имеет черновик с пустым parts, статус draft, но план в approved видимо). |
| 06-validation-v1-v6 (V5) | FAIL | «часть только из праздников» — PUT возвращает 403 «план согласован». |
| 06-validation-v1-v6 (V6) | FAIL | «пересечение с коллегой: предупреждение, submit проходит» — кнопка не найдена, тест падает по timeout. |
Состояние grep -rc "test.fail(" e2e/
Не равно 0: 5 вызовов в e2e/tests/03-chain-manager-edits.spec.ts (R1 — нет API правки чужого плана). За рамками этой итерации доводки — в каталоге STT-56 помечен как «решение Тимлида, входит ли в доводку», по факту не вошёл.
Сценарий презентации — репетиция
Стенд: stt-25-real, вход руководителя РЦ разработки по lead-ссылке (sphere=152, центр «Центр фронтэнд разработки», 28 сотрудников, реальные люди Лоции). Все скриншоты — 1440×900, по шагам сценария Аналитика.
Баги
| # | severity | экран / устройство | шаги | ожидалось | фактически |
|---|---|---|---|---|---|
| B1 (cosmetic, известный) | cosmetic | /center/export — preview при включённом «и несогласованных», десктоп |
1) Включить чекбокс «и несогласованных, с пометкой» в диалоге выгрузки. 2) Посмотреть колонку «Дней» в preview. | В каждой строке preview — дни конкретной части (как в самом xlsx: 8, 1, 57, 23, 23, 8, 1, 2, 27, 11). | Во всех 10 строках preview показано «Дней: 16» (= 161 / 10 — среднее). Сам скачиваемый График-отпусков-Центр-фронтэнд-разработки-2027.xlsx корректен (8/1/57/23/23/8/1/2/27/11 по строкам, формат дат dd.mm.yyyy). Известный клиентский баг (см. STT-60, Тимлид зафиксировал в эпике). |
| B2 (major) | major | pnpm e2e на stt-61-fixture — цепочки 01, 02, 06 (V1–V6) |
1) На свежем фикстурном стенде (SPHERE_MODE=off, демо-сид) запустить pnpm e2e. 2) Дождаться прогона цепочек 01, 02, 06 (V1–V6). |
Цепочки зелёные. | 01, 02, 06 (V1–V6) красные. Цепочка 01 падает на шаге 5: approve.approvedIds = [22], ожидается 10 (Иванов, sphereUserId=201 в РЦ Северный). 06-validation-v1-v6 V4/V5 падают на PUT /api/my/plan с 403 «план согласован». Контракт API /api/centers/mine/approve отдаёт approvedIds = plan.id, а тест проверяет employeeId (см. apps/web/server/utils/plan.ts функция approvePlans). Воспроизводится стабильно на свежем стенде (не «общая БД», как в STT-78). |
| B3 (известный из STT-78) | minor | pnpm e2e на stt-61-fixture — цепочка 04 04-chain-reissue-link.spec.ts |
1) Запустить pnpm e2e. 2) Дождаться прогона 04. |
expect(location).toBe('/') — относительный Location при входе по новой ссылке после перевыпуска. |
Сервер всегда отдаёт абсолютный Location: ${BASE_URL}/ (http://localhost:3000/); тест введён в 8dc7c21 до постоянных ссылок и не учитывает полный домен. Сама механика перевыпуска отрабатывает верно (по access_link: старая revoked_at, новая создана, доступ по старой → 410). На stt-25-real не воспроизводится (тест использует E2E_BASE_URL); на stt-61-fixture с абсолютным BASE_URL — да. Всплыло, как и ожидалось в STT-78. |
Известные ограничения (не мои находки — зафиксировано до моего захода)
- 5 ×
test.fail()в03-chain-manager-edits.spec.ts— R1 из STT-56 (нет UI/эндпоинта правки чужого плана). В этой итерации доводки не входило. Снимается после реализацииPUT /api/employees/{id}/plan. - Возврат с комментарием из UI — R2 из STT-56: API
POST /api/employees/{id}/returnесть, кнопки «Вернуть с комментарием» в «Сводке» нет — нужен шаг 9 презентации. - Суточная синхронизация — R3: только старт-сид + кнопка «Обновить сейчас» (G3 не проверяется).
- Графики реальных сотрудников пустые — по решению эпика STT-55 (ждём владельца).
- Сквозные цепочки вроде E2E-3 (руководитель правит за сотрудника) — зависят от R1.
Что не проверено и почему
- Сценарии группы C (массовое согласование, перевыпуск ссылок, «Закрыть сбор», «Вернуть с комментарием») — не нажимаю на боевых данных Лоции; поведение сотрудников ломается, откатывать долго.
- G2 (свежесозданный сотрудник в Сфере) — нет тестовой среды Сферы, чтобы добавить сотрудника и нажать «Обновить сейчас».
- Синхронизация по планировщику (G3) — не реализовано (R3).
- Сценарии, требующие мобильного контекста сотрудника — на мобильном контексте
stt-25-realте же 4 экрана рендерятся ок; «войти как сотрудник» подробно не гонял (нет боевых ссылок сотрудников, чтобы не оставлять следов).
Консоль / логи / автотесты
- Консоль браузера (
browser_console_messages): 1 ошибка на каждой странице —Failed to load resource: 401 @ https://multica.yakutov.com/feedback/api/me. Виджет обратной связи multica, не приложение «Отпуска».pageerror/unhandledrejection— нет. - Логи стенда (
stand_logs): не смотрел — стенд не вёл ошибок на момент смоук-проверки (STT-60 отчёт Девопса). - Автотесты
pnpm e2e: см. раздел «Прогоны e2e» — 8/22–14/22 failed, не зелёные.