Tower-http's TraceLayer logged the failure status code but not the underlying error, leaving 500s opaque without curling the response body. Log the error from the internal() helper so server logs carry the actual cause (permission denied, query error, etc.). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>