Skip to content

Release 0.7.12

Choose a tag to compare

@github-actions github-actions released this 10 Jan 21:47
· 58 commits to main since this release
1a5506c

Release Notes - Paideia LMS v0.7.12

Release Date: January 10, 2026
Version: 0.7.12
Type: Feature Enhancement, Code Cleanup, Testing
Impact: Medium - Adds ability to remove quiz answers, removes deprecated functions, and improves test coverage
Changelog: 0087

Overview

Paideia LMS v0.7.12 introduces the ability for students to remove answers from quiz questions, providing better control over their quiz submissions. This release also includes significant code cleanup by removing deprecated functions and comprehensive test coverage improvements. The architecture has been simplified by eliminating local form state management, making all quiz answer state server-managed for better consistency and reliability.


New Features

🗑️ Quiz Answer Removal

Enhancement: Students can now manually remove answers from quiz questions, effectively marking questions as unanswered.

What Changed:

  • New Remove Functionality: Added ability to remove answers from quiz questions via a remove button on the "Saved" badge
  • Server Action: New unanswerQuestion action allows removing answers from in-progress quiz submissions
  • UI Integration: Remove button appears in the "Saved" badge when answers are saved
  • Visual Feedback: Loading state shown during answer removal operation

User Experience:

  • ✅ One-click answer removal directly from the question card
  • ✅ Clear visual indication with "Saved" badge that includes remove button
  • ✅ Useful for changing answers or clearing mistakes
  • ✅ Only works for in-progress quiz attempts (cannot modify completed submissions)

Technical Details:

  • New backend function tryRemoveAnswerFromQuizQuestion performs the reverse operation of tryAnswerQuizQuestion
  • Validates submission status, question existence, and time limit constraints
  • Idempotent behavior: returns success if answer doesn't exist (nothing to remove)
  • Uses same error handling patterns as other quiz submission functions

Code Quality Improvements

🧹 Deprecated Function Removal

Enhancement: Removed deprecated quiz submission management functions to streamline the codebase.

What Changed:

  • Removed tryCreateQuizSubmission: Eliminated deprecated function and all associated test cases
  • Removed tryUpdateQuizSubmission: Eliminated deprecated function marked with @deprecated comment
  • Simplified Codebase: Reduced code complexity by removing unused functionality
  • Updated Tests: All tests now use current functions (tryStartQuizAttempt, tryAnswerQuizQuestion)

Benefits:

  • ✅ Cleaner codebase with less maintenance burden
  • ✅ Reduced confusion from deprecated functions
  • ✅ Better alignment with current architecture patterns
  • ✅ Improved code clarity and maintainability

Architecture Improvements

🏗️ Server-Managed State

Enhancement: Eliminated local form state management in favor of server-managed state for quiz answers.

What Changed:

  • Removed Local Form State: Eliminated useForm and form state management from quiz components
  • Server-Managed State: All answer state is now managed by the server
  • Simplified Components: Components receive data directly as props instead of functions
  • Eliminated Prop Drilling: Moved useAnswerQuizQuestion hook closer to usage in QuestionCard component

Component Changes:

  • QuestionCard: Now receives answer as direct prop instead of getAnswer function
  • QuizNavigation: Now receives answers object directly instead of getAnswer function
  • use-quiz-form.ts: Simplified to use server state directly, removed form management
  • Removed Callbacks: Eliminated onAnswerSave callback props throughout component hierarchy

Benefits:

  • ✅ Better consistency between server and client state
  • ✅ Reduced complexity from state synchronization
  • ✅ Simpler component interfaces
  • ✅ Automatic UI updates via React Router revalidation

UI Enhancements

🎨 Saved Answer Badge Component

Enhancement: New SavedAnswerBadge component provides visual feedback and answer removal functionality.

What Changed:

  • Modern Badge Component: Uses Mantine Badge component with rightSection for remove button
  • Visual Indicator: Green badge with light variant indicates saved state
  • Remove Button: ActionIcon with IconX appears in badge's right section
  • Conditional Display: Remove button only appears when not in readonly mode and submission is available
  • Loading State: Shows loading indicator during answer removal operation

User Experience:

  • ✅ Clear visual indication when answer is saved
  • ✅ Intuitive one-click answer removal
  • ✅ Proper event handling prevents unwanted bubbling
  • ✅ Consistent with other UI patterns in the application

Testing Improvements

✅ Comprehensive Test Coverage

Enhancement: Added comprehensive test coverage for new functionality and fixed existing test issues.

New Test Cases:

  • ✅ Successful answer removal from quiz question
  • ✅ Idempotent behavior when removing non-existent answer
  • ✅ Permission validation (only in-progress submissions can be modified)
  • ✅ Question validation (invalid question ID handling)

Test Fixes:

  • ✅ Fixed test isolation issues with in-progress submissions
  • ✅ Fixed pagination test to handle submission conflicts
  • ✅ Fixed listing test to ensure data exists before testing
  • ✅ Added proper cleanup code for all answer removal tests

Benefits:

  • ✅ Reliable test suite ensures functionality works correctly
  • ✅ Better test isolation prevents flaky tests
  • ✅ Comprehensive coverage catches edge cases
  • ✅ Improved confidence in code changes

Summary

This release delivers significant improvements to quiz functionality and code quality:

New Features

  • ✅ Students can remove answers from quiz questions
  • ✅ Modern UI with "Saved" badge and remove button
  • ✅ Better control over quiz submissions

Code Quality

  • ✅ Removed deprecated functions reduces complexity
  • ✅ Server-managed state improves consistency
  • ✅ Simplified component interfaces
  • ✅ Eliminated prop drilling

Architecture

  • ✅ All quiz answer state is server-managed
  • ✅ Components work directly with server state
  • ✅ Better encapsulation with hooks used where needed
  • ✅ Reduced component coupling

Breaking Changes

None

This release maintains full backward compatibility:

  • ✅ All existing quiz functionality works exactly as before
  • ✅ No API changes
  • ✅ No configuration changes required
  • ✅ No database migrations needed
  • ✅ No user-facing breaking changes

Note: The deprecated functions tryCreateQuizSubmission and tryUpdateQuizSubmission have been removed. If you have custom code using these functions, you'll need to update it to use tryStartQuizAttempt and tryAnswerQuizQuestion instead.


Upgrade Instructions

From v0.7.11 or Earlier

  1. Upgrade to v0.7.12:

    git pull origin next  # or your branch
  2. Install dependencies:

    bun install
  3. Start the server:

    bun run dev

No Additional Steps Required:

  • No database migrations needed
  • No configuration changes required
  • No manual data migration needed
  • Everything works automatically after upgrade

For Developers Using Deprecated Functions:
If you have custom code using tryCreateQuizSubmission or tryUpdateQuizSubmission, you'll need to migrate:

  1. Replace tryCreateQuizSubmission:

    // Old (deprecated)
    await tryCreateQuizSubmission({ ... });
    
    // New
    await tryStartQuizAttempt({ ... });
  2. Replace tryUpdateQuizSubmission:

    // Old (deprecated)
    await tryUpdateQuizSubmission({ ... });
    
    // New - use tryAnswerQuizQuestion for individual answers
    await tryAnswerQuizQuestion({ ... });

What's Next

This release sets the foundation for future quiz enhancements:

  • Better User Control: Answer removal provides students with more flexibility
  • Improved Architecture: Server-managed state enables better features
  • Cleaner Codebase: Removed deprecated code makes future development easier
  • Continued Improvements: Ongoing enhancements to quiz functionality

The answer removal functionality and architecture improvements in this release make the quiz module more user-friendly and maintainable, setting the stage for more efficient feature development going forward.


Thank You

Thank you for using Paideia LMS. This release adds essential functionality for students to manage their quiz answers while improving code quality and maintainability. The upgrade is straightforward and requires no additional steps beyond the standard update process.

For questions, issues, or contributions, please visit our GitHub repository: https://github.com/paideia-lms/paideia


Complete Changelog Reference

This release includes the following improvements:

New Features

  • Quiz Answer Removal: Students can remove answers from quiz questions
  • Saved Answer Badge: Modern UI component with remove functionality
  • Server Action: New unanswerQuestion action for answer removal

Code Quality

  • Deprecated Function Removal: Removed tryCreateQuizSubmission and tryUpdateQuizSubmission
  • Test Coverage: Comprehensive test coverage for new functionality
  • Test Fixes: Fixed test isolation and stability issues

Architecture Improvements

  • Server-Managed State: Eliminated local form state management
  • Component Simplification: Simplified component interfaces
  • Prop Drilling Elimination: Moved hooks closer to usage

UI Enhancements

  • SavedAnswerBadge Component: New component for answer state indication
  • Remove Button: One-click answer removal functionality
  • Visual Feedback: Loading states and proper event handling

Previous Release: See v0.7.11 Release Notes for previous features.