Skip to content

Release March 14, 2026#103

Merged
y4nder merged 1 commit intomasterfrom
release/march-14-2026
Mar 14, 2026
Merged

Release March 14, 2026#103
y4nder merged 1 commit intomasterfrom
release/march-14-2026

Conversation

@y4nder
Copy link
Member

@y4nder y4nder commented Mar 14, 2026

[FAC-40, FAC-41, FAC-42, FAC-43, FAC-44, FAC-45, FAC-46, FAC-47] (#102)

Add GET /questionnaires/types and GET /questionnaires/types/:type/versions endpoints for listing questionnaire types with their associated entities and browsing versions by type with OpenAPI schema definitions.

Add schema constants and idempotent seeder for all three questionnaire types (Faculty In-Classroom, Out-of-Classroom, Faculty Feedback) with published v1 versions. Replace placeholder dimensions with real section-aligned dimensions matching UC faculty evaluation forms.

Register CacheModule with @keyv/redis store (falls back to in-memory when REDIS_URL is not set). Add Redis env config with Zod validation for REDIS_URL, REDIS_KEY_PREFIX, and REDIS_CACHE_TTL.

  • FAC-43 feat: add CacheService with namespace-based invalidation

Introduce CacheService wrapper over CACHE_MANAGER with namespace-aware key tracking. Supports wrap() for get-or-set caching with HIT/MISS logging, and invalidateNamespace()/invalidateNamespaces() for targeted cache clearing. Register and export from CommonModule.

  • FAC-43 feat: integrate caching into enrollments, questionnaires, and sync jobs

Wrap getMyEnrollments (30min TTL), getQuestionnaireTypes and getVersionsByType (1hr TTL) with CacheService. Add cache invalidation after questionnaire mutations and enrollment sync. Update all affected test files with CacheService mock.

  • FAC-43 docs: add caching architecture, AI pipeline spec, and update-docs skill

Add caching architecture doc, decision record for namespace-based invalidation, and AI inference pipeline implementation spec fragment. Update core-components and roadmap with caching and RabbitMQ references. Add /update-docs slash command skill.

Add async job processing for AI analysis pipeline using BullMQ on Redis. Includes queue-per-type pattern, HTTP-based job processors, Terminus health checks, mock worker for local dev, and Docker Compose support.

BullMQ (FAC-44) requires Redis at startup, which broke the OpenAPI spec generation in CI. Add Redis service container and REDIS_URL env var.

  • Install pgvector npm package for 768-dim LaBSE embedding storage
  • Create PipelineStatus, RunStatus, ActionPriority enums
  • Create SENTIMENT_GATE, COVERAGE_WARNINGS, and pipeline constants
  • Add EMBEDDINGS/TOPIC_MODEL/RECOMMENDATIONS worker URL + concurrency env vars
  • Create 9 new entities: SubmissionEmbedding, AnalysisPipeline, SentimentRun, SentimentResult, TopicModelRun, Topic, TopicAssignment, RecommendationRun, RecommendedAction (each with custom repository)
  • Register all new entities in barrel file and MikroORM config
  • Add migration with pgvector extension, all tables, CHECK constraints, composite indexes, and partial unique indexes (soft-delete aware)
  • FAC-46 feat: add analysis pipeline infrastructure — processors, orchestrator, controller (Phases 4-8)

Wire the end-to-end analysis pipeline: worker contract schemas, batch processing infrastructure, all four processors (embedding, sentiment, topic model, recommendations), pipeline orchestrator with sequential stage execution and sentiment gate filtering, REST controller, and embedding auto-dispatch on submission.

Includes adversarial review fixes: batch result passthrough for typed worker responses, N+1 query elimination in sentiment gate, scoped enrollment counts, aggregated recommendations payload, class-validator decorators on DTO, and deterministic test for env-gated behavior.

  • FAC-46 docs: update documentation for analysis pipeline infrastructure

Replace raw AnalysisPipeline entity returns with a flat DTO that maps ManyToOne relations to UUID strings, preventing deeply nested entity graphs from leaking into the OpenAPI spec.


* FAC-40 feat: add image on enrollments response (#79)

* FAC-41 feat: add questionnaire type and version queries (#81)

Add GET /questionnaires/types and GET /questionnaires/types/:type/versions
endpoints for listing questionnaire types with their associated entities
and browsing versions by type with OpenAPI schema definitions.

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

* FAC-42 feat: seed questionnaire types with sample questionnaires (#84)

Add schema constants and idempotent seeder for all three questionnaire
types (Faculty In-Classroom, Out-of-Classroom, Faculty Feedback) with
published v1 versions. Replace placeholder dimensions with real
section-aligned dimensions matching UC faculty evaluation forms.

* 85 fac 43 feat implement redis caching layer (#89)

* FAC-43 feat: add Redis caching infrastructure

Register CacheModule with @keyv/redis store (falls back to in-memory
when REDIS_URL is not set). Add Redis env config with Zod validation
for REDIS_URL, REDIS_KEY_PREFIX, and REDIS_CACHE_TTL.

* FAC-43 feat: add CacheService with namespace-based invalidation

Introduce CacheService wrapper over CACHE_MANAGER with namespace-aware
key tracking. Supports wrap() for get-or-set caching with HIT/MISS
logging, and invalidateNamespace()/invalidateNamespaces() for targeted
cache clearing. Register and export from CommonModule.

* FAC-43 feat: integrate caching into enrollments, questionnaires, and sync jobs

Wrap getMyEnrollments (30min TTL), getQuestionnaireTypes and
getVersionsByType (1hr TTL) with CacheService. Add cache invalidation
after questionnaire mutations and enrollment sync. Update all affected
test files with CacheService mock.

* FAC-43 docs: add caching architecture, AI pipeline spec, and update-docs skill

Add caching architecture doc, decision record for namespace-based
invalidation, and AI inference pipeline implementation spec fragment.
Update core-components and roadmap with caching and RabbitMQ references.
Add /update-docs slash command skill.

* FAC-44 feat: add BullMQ job queue infrastructure (#91)

* FAC-44 feat: add BullMQ job queue infrastructure

Add async job processing for AI analysis pipeline using BullMQ on Redis.
Includes queue-per-type pattern, HTTP-based job processors, Terminus health
checks, mock worker for local dev, and Docker Compose support.

* chore: add analysis job queue tech-spec artifact

* FAC-45 fix: add Redis service to publish-contract workflow (#93)

BullMQ (FAC-44) requires Redis at startup, which broke the OpenAPI
spec generation in CI. Add Redis service container and REDIS_URL env var.

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

* FAC-46 feat: add analytics metadata to questionnaire submission (#97)

* FAC-46 feat: add analytics metadata foundation — entities, enums, migration (Phases 1-3)

- Install pgvector npm package for 768-dim LaBSE embedding storage
- Create PipelineStatus, RunStatus, ActionPriority enums
- Create SENTIMENT_GATE, COVERAGE_WARNINGS, and pipeline constants
- Add EMBEDDINGS/TOPIC_MODEL/RECOMMENDATIONS worker URL + concurrency env vars
- Create 9 new entities: SubmissionEmbedding, AnalysisPipeline, SentimentRun,
  SentimentResult, TopicModelRun, Topic, TopicAssignment, RecommendationRun,
  RecommendedAction (each with custom repository)
- Register all new entities in barrel file and MikroORM config
- Add migration with pgvector extension, all tables, CHECK constraints,
  composite indexes, and partial unique indexes (soft-delete aware)

* FAC-46 feat: add analysis pipeline infrastructure — processors, orchestrator, controller (Phases 4-8)

Wire the end-to-end analysis pipeline: worker contract schemas, batch
processing infrastructure, all four processors (embedding, sentiment,
topic model, recommendations), pipeline orchestrator with sequential
stage execution and sentiment gate filtering, REST controller, and
embedding auto-dispatch on submission.

Includes adversarial review fixes: batch result passthrough for typed
worker responses, N+1 query elimination in sentiment gate, scoped
enrollment counts, aggregated recommendations payload, class-validator
decorators on DTO, and deterministic test for env-gated behavior.

* FAC-46 docs: update documentation for analysis pipeline infrastructure

---------

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

* FAC-47 refactor: add PipelineResponseDto to flatten pipeline API responses (#101)

Replace raw AnalysisPipeline entity returns with a flat DTO that maps
ManyToOne relations to UUID strings, preventing deeply nested entity
graphs from leaking into the OpenAPI spec.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@y4nder y4nder self-assigned this Mar 14, 2026
@y4nder y4nder merged commit 7a7abf3 into master Mar 14, 2026
3 checks passed
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