OpenClaw
OpenClaw writes the authorization contract before multiplayer memory
OpenClaw’s multiplayer-memory design separates private, channel, role, shared, projection and quarantine state, while a companion SDK proposal declares versioned authorization capabilities without claiming enforcement. A transcript-writer patch applies the same rule to session lifecycle ownership.
openclaw/openclaw PR #121221 is the inspected primary source: “feat(memory): define authorization contracts for memory plugins.” The related records below were inspected as supporting context rather than independent confirmation.
The facts
- openclaw/openclaw PR #121221 was created 2026-08-09T20:04:17Z and was open at inspection; its title is “feat(memory): define authorization contracts for memory plugins.” - openclaw/openclaw PR #121121 was created 2026-08-09T16:30:29Z and was open at inspection; its title is “docs(memory): add multiplayer memory design.” - openclaw/openclaw PR #121284 was created 2026-08-10T00:02:04Z and was closed at inspection; its title is “fix(sessions): fence lifecycle transcript writers.” - The repository reported 385702 stars, 5642 open issues, default branch main, and last push 2026-08-10T00:58:32Z. - The latest tagged-release baseline checked was v2026.7.1-2 published 2026-08-04T00:41:26Z.
What changed
openclaw/openclaw PR #121221 reports: Related: #121121 What Problem This Solves Memory plugins have no stable, auditable public contract for declaring the authorization capabilities that later multiplayer-memory enforcement will need. That leaves plugin authors without a deterministic way to validate operation-bound authorization plans and evidence before runtime policy exists. Why This Change Was Made This Phase 0 layer adds narrow, versioned SDK data contracts plus a separate pure conformance surface. memory-core and memory-lancedb explicitly report their legacy all-false capabilities; no backend is newly authorization-capable. Non-goals: trusted-context issuance, admission/enforcement, configuration, storage/migrations, and user/role/agent-shared publishing or review policy. User Impact There is no operator-facing behavior change or setting to enable. Plugin authors gain typed contracts and deterministic conformance scenarios for the later authorization phases. Evidence node scripts/run-vitest.mjs src/plugins/contracts/memory-authorization.contract.test.ts extensions/memory-core/index.test.ts — 25 + 24 passed. node --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check — passed. node --import tsx scripts/check-sdk-package-extension-import-boundary.mts --json — []. Fresh Codex autoreview against the docs-parent branch — clean, no accepted/actionable findings. Blacksmith Testbox (tbx_01kzm2184aefn463fsqv350mgk): SDK API baseline check, SDK surface check (153 public entrypoints / 4,904 exports), and pnpm build — passed.
openclaw/openclaw PR #121121 reports: What Problem This Solves OpenClaw has no single source of truth for how a shared agent could keep private, channel, role, shared, projection, and quarantine memory separate. Operators and plugin authors need an explicit design that distinguishes planning from shipped isolation behavior. Why This Change Was Made This adds the canonical multiplayer-memory design and its phased implementation plan. The design preserves the current single-user behavior until an explicit migration, names the core/plugin boundary, and keeps Phase 0 explicitly shadow-only. It reserves the planned authorization contract; the child SDK PR supplies the importable SDK surface. User Impact Operators and plugin authors can now find the proposed memory-isolation model, its constraints, and the staged path toward it. No runtime behavior, configuration, or isolation claim changes in this PR. Evidence pnpm docs:list tsx scripts/format-docs.mts --check — 756 docs files clean node scripts/check-docs-mdx.mjs docs/concepts/memory-multiplayer.md docs/concepts/2026-07-29-memory-impl-plan.md docs/docs.json — passed (2 files) node --import tsx scripts/check-docs-i18n-glossary.mts — passed node scripts/docs-link-audit.mjs — 6,420 internal links checked; 0 broken git diff --check origin/main...HEAD
openclaw/openclaw PR #121284 reports: What Problem This Solves Four lifecycle writers mutated session rows with no in-transaction expected-state check — session branching did a blind whole-row replace outside the writer queue, checkpoint branch/restore and rewind/fork/switch validated nothing after their pre-read, and the worker transcript commit CAS'd the leaf but not the session row. A concurrent reset/rewind could be silently clobbered; the gateway's pre-transaction checks were only protected by in-process admission. Why This Change Was Made This completes the write-fence architecture (#121003 fenced run-owned writes by the durable writer claim): lifecycle mutations now carry the caller's pre-read {sessionId, lifecycleRevision} identity validated inside the transaction, reusing each surface's existing rejection shape (session-rebound / lifecycle-changed / retry / invalid-batch with rollback); createBranchedSession now enters the writer queue like its siblings (async signature, callers updated). Raced mutations become recorded rejections instead of silent clobbers. Incident lineage: #121003, #121113. User Impact None when unraced; concurrent lifecycle operations now fail visibly and retryably instead of corrupting. Evidence 5 fence suites: 173 tests, including interleaved reset-vs-mutation races Accessor conformance: 55 tests Full local changed gate: typechecks,
Why it matters
Shared memory becomes a security boundary before it becomes a retrieval feature. A typed capability report is useful precisely because the current backends still report no authorization support. The operator test is whether visible output, retained state and authority still describe the same event after retries, background work or restart.
Current
The primary record was open when captured on 2026-08-10. The tagged-release baseline was v2026.7.1-2 published 2026-08-04T00:41:26Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/openclaw/openclaw/pull/121221. Supporting records are https://github.com/openclaw/openclaw/pull/121121 and https://github.com/openclaw/openclaw/pull/121284. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Keep Phase 0 shadow-only, make every memory operation carry an owner and evidence plan, and refuse to turn design documents into shipped-isolation claims. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.