Install
openclaw skills install @voronindenis5/stall-solverUse when checking whether a venue's restroom count actually survives a halftime rush, planning fixtures for an event space/coffee-shop/school, or auditing fixture counts against plumbing-code minimums — Erlang-C queue math on toilet demand (arrival rates by venue type, burst-break simulation, IPC fixture tables) plus verdicts (OK / TIGHT / FAIL) and queue-clearing times.
openclaw skills install @voronindenis5/stall-solverRestroom planning has a hard split personality: plumbing codes size fixtures for sustained occupancy, but the pain people remember is a burst — halftime, intermission, the session break. A venue can be fully code-compliant and still have a 25-minute women's-room line, because 40% of 400 attendees hit the toilets in the same 15-minute window. This skill runs both checks: queueing math on arrivals vs fixtures, and fixture-count audits against code tables.
Don't use for: residential bathrooms, portable-toilet logistics for outdoor festivals (different tables entirely), or ADA clearance/ layout questions (those are geometry, not counts).
Three layers, each answering a different question:
Key asymmetry the math exposes: urinals are throughput machines (3x the turnover of a stall) but only serve half the population; female/stall demand is where queues actually form. In queue terms, stalls need more fixtures for the same arrival rate because service time is 3x longer.
python3 scripts/stall_detector.py demand --venue concert \
--attendees 600 --fixtures 8 --urinals 6
python3 scripts/stall_detector.py event --venue sports \
--attendees 400 --fixtures 6 --urinals 4 \
--burst-share 0.5 --window-min 15
python3 scripts/stall_detector.py audit --venue conference \
--occupancy 350 --f-wc 8 --m-wc 3 --m-ur 2 --f-lav 6 --m-lav 4
python3 scripts/stall_detector.py event --venue theater \
--attendees 800 --fixtures 12 --urinals 8 --window-min 20
If stalls read TIGHT/FAIL: recommend adding 2-4 all-gender stalls OR holding the house 5 minutes before intermission ends (staggering the return wave does nothing — the arrival burst is the problem; lengthen the intermission instead).