Repository navigation
gnr8 0.5.3
Install with the archive assets below, or run: curl -fsSL https://raw.githubusercontent.com/emilwareus/gnr8/main/scripts/install.sh | bash.
0.5.3 — 2026-08-18
Fixed
-
Go validation rules that apply inside a collection no longer bind the field. The Go
extractor read abinding:/validate:tag as a flat token list, so everything after adive
— or betweenkeysandendkeys— was attributed to the field itself. A field tagged
binding:"omitempty,dive,keys,required,endkeys,required"was published as a required property
even though the tag only forbids empty map keys and values, and a per-elementmin/max
behind adivewas offered to the container's constraints. The same blind spot made a bound
query, header, or form parameter required when only its entries were. Schema fields,
constraints, and request parameters now read tags through one scope-aware tokenizer
(goextract/internal/tags), so they cannot answer the question differently.keysand
endkeysare recognized as scope markers rather than parsed as constraints, which also
removes the spuriousschema.metadata.unresolvedwarnings they produced.Scope decides where a rule applies; it does not decide whether gnr8 reports one it cannot
read. A rule gnr8 lowers is dropped in silence when it belongs to an element the graph has
nowhere to carry, but an unrecognized rule such asvalidate:"dive,email"— or a recognized
one whose value is missing or malformed, such asvalidate:"dive,gte=abc"— still raises
schema.metadata.unresolved, the same diagnostic each has always raised without thedive.This changes emitted documents. A field whose only
requiredsits behind adiveleaves
the schema'srequiredarray, and a parameter of that shape stops being a required parameter.
Both are corrections — the tag never said what gnr8 read it to say — but a client generated
from the new document will accept requests the old one rejected, so review the regenerated
document before publishing. The affected fields are the ones whose onlyrequiredsits behind
adiveor betweenkeysandendkeys.