# Booking cutover planning worksheet Companion guide: /learn/plan-a-booking-cutover This is a fictional planning exercise, not an importer or a tested migration. All real execution results are **Not tested**. Keep customer data out of this practice sheet. All sample appointments are on November 3, 2026, in UTC, and occupy 45 minutes with the end excluded. ## 1. Snapshot at 08:00 UTC | Booking | Fictional customer | Staff | Start–end | Status | Revision | | --- | --- | --- | --- | --- | --- | | B01 | C01 | Ada | 09:00–09:45 | confirmed | 1 | | B02 | C02 | Ada | 10:00–10:45 | confirmed | 1 | | B03 | C03 | Ada | 11:00–11:45 | confirmed | 1 | | B04 | C04 | Mo | 09:00–09:45 | confirmed | 1 | | B05 | C05 | Mo | 10:00–10:45 | confirmed | 1 | | B06 | C06 | Mo | 11:00–11:45 | confirmed | 1 | Snapshot totals: 6 records, 6 confirmed, 0 cancelled. Lin is the only operator. OLD is initially the only authoritative writer. Candidate copies cannot accept changes. ## 2. Filled numbered journal Every row is a fictional instruction, not an observed app action. The timestamp is intake/action time; an appointment may be later. Keep stable event IDs across retries. Identical structured content is a no-op on replay; changed content with the same ID is a conflict. JSON key order alone is not a change. | Seq / ID | UTC time | Actor / source | Action and exact intended payload | | --- | --- | --- | --- | | 1 / J001 | 08:05 | Lin / OLD | Cancel B02, expected revision 1; preserve row and original time | | 2 / J002 | 08:10 | Lin / OLD | Reschedule B04, expected revision 1, to 12:00–12:45; preserve ID and 09:00 history | | 3 / J003 | 08:15 | Lin / OLD | Create B07 / C07 / Ada / 12:00–12:45, revision 1; walk-in request accepted for noon | | 4 / J004 | 08:20 | Lin / OLD | Open K01 on B05: OLD 10:00, stray candidate 10:30; no accepted reschedule | | 5 / J005 | 08:25 | Lin / OLD | Resolve K01, B05 expected revision 1; keep 10:00. Evidence: fictional OLD row B05 and J001–J004. Reason: no accepted instruction supports 10:30. Append revision 2 with unchanged time | | 6 / J006 | 08:30 | Lin / OLD | Freeze accepted booking changes after J005; both copies read-only | | 7 / J007 | 08:35 | Lin / CONTROL | Fictional approval by Lin after all eight checks pass through watermark 5; NEW becomes sole writer | | 8 / J008 | 08:40 | Lin / NEW | Create B08 / C08 / Mo / 13:00–13:45, revision 1 | | 9 / J009 | 08:45 | Lin / NEW | Cancel B03, expected revision 1; preserve row/time/history | | 10 / J010 | 08:50 | Lin / NEW | Pause acceptance for a fictional recovery review; both copies read-only | | 11 / J011 | 08:55 | Lin / HOLD | Q01 requests B08 at 13:30; unconfirmed, owner Lin, next action review after reconciliation. No accepted booking change | Example duplicate: replay exact J003 after J011. Expected: still eight records, one B07, no extra event/history row. Change J003's time, actor, source or payload and reuse its ID: reject without changing state. A new event with a missing, repeated or out-of-order sequence also fails. ## 3. Expected checkpoint key Counts include cancelled rows. An unresolved conflict is not a new appointment. An unconfirmed request is not a confirmed booking. | Through | Phase | All records | Confirmed | Cancelled | Open conflicts | Unconfirmed requests | | --- | --- | --- | --- | --- | --- | --- | | Snapshot | OLD | 6 | 6 | 0 | 0 | 0 | | J001 | OLD | 6 | 5 | 1 | 0 | 0 | | J002 | OLD | 6 | 5 | 1 | 0 | 0 | | J003 | OLD | 7 | 6 | 1 | 0 | 0 | | J004 | OLD | 7 | 6 | 1 | 1 | 0 | | J005 | OLD | 7 | 6 | 1 | 0 | 0 | | J006 | FROZEN | 7 | 6 | 1 | 0 | 0 | | J007 | NEW | 7 | 6 | 1 | 0 | 0 | | J008 | NEW | 8 | 7 | 1 | 0 | 0 | | J009 | NEW | 8 | 6 | 2 | 0 | 0 | | J010 | PAUSED | 8 | 6 | 2 | 0 | 0 | | J011 | PAUSED | 8 | 6 | 2 | 0 | 1 | ## 4. Complete accepted register after J011 | ID / customer | Staff | Accepted time | Status / revision | Event history retained | | --- | --- | --- | --- | --- | | B01 / C01 | Ada | 09:00–09:45 | confirmed / 1 | Original snapshot | | B02 / C02 | Ada | 10:00–10:45 | cancelled / 2 | J001: confirmed revision 1 at 10:00 → cancelled revision 2; no occupied interval | | B03 / C03 | Ada | 11:00–11:45 | cancelled / 2 | J009: confirmed revision 1 at 11:00 → cancelled revision 2; no occupied interval | | B04 / C04 | Mo | 12:00–12:45 | confirmed / 2 | J002: 09:00 revision 1 → 12:00 revision 2, same ID | | B05 / C05 | Mo | 10:00–10:45 | confirmed / 2 | J005: resolution preserves 10:00, revision 1 → 2; evidence/reason above | | B06 / C06 | Mo | 11:00–11:45 | confirmed / 1 | Original snapshot | | B07 / C07 | Ada | 12:00–12:45 | confirmed / 1 | J003 creation once | | B08 / C08 | Mo | 13:00–13:45 | confirmed / 1 | J008 creation; J011 does not change this row | Separate request queue: Q01 / J011 / B08 / requested 13:30 / **unconfirmed** / owner Lin / review after reconciliation. K01 remains in conflict history as resolved; do not delete its proposed 10:30 or Lin's reason. ## 5. Go / hold / return-to-old decision key | Candidate or checkpoint | Expected planning decision | Why | | --- | --- | --- | | Snapshot-only copy after J003 | Hold | B02 cancellation, B04 reschedule and B07 creation are missing | | Candidate through J004 | Hold | K01 unresolved even though record totals match | | Frozen through J005, checks incomplete or unknown | Hold | No implied pass; name evidence and owner | | J007 with all eight declared fictional checks passed and Lin approval | Illustrative GO to NEW | Watermark 5 reconciled; OLD is frozen and conflict closed. Real result: Not tested | | After J010 pause | Hold | Keep accepted state; no further confirmation while inspecting recovery | | OLD copy through J005 offered as rollback | Hold | B08 absent, B03 wrongly confirmed, Q01 absent | | Same totals but B08 set to 13:30 | Hold | Request has been wrongly promoted to accepted time | | Separately prepared fallback matching final register, revision/history and Q01; one-writer and actual rehearsal/approval/communication evidence still missing | Hold | Data agreement does not establish operational safety | | That matching fictional fallback plus explicitly satisfied rehearsal/authority/approval/communication conditions | Eligible for return-to-old review only | No actual return is executed by this exercise | The eight go checks: (1) stable IDs/aliases, (2) statuses/cancellations, (3) staff/current times, (4) revisions/history, (5) contiguous event IDs through the named watermark, (6) conflicts and requests, (7) OLD stopped/one proposed writer, (8) rehearsed access/availability/recovery. Lin's approval is required separately. Counts alone cannot pass checks 1–6. ## 6. Blank plan for your own rehearsal Use fictional records first. Do not paste real contacts, payments or private booking notes here. - Workflow and proposed appointment timezone: - Named operator and backup responsibility: - Snapshot ID/time, field mapping and record count: - Before freeze: sole authoritative source and where accepted changes are journaled: - During freeze/pause: request intake owner and wording that makes requests unconfirmed: - Freeze boundary and final accepted-event watermark: - Candidate reconciliation evidence: - Unresolved conflicts and who decides them: - Fallback candidate and how it preserves post-handoff accepted events plus pending requests: - Named approval, communication plan and conditions for holding instead: | Seq / event ID | Time / actor / source | Booking / expected revision | Requested action / payload | Accepted or unconfirmed | Evidence / resulting revision | | --- | --- | --- | --- | --- | --- | | Fill in | Fill in | Fill in | Fill in | Not tested | Fill in | | Check | Expected answer | Actual result | Evidence | Owner / next action | | --- | --- | --- | --- | --- | | IDs and aliases | Exact intended set, no duplicate booking | Not tested | | | | Status/cancellations | Cancelled rows retained, no resurrection | Not tested | | | | Staff/current occupied times | Correct accepted interval per ID | Not tested | | | | Revisions/history | Old time, cancellation and resolution retained | Not tested | | | | Journal/watermark | No missing sequence; exact replay no-op | Not tested | | | | Conflicts/requests | All conflicts resolved; requests remain separate | Not tested | | | | Single writer | One place accepts, or none during owned pause | Not tested | | | | Access/availability/recovery | Actual rehearsal evidence for each | Not tested | | | Decision: Go / Hold / Eligible for fallback review. Named approver, evidence, unresolved conditions and next review: If a prototype is justified, open /learn#brief-builder, edit its audience/outcome/records inputs and review the generated brief before Start build. Request authorized-staff-only booking reads/writes and test unauthorized accounts separately. Supply your fictional setup and expected answers yourself; the link does not import this worksheet. Inspect /templates/bookslot only as a potential starting point, with no import, synchronization, freeze, audit-history or rollback capability established by this worksheet. Otherwise keep the current safe process and record the next test.