Locked · signed off · ready to build

Reschedule & Postpone — the simple version

A chat per match, anyone suggests a date, it moves when everyone agrees. 14 July 2026.

Moving a match is an async conversation between two captains and HKPL. So each match that needs moving gets one thread (a chat). People talk, someone suggests a date, and the match moves once everyone taps Agree. No turns, no “who goes first.”

🔑 The one rule: a date is final when all three agree — both captains + HKPL. Anyone can suggest a date; anyone can disagree and suggest another; HKPL can break a stall by naming one.

1 · One button, two doors

📅 Reschedule“I have dates in mind.” → thread opens with a suggested date already in it.
⏸️ Postpone“Can’t make it, no date yet.” → thread opens empty; match shows TBA until someone suggests a date.

Same thread, same machinery — the only difference is whether it starts with a date. (That’s why they used to feel identical.)

2 · What the thread looks like

Captain A · MT-CLUB-A  “Can’t do Sat 20 — away for work. Could do the following week?”
📅 Suggested: Thu 25 Jul · Kowloon Park Court 3 — by Captain A
✅ Captain A   Captain B: Agree / Disagree   HKPL: Agree / Disagree
Captain B · BEN-CLUB-A  tapped Agree on Thu 25.
HKPL (Division Rep)  tapped Agreecourt + ref sorted.
✅ All agreed → match moved to Thu 25 Jul.

If HKPL (or a captain) taps Disagree, they suggest a different date — a new date card drops in, and everyone taps again. Repeat until one date has all three ticks.

3 · The whole “state machine” (it’s tiny now)

Open (talking / dates on the table)  →  Agreed by all 3  →  Match moves.
HKPL can name a date at any time to break a stall. Weather/typhoon is separate — HKPL/system sets it top-down, no chat.

4 · Who’s notified

WhenWho hears about it
Someone suggests / changes a dateThe other two (🔔 “a date needs your OK”)
Someone agrees or disagreesThe other two
All three agreedBoth captains — “Match moved to <date>”
Nothing agreed & someone needs it movedAny captain can tap “Ask HKPL to decide” → HKPL named on the thread (no auto-timer — self-regulated)

5 · Edge cases (kept simple)

One captain goes quietHKPL names a date — all-3 rule still satisfied (HKPL + the responsive captain, HKPL decides).
Past the play-by deadlineHKPL must be the one to set the date (captains can’t self-agree beyond the deadline).
Already scored / in progressCan’t reschedule — registrar correction instead (existing rule).
Agreed in person on the spotAny of them suggests the date, the others tap Agree — same flow, just fast.
Weather / typhoonUntouched — HKPL/system sets POSTPONED, no negotiation.

6 · What we reuse

Match request record (the state), DM/chat + 🔔 notifications, and the division-rep role — all already exist. New work = the one button + chooser, the date-card in the thread with Agree/Disagree, and the “moves when all 3 agree” rule.

7 · Decided

A · Record the court too. A suggestion is a date + court/venue (players need to know where), and both are recorded when it moves.
B · No time limit on TBA. A postponed match can sit at TBA as long as needed — teams and HKPL self-regulate; no auto-nudge timer. (Any captain can pull HKPL in whenever they want it decided.)
Locked per Vincent: HKPL always agrees (control + one-tap, can disagree & propose). Supersedes v1’s propose/counter engine. Signed off — ready to build on your go. Current live behaviour is the safe governed flow; the unilateral one-click postpone was reverted.