# Reported issues for Engine DJ Library Assistant (unofficial)

Pod holds 11 of 11 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [Engine DJ Library Assistant (unofficial)](/mcp/engine-dj-library-assistant-unofficial).

## Most discussed

### Duplicate library UUID bypasses ambiguous_library and may write to the wrong disk

## Summary

An Engine DJ library and its cloned USB copy can legitimately share the same `Information.uuid`. When `library` is explicitly set to that shared UUID, `findLibrary()` uses `Array.find()` and silently returns the first matching path.

`selectForWrite()` only performs the multi-library refusal when `library` is omitted. Supplying the shared UUID therefore bypasses `ambiguous_library`, and a write may land on whichever physical disk happened to be discovered first.

This is the same…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/14) · 2026-09-15 · closed · outside contributor · 1 comment

### Proposal: update_track_metadata — write genre, comment, label, rating to Track

Proposal: a write tool for tag hygiene on `Track` itself — `genre`, `comment`, `label`, `rating`, maybe `year` — built on the existing write path (`withWriteTransaction`, per-session snapshot, `ambiguous_library` refusal, `undo` with an `expect` guard like `expect_track_ids`).

**Scope decision pending.** This would be the first write to track rows rather than to playlists — a different risk than anything shipped so far.

## Facts, checked 2026-09-11

- Engine's own…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/12) · 2026-09-11 · closed · outside contributor · 1 comment

### A clone with an unsupported schema makes a named-uuid write refuse, while an omitted library ignores it

Found while reviewing #14; deliberately left as-is there because it errs on the safe side.

## What happens

`writeNeedsLibrary` counts only supported libraries, so an old 2.x library on the machine never makes a write refuse. `findLibraries`/`namedWriteLibrary` (added in 9e4bb58) do not filter on `supported`, so a uuid shared by a supported library and an unsupported copy refuses.

## Scenario

Libraries a (3.0.2) and b (3.1.0, unsupported) share a uuid:

- A write with no `library`: goes to…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/18) · 2026-09-16 · open · outside contributor · 0 comments

### A path is not a stable library identity: two drives with the same volume label swap mount points

Found while reviewing #14. Pre-existing.

## What happens

Since #14 a write must name a library by path when a uuid is shared by copies, and every undo step already carries the library as a path (`src/store/write.ts`). A path identifies a mount point, not a drive. macOS mounts two sticks carrying the same volume label — a default `Untitled` or `NO NAME`, or a disk-level clone — as `/Volumes/Untitled` and `/Volumes/Untitled 1`, in plug order.

## Scenario

1. Two such sticks are connected; the…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/16) · 2026-09-16 · open · outside contributor · 0 comments

### Write result and backup name can report the uuid of a library no longer at that path

Found while reviewing #14. Pre-existing; not introduced by that fix.

## What happens

`states` is keyed by the path of `m.db` (`src/server.ts`), deliberately: a clone on another drive shares its uuid, so the path is the stable key. `stateFor(lib)` returns the cached `LibraryState` for that path and ignores the freshly discovered `LibraryInfo`, so `state.lib.uuid` and the `IndexManager`'s own copy can describe a library that is no longer there.

## Scenario

1. A write goes to…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/15) · 2026-09-16 · open · outside contributor · 0 comments

### Check on a player whether Engine OS opens a file whose name is in another Unicode form

`path_form_mismatch` (added for #11) marks tracks whose file is on disk under a name in a different Unicode normalization form from the path Engine stored. Its description says these "may fail to load on hardware". That rests on one measurement and one assumption:

- **Measured**, 2026-09-11, Linux 6.17 in-kernel exFAT driver: an NFC path does not find an NFD-named file. A path differing only in case does.
- **Assumed**: Engine OS opens files through a Linux exFAT driver that behaves the same,…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/13) · 2026-09-11 · open · outside contributor · 0 comments

### missing_files: a file under another Unicode normalization form reads as missing on byte-exact filesystems

`missing_files` checks each track with `existsSync(absTrackPath(mdbPath, path))`, using `Track.path` exactly as stored.

Engine stores paths in NFC: all 27 non-ASCII rows in both real libraries, measured 2026-09-11. macOS often writes file names in NFD, and on the maintainer's USB drive (exFAT) **6 files are on disk in a different normalization form from the path Engine stored for them.**

On macOS this does no harm. Name lookup is normalization-insensitive on APFS and on exFAT through FSKit…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/11) · 2026-09-11 · closed · outside contributor · 0 comments

### Expose Track.streamingSource, uri and streamingFlags as optional fields

`Track` carries `streamingSource` (TEXT), `uri` (TEXT) and `streamingFlags` (INTEGER). Nothing in `src/` references them, so no tool can show them.

Reported externally, not reproducible here (no Dropbox library, no Prime hardware): these columns decide whether Engine OS streams a track from Dropbox, and a local library that kept stale Dropbox values after a migration showed every track red on the hardware while `audit_library` reported it healthy. If that is right, a user cannot even see why…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/8) · 2026-09-11 · closed · outside contributor · 0 comments

## Most recent

### Default library choice is ambiguous when two libraries tie on track count

With no `library` argument, the server picks "the supported library with the most
tracks". When two libraries hold the same number of tracks, that rule names no
winner and the outcome falls out of row order.

## Observed 2026-09-01

```
/Users/venut/Music/Engine Library      257 tracks  uuid 7e6b0bf5-…
/Volumes/VENUTDISK/Engine Library      257 tracks  uuid c24e09d2-…
```

A tie, and not an exotic one: the USB library and its copy on the computer are
the normal setup for anyone who gigs off a…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/5) · 2026-09-01 · closed · outside contributor · 0 comments

### undo is scoped to one library; Engine can copy the edit to another

`undo` reverses the edit **in the library it was made in**. It cannot reverse what
Engine DJ then copies to another connected library, and today nothing says so.

## Observed 2026-09-01, on the real libraries

| time | action | Mac library | USB library |
|---|---|---|---|
| 00:15 | `add_tracks_to_playlist` on the **Mac** library, playlist 27 | 6 | 5 |
| 03:33 | user launched Engine DJ with the USB drive connected | 6 | **6** |
| 13:20 | ran the returned `undo` (Mac library) | 5 | 6 |

The USB…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/4) · 2026-09-01 · closed · outside contributor · 0 comments

### Play history: expose what was actually played, from hm.db

Engine keeps a play history in `Database2/hm.db`, alongside the `m.db` this
server already reads. Nothing exposes it. It is the last piece of Engine's
own data the server does not surface — an inventory of `Track`'s 43 columns
and the sibling databases found everything else either already exposed or
empty (`itm.db`, `rbm.db`, `sm.db`, `stm.db`, `trm.db` each hold a single
`Information` row on the library measured).

The library tells you what you *have*. History tells you what you *did*, and
no…

[Read the thread](https://github.com/Venut-Technologies/engine-dj-mcp/issues/2) · 2026-08-24 · open · outside contributor · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/Venut-Technologies/engine-dj-mcp/issues).
