Release 0.7.12
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
unanswerQuestionaction 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
tryRemoveAnswerFromQuizQuestionperforms the reverse operation oftryAnswerQuizQuestion - 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@deprecatedcomment - 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
useFormand 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
useAnswerQuizQuestionhook closer to usage inQuestionCardcomponent
Component Changes:
QuestionCard: Now receivesansweras direct prop instead ofgetAnswerfunctionQuizNavigation: Now receivesanswersobject directly instead ofgetAnswerfunctionuse-quiz-form.ts: Simplified to use server state directly, removed form management- Removed Callbacks: Eliminated
onAnswerSavecallback 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
Badgecomponent withrightSectionfor remove button - Visual Indicator: Green badge with light variant indicates saved state
- Remove Button:
ActionIconwithIconXappears 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
-
Upgrade to v0.7.12:
git pull origin next # or your branch -
Install dependencies:
bun install
-
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:
-
Replace
tryCreateQuizSubmission:// Old (deprecated) await tryCreateQuizSubmission({ ... }); // New await tryStartQuizAttempt({ ... });
-
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
unanswerQuestionaction for answer removal
Code Quality
- Deprecated Function Removal: Removed
tryCreateQuizSubmissionandtryUpdateQuizSubmission - 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.