open-standards/wai/http-conformance/falsify/refines-read-whole.patch
Transaction Science 1cffbc6ffd wai: HTTP reports a refinement by its refines.base alone; a conforming envelope's refinement tested
- §7 step 4 as the text stands: a refinement of the pick is one whose refines.base, read
  on its own, is the pick's id (container::refinements_naming, refinements_naming in
  http_verify.py), so one whose refines is otherwise malformed is reported dropped
  (components_nonconforming). Of a conforming envelope the set is the same as before.
- Objects OCF (ONC's conforming twin: refinements [2], dropped []), ONM (refines
  {base: b} alone: reported) and ONX (refines {base: x}: not reported), on the whole and
  the range paths; fetch_OR_malformed_refines now reports its refinement; the generator
  checks each outcome.
- falsify: conforming-withheld and refines-read-whole, each with an http_verify.py
  --mutate, wired into falsify/run.sh; nonconforming-offered's must-fail list extended.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 03:11:46 -04:00

15 lines
977 B
Diff

# must fail: fetch_ONM_whole fetch_ONM_ranged fetch_OR_malformed_refines
# the plan finds a refinement only by a well-formed refines, so one naming the pick with the rest malformed is dropped unreported (Selector::applied)
diff --git a/wai/wai-rs/src/http_binding/session.rs b/wai/wai-rs/src/http_binding/session.rs
index fd00472d..55d75f69 100644
--- a/wai/wai-rs/src/http_binding/session.rs
+++ b/wai/wai-rs/src/http_binding/session.rs
@@ -196,7 +196,7 @@ impl Selector {
.filter(|&i| (self.applies)(&e[i]))
.map(|i| (i, if crate::codecs::is_enhancement_layer(&e[i].capability) { Class::Refinement } else { Class::Base }))
.collect();
- out.extend(refinements_naming(e, index).into_iter().filter(|&i| (self.applies)(&e[i])).map(|i| (i, Class::Refinement)));
+ out.extend(crate::container::refinement_indices(e, index).into_iter().filter(|&i| (self.applies)(&e[i])).map(|i| (i, Class::Refinement)));
out
}
}