Skip to content

Release April 12, 2026 — FAC-113–121: Scoped Filters, CSV Generator, Moodle Seeding Toolkit, Tree Explorer, Audit Trail, Semester Fix, Bulk Course Provisioning & Program Filter Enhancements#291

Merged
y4nder merged 4 commits intomasterfrom
release/april-12-2026-2
Apr 11, 2026
Merged

Release April 12, 2026 — FAC-113–121: Scoped Filters, CSV Generator, Moodle Seeding Toolkit, Tree Explorer, Audit Trail, Semester Fix, Bulk Course Provisioning & Program Filter Enhancements#291
y4nder merged 4 commits intomasterfrom
release/april-12-2026-2

Conversation

@y4nder
Copy link
Copy Markdown
Member

@y4nder y4nder commented Apr 11, 2026

Summary

Cherry-picked FAC-113 through FAC-121 from staging onto this release branch, targeting master for production.

  • FAC-113 feat: scoped program filters for analytics attention endpoint
  • FAC-114 feat: add CSV test submission generator
  • FAC-115 fix: scope recommendation supporting evidence to pipeline submissions
  • FAC-116 – FAC-121 feat: Moodle seeding toolkit, tree explorer, audit trail, semester fix, bulk course provisioning, program filter enhancements

Changes

  • admin module: new generate controller + service, comment generator, program/course/version/semester filter DTOs and responses
  • analytics module: scoped program filters, updated query DTO and service
  • audit module: full audit log query service, controller, and DTOs for listing/detail views
  • moodle module: new provisioning controller + service (bulk course preview/execute, seed users, tree explorer), CSV parser, course transform service, provisioning types
  • Scope resolver service improvements
  • Curriculum service enhancements
  • 87 files changed, ~11,600 insertions

Test plan

  • Confirm all unit tests pass (npm run test)
  • Verify scoped program filters return correct data per program scope
  • Verify CSV test submission generator produces valid submissions
  • Verify recommendation supporting evidence is scoped to pipeline submissions only
  • Verify Moodle tree explorer endpoint returns correct category/course hierarchy
  • Verify bulk course provisioning preview and execute flows
  • Verify seed users endpoint creates/updates correctly
  • Verify audit log listing and detail endpoints with filters
  • Verify semester category fix resolves prior sync bugs
  • Confirm migrations applied cleanly

y4nder and others added 4 commits April 12, 2026 03:48
…#269) (#270)

Add programCode filter to GET /analytics/attention with scope
validation. Fix chairperson program scoping in GET /curriculum/programs.
Add scope validation for programCode on GET /analytics/overview.
* chore: initialize tech-spec WIP for CSV test submission generator

https://claude.ai/code/session_01VbeiqCo7jDVMYYi9dgp5kr

* chore: update tech-spec WIP with deep investigation findings

https://claude.ai/code/session_01VbeiqCo7jDVMYYi9dgp5kr

* chore: finalize tech-spec for CSV test submission generator

Spec passed two rounds of adversarial review. Key decisions:
- Direct submitQuestionnaire() calls instead of ingestion pipeline
- Import QuestionnaireModule for QuestionnaireService access
- em.clear() on failure for EM state recovery
- OpenAI gpt-4o-mini for multilingual comment generation
- Admin console builder UI with two-track selection flow

https://claude.ai/code/session_01VbeiqCo7jDVMYYi9dgp5kr

* feat: add CSV test submission generator API

Add backend endpoints for generating realistic test questionnaire
submissions with OpenAI-powered multilingual comments.

New endpoints:
- GET /admin/generate-submissions/status (lightweight pre-check)
- POST /admin/generate-submissions/preview (generate with comments)
- POST /admin/generate-submissions/commit (submit via QuestionnaireService)
- GET /admin/filters/faculty, courses, questionnaire-types, versions

Includes CommentGeneratorService with gpt-4o-mini integration and
fallback, AdminGenerateService with preview/commit flow, and 31
unit tests across 3 test suites.

---------

Co-authored-by: Claude <noreply@anthropic.com>
…missions (#276) (#277)

TopicAssignment query now filters by submissionIds, preventing cross-faculty
evidence contamination. Replaced Topic.docCount with scoped assignment count
for accurate commentCount in evidence and confidence computation.
…rer, audit trail, semester fix, bulk course provisioning, program filter enhancements (#289)

* FAC-116 feat: add Moodle seeding toolkit API (#279)

* FAC-116 feat: add Moodle seeding toolkit API

Add provisioning endpoints for creating Moodle categories, courses, and
users via REST API, replacing the manual Rust CLI workflow.

Closes #278

* chore: add bmad artifacts for Moodle seeding toolkit

* FAC-117 feat: add Moodle tree explorer API endpoints (#281)

* FAC-117 feat: add Moodle tree explorer API endpoints

Add read-only endpoints for browsing live Moodle category hierarchy
and course listings to support admin provisioning visibility.

* chore: add tech spec for moodle tree explorer

* FAC-118 feat: add audit trail query endpoints (#282)

* feat: add audit trail query endpoints

Add GET /audit-logs (paginated, filtered list) and GET /audit-logs/:id
(single record) endpoints for superadmin audit log visibility.

https://claude.ai/code/session_01D6jVaVQiXM5y8P8XmsmzG5

* fix: startup issue

---------

Co-authored-by: Claude <noreply@anthropic.com>

* FAC-119 fix: correct semester year derivation and add category preview endpoint (#284)

Fix wrong semester tag generation in category provisioning when a single
semester is selected (e.g., S22626 instead of S22526). Add ComputeSchoolYears
utility for school-year-aware year computation. Add POST categories/preview
endpoint with read-only hierarchy walk. Improve webservice_access_exception
error message with actionable hint.

* FAC-120 feat: enhance bulk course provisioning with cascading dropdowns (#286)

* FAC-120 feat: enhance bulk course provisioning with cascading dropdowns

Replace free-text inputs and CSV upload with cascading dropdown selectors
(Semester → Department → Program) and JSON-based bulk preview/execute
endpoints for course provisioning.

* FAC-120 chore: add tech spec for bulk course provisioning enhancement

* FAC-121 feat: add ProgramFilterOptionResponseDto with moodleCategoryId (#288)

* FAC-121 feat: add ProgramFilterOptionResponseDto with moodleCategoryId

Create standalone ProgramFilterOptionResponseDto that exposes moodleCategoryId
in the program filter response, enabling the admin frontend to derive Moodle
category IDs for course fetching via cascading dropdowns.

- Add ProgramFilterOptionResponseDto with static MapProgram() mapper
- Update GetPrograms() service and controller return types
- Add service-level spec for mapping verification
- Update controller spec with moodleCategoryId assertions

* chore: added tech spec

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment