---
url: 'https://adk.nht.io/api/@nhtio/adk/exceptions/variables/E_NO_READER_RESOLVER.md'
description: >-
  Thrown when `decode()`-ing a reader handle whose `tag` has no registered
  resolver.
---

# Variable: E\_NO\_READER\_RESOLVER

```ts
const E_NO_READER_RESOLVER: CreatedException<[string]>;
```

Defined in: [src/lib/exceptions/runtime.ts:596](https://github.com/NHTIO/ADK/blob/v1.20260713.1/src/src/lib/exceptions/runtime.ts#L596)

Thrown when `decode()`-ing a reader handle whose `tag` has no registered resolver.

## Remarks

A reader descriptor's `tag` (e.g. `"spool:flydrive"`, `"media:in-memory"`) names the resolver that
re-binds the handle to a live reader. In-memory and fetch resolvers auto-register when the
`@nhtio/adk/batteries/encoding` battery loads; durable-store resolvers (flydrive, OPFS) must be
registered by the consumer **with the live `Disk`/OPFS root** before decoding, because the locator
carries only the key — not the binding. The single printf argument is the unresolved `tag`.

The fix is always the same: call `registerSpoolReaderResolver(tag, …)` /
`registerMediaReaderResolver(tag, …)` (re-exported from the encoding battery) at application startup,
supplying the same ambient store the bytes were written to.

Not fatal — a missing resolver is a wiring condition the caller can correct and retry.
