Commit Graph

27 Commits

Author SHA1 Message Date
82394cc688 feat: закрыть остаточные P1/P2 по профилю, когорте и ведомости
- профиль приведён к docs/09: variant/level, updatedBy/name, лимит попыток
- V14: NOT NULL и полная уникальность когорты, preflight legacy-групп
- возврат группы из архива и история членства на странице группы
- пагинация групп и плоского списка материалов
- пакетные сдачи ведомости одним запросом
- XLSX-preflight импорта и audit-тесты ростера
- LDD: 66 claims, 398 тестов, release PASS
2026-10-29 20:51:27 +03:00
65ed08f5c2 feat(web): перевести браузерные URL курсов на courseNo
- teacher/admin course pages, content, gradebook, profile, downloads
- courseNo -> UUID только на границе REST API
- обновлены e2e, шаблоны, тесты и docs
- LDD-UI-002; baseline 59 claims / 385 тестов
2026-10-29 19:51:03 +03:00
1570196cc7 fix(import): построчные ошибки до записи
- preflight занятого логина и неактивной целевой группы
- applied=false с номером строки, без частичных студентов
- LDD-IMPORT-003; baseline 58 claims / 368 тестов
2026-10-29 19:20:16 +03:00
9412d87fed fix: закрыть P0/P1 расхождения с целевой моделью
- академический отпуск: readOnly, запрет submit/start/finish защиты
- черновики лабораторных скрыты от студентов в списке/деталях/по UUID
- удалено действие «Убрать из группы» из UI и API
- импорт: restoreInactiveStatuses, skipped-отчёт, разблокировка архивного аккаунта
- глобальные материалы STUDENTS/TEACHERS с JWT-фильтрацией и сменой аудитории
- LDD-AUTH-005 переведён на unit-evidence, clean check проходит по P0
- backup: безопасный парсинг .env, verify-latest, кавычки cron
- robots/noindex, комментарии без автора, профиль без черновиков
- docs/18-goal-audit.md; baseline 57 claims / 366 тестов / release PASS
2026-10-29 18:58:21 +03:00
9cb4d0d263 docs: обновить baseline после hotfix действий статей 2026-10-29 12:04:43 +03:00
f3d614bb33 ci: изолировать пайплайны на отдельной VM
- Woodpecker workflows требуют агент с меткой isolation=dedicated-vm
- шаги выполняются в lms-ci:1 с nested dockerd, без хост-Docker сокета
- ci/Dockerfile: прогретый immutable-образ (Java, Python, Node, Gradle-кэш)
- ci-dind.sh поднимает dockerd внутри privileged-шага; ci-build-image.sh собирает образ
- deploy/WOODPECKER.md: отдельная VM, firewall, отсутствие production-секретов,
  trusted repo, чек-лист безопасности
2026-10-29 12:01:44 +03:00
685916c4bd ci: перевести merge gate на Gitea + Woodpecker
- .woodpecker/check.yaml, smoke.yaml, release.yaml
- local-backend агент: Java 21, Docker Compose v2, Python 3, Node/Playwright
- concurrency lms-ci, чтобы smoke/release не занимали порты одновременно
- deploy/WOODPECKER.md: server, OAuth Gitea, systemd-агент, security note
- удалён .gitlab-ci.yml
2026-10-29 12:01:44 +03:00
1e1e9ae0e4 feat: закрыть остаточный backlog
- keyset-пагинация аудита с курсором (occurred_at, id) и UI «Показать ещё»
- пакетный /api/v1/labs/details и переход progress на один запрос
- абсолютный потолок сессии 30 дней (identity V12 + web), очистка refresh
- админская инвентаризация legacy-активов (/admin/legacy-assets, скрипт)
- E2E в Chromium/Firefox/WebKit (18/18), CI preflight
- LDD: 51 claim, 346 тестов, docs и handoff обновлены
2026-10-29 12:01:44 +03:00
9dcba8ce0c docs: закрытие продуктовых рисков и новый LDD baseline 2026-10-29 12:01:44 +03:00
287e01cde8 docs: завершить LDD baseline и release evidence 2026-10-29 12:01:44 +03:00
05f628a52b docs: установка Chromium для LDD browser E2E 2026-10-29 12:01:44 +03:00
238fd91f69 docs: LDD baseline с mutation и browser E2E 2026-10-29 12:01:44 +03:00
4130a1af2f feat(ldd): реестр утверждений, evidence gate и runtime-проверки 2026-10-29 12:01:43 +03:00
25a3dbd0fb docs: права преподавателя, аудит, CI и итоговые проверки 2026-10-29 12:01:43 +03:00
4a2daf2fec docs: этапы 3–4 — роли, профиль и жизненный цикл 2026-10-29 12:01:43 +03:00
6f8add3736 docs: этап 2 — курсы, bootstrap и лабораторные 2026-10-29 12:01:42 +03:00
07a223b759 feat(identity): группы-когорты, история и импорт v2 2026-10-29 12:01:42 +03:00
7c45de8d9f feat(ops): обязательный backup БД и файлов перед деплоем 2026-10-29 12:01:42 +03:00
f7dc8d7d8b feat: general lab comment and strict square UI
Add a non-required general comment for a student's lab grade (progress V9, API, admin modal, student card). Empty string is the default. Switch the UI to square corners and bump static asset versions.
2026-10-20 21:56:38 +03:00
2e99fd926c Add ContentImporter tests; drop redundant elvis; document lint/test commands 2026-09-27 22:17:59 +03:00
631a927787 Edit README.md 2026-09-18 11:25:16 +03:00
025c937f21 docs: add UML and architecture documentation (Mermaid)
- docs/README.md — index and short system overview
- 01-architecture.md — context, per-service components, Gradle modules,
  authentication/authorization, web interceptors (flowcharts)
- 02-deployment.md — deployment diagram, containers/env/volumes, build stages,
  nginx, update sequence
- 03-domain-model.md — class diagrams for identity/academic/progress and web,
  ER model of all schemas (cross-schema references noted)
- 04-sequences.md — 10 sequence diagrams (login, JWT check, forced password
  change, lab import, distribution, submission, defense, grades+publication,
  content publishing, group page aggregation)
- 05-states.md — state diagrams for defense session, grade publication, lab
  status, content visibility, submission lifecycle, variant assignment, password
MS
git log --oneline -3
2026-09-16 18:44:14 +03:00
d04207302a Phase 7: deployment, data import, UI hardening and security fixes
Docker/prod deployment:
- multi-stage Dockerfile (JDK21 build, JRE21 run), docker-compose.prod.yml,
  nginx config for lms.our-place.ru, deploy.sh; DEPLOY/IMPORT guides (UI flow)
- Fix Docker 401: LMS_JWT_JWK_SET_URI for academic/progress; forward-headers

Variant distribution (lab page only):
- round-robin by student level, shared random queue across selected groups,
  least-used variants, manual pins always preserved; occupied/dup labels
- setup page: single form + one «Сохранить всё», batch level/variant for
  selected students (checkboxes)

Grades, defense, materials:
- publication gate + comment lists; defense CSV import (2/3 cols, quotes)
- additional task after defense ("начать заново"); enroll/unenroll students
  from group page; temporary-password lock (no navigation until changed) and
  persistent "Смена пароля"; forced change once
- chapter page /learn/{c}; header: LMS home, Войти, user -> dashboard,
  compact theme toggle; responsive mobile header
- markdown: single newlines are soft breaks; highlight.js with light/dark themes
- lab/content imports ZIP-only (lab.yaml+README+variants/assets,
  chapters tree+assets); duplicate lab numbers rejected; variant ordering
  and date defaults honored

Fixes:
- 500 on student create (@MapsId set before persist); broken dialogs/JS refs in group page
2026-09-15 00:09:28 +03:00
08830c67f1 Phase 6: accordion in /learn; README feature notes; tests green
- collapse chapters/sections via styled <details> with chevrons
- identity testcontainers smoke passes on JDK 21
- README: student UX, comments, JDK note (logback ThrowableProxy in
  fat-jars → restart recovery), data dirs
2026-09-12 02:00:45 +03:00
eec804a0ac Fix .gitignore newline concatenation, untrack logs/ dir, README typo 2026-09-11 22:11:44 +03:00
b532d2ede2 Pin runtime to JDK 21 via run.sh; document full feature set
- run.sh: start/stop/restart/status/logs for the whole stack, JAVA_BIN
  override, pinned to /usr/lib/jvm/java-21-openjdk (Java 25 breaks
  logback ThrowableProxy inside fat jars and kills Tomcat threads)
- -Xmx320m per service, health-gated startup, logs/ dir (gitignored)
- README: requirements, run.sh workflow, full current feature list
- verified: 25-round load test across all pages under JDK 21 — 0 failures
2026-09-11 22:08:50 +03:00
9b7748571e Initial commit: LMS microservices scaffold
- Gradle multi-module: libs/{common-http,security-jwt,markdown,test-support},
  services/{identity,academic,progress,gateway}, web (Thymeleaf+htmx)
- identity-service: JWT auth (RSA), accounts, students, groups, enrollment,
  import from XLSX/CSV, credentials export, password reset
- academic-service: lab import from JSON/zip (markdown + YAML + variants),
  levels, API
- progress-service: schema for student levels and variant assignments
- gateway: Spring Cloud Gateway, JWT validation, route propagation
- web: Server-side UI with flex/footer layout, light/dark theme toggle,
  admin dashboard, groups CRUD, student portal placeholder
- docker-compose: PostgreSQL 18
- Tests: identity smoke test with Testcontainers
2026-09-10 19:46:13 +03:00