# Replay or symbols are not working

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

Canonical page: https://anectico.com/docs/help/replay-and-symbols/


## 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.

## 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.

## JavaScript frames are not symbolicated

The Issue Story keeps the raw bundled frames inspectable and reports the server-derived artifact
state next to the stack:

- **JavaScript source map missing** means the organization 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/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`:

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

Select the affected project in the CLI profile or pass `--project`; Anectico records that project and
the authenticated user/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 Story 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/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/build, or contents than the installed application.
- No warning is shown after the exact artifact retraces the occurrence.

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

```bash
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 Story keeps raw UUID/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:

```bash
anectico symbols upload-dsym MyApp.dSYM
```

You may instead pass the exact Mach-O file under `MyApp.dSYM/Contents/Resources/DWARF/`. Matching is
by organization 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/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 and confirm its release, distribution, and readable frames
inside the Issue.

- [Record session replay safely](/docs/instrument/session-replay)
- [Capture errors and releases](/docs/instrument/errors)
