Skip to content

Development: Enable Atlas Orchestrator on all Exercise Types#13178

Open
jaylann wants to merge 11 commits into
developfrom
feature/atlas/auto-orchestration-all-exercise-types
Open

Development: Enable Atlas Orchestrator on all Exercise Types#13178
jaylann wants to merge 11 commits into
developfrom
feature/atlas/auto-orchestration-all-exercise-types

Conversation

@jaylann

@jaylann jaylann commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Summary

The Atlas competency auto-orchestration agent previously mapped only programming exercises to competencies; every other type was silently dropped at three choke points. This PR generalizes the whole pipeline — the record gate, the orchestration service, and content extraction — to all course exercise types (programming, text, quiz, modeling, file-upload). Instructors now get the "Suggest competencies" trigger on every exercise detail page, and content edits to any type feed the automatic pipeline. Lecture units remain out of scope (they need net-new change-event infrastructure).

Checklist

General

Server

  • Important: I implemented the changes with a very good performance and prevented too many (unnecessary) and too complex database calls.
  • I strictly followed the principle of data economy for all database calls.
  • I strictly followed the server coding and design guidelines and the REST API guidelines.
  • I added multiple integration tests (Spring) related to the features (with a high test coverage).
  • I added pre-authorization annotations according to the guidelines and checked the course groups for all new REST Calls (security).
  • I documented the Java code using JavaDoc style.

Client

  • Important: I implemented the changes with a very good performance, prevented too many (unnecessary) REST calls and made sure the UI is responsive, even with large data (e.g. using paging).
  • I strictly followed the principle of data economy for all client-server REST calls.
  • I strictly followed the client coding guidelines.
  • I strictly followed the AET UI-UX guidelines.
  • Following the theming guidelines, I specified colors only in the theming variable files and checked that the changes look consistent in both the light and the dark theme.
  • I added multiple integration tests (Vitest) related to the features (with a high test coverage), while following the test guidelines.
  • I added authorities to all new routes and checked the course groups for displaying navigation elements (links, buttons).
  • I documented the TypeScript code using JSDoc style.
  • I added multiple screenshots/screencasts of my UI changes.
  • I translated all newly inserted strings into English and German.

Motivation and Context

Adaptive learning is only useful if competencies cover the whole course, but auto-orchestration was gated to programming exercises by an instanceof ProgrammingExercise early-return, a ProgrammingExercise-typed service, and an extractor that threw for anything else. Text/quiz/modeling/file-upload content never reached the competency mapper. This closes that gap so the agent works for the full set of course exercise types.

Description

  • Record gate (AutonomousCompetencyExerciseEventListener): removed the programming-only early return; all non-exam course exercise versions now record into the change accumulator.
  • Orchestration (CompetencyOrchestrationService): retyped from ProgrammingExercise / ProgrammingExerciseRepository to generic Exercise / ExerciseRepository throughout (resolve / run / precheck / orchestrate). Batch extraction now isolates per-exercise failures — a single bad entry (e.g. a quiz deleted mid-run whose refetch throws) is logged and skipped rather than failing the whole batch and consuming the course's daily-run slot; a fully-empty batch returns INTERNAL_ERROR.
  • Extraction (ContentExtractionService): the instanceof chain is replaced by a switch over all five types. Text / modeling / file-upload use the (flavor-stripped) problem statement plus their labeled example solution — modeling uses the solution explanation, not the Apollon JSON model, which is noise for competency reasoning. Quizzes carry no problem statement, so content is assembled from the questions, answer options, and correct solutions across multiple-choice / short-answer / drag-and-drop; quiz extraction re-fetches lazy questions (QuizExerciseRepository.findByIdWithQuestionsElseThrow) and skips the flavor-strip pass (terse structured Q&A, not narrative prose). All extracted content is server-side only and is sanitized (fence-neutralized, truncated) by the orchestrator before it reaches the prompt.
  • On-demand read tool (OrchestratorToolsService.getExerciseContent): returns real extracted content for every type instead of a title-only stub for non-programming; runs with the flavor-strip disabled to avoid an extra uncapped LLM round-trip on this read path.
  • REST: POST atlas/orchestrator/programming-exercises/{id}/runPOST atlas/orchestrator/exercises/{id}/run (runForExercise), still guarded by @EnforceAtLeastInstructorInExercise + @FeatureToggle(AtlasAgent).
  • Client: AtlasOrchestrationTriggerComponent is retyped to a generic exercise input, gains a buttonClass input, and self-owns the atlasModuleActive module gate so host pages stay free of Atlas knowledge. It is projected via <ng-content> into the text/modeling/file-upload common-actions bar (non-programming-exercise-detail-common-actions) and the quiz manage-buttons group (quiz-exercise-manage-buttons); the programming detail page is updated to the new inputs. The API service method is renamed to runForExercise, and the i18n button key moves from programmingExercise to atlasOrchestrator (en + de).

Steps for Testing

Prerequisites:

  • 1 Instructor
  • 1 Course with the Atlas module enabled and the AtlasAgent feature toggle on
  • 1 exercise of each non-programming type (text, quiz, modeling, file-upload), plus a couple of competencies defined on the course
  1. Log in to Artemis as the instructor.
  2. Open each exercise's detail page → confirm the Suggest competencies button appears next to the other action buttons. Confirm it is hidden when the Atlas module / feature toggle is off, in exam mode, and for non-instructors.
  3. Click it on a quiz → the orchestrator runs and the result dialog lists the applied actions (e.g. the exercise linked to a competency). Repeat for text, modeling, and file-upload.
  4. Edit an exercise's content (e.g. a quiz question, a text problem statement) and save → after the debounce, the automatic pipeline fires a batch run and links the exercise (previously it was silently dropped).
  5. Confirm a programming exercise still behaves exactly as before (button, manual run, auto-pipeline).

Testserver States

You can manage test servers using Helios. Check environment statuses in the environment list. To deploy to a test server, go to the CI/CD page, find your PR or branch, and trigger the deployment.

Review Progress

Code Review

  • Code Review 1
  • Code Review 2

Manual Tests

  • Test 1
  • Test 2

Test Coverage

Note: Some tests in the Test job did not pass (failure). Coverage below may be partial.

Client

Class/File Line Coverage Lines Expects Ratio
atlas-orchestration-trigger.component.ts 97.05% 75 16 21.3
competency-orchestration-api.service.ts 100.00% 10 1 10.0
file-upload-exercise-detail.component.ts 98.07% 119 28 23.5
modeling-exercise-detail.component.ts 97.67% 142 17 12.0
programming-exercise-detail.component.ts 88.36% 797 41 5.1
quiz-exercise-detail.component.ts 100.00% 117 14 12.0
text-exercise-detail.component.ts 100.00% 117 19 16.2

Server

Class/File Line Coverage Lines
AutonomousCompetencyExerciseEventListener.java not found (modified) 45
CompetencyOrchestrationService.java not found (modified) 487
ContentExtractionService.java not found (modified) 337
OrchestratorToolsService.java not found (modified) 600
CompetencyOrchestrationResource.java not found (modified) 49

Last updated: 2026-07-12 14:32:26 UTC

Screenshots

Summary by CodeRabbit

  • New Features

    • Atlas competency suggestions now support additional exercise types (text, modeling, file upload, and quizzes).
    • The orchestration trigger is available across supported exercise detail views for instructors when not in exam mode.
    • Quiz learning content extraction now assembles question-and-answer text, including quiz-specific metadata.
  • Bug Fixes

    • Batch orchestration no longer aborts when individual exercises fail extraction; failures are isolated and skipped items are retried, with clearer partial/error handling.

@jaylann jaylann requested review from a team and krusche as code owners July 7, 2026 17:45
@github-project-automation github-project-automation Bot moved this to Work In Progress in Artemis Development Jul 7, 2026
@github-actions github-actions Bot added tests server Pull requests that update Java code. (Added Automatically!) client Pull requests that update TypeScript code. (Added Automatically!) atlas Pull requests that affect the corresponding module exercise Pull requests that affect the corresponding module fileupload Pull requests that affect the corresponding module modeling Pull requests that affect the corresponding module programming Pull requests that affect the corresponding module quiz Pull requests that affect the corresponding module text Pull requests that affect the corresponding module labels Jul 7, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1d7bcbb704

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jaylann jaylann temporarily deployed to playwright-e2e-tests July 7, 2026 17:51 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Atlas orchestration now targets generic exercises instead of programming-only exercises. The backend listener, orchestration service, extraction pipeline, tool endpoint, REST route, frontend trigger, exercise detail views, translations, and tests were updated to support text, modeling, file upload, and quiz exercises.

Changes

Backend orchestration, extraction, and tool updates

Layer / File(s) Summary
Listener records all exercise types
src/main/java/de/tum/cit/aet/artemis/atlas/service/AutonomousCompetencyExerciseEventListener.java, src/test/java/de/tum/cit/aet/artemis/atlas/service/AutonomousCompetencyExerciseEventListenerTest.java
The listener no longer filters to programming exercises, and tests now cover multiple exercise subtypes.
Orchestration service uses Exercise
src/main/java/de/tum/cit/aet/artemis/atlas/service/CompetencyOrchestrationService.java, src/test/java/de/tum/cit/aet/artemis/atlas/service/CompetencyOrchestrationServiceTest.java
The orchestration flow now loads generic exercises, resolves mixed batch inputs, skips failed extractions per exercise, and requeues skipped batch items.
Content extraction and getExerciseContent expand
src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java, src/main/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsService.java, src/main/resources/prompts/atlas/orchestrator_execute_prompt.st, src/test/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService*, src/test/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsServiceTest.java
Content extraction now supports programming, text, modeling, file upload, and quiz exercises, and getExerciseContent always returns freshly extracted content with truncation and updated prompt text.
Run endpoint path changes
src/main/java/de/tum/cit/aet/artemis/atlas/web/CompetencyOrchestrationResource.java, src/test/java/de/tum/cit/aet/artemis/atlas/web/CompetencyOrchestrationResourceIntegrationTest.java
The orchestration run endpoint now uses /api/atlas/orchestrator/exercises/{exerciseId}/run and the integration tests follow the new path.

Frontend trigger, API, and view wiring

Layer / File(s) Summary
API client and trigger component
src/main/webapp/app/atlas/shared/services/competency-orchestration-api.service.ts, src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.ts, src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.html, src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.spec.ts, src/main/webapp/app/atlas/shared/services/competency-orchestration-api.service.spec.ts
The API client and trigger component now use runForExercise, accept a generic Exercise input, conditionally render with Atlas module state, and cover the new UI behavior in tests.
Trigger wired into exercise views
src/main/webapp/app/exercise/exercise-detail-common-actions/non-programming-exercise-detail-common-actions.component.html, src/main/webapp/app/fileupload/manage/exercise-details/file-upload-exercise-detail.*, src/main/webapp/app/modeling/manage/detail/modeling-exercise-detail.*, src/main/webapp/app/quiz/manage/detail/quiz-exercise-detail.*, src/main/webapp/app/quiz/manage/manage-buttons/quiz-exercise-manage-buttons.component.html, src/main/webapp/app/text/manage/detail/text-exercise-detail.*, src/main/webapp/app/programming/manage/detail/programming-exercise-detail.*, src/main/webapp/i18n/*/atlasOrchestrator.json, src/main/webapp/i18n/*/programmingExercise.json
Non-programming exercise detail templates now project the trigger inline, programming detail drops its own Atlas module gate, and the related translations move to the Atlas orchestrator namespace.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • ls1intum/Artemis#12606: This PR generalizes the Atlas orchestration stack built around the original programming-only implementation.
  • ls1intum/Artemis#12746: This PR touches the same orchestration service flow and tool integration points.
  • ls1intum/Artemis#12885: This PR extends the content-extraction pipeline that was previously added around flavor stripping.

Suggested labels: server, client, atlas, quiz

Suggested reviewers: krusche, Claudia-Anthropica, Nihad74, louis-heinrich, MaximilianAnzinger

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: Atlas Orchestrator now supports all exercise types.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/atlas/auto-orchestration-all-exercise-types

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/main/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsService.java (1)

265-269: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Consider capping returned content length for getExerciseContent.

Unlike the batch/system-prompt path (CompetencyOrchestrationService.sanitizeForPrompt with PROBLEM_STATEMENT_MAX), this on-demand tool has no length cap on the extracted content. Now that it applies to every exercise type — including quiz, whose assembled learning text can be large — an unusually large exercise could return an oversized payload per call, inflating token cost.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsService.java`
around lines 265 - 269, `OrchestratorToolsService.getExerciseContent` currently
returns the full `ExtractedContentDTO` content without any length cap, which can
produce oversized payloads. Add a truncation/limit step after
`contentExtractionService.extractContent(exercise, false)` and before returning,
using a shared max-length constant or helper similar to
`CompetencyOrchestrationService.sanitizeForPrompt`/`PROBLEM_STATEMENT_MAX`. Make
sure the cap applies for all exercise types, including quiz, and preserve the
existing `getExerciseContent` behavior for extraction while limiting only the
returned text.
src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java (1)

364-502: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider extracting quiz rendering into a dedicated helper/class.

renderQuizQuestions/renderMultipleChoice/renderShortAnswer/renderDragAndDrop/renderDragAndDropSolution add ~140 lines of quiz-specific rendering logic onto a service whose primary responsibility is orchestrating extraction + flavor stripping. Moving this to a dedicated QuizContentRenderer (or similar) would keep ContentExtractionService focused on the extraction dispatch/flavor-strip lifecycle and make the quiz-rendering rules independently testable/extensible as more question types are added.

As per path instructions, src/main/java/**/*.java should follow single_responsibility.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java`
around lines 364 - 502, The quiz rendering logic is doing too much inside
ContentExtractionService and should be moved out to a dedicated helper/class.
Extract renderQuizQuestions, renderMultipleChoice, renderShortAnswer,
renderDragAndDrop, renderDragAndDropSolution, and appendField into a
QuizContentRenderer (or similarly named) component, then have
ContentExtractionService delegate to it so the service stays focused on
extraction orchestration. Keep the existing behavior intact while making the
quiz-specific rules easier to test and extend by locating the new logic via
those method names.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/CompetencyOrchestrationService.java`:
- Around line 444-461: Track per-exercise extraction failures in
CompetencyOrchestrationService.orchestrateBatch instead of only logging and
skipping them; the current logic loses those exercise ids when
runWithQueuedFlush/runBatch drains the queue and the batch still returns SUCCESS
or PARTIAL. Record the ids that fail in contentExtractionService.extractContent,
return or expose them alongside the CompetencyOrchestrationResultDTO, and make
the batch orchestration path requeue those failed ids even when the overall
batch succeeds. Keep the change localized around orchestrateBatch and the queued
flush/batch requeue flow so the skipped exercises are retried on the next run.

In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java`:
- Around line 58-65: The extension guide Javadoc in ContentExtractionService is
stale because extractContent(LearningObject, boolean) now uses a
pattern-matching switch rather than an instanceof chain. Update the
add-new-learning-object instructions to refer to the switch-based dispatch in
extractContent, and keep the guidance for creating a private extractFrom* method
and setting exerciseType or another type discriminator in baseMetadata/related
metadata helpers.

---

Nitpick comments:
In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java`:
- Around line 364-502: The quiz rendering logic is doing too much inside
ContentExtractionService and should be moved out to a dedicated helper/class.
Extract renderQuizQuestions, renderMultipleChoice, renderShortAnswer,
renderDragAndDrop, renderDragAndDropSolution, and appendField into a
QuizContentRenderer (or similarly named) component, then have
ContentExtractionService delegate to it so the service stays focused on
extraction orchestration. Keep the existing behavior intact while making the
quiz-specific rules easier to test and extend by locating the new logic via
those method names.

In
`@src/main/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsService.java`:
- Around line 265-269: `OrchestratorToolsService.getExerciseContent` currently
returns the full `ExtractedContentDTO` content without any length cap, which can
produce oversized payloads. Add a truncation/limit step after
`contentExtractionService.extractContent(exercise, false)` and before returning,
using a shared max-length constant or helper similar to
`CompetencyOrchestrationService.sanitizeForPrompt`/`PROBLEM_STATEMENT_MAX`. Make
sure the cap applies for all exercise types, including quiz, and preserve the
existing `getExerciseContent` behavior for extraction while limiting only the
returned text.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b1bd2579-c241-4386-8d3b-911b25408dcb

📥 Commits

Reviewing files that changed from the base of the PR and between 162b340 and 1d7bcbb.

📒 Files selected for processing (35)
  • src/main/java/de/tum/cit/aet/artemis/atlas/service/AutonomousCompetencyExerciseEventListener.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/service/CompetencyOrchestrationService.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionService.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsService.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/web/CompetencyOrchestrationResource.java
  • src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.html
  • src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.spec.ts
  • src/main/webapp/app/atlas/manage/orchestration-trigger/atlas-orchestration-trigger.component.ts
  • src/main/webapp/app/atlas/shared/services/competency-orchestration-api.service.spec.ts
  • src/main/webapp/app/atlas/shared/services/competency-orchestration-api.service.ts
  • src/main/webapp/app/exercise/exercise-detail-common-actions/non-programming-exercise-detail-common-actions.component.html
  • src/main/webapp/app/fileupload/manage/exercise-details/file-upload-exercise-detail.component.html
  • src/main/webapp/app/fileupload/manage/exercise-details/file-upload-exercise-detail.component.spec.ts
  • src/main/webapp/app/fileupload/manage/exercise-details/file-upload-exercise-detail.component.ts
  • src/main/webapp/app/modeling/manage/detail/modeling-exercise-detail.component.html
  • src/main/webapp/app/modeling/manage/detail/modeling-exercise-detail.component.ts
  • src/main/webapp/app/programming/manage/detail/programming-exercise-detail.component.html
  • src/main/webapp/app/programming/manage/detail/programming-exercise-detail.component.ts
  • src/main/webapp/app/quiz/manage/detail/quiz-exercise-detail.component.html
  • src/main/webapp/app/quiz/manage/detail/quiz-exercise-detail.component.spec.ts
  • src/main/webapp/app/quiz/manage/detail/quiz-exercise-detail.component.ts
  • src/main/webapp/app/quiz/manage/manage-buttons/quiz-exercise-manage-buttons.component.html
  • src/main/webapp/app/text/manage/detail/text-exercise-detail.component.html
  • src/main/webapp/app/text/manage/detail/text-exercise-detail.component.ts
  • src/main/webapp/i18n/de/atlasOrchestrator.json
  • src/main/webapp/i18n/de/programmingExercise.json
  • src/main/webapp/i18n/en/atlasOrchestrator.json
  • src/main/webapp/i18n/en/programmingExercise.json
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/AutonomousCompetencyExerciseEventListenerTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/CompetencyOrchestrationServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionServiceFlavorStripTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionServiceIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/ContentExtractionServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/OrchestratorToolsServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/web/CompetencyOrchestrationResourceIntegrationTest.java
💤 Files with no reviewable changes (3)
  • src/main/java/de/tum/cit/aet/artemis/atlas/service/AutonomousCompetencyExerciseEventListener.java
  • src/main/webapp/i18n/en/programmingExercise.json
  • src/main/webapp/i18n/de/programmingExercise.json

@github-project-automation github-project-automation Bot moved this from Work In Progress to Ready For Review in Artemis Development Jul 7, 2026
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

End-to-End Test Results

Phase Status Details
Phase 1 (Relevant) ✅ Passed
TestsPassed ✅Skipped ⚠️FailedTime ⏱
Phase 1: E2E Test Report141 ran139 passed2 skipped0 failed15m 23s
Phase 2 (Remaining) ✅ Passed
TestsPassed ✅Skipped ⚠️FailedTime ⏱
Phase 2: E2E Test Report165 ran162 passed3 skipped0 failed19m 57s

Test Strategy: Two-phase execution

  • Phase 1: e2e/Login.spec.ts e2e/Logout.spec.ts e2e/SystemHealth.spec.ts e2e/atlas/ e2e/course/CourseExercise.spec.ts e2e/exercise/ExerciseImport.spec.ts e2e/exercise/file-upload/ e2e/exercise/modeling/ e2e/exercise/programming/ e2e/exercise/quiz-exercise/ e2e/exercise/text/
  • Phase 2: e2e/Passkey.spec.ts e2e/PasskeyReminderPersistence.spec.ts e2e/admin/ e2e/course/CourseChannelMessages.spec.ts e2e/course/CourseDirectMessages.spec.ts e2e/course/CourseGroupChatMessages.spec.ts e2e/course/CourseManagement.spec.ts e2e/course/CourseMessageInteractions.spec.ts e2e/course/CourseOnboarding.spec.ts e2e/course/CourseOverviewSingleLoad.spec.ts e2e/exam/ExamAssessment.spec.ts e2e/exam/ExamChecklists.spec.ts e2e/exam/ExamCreationDeletion.spec.ts e2e/exam/ExamDateVerification.spec.ts e2e/exam/ExamManagement.spec.ts e2e/exam/ExamParticipation.spec.ts e2e/exam/ExamResults.spec.ts e2e/exam/ExamTestRun.spec.ts e2e/exam/test-exam/ e2e/iris/ e2e/lecture/ e2e/shared/

Overall: ✅ E2E tests passed

🔗 Workflow Run · 📊 Test Report Phase 1 · 📊 Test Report Phase 2

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 7, 2026
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 7, 2026 19:59 — with GitHub Actions Inactive
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 8, 2026 10:14 — with GitHub Actions Inactive
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 8, 2026 11:23 — with GitHub Actions Inactive
Use jspecify @nullable in ContentExtractionService (matches sibling
services, fixes testNullnessAnnotations and the deprecation warning) and
drop JUnit assertDoesNotThrow in the integration test (fixes
testNoJunitJupiterAssertions).
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 8, 2026
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 8, 2026 16:05 — with GitHub Actions Inactive
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 8, 2026 16:34 — with GitHub Actions Inactive

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jaylann The implementation looks solid: the generic extraction and orchestration paths keep the course/exam guards intact, handle per-exercise extraction failures without losing the rest of the batch, and the UI wiring is covered across the exercise detail pages. CI is green. The e2e run could not exercise the feature because the wrapper stack rendered only the app shell at login and /management/health reported DOWN, so I proceeded on static review and CI.

@louis-heinrich louis-heinrich left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code LGTM.

@jaylann jaylann temporarily deployed to playwright-e2e-tests July 12, 2026 13:58 — with GitHub Actions Inactive
@jaylann jaylann temporarily deployed to playwright-e2e-tests July 12, 2026 14:14 — with GitHub Actions Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

atlas Pull requests that affect the corresponding module client Pull requests that update TypeScript code. (Added Automatically!) exercise Pull requests that affect the corresponding module fileupload Pull requests that affect the corresponding module modeling Pull requests that affect the corresponding module programming Pull requests that affect the corresponding module quiz Pull requests that affect the corresponding module ready for review server Pull requests that update Java code. (Added Automatically!) tests text Pull requests that affect the corresponding module

Projects

Status: Ready For Review

Development

Successfully merging this pull request may close these issues.

3 participants