From 319c2106246e652f3a0baefc4dbb538b888de55e Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 13 Oct 2026 16:03:37 +0200 Subject: [PATCH] =?UTF-8?q?Design=2036=20=C2=A712:=20a=20node=20that=20was?= =?UTF-8?q?=20away=20takes=20the=20newest=20memory,=20and=20two=20large=20?= =?UTF-8?q?versions=20are=20kept=20in=20two=20files=20(ADR=200343=20as=20r?= =?UTF-8?q?eviewed)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 03-DESIGN/01-to-be/36-the-operators-agent-on-a-machine.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/03-DESIGN/01-to-be/36-the-operators-agent-on-a-machine.md b/03-DESIGN/01-to-be/36-the-operators-agent-on-a-machine.md index 1c4d0f8f..e3d657fd 100644 --- a/03-DESIGN/01-to-be/36-the-operators-agent-on-a-machine.md +++ b/03-DESIGN/01-to-be/36-the-operators-agent-on-a-machine.md @@ -531,13 +531,13 @@ carries each project's memory folder**, `~/.claude/projects//memory/`, | Step | What happens | |---|---| | pick up | the module's own long-running process on each node looks at the memory folders at least every ten seconds; a file whose text differs from the version last carried is put in the module's kept `memory` state, one key per home kind and file: the project, the path, the text, its digest, the digest of the version it replaced, the node and when it changed | -| carry | every node watches the `memory` state (the whole set at start, then each change) and writes an incoming version where its own file is still the version it replaced, or absent; staged and renamed in, never through a symbolic link, the replaced version kept in `memory-copies/` in the module's state directory for 30 days | -| conflict | a file changed on two nodes since the version last carried becomes one file holding both, the newer first, then a line naming each version's node and time, then the older; that file is carried, so every node ends on it, and the operator is told by a warning through the operator channel's `notify`, cleared on the file's next change without a conflict | +| carry | every node watches the `memory` state (the whole set at start, then each change) and writes an incoming version where its own file holds no change it did not carry (the version replaced, the version it last carried, or none); staged and renamed in, never through a symbolic link, the replaced version kept in `memory-copies/` in the module's state directory for 30 days | +| conflict | a file changed on two nodes since the version last carried becomes one file holding both, the newer first, then a line naming each version's node and time, then the older (two versions too large for one file: the newer in it, the older beside it as `.older-from-`); what was written is carried, so every node ends on it, and the operator is told by a warning through the operator channel's `notify`, cleared on the file's next change without a conflict | | remove | a carried file removed from a memory folder that still exists is put in the state as a removal marker for 30 days; a node still holding the removed version moves it into `memory-copies/`, a node that changed it keeps and carries it again; a missing folder or an absent key removes nothing | | first carrying | a node with no record of what it carried takes an equal file as agreed and a different one as a conflict, so every version learned before is kept | | list | `claude_code_memory`: what this node carries, each file's fingerprint and last version, what was not carried and why, open conflicts and copies; never the text | -**What is not carried**: a symbolic link, a file over 128 KiB, and a file holding a key block, a signed +**What is not carried**: a symbolic link, a file over 128 KiB or too large for one value of the state once encoded, and a file holding a key block, a signed token, a known token prefix or a password in an address. Each is listed with why. **Homes of one kind only.** Memory moves among the homes where the agent runs as the operator's account,