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>
4.1 KiB
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
- Confirm School Level is set correctly on Chapter Settings (
Middle SchoolorHigh School). That drives the graduating grade (8 or 12). - Have the list of returning students and the new officer slate ready.
- Plan a short maintenance window: after apply you must restart the app so printouts pick up the new competition year.
- On Docker, confirm the data volume is
./data:/app/Data(capital D). SeeDEPLOYMENT.md— otherwise the automatic backup may not land on the host.
Steps
- Sign in as an Administrator.
- Open New Year Rollover at
/settings/new-year(Admin nav: “New Year Rollover (locked)”). - Unlock the wizard (required every session):
- Check both acknowledgment boxes.
- Type
ROLLOVERand click Unlock wizard. - Refreshing or using Lock again re-locks it.
- Step 1 — Year & grades
- Confirm the target competition year (defaults to current + 1).
- Confirm the chapter type / graduating grade shown from Chapter Settings.
- Step 2 — Returning roster
- Uncheck anyone who is not returning (grade at/above graduating is unchecked by default).
- Optionally paste a name list (
Last, FirstorFirst Last) and click Apply pasted names.
- 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.
- 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.
- 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.dbfirst; that file is the only undo.
- Restart the application so the home page and printouts show the new competition year.
- Add new students via
/students/createor/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. Seedocs/instructions/student-notes-import.md.
- 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). - On Meeting Schedule, click Reset once. That page keeps team/student ids in browser localStorage; after a rollover those ids are stale.
- 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)
- Stop the application (or
docker-compose stop). - Replace
Data/app.db(local) or./data/app.db(Docker host) with a copy of thepre-rollover-*.dbfile from the backups folder. - If needed, restore
CompetitionYearinData/appsettings.json/./data/appsettings.json(or Chapter Settings after restart). - Start the application.