Contract loaded: Module
Contract loaded: Events
Contract loaded: models/Meeting
Contract loaded: models/MeetingQuery
Contract loaded: models/AgendaItem
Contract loaded: models/forms/MeetingForm
Contract loaded: controllers/MeetingController
Contract loaded: controllers/ProtocolController
Contract loaded: integration/MeetingType
Contract loaded: widgets/WallEntry
Contract loaded: widgets/JitsiIframeWidget
Contract loaded: assets/MeetingsAsset
Contract loaded: permissions/CreateMeeting
Contract loaded: permissions/PublishProtocol
Contract loaded: commands/ImportController
Contract loaded: notifications/ParticipantInvite
PASS readable audience for user 1 = 1,2,3,4,5,6,7
PASS readable audience for user 2 = 1,2,3,5
PASS readable audience for user 3 = 1,2,4,6
PASS readable audience for user 4 = 1,2
PASS readable audience for user 5 = 1,2,3,4
PASS readable audience for user 6 = 1,6
PASS readable audience for user 7 = 1
PASS readable audience for user 8 = 1
PASS group removal immediately revokes access
PASS space removal immediately revokes targeted space access
PASS personal meeting survives unrelated space removal
PASS polymorphic content collision cannot grant access
PASS guest sees only public meetings in public spaces
PASS guest mode disabled denies all meetings
PASS organizer can manage meeting
PASS unrelated user cannot manage meeting
PASS unrelated user cannot read participant communication
PASS organizer can publish protocol
PASS unrelated user cannot publish protocol
PASS meeting-scoped publication stays restricted
PASS explicit public publication can broaden protocol audience
PASS publishing protocol does not disclose private meeting
PASS withdrawn publication is inaccessible
PASS public protocol is hidden when space becomes private
PASS disabled container blocks publication
PASS disabled container blocks meeting
PASS restricted meeting contributes no shared search text
PASS entity-encoded markup is stripped from search text
PASS one invited user and HTML empty group value are valid
PASS direct scope stays private without requiring a group
PASS stale group selection is excluded when switching to direct
PASS group selection no longer conflicts with a second visibility control
PASS empty optional participants do not produce nonexistent-target errors
PASS space meeting supports multiple individually invited participants
PASS one-on-one scope still enforces its privacy promise
PASS nonexistent targets remain rejected
PASS a final slot without its poll is rejected
PASS a real readable poll can be linked without choosing a final slot
PASS a slot belonging to another real poll is rejected
PASS confirmed native slot applies start and duration
PASS editing a meeting restores linked poll and final slot
PASS native polls and eager-loaded slots return without ambiguous SQL
PASS native vote counts and poll IDs are correct

PASS poll is initialized with the scoped adapter
PASS Cancel exists on the first step
PASS Next advances from duration to dates
PASS all three date rows have actual jQuery UI datepickers with the original locale format
PASS multiple times can be picked on the third date
PASS removing and adding dates never reuses an existing row ID
PASS time selections follow the native 12-hour validation format
PASS Previous returns to the main form
PASS failure retains duration, displays an error and permits retry
PASS Next reaches invitations
PASS empty picker saves, closes and refreshes choices without losing the meeting form
PASS Cancel closes the poll
PASS late network response cannot reopen a cancelled poll
PASS slow submission shows progress, disables Next and keeps Cancel available
PASS results filter by poll and suggest a leader without choosing a final time
PASS switching polls clears the unrelated final slot
PASS audience UI keeps scope and visibility consistent without demanding a group for direct meetings
17 modal regression checks passed
