Relay placement: where another machine's records land
This page is for a field that receives other machines' work through a relay: a hosted DIN console, or an org box that lands runs on behalf of other machines. A self-hosted field on one machine needs none of it: its own captures are placed exactly as before, and nothing on this page changes them.
What is placed
Each captured run is placed in the field's tree by what it rests on and what it is about (see The field and the tree). A run can also carry the machine's library inventory (din deps sync), which is placed into inventory/<machine>.jsonl in the store. Placement is a merge, never a replace.
The relay's rules (from 1.0.39)
When a run arrives through a relay (it carries the relay's .uploader mark), dinctrl-store ingest places it by the relay's word, never the client's:
- Its org node comes from the relay. A relayed run needs the relay's
org_nodefile; a node named only inside the records is never used to decide where they go. - A machine's inventory is bound to its uploader. The inventory file for a machine is bound to the uploader the relay authenticated for it. Another uploader's inventory for that machine is refused.
- "Newer" is the relay's receive time, never the
synced_atthe client claims, so a client cannot win by stamping a later date.
On a hosted org box, set the strict mode so that only relay-landed runs place an inventory:
dinctrl-store ingest --relay-only ...
# or, for every ingest on that box:
DIN_INVENTORY_PLACEMENT=relay
--no-inventory skips inventory placement for a run.
The hosted console
The hosted console's POST /api/inventory follows the same rules. A push for a machine that is bound to another agent is refused with 409 and the reason (machine bound to another agent); nothing is written. No hosted plan is on sale yet: see Push to a hosted field.