Two things needed to make the dev stack testable end-to-end with real Subsonic clients:
fix(auth) — bootstrap was creating password_hash + api_token but leaving subsonic_password nil, which meant Feishin/Symfonium got ErrTokenNotSupported on t+s auth. Mirror the bootstrap password into subsonic_password so the admin signs in to Subsonic clients with the same credential printed on first boot.
chore(compose) — dev stack now runs with docker compose up --build and no extra env: music bind-mount, startup scan on, admin username seeded. Postgres is on a private bridge network with its host port unpublished to avoid conflicts.
## Summary
Two things needed to make the dev stack testable end-to-end with real Subsonic clients:
1. **`fix(auth)`** — bootstrap was creating `password_hash` + `api_token` but leaving `subsonic_password` nil, which meant Feishin/Symfonium got `ErrTokenNotSupported` on t+s auth. Mirror the bootstrap password into `subsonic_password` so the admin signs in to Subsonic clients with the same credential printed on first boot.
2. **`chore(compose)`** — dev stack now runs with `docker compose up --build` and no extra env: music bind-mount, startup scan on, admin username seeded. Postgres is on a private bridge network with its host port unpublished to avoid conflicts.
## Test plan
- [ ] Fresh `docker compose up --build`
- [ ] First-boot stderr shows username/password/api_token
- [ ] Feishin at `http://localhost:4533` logs in with `admin` + printed password
- [ ] Native UI login works with the same password
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Two things needed to make the dev stack testable end-to-end with real Subsonic clients:
fix(auth)— bootstrap was creatingpassword_hash+api_tokenbut leavingsubsonic_passwordnil, which meant Feishin/Symfonium gotErrTokenNotSupportedon t+s auth. Mirror the bootstrap password intosubsonic_passwordso the admin signs in to Subsonic clients with the same credential printed on first boot.chore(compose)— dev stack now runs withdocker compose up --buildand no extra env: music bind-mount, startup scan on, admin username seeded. Postgres is on a private bridge network with its host port unpublished to avoid conflicts.Test plan
docker compose up --buildhttp://localhost:4533logs in withadmin+ printed password🤖 Generated with Claude Code