CI/CD Pipeline / deploy (push) Failing after 1m23sDetails
CI/CD Pipeline / rollback (push) Has been skippedDetails
CI/CD Pipeline / smoke-tests (push) Has been skippedDetails
- Runner now uses act-compatible Ubuntu image
- SSH and curl preinstalled, no need to install packages
- Simplified workflow steps
- All heavy work done via SSH on K3s server
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI/CD Pipeline / deploy (push) Failing after 21sDetails
CI/CD Pipeline / smoke-tests (push) Has been skippedDetails
CI/CD Pipeline / rollback (push) Has been skippedDetails
- No checkout needed (code pulled via git on K3s server)
- Use passwordless sudo on K3s server
- Simplified smoke tests to single step
- Reduced workflow complexity
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI/CD Pipeline / build-test-deploy (push) Failing after 58sDetails
CI/CD Pipeline / rollback (push) Has been skippedDetails
CI/CD Pipeline / smoke-tests (push) Has been skippedDetails
Strategy change:
- Tests run directly on K3s server via SSH (has dotnet installed)
- Docker build/import also on K3s server
- Runner only handles SSH connection and smoke tests (lightweight)
- Smoke tests run from runner (just curl commands)
- Auto-rollback if smoke tests fail
This avoids OOMKilled issues in the runner container.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive testing documentation to README:
- Test commands for backend (dotnet test)
- Test commands for E2E (playwright)
- Test coverage summary table
- Auth handler tests breakdown
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Migrate QA documentation from docs/qa-testing/ to docs/qa/:
- Remove obsolete screenshots from previous testing rounds
- Remove outdated DEFECTOS-QA.md (issues have been resolved)
- Add new QA report for student activation flow testing
- Reorganize qa-testing folder with updated structure
New documentation:
- QA-REPORT-STUDENT-ACTIVATION-FLOW.md: comprehensive test report
covering activation UI, code validation, expiry handling,
and admin manual activation features
This cleanup removes 30+ obsolete screenshots and consolidates
QA documentation in a cleaner structure.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated PlantUML diagrams and regenerated SVG/PNG exports:
01-use-cases: Add activation and admin use cases
02-domain-model: Add activation fields to Student entity
03-sequence-enrollment: Include activation check in flow
04-components: Add activation and admin components
05-entity-relationship: Add activation columns to Student table
06-state-enrollment: Add inactive/pending states
07-deployment: Update for current infrastructure
08-c4-context: Add admin actor and activation system
All diagrams validated and exported in both SVG and PNG formats.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend:
- Admin DTOs for student management views
- Admin queries for listing all students with activation status
Frontend:
- AdminDashboard: overview of all students
- StudentManagement: CRUD operations with activation controls
- Manual activation toggle for administrators
- Filter by activation status
- Bulk operations support
This enables administrators to manage student accounts,
manually activate accounts, and monitor registration status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Frontend implementation for student account activation:
Components:
- ActivateComponent: 6-digit code input with validation
- Auto-redirect to dashboard on successful activation
- Resend code functionality with cooldown timer
Services:
- AuthService: add activateAccount and regenerateCode methods
- StudentService: expose activation status
- GraphQL mutations for activation endpoints
Routing:
- /activate route with guard for unauthenticated users
- Redirect inactive users to activation page after login
Improvements:
- LoginComponent: check activation status and redirect accordingly
- StudentFormComponent: show activation status in admin view
- StudentDashboard: handle activation state
- AppComponent: global activation status check
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI/CD Pipeline / test (push) Failing after 1m18sDetails
CI/CD Pipeline / deploy (push) Has been skippedDetails
CI/CD Pipeline / smoke-tests (push) Has been skippedDetails
CI/CD Pipeline / rollback (push) Has been skippedDetails
Add activation-related properties to Student entity:
- IsActive: boolean flag for account activation status
- ActivationCode: 6-digit code for email verification
- ActivationCodeExpiry: expiration timestamp for the code
Add repository method GetByActivationCodeAsync for code lookup.
These changes support the new student self-registration flow where
accounts require email verification before accessing the system.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI/CD Pipeline / test (push) Failing after 45sDetails
CI/CD Pipeline / deploy (push) Has been skippedDetails
CI/CD Pipeline / smoke-tests (push) Has been skippedDetails
CI/CD Pipeline / rollback (push) Has been skippedDetails
Changes:
- Runner now uses mcr.microsoft.com/dotnet/sdk:9.0 image
- Simplified test job (build + unit tests only)
- Deploy uses git pull instead of rsync for faster updates
- Added smoke tests in production:
- Health check API
- Health check Frontend
- GraphQL endpoint validation
- Database connectivity check
- Subjects query test
- Auto-rollback if smoke tests fail
Flow: test -> deploy -> smoke-tests -> (rollback on failure)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Test and Deploy to k3s / test (push) Failing after 1m17sDetails
Test and Deploy to k3s / deploy (push) Has been skippedDetails
- Add test job that runs Domain, Application, and Integration tests
- Deploy job now depends on test job (needs: test)
- Fix namespace from student-enrollment to academia
- Update sync path from student-enrollment to academia
- Always apply kustomize before rollout restart
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deploy to k3s / deploy (push) Failing after 20sDetails
- Add GIT_USER, GIT_PASS, GIT_REMOTE_URL variables
- Make auto-login mandatory rule
- Reference ~/.secrets/credentials.env for all auth
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deploy to k3s / deploy (push) Failing after 27sDetails
- Document ~/.secrets/credentials.env usage
- Add auto-login examples for Gitea, API, and K3s
- Update namespace from student-enrollment to academia
- Remove CLAUDE.md from .gitignore to track in repo
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deploy to k3s / deploy (push) Failing after 25sDetails
- Rename images from academia-* to student-* for consistency
- Update DEPLOYMENT.md with latest deployment procedures
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deploy to k3s / deploy (push) Failing after 27sDetails
- Single job instead of 3 (no artifact overhead)
- Build directly on k3s node (avoids image transfer)
- Parallel Docker builds with BuildKit
- Auto-create namespace if missing
- Automatic rollback on failure
- Health check via domain
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Deploy to k3s / build-api (push) Failing after 32sDetails
Build and Deploy to k3s / build-frontend (push) Failing after 30sDetails
Build and Deploy to k3s / deploy (push) Has been skippedDetails
- Add linux-musl-x64 runtime identifier for Alpine builds
- Install ICU libs for SQL Server globalization support
- Fix nginx upstream to use k8s service name (student-api)
- Sync package-lock.json with package.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update Dockerfile.api to use dotnet/sdk:10.0-alpine
- Update runtime to aspnet:10.0-alpine
- Add deploy-k3s.sh script for manual deployments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and Deploy to k3s / build-api (push) Failing after 2m53sDetails
Build and Deploy to k3s / build-frontend (push) Failing after 34sDetails
Build and Deploy to k3s / deploy (push) Has been skippedDetails
- Add regression test report with 14 passed tests
- Verify DEF-001 and DEF-002 fixes
- Update recommendations with CI/CD deployment info
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Make name and email required in registration form
- Add StudentDashboard component with enrolled subjects and program info
- Implement role-based navigation (admin sees management, student sees portal)
- Add adminGuard for restricting student management routes
- Redirect to /dashboard after login/register instead of /students
- Add navigation links: Mi Portal, Mis Materias, Companeros
Fulfills test requirements:
- Students can register online (punto 1)
- Enroll in up to 3 subjects/9 credits (puntos 2-5)
- Cannot have same professor twice (punto 7)
- View classmates by subject - names only (puntos 8-9)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add centralized ValidationPatterns with XSS protection and name regex
- Add query validators (GetClassmates, GetStudentById, GetStudentsPaged, GetAvailableSubjects)
- Add ClassmateInfo read model for optimized query projections
- Add test builders (Student, Subject, Professor, Enrollment) for cleaner tests
- Improve repository interfaces with XML documentation
- Refactor EnrollmentRepository for better performance
- Update EnrollmentDomainService with additional validation helpers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add AuthService with login/logout/register functionality
- Create auth guard for protected routes
- Create guest guard for login/register pages
- Add auth interceptor to attach JWT tokens
- Create login page with form validation
- Create register page with student profile option
- Update app component with user menu and logout
- Configure routes with authentication guards
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add User entity with roles (Admin, Student)
- Create JWT service for token generation/validation
- Create password service using PBKDF2
- Add login and register GraphQL mutations
- Apply [Authorize] attributes to protected mutations
- DeleteStudent requires Admin role
- UpdateStudent/Enroll/Unenroll require owner or admin
- Add admin user creation on startup
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive QA report with 11 test cases and screenshots
- Document DEF-001 bug analysis, solutions, and resolution
- Add dev-start.sh script for faster development server startup
- Include recommendations for UX, technical, and quality improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change edit button from <button> to <a> for proper routerLink binding
- Replace ngOnInit with effect() to handle input signal timing correctly
- The route param 'id' was not available during ngOnInit lifecycle
Fixes DEF-001: "Estudiante no encontrado" error when clicking edit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change ESLint no-explicit-any from 'warn' to 'error'
- Replace 'any' with 'unknown as string' in initials.pipe.spec
- Fix StudentService tests to handle Apollo watchQuery multiple emissions
- Add filter for loading state before asserting in tests
Stricter type checking improves code quality.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive JSDoc to StudentService and EnrollmentService
- Replace magic numbers with ENROLLMENT_LIMITS constants
- Use RESTRICTION_TRANSLATIONS for enrollment messages
- Update CreditsPipe to use MAX_CREDITS constant
- Expose maxCredits and maxSubjects in enrollment component
This improves code maintainability and developer experience.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Test all GraphQL error codes (MAX_ENROLLMENTS, SAME_PROFESSOR, etc.)
- Test network errors with different status codes
- Test validation errors with field details
- Test HTTP error handling (500, 0, 400)
- Test unknown/null/undefined error handling
- Test notification display with suggestions
Increases code coverage for the error handling layer.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create emailValidator with stricter pattern than Angular's built-in
- Create nameValidator with configurable minLength, maxLength, allowNumbers
- Support for Spanish characters (accents, ñ, ü)
- Export validators from shared module
- Add JSDoc documentation with usage examples
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create enrollment.constants.ts with MAX_SUBJECTS, MAX_CREDITS, CREDITS_PER_SUBJECT
- Create error-messages.constants.ts with ERROR_CODES and RESTRICTION_TRANSLATIONS
- Remove empty folders: core/state, shared/directives, features/dashboard
- Use 'as const' for type-safe constants
This improves maintainability by having a single source of truth for business rules.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create favicon.svg with blue "S" logo matching app branding
- Update index.html to reference favicon.svg instead of favicon.ico
- Add favicon.svg to angular.json assets configuration
Fixes DEF-004: Browser was showing 404 error for missing favicon.ico
in the console.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use ternary operator to display correct singular/plural form:
- "1 compañero" (singular) when count === 1
- "X compañeros" (plural) otherwise
Fixes DEF-003: Page incorrectly showed "1 compañeros" instead of
"1 compañero" when there was exactly one classmate.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add translateReason() method to convert API messages to Spanish:
- "Already enrolled" -> "Ya inscrito"
- "Already have a subject with this professor" -> "Ya tienes una materia con este profesor"
- "Maximum 3 subjects reached" -> "Máximo 3 materias alcanzado"
Apply translation to both warning text and tooltip.
Fixes DEF-002: Messages were displaying in English instead of Spanish,
breaking UI language consistency.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increase memory limit from 1Gi to 1.5Gi
- Increase MSSQL_MEMORY_LIMIT_MB from 768 to 1024
- Increase liveness probe initialDelaySeconds to 120
- Increase failureThreshold to 5 for more tolerance
- Increase readiness probe timeouts
Fixes DEF-001: SQL Server was crashing with Exit Code 137 (OOMKilled)
due to insufficient memory allocation for SQL Server 2022 Express.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- StudentEnrollment.sln with all project references
- Directory.Build.props for shared build settings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Environment:
- .env.example template with all configuration variables
- Database, API, GraphQL, and frontend settings
Documentation:
- Architecture Decision Records (ADR-001 to ADR-004)
- Deployment guide with Docker and K8s instructions
- OWASP security checklist
- Code review checklist
- Activity plan and deliverables
Architecture diagrams (PlantUML):
- Use cases, domain model, sequence diagrams
- Component, ER, state, and deployment diagrams
- C4 context diagram
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Docker:
- Multi-stage Dockerfile for API (.NET 10)
- Multi-stage Dockerfile for frontend (Angular + Nginx)
- docker-compose.yml with resource optimization
- Nginx reverse proxy configuration
- Health checks for all services
Kubernetes (k3s):
- Namespace and ConfigMap
- SQL Server StatefulSet with PVC
- API Deployment with HPA
- Frontend Deployment
- Services and Ingress
- Network policies for security
- Secrets management
Resource optimization:
- SQL Server Express with 1GB RAM limit
- API with 512MB limit
- Frontend with 128MB limit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Domain Tests:
- StudentTests: entity creation and validation
- EmailTests: value object validation
- EnrollmentDomainServiceTests: business rules
Application Tests:
- EnrollStudentCommandTests: enrollment scenarios
- Max 3 subjects validation
- Same professor constraint
Uses xUnit, Moq, and FluentAssertions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>