mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
docs(chord): only hosts with an address serve remote types; holds always carry their address
This commit is contained in:
parent
943f30c909
commit
d0687bce85
2 changed files with 9 additions and 4 deletions
|
|
@ -1771,6 +1771,10 @@ validation and copies the v2 kernel added around Delta.
|
|||
setups a registry without a value cannot get one before a reload, so a reader then fails at once `transient`
|
||||
(`unavailable/undeclared`) and is retried when the registry gets its first value (R18), as `self.get` of a type not
|
||||
served here fails at once (refined 2026-10-27 after the second spec review: no `readyTimeout` wait at start); once live, a later failure of the registry changes nothing (last good value).
|
||||
- **Only hosts with an address serve remote types (owner, 2026-10-29: "b"):** a host serving a `remote` type needs an
|
||||
address and a principal; `load` refuses a facet that serves one on a host without an address (until now a host with
|
||||
a principal but no address served remote types and placed every one of them "here"). So "here" is decided by the
|
||||
address alone, as the host address of the type. Holds carry their `address` always (required on the wire).
|
||||
- **`hostAddress` instead of `placement` (owner, 2026-10-29: "yes, rename"):** the field of a `remote` contract that
|
||||
computes where its object lives is `hostAddress: (params) => Address` (it returns the address of the host that serves
|
||||
the object, the vocabulary of `createHost({ address })`, routes and holds); supersedes the name of "`placement`, not
|
||||
|
|
|
|||
|
|
@ -88,8 +88,9 @@ worker worker worker addressable by a typed address, started on demand
|
|||
| server | yes, one | its own declaration | runs |
|
||||
| worker | yes, many | stamped by the parent | started on demand by the app |
|
||||
|
||||
Clients serve only `local` types (they are not addressable): a host without a principal refuses to serve a remote type
|
||||
(`load` throws; a remote object is owned by a principal of the host serving it; owner, 2026-10-24). No client providers for now (owner,
|
||||
Clients serve only `local` types (they are not addressable): a host without a principal or without an address refuses
|
||||
to serve a remote type (`load` throws; a remote object is owned by a principal of the host serving it, owner,
|
||||
2026-10-24; and placed by its host address, owner, 2026-10-29). No client providers for now (owner,
|
||||
2026-10-28): client-side capabilities (a camera, WebMCP tools) go through an owner's requests that clients answer
|
||||
(section 20, the Questions service). A client's local
|
||||
calls have no principal; what a client calls on the server is stamped with the client's authenticated principal.
|
||||
|
|
@ -130,7 +131,7 @@ export const Catalog = remote("catalog", { hostAddress: () => Server(), … });
|
|||
|
||||
| Case | Goes |
|
||||
| --- | --- |
|
||||
| the type is served here and its host address (computed here from the params) is this host's address, or the host has no address | here |
|
||||
| the type is served here and its host address (computed here from the params) is this host's address | here |
|
||||
| a reference made here (`host.get`/`hold`, `self.get`, `ctx.get`) to a served type placed on another host | on, as if not served here (next rows): worker S1 reaches `Notes { session: "S2" }` through the parent |
|
||||
| an arriving hold for a served type whose params place it on another host | broken `invalid/host_address`; the address the hold names only routes it |
|
||||
| the hold names an address of a kind this host has a route for | over that route's link (the address's params checked against the kind, then `authorize`) |
|
||||
|
|
@ -1797,7 +1798,7 @@ validation, no clone of snapshots or ops.
|
|||
| Kind | Direction | Fields |
|
||||
| --- | --- | --- |
|
||||
| `hello` | both, first | `protocol`, `incarnation`, `calls` (the call window N) |
|
||||
| `hold` | to provider | `origin?`, `hold`, `type`, `version`, `fingerprint`, `params` (part), `address?`, `principal?`, `incarnation?`, `chain?` (activation chain, Q5), `limit?` (decoded size limit, 4b) |
|
||||
| `hold` | to provider | `origin?`, `hold`, `type`, `version`, `fingerprint`, `params` (part), `address`, `principal?`, `incarnation?`, `chain?` (activation chain, Q5), `limit?` (decoded size limit, 4b) |
|
||||
| `revoke` | parent to child (route link) | the revocation value (4b) |
|
||||
| `release`, `retry` | to provider | `origin?`, `hold` |
|
||||
| `call` | to provider | `origin?`, `call`, `hold`, `method` (index), `args?` (part; absent: no arguments), `segments?` |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue