I asserted that the MySQL migration job "was a comment, not a job" and that nothing had ever run a fresh install on MySQL. Both wrong. The job existed, hit this org's ARC runners, and was deliberately moved to internal CI inffe9fa1ccbecause Kubernetes runners without docker-in-docker cannot host service containers - a fact written at the bottom of the very file I was editing. The job I added would have failed at container setup on its first push. Removed it. The leftover was the HEADER, which listed a job that had moved, and that is now corrected in place with a note not to re-add the entry without re-adding a job to a runner that can host it. Coverage stays on internal CI. The api-contract job was green by accident. gen_openapi.py refuses to run while a bundled plugin is disabled, instance/plugins.json is gitignored, and the step only worked because the earlier pytest step writes that file at import time and leaves it. Reordering the steps would have produced a failure about disabled plugins that had nothing to do with the spec. It now seeds its own registry. Confirmed against a clean archive of HEAD, where the generator does refuse. shopdb_whoami claimed to report "what the token is scoped to" and reported the ACCOUNT's permissions. A read-scoped token on an admin account printed roles=[admin] and the full permission count, so a model would try a write, take a 403, and have no tool that explained it. The field is now account_permissions and carries a note saying a scoped token may allow fewer. Fixing this properly means /api/auth/me publishing the patscopes claim, which is a separate change. The MCP client caught only urllib's two error types, so an ordinary mistake escaped as a raw exception with no cause reaching the caller: a space in a path raises InvalidURL, a non-ASCII path raises UnicodeEncodeError, a slow read raises TimeoutError. Paths are now percent-encoded and those escapes are contained; both cases return the API's own 404 envelope instead. The operation index collapsed optional authentication. Fourteen routes work signed out and return more when authenticated, and the index printed them as requiring a bearer token. They now read bearerAuth,optional. Also: the generator's own hint told the reader to run "flask plugins enable"; the CLI group is "plugin". (cherry picked from commita97346ed81)
77 KiB
77 KiB