Guest data and scenarios
Thirteen fields. Clean, consistent, no surprises.
| Field | Type | Notes |
|---|---|---|
id |
string | Unique |
name |
string | Required |
side |
enum | bride · groom · both. Required |
role |
enum | See KB-4 for the protocol roles. Everyone else is guest, bridesmaid, groomsman or usher |
age |
enum | baby (under 4) · child (4–9) · teen (10–17) · adult (18 and over). Always present, and a new guest starts as adult. Drives the generation mix rule |
household |
string or null | Who arrived together |
partnerOf |
string or null | Guest id. Reciprocal, present on both guests |
conflictsWith |
string[] | Guest ids. Reciprocal, present on both guests |
tags |
string[] | Free text. uni, footie, work, family, neighbours |
allergies |
string[] | nuts, shellfish, sesame, dairy. A safety matter |
dietaryPreferences |
string[] | vegetarian, vegan, pescatarian, halal, gluten free. A catering count |
accessibility |
string[] | step-free access · away from the speakers · near an exit. Recorded, not yet used |
socialType |
enum | livewire · sociable · quiet. A new guest starts as sociable |
Relationships are reciprocal
partnerOf and conflictsWith appear on both guests in a pair. Setting one side sets the other,
and you can resolve from either direction.
Tags are not groups
A tag is a label, not a container. A guest can carry several, "uni" and "footie" overlapping is normal, and any rule about tag groups has to cope with someone belonging to both.
Allergies are not dietary preferences
Separate fields, deliberately. One is a safety matter with a hard rule attached, the other is a catering count. KB-2 has the severities. They must never be merged into one list.
The three scenarios
Example weddings for demonstrating and testing. Each carries a guest list and a matching room.
| Scenario | Guests | Room | Seats | Spare |
|---|---|---|---|---|
| Small and cosy | 40 | 4 tables of 8, top table 8 | 40 | none |
| Adding up | 70 | 9 tables of 8, top table 6 | 78 | 8 |
| Celebrity scale | 200 | 26 tables of 8, top table 8 | 216 | 16 |
Small and cosy has no spare seats at all, so capacity bites immediately and every placement is forced. Mostly family, few tags, one conflict pair. Use it to demonstrate a rule.
Adding up is the realistic middle. Thirty-five households, three conflict pairs, nine tags. Complex enough to be interesting, small enough to reason about. Use it to demonstrate the solver.
Celebrity scale is the stress test. Ninety-six households, nine conflict pairs, twenty-one accessibility needs, eleven tags. Use it to find out where the layout and the algorithm fall over.
All three carry the full eight top table roles.
Where the data lives
The three files ship in the repository at public/scenarios/, generated by a seeded script so
regenerating produces identical output. This page says what they are for. The files themselves are
engineering's to hold.