Skip to content

D1018 — A folder under no workspace binding is served read-only

Decision. In workspace scope, a session started in a folder that no binding covers ($HOME included, with no special rule for it) gets the provider's KB set with every read tool and no write tool, and no KB artifact. The bridge asks for it with ?access=read on the routed endpoint; the server enforces it: a read-only session is one more Server in the routed cache, its tools/list omits the write tools and a call to one is refused with the unbound_folder denial, which names cartographer workspace bind and the repository declaration in a KB's paths.yaml as the fixes. Every response of such a session carries Cartographer-Access: read. A bridge that asked for read-only and does not see that header on the first successful response serves no tools.

Why. The same folder receives no KB artifact (fail-closed, D193), so a read-write session there had write tools and none of the skills, agents or instructions that say how to use them. Writing needs a binding.

Alternatives rejected. Filtering in the bridge only: a tool call would still reach the server, and the bridge is a convenience, not an enforcement point. Leaving the folder read-write with a warning: agents do not read warnings before a write. A special rule for $HOME: the same defect applies to every unbound folder. A separate endpoint path: the mode combines with ?kbs= and the cache key already carries the set.

Consequences. Read-only is a scope filter, not a security boundary (D737): the token in the environment can still write through any other route. The client and the server must both carry this release: an older server ignores access and returns no confirmation, so the bridge serves no Cartographer tool until the server is upgraded (fail closed across versions). Until the first confirmation the bridge forwards messages one at a time instead of concurrently. The read-only tool list stays readOnlyToolNames: one fact with each tool's ReadOnly field.