v1.0.1
Patch release implementing the v1.0.0 assessment's priority list
(docs/assessment-maintainable-architect-v4-v1.0.0.md, with
docs/direct-repository-assessment-v1.0.0-2026-07-17.md and an external
review of the tagged release as convergent inputs). No breaking changes;
module path unchanged.
Fixed:
- The JSON/problem+json marshal-failure fallback is a complete
reclassification to ErrCodeInternal. Its status now comes from the
active mapping - a Renderer's StatusCodes override or the
RegisterStatusCode registry - instead of a hard-coded 500, so a
deployment that maps INTERNAL_ERROR to 503 gets 503 on fallback
responses too. Headers derived from the original error's
classification (Retry-After, an error-specific WWW-Authenticate
challenge) no longer survive onto the fallback; the default challenge
still applies when the mapped fallback status is 401, exactly as it
would for a bare internal error under that mapping. - A caller-supplied json.Marshaler that panics (attached via
SetPublicDetail) is recovered into a RenderErr plus the standard
fallback body instead of escaping the response writers - the same
containment policy safeLog already applies to panicking Loggers.
Changed:
- A panic recovered after a successful Hijack is logged as its own
variant ("Panic recovered in HTTP handler after connection was
hijacked") with hijacked=true, and without the misleading
response_committed_status=0 and http_status=0 fields. Behavior is
otherwise unchanged: recovery still writes nothing to a hijacked
connection and still does not close it - after Hijack the handler
owns the connection.
Documentation:
- Identity fixation is documented as by-reference, not deep copy: a
mutable object passed to a constructor stays shared and later
mutation is visible through Value() and Context(). This never affects
wire output or logs (package doc, Value(), README). - The README recovery section documents hijacked-connection ownership
and the defer conn.Close() pattern. - The README status-mapping link points at status.go (http.go was
removed in the v0.11.0 split); remaining interface{} snippet
spellings migrated to any; logger.go's nil-err example replaced with
an actual call path. - zerologadapter's Log signature spells map[string]any (type-identical;
no adapter release is required for it).
Test coverage: 100.0% (root module), 100.0% (zerologadapter).