Skip to content

Add Classroom browser E2E and accessibility coverage - #308

Merged
MajorIncident merged 101 commits into
mainfrom
feature/classroom-browser-e2e
Oct 6, 2026
Merged

MajorIncident merged 101 commits into
mainfrom
feature/classroom-browser-e2e

Conversation

@MajorIncident

@MajorIncident MajorIncident commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Program / issues

Closes #296
Closes #279

Outcome

Adds one deterministic real-browser quality layer for Standalone, Student, and Instructor behavior without depending on Vercel feature previews or production credentials.

The final browser matrix covers:

  • first-run experience selection and accessibility;
  • Standalone input -> summary -> persistence/reload;
  • Templates-only Standalone resources;
  • real Save to File -> mutate -> Load from File round trip, including Intake-mode restoration;
  • mobile Standalone and Classroom entry smoke;
  • Student class join/resume;
  • same-team multi-browser synchronization and cross-workspace isolation;
  • Instructor roster navigation, workspace switching, read-only observation, and resume;
  • Instructor coaching -> Student read-only feedback -> changed-since-review;
  • protected Case Study unauthorized catalog/payload rejection and authorized apply flow;
  • invalid authority, expired Student resume, and Student non-enumeration;
  • serious/critical axe checks and uncaught-page-error protection on covered journeys.

Browser execution contract

  • Playwright 1.63 + axe 4.13.
  • Desktop Chromium + Pixel 7 projects.
  • scripts/serve-browser-tests.mjs provides a deterministic local HTTP/API fixture.
  • Stateful Classroom fixtures are isolated by spec/project/retry so fully parallel runs cannot share mutable workspace/coaching state.
  • Traces/screenshots are retained only on failure.
  • Normal PR validation does not depend on Vercel preview availability or build quota.

Required CI decision

Browser regression is required, not advisory.

The existing branch-protected tests status now:

  1. runs npm run quality;
  2. installs Chromium;
  3. runs npm run test:browser.

This preserves the existing protected status context rather than requiring a repository-rules migration. The separate Browser E2E (manual) workflow remains available only for focused diagnostics.

Final documented head: eba5f5139195f9df9de54f25093ed80f5b01e064.

Validation on the final head:

  • tests / CI: green, including 22 browser tests passed / 6 intentional project-scoped skips / 0 failed;
  • CodeQL: green;
  • Dependency Review: green;
  • Template Manifest Guard: green;
  • PR review threads: none;
  • compare to main: 101 ahead / 0 behind;
  • changed files are confined to browser infrastructure/tests, browser-discovered accessibility/runtime fixes, CI integration, and supporting documentation.

Product fixes discovered by real-browser coverage

The suite found and protected fixes for:

  • resource chooser ARIA structure;
  • Apply-resource contrast;
  • Student admission layout interception;
  • footer/resource/action/presence contrast;
  • closed Templates drawer inertness;
  • invalid generic-container aria-readonly;
  • collaboration presence badge contrast;
  • deterministic fixture isolation under fully-parallel Playwright execution.

Guardrails

  • Node/jsdom remains the fast canonical module/API layer.
  • Standalone remains backend-optional.
  • Browser fixtures contain no production credentials/secrets.
  • Protect Classroom Case Study delivery #307 protected Case Study boundaries remain intact.
  • Current class+assignment-code Student admission is transitional; tests protect authorization/non-enumeration without making that UX permanent.

Cold restart / next product direction

Read docs/classroom-workstream.md, docs/classroom-roadmap.md, and docs/testing-guidelines.md.

After this PR:

  1. Classroom follow-on: Instructor-run live class, roster, and dynamic team management #312 — Instructor-run live class, one-code Student admission, waiting/late roster, accessible team formation/reassignment, automatic workspace switching, and high-signal team monitoring.
  2. Classroom follow-on: Instructor-orchestrated case simulation and staged debrief #313 — Instructor-orchestrated staged Case Study simulation, progressive protected content release, pause/debrief/advance, and case reference beside Intake.

#313 should build on #312 rather than bypassing the live-class/team-management substrate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant