Fix opened: spikersoft-backend PR #19. Extracts a single LessonGradingRuntimeExtensions predicate used by both GET /attempt and POST /complete-tutorial (so they can't drift), and `complete-tu…
Resolved. Both halves are now merged to master:
- Backend: spikersoft-backend PR #17 — opt-in
browserGrading=trueonGET /Lessons/{n}/attempt, persists the C# attempt state under the issued…
Frontend wiring opened: spikersoft-angular PR #77. The C# runner now fetches GET /Lessons/{n}/attempt?browserGrading=true when online + In-Browser Compile, grades the server-issued state in…
Correction: reopening. Backend PR #17 landed the backend half (opt-in browserGrading flag on GET /Lessons/{n}/attempt), but the **frontend follow-up this ticket lists as "required to close the…
Resolved in spikersoft-backend PR #17 (merged to master): server-side verification of C# in-browser compile via opt-in browser-grading attempts (awards skills + enables cross-device sync). Closing.
Resolved in spikersoft-angular PR #75 (merged to master). C# local-grading (In-Browser Compile) lesson completion is now persisted/synced so it survives a force reload instead of reverting. Closing.
Resolved in spikersoft-angular PR #76 (merged to master). Added a pattern validator (^[a-zA-Z0-9._-]+$) to the username control so spaces (and other disallowed characters) are rejected, with…
Resolved in spikersoft-angular PR #76 (merged to master). Added a password complexity validator requiring at least one uppercase letter, one lowercase letter, and one special character (length…
Resolved in spikersoft-angular PR #76 (merged to master). The WEAK/MEDIUM/STRONG password-strength label is now rendered through Transloco (registration.password.strength.*) with EN/ES…
Resolved in spikersoft-angular PR #76 (merged to master). The Basic Info step now clears the availability error banner (errorMessage) as soon as the user edits the username or email field, so…