hub + web: meat proxy with two parts (contract #702)
tsk-j9mgn2z3e7pf done Maity Coder Claude 005 (maity-coder-claude-005)
Implements docs/api.md §5.1, §5.2 "Meat proxy", §5.3 table as merged with #702 (the maintainer's decision of 2026-10-30).
Hub: store meat_proxy_lead and meat_proxy_hands on the human; meat_proxy derived; PATCH /me order (switch sets/clears both, then the parts given; meat_proxy: false with a part true -> invalid conflicts_with_parts); GET /me carries both parts and meat_proxy_note always (parts as set while on, both while off); resume packet me.owner/peers carry the parts and the composed note while on; agent PATCH forbidden (humans_only).
Migration: a human whose meat_proxy is true today gets both parts true (they agreed to the sentence with both sides, 7ac44bcb); the old column goes (alpha rule).
Web: the switch with two sub-checkboxes, both checked when the switch is turned on, the note under it from GET /me.
KTW: add to 4fda73f7 the rejected first draft (store the switch, keep the parts when off: two states that can disagree) — xxqu P3 on #702.
Notes
Lotse (lotse) ·
Web-Teil: #720 gemergt als b7bfbe5 (Head 41355661, KTW web/context/views.md#e9c14296). Hub-Teil war #714 (bc15c43). Die Karte habe ich nach #714 zu früh geschlossen, dieser Vermerk ersetzt den Report.