adr 0028 upstream openclaw boundary - Alshival-Ai/neural-labs GitHub Wiki

ADR 0028: Unmodified upstream OpenClaw runtime

Design history: for current instructions, see Updating the OpenClaw runtime. See the decision index for amendments and related records.

Date: 2026-09-06

Status: Accepted; deployed on 2026-09-06; upgraded from OpenClaw 2026.8.2 to 2026.9.2.

Context

Neural Labs' pending native-planning feature rebuilt OpenClaw from source with a downstream patch and overlaid its compiled bundles. That patch failed to apply against 2026.9.2 in twelve files. The image also replaced OpenClaw's managed Codex launchers with the independently installed terminal CLI. These changes made an upstream update depend on maintaining private runtime and protocol contracts.

Decision

Inherit OpenClaw from an official image pinned by digest. Keep its complete /app tree unchanged, including compiled code, extensions and managed binaries. Do not fetch, patch or rebuild upstream source in the Neural Labs Containerfile. The release manifest must have an empty patch inventory. Offline validation rejects source patches and explicit runtime modifications; an operator image comparison checks the resulting tree before promotion.

Neural Labs owns the desktop, HTTP adapters and provisioning under /usr/local/lib/neural-labs, its static assets under /usr/local/share/neural-labs, its MCP tools, and public OpenClaw configuration. Integrate through published Gateway packages, public CLI operations and supported plugin/skill mechanisms. The config adapter uses openclaw config set --batch-json; it does not import hashed private bundles. Read-only discovery of upstream skills/extensions and the upstream Docker health check do not modify the runtime.

The terminal Codex CLI is a separate tool with its own version pin and account cache. OpenClaw selects its own bundled Codex by default. If an upstream image lacks its native app-server executable, an operator may install the exact upstream app-server package separately in persistent workspace storage and select it with the supported plugin command setting. This must preserve /app and the separate terminal CLI; verify a real personal-agent reply and record the recovery in the upgrade guide. Startup verifies the terminal CLI separately and identifies the model catalog's runtime as OpenClaw.

Private-chat drafting is an application workflow over ordinary chat.send messages. The composer does not write custom session collaboration fields or private implementation-handoff parameters. The drafting choice is local to the tab and session; plan presentation can be reconstructed from saved messages. Existing proposed-plan signatures remain readable. Upstream question APIs stay available independently of the drafting selection.

Trust and behavior

Drafting is an advisory request to propose work before implementation. It is not native Codex Plan mode, a tool restriction or a server-enforced approval boundary. The UI states that tool permissions remain the same. Implement plan submits the selected plan as an ordinary user message. Existing access checks, tool approvals, private account ownership, session isolation and SMS policies remain in force. No new mount, ingress or credential-sharing boundary is added.

For 2026.9.2, explicitly keep tools.sessions.visibility: "tree", tools.agentToAgent.enabled: false, and tools.swarm.enabled: false. Upstream now broadens these defaults; Neural Labs retains its existing session-tool boundary and channel-scoped Team MCP collaboration. Browser roles still require the owned agent and sessions.others: "none". Auth checks continue to require the exact personal OAuth profile in its agent-local store; an inherited main profile or a fresh agent's shared-store display path is not a personal login.

SMS installation must have an official, exact-version npm install record. Matching package code installed from a local path does not grant the upstream trusted ingress capability. Startup checks public plugins inspect metadata and uses the official npm installer when that record is absent or mismatched.

Consequences

Updating OpenClaw no longer requires rebasing source patches or rebuilding its runtime. Browser client/protocol and SMS package versions still need alignment, and public interfaces, account ownership, access defaults and state migrations still require candidate tests. The 2026.9.2 credential-store migration and new agent-tool defaults passed the recorded acceptance checks; unchanged upstream files alone do not prove compatibility with future releases. See the upgrade guide.