Operations and troubleshooting
Start with Sources. It shows the effective endpoint, receiver state, queue utilization, rejected spans, journal/projection lag, lifecycle counts, and analysis pending state.
Receiver is disabled
Section titled “Receiver is disabled”Open Settings → Collection, enable OTLP, save, and restart Perseval when prompted. Installation never opens a listener by default.
Port 4318 is occupied
Section titled “Port 4318 is occupied”Perseval keeps the GUI open and selects an available loopback port. Copy the effective endpoint from Sources or the status bar. Do not keep a hardcoded 4318 URL in the agent when the UI shows another port.
A run does not appear
Section titled “A run does not appear”- Confirm the receiver says Listening.
- Confirm the exporter uses OTLP/HTTP, not gRPC.
- Confirm the path is
/v1/tracesexactly once. - Confirm
perseval.project.idmatches the selected project. - Check rejected-span count and producer response.
- Clear Runs filters and verify project/environment/build/session scope.
The run has errors but Failure Inbox is empty
Section titled “The run has errors but Failure Inbox is empty”An Error span is not automatically actionable. Open the run in Full Trace, select the error span, and read the Finding inspector. It lists missing behavioral facts. Inspect Attributes, add the telemetry contract, and emit a new run.
Optional failures and verified recovery can correctly produce zero findings.
Session or role is Unknown
Section titled “Session or role is Unknown”Emit gen_ai.conversation.id on the resource or root span. Emit gen_ai.agent.id and agent.role on each agent span. Confirm values are bounded scalars and reached the exported OTLP payload.
Finalization is delayed
Section titled “Finalization is delayed”A revision becomes Quiescent after 30 seconds without committed activity and Finalized after another 5 seconds. Continued or late export resets the idle window. Zero queue lag does not mean analysis is ready.
Spans are rejected
Section titled “Spans are rejected”Inspect the OTLP response. Split requests that exceed size, span-count, or attribute-count limits. Fix malformed trace/span IDs or unsupported content types rather than retrying unchanged permanent input.
Receiver returns 429 or 503
Section titled “Receiver returns 429 or 503”Honor Retry-After for 429 and use bounded exponential backoff. Retry the identical batch; canonical deduplication makes successful redelivery a no-op.
UI shows Delayed
Section titled “UI shows Delayed”The subscriber detected a sequence gap and is taking a bounded snapshot. Keep working unless the state persists. The UI preserves stable selection, invalidates affected pages, and resumes. Restart only after checking Sources and allowing the resync to finish.
Workspace edits do not take effect
Section titled “Workspace edits do not take effect”Settings displays active environment overrides. PERSEVAL_WORKSPACE_DIR, PERSEVAL_CONFIG, PERSEVAL_OTLP_ENABLED, and PERSEVAL_OTLP_BIND are authoritative over saved values. Quit the app, remove or correct the launch variable, and reopen it.
Perseval does not automatically load a repository .env file.
MCP shows an empty workspace
Section titled “MCP shows an empty workspace”Use the bundled executable, restart the MCP client, and make its explicit PERSEVAL_WORKSPACE_DIR match the GUI. If the GUI uses the default workspace, remove an old custom override from the MCP configuration.
OpenAI features are degraded
Section titled “OpenAI features are degraded”Check the master opt-in, feature dependencies, and OPENAI_API_KEY in the launch environment. Provider failure never disables deterministic groups. Provider jobs are not yet a durable retry ledger.