The functionaries app owns yearly positions of trust and the public/member-facing functionary pages.
The public routes remain under the members URL namespace for compatibility:
/members/functionary/ (members:functionary) lets logged-in members manage their own history./members/functionaries/ (members:functionaries) shows the public year/role listing.FunctionaryRole defines a translated position title and whether it is a board seat (board) or a tutor role (tutor).Functionary links a role to a year and either a Member or standalone display name.Functionary.save() snapshots the member’s current full name or username.FunctionaryForm enforces uniqueness per (member, role, year) for member-managed entries.functionaries.selectors groups and filters functionaries by year, role, and section for the public listing. The sections are board, tutors, and other functionaries, and they are mutually exclusive: board wins over tutor, and the other section excludes both.FUNCTIONARIES_ANONYMOUS_FILTERS is on. The default is off so earlier years are not browsable without signing in. pulterit enables the setting because it has no member accounts to sign in with.FunctionaryRoleAdmin includes an inline Functionary table so role metadata and yearly assignments can be edited together. The full assignment list is available through an All assignments tool link rather than a separate sidebar entry.FunctionaryAdmin links each assignment back to its role and supports searching by linked member or standalone display name.members functionary and role permissions continue to grant equivalent admin and inline access while stale content types are being migrated.members.FunctionaryRole and members.Functionary.members; add position/history behavior here.members.