Skip to content

9.4

Choose a tag to compare

@krusche krusche released this 11 Jun 21:42
edf1019

⭐️ If you find Artemis valuable, please consider giving our GitHub project a star! ⭐️

Highlights

  • 📅 New exercise timeline for programming and modeling exercises: Instructors now configure all exercise dates from release to assessment on a unified, easier-to-use exercise timeline. Programming exercises received several usability improvements, and modeling exercises replace the previous separate date pickers with the same timeline.
  • 🖼️ Images in the repository view: Students and instructors can now view images directly in the repository view of programming exercises, without cloning the repository.
  • 🧠 Generate AI quiz questions from course competencies: In addition to free-topic generation, instructors can now generate quiz questions from selected course competencies. Artemis grounds the questions in the competencies and their linked lecture content, so they align with the course's learning objectives.
  • 🔍 Iris answers in global search: The global search now shows an inline Iris answer card above the search results. Ask a question and an AI-generated answer with lecture source citations appears directly in the search view.
  • 🤖 Turn review comments into exercise improvements: When creating a programming exercise with AI assistance, instructors can now leave review comments on the generated code, select those review threads, and have the next generation run implement exactly that feedback in the template, solution, and test repositories.
  • 🎯 Easier-to-read feedback: Feedback for modeling, text, and file upload exercises now uses one consistent layout, so students find points, comments, and AI feedback suggestions presented the same way across these exercise types.
  • Exam administration stays fast for large exams: The student list in exam management now loads quickly and supports searching, sorting, and filtering, even for exams with thousands of registered students.

Important information for administrators

  • REST API paths follow a new module-based convention: All account, course, and admin REST endpoints were migrated to a consistent module-name URL prefix, and an architecture rule now enforces this convention across the codebase. All old paths keep working through backward-compatible legacy aliases (responses carry Deprecation/Sunset headers), so existing integrations are not broken. However, external tools and scripts that call the Artemis REST API should migrate to the new paths, as the legacy aliases are scheduled for removal after the sunset date 2026-09-30. See #12811 and #12822.

Improvements

  • Programming exercises: Improve the usability of the exercise timeline by @marlonnienaber in #12762
  • Programming exercises: View images directly in the repository view by @Claudia-Anthropica in #12639
  • Programming exercises: Split build templates into a compile and a test phase for the integrated code lifecycle by @matyasht in #12725
  • Quiz exercises: Take the course context into account when generating quizzes with AI by @louis-heinrich in #12728
  • Quiz exercises: Validate the title length of short answer questions while editing by @MaximilianAnzinger in #12533
  • Modeling exercises: Replace the separate date pickers with the unified exercise timeline by @marlonnienaber in #12821
  • Exam mode: Make requesting AI feedback in test exams more reliable by @laadvo in #12794
  • Exam mode: Speed up the exam students view with server-side pagination, sorting, and searching by @ayca-cevdet in #12701
  • Assessment: Align the user interface for AI feedback suggestions in the assessment editors by @musaberkay in #12765
  • Assessment: Standardize the feedback display for modeling, text, and file upload exercises by @musaberkay in #12226
  • Iris: Show an inline Iris answer card directly in global search results by @Nayer-kotry in #12612
  • Iris: Detect and save the printed page numbers of lecture slides so slide pages can be linked correctly by @vivienxr in #12682
  • Iris: Polish the chat layout: better placement of the scroll-to-bottom button and the thinking indicator by @thynguyentumde in #12771
  • Hyperion: Select code review threads as feedback and have AI-assisted code generation implement them by @sawys777 in #12376
  • Adaptive learning: Add orchestration mutation tools for the Atlas Companion by @jaylann in #12746
  • Lectures: Make the slider of the YouTube player smoother by @vivienxr in #12601
  • Tutorial groups: Move management actions into the title bar and remove duplicated page titles by @krusche in #12797
  • Global search: Improve the formatting of search results by @florian-glombik in #12754
  • Global search: Automatically set search filters based on the current page by @florian-glombik in #12756
  • General: Polish the landing page FAQ accordion and feature cards by @thynguyentumde in #12770

Bugfixes

  • Programming exercises: Fix adding and removing environment variables in the build configuration of the exercise form by @matyasht in #12789
  • Programming exercises: Fix changing the assessment type when updating an exercise by @Lyynnnx in #12805
  • Programming exercises: Fix the customized build configuration using the wrong build template for non-Java exercises by @matyasht in #12876
  • Quiz exercises: Show the correct participation status for students by @laadvo in #12842
  • Quiz exercises: Fix "Invalid Input" persisting after deleting and restoring the only question by @MaximilianAnzinger in #12544
  • Quiz exercises: Fix re-uploading deleted drag item images by @Nihad74 in #12884
  • Exam mode: Fix an issue when importing an entire exam with a programming exercise by @matyasht in #12792
  • Exam mode: Make the exam checklist also consider failed exercise preparations by @matyasht in #12777
  • Exam mode: Fix the exam checklist wrongly reporting unprepared individual exams after removing a student by @Lyynnnx in #12868
  • Iris: Fix the collapsed exercise side panel for users who opted out of AI features by @Nihad74 in #12852
  • Adaptive learning: Fix a JSON serialization cycle for exercises with competency links by @jaylann in #12795
  • Communication: Fix a visual issue with the announcement dialog by @Lyynnnx in #12799
  • Global search: Exclude channels from search results when communication is disabled by @Lyynnnx in #12839
  • General: Fix practice mode becoming unavailable after the due date by @krusche in #12896
  • General: Fix the "Forgot password" link and spacing on the sign-in page by @krusche in #12890

Development

Server architecture & REST API

  • Extract the notification module from communication by @krusche in #12793
  • Move Jenkins CI code into a separate module by @krusche in #12810
  • Split the programming module into multiple smaller modules by @krusche in #12813
  • Declutter the core module by relocating feature code to its owning modules by @krusche in #12816
  • Migrate account, course, and admin REST controllers to a module-name URL prefix by @krusche in #12811
  • Enforce a consistent REST API path convention with backward-compatible legacy aliases by @krusche in #12822
  • Migrate tutorial group REST responses to DTOs by @WoH in #12687
  • Change complaint endpoints to use DTOs by @LeZhen1105 in #12395
  • Migrate competency and Iris REST endpoints to DTOs by @dogusaytok in #12726
  • Use DTOs for text, online, and exercise units by @WoH in #12787
  • Fix a Jackson cyclic-reference race by returning cycle-free DTOs by @krusche in #12791
  • Add an optional courseIds filter to the global search lecture endpoint by @Nayer-kotry in #12803
  • Convert unidirectional @OrderColumn to bidirectional mappedBy for quiz entities by @krusche in #12640
  • Add an entity usage architecture test to all modules and fix detection false positives by @krusche in #12804
  • Strengthen REST best-practice architecture rules (authorization, methods, naming, bodies) by @krusche in #12855
  • Improve input validation for communication requests by @krusche in #12901
  • Remove the obsolete faqEnabled property from courses by @anian03 in #12841
  • Enforce non-empty DTO fields again by @krusche in 3ab9300
  • Update README after recent module changes by @krusche in 38449d8

Client modernization (Angular signals, PrimeNG, Vitest)

  • Split the shared client module into foundation, shared-ui, and editor by @krusche in #12814
  • Migrate the foundation client module to signals and Vitest by @krusche in #12823
  • Migrate shared-ui to signals and PrimeNG dialogs by @krusche in #12825
  • Migrate the editor client module to signals, Vitest, and PrimeNG by @krusche in #12843
  • Migrate the programming client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @krusche in #12859
  • Migrate the programming shared client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @FelixTJDietrich in #12706
  • Migrate the remaining exercise components and the student code editor to Angular 21 signals by @FelixTJDietrich in #12857
  • Migrate exercise client code to Angular 21 by @bassner in #12837
  • Migrate the client exercise module to Vitest by @maximiliansoelch in #12016
  • Migrate the exercise team client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @bassner in #12693
  • Migrate the exercise result client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @bassner in #12697
  • Migrate the course sidebar and participant scores to Angular 21 signals and PrimeNG by @bassner in #12827
  • Migrate the admin client module off ng-bootstrap to PrimeNG by @krusche in #12845
  • Migrate the plagiarism module to Angular 21 PrimeNG dialogs and Vitest by @bassner in #12830
  • Migrate atlas competency dialogs to Angular 21 PrimeNG by @bassner in #12833
  • Migrate quiz module dialogs to Angular 21 PrimeNG by @bassner in #12828
  • Migrate account/user memiris dialogs to PrimeNG by @bassner in #12818
  • Migrate the modeling editor help dialog to PrimeNG by @bassner in #12819
  • Migrate localci build-agent dialogs to PrimeNG by @bassner in #12820
  • Migrate range-slider, dashboards, and image-cropper to Angular signals by @krusche in #12667
  • Migrate signal stragglers (localvc, logos) and refresh the ESLint signal allowlist by @krusche in #12844
  • Migrate logos, sharing, app-shell, and iris/shared Jest specs to Vitest by @bassner in #12817
  • Lock course and editor into the signal-migration ESLint allowlist by @krusche in #12851
  • Forbid legacy Angular decorators in test files of migrated modules by @krusche in #12856
  • Discourage ngOnChanges client-wide and migrate the pure derived-state cases to computed() by @krusche in #12854

Testing, CI & dependencies

New Contributors

Full Changelog: 9.3...9.4