Expand description
GAP-SG-202 / GAP-SG-203: resolving the caller’s keys against the envelope BEFORE any predicate runs.
Until v1.2.6 a key the envelope never carried was indistinguishable from a
key whose value happened to be absent. --select body_length read answered
with an envelope missing the field, --filter chave_errada=x list answered
count: 0 over 1892 memories, and both exited 0. The caller read its own
typo as “the data is not there”.
The cure is to ask, once, where each requested key actually lives:
KeyOrigin::Element— the predicate has something to work on.KeyOrigin::EnvelopeOnly— the key names a member of the envelope, not a field of the elements.--filter integrity_ok=false healthis this case:integrity_okis a top-level scalar, the predicate was redirected onto thechecksarray, and all eight checks were deleted whileintegrity_ok: truesurvived in the payload contradicting the very predicate.KeyOrigin::Absent— the key exists nowhere the surface can see.
§Cost
Resolution scans EVERY element and allocates nothing: filter::resolve is a
pointer walk over borrowed data. Sampling here would be the wrong economy —
a key present only in an unsampled element would be reported absent, and the
gate would refuse a legitimate request. Sampling belongs to the suggestion
path alone, which runs only after a key has already failed.
Serial by decision, not by omission: the parallelism rules forbid paying coordination overhead for work smaller than it, and this is a handful of pointer walks per requested key.
Structs§
- Scope
- The vocabulary one request is resolved against.
Enums§
- KeyOrigin
- Where a requested key was found.