RUN 7 · Acceptance Walk — meet.boas.dev

0 pass 0 fail 0/26
tap a box to cycle: pending → PASS → FAIL · state saved in this browser · 2026-07-09 · walk-gate: operator acceptance (agent legs green in RUN 5/6)
Booking A (main)meet.boas.dev/p/mimir-viska-jul10 — Fri 10 Jul, 15:00–15:30 Berlin · "Mímir Viska" → /g/mimir-viska
Booking B (decline)meet.boas.dev/p/mimir-viska-alt-jul10 — Fri 10 Jul, 16:00 Berlin
Mailboxmimir@viskasjodir.is (invites landed 08:53Z, from metis@boas.dev)
On standbymetis %24 (fixes, DB slugs) · athena %23 (DB legs, verdicts) · no deploys mid-walk
P1

Invite & proposal page

01Invite mail in mimir inboxyou
Branded "Boas × Viska" invite, link to /p/mimir-viska-jul10.
02/p pending rendersyou
Branded page, slot card (Fri 15:00 Berlin), zero cal.com references anywhere.
03Negative probesathena
Unknown slug → 404 · bad token → 404. Athena curls, reports in pane.
P2

Counter-picker (G7 Option-1)

04"Pick another time" → live gridyou
Picker opens with live availability; select a different slot.
05Slot updates, no 410you
303 back to /p, still pending, card shows the new slot. The RUN 1 counter→410 must not appear.
P3

OTP

06"Send me a code" → OTP mail landsyou
Code mail arrives in mimir inbox within ~1 min.
07Wrong code once → clean erroryou
Deliberate typo: readable error, form stays usable, no crash, no dead-end.
08Correct code → book stepyou
303 to step=book, "Confirm & book" visible.
P4

Book & /g arrival (R6)

09Confirm & book → CONFIRMED cardyou
Single confirmation card, URL carries ?pt=, "OPEN YOUR MEETING PORTAL →" CTA.
10Auto-forward → /g/mimir-viskayou
Lands on the guest portal with token + ns= arrival param — the R6 leg.
11Countdown hero tickingyou
Live T-minus to Fri 15:00 Berlin, seconds ticking.
12Prep artifact: clean degradeyou
Viska world has no prep pack (coral-only) — expected: card hidden, direct /prep hit 404s cleanly. No broken card, no error splash.
known gap · by designPrep content pack exists only for coral. Absence of the card IS the pass condition here.
13Ego-graph renders — viska world onlyyou
Graph canvas renders (7 curated members, 1 meeting). Zero coral nodes — cross-world isolation.
14Confirmation mail landsyou
Inline JMAP branded confirmation: portal link primary (/g/…?t=…&ns=…) + /m manage link. Cal's own .ics may also arrive — separate mail.
15DB rows landedathena
events row + meetings row live-verified. Expected: contact_id = NULL — no bind mechanism deployed (enrich E4 gated), and NO new crm_contacts row minted. Booking will NOT appear in the /g meetings list — that is correct today.
P5

/m manage + reschedule

16/m from mail — full manage surfaceyou
UPCOMING card, countdown, JOIN + "Choose a new time" + Cancel — all own-domain (no cal.boas.dev anywhere).
17Reschedule request — first-ever manual walkyou
"Choose a new time" → own-domain picker (apollo desktop calendar). Pick a slot, submit → opens a host-awaiting proposal; calendar stays untouched until host confirms.
known gap · will hitHost notification rides the dead notifications queue — you get no email. Metis surfaces the reschedule-proposal slug live from DB so the leg can be inspected.
18Idempotency re-POSTsathena
accept + request-otp re-POST on the booked row → 303 (never 410), booking_uid unchanged, no double-book. The T078 fix, live.
P6

Own-domain cancel (084 route)

19Cancel → branded confirm stepyou
GET shows "Cancel this meeting?" with reason field + "Keep the meeting" + reschedule escape hatches. Never cancels on GET.
20Confirm → "Meeting cancelled" terminalyou
Reason typed, POST → branded cancelled state with WAS card + contact fallback.
21Cal "Canceled:" mail landsyou
Cal's stock cancellation notice arrives (branded cancel-mail = tracked follow-up metis#242, not this walk).
22DB propagation <10sathena
events.deleted_at + meetings.status=cancelled + cancelled_at, identical timestamps.
23Re-open cancel URL — idempotentyou
Cancelled state again, zero forms — never re-fires Cal.
P7

Decline leg (booking B)

24Invite B → /p pending → Decline linkyou
Decline on /p is a mailto:contact@boas.dev compose, not a button-action — there is no guest decline POST (decline.ts is host-token-only). Pass = mailto opens, row stays pending.
your ruling neededAccept mailto-decline as-designed, or direct a guest-side decline action as follow-up work. Either way metis then fires the host-token decline live so leg 25 runs.
25Declined terminal + DB statemetis
Host-token decline fired → /p shows declined terminal (danger card). Athena verifies: proposal declined, no booking, no meetings row.
P8

Post-walk: CRM, purge, log

26CRM integrity + purge + RUN 7 logathenametis
Athena: no mimir crm_contacts duplicate minted, Mímir row 20acda98 untouched, agent identity intact. Purge: meetings tombstoned meeting_class=operator_test, proposals declined. Metis: RUN 7 appended to TEST-RESULTS.md.

WALK GREEN

All 26 legs passed. Acceptance complete — Juergen GO package unblocked.