Accepted adr-002 · 2026-10-13

A Store Shared by Workspaces Relies on SignedHistory: the Agent Boundary Bounds the Agent's Work, iter's Workspace Is Where It Happens

Context

adr-001 made custody one contract per axis, none required of every project. Two of the axes meet where an agent works. AgentBoundary (isolation) says what the agent's account may read, write and run; it gives the agent nowhere to write. Until 2026-10-13 isolation also gave it a clone of its own (`agent-clone`), so a project could be bonded for AgentBoundary alone and the agent's history stayed apart from the owner's.

isolation adr-002 removed the clone: the agent writes only in a jj workspace of the owner's store, which iter opens (`iter workspace`) and isolation bounds (`agent-workspace`). A store holding a second workspace mixes authors in one history; iter's own declaration contract says so (sign_on_push must be false because a shared store always mixes authors), and its accept and publish judge each change by its author's signature. That is the SignedHistory axis, which iter provides.

The catalog says the host side already: the iter component requires vcs-jj, and agent_isolation requires nothing. Nothing said it on the project side. ontoref/code, a jj store about to get the agent's workspace, has no custody bond at all; gov, which ontoref provides, declares no isolation, iter or jj, and adr-013 keeps jj opt-in for any project.

Decision

A STORE SHARED BY WORKSPACES RELIES ON SIGNEDHISTORY. A bonded project in whose jj stores any workspace besides the store's own ("default") exists declares SignedHistory, provided or claimed. code/check.nu lists the workspaces of every jj store under each declaring project's root and fails the project that has a second workspace and no SignedHistory.

THE AXES STAY SEPARATE. AgentBoundary bounds what the agent may do; SignedHistory carries whose change each one is. A project may claim either alone: AgentBoundary alone where the agent reads or works outside any shared store, SignedHistory alone where several people share a store with no agent.

JJ IS REQUIRED BY THE SHARING, NOT BY THE DOMAIN. custody requires no project to use jj, and gov does not either; a project that opens a second workspace on its store is already a jj store, and from then on its declaration says on what its history relies.

Constraints

Alternatives considered