# Facilitator runbook

## Before the room opens

Complete `deployment.md` readiness checks and save measured results. Bring a working event code, a known demo project, a canary browser profile, and an extra private browser window for isolation checks. Keep the source archive available even if live inference is unavailable. The public guide is usable without joining.

Set an event budget and verify billing/service limits for Workers AI, Vectorize, Workers, and Durable Objects. The app allows 100 live operations per participant per UTC day, 12 per minute, and 6,000 across the event. One operation may include embeddings plus generation, so this is an operation ceiling rather than a dollar cap. Source downloads, saved data, and reminder delivery do not run inference. Use a dedicated staging deployment for the 50-user script.

Confirm the account/deployment handoff with the coordinator before promising attendees a deployed app in their own account. The source/rules/data exports are implemented; the temporary-account claim flow belongs to the portal. No workshop dates, venue, registration provider, or consultation booking endpoint are assumed.

## Facilitation cadence

- **0–15:** Explain the private session. Demonstrate two browser profiles, not two tabs: tabs share a cookie. Show the public example label and the live service status.
- **15–35:** Let participants invent their project. Save two facts and edit one. Ask someone to refresh and explain why their changes remain.
- **35–60:** Demonstrate the explicit Index button. Distinguish “submitted” from “searchable.” Open the actual evidence before reading an AI answer.
- **60–85:** Keep one question fixed while changing rules. Let participants inspect a high-threshold failure and restore a useful value.
- **85–110:** Give contradictory budget facts. Verify both are in the retrieved context before judging conflict handling. Delete one, search immediately, and show that the old conversation was cleared.
- **110–130:** Everyone schedules a one-minute prompt and closes the tab. Reopen after it is due. Explain at-least-once alarms and unique delivery IDs.
- **130–145:** Download source, rules, and data; save a private resume code. Rehearse import preview/confirmation in a second workspace, check new IDs, and explicitly index restored records. Activate restored check-ins individually. Follow the coordinator's browser-first claim/deployment handoff. If unavailable, explicitly mark deployment incomplete and keep exports; do not call a source download a deployment.
- **145–150:** Ask three participants to explain isolation, forgetting, and citation limits. Offer technical consultation only through the coordinator's chosen follow-up process.

## Challenge rubric

The UI's five milestone checks are action-based hints. Facilitator verification is stronger:

1. **Persistence (2 points):** current edited fact survives refresh (1) and reconnect/redeployment canary (1).
2. **Evidence (2):** semantic query finds the relevant note (1); cited answer matches the passage (1).
3. **Customization (2):** saved rules survive refresh (1); participant explains observed before/after behavior without claiming model guarantees (1).
4. **Conflict/forgetting (3):** two opposing sources are retrieved (1); policy experiment is explained (1); deleted source is absent immediately and after reindex/search (1).
5. **Scheduling/isolation (3):** closed-browser reminder appears once (1); canceled reminder stays absent (1); second profile cannot see first profile's records or citations (1).

Do not infer that a checkbox proves AI quality. A malicious-note stretch exercise is useful for separating model reliability from backend authorization: no model output can invoke writes or cross participant boundaries.

## Troubleshooting and stop conditions

| Symptom | Action |
| --- | --- |
| Login fails for everyone | Check secret presence and event code; inspect `/api/health`; wait out the join rate limit |
| Data missing in a second tab | Check whether cookies were cleared or the hostname changed; profiles are separate identities. Use the saved private resume code to reopen the original workspace |
| Data survives but search is disabled | Confirm LIVE_ENABLED, AI binding, index name/dimensions, permissions, and account limits |
| Indexing errors | Keep record saved/pending, correct service issue, then explicitly reindex |
| Index submitted but no result | Allow propagation, compare wording, and inspect score threshold; don't invent successful results |
| Model returns invalid citations | No answer is saved; retry once. Inspect source coverage before blaming generation |
| Multiple facts disagree | Confirm relevant passages actually fit topK; then compare ask/newest |
| Delete cleanup pending | Current retrieval still excludes retired IDs; restore Vectorize and use Retry cleanup after six attempts |
| One-minute nudge late | Allow a minute for platform delays, reopen/refresh; verify schedule exists |
| Broad 429/AI outage | Pause live steps, retain saved work, run storage/rules/alarm exercises; record incomplete live validation |
| Any cross-participant content or deleted citation | Stop live participation, preserve a content-minimized repro, disable live operations, and fix before continuing |

No attendee should share resume codes, cookies, access codes in screenshots, or cloud credentials. No test harness output should include credentials or full participant notes. The load report contains aggregate metrics and sanitized errors only.

## After the event

Coordinate retention and data deletion. Ask attendees to export and optionally reset. Record live service versions/configuration, tested limits, observed propagation/latency, failed challenges, and incomplete handoffs in operational notes. Do not claim a local test measured Cloudflare capacity. Coordinate any future account-wide cleanup with the owner; deleting an index is not a participant-level action.

## Restore and resume challenge

Use two isolated browser profiles. Export a build with a note, custom rules, one cited answer, and a pending check-in. In the destination, create one unrelated memory. Preview adding the backup: verify no data changed; cancel once. Preview again, explicitly choose the backup rules, and confirm. The unrelated memory must remain, imported IDs must differ, and the pending check-in must be paused. Index an imported record and test retrieval. In a disposable destination, test explicit replacement and confirm old vectors cannot become citations. Edit a record after preview and verify confirmation rejects the stale preview.

Create a resume code in the original profile, save it privately, and use it in the second profile to reopen that exact workspace without an event code. Replace the code and verify the previous code fails; revoke the replacement and verify it also fails. Never paste a code into a URL, screenshot it, or include it in workshop reports. Loss of both session and code has no identity recovery flow; a separate JSON backup remains importable. Code revocation does not revoke already-issued session cookies.
