diff --git a/modules/mesh-delivery-teller/cmd/mesh-delivery-teller/teller.go b/modules/mesh-delivery-teller/cmd/mesh-delivery-teller/teller.go index 46b969b8..f66012b6 100644 --- a/modules/mesh-delivery-teller/cmd/mesh-delivery-teller/teller.go +++ b/modules/mesh-delivery-teller/cmd/mesh-delivery-teller/teller.go @@ -469,6 +469,11 @@ func (t *Teller) Said(h occ.Handled, w oc.Warrant, err error) { // said is Said under the lock (catchUp holds it). func (t *Teller) said(h occ.Handled, w oc.Warrant, err error) { + if h == occ.Refused && w.Outcome == occ.OutcomeRefused { + // The client answers Refused with the router's words for an ask the router refused at take-in (design 47 G §570, + // §638): the ask is closed as any ended ask is, so the teller treats it as the ended ask it was (as before §638). + h = occ.Recorded + } if w.Outcome == occ.OutcomeRefused && forWantOfRoom(w.Words) { if h == occ.Recorded { t.roomRefused(w)