Compare commits

..
1 Commits
Author SHA1 Message Date
sneak edc222f1bb Give every JSON answer @meta, errors included (closes #201)
check / check (push) Canceled after 0s
A panic in a JSON route's handler answered 500 with an empty body,
because the router's recoverer sits outside the middleware that adds
`@meta`. `JSONValidationMiddleware` now wraps the handler in the same
recoverer, and answers the panic with the JSON error body.

`/status.json` and the health check answered chi's empty 405 to any
method they do not take. They now answer with the same JSON 405 as the
routes under `/api/v1` and `/ip`.

The home page's IP lookup card showed only the answer's `data`. It now
shows the whole answer, `@meta` included.

A table test checks `@meta` on every JSON route, in its successes and
its errors.

Model: opus-5-5
2026-10-27 20:08:59 +00:00
+6 -6
View File
@@ -36,12 +36,12 @@ tested.
# Completed Steps # Completed Steps
- 2026-10-27: every JSON answer carries `@meta`. A panic on a JSON route answers - 2026-10-27: every JSON answer carries `@meta`. A panic on a JSON route answers
500 with the JSON error body. A method that `/status.json` or the health check 500 with the JSON error body. `/status.json` and the health check answer 405
does not take answers 405 with it, as under `/api/v1`. Both used to answer with the JSON error body to any method they do not take. The 500 and the 405
with an empty body. The home page's IP lookup shows the whole JSON answer, used to have an empty body. The home page's IP lookup shows the whole JSON
`@meta` included. It used to show only the answer's `data`, or only the answer, `@meta` included. It used to show only the answer's `data`, or only
message of an error answer. A test checks `@meta` on every JSON route, in its the message of an error answer. A test checks `@meta` on every JSON route, in
successes and its errors (closes #201) its successes and its errors (closes #201)
- 2026-10-27: every value in a JSON answer that has a unit is a number, with the - 2026-10-27: every value in a JSON answer that has a unit is a number, with the
unit at the end of its field name. `@meta.execution_time` is now unit at the end of its field name. `@meta.execution_time` is now
`execution_time_ms`. The stats' `uptime`, `connection_duration` and `execution_time_ms`. The stats' `uptime`, `connection_duration` and