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_8842from 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, or429; - 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.
- Check the explicit application replay owner, independent replay consent, enabled recorder and current native capture policy. Native store permission must also allow recording.
- Verify the separate project-bound
replay_uploadkey has onlyreplay:write, and that its project and explicit application endpoint match the recorder. An intake or delivery key cannot substitute. - Inspect replay diagnostics for disabled, paused, refused, stale-policy and queued states and loss counters. Replay flush is separate from ordinary telemetry flush.
- 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.
- Ask your agent to read the stored steps and format and open the returned replay proof link.
replay:readadmits the steps read;replay:content:readand 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.