Troubleshoot the boundary, not the symptom alone
Most KayanOS problems happen at a boundary: the wrong organization, an unavailable published version, a role/scope mismatch, a missing field value, an offline synchronization step, a record lifecycle rule, a dashboard source query, a connection, or an API concurrency condition. A visible button, an empty list, or a generic error message is not enough to identify the cause. Use this workflow for a Citizen Service Request before changing configuration or asking a user to repeat work. Start with a controlled non-production record whenever possible. Do not widen a role, publish a form, re-run an action, or recreate a request merely to see whether the symptom disappears.
Capture a safe incident record first
Collect enough evidence to reproduce and route the issue without copying secrets or private content:
Give the incident a short title that states the boundary: “Inspector cannot submit offline inspection after reconnecting” is actionable; “KayanOS broken” is not.
Follow the same diagnostic order
- Reproduce safely. Can the intended role reproduce the symptom with an approved non-production request? Record exact steps and the expected result.
- Check the organization and identity. Confirm the selected organization, signed-in member/public participant, role, scope, form session owner, or integration token owner.
- Check availability. Confirm the feature is released, the form/version/template/dashboard/connection is configured for this use, and required publication/expiry/limit conditions are satisfied.
- Check data and state. Review required values, field types, options, relations, record status, form session status, version, and current lifecycle rule.
- Check the auditable boundary. Inspect the safe run/job/request/session/reference evidence. For an API problem, retain
x-request-id; for a KayanOS Automation, retain run ID; for an offline session, retain local submission ID and server session ID if available. - Choose the smallest safe remedy. Correct one known wrong setting/value, then re-test the same case. Do not batch unrelated changes.
- Document the outcome. Record root cause, change, test result, remaining risk, and owner. If the cause is not established, escalate rather than guessing.
Symptom index
Permission and availability failures
When something is missing, disabled, or refused, distinguish visibility from authorization. A navigation item can appear even though an operation on a specific record is denied. A selector can be visible while all eligible results are outside the member’s scope. A form expression can show a button while the server refuses the action. Check in this order:- Correct organization and active identity.
- Resource and exact verb required for the operation.
- Target record/session scope and hierarchy relation.
- Field-level read/update rule, if a particular field is involved.
- Current status, action, signature, or lifecycle rule.
- Publication/connection/feature condition for the selected surface.
Form and session failures
For an action/signature issue, record action key, status before/after, actor, and response—not the full sensitive action payload.
Offline synchronization failures
Offline sessions havepending, syncing, failed, and synced states. A submitted local session is not centrally received until it is synced. Keep the device and its local files intact while diagnosing.
- Record the local submission ID, form/version, device-created/submitted times, queue state, attempts, next retry time, and last safe error.
- Confirm the device is online and the starter has a usable authenticated session. Do not enter another person’s credentials to “unstick” it.
- Check local storage and each attached file. A file upload failure must not be solved by deleting the file.
- Let the approved retry path run after connectivity/authentication is restored. The client uses bounded backoff; repeated manual resubmission can create confusion.
- When
synced, open the server session and compare fields, repeatables, files, and timestamps. If the server session is incomplete, escalate with both local and server references.
Data model, serial, calculated field, and template failures
Entity fields and layouts
Check the field key, type, required/default rule, select option value, relation target, layout visibility, and field-specific permission. A display label is not the stored key, and a hidden field may still have a saved value or be unavailable for a reason unrelated to layout.Serial IDs
Capture serial field configuration, namespace/format expression, sequence/start value, date/timezone inputs, generation mode, current record state, and the expected reference. Do not manually edit a serial to hide a collision or gap. Test with a controlled record and compare preview/configuration with the stored outcome. See Serial IDs.Calculated fields
Capture the formula, value type, direct/inverse relation setup, source values, result, status, and recalculation timing. Check null/empty arrays and missing relations before treating a zero/blank result as a logic failure. For a dependency/cycle error, stop editing related calculations in bulk and isolate the smallest cycle. See Calculated fields.Document templates
Capture template/version, target record, output format, filename expression, caller/admin execution mode, non-empty administrative allow-list if used, tag/expression, and rendered output. Test missing optional values, empty relations, allowed/denied lookup targets, and file name separately. Do not paste a real document or credential into a support request. See Document templates and Document-template tags and rendering.Dashboard, API, export, and automation failures
Dashboards
Compare a widget with one known source record. Capture widget type, entity/source, fixed and viewer filters, aggregation/date basis, viewer role/scope, and whether the UI reports no data or permission denial. Do not replace a denied entity query with a copied sensitive manual number; correct the source access/configuration.Public API
Record HTTP status, error code/message,x-request-id, token name/hint, endpoint, entity key, field key, sanitized request body, rate-limit headers, and ETag/If-Match where relevant. Common corrections are: rotate/re-authorize a token, enable an entity, fix a public-queryable field/filter, honor retry-after, or re-read after 412 PRECONDITION_FAILED. Never retry a create/delete blindly after a timeout.

