Running OpenClaw 2026.4.24 in Docker on Hetzner Ubuntu 24.04.
Workspace plugin at ~/.openclaw/workspace/plugins/gmail-push/ registers an HTTP route at startup:
api.registerHttpRoute({
path: '/api/webhooks/gmail-push',
auth: 'plugin',
match: 'exact',
async handler(req, res) { ... }
})
openclaw plugins inspect gmail-push confirms the plugin is fully loaded:
Status: loaded
Format: openclaw
Source: ~/.openclaw/workspace/plugins/gmail-push/index.js
Shape: non-capability
HTTP routes: 1
Gateway logs show successful registration on every load:
[gmail-push] Webhook registered at /api/webhooks/gmail-push
But hitting the route directly inside the container returns 404 for all methods, with or without auth:
$ curl -X POST http://localhost:18789/api/webhooks/gmail-push
HTTP/1.1 404 Not Found
registerHttpRoute exists in /app/dist/ and is used by official extensions (webhooks, slack, diffs, nostr). Same plugin worked on a local Mac Docker setup before migrating to Hetzner. Gateway is bound to 0.0.0.0:18789 (non-loopback). Auth is set to "plugin" per the architecture docs for plugin-managed webhook verification.
??? QUESTION: The route appears in the plugin registry (HTTP routes: 1) but the HTTP dispatcher doesn't honor it. Has anyone seen workspace plugin routes register successfully in the registry but silently fail to attach to the dispatcher? Is there a config flag for workspace plugin route dispatch I'm missing?