To handle this, you would have to write an extension. I would use hook_civicrm_pre on the Relationship entity (operation is "create", maybe "edit" too if households tend to shift?).
Do two API calls to the Relationship API to get the Household(s) of both contacts. Compare to make sure at least one value is identical in both; if not, cancel the save.
Another approach worth considering is the use of custom fields on the Relationship. You can add a Custom Field for Proxy Shopper, on to the Household Member relationship, and if Willow lets you know that Jerry is 'safe' to be a Proxy Shopper then you have that information without need for potential code and complexity
Someone else I asked replied
"I've not tried that, but the relevant code seems to be here: https://lab.civicrm.org/extensions/civirules/blob/master/CRM/Civirules/Engine.php#L235
That evaluates the conditions in order and at each step updates isValid based on its value so far and the next condition, so the result is:
(((condition1 and/or condition2) and/or ...
They do not. You can only use a combination of AND or a combination of OR, you can not mix them.
If you want a complicated condition you might contemplate building you own condition, documentation on how to can be found here: https://docs.civicrm.org/civirules/en/latest/create-your-own-condition/
CiviCRM does not have a built-in way to create conditional fields in its forms. You mentioned Drupal Webforms and yes they could solve that problem for you if you were open to using a webform instead.