Hard seats and distinct attendance
The allocator uses an integral capacity network. Each allowed attendee-to-session connection has capacity one, each attendee can receive up to the requested count, and each session has its own seat limit. A maximum-flow calculation fills as many requested places as possible without breaking those limits. If a partial allocation is unavoidable, the page labels it partial and lists everybody still missing one or more sessions. Spare capacity can remain in a session when eligible people already attend it, have reached their count, or cannot choose it in listed-only mode.
Coverage first, count balance second, preference cost third
Within maximum coverage, the tool minimizes the sum of squared attendee assignment counts to avoid concentrating seats on a few people. It then minimizes total preference penalties: rank one costs zero, rank two costs one, later ranks continue that pattern, and an unlisted fallback costs the total number of sessions. Someone without preferences contributes no preference penalty. Secure randomized tie costs cannot outweigh those priorities. This is not a promise of everybody’s first choice, equal probabilities over complete outcomes or the maximum number of completely satisfied people when coverage is incomplete.
Keep all assignments and unresolved requests
Copy and print contain the complete attendee view and every session roster with used and remaining seats. CSV provides one row per requested attendance place, including blank-session rows for unfilled requests, with attendee IDs, session IDs, capacities and preference status. It is an organizer snapshot, not a booking-system import template or notification service. The screen’s scrolling lists do not limit exports. Spreadsheet formula-leading names are protected using the existing CSV escaping behavior. Actual attendance, payment, cancellation and later movement between sessions are not recorded or synchronized.