Capabilities
The promotion workflow supports:- controlled year-end student movement
- immutable promotion history
- year and class filtering
- school-wide atomic execution
Operational rules
- promotions should be run intentionally, not as a side effect of school edits
- the operation is all-or-nothing for a school
- promotion history is read-only through the normal client API
- exceptional cleanup belongs in the Django admin only
Ordering
Promotion relies on the configured class hierarchy so students are processed in a safe order.Sections during promotion
If a student’s current section is tied to a different class than the promoted class, that section cannot remain attached after the move. Client workflows should make this outcome explicit so operators understand when a section will become empty.Viewing history
Use the promotions page to:- review promotion history
- filter by year
- filter by class
- paginate through results

