Skip to content

White label пилот: регистрация, веса и общий рейтинг - #861

Open
TThanos3000 wants to merge 23 commits into
devfrom
codex/white-label-foundation-20261110
Open

TThanos3000 wants to merge 23 commits into
devfrom
codex/white-label-foundation-20261110

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Изолированный white label поддерживает бренд клиента, короткую регистрацию по почте/паролю, участие после подтверждения, приглашение по полной почте и процентные веса критериев кейса. Добавлена серверная часть общего командного рейтинга: кейс из 100 + квиз из 100 = итог из 200, без коэффициентов этапов.

Общий рейтинг установлен на https://pilot.procollab.ru и принят по HTTPS/API и в браузере 13 ноября: runtime 3c21fbc, Angular 3241381e, tooling 7a8e6c6. Владелец выполнил SSH check/apply/status, отдельная проверка подтвердила работу UI/API/admin и сохранность данных. Сам квиз остается отдельной задачей после согласования его дизайна.

Зачем

Подготовить кейс-чемпионат с единым итогом команды и сохранить данные существующего пилота, dev и prod. Spec и O01–O11, white label, веса W01–W10. Связанный Angular: PROCOLLAB-github/procollab#540. Общая функция весов отдельно выделена в API #862 / Angular #541.

Реализация

  • Выключенный по умолчанию режим экземпляра: проверенные brand/origin/program, native signup/confirm, локальные файлы, свои cookies. Участие появляется после email proof; согласия и дедлайны сохраняются. Scoped lookup полной почты ограничен контекстом своей white label программы.
  • Общий Decimal-расчет процентных критериев, сумма 100%, итог кейса 0–100; настройки фиксируются первой оценкой. Прежние программы остаются legacy, старый PUT сохраняет неизвестные ему веса. Django admin использует тот же пакетный редактор и проверки.
  • Новый overall service берет официальный кейс из существующего results_data и прибавляет окончательный нормализованный квиз. Незавершенный этап дает null итога/места; настоящий 0 участвует в рейтинге. Места общие для программы, равенство 1,1,3, поиск их не меняет. Legacy не нормализуется скрыто.
  • ProgramQuizOutcome относится к паре программа × проект, сохраняется при unlink/rejoin. Внутренний record_quiz_outcome использует существующий порядок lock_team, идемпотентен и отклоняет другую попытку/балл. Диапазон и уникальность дополнительно защищены PostgreSQL. Публичного ввода баллов нет.
  • Общий рейтинг, GET-фильтры и XLSX дублированы в Django admin через те же services; результат квиза только для чтения. Выгрузка: Arial 10, белый фон, жирная шапка, freeze A2; формула суммы только у готовых команд, имена записаны как безопасный текст.
  • Исторические pilot updater сохраняют backup и изоляцию ресурсов; auth updater публикует только статику, канонизирует порядок Docker Mounts, сохраняя порядок Env. Для общего рейтинга добавлены отдельные package_overall.py/upgrade_overall.py: точные runtime/frontend fingerprints, проверенный backup, только CreateModel 0045 и стандартные права, сохранение env/image/лимитов/data и прежних readonly overlays. Меняется только web v2 и 5 frontend файлов; dev/старый пилот/PG/nginx сохраняются. Ошибка/прерывание возвращают прежний контейнер/UI без pg_restore/drop. Порядок уникальных env ключей при замене допускается, строгий fingerprint текущего контейнера сохранен.

API

Добавлены GET /programs/{id}/management/overall-results/ и /export/: максимумы 100/100/200, готовность этапов, баллы, глобальное место, статусы ожидания, счетчик экспертов, поиск/кейс/статус/порядок и scope экспорта. Только конкурсный legacy_project; ProgramSolution и неконкурсные программы получают 409. Ответ не содержит почт экспертов или ID попытки, private/no-store.

Существующие URL, оценочные payload и case results сохраняются. Ранее добавленные scoring_mode/weight_percent/contributions и C00 1.22.0 не меняются этим дополнением.

UI

Согласованный экран реализован в Angular #540 (3241381e): отдельный пункт оценивания, server-owned баллы/места, ожидание, поиск/статус в URL, Excel и responsive состояния. 108 профильных tests, 72 повторные component/management проверки, pilot/production builds и 13 настоящих локальных browser сценариев прошли. O11 PASS. Старые case results сохраняются, экран квиза не меняется.

В Django admin доступны тот же рейтинг/фильтры/Excel и readonly результат квиза. Новые тестовые данные на живом пилоте не создавались.

Permissions

Сервер проверяет manager своей программы либо staff; admin дополнительно требует модельные права. Участник, эксперт, гость и чужой manager не получают общий рейтинг/export. Нет POST/PUT для записи баллов, admin не разрешает добавлять/менять/удалять итог квиза.

Проверки

  • Живой пилот, 13 ноября: 10 HTTPS/API, 11 Chromium и 3 cleanup checks PASS. Все 5 измененных frontend файлов совпали по SHA256, organizer-only API/export, поиск/статусы и API/admin XLSX; запрет гостю/участнику/эксперту, старая команда/сдача/оба PDF, критерии и dev сохранены. Ошибок JS нет. UI и настоящие данные не подменялись; внешние placeholder картинки блокировались.
  • Владелец: apply/status active дважды, БД procollab_white_label_pilot_v2 сохранена, nginx_changed=false, dev_http=200. Backup: backup/overall-d572cb63a116. ZIP удален через QA owner API (204 → 404); release/backup не затрагивались, временные credentials удалены.
  • Backend PostgreSQL CI, pilot package/runtime image для tooling 7a8e6c6 завершились успешно (run 43295152453 / 43295152765 / 43295152429); следующие коммиты меняют только документацию приемки.
  • Backend PostgreSQL CI для runtime 515862c завершился успешно: https://github.com/PROCOLLAB-github/api/actions/runs/43258706273. Pilot package, pilot runtime image и Backend Docker image также успешны; последующие API изменения только audit/pin.
  • Общий рейтинг: 77 backend tests на отдельном PostgreSQL 15 / Django 5.2.18 — новый API/сервис, гонки, management results/criteria и weighted regressions. После уточнения admin отдельно повторены 2 затронутые проверки.
  • Миграция 0044 → 0045 на свежей изолированной БД: ровно одна новая таблица, прежний case snapshot/оценки/программы/сдача сохранены, новая таблица пустая. SQL только CREATE TABLE/constraints/FK/indexes.
  • 6 локальных HTTP/Chromium сценариев с настоящим API/БД: login, 200/0/pending, запрет чужого/гостевого доступа и записи, XLSX, admin/фильтр/скачивание/readonly. Ошибок JS и внешних запросов нет.
  • Реальные API/admin XLSX проверены openpyxl: числа, места, формулы, фильтр, ноль и оформление. Native Excel engine не запускался.
  • Scoped Black/Flake8, migration consistency, staged diff check.
  • Установщик: 68 lifecycle/migration/package/rollback и прежних deploy regression tests. Дрейф, чужие ресурсы, отрицательные планы, отказ API/публикации, прерывание и ошибка журнала покрыты.
  • Реальный PostgreSQL 15 с несуперпользовательской ролью: только 0045, новая таблица пустая, case 85/100 сохранен, стандартные 4 permissions, повтор с пустым планом; настоящий старый API 7657082 работает с сохраненной схемой.
  • Реальный disposable Docker: сохранение image/env/ресурсов/данных/overlays и возврат старого ID/config/UI/HTTP после отказа; независимые контейнеры PG/sentinel сохранены. Для механики контейнеров использован локальный nginx, не боевой Django image.
  • Финальный microbundle: 11 runtime + 5 frontend файлов + 6 helpers, 588153 байта; реальный production unpacker roundtrip, все hashes и точная проверенная frontend сборка. Credentials в архиве отсутствуют. Checked by build, не установка.
  • Readonly HTTPS baseline: старый index 75f41a5, программа 1, отдельный gate, вход/выход своего QA owner, dev 200. Настройки чемпионата не менялись.
  • Предыдущая приемка установленного auth frontend 75f41a5d на source 7657082: 8 HTTPS / 11 Chromium / 3 cleanup checks; actual assets, login/logout/repeat/deep link/mobile, dev 200. Auth ZIP удален owner API 204 → 404, команда/сдача/PDF и backup сохранены.
  • Предыдущие проверки foundation/весов: 266 backend tests, после DB-default fix 235 weighted/management tests; migration regression, pilot build + настоящий локальный API/экспертный UI и расчет 79,75. Updater/package tests и живой readonly smoke описаны в связанных specs/deploy README.

Acceptance criteria

  • White label/приглашения и W01–W10 весов — implementation и evidence в specs; пилот обновлен до runtime 3c21fbc / frontend 3241381e.
  • O01–O10 серверной части общего рейтинга — audit по каждому критерию в spec.
  • O11 — владелец подтвердил макет, Angular Добавлена ручка для вывода проектов участвующих в партнёрских программах  #540 реализован; tests/build/13 Chromium сценариев с настоящими API/БД прошли.
  • D01–D07 — безопасный точечный installer; audit и ограничения в spec.
  • Установка общего рейтинга на пилот и HTTPS/browser приемка текущего состояния.
  • Интеграция с настоящим квизом — отдельная задача после его дизайна.

Не проверено

Настоящий квиз и завершенные боевые итоги на пилоте, dev/prod deployment, native Excel пересчет, SMTP, нагрузка 100 участников и приемка клиента. На живом пилоте не создавались тестовые результаты и не менялись критерии. Демо-почта остается локальной. Скриншоты и QA credentials не входят в Git.

Риски / migration

Полный новый pilot package закреплен на проверенном Angular 3241381ea2d2ba9fc9bc5139df543c7a0730814c. Package unit tests прошли. Этот pin не является обновлением действующего стенда.

Для общего рейтинга: совместимый backend → добавочная partner_programs 0045 → согласованный Angular. Живой пилот обновлен с source 7657082/auth UI 75f41a5d на runtime 3c21fbc/Angular 3241381e. Исторический upgrade_weights.py разрешает только две миграции весов и для нового рейтинга не подходит. Отдельный проверенный пакет/rollback подготовлен в tooling 7a8e6c6: runtime 3c21fbc + Angular 3241381e, строгая база 7657082/75f41a5. SSH check/apply/status выполнил владелец; агент подтвердил опубликованные HTTPS UI/API и cleanup. Доступа SSH из Cloud не использовалось. Новую таблицу при откате приложения сохраняют; автоматического pg_restore или удаления данных нет.

Foundation/веса требуют своих двух добавочных миграций и явного выбора критериев до первой оценки. Этот PR не выполняет merge или установку на dev/prod. Сервер, пользовательский экран и пилотный installer готовы к review в dev с соблюдением порядка установки; ни dev, ни prod этим PR не обновлялись. Пилот принят в текущей конфигурации. В программе пока только текстовый «Комментарий» и legacy: UI корректно предлагает числовые критерии с весами 100% и отключает Angular Excel, API/admin оставляют отсутствующие итоги/места пустыми. Для рабочего подсчета нужны согласованные критерии/веса и настоящий квиз; настройки не менялись.

@TThanos3000 TThanos3000 changed the title White label: конфигурация экземпляра и короткая регистрация в программу White label: короткая регистрация и подготовка закрытого клиентского пилота Nov 10, 2026
@TThanos3000 TThanos3000 changed the title White label: короткая регистрация и подготовка закрытого клиентского пилота White label: короткая регистрация и изолированная подготовка клиентского пилота Nov 10, 2026
@TThanos3000 TThanos3000 changed the title White label: короткая регистрация и изолированная подготовка клиентского пилота White label: короткая регистрация, приглашения по почте и изолированный пилот Nov 11, 2026
@TThanos3000 TThanos3000 changed the title White label: короткая регистрация, приглашения по почте и изолированный пилот White label пилот: регистрация, команды и процентные веса критериев Nov 11, 2026
@TThanos3000 TThanos3000 changed the title White label пилот: регистрация, команды и процентные веса критериев White label пилот: регистрация, веса и обновление входа без рестартов Nov 12, 2026
@TThanos3000 TThanos3000 changed the title White label пилот: регистрация, веса и обновление входа без рестартов White label пилот: регистрация, веса и API общего рейтинга Nov 12, 2026
@TThanos3000 TThanos3000 changed the title White label пилот: регистрация, веса и API общего рейтинга White label пилот: регистрация, веса и общий рейтинг Nov 12, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant