check / check (push) Successful in 30s
getJSON built its URL with new URL and then overwrote the host and path, which dropped a base path in a self-hosted apiOrigin; postJSON, putJSON and the file and thumbnail download URLs joined strings. All of them now go through one function next to ApiClient that accepts a path with or without a leading slash and an origin with or without a trailing slash or base path, and percent-encodes query parameters. A path containing "?" or "#" is rejected. Model: opus-5-5