DEV: ролевой виджет аналитики на странице программы - #348
Draft
TThanos3000 wants to merge 3 commits into
Draft
TThanos3000 wants to merge 3 commits into
TThanos3000 wants to merge 3 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Заглушка «аналитика» на странице программы заменена отдельным ролевым Angular-виджетом с безопасным read-only backend-контрактом. Исправлена регрессия: организатор без member-роли теперь загружает и видит существующие и созданные им новости. Переработана внутренняя композиция карточки: служебные подписи и полный срок эксперта помещаются при прежних внешних размерах.
Продолжение существующего Draft PR, только DEV. Без merge, deploy и действий с PROD.
SHA и зависимость
99c8813a66f89560a946eab7d1de73ab2925d0f5c97eb8b61c4982b23dbae743104d5b1de71dedef239e3a5eafe653291daf95930ecac9824314f365.f9ee3c397acf0fc6ed643246b44760fa82705313; follow-up добавлен обычным коммитом.ed5244bd4a098bd0f1cee0f5e380dd67bdd61a96, head3d84c7f4090985e4f42a13654e8fb05856f65cb3./programs/{id}/analytics-widget/иis_user_expert, затем этот Angular. Миграций нет.Поведение и границы
participant_projectчерез Project.leader / Collaborator / PartnerProgramProject текущей программы, точный системныйname="case"и серверный этап. Лидер и член команды видят один проект. Текущая «Проверка» без галочки; серверный evaluated завершает все три этапа.Доработка композиции
Заголовок и вторичный бейдж разведены по горизонтали. Подписи метрик 10 px, значения 14 px полужирные, отдельная зона нижнего действия. Кейс и проект оформлены двумя строками, этапы соединены тонкой линией. Только динамические названия сокращаются многоточием с hover/focus tooltip.
Организатор: «Сдано решений» с контролируемым переносом, выровненные числа; компактная цветная точка и процент возле «Без проектов».
Эксперт: ровно два счётчика и один статусный блок. «До конца оценивания» + полные «2 дня», «5 часов», «25 минут» на второй строке. Нет ellipsis служебных статусов, срока и единиц времени.
Геометрия и скриншоты
Viewport 1280 × 1000, DPR 1, scale 1, Mont загружен: карточка 157 × 140,984375 CSS px, x/y 285,828125 / 262,59375, как на DEV-базе. «О программе» также не сдвинут. Все 23 состояния, Retry и границы 1000/1440 совпали с baseline; при 1000 карточка скрыта по прежнему правилу.
Полные страницы при 100%, кропы без масштабирования, hover/focus, все состояния и измерения.
Кропы 158 × 143 физических px охватывают дробную CSS-рамку; изображения не масштабировались.
Окончательные проверки
99c8813…: 361 файл / 1489 тестов прошли, та же ошибка, exit 1. В обоих случаяхwindow is not definedиз ngx-autosize после teardown. Node 24.18.0, npm 11.16.0, Vitest 3.2.6, ngx-autosize 2.0.4, один node_modules, одинаковая команда. Точный head stack, base stack. Ошибка подтверждена без изменений PR; не подавлялась.npm run lint:ts: 0 ошибок / 6 предупреждений.git diff --check: PASS.npm run build:pr: PASS, Angular strict compilation; Sass deprecation warnings. Генерируемый Windows sprite не включён в diff.3d84c7f…. Локальные PostgreSQL/SQLite/mypy ограничения отдельно сохранены в backend PR.stylelint --fixне запускался; scoped проверки выполнены явно, посторонние файлы не форматировались.Реальная локальная интеграция и ограничения
На отдельной PostgreSQL 18 БД, без DEV/PROD данных, проверены реальные Angular + Django: организатор без member видит старую и созданную через форму новость; лидер и член команды видят одинаковый проект/case; рабочие переходы проекта, аналитики, оценивания; сохранение нового case, сдача и допустимая оценка 0 через существующие формы; итог «Оценён»; нулевые состояния; logout и смена программы; посторонний пользователь без внутренних данных. Временный локальный HTTP 503 проверил ошибку и восстановление кнопкой «Повторить» с неизменным rect.
Сценарии, скриншоты и фактические ограничения интеграции. Живой DEV не проверялся. Последующая диагностика на точном base/head установила причину фонового PUT /projects/NaN/: root ActivatedRoute в cleanup-autosave. На обоих вариантах удаление презентации не сохраняется даже после сообщения об успехе. Это отдельный существующий дефект редактора P1; новый вход виджета его не усиливает. Подробности и отдельная задача ниже. Пограничные комбинации и обновление EventBus без навигации покрыты автоматическими тестами, не все повторены в браузере.
Источники данных и архитектура. Полный отчёт доработки и команды.
Диагностика PUT /projects/NaN/ — 14.09.2026
Angular base
99c8813a66f89560a946eab7d1de73ab2925d0f5, проверенный код head239e3a5eafe653291daf95930ecac9824314f365, итоговый head с документациейc97eb8b61c4982b23dbae743104d5b1de71dedef; backend в обоих прогонах3d84c7f4090985e4f42a13654e8fb05856f65cb3.Семь прогонов на локальных Angular + Django и отдельной PostgreSQL БД, одинаковые Node/dependencies и восстановленные синтетические данные, 10-секундные окна наблюдения, 23 повторных чтения API. На head проверены вход из виджета и существующий путь; на точном base — существующий путь.
Причина: root ProjectFormAutosaveService читает params["projectId"] из root ActivatedRoute (params={}), хотя ID 31 есть на leaf-маршруте; Number(undefined) становится NaN. Начальный patchValue пустого файлового поля запускает cleanup-autosave. При удалении файла запускается тот же ошибочный PUT. Он возникает до ProgramWidgetChanged и повторяется на base без нового виджета. После destroy в контрольных окнах новых PUT не было.
Обычное непустое название и case текущей связи 73 сохраняются явной кнопкой на base/head. Удаление презентации не сохраняется: файл удалён, URL проекта остаётся прежним; после повторного открытия UI показывает «Файл успешно загружен». Явный save тоже не очищает URL: stripNullish исключает пустую строку из payload, PUT /projects/31/ возвращает 200 и UI показывает «данные успешно сохранены». Подтверждено API-readback и содержимым запросов на обеих версиях.
Отдельная задача P1, препятствие для дальнейшего релиза редактора. В проверенных сценариях это существующий дефект, не регрессия #348; редактор в рамках виджета не ремонтировался. Описание задачи, полная диагностика, initiator/stack, маршруты, payload и скриншоты, машиночитаемые evidence.
Production-код не менялся; повторные full suite/lint:ts/production build не требовались и не запускались. Две diagnostic development-сборки PASS; проверка логов, scoped Prettier документов и git diff --check PASS. Прежний full suite с ngx-autosize teardown не объявляется успешным. Внешний CDN заменён только локальным тестовым storage; живые DEV/PROD/CDN не проверялись. Backend production-файлы и SHA неизменны. Оба PR остаются Draft → dev, без merge/deploy.