Finds fair meeting times for distributed teams. Takes each participant's IANA time zone, working days and hours, how far they will stretch, holidays and blocked time, then lists every slot in a date range in each person's local time, handles daylight-saving switches that happen on different weekends, and picks a rotating series so the same people do not always take the early or late call.…
--- name: time-zone-meeting-slot-finder description: Finds fair meeting times for distributed teams. Takes each participant's IANA time zone, working days and hours, how far they will stretch, holidays and blocked time, then lists every slot in a date range in each person's local time, handles daylight-saving switches that happen on different weekends, and picks a rotating series so the same people do not always take the early or late call. Includes a stdlib Python zoneinfo script with --self-test. --- # Time Zone Meeting Slot Finder You help distributed teams pick meeting times that are possible for everyone required and fair over time. You work in each person's own local time on the actual dates (never with "LA is 9 hours behind Berlin" rules of thumb, which are wrong for weeks every spring and autumn), show the trade-offs openly, and rotate the inconvenient slots instead of always putting them on the same people. ## Files in this skill - `scripts/slot_finder.py` - reads a team CSV and optional blocked-time CSV, evaluates every slot on a grid over the date range in each participant's local time (Python zoneinfo), ranks slots by who is missing and how much stretch they need, reports DST changes in the range, and can pick a fair rotating series (Python 3.9+ standard library only) - `references/dst-and-time-zone-pitfalls.md` - DST dates by region, zones that do not switch, half-hour zones, weekends that are not Sat-Sun, abbreviations to avoid, and how calendar invites behave across a switch - `references/fairness-and-rotation.md` - the pain-point model, how the rotation chooses, when to split a meeting or go async instead, and how to explain the choice to the team - `templates/slot-proposal.md` - the proposal to send to the team - `examples/team.csv` - five people in Los Angeles, New York, Berlin, Istanbul and Kolkata (one optional) - `examples/blocked.csv` - a public holiday, a dentist appointment, a board review and a day of leave ## Workflow ### 1. Collect the facts For each participant: name, IANA zone (city based, e.g. `America/Los_Angeles`, never "PST"), working days (Mon-Fri, or Sun-Thu in much of the Middle East), working hours, how many hours they are willing to start earlier or finish later, and whether they are required. Also the date range, meeting length, how often it repeats, known holidays and blocked times (in that person's local time). Ask rather than guess zones from a city that has several (e.g. a "Mexico" team member). ### 2. Run the finder ``` python3 scripts/slot_finder.py --team examples/team.csv --blocked examples/blocked.csv --start 2026-10-26 --end 2026-11-20 --days Tue,Wed,Thu --series 4 python3 scripts/slot_finder.py --team team.csv --start 2026-11-02 --end 2026-11-06 --duration 30 --step 15 --top 5 python3 scripts/slot_finder.py --team team.csv --start 2026-11-02 --end 2026-11-27 --series 8 --every day --ref-zone Europe/Berlin --json python3 scripts/slot_finder.py --self-test ``` Dates (`--start`, `--end`, `--days`) are read in `--ref-zone` (default UTC). Exit 0 means slots were found, 1 means no slot works for every required person, 2 means bad input (unknown zone, bad time, missing column). ### 3. Read the result - **DST changes in range** come first: if any zone switches inside the range, the same UTC time lands an hour earlier or later for those people afterwards. Propose slots per period, not one UTC time for the whole range. - **Best slots** are ranked by: optional people missing, then the worst single person's stretch, then total stretch. - **Rotating series** picks one meeting per week (or per day) to keep the worst cumulative inconvenience as low as possible, then spreads it. The summary shows how often each person met in hours, stretched or missed. - If there is no slot, say why (who blocks whom) and offer options: more stretch from volunteers, a shorter meeting, making someone optional, two regional meetings, or async updates. ### 4. Deliver Fill `templates/slot-proposal.md`: the recommendation with every person's local time and weekday, the DST note, the rotation table, alternatives, and the open questions. Send invites from a calendar with a real zone (the organizer's IANA zone), not "UTC" unless the team agreed, and say which zone anchors the series. ## Example result Five people, 2026-10-26 to 2026-11-20, Tue-Thu, 60 minutes, series of 4 weekly meetings. Europe left summer time on 25 October and the US on 1 November, so in the week of 26 October New York is only 5 hours behind Berlin instead of 6. Week 1: 13:30 UTC (Ana 06:30 in Los Angeles, a stretch; Priya 19:00 in Kolkata, a stretch; everyone else in hours). After the US change, two weeks at 16:00 UTC (Ana 08:00 in hours, Eva 17:00-18:00 stretch, Bilal 19:00-20:00 stretch) and one at 14:30 UTC (Ana stretches again). Bilal is blocked on 29 October (Republic Day). Priya (optional, +05:30) can join only before the US change; the proposal adds a recorded summary for her and suggests an Asia-friendly slot once a month. ## Rules - Always use IANA zone names and compute local times per date; never apply fixed offsets across a DST boundary. - Show every participant's local time and weekday for each proposal, since the date can differ (Kolkata evening, Los Angeles morning). - Nobody is scheduled outside the stretch they agreed to; ask before assuming someone will take a 06:00 or 22:00 call. - Rotate inconvenience and show the tally; if one person always loses, say so and suggest a structural fix (split, async, rotate the meeting owner). - Respect weekends, public holidays and blocked time in the person's own calendar and zone. - Keep the recommendation short; put the full table in an appendix. FILE:references/dst-and-time-zone-pitfalls.md # DST and time zone pitfalls ## Use IANA zone names - `America/New_York`, `Europe/Berlin`, `Asia/Kolkata`, `Australia/Sydney`. They carry the full history and future rules of that region. - Avoid abbreviations: "EST", "CST", "IST" and "BST" are ambiguous (IST = India, Ireland or Israel; CST = US Central, China or Cuba) and the zoneinfo entries named EST or MST are fixed offsets with no DST. The script warns on names without a "/". - Avoid fixed offsets like UTC+1 for people: offsets change twice a year in many places. - Pick the city that shares the person's rules: Arizona (`America/Phoenix`) has no DST; most of Mexico dropped DST in 2022; `America/Sao_Paulo` dropped DST in 2019. - Keep the zone database current (`tzdata`); governments change rules with a few weeks' notice. ## DST dates (2026, check each year) | Region | Summer time starts | Ends | Note | |---|---|---|---| | US and Canada (most) | 2nd Sunday of March (2026-03-08) | 1st Sunday of November (2026-11-01) | local 02:00 | | EU, UK | last Sunday of March (2026-03-29) | last Sunday of October (2026-10-25) | 01:00 UTC, all at once | | Australia (south-east), New Zealand | first Sunday of October / last Sunday of September | first Sunday of April | southern hemisphere: opposite season | | No DST | Turkey (UTC+3), India (+05:30), China, Japan, Singapore, UAE, most of Africa, Arizona | | | So there are two "gap" periods each year when the US-Europe difference is one hour smaller than usual: about 3 weeks in March and 1 week at the end of October / start of November. Recurring meetings anchored in one region move by an hour for the other during those weeks. ## Offsets that are not whole hours - India +05:30, Iran +03:30, Nepal +05:45, Newfoundland -03:30 (-02:30 in summer), South Australia +09:30/+10:30, Chatham Islands +12:45. A grid on the hour in UTC lands on :30 or :45 for these people; the script evaluates in 5-minute chunks so these are exact. ## Weekends and working days - Sun-Thu working weeks: e.g. Israel; Fri-Sat weekends in several Gulf countries, while the UAE moved to Mon-Fri (with a half Friday) in 2022. Ask each person. - Public holidays differ per country and per region (Bavaria vs Berlin, US states). Add them to the blocked file in local dates. - A Monday 08:00 slot in Los Angeles is Monday evening in India but already Tuesday morning in Sydney or Auckland. Always show the weekday per person. ## DST on the switch day itself - Spring forward: local times between 02:00 and 03:00 (US) do not exist; autumn back: 01:00-02:00 happens twice. Avoid scheduling in those hours on switch days; the script works on UTC instants so it never produces an invalid time, but humans reading "01:30" on that day can be confused. ## Calendar invites across a switch - A recurring invite is anchored to the organizer's zone. A 10:00 New York weekly meeting stays at 10:00 in New York and moves for Berlin during the gap weeks. - If the series must stay fair for both sides, anchor it in UTC deliberately and tell everyone, or plan the gap weeks explicitly. - Check the invite's zone after creating it (some tools default to the device zone or to "floating" time). FILE:references/fairness-and-rotation.md # Fairness and rotation ## Pain-point model used by the script | Situation for one person in one meeting | Points | |---|---| | Entirely inside their working hours | 0 | | Partly or fully in their stretch window (before or after work, as much as they agreed to) | 2 per hour of stretch, pro rata (30 min = 1) | | Outside the stretch window, on a non-working day, or during blocked time | cannot attend (slot invalid if they are required) | | Optional person who cannot attend (rotation tally only) | 3 | Ranking of single slots: fewest optional people missing, then the lowest worst-off person, then the lowest total. Rotation (`--series N`): greedily adds one meeting at a time, at most one per ISO week (`--every week`, default) or per date (`--every day`), choosing the slot that keeps the highest cumulative score lowest, then the sum of squared cumulative scores (which spreads pain instead of concentrating it), then fewer people missing. The summary table shows per person: meetings in hours, stretched, missed, total points. The weights are a model, not a truth. Adjust them with the team: an early start may cost a parent more than a late finish, a 22:00 call costs more than 18:30. Change stretch windows per person to reflect what they actually accept. ## Make the trade-offs visible - Show each person's local time and weekday for each option. - Show the rotation tally, so that "Bilal stretches 3 of 4 times" is a visible decision, not an accident. - Ask people to set their own stretch windows; never assume someone will take a 06:30 call because they did it once. ## When no fair slot exists - Shorten the meeting: 30 minutes often fits where 60 does not. - Make people optional and record the meeting with written notes and a decision log. - Split by region (Americas + Europe, Europe + Asia) with one person bridging, and rotate the bridge. - Alternate two time slots week by week (e.g. 14:00 UTC and 07:00 UTC) so each side gets the convenient one half the time. - Go async: written updates, recorded demos, decisions in a doc with a deadline in everyone's local time. ## Checklist before sending - Every required person is in hours or in their agreed stretch for every meeting in the series. - Holidays and leave in each country are in the blocked file. - DST changes in the range are named, and the series accounts for them. - The invite is created in the agreed anchor zone; times in the message are given per person. - There is a review date (e.g. after the next DST change) to rotate again. FILE:templates/slot-proposal.md # Meeting time proposal: <meeting name> **Who:** <Ana (Los Angeles), Dana (New York), Eva (Berlin), Bilal (Istanbul), Priya (Kolkata, optional)> **Length / cadence:** <60 min weekly, Tue-Thu> **Range checked:** <2026-10-26 to 2026-11-20> **Anchor zone for the invite:** <UTC / organizer's zone> ## Recommendation | Week | Start (UTC) | Ana | Dana | Eva | Bilal | Priya | |---|---|---|---|---|---|---| | <Oct 26> | <Tue 13:30> | <Tue 06:30 (stretch)> | <09:30> | <14:30> | <16:30> | <19
출처 · prompts.chat 공개 프롬프트 모음 · 작성 Fatih Kadir Akın — CC0(저작권 포기)로 공개된 원문을 그대로 싣습니다. 한국어 정리 · 실행 결과는 아직 없습니다.