Skip to content

Show the registration checklist on the student registration step pages - #6142

Open
willgearty wants to merge 5 commits into
claude/teacher-module-layout-3mgh67from
claude/student-module-layout
Open

willgearty wants to merge 5 commits into
claude/teacher-module-layout-3mgh67from
claude/student-module-layout

Conversation

@willgearty

@willgearty willgearty commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Description

Stacked on #6132: the base is that PR's branch, so this diff shows only the student side. Merge #6132 first.

This brings the #6132 layout to student registration. The registration checklist (with any "Other Registration Requirements") and its progress bar now appear on the student registration main page and on the page of every registration step, so students can see their progress from any step. Only the layout changes; no module behaves differently.

Which pages show the checklist

Same rule as on the teacher side: the main page and each step's main view show it, and pages a student opens on purpose to pick classes, or that follow an action, don't.

With the checklist (module main views):

  • the main page (studentreg);
  • profile, custom form, acknowledgement, extra costs, lunch selection, the junction and Formstack applications, financial aid, Formstack medical forms, donation, credit card payment (Stripe and Cybersource), program lottery (phase zero), survey and the two-phase lottery page (studentreg2phase).

These can all be served by the required-module flow in place of the main page, so this is where the list matters most. This applies especially to the two-phase lottery page: while "Force show required modules" is on, it replaces the main page until the student confirms, so it must keep the checklist (#1167, fixed on main by #4379).

Without it (now extend main.html):

  • Picking classes: fillslot (pick a class for a time slot), conflict_confirm, the lottery pages (lotterystudentreg, viewlotteryprefs), the two-phase catalog and confirmation pages, and class change requests. These are the student version of the teacher class registration form: wide interactive pages a student goes to and then returns from.
  • Class documents (class_docs).
  • After an action: the waitlist page and the Stripe payment success/failure pages.
  • The Formstack financial aid form (finaidapp), an auxiliary view of the Formstack application module.

Untouched: the onsite pages (studentonsite has its own webapp layout), the catalog, and the certificate (a PDF).

On main all the module pages above show the checklist at the top, via module_base.html's registration_progress tag.

Layout

Same as #6132:

  • beside the content when the content area is at least 62rem wide;
  • in bigpicture's left sidebar when its "Registration checklist in sidebar" setting is on;
  • otherwise above the content, collapsed behind "Show all steps".

The steps aren't links while "Force show required modules" is on and required modules are unfinished. Onsite registration (onsite_local) still shows no checklist on the main page, as before. Student progress mode 2 now shows the same card as mode 1, matching the teacher setting.

Screenshots

Taken on a local dev server with dummy data (droplets theme).

Checklist beside the student registration main page

The same image is added to the upcoming release notes.

Implementation

  • Shared base: program/modules/module_base.html now holds the layout that Show the teacher registration checklist on the teacher registration step pages #6132 put in teacherregcore/teacher_module_base.html, for both registrations. That template is removed and the teacher templates extend module_base.html again, as they do on main.
  • One tag: registration_checklist replaces both teacher_checklist (Show the teacher registration checklist on the teacher registration step pages #6132) and registration_progress (with its module_progress.html). It picks the student or teacher options from request.tl.
    • A view can pass an empty checklist to show none. The student main page does this for onsite registration.
  • Student main page: studentregcore/mainpage.html now extends module_base.html. The heading, notices and parents' alert go in module_header; the rest goes in module_content. The studentreg view builds its checklist context with the shared get_checklist_context.
    • checklist.py imports StudentRegCore inside the function, since studentregcore now imports checklist.
  • Neutral names: checklist_sidebar.html moves to program/modules/. teacherreg-layout.css becomes reg-layout.css, and its teacher-reg-* classes become reg-*.
  • Progress mode 2: migration 0057 only updates the student setting's help text. docs/admin/program_modules.rst describes the setting as it now works.

After this, progressbar.html and its images are unused, and progressbar.css is only linked from view_lottery_prefs.html, which uses none of its classes. #6146 (stacked on this PR) removes them.

Related Issue

Follow-up to #6132 and #5034.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update
  • Refactor / cleanup
  • CI/CD or build change

Testing

  • Existing tests pass

  • New tests added (if applicable)

  • Manually verified

  • Updated tests in esp/program/modules/tests/module_progress.py (28 tests, all passing). The tag tests now cover both registrations (empty outside registration, module page links, progress mode 0, the view's own or empty checklist, one lookup per render, the theme sidebar setting). New student integration tests check:

    • the main page column;
    • the required module page;
    • locked links while required modules are forced;
    • progress mode 2 showing the card;
    • no checklist on fillslot and class_docs.
  • Two-phase: a new test in esp/program/modules/tests/studentregtwophase.py checks that, with the two-phase module required and forced, studentreg serves the two-phase page with the checklist and locked steps. It fails if the page extends main.html. All 32 two-phase tests pass.

  • Wider run: locally, esp.program.modules, esp.survey, esp.customforms, esp.users, esp.web and esp.themes (1486 tests) pass, except 5 PDF tests that need pdflatex, which isn't installed in my environment. Lint and makemigrations --check pass.

  • Manual checks: on a dev server with dummy data, I compared the student main page, profile, acknowledgement, custom form, extra costs and class picker in fruitsalad, droplets and bigpicture, at 1280px (and the main page and extra costs at 390px), against Show the teacher registration checklist on the teacher registration step pages #6132's branch.

AI Disclosure

This PR was written with Claude Code (Anthropic), working with @willgearty. Claude Code also made the screenshots on a local dev server with generated dummy data.

Checklist

  • Self-reviewed the code
  • Updated documentation (if needed)
  • No new warnings or errors introduced

Generated by Claude Code

Summary by CodeRabbit

  • New Features
    • Unified registration checklists across student and teacher pages.
    • Checklists support progress tracking, required-module ordering, locked links, collapsed displays, and optional sidebar placement.
    • Progress modes 1 and 2 now behave equivalently, displaying a checklist with a progress bar; mode 0 hides it.
  • Style
    • Standardized registration layouts and responsive checklist styling.
    • Scoped page-specific table styling to prevent unintended effects.
  • Documentation
    • Updated administrator and developer guidance for checklist behavior and integration.

Build on the teacher registration layout: module_base.html now holds the
shared layout, and the student registration main page and step pages use it,
with the checklist (and other registration requirements) beside or above the
content, or in bigpicture's sidebar. Student pages students open on purpose
to pick classes or that follow a payment (class picker, class documents,
lottery and two-phase pages, class change requests, waitlist, payment
results) extend main.html and show no checklist.

The registration_checklist tag replaces teacher_checklist and
registration_progress for both registrations, the layout stylesheet becomes
reg-layout.css with reg-* classes, and student progress mode 2 shows the
checklist too, like the teacher setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0125DJeUvSqDpfccYdjsHZuy
@willgearty

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ebb7836d-a4f7-44f7-940b-2609fee822f4
📥 Commits

Reviewing files that changed from the base of the PR and between 63e7edb and f7d797e.

⛔ Files ignored due to path filters: 1
  • docs/admin/images/studentreg/checklist_student_mainpage.png is excluded by !**/*.png
📒 Files selected for processing: 4
  • docs/admin/releases/upcoming/README.rst
  • esp/esp/program/modules/checklist.py
  • esp/esp/program/modules/tests/module_progress.py
  • esp/esp/program/templatetags/modules.py
🚧 Files skipped from review as they are similar to previous changes: 1
  • docs/admin/releases/upcoming/README.rst

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

📝 Walkthrough

Student and teacher registration pages now share checklist context, template rendering, and generic layout classes. Progress modes 1 and 2 both render the checklist with a progress bar. Several non-registration pages now use main.html.

Changes: Shared registration checklist

Layer / File(s) Summary
Unify checklist context and tag behavior
esp/esp/program/modules/{checklist.py,module_ext.py,handlers/*}, esp/esp/program/templatetags/modules.py, esp/esp/program/modules/migrations/*, esp/esp/program/modules/tests/*, docs/admin/program_modules.rst
Student and teacher registration use shared checklist context and the registration_checklist tag. Progress mode 2 now behaves like mode 1. Tests cover checklist display, required-module links, caching, and disabled checklist pages.
Render shared registration layouts
esp/templates/program/modules/{module_base.html,checklist_sidebar.html,studentregcore/*,teacherregcore/*}, esp/public/media/styles/reg-layout.css, esp/templates/{survey,users}/*, docs/admin/releases/upcoming/README.rst
Registration pages use the shared base template and generic reg-* classes. The base supports checklist placement in the theme sidebar or beside page content.
Keep other pages outside registration layout
esp/templates/program/modules/{classchangerequestmodule,creditcardmodule_stripe,formstackappmodule,lotterystudentregmodule,studentclassregmodule,studentregcore/waitlist.html,studentregtwophase}/*, esp/templates/program/modules/studentregphasezero/submit.html
Selected pages use main.html and its content block. Phase-zero table styles are scoped to the module container.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant Student
  participant StudentRegCore
  participant get_checklist_context
  participant registration_checklist
  participant module_base
  participant checklist_sidebar
  Student->>StudentRegCore: open registration page
  StudentRegCore->>get_checklist_context: build student checklist context
  module_base->>registration_checklist: request checklist display data
  registration_checklist-->>module_base: return shared checklist data
  module_base->>checklist_sidebar: render checklist
Loading

Possibly related issues

Suggested reviewers: claude, imran-techvoyager

Merge Risk: ⚪ Minimal · up to f7d79

No actionable registration-layout issue is established; the change is ready for normal merge checks.

Security architecture risk: 🔵 Low · up to f7d79

The shared checklist changes do not show a new access path or weaker registration permissions. The main risk is coordinated integration across student and teacher pages; assessment coverage remains incomplete.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The demonstrated change surface is shared registration presentation for student and teacher users, including per-user completion indicators. The inspected path does not introduce a new service, credential authority, or production route.

Trust Boundaries and Controls

  • inferred — No new authorization bypass was established by the routed test entrypoints or shared checklist lookup. The inspected flow uses current-request identity for completion lookup and leaves production route controls separate from checklist visibility.

Resilience and Maintainability Implications

  • observed — The checklist tag augments a presentation dictionary and stores it in render context. These inspected blocks do not persist completion or introduce a registration transition requiring rollback; completion remains obtained from existing module and record queries.
Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 64.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 39 functions across 9 files. (1 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the primary change: showing the registration checklist on student registration step pages.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 64.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 39 functions across 9 files. (1 skipped: 1 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

… release notes

Merge #6132's branch, and drop the notes that only undo changes made after
stable-release-16: the pages that never showed the checklist there, the
tag and stylesheet that replace post-release ones, and the main.html list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0125DJeUvSqDpfccYdjsHZuy
When required modules are forced, studentreg serves the two-phase page in
place of the main page, so it needs the checklist like the main page does
(as on main since #4379; see #1167).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0125DJeUvSqDpfccYdjsHZuy
The page centred and re-padded every table cell on the page, including the
registration checklist beside it.  Scope those rules to the page content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0125DJeUvSqDpfccYdjsHZuy
…t-module-layout

# Conflicts:
#	docs/admin/releases/upcoming/README.rst
#	esp/esp/program/modules/checklist.py
#	esp/esp/program/modules/tests/module_progress.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants