Skip to main content

Troubleshooting

Work stage by stage: build → publish → install → render. Every failure in the pipeline surfaces with a message; this page maps the common ones to fixes.

Build failures

SymptomCauseFix
solution id must be kebab-caseid has capitals, _ or starts with a digitRename to lowercase kebab-case, e.g. restaurant-pro
workflow file missingflows: lists an id with no workflows/<id> definitionAdd the definition or remove the entry
no signing keyNeither QEFRO_SIGNING_KEY_HEX nor QEFRO_KEYS_FILE resolvesProvide a key — see Packaging
manifest.yaml not foundBuild run outside the solution rootRun qefro solution build . from the package directory

Publish failures

SymptomCauseFix
Signature rejectedPackage rebuilt after signing, or wrong keyRebuild and republish in one flow; verify signature_kid
unknown widget typeWidget type outside the closed catalogueUse a supported kind — see Metric for the catalogue
unknown capabilityMisspelled or invented capabilityUse names from Capabilities
Icon rejectedIcon outside the closed host setPick from the set in Navigation
bad grid columnsLayout columns outside 1–12Correct the layout preset
Executable asset rejectedNon-image file under assets/Remove it — images only
Version existsRepublishing an immutable versionBump the version and publish again

Install failures

SymptomCauseFix
Connector dependency unresolvedNo published connector satisfies the constraintPublish the connector, or relax the semver constraint
Capability missing from granted setRequested capability has no grant precondition (workflow.trigger without workflow.execute)Add the manifest permission and publish a new version
Missing credentialConnector declares auth but the tenant skipped itComplete credentials in the install wizard / settings
Signature verification failedRegistry copy differs from stored checksumRepublish; if persistent, contact platform support

Render issues (installed, but wrong)

SymptomCauseFix
Widget shows an empty state, no errorThe source capability is not granted, so no request firedCheck the granted capability set on the installation card; compare with Capabilities
Scoped error card on one widgetDegenerate definition survived coercionOpen Developer mode → Solution UI events; look for ui.error; fix the definition and publish a patch
Table renders but columns are emptycolumns[].key doesn't match payload fieldsInspect the connector operation response; align keys (dot paths supported)
Metric shows an em-dashvalue_path doesn't resolve in the payloadVerify the runtime/connector payload shape for the path
Chart flat / no pointsRows lack x_key / y_key, or payload order is wrongPre-aggregate and order rows in the connector
Timeline emptyRows missing the time_field, or unparseable timestampsEnsure ISO timestamps in the payload
Form submit does nothingworkflow.trigger not granted, or workflow id wrongVerify workflow.execute permission and the action.trigger id
Navigation entry missingEntry's page doesn't resolveMatch navigation ids to pages.yaml ids
Theme looks wrong in one areaHard-coded colors in a widget/markdownMove styling into theme tokens

Where to look

ToolShows
Portal → Developer mode → Solution UI eventsui.loaded / ui.action / ui.error emitted by this tenant's UI
GET /v1/ui/events?limit=50Same events over the API (tenant-scoped)
Installation cardActive version, granted capabilities, declared connectors
Flow-run historyWorkflow executions triggered by the solution — see Run Business Flows
qefro solution listPublished versions and tenant installations

Escalation path

  1. Reproduce locally with qefro solution build . — most definitions are debuggable without a tenant.
  2. Compare the requested vs granted capability set — capability gaps explain most "silent" UI behavior.
  3. Check the connector side: operation exists, published version satisfies the constraint, pool healthy. See connector reference.
  4. Only then escalate to platform support with the solution id, version, tenant id and the failing event/error payload.