0.167.28
Fixed
- Санитизация ошибок в HTTP-ответах: proxy JSON и raw store-ошибки (#207 — P2). (1) #214 [A-026]: ошибки прокси (
errorHandlerreverse-proxy, WS-bridge dial-failed и no_remote вinternal/connections/proxy.go) собирались черезfmt.Fprintf/http.Errorfс сырой подстановкойerr.Error()— кавычки, бэкслеши или управляющие символы в тексте ошибки ломали JSON-ответ (незакрытая строка), аhttp.Errorвдобавок маркировал JSON-тело какtext/plain. Все три пути переведены на общийwriteProxyJSONError(json.NewEncoder, корректныйContent-Type: application/json, код 502 сохранён). (2) #207 [A-019]: вtodo.go(List/Replace/re-read) иsoul.go(Update/ClearEvolved) тело 500-ответа содержало сырое сообщение об ошибке SQLite/Postgres — SQL-фрагменты, имена таблиц, дубликат-ключи (info-leak). По образцуskills.go: generic-сообщение (failed to list/save todos,failed to update soul,failed to clear evolved soul) + полный лог ошибки сервер-side черезslog.Errorс контекстом (agent_id). Тесты: errorHandler с кавычками/бэкслешами/\n\tв тексте ошибки → тело — валидный JSON, статус 502,Content-Type: application/json; WS-bridge no_remote и dial-failed (закрытый порт) → валидный JSON; todo List/Replace и soul ClearEvolved на закрытом store → 500 с generic-сообщением, в теле нетsql:/database is closed/SQL-ключевых слов.