Skip to content

Add lockable student placements for random assign, bench all, and solve #4

@Peaj

Description

@Peaj

Summary

Add a way to lock individual student placements by clicking on a seated student, so teachers can keep selected students fixed while updating the rest of the seating plan.

Problem

Teachers often want to keep a few placements they are happy with and only reshuffle or re-solve the remaining students. Right now Random Assign, Bench All, and Solve Plan treat all students the same.

Desired behavior

  • Clicking a seated student should toggle a locked state for that placement.
  • A locked student stays in that exact seat when using Random Assign.
  • A locked student stays in that exact seat when using Solve Plan.
  • Bench All should leave locked students seated and only bench unlocked students.
  • Unlocked students should continue to move around the locked students normally.

Suggested implementation

  • Add a visible locked/unlocked state to seated student chips.
  • Persist locked placements in project/roster state so they survive reloads and exports.
  • Treat locked placements as fixed assignments when randomizing or solving.
  • Prevent benching/removing a locked student unless they are explicitly unlocked first.

Acceptance criteria

  • Teachers can lock and unlock seated students directly from the grid.
  • Locked students remain fixed during Random Assign, Bench All, and Solve Plan.
  • Solver statistics and resulting assignments still update correctly for the remaining unlocked students.
  • Locked state is preserved across save/load and local persistence.
  • The UI clearly communicates which students are locked.

Notes

This should support the workflow of manually fixing a few placements first and then optimizing the rest of the class around them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions