Files
chapter-organizer/docs/instructions/year-rollover.md
T
poprhythmandCursor 4cfd85b902 feat: import leftover student fields into notes and show them on the roster
Store leftover CSV columns on hidden student notes, move catalog import to /events/import, and persist Students index columns from Chapter Settings.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 23:55:03 -04:00

4.1 KiB

Year Rollover Runbook

Created: 2026-08-14
Last updated: 2026-08-29

Description: How to roll the chapter into a new competition year using the locked New Year wizard.

Prerequisites

  1. Confirm School Level is set correctly on Chapter Settings (Middle School or High School). That drives the graduating grade (8 or 12).
  2. Have the list of returning students and the new officer slate ready.
  3. Plan a short maintenance window: after apply you must restart the app so printouts pick up the new competition year.
  4. On Docker, confirm the data volume is ./data:/app/Data (capital D). See DEPLOYMENT.md — otherwise the automatic backup may not land on the host.

Steps

  1. Sign in as an Administrator.
  2. Open New Year Rollover at /settings/new-year (Admin nav: “New Year Rollover (locked)”).
  3. Unlock the wizard (required every session):
    • Check both acknowledgment boxes.
    • Type ROLLOVER and click Unlock wizard.
    • Refreshing or using Lock again re-locks it.
  4. Step 1 — Year & grades
    • Confirm the target competition year (defaults to current + 1).
    • Confirm the chapter type / graduating grade shown from Chapter Settings.
  5. Step 2 — Returning roster
    • Uncheck anyone who is not returning (grade at/above graduating is unchecked by default).
    • Optionally paste a name list (Last, First or First Last) and click Apply pasted names.
  6. Step 3 — Officers
    • Assign each office from returning students, or leave vacant.
    • Officers who are brand-new students can be set later on the student edit page.
  7. Step 4 — Season reset
    • Teams, event rankings, and meeting history are always cleared.
    • Leave Clear all event occurrences checked unless you have a reason to keep last year's calendar rows.
  8. Step 5 — Preview & apply
    • Review promotions, removals, officers, and warnings.
    • Type the target competition year exactly to enable Apply rollover.
    • Confirm the destructive dialog. The wizard creates Data/backups/pre-rollover-yyyyMMdd-HHmmss.db first; that file is the only undo.
  9. Restart the application so the home page and printouts show the new competition year.
  10. Add new students via /students/create or /students/import.
    • Student import is add-only for roster rows and skips existing first+last name matches, so re-importing a full roster is safe for returners.
    • Leftover CSV columns (interview time, application, and so on) are merged into each student's notes. Rank columns stay on /students/event-ranking/import. See docs/instructions/student-notes-import.md.
  11. Import the new state schedule from the calendar import page. If the chapter event file changed, refresh the catalog at /events/import (add-only by event name).
  12. On Meeting Schedule, click Reset once. That page keeps team/student ids in browser localStorage; after a rollover those ids are stale.
  13. Collect new event rankings (CSV import at /students/event-ranking/import, or the ranking editor) and run team assignment as usual.

What is deleted vs kept

Cleared Kept
Non-returning students Returning students (promoted)
All teams Event definitions (national catalog)
All event rankings Notes (including meeting notes by title; notes for removed students are soft-deleted)
All meeting history attendance snapshots Database backup under Data/backups/
Event occurrences (when checked)

Backup location

Environment Backup path
Local (dotnet run) WebApp/Data/backups/pre-rollover-*.db
Docker (with ./data:/app/Data) Host: ./data/backups/pre-rollover-*.db (container: /app/Data/backups/)

Restore from backup (emergency)

  1. Stop the application (or docker-compose stop).
  2. Replace Data/app.db (local) or ./data/app.db (Docker host) with a copy of the pre-rollover-*.db file from the backups folder.
  3. If needed, restore CompetitionYear in Data/appsettings.json / ./data/appsettings.json (or Chapter Settings after restart).
  4. Start the application.