From 98a9180e39742725a61fb1966e342d7d212beee9 Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 9 Nov 2026 04:46:19 +0000 Subject: access: what a node holds alone by `_continuum/local//` Setting a node's log filter took `write` on `_continuum`, all of the protocol data: whoever could change one node's logging could change the swarm's members, remakes and users too. Now what a node holds alone has paths of its own for capabilities, under `_continuum/local//`: `log` (`/admin/log`), `config` (`/admin/config`) and `debug` (`/debug`, always `write`), `read` to look and `write` to act (`api::access::needed`, which takes the node's ID). So `_continuum/local/` is everything on one node, `_continuum/local/*/log` the log filter on every node, and holders of `_continuum` keep it all. Nothing is stored there: the store refuses writes under `_continuum/local`, and the rules refuse a change touching it, as for epoch metadata. The quarantine stays with `_continuum`: its entries are everyone's writes, which a node-local capability mustn't show. --- docs/openapi.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'docs/openapi.yaml') diff --git a/docs/openapi.yaml b/docs/openapi.yaml index 8e6a688..0fad136 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -206,7 +206,7 @@ paths: '401': $ref: '#/components/responses/Unauthorized' '403': - description: The user may not write here (its capabilities, docs/access.md; in a swarm without a user registry, protocol data `_continuum` and the user isn't in `protocol-writers`), or epoch metadata or the swarm ID (`_continuum/epochs`, `_continuum/swarm`, never writable); a signed value not by this user, or whose signature doesn't check (the message says why). + description: The user may not write here (its capabilities, docs/access.md; in a swarm without a user registry, protocol data `_continuum` and the user isn't in `protocol-writers`), or epoch metadata, the swarm ID or what a node holds alone (`_continuum/epochs`, `_continuum/swarm`, `_continuum/local`, never writable); a signed value not by this user, or whose signature doesn't check (the message says why). '409': description: The path crosses an existing non-map value, or with `retype=false` the write would change a type (the message says where); a value not signed reaching one its user signs under a strict policy; a signed value where values aren't signed, or replacing another than the one there (read again); a value left not sealed as the swarm declares (`docs/access.md`, Values sealed for their readers). '415': @@ -330,7 +330,7 @@ paths: '401': $ref: '#/components/responses/Unauthorized' '403': - description: The user may not write here (its capabilities, docs/access.md; in a swarm without a user registry, protocol data `_continuum` and the user isn't in `protocol-writers`), or epoch metadata or the swarm ID (`_continuum/epochs`, `_continuum/swarm`, never writable). + description: The user may not write here (its capabilities, docs/access.md; in a swarm without a user registry, protocol data `_continuum` and the user isn't in `protocol-writers`), or epoch metadata, the swarm ID or what a node holds alone (`_continuum/epochs`, `_continuum/swarm`, `_continuum/local`, never writable). '404': description: No value at this path. '409': -- cgit v1.3.1