Troubleshooting — Symptom by Symptom
Do not guess. Match the exact symptom to the exact layer and follow only that recovery path.
Rule: identify the failing layer first
Use the symptom to choose one layer. Do not “fix everything” at once.
| Symptom | Layer |
|---|---|
| 522 / wrong origin | Pages custom domain / DNS |
| Unable to find Access organization | Zero Trust team domain / Access org |
| OTP denied | Access policy / identity provider |
Access succeeds, /api/command/me says Authentication required | Command JWT env/AUD/team domain/deployment |
| 503 COMMAND_DB | D1 binding |
| Upload 503/fails | R2 binding / auth / upload size |
| Button works in demo only | Backend/API deployment |
| OBS action never happens | Agent/service token/OBS |
522 Connection timed out on command.iridesceux.com
- Open the raw Command
*.pages.devURL. If that is broken, fix Pages first. - Workers & Pages → Command → Custom domains: verify
command.iridesceux.comis attached and Active. - DNS → search for
command. Remove stale A/AAAA/manual CNAME records that point somewhere else. - If you manually created a Pages CNAME without associating the domain in Pages, delete/fix it and use Pages → Custom domains → Set up a domain.
- If Access is already on the hostname and Pages refuses to attach the domain, temporarily remove the Access application, attach/activate Pages domain, then recreate Access immediately.
“Unable to find your Access organization”
Do not troubleshoot OTP first. Directly open:
https://iridesceux.cloudflareaccess.comIf the team-domain URL itself returns that error, the Access organization/team domain is the problem. Use document 19.
If the team-domain URL works but Command’s /cdn-cgi/access/authorized callback still shows the error, compare account/zone Access organization/application scope using document 19 and recreate the Command Access application only after the team organization is healthy.
Access login works, then /api/command/me says Authentication required
- Confirm you are testing the newest Command deployment.
- Confirm
COMMAND_REQUIRE_ACCESS_JWT=true. - Confirm
CF_ACCESS_TEAM_DOMAIN=https://iridesceux.cloudflareaccess.com. - Open Access app → copy the current Application Audience (AUD) Tag.
- Set
CF_ACCESS_AUDto that exact value. - If the Access application was deleted/recreated, assume the AUD changed and update Command.
- Confirm
BOOTSTRAP_ADMIN_EMAILexactly matches the authenticated email. - Redeploy Command.
- Open a fresh Incognito session and authenticate again.
COMMAND_ALLOW_HEADER_AUTH in production. The code intentionally requires signed Access JWT verification./api/command/me is 404 or HTML
- Command Pages root must be
command-app. - Output must be
public. functions/must exist directly undercommand-app, besidepublic/.- Deploy with Git integration or Wrangler; Cloudflare does not support Pages Functions through ordinary dashboard Direct Upload.
- Redeploy and retest.
503 COMMAND_DB binding is not configured
- Cloudflare → D1: verify database exists.
- Wrangler: verify schema tables exist.
- Command Pages → Settings → Bindings: D1 variable name must be exactly
COMMAND_DB. - Confirm binding is applied to production environment as intended.
- Redeploy.
- Retest the newest deployment.
R2 upload fails
- Confirm authenticated Command identity first.
- Command Pages → Bindings: R2 variable name exactly
COMMAND_ASSETS. - Verify bucket exists and is selected.
- Redeploy after binding.
- Use a small test file. Generic Command asset upload route currently rejects files over 25 MB.
- Check browser Network response for the specific API error.
Demo mode appears on deployed site
- Make sure URL is HTTPS Pages/custom domain, not
file://. - Remove
?demo=1. - Hard-refresh.
- Use Setup Doctor to prove backend Functions are reachable.
Access app creation error mentions clientless isolation/private destination
Return to the Access application’s Additional settings and disable the clientless/private-destination Browser Isolation option. Command uses a public hostname; do not enable a setting that Cloudflare restricts to private destinations.
Program Monitor blank
- Verify selected market.
- Open the HVN live-page URL directly.
- Check player source/feed URL.
- Check framing/security headers if the monitor embeds the page.
- Check whether private staging Access blocks the embedded request.
- Do not TAKE blind; restore monitor visibility first.
OBS command does nothing
- System Health: is Broadcast Agent online?
- Agent terminal: any authentication/network error?
- Verify
BROADCAST_AGENT_TOKENmatches on both sides. - If Access protects agent API, verify service-token ID/secret.
- Verify OBS WebSocket server enabled and password/URL correct.
- Verify exact scene/input names.
- Run harmless test scene switch.
Rundown / EPG / scheduled-break troubleshooting
| Symptom | Check |
|---|---|
| Schedule exists in Command but not on HVN | Confirm the correct market/day and press PUBLISH TO HVN WEBSITE. Draft days intentionally stay private. |
| Schedule shows on HVN but does not air | Confirm APPROVE DAY FOR AIR, then confirm that market is armed for schedule automation. Publication is not air authorization. |
| Local viewer sees National EPG unexpectedly | Confirm the local day is published and inspect Inherit National. A published local day with inheritance enabled overlays local blocks on National; with no local day, National is the fallback. |
| Commercial plays but show skips ahead | That is a release blocker for file playout. v24 must expose timeline pause/hold and the public player must use it. Do not air until the scheduled-break hold test passes. |
| Wrong local commercial airs | Verify break clock market ownership, selected rundown market, day air approval, and local-vs-National overlap. |
| National Screen Bug makes program black | Confirm the graphic is on the independent graphics bus. For AE black-matte exports use Screen-key mode; true-alpha assets use Normal mode. |
Automatic Premium HLS is UNAVAILABLE / FAILED
- Setup Doctor: check Premium media auto-packager.
- Confirm
MEDIA_PACKAGER_URLandMEDIA_PACKAGER_TOKENexist on Command. - Open the media-packager Worker
/healthendpoint. - Confirm its D1 ID and R2 bucket point to the same Command resources.
- If an older error says Dolby Vision signaling could not be derived or preserved, first deploy the current Dolby-aware media-packager and retry the same uploaded master. A separate mezzanine or manual HLS package is not required when the uploaded MP4/MOV already contains valid Dolby Vision signaling.