# Troubleshoot app building

The builder reports problems by definition location. Start with the named component, source, property, event, or layout relationship instead of changing unrelated fields until Save becomes available.

| Problem | What to inspect |
| --- | --- |
| Save disabled | No unsaved changes, a reported definition problem, invalid pending Code text, or a save already running. |
| Code will not switch to Canvas | Correct JSON/schema errors; the builder is preserving rejected text rather than discarding it. |
| Empty Preview | Confirm the source target and scope, then check the binding path and component's expected value type. |
| Button cannot run in Preview | Preview does not execute backend workflow triggers. Save and test in the app. |
| Run action invalid | Select a workflow-record source, enable Allow run trigger, and remove any fixed run pin. |
| Watch action invalid | Supply a non-empty upload ingestId binding; remove ingestId when using fetch or run. |
| Action chain stops | Inspect the first error. Later actions do not run after an executor or binding failure. |
| Output source says Unknown | Retry the directory read; incomplete evidence does not prove withdrawal. |
| Output source has no matching types | Remove or correct narrowing within the producer's published record types. |
| Nesting refused | Check parent type, slot name, cycles, and the four-level cap. |
| Region cannot be changed | The component inherits its root container's region; move it to top level first. |
| Span has no effect | Span applies to the main grid, not every sidebar or detail arrangement. |
| Hidden component loses local state | Check whether that type supports literal Preserve state while hidden. |
| Copied control changes original target | Duplicate copies action references; update targets intentionally. |
| Binding broke after rename | Review expression text for the old id even if explicit action references were retargeted. |
| Feature unsupported by engine | Upgrade the app's engine or use a supported configuration; redeploying does not change its pin. |

## Separate draft and runtime evidence

Preview reads a bounded sample and resets transient state when definition edits remount it. Use a saved running app to verify execution, durable table/document changes, review authority, and sharing. Use the workflow's run details to confirm a polling deadline did not merely stop observation of still-running work.

Before discarding a conflict or local draft, preserve any changes you still need. See [Saving and conflicts](/docs/builder/saving-and-conflicts) and [App troubleshooting](/docs/apps/troubleshooting).
