memory backpass: pick memory repo and traces from the host public/private role #286

Open
opened 2026-10-22 03:25:57 +01:00 by allod-agent · 0 comments
Member

Serve each machine's backpass from its own memory repo: a public host reads the public traces and opens its pull request on the public memory repo, a private host reads the private traces and opens it on the private memory repo, and --public on a private host adds a public pass whose result is relayed instead of pushed.

Primary goals:

  • Role detection — a bare allod memory backpass works out whether it is on a public or private host and targets the memory repo that host actually owns.
  • Public host — reads only the public traces and opens the memory-backpass: <date> pull request on the public memory repo.
  • Private host — reads the private traces and opens the pull request on the private memory repo, as today.
  • --public on a private host — additionally reads the public traces and commits the public-memory side to a public worktree, exposed for relay with allod patch rather than pushed.
  • One index each — the run edits exactly one memory repo and never presents the same index twice.

Current state and specifics

allod memory backpass always treats the private memory as the write target and the public memory as a read-only index whose edits are relayed. --public resolves to allod/memory (cmd/allod/memory_backpass_resolve.go:152); --private resolves to the registry entry marked "memory": true other than allod/memory, else ~/work/agent-memory (cmd/allod/memory_backpass_resolve.go:106); the driver always opens its PR from the private worktree and relays public edits from a second, unpushed worktree (cmd/allod/memory_backpass_write.go:255). The skill states the same contract — “proposes one small human-reviewed update to private memory as a pull request” (skills/memory-backpass/SKILL.md:9) — and the synthesis prompt hardcodes the private worktree and forbids editing the public checkout (skills/memory-backpass/synthesis-prompt.md:2,6).

On a public host with no private-memory credential the resolution picks a local agent-memory copy and the write run dies at step 1's relay check: forge pr list -s closed runs in a checkout with no remote and returns forge: not in a git repo and --repo not specified. Even with a remote the token has no vnprc/* scope. Witness on allod-dev: git ls-remote ssh://git@forge.anarch.diy:2222/vnprc/agent-memory.git reports not authorized to read, and forge pr list -R vnprc/agent-memory returns HTTP 404, while allod/memory is readable and pushable.

Pointing --public and --private at the same repo is not a workaround: the run then emits every bullet and every open ledger line twice in both prompts, once as PUB- and once as PRV-, which corrupts the fold.

Scope

In scope: role detection, the public-host write target, the --public flag on a private host, and the relay path for the public pass. The synthesis prompt must edit whichever repo the run owns and relay the other only when --public requests it.

Out of scope: the quote check, the two-session floor, the five-edit ceiling, the byte caps, the ledger format, and the traces layout. The model seat and the timer schedule are separate work.

Serve each machine's backpass from its own memory repo: a public host reads the public traces and opens its pull request on the public memory repo, a private host reads the private traces and opens it on the private memory repo, and `--public` on a private host adds a public pass whose result is relayed instead of pushed. Primary goals: - **Role detection** — a bare `allod memory backpass` works out whether it is on a public or private host and targets the memory repo that host actually owns. - **Public host** — reads only the public traces and opens the `memory-backpass: <date>` pull request on the public memory repo. - **Private host** — reads the private traces and opens the pull request on the private memory repo, as today. - **`--public` on a private host** — additionally reads the public traces and commits the public-memory side to a public worktree, exposed for relay with `allod patch` rather than pushed. - **One index each** — the run edits exactly one memory repo and never presents the same index twice. ### Current state and specifics `allod memory backpass` always treats the private memory as the write target and the public memory as a read-only index whose edits are relayed. `--public` resolves to `allod/memory` (`cmd/allod/memory_backpass_resolve.go:152`); `--private` resolves to the registry entry marked `"memory": true` other than `allod/memory`, else `~/work/agent-memory` (`cmd/allod/memory_backpass_resolve.go:106`); the driver always opens its PR from the private worktree and relays public edits from a second, unpushed worktree (`cmd/allod/memory_backpass_write.go:255`). The skill states the same contract — “proposes one small human-reviewed update to private memory as a pull request” (`skills/memory-backpass/SKILL.md:9`) — and the synthesis prompt hardcodes the private worktree and forbids editing the public checkout (`skills/memory-backpass/synthesis-prompt.md:2,6`). On a public host with no private-memory credential the resolution picks a local `agent-memory` copy and the write run dies at step 1's relay check: `forge pr list -s closed` runs in a checkout with no remote and returns `forge: not in a git repo and --repo not specified`. Even with a remote the token has no `vnprc/*` scope. Witness on `allod-dev`: `git ls-remote ssh://git@forge.anarch.diy:2222/vnprc/agent-memory.git` reports `not authorized to read`, and `forge pr list -R vnprc/agent-memory` returns HTTP 404, while `allod/memory` is readable and pushable. Pointing `--public` and `--private` at the same repo is not a workaround: the run then emits every bullet and every open ledger line twice in both prompts, once as `PUB-` and once as `PRV-`, which corrupts the fold. ### Scope In scope: role detection, the public-host write target, the `--public` flag on a private host, and the relay path for the public pass. The synthesis prompt must edit whichever repo the run owns and relay the other only when `--public` requests it. Out of scope: the quote check, the two-session floor, the five-edit ceiling, the byte caps, the ledger format, and the traces layout. The model seat and the timer schedule are separate work.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
allod/tools#286
No description provided.