Skip to content

Commit 120c118

Browse files
committed
feat: Cascade design decisions to meeting + voting specs
meeting-management: +4 requirements (MeetingType config, live meeting page, CalDAV integration, speaker queue management) voting-system: +1 requirement (decision point activation from agenda) MeetingType seeds default agenda items, quorum rules, and voting methods. Live meeting page shows real-time view for participants. Decision points on agenda items auto-trigger voting interface.
1 parent 1e96934 commit 120c118

2 files changed

Lines changed: 185 additions & 0 deletions

File tree

openspec/specs/meeting-management/spec.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,141 @@ The system MUST support managing meeting proceedings including speaking order, t
263263

264264
---
265265

266+
### Requirement: Meeting Type Configuration and Seeding [MVP]
267+
268+
The system MUST support configurable MeetingType entities that define the default structure for meetings. When a meeting is created from a MeetingType, the system MUST automatically seed the meeting with default agenda items, quorum rules, voting methods, and speaking time rules as defined by the type. MeetingTypes are stored as OpenRegister objects, not hardcoded enums. Administrators MUST be able to create, modify, and archive MeetingTypes.
269+
270+
**Cross-reference**: See agenda-management spec -- MeetingType entity defines `defaultAgendaItems`, `quorumRule`, `votingMethod`, `speakingTimeRules`.
271+
272+
#### Scenario: Create meeting from council meeting type
273+
274+
- GIVEN a MeetingType "Raadsvergadering" with default agenda items (Opening, Vaststellen agenda, Vaststellen notulen, Hamerstukken, Bespreekstukken, Moties/Amendementen, Rondvraag, Sluiting), quorum >50%, and default open voting
275+
- WHEN the griffier creates a new meeting from this type
276+
- THEN the meeting MUST be pre-populated with all default agenda items from the MeetingType
277+
- AND the quorum rule MUST be set to >50% of seated members
278+
- AND the default voting method MUST be set to open vote
279+
- AND the griffier MUST be able to add, remove, or reorder items after seeding
280+
281+
#### Scenario: Create meeting from ALV meeting type
282+
283+
- GIVEN a MeetingType "ALV" with default agenda items (Opening, Vaststellen notulen, Jaarverslag, Jaarrekening, Verslag kascommissie, Bestuursverkiezing, WVTTK, Sluiting), quorum per statutes, and default open voting with secret ballot for elections
284+
- WHEN the secretary creates a new ALV meeting from this type
285+
- THEN the meeting MUST be pre-populated with all statutory agenda items
286+
- AND the quorum rule MUST be inherited from the MeetingType configuration
287+
- AND agenda items marked as elections MUST default to secret ballot voting method
288+
- AND removed required items MUST trigger a compliance warning
289+
290+
#### Scenario: Administrator creates a custom meeting type
291+
292+
- GIVEN an administrator who wants to create a new meeting type for steering committee meetings
293+
- WHEN they define a MeetingType with name "Stuurgroep", default items (Opening, Projectstatus, Risico-overzicht, Beslispunten, Actiepunten, Sluiting), quorum 50%+1, and default open voting
294+
- THEN the system MUST save the MeetingType as an OpenRegister object
295+
- AND the type MUST be available in the "Create Meeting" dialog
296+
- AND existing meetings MUST NOT be affected by changes to the MeetingType
297+
298+
---
299+
300+
### Requirement: Live Meeting Page [MVP]
301+
302+
The system MUST provide a real-time meeting page for all participants during an active meeting. The live meeting page MUST show the current agenda item, its documents, active vote (if any), the speaker queue, and meeting progress. The page MUST update in real-time without manual refresh.
303+
304+
#### Scenario: Participant views live meeting page during session
305+
306+
- GIVEN a meeting in progress with agenda item 4 of 8 active
307+
- WHEN a participant opens the live meeting page
308+
- THEN they MUST see the current agenda item title, description, and attached documents
309+
- AND a progress indicator MUST show "Item 4 of 8" with time elapsed
310+
- AND if a vote is active on the current item, the voting panel MUST be displayed
311+
- AND the speaker queue for the current item MUST be visible
312+
313+
#### Scenario: Live page updates when chair advances agenda
314+
315+
- GIVEN a participant viewing the live meeting page
316+
- WHEN the chair advances from agenda item 4 to agenda item 5
317+
- THEN the page MUST update in real-time to show item 5's details
318+
- AND if item 5 has a decision point (linked motion/vote), the voting interface MUST activate automatically
319+
- AND the speaker queue MUST reset to show speakers registered for item 5
320+
321+
#### Scenario: Remote participant follows meeting via live page
322+
323+
- GIVEN a hybrid meeting with remote participants
324+
- WHEN a remote member accesses the live meeting page
325+
- THEN they MUST see the same real-time information as in-person attendees
326+
- AND they MUST be able to register as a speaker, cast votes, and view documents
327+
- AND their participation MUST be logged with "remote" attendance mode
328+
329+
---
330+
331+
### Requirement: Calendar Integration (CalDAV) [MVP]
332+
333+
The system MUST integrate meetings with Nextcloud Calendar via OpenRegister's RegisterCalendarProvider. Meetings MUST appear as CalDAV events in a virtual calendar. Recurring meeting series MUST generate individual CalDAV events. Meeting invitations MUST be sent as iCalendar invitations to all body members.
334+
335+
**Cross-reference**: OpenRegister _calendar metadata provides the CalDAV virtual calendar backend.
336+
337+
#### Scenario: Meeting appears in Nextcloud Calendar automatically
338+
339+
- GIVEN a meeting "Board Meeting Q2" scheduled for 2026-07-10 14:00-16:00
340+
- WHEN the meeting is saved in Decidesk
341+
- THEN it MUST appear in the Decidesk virtual calendar in Nextcloud Calendar
342+
- AND the calendar event MUST include: title, start/end time, location/virtual link, and a link back to the Decidesk meeting page
343+
- AND the event MUST sync to any CalDAV client (mobile, desktop)
344+
345+
#### Scenario: Recurring meeting series creates individual calendar events
346+
347+
- GIVEN a MeetingType "MT Weekly" with recurrence "every Tuesday at 10:00"
348+
- WHEN the recurring series is created
349+
- THEN each individual meeting instance MUST appear as a separate CalDAV event
350+
- AND modifying one instance (e.g., rescheduling) MUST NOT affect other instances
351+
- AND cancelling one instance MUST update the corresponding CalDAV event
352+
353+
#### Scenario: Send meeting invitations as iCalendar
354+
355+
- GIVEN a meeting with 12 body members
356+
- WHEN the secretary sends the meeting convocation
357+
- THEN each member MUST receive an iCalendar (.ics) invitation via Nextcloud notification
358+
- AND accepting the invitation MUST update the member's attendance RSVP
359+
- AND the system MUST track invitation delivery and RSVP status per member
360+
361+
---
362+
363+
### Requirement: Speaker Queue Management [MVP]
364+
365+
The system MUST support a speaker queue where participants can register to speak on the current agenda item. The chair MUST be able to grant the floor, skip speakers, and manage the queue order. Speaking time MUST be tracked per speaker with configurable time limits.
366+
367+
#### Scenario: Member registers to speak on current agenda item
368+
369+
- GIVEN a meeting in progress on agenda item "Budget Discussion"
370+
- WHEN a member clicks "Request to speak"
371+
- THEN they MUST be added to the speaker queue for the current item
372+
- AND the chair MUST see the updated queue with the member's name and registration time
373+
- AND the member MUST see their position in the queue
374+
375+
#### Scenario: Chair grants the floor and tracks speaking time
376+
377+
- GIVEN a speaker queue with 3 registered speakers and a 5-minute time limit per speaker
378+
- WHEN the chair grants the floor to the first speaker
379+
- THEN a countdown timer MUST start (5:00)
380+
- AND the current speaker MUST be highlighted in the queue
381+
- AND when time expires, an alert MUST notify the chair and speaker
382+
- AND the chair MUST be able to extend time or move to the next speaker
383+
384+
#### Scenario: Chair reorders or removes speakers from the queue
385+
386+
- GIVEN a speaker queue with 5 registered speakers
387+
- WHEN the chair needs to prioritize a specific speaker (e.g., the motion proposer gets to speak first)
388+
- THEN the chair MUST be able to drag-and-drop reorder the queue
389+
- AND the chair MUST be able to remove a speaker who withdraws
390+
- AND all participants MUST see the updated queue in real-time
391+
392+
#### Scenario: Track speaking time analytics per meeting
393+
394+
- GIVEN a completed meeting with speaking time tracked per participant
395+
- WHEN the meeting analytics are generated
396+
- THEN the system MUST show total speaking time per participant, average time per intervention, and number of interventions
397+
- AND the system SHOULD highlight distribution imbalances for DEI insights
398+
399+
---
400+
266401
### Requirement: Meeting Recording and Webcasting [V1]
267402

268403
The system SHOULD support recording meetings (audio/video) and publishing them with searchable indexes linked to agenda items.
@@ -647,6 +782,13 @@ The system MUST export meetings in standardized formats for interoperability.
647782
23. Citizen registration for committee speaking (inspreekrecht) is supported
648783
24. Extraordinary ALV request validation is supported (10% threshold, 4-week deadline)
649784
25. All meeting interfaces comply with Digitoegankelijk (EN 301 549 with WCAG 2.1)
785+
26. MeetingTypes are configurable OpenRegister objects that seed default agenda items, quorum rules, and voting methods when creating a meeting
786+
27. A live meeting page provides real-time view of current agenda item, documents, votes, and speaker queue for all participants
787+
28. Meetings appear as CalDAV events in Nextcloud Calendar via OpenRegister's RegisterCalendarProvider
788+
29. Recurring meeting series generate individual CalDAV events that are independently editable
789+
30. Meeting invitations are sent as iCalendar (.ics) with RSVP tracking
790+
31. Speaker queue supports registration, floor granting, time tracking, and chair reordering
791+
32. Speaking time analytics are available per participant per meeting with DEI distribution insights
650792

651793
## Notes
652794

openspec/specs/voting-system/spec.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,45 @@ The system MUST support processing consent agenda items (hamerstukken) as a batc
415415

416416
---
417417

418+
### Requirement: Decision Point Activation from Agenda [MVP]
419+
420+
The system MUST automatically activate the voting interface when the chair advances to an agenda item that has a `decisionPoint` (linked Motion, Amendment, or Vote). The chair MUST NOT need to manually open the voting panel for decision-point items. Amendments linked to a decision point MUST be voted on before the main motion, following standard parliamentary procedure.
421+
422+
**Cross-reference**: See agenda-management spec -- AgendaItem `decisionPoint` field links to Motion/Amendment/Vote. The live meeting page (meeting-management spec) displays the voting panel when a decision-point item is active.
423+
424+
#### Scenario: Voting interface activates when chair reaches decision-point agenda item
425+
426+
- GIVEN a meeting in progress and agenda item 7 "Vaststellen begroting 2027" has a linked decisionPoint (a Motion to approve the budget)
427+
- WHEN the chair advances the meeting to agenda item 7
428+
- THEN the voting interface MUST activate automatically for all eligible participants
429+
- AND the motion text and any supporting documents MUST be displayed alongside the voting panel
430+
- AND the chair MUST be able to open debate before starting the formal vote
431+
432+
#### Scenario: Amendments are voted before the main motion
433+
434+
- GIVEN agenda item 7 has a main motion and 2 linked amendments (Amendment A and Amendment B)
435+
- WHEN the chair reaches item 7 and starts the voting sequence
436+
- THEN the system MUST present amendments for voting first, in submission order (Amendment A, then Amendment B)
437+
- AND after all amendments are resolved (adopted or rejected), the main motion (as possibly amended) MUST be put to vote
438+
- AND the final motion text MUST reflect any adopted amendments before the main vote
439+
440+
#### Scenario: Vote result updates agenda item status in real-time
441+
442+
- GIVEN a vote has been conducted on agenda item 7's decision point
443+
- WHEN the vote result is calculated (adopted or rejected)
444+
- THEN the agenda item's status MUST update to "decided" in real-time on all participants' live meeting pages
445+
- AND the decision outcome (adopted/rejected with vote counts) MUST be recorded on the agenda item
446+
- AND the chair MUST see a summary before advancing to the next agenda item
447+
448+
#### Scenario: Non-decision agenda item does not trigger voting
449+
450+
- GIVEN a meeting in progress and agenda item 3 "Mededelingen" has type "informational" with no decisionPoint
451+
- WHEN the chair advances to agenda item 3
452+
- THEN the voting interface MUST NOT activate
453+
- AND the chair MUST retain the ability to manually initiate an ad-hoc vote if needed
454+
455+
---
456+
418457
### Requirement: Quorum Tracking and Enforcement
419458

420459
The system MUST continuously track attendance and calculate quorum in real-time. Quorum rules MUST be configurable per governing body. The system MUST block voting when quorum is not met and provide alerts when quorum is at risk.
@@ -577,3 +616,7 @@ The system MUST provide an accessible, mobile-friendly voting interface that mee
577616
- Voting UX meets WCAG AA; mobile-first design with vote confirmation
578617
- E2E verifiability (cast-as-intended, recorded-as-cast, tallied-as-recorded) for secret ballots
579618
- Decision tables for configurable voting rules per organization
619+
- Voting interface activates automatically when the chair advances to an agenda item with a decisionPoint
620+
- Amendments linked to a decision point are voted before the main motion in submission order
621+
- Vote results update the agenda item status to "decided" in real-time on all participants' views
622+
- Non-decision agenda items do not trigger the voting interface

0 commit comments

Comments
 (0)