Troubleshooting

Symptoms, in the words you would use before you know the cause.

For the defect list — what is known-broken and where the fix goes — see known issues. This page is the index from what you are seeing to which page explains it.


Running locally

SymptomCauseFix
A run sits on a step and nothing happensnpm run dev starts no worker, and input is the only type a request advancesnpm run dev:all — installation
npm run job:step exits immediatelyrequireSafeExecuteEnvOrExit() kills the worker when SAFE_EXECUTOR_PRIVATE_KEY or ETH_RPC_URL is unsetSet both, even to throwaway values — environment
Every API call returns ECONNREFUSED, but the UI loads fineMONGO_URL is set and nothing is listening on itStart Mongo, or unset MONGO_URL to fall back to file storage — storage
No templates anywhereRegistry empty / wrong STORAGE_DRIVER, or reading a fresh store before any list/getConfirm applications/main/src/templates/registry.ts; hit /templates once so storage gap-fills missing keys — manage templates
tsc errors under .next/types/Stale generated types from a build on another branchrm -rf .next
A change to the storage backend does nothingThe backend is bound once at module loadRestart — there is no runtime switch

Signing in

SymptomCauseFix
Login succeeds, then every screen is empty and every action is deniedMissing deployment policy, unverified email or app membershipCheck target-scoped identity and application access
Login stalls after picking an organizationThe silent org-scoped authorize returned consent_requiredEnable Allow Skipping User Consent on the API
The org picker is emptyMissing or unscoped AUTH0_MGMT_CLIENT_ID / _SECRETGrant read:organizations, read:users, read:roles
Login succeeds but actions are 403Missing target-app declared permissionsReview app role assignments — application access

Authoring templates

SymptomCauseFix
A step will not complete and nothing looks requiredcompleteExpression, not mandatory. The 403 deliberately does not distinguish "not allowed" from "not complete"Read the step's completeExpression — expressions
Editor changes vanish after savingThe step type is missing a case in flowToTemplateadd a step type
A historical raw script definition will not saveRuntime source execution has been removedUse the attested offline converter or author a closed template composition — template editor
enabledExpression has no effectDeclared in the authoring model, never evaluatedknown issue 3
A repo template edit never reached the appProcess is using its snapshot, not the live template; or you edited storage onlyCheck process.template; for live list/start, confirm the key is in registry.ts
templates:status looks all sameExpected — reads overlay/upsert shipped keysUse status mainly for db-only rows — manage templates
A mandatory field is not being enforcedmandatory is skipped on hidden and read-only fieldsUse completeExpression for conditional rules — field types

Runs in flight

SymptomCauseFix
A run reads completed but clearly failedfailProcess() sets status = "completed" and populates error. There is no failure stateCheck error — known issue 2
A notification never arrivedThe send failed; the run advances anyway by designThe step shows Not sent with the reason, the rail marks it, and the completion screen lists it — step types
A notification sent, but somebody was not pingedMentioned users who are not in the channel are dropped by SlackThe step shows Sent, but not to everyone and names them. Invite them to the channel
Slack says no channel named …The bot is not in the channel, or the channel does not existThe bot must be invited; private channels must be joined to be listable
A step retries endlessly and logs every secondAn unguarded throw — condition, automatic, wait, request, or a notify transport errorknown issue 1
An expression fails on a step that has not run yetContext is populated as the run advances; earlier keys may be absentGuard it: input.foo && input.foo.length > 0
A progress bar sits at 90%, or moves backwardsProgress counts array position, and array order is meaninglessknown issue 9
"Awaiting My Sign-off" always reads 0Hardcoded, never computedknown issue 7
The dashboard and /processes disagree about the same runThey derive failure differentlyknown issue 8
Fixing a template did not fix a run already in flightThe run follows the snapshot taken at startExpected — templates

Whitelabel skins

SymptomCauseFix
The server renders one brand and the browser renders anotherNEXT_PUBLIC_* is only inlined on static property access; a dynamic lookup is empty client-sideRead process.env.NEXT_PUBLIC_FRONTEND_ID directly — whitelabel
The app throws at startup after a deployNEXT_PUBLIC_FRONTEND_ID names an unregistered profileDeliberate: a typo fails the deploy instead of shipping the wrong brand
A route is hidden from the sidebar but users still reach itA skin is presentation, not an access boundaryGate it with a permission — permissions

Deployed

SymptomCauseFix
The worker dies right after deployMissing SAFE_EXECUTOR_PRIVATE_KEY or ETH_RPC_URLdeployment
Nothing advances, but the app looks healthyZero workers running, or one that crashed. There is no heartbeat and no alertingSupervise the worker process
The same step executes twiceTwo workers on one database. The overlap guard is in-process onlyExactly one worker per database — deployment
A new step type can be authored but never executesThe worker is on an older build than the web serviceRebuild/deploy the compatible Platform runtime and compiled registration/capability configuration together
Links in notifications point at the wrong deployAPP_BASE_URL is not that service's own originEach web deploy needs its own

When the answer is not here

Use a focused check while iterating, then the complete gate before handoff:

npm run typecheck   # source, fixtures and test configuration
npm test            # Node unit/service tests
npm run check:docs  # documentation links, counts and stale claims
npm run verify      # complete local architecture/regression gate

For configured tests and their remaining coverage/enforcement limits, see known issue 4. For anything touching a step type, the fastest real check is to add it to a repository template, restart the app (startup publishes the changed digest), and confirm the step renders in the template viewer and the runner.