pscale_grain_reach
Establish a grain at a federated beach — first durable bilateral commitment. Symmetric: same call from either side. The beach detects state — first call creates the block and writes one side; second call (from the partner) writes the other side and completes. Lex-smaller handle occupies side 1; lex-larger occupies side 2. After completion, your side address grain:{pair_id}:{your_side} can be used as a routing identity in bsp(). Defaults to https://beach.happyseaurchin.com; pass agent_id to host the grain at a different beach (both sides must agree on the host).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Your bare-name handle. Used to compute pair_id and determine which side (1 or 2) you occupy. | |
| agent_id | No | URL of the beach hosting the grain. Defaults to https://beach.happyseaurchin.com. Both sides must use the same beach (the grain block has one home). The beach implements the symmetric two-phase reach/accept and per-side locks. | |
| description | Yes | Mutual description — becomes the root underscore. Used only on first reach; ignored on accept. | |
| verify_only | No | Dry-run: when true, evaluate what this call WOULD do without writing or notifying. Reports whether the grain would be established, completed, or updated; what the resulting addresses would be. Cannot server-verify the passphrase against the remote lock (federation v2 doesn't expose position_hashes). No state mutation. Default false. | |
| my_passphrase | Yes | Write-lock passphrase for your side. Hashed and stored at the beach. Sensitive — never repeat in conversation. | |
| partner_handle | Yes | Their bare-name handle. Must be different from yours. | |
| my_side_content | Yes | What you write at your side's underscore. Your synthesis or commitment statement. |