Skip to content

fix(student): repair end-to-end learning flows - #305

Merged
projectamazonph merged 16 commits into
mainfrom
fix/student-facing-full-repair
Aug 11, 2026
Merged

fix(student): repair end-to-end learning flows#305
projectamazonph merged 16 commits into
mainfrom
fix/student-facing-full-repair

Conversation

@projectamazonph

@projectamazonph projectamazonph commented Aug 10, 2026

Copy link
Copy Markdown
Owner

What changed

  • Completed entitlement-aware enrollment, lesson progress, canonical quiz submission, simulator challenge gating, and live-class access.
  • Connected pricing tiers through signup and checkout, with one authoritative early-bird total.
  • Added purchase history, policy-enforced refund requests, certificate listing, and complete account data export.
  • Repaired student error states, action exception recovery, mobile navigation focus management, landmarks, nested controls, configured URLs, and authentication disclosure.
  • Fixed public-page contrast, heading order, responsive imagery, auth landmarks, and pricing outage handling.
  • Converted Axe and Lighthouse accessibility/SEO checks from soft warnings into hard release gates.
  • Updated the verified feature audit, changelog, and STORY-104.

Validation

  • TypeScript: pass
  • ESLint: pass
  • Vitest: 3,795 passed, 2 skipped
  • Coverage: 82.17% statements, 76.69% branches, 82.83% functions, 83.21% lines
  • Next.js production build: pass (94 routes)
  • Diff and staged formatting checks: pass
  • Secret-pattern diff scan: pass; remote gitleaks is authoritative

Remaining remote gate

This PR remains a draft until GitHub Actions, the Vercel preview, hard Axe checks, and hard Lighthouse assertions finish successfully.

@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
amph-v2-greenfield Ready Ready Preview Aug 11, 2026 8:20am

@ecc-tools

ecc-tools Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 258 files, which is 158 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 05b5fa71-984a-4705-96d6-b2c36b787475

📥 Commits

Reviewing files that changed from the base of the PR and between ad04612 and c65cef2.

📒 Files selected for processing (258)
  • .github/workflows/ci.yml
  • .lighthouserc.json
  • CHANGELOG.md
  • FEATURES.md
  • docs/STUDENT-FEATURE-GAP-ANALYSIS.md
  • docs/stories/STORY-104.md
  • prisma/schema.prisma
  • src/app/actions/__tests__/checkout.action.test.ts
  • src/app/actions/__tests__/enroll.test.ts
  • src/app/actions/__tests__/login.action.test.ts
  • src/app/actions/__tests__/markLessonComplete.action.test.ts
  • src/app/actions/__tests__/requestRefund.action.test.ts
  • src/app/actions/__tests__/submitQuizAttempt.action.test.ts
  • src/app/actions/checkout.action.ts
  • src/app/actions/enroll.ts
  • src/app/actions/liveClassRsvp.action.ts
  • src/app/actions/login.action.ts
  • src/app/actions/markLessonComplete.action.ts
  • src/app/actions/markLiveClassRecordingWatched.action.ts
  • src/app/actions/requestRefund.action.ts
  • src/app/actions/startSimulatorAttempt.action.ts
  • src/app/actions/submitQuizAttempt.action.ts
  • src/app/admin-login/AdminLoginForm.module.css
  • src/app/admin-login/AdminLoginForm.tsx
  • src/app/admin-login/loading.tsx
  • src/app/admin/audit-log/page.module.css
  • src/app/admin/courses.module.css
  • src/app/admin/courses/[id]/edit/page.module.css
  • src/app/admin/courses/[id]/page.module.css
  • src/app/admin/courses/new/page.module.css
  • src/app/admin/courses/page.module.css
  • src/app/admin/error.tsx
  • src/app/admin/layout.tsx
  • src/app/admin/payments/page.module.css
  • src/app/admin/refunds/page.module.css
  • src/app/admin/resources/page.module.css
  • src/app/admin/settings/page.module.css
  • src/app/admin/users/page.module.css
  • src/app/api/auth/signup/route.ts
  • src/app/api/quizzes/[quizId]/attempt/__tests__/processQuizAttempt.test.ts
  • src/app/api/quizzes/[quizId]/attempt/processQuizAttempt.ts
  • src/app/certificates/[hash]/loading.tsx
  • src/app/certificates/[hash]/not-found.tsx
  • src/app/certificates/[hash]/page.module.css
  • src/app/certificates/[hash]/page.tsx
  • src/app/certificates/loading.tsx
  • src/app/certificates/page.tsx
  • src/app/checkout/CheckoutForm.tsx
  • src/app/checkout/__tests__/page-wrapper.test.tsx
  • src/app/checkout/__tests__/page.test.tsx
  • src/app/checkout/checkout-status.module.css
  • src/app/checkout/failed/__tests__/page.test.tsx
  • src/app/checkout/failed/loading.tsx
  • src/app/checkout/failed/page.tsx
  • src/app/checkout/loading.tsx
  • src/app/checkout/page.tsx
  • src/app/checkout/success/__tests__/page.test.tsx
  • src/app/checkout/success/loading.tsx
  • src/app/checkout/success/page.tsx
  • src/app/courses/[slug]/EnrollButton.tsx
  • src/app/courses/[slug]/__tests__/EnrollButton.test.tsx
  • src/app/courses/[slug]/__tests__/page.test.ts
  • src/app/courses/[slug]/lessons/CourseCompleteView.module.css
  • src/app/courses/[slug]/lessons/LessonContent.module.css
  • src/app/courses/[slug]/lessons/LessonContent.tsx
  • src/app/courses/[slug]/lessons/LessonNavButtons.module.css
  • src/app/courses/[slug]/lessons/LessonSidebar.module.css
  • src/app/courses/[slug]/lessons/[lessonId]/loading.tsx
  • src/app/courses/[slug]/lessons/[lessonId]/page.module.css
  • src/app/courses/[slug]/lessons/[lessonId]/page.tsx
  • src/app/courses/[slug]/lessons/[lessonId]/quiz/__tests__/page.test.tsx
  • src/app/courses/[slug]/lessons/[lessonId]/quiz/loading.tsx
  • src/app/courses/[slug]/lessons/[lessonId]/quiz/page.module.css
  • src/app/courses/[slug]/lessons/[lessonId]/quiz/page.tsx
  • src/app/courses/[slug]/loading.tsx
  • src/app/courses/[slug]/not-found.tsx
  • src/app/courses/[slug]/page.module.css
  • src/app/courses/[slug]/page.tsx
  • src/app/courses/[slug]/quizzes/[quizId]/__tests__/page.test.tsx
  • src/app/courses/[slug]/quizzes/[quizId]/loading.tsx
  • src/app/courses/[slug]/quizzes/[quizId]/page.tsx
  • src/app/courses/loading.tsx
  • src/app/courses/page.module.css
  • src/app/courses/page.tsx
  • src/app/dashboard/__tests__/page.test.tsx
  • src/app/dashboard/loading.tsx
  • src/app/dashboard/page.module.css
  • src/app/dashboard/page.tsx
  • src/app/error.tsx
  • src/app/faq/loading.tsx
  • src/app/faq/page.module.css
  • src/app/faq/page.tsx
  • src/app/globals.css
  • src/app/layout.tsx
  • src/app/live-classes/[id]/loading.tsx
  • src/app/live-classes/[id]/page.module.css
  • src/app/live-classes/[id]/page.tsx
  • src/app/live-classes/loading.tsx
  • src/app/live-classes/page.module.css
  • src/app/live-classes/page.tsx
  • src/app/loading.tsx
  • src/app/login/LoginForm.module.css
  • src/app/login/LoginForm.tsx
  • src/app/login/loading.tsx
  • src/app/pricing/__tests__/page.test.tsx
  • src/app/pricing/loading.tsx
  • src/app/pricing/page.module.css
  • src/app/pricing/page.tsx
  • src/app/profile/data/loading.tsx
  • src/app/profile/data/page.tsx
  • src/app/profile/loading.tsx
  • src/app/profile/page.tsx
  • src/app/profile/purchases/loading.tsx
  • src/app/profile/purchases/page.tsx
  • src/app/profile/security/2fa-setup/loading.tsx
  • src/app/profile/security/2fa-setup/page.tsx
  • src/app/profile/security/loading.tsx
  • src/app/profile/security/page.tsx
  • src/app/reset-password/[token]/loading.tsx
  • src/app/reset-password/loading.tsx
  • src/app/reset-password/page.module.css
  • src/app/resources/loading.tsx
  • src/app/resources/page.module.css
  • src/app/resources/page.tsx
  • src/app/signup/SignupForm.tsx
  • src/app/signup/__tests__/page.test.tsx
  • src/app/signup/loading.tsx
  • src/app/signup/page.tsx
  • src/app/signup/signup.module.css
  • src/app/tools/ad-console/loading.tsx
  • src/app/tools/ad-console/page.module.css
  • src/app/tools/bid-elevator/loading.tsx
  • src/app/tools/bid-elevator/page.module.css
  • src/app/tools/bid-elevator/page.tsx
  • src/app/tools/campaign-builder/loading.tsx
  • src/app/tools/campaign-builder/page.module.css
  • src/app/tools/error.tsx
  • src/app/tools/keyword-research/loading.tsx
  • src/app/tools/keyword-research/page.module.css
  • src/app/tools/listing-audit/actions.ts
  • src/app/tools/listing-audit/loading.tsx
  • src/app/tools/listing-audit/page.module.css
  • src/app/tools/loading.tsx
  • src/app/tools/page.module.css
  • src/app/tools/str-triage/loading.tsx
  • src/app/tools/str-triage/page.module.css
  • src/app/verify-email/loading.tsx
  • src/app/verify-email/page.module.css
  • src/app/verify-email/sent/loading.tsx
  • src/app/verify-email/sent/page.module.css
  • src/components/admin/ImpersonationBanner.module.css
  • src/components/auth/ResetConfirmForm.module.css
  • src/components/auth/ResetConfirmForm.tsx
  • src/components/auth/ResetRequestForm.module.css
  • src/components/auth/ResetRequestForm.tsx
  • src/components/courses/QuizPlayer.module.css
  • src/components/courses/QuizPlayer.tsx
  • src/components/courses/ShareCourseButton.tsx
  • src/components/courses/__tests__/QuizPlayer.test.ts
  • src/components/landing/BidElevator.module.css
  • src/components/landing/BidElevator.tsx
  • src/components/landing/Curriculum.module.css
  • src/components/landing/FAQSection.module.css
  • src/components/landing/Footer.module.css
  • src/components/landing/Footer.tsx
  • src/components/landing/Hero.module.css
  • src/components/landing/Hero.tsx
  • src/components/landing/Mentor.module.css
  • src/components/landing/Method.module.css
  • src/components/landing/Pricing.module.css
  • src/components/landing/Proof.module.css
  • src/components/landing/Reveal.tsx
  • src/components/landing/SimulatorSection.module.css
  • src/components/landing/StatsStrip.module.css
  • src/components/landing/Ticker.module.css
  • src/components/landing/Ticker.tsx
  • src/components/landing/TopBar.module.css
  • src/components/landing/TopBar.tsx
  • src/components/landing/WhoFor.module.css
  • src/components/landing/shared.module.css
  • src/components/profile/ExportDataButton.tsx
  • src/components/student/LiveClassRecordingButton.tsx
  • src/components/student/LiveClassRsvpButton.tsx
  • src/components/student/PublicCatalogHeader.module.css
  • src/components/student/StudentShell.tsx
  • src/components/student/StudentSidebar.module.css
  • src/components/tools/BidElevatorForm.module.css
  • src/components/tools/BidElevatorForm.tsx
  • src/components/tools/CampaignBuilderForm.tsx
  • src/components/tools/KeywordResearchForm.module.css
  • src/components/tools/KeywordResearchForm.tsx
  • src/components/tools/ListingAuditForm.module.css
  • src/components/tools/ListingAuditForm.tsx
  • src/components/tools/SimulatorModeToggle.module.css
  • src/components/tools/StrTriageForm.module.css
  • src/components/tools/StrTriageForm.tsx
  • src/components/ui/Badge.module.css
  • src/components/ui/CommandPalette.module.css
  • src/components/ui/MobileNavToggle.module.css
  • src/components/ui/MobileNavToggle.tsx
  • src/components/ui/RouteError.module.css
  • src/components/ui/RouteError.tsx
  • src/components/ui/Skeleton.module.css
  • src/components/ui/__tests__/MobileNavToggle.test.ts
  • src/components/ui/__tests__/RouteError.test.tsx
  • src/composition/container.test.ts
  • src/composition/container.ts
  • src/domain/entities/Enrollment.ts
  • src/domain/entities/Order.ts
  • src/infra/access/TierAccessPolicy.ts
  • src/infra/access/__tests__/TierAccessPolicy.test.ts
  • src/infra/repositories/InMemoryEnrollmentRepository.ts
  • src/infra/repositories/InMemoryPricingTierRepository.ts
  • src/infra/repositories/InMemoryQuizAttemptRepository.ts
  • src/infra/repositories/InMemorySimulatorAttemptRepository.ts
  • src/infra/repositories/PrismaPricingTierRepository.ts
  • src/infra/repositories/PrismaQuizAttemptRepository.ts
  • src/infra/repositories/PrismaSimulatorAttemptRepository.ts
  • src/ports/repositories/IPricingTierRepository.ts
  • src/ports/repositories/IQuizAttemptRepository.ts
  • src/ports/repositories/ISimulatorAttemptRepository.ts
  • src/usecases/AuthorizeLessonAccess.ts
  • src/usecases/CreatePaymentIntent.ts
  • src/usecases/EnrollStudent.ts
  • src/usecases/ExportUserData.ts
  • src/usecases/GetCheckoutSummary.ts
  • src/usecases/ListPricingTiers.ts
  • src/usecases/Login.ts
  • src/usecases/MarkLessonComplete.ts
  • src/usecases/MarkLiveClassRecordingWatched.ts
  • src/usecases/RecordQuizAttempt.ts
  • src/usecases/RequestRefund.ts
  • src/usecases/RsvpLiveClass.ts
  • src/usecases/StartSimulatorAttempt.ts
  • src/usecases/__tests__/AuthorizeLessonAccess.test.ts
  • src/usecases/__tests__/EnrollStudent.test.ts
  • src/usecases/__tests__/ExportUserData.test.ts
  • src/usecases/__tests__/GetCheckoutSummary.test.ts
  • src/usecases/__tests__/ListLiveClassesForStudent.test.ts
  • src/usecases/__tests__/ListPricingTiers.test.ts
  • src/usecases/__tests__/Login.test.ts
  • src/usecases/__tests__/MarkLessonComplete.test.ts
  • src/usecases/__tests__/MarkLiveClassRecordingWatched.test.ts
  • src/usecases/__tests__/RequestRefund.test.ts
  • src/usecases/__tests__/RsvpLiveClass.test.ts
  • src/usecases/__tests__/StartSimulatorAttempt.test.ts
  • tests/architecture/design-token-contract.test.ts
  • tests/architecture/public-a11y-gates.test.ts
  • tests/e2e/a11y.spec.ts
  • tests/integration/quiz-attempt-repository.contract.test.ts
  • tests/unit/composition/container.test.ts
  • tests/unit/usecases/ComposeAttemptFeedback.test.ts
  • tests/unit/usecases/CreatePaymentIntent.test.ts
  • tests/unit/usecases/GradeSimulatorAttempt.test.ts
  • tests/unit/usecases/RecordQuizAttempt.test.ts
  • tests/unit/usecases/SaveSimulatorDecision.test.ts
  • tests/unit/usecases/StartSimulatorAttempt.test.ts
  • tests/unit/usecases/SubmitSimulatorAttempt.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ecc-tools

ecc-tools Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@ecc-tools

ecc-tools Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@projectamazonph
projectamazonph marked this pull request as ready for review August 11, 2026 14:11
Copilot AI lite review requested due to automatic review settings August 11, 2026 14:11
@projectamazonph
projectamazonph merged commit 9096cf4 into main Aug 11, 2026
8 of 9 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@projectamazonph
projectamazonph deleted the fix/student-facing-full-repair branch August 11, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants