Релизы
История релизов и изменений платформы Edvance.
Фронтенд
Features
- rename Learning tab and restrict enrollments to admins
- complete GDPR settings UI — i18n, API helpers, unit tests
- hide Delete Account for super-admin in settings SecurityTab
- overhaul privacy policy page — i18n, GDPR Art.13/14 compliance
- GDPR cookie consent banner and privacy policy page (EDV-392, EDV-395)
- add separate tests CI job with coverage badge
- add generate:api:schema script using committed openapi.json (EDV-381)
- show enrollment cap in schedule event details dialog
- teacher workload panel + school holiday calendar UI
- mobile list view for schedule, student progress overview, TODO updates
- mark event completed with attendee count, booking tab placeholder
- student availability and busy windows UI in StudentTab
- show student conflict warnings after reschedule
- export schedule as .ics (iCalendar)
- drag-to-reschedule on schedule grid + teacher canEdit for own flows
- schedule multi-select filters (teacher, course, flow)
- schedule event dialog — past guard, quick links, student count
- schedule calendar visual — course colors, flow stripes, auto-fit hours
- add student_count field to TenantScheduleEvent type
- unify schedule source of truth (EDV-377)
- editable schedule events on /dashboard/schedule (EDV-339)
- school scheduling page, teacher availability and feature flag (EDV-339)
- lesson recordings list, save-now button and docs (EDV-112)
Bug Fixes
- prettier locale files and add GDPR Art. 20 export info dialog
- apply Prettier formatting to test and source files
- set coverage thresholds to current baseline (not EDV-377 targets)
- add msw dep, fix tsc errors, update pnpm allowBuilds
- rewrite linters.yml to use corepack and frozen-lockfile
- format test files, migrate to pnpm v11, fix linters workflow
- format pnpm-workspace.yaml via prettier
- replace onlyBuiltDependencies with allowBuilds for pnpm v11
- restore coverage badges, migrate to pnpm v11
- pin pnpm to v10 via packageManager and use corepack in CI
- allow build scripts for parcel/watcher, swc/core, canvas in pnpm
- move pnpm overrides to pnpm-workspace.yaml (pnpm v10+ compat)
- add pnpm.overrides to package.json and regenerate lockfile
- use --no-frozen-lockfile to handle pnpm overrides mismatch
- simplify Tests workflow — remove coverage and badge steps
- convert coverage badge script to ESM to pass eslint no-require-imports
- apply prettier formatting to 8 source files
- align test payloads with actual API types
- schedule calendar UX — parallel slots, filters, scroll, i18n
- inline links + student modal in EventDetailsDialog, drag past events for admins, UUID in unavailability cards, missing i18n keys
- i18n colour legend in schedule page — replace hardcoded Russian text with t() keys
- suppress pre-existing any warnings and remove unused variable in users page
- show admin seat usage in school-admin toggle
- correct school-admin flag hint text in all 7 locales
- show school-admin toggle only for admin-role users
- resolve enrollment names and refresh after enroll-in-group
- add teacher profile links to schedule dialog, show reschedule form inline for future events
- remove mark-as-completed from schedule dialog, replace window.confirm with AlertDialog, fix settings tabs visibility and enrollment cards
- remove stale eslint-disable directives in schedule types
- date-fns locale from user settings, WeekCalendar React.memo
- drag-to-reschedule (document pointer events) + teacher accent dot on card
- schedule dialog — course link, inline links, i18n, student count, self-study note
- align settings.weekday* i18n keys with backend 0=Mon..6=Sun indexing
- cap schedule student picker limit at 100 (EDV-339)
- add nav.schedule i18n key for sidebar (EDV-339)
- preserve empty alt-correct rows in fill-in-blanks editor (#85)
- replace bare usePuck with createUsePuck selectors (#84)
- super-admin school visibility and admin-flag toggle (#82)
- drop bogus @babel/core dependency and unpublished linux-x64 binaries (#83)
Miscellaneous
- add Zod schema, component, and HOC unit tests
- add nav and layout component tests
- add component tests for RoleGuard, DataTable, LessonProgress, ScrollablePills
- add lib/hooks, chat/WebSocket, query-key tests
- expand frontend unit tests — coverage +8pp
- add React Query hooks tests for all 15 feature domains (+217 tests)
- bump frontend dependencies
- add comprehensive vitest unit and integration test suite
- date-locale, WeekCalendar render, and ICS download unit tests
- vitest unit tests for ics generator, schedule colors, and Zod schemas
- openapi-typescript codegen setup, API type safety assertions
Бэкенд
Features
- bind tenant in auth and get_tenant log context
- bind user and tenant ids to structlog contextvars
- cancel active subscription on GDPR self-delete
- GDPR — super-admin self-delete guard + billing in export
- add separate tests CI job with coverage badge
- sub-cent AI credit accumulation with threshold-based flush (EDV-302)
- auto-generate and publish OpenAPI schema in CI (EDV-381)
- EDV-297 P1 — column-level AES-256-GCM encryption for chat/notes/dictionary
- add admin_seats capacity type with LS variants 1759498/1759499
- expose flow max_students on schedule events
- teacher workload stats API + school holiday calendar
- GET /schedule/my endpoint for teacher and student rich schedule
- student availability and busy windows API
- student conflict warnings on reschedule
- schedule filter params support arrays (teacher_ids, course_ids, flow_ids)
- add student_count to schedule event feed
- unify schedule source of truth (EDV-377)
- editable schedule events with availability checks (EDV-339)
- mirror Cloudflare Stream webinar recordings into MinIO (EDV-375) (#76)
- school scheduling MVP with admin schedule and availability CRUD (EDV-339)
- stream Cloudflare lesson recordings into MinIO (EDV-112)
- per-tenant minio buckets with auto-provisioning (#70)
- hash session refresh tokens with HMAC-SHA256 + pepper (#64)
Bug Fixes
- unblock release-please and coverage badge CI
- restore GDPR export cooldown to 24 hours
- mock FEATURE_PAYWALL_ENABLED in billing history tests
- correct mypy/pyright type errors in gap test files
- add missing last_export_requested_at to User constructors
- prevent patch leakage in enrollment gap tests (use ExitStack context, not patch.start)
- update extended flows integration tests after flows_router.py split (EDV-390)
- update integration test imports after flows_router.py split (EDV-390)
- add last_export_requested_at to User factory and media_router user builder
- update integration test imports after ai_router.py split (EDV-389)
- pin all wildcard * dependencies in pyproject.toml, add poetry.lock (EDV-388)
- add allure-pytest dev dep and restore allure flags in pytest addopts
- add ripgrep as dev dependency for test suite
- install ripgrep in CI before running pytest
- remove allure-pytest flags from pytest addopts in pyproject.toml
- replace DATABASE_URL with individual POSTGRES_* fields in CI env
- add MINIO_ROOT_USER and MINIO_ROOT_PASSWORD to CI env
- apply black formatting to all test files, fix ruff N806
- mock datetime.now in schedule availability tests — was comparing against real time
- suppress pylint warnings in test files (C0415, W0613, R0903, etc.)
- resolve all CI linter failures (pylint, black, mypy, ruff, pyright)
- modernize type annotations — Optional[X]→X|None, Dict→dict, UP035
- tighten langchain ecosystem version pins (EDV-272)
- pin langchain-core to >=1.0 in pyproject.toml (EDV-272)
- enrich schedule validation errors with availability windows
- add max_admins to UpsertUserQuotaParams in integration test fixture
- multiply capacity amount by LS subscription quantity
- exclude super-admins from school-admin count and user listings
- correct max_admins default to 0 and fix off-by-one in check_admin_seats
- add max_admins quota check before granting school-admin flag
- make migrations 0082-0084 idempotent (IF NOT EXISTS)
- resolve all pre-existing test failures — encrypt roundtrip, schedule router mounting
- correct double-segment routing in schedule_router — /schedule/my prefix duplication
- add venvPath to pyright config so it resolves the virtualenv
- materialize past lesson_schedule_events on first run (EDV-377)
- build Medium via _medium_from_row helper (EDV-112, EDV-375)
- keep migration 0076 COMMENT on a single SQL literal (EDV-368) (#73)
- seed integrations and secrets on tenant creation (#71)
- super-admin permission gaps reported on prod (EDV-368) (#68)
Performance
- stream ZIP media uploads via MinIO to cap memory (EDV-278)
Refactoring
- split flows_router.py into sub-routers under app/api/flows/ (EDV-390)
- split ai_router.py into sub-routers under app/api/ai/ (EDV-389)
- remove dead _load_teacher_rows, cover remaining schedule branches to ≥95%
- encapsulate db engine lifecycle (EDV-275) (#67)
- split ai_service.py into app/services/ai package (EDV-256)
Documentation
- document Flows unlock policy, LLM routing, and RLS design (EDV-386)
- add RBAC security audit report — Jun 2026
- add Jira service-account provisioning and rotation runbook (#69)