release_from
Releases a place from a specified host and user to clear a stale or foreign hold. Verifies the release by comparing state before and after, ensuring the intended identity no longer holds the place.
Instructions
Release place from a specific host/user identity.
Unlike ``release_place`` (which only ever releases OUR OWN
acquisition), this targets an arbitrary identity -- useful for an
operator clearing a stale/foreign hold. Design §11.14/§11.8 trap:
the coordinator's ``ReleasePlace`` does NO format validation on
``fromuser``, and a non-empty ``fromuser`` that does not match the
place's actual holder is a SILENT no-op that still reports
success -- so simply checking "not acquired by fromuser
afterward" is USELESS (it is already true before the call
whenever ``fromuser`` never held the place, which is exactly the
mismatch case). The only way to tell whether THIS call actually
changed anything is to compare a snapshot from BEFORE the RPC
against one from after: ``released`` is True iff ``fromuser`` was
the holder beforehand AND is no longer the holder afterward (a
place ``fromuser`` never held reports ``released=False`` --
nothing was there for this call to release). This tool talks
directly to the coordinator client (like the place-metadata
mutators) rather than through ``session.release_place``, since
that helper only knows how to release OUR OWN identity and would
refuse before ever sending the RPC for anyone else's.
``host``/``user`` must each be non-empty and "/"-free -- validated
(mirroring ``allow_place``'s ``_validate_identity``) BEFORE any RPC,
since the coordinator does no validation of its own (§11.14 above).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| user | Yes | ||
| place | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||