Skip to content
Console
Browse documentation
Troubleshooting

Replay or symbols are not working

Diagnose missing browser or native recordings and unreadable JavaScript, Android, or iOS stack frames.

On this page

Ask your agent

"Find the session recording for customer user_8842 from the last hour."

"Show me the issue for this error and its stack trace."

Job MCP tool or action CLI command
List a customer's recordings list_recordings anectico replay list
Find the recording that covers a trace find_trace_recording (read action) anectico replay for-trace <trace-id>
Read the errors and events of one session get_session_signals anectico replay related <session-id>
Read recorded steps and source gaps get_replay_steps (read action) anectico replay steps <session-id>
Read an issue and its stack trace get_issue anectico issues view <issue-id>
Upload a source map, mapping or dSYM not applicable anectico symbols upload-sourcemap, upload-proguard, upload-dsym

The results of list_recordings and get_session_signals carry a link that plays the session on a read-only replay proof page. find_trace_recording carries one when the trace belongs to a recorded session. The get_issue result carries a link to the issue proof page, which keeps the raw frames inspectable and shows the symbol state described below.

Browser replay does not appear

Confirm that:

  • the browser-only replay entry point is running;
  • the project-scoped replay key has replay:write;
  • input masking or application policy did not disable recording;
  • chunks are not failing with 401, 403, 413, or 429;
  • the selected project, environment, and time range are correct; and
  • the customer ID and session ID match the surrounding browser telemetry.

Use browser network tools to inspect the replay chunk request without exposing the key or captured payload.

Native replay does not appear

Start from the native structural replay guide and the source matrix for iOS, Android, React Native or Flutter. Browser setup does not enable it.

  1. Check the explicit application replay owner, independent replay consent, enabled recorder and current native capture policy. Native store permission must also allow recording.
  2. Verify the separate project-bound replay_upload key has only replay:write, and that its project and explicit application endpoint match the recorder. An intake or delivery key cannot substitute.
  3. Inspect replay diagnostics for disabled, paused, refused, stale-policy and queued states and loss counters. Replay flush is separate from ordinary telemetry flush.
  4. Check the source is attached after layout and after owner, policy or foreground transitions. Unsupported regions and masks can leave boxes or gaps; they do not prove an empty visit.
  5. Ask your agent to read the stored steps and format and open the returned replay proof link. replay:read admits the steps read; replay:content:read and current content policy control detailed content. A withheld or unavailable read is not proof that no recording exists.

An upload acknowledgement can include discard. Verify retained steps and viewing independently; neither the acknowledgement nor a successful local purge proves server erasure. Follow native recording privacy for those boundaries. Device qualification is separate from source availability.

Replay has no backend evidence

Check that browser request tracing is enabled, the API origin is allowed for header propagation, and the backend extracts traceparent and trusted baggage. The replay can exist even when cross-tier correlation is broken.

Symbol uploads are refused

Symbol uploads require an active project in your organization and errors:write. An organization-wide key must select a project. A project-bound key can omit project_id to use its own project, but cannot name a different project. Uppercase and dashless UUID spellings of the same project are accepted.

If an upload reports project_id not found in this organization, select an active project you own and retry. A temporary project-validation failure means the upload was refused; retry after the service recovers.

JavaScript frames are not symbolicated

The issue proof page keeps the raw bundled frames inspectable and reports the server-derived artifact state next to the stack:

  • JavaScript source map missing means the project has no uploaded JavaScript source-map artifact. Upload the map produced by this exact build.
  • JavaScript source map does not match means at least one source map exists, but none resolved the occurrence. The release, dist, or normalized minified filename may differ, the map may be invalid, or it may not contain the captured line and column.
  • No warning is shown only after at least one candidate frame resolves to an original source location. The raw bundled location remains visible beneath each resolved frame.

The warning lists the occurrence release, distribution and build, and normalized minified filenames. An empty distribution is a real exact-match key and differs from every named distribution. Use those values in sourcemap-upload.json, then upload it with an API key that has errors:write:

anectico symbols upload-sourcemap --file sourcemap-upload.json

Select the affected project in the CLI profile or pass --project. Symbol artifacts belong to the project they are uploaded to and only symbolicate that project's errors, so upload to the same project that reports the errors; a project API key always uploads to its own project. Anectico records that project and the authenticated user and API key in a durable body-free artifact audit entry.

The SDK release and dist must exactly match the source-map upload. Confirm that the uploaded filename names the minified bundle, not an original source file; Anectico normalizes URLs and build paths to the bundle basename. Also confirm that CI did not rewrite the bundle or map after upload. Uploading the exact key invalidates a prior missing-map lookup, so the next Issue read can use the new artifact without restarting a service.

Android frames are obfuscated

The issue proof page keeps the raw R8 frames visible and reports the artifact state next to the stack:

When R8 inlines several calls into one obfuscated line range, Anectico shows every recovered frame in mapping order (the innermost call followed by its callers). Each entry has an Original source line for the recovered call and a Raw frame line that repeats the captured obfuscated filename, line and column, and function. Retracing therefore does not discard the captured evidence, even when several recovered entries came from one raw frame.

  • ProGuard mapping missing means no mapping artifact is available yet.
  • ProGuard mapping does not match means an uploaded artifact has a different release, distribution and build, or contents than the installed application.
  • No warning is shown after the exact artifact retraces the occurrence.

Use the release and distribution and build shown in the warning. Upload the exact mapping.txt produced by that release build with an API key that has errors:write:

anectico symbols upload-proguard mapping.txt --release "$RELEASE" --dist "$DIST"

The keys are exact. An empty distribution is valid and is different from every named build; preserve it explicitly as --dist ''. Do not upload a mapping regenerated from the same source: R8 output can differ between builds.

iOS frames show addresses

The issue proof page keeps raw UUID and address frames visible and reports exact application-image coverage:

  • dSYM missing means at least one required in-app image UUID has no exact uploaded dSYM.
  • dSYM does not match means every required UUID exists, but none of the addresses resolved.
  • No warning is shown when every required UUID exists and at least one native frame resolves.

The warning lists the required UUIDs. Upload the dSYM bundle from the archive that produced the installed application:

anectico symbols upload-dsym MyApp.dSYM

You may instead pass the exact Mach-O file under MyApp.dSYM/Contents/Resources/DWARF/. Matching is by project plus Mach-O UUID only; release and distribution do not select a dSYM. The CLI locates the Xcode-named executable inside a bundle and sends a fat and universal binary intact so every architecture slice can be indexed. Rebuilding the same source can produce a different UUID, so use the original archive artifact.

Verify with a release build

Development stacks often bypass minification or obfuscation. Trigger a safe test error from the same kind of release build used in production. Ask your agent for the issue (get_issue) and open the proof link in its result, then confirm the release, the distribution, and the readable frames.