Happy path / Lifecycle
Quick-create a Zoom webinar.
Organizer chooses webinar, date, registration mode, and host.
Detect unsupported settings.
If Zoom rejects a setting, Voyage shows a repair panel with the failing setting and supported alternatives.
Apply repair.
The repair action retries creation with supported settings and preserves the organizer's original intent in audit.
Failure modes
OAuth refresh
Expired Zoom token refreshes and retries settings read.
Rate limit
Zoom 429 backs off with jitter.
Webhook replay
Repeated repair callback is idempotent.
Schema drift
Unknown Zoom settings fields are ignored.
Missing credential
Re-auth CTA appears without stack trace.
Sandbox isolation
Zoom dev account fixture cannot mutate production data.
Audit row
Every quick-create or repair writes one audit row.
Partial rollback
Failed repair rolls back or shows per-setting outcomes.
Public registration disabled
Repair panel explains org setting and offers a supported alternative.
Host lacks webinar license
UI identifies host-license issue before retry loops.
Existing webinar mismatch
Linking an incompatible webinar shows repair rather than silent overwrite.
Parity gap
Gap panel remains until unsupported-setting repair is implemented.
Stable test attributes
Visibility teeth. Repair guidance and gap states must be visible, not only logged.
| data-test | Where | Purpose |
|---|---|---|
zoom-repair-panel | Zoom settings | repair surface |
zoom-quick-create-cta | Zoom settings | quick create |
zoom-unsupported-setting-alert | Zoom settings | settings failure |
zoom-repair-apply-cta | Zoom settings | apply repair |
zoom-host-license-alert | Zoom settings | license issue |
zoom-repair-outcome-table | Zoom settings | per-setting outcomes |
zoom-status-pill | Zoom settings | sync state |
zoom-repair-gap-panel | Zoom settings | partial gap marker |
Agent test plan
- zoom-repair-opens
- zoom-unsupported-setting-repair
- oauth-refresh-on-expired-token
- rate-limit-backoff
- webhook-replay-idempotent
- schema-drift-degrades-gracefully
- missing-credential-graceful-error
- sandbox-vs-prod-isolation
- audit-log-row-per-sync
- partial-import-rollback
- public-registration-disabled
- host-webinar-license-missing
- existing-webinar-mismatch
- zoom-repair-gap-probe