Changelog
View Source0.2.9
Changed
split_headersnow callsbinary:split(Headers, Rn, [global])instead of the hand-rolled recursivebinary_split_global/2. The native BIF skips the function-call-per-token overhead and is generally faster on the hot path (header split fires once per response). The hand-rolled helper is gone.
Plan-time notes
- B6's "chunked decoding accumulates iolist instead of flattening
per chunk" recommendation was checked on inspection and not
acted on:
parse_chunks/3already accumulates chunk bodies in a list ([Body | Acc]) and callsiolist_to_binaryexactly once at the end. The plan's claim of "iolist_to_binary per chunk" was incorrect.
0.2.8
Added
error_reason/0is now a documented sum type, exported alongsideerror/0. It enumerates the eight atoms that buoy can put in the second slot of{error, _}:pool_not_started,buoy_not_started,pool_already_started,invalid_url(buoy-level)invalid_headers,invalid_chunk_size(HTTP parser errors)no_server,shackle_not_started,timeout(shackle errors that propagate through buoy)
error/0itself stays loose ({error, term()}) — tightening it to a closed sum produces dialyzer false positives inbuoy_client:responses/5, where the{error, not_enough_data}buffering pattern is semantically required at runtime but unreachable from dialyzer's flow analysis. The documentederror_reason/0covers the documentation half of the A2 standardization without the analyzer cost.
Exported types
error/0error_reason/0
0.2.7
Added
Two telemetry events at the request boundary:
Event Measurements Metadata [buoy, request, sent]count => 1method, host, async[buoy, request, error]count => 1method, host, reasonsentfires when the request hits shackle for dispatch (sync and async paths both);errorfires when the pool lookup fails (e.g.pool_not_started). Attach handlers viatelemetry:attach/4.Per-request lifecycle (queue / send / receive) remains observable via shackle's own telemetry — buoy's events surface the buoy-level routing decision without duplicating that work.
telemetry(1.4.2) is now a direct dependency (was already transitively present via shackle).vsninbuoy.app.srcis now an explicit string ("0.2.7") — wasgit, which only works when built from a checkout.
No source or API changes.
0.2.6
Infrastructure refresh: dep bumps + docs migration.
Changed
- Bumped
shacklefrom git ref0.6.19to hex0.7.1-- fixes the OTP 27+ build break that buoy inherited transitively (old shackle versions pulledgranderl 0.1.5from hex, broken on modern OTP). - Bumped
foilfrom git ref0.1.2to hex0.1.4. - CI matrix bumped from OTP 21-26 to OTP 25-28.
cowboytest dep bumped from git ref2.10.0to hex2.12.0. (Newer cowboy releases use a cowlib version constraint that the rebar3 bundled in the OTP 25 container image can't parse; pinning to 2.12.0 keeps the OTP 25 test row green.)fprofxtest dep moved fromransomr/fprofxtolpgauth/fprofx(otp_19branch), matching the rest of the ecosystem.- Documentation migrated from
edowntorebar3_ex_doc. Generateddoc/directory removed.
No source or API changes.