Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| Missing container | querySelector returned null. | Check the selector and mount after the element exists. |
| Missing transport | mountForm needs a submit path. | Pass transport. |
| Invalid transport config | transport.submit is missing or invalid. | Pass an object with submit(request) or use createJsonTransport(...). |
| Backend returned non-JSON | Default parser expects JSON. | Return JSON or use createJsonTransport({ parse }). |
| Unknown field kind | Registry does not include the field. | Use built-ins or register a custom field. |
| Unknown report kind | Registry does not include the report. | Use classifier, regressor, or register a custom report. |
| Duplicate id | Two fields or reports share an explicit id. | Give each item a stable unique id. |
| Custom element name invalid | Custom renderer tag lacks a hyphen. | Use a valid custom element name such as risk-band-field. |
| Form not updating after remount | Host reused stale schema/state. | Keep schema creation intentional and unmount on route changes. |
| Styles not inherited | Design system uses its own mode. | Use mode: "inherit" or override tokens at the container. |
Start with the browser console and the network tab. Most integration failures are either schema validation, missing DOM container, or backend response shape.