OpenClaw

OpenClaw puts budgets on UI startup and gateway cache growth

OpenClaw proposes restoring startup bundle headroom, enforcing a Control UI size budget and bounding the gateway worker cache. The cluster treats browser load and long-lived process memory as explicit operating limits rather than performance folklore.

← Back to homeOriginal source ↗

openclaw/openclaw PR #123911 is the inspected primary source: “perf(ui): restore startup bundle headroom.” The related records below were inspected as supporting context rather than independent confirmation.

The facts

- openclaw/openclaw PR #123911 was created 2026-08-15T00:59:22Z and was open at inspection; its title is “perf(ui): restore startup bundle headroom.” - openclaw/openclaw PR #123910 was created 2026-08-15T00:58:30Z and was open at inspection; its title is “fix(ui): keep Control UI startup bundle within budget.” - openclaw/openclaw PR #123901 was created 2026-08-15T00:26:08Z and was open at inspection; its title is “fix(workers): bound Gateway bundle cache growth.” - The repository reported 386312 stars, 5551 open issues, default branch main, and last push 2026-08-15T01:01:19Z. - The latest tagged-release baseline checked was v2026.7.1-2 published 2026-08-04T00:41:26Z.

What changed

openclaw/openclaw PR #123911 reports: What Problem This Solves Repairs three consecutive main CI failures where every selected QA Smoke profile rebuilt the Control UI and rejected the startup JavaScript bundle. The measured bundle reached 333,077 gzip bytes against the 333,064-byte ratcheted limit. Root Cause The recent structured Gateway connection-recovery work consumed the remaining startup budget headroom. A UI-local resolveGatewayErrorDetailCode wrapper duplicated the canonical readConnectErrorDetailCode dependency helper across the eager connection path, while multiple startup consumers still imported the wrapper through gateway.ts. Fix Delete the UI wrapper and call the canonical Gateway detail reader directly from each owner. This keeps the connection-error contract unchanged while removing an unnecessary eager helper and re-export. The startup baseline and tolerance are unchanged. Runtime production delta: +12/-18 lines (net -6). Tests: +5/-3 lines (net +2). Evidence Reproduced on exact-main runs 31853481444, 31853887421, and 31854305560. Focused Gateway/UI error contract tests passed: 4 files, 116 tests. Targeted formatting, UI lint, and git diff --check passed. Autoreview: no accepted/actionable findings. Exact-head CI will provide the Linux Control UI gzip proof.

openclaw/openclaw PR #123910 reports: What Problem This Solves Resolves a problem where Control UI startup bundle growth made required main CI fail by 1–13 gzip bytes, preventing deployment managers from accepting otherwise healthy main builds. Why This Change Was Made The stale-build connection path accumulated redundant startup-eager wrappers, state, and a wider parser result than its only caller needed. This change removes that duplicate indirection, keeps the existing validation and one-shot compatibility retry behavior, and does not change any performance budget, tolerance, baseline, dependency, or minifier setting. Production LOC: +15/-53 (net -38) | Tests: +5/-9 AI-assisted; implementation and final diff were independently reviewed. User Impact Operators can deploy current main again once required CI passes. Control UI connection, stale-build reload, legacy Gateway compatibility, and reconnect behavior are unchanged. This is not a visual change, so before/after screenshots are not applicable. Evidence Before: exact-main CI run https://github.com/openclaw/openclaw/actions/runs/31853481444 produced 333,066 B startup JS gzip against the 333,064 B limit. Prior run https://github.com/openclaw/openclaw/actions/runs/31852656039 produced 333,065–333,077 B across two profiles. After, local Node 24 pnpm ui:build: 332,271 B startup JS gzip. After, Linux AWS proof run_0da96a766851: 333,020 B startup JS gzip, 44 B below the CI limit. node scripts/run-vitest.mjs packages/gateway-protocol/src/connect-error-details.test.ts ui/src/api/gateway.node.test.ts ui/src/app/gateway-store.test.ts — 148 tests passed. Targeted oxlint and oxfmt checks passed; git diff --check passed. Fresh branch-mode

openclaw/openclaw PR #123901 reports: What Problem This Solves Fixes an issue where every distinct Gateway worker build permanently left a content-addressed tarball under state/cache/worker-bundles. Long-running development and upgrade cycles therefore grew the Gateway cache without a lifecycle owner, even after environments and placements stopped referencing older builds. Why This Change Was Made The process-scoped bundle producer now exposes best-effort pruning only when its caller explicitly owns the cache exclusively. Gateway worker startup supplies that ownership after the state-directory lock, retains the successfully prepared current hash plus every durable environment and placement hash, and prunes after successful publication. Cleanup only recognizes complete 64-hex tarballs and producer-shaped crash staging/temp artifacts. Shared custom caches remain non-destructive, and remote per-hash worker installations are intentionally out of scope because their shared-host ownership is not strong enough for safe deletion. This AI-assisted change adds no configuration, protocol, or persistent schema surface. Production delta is +134/-14 (net +120); tests are +144. The growth is the bounded cache ownership capability and recovery-only durable-reference projection; terminal diagnostic records do not pin historical archives. Existing hash, archive integrity, bootstrap, and admission contracts are unchanged. User Impact Gateways no longer accumulate an unbounded local tarball for every historical worker build. Current, active, recovered, and terminal-diagnostic bundle hashes remain available while referenced. Cleanup failure only leaves

Why it matters

A fast first load does not compensate for an unbounded cache, and a bounded cache does not excuse a startup bundle that steadily grows. Both limits need independent alarms. The operator test is whether the system remains bounded and its receipts still describe the action after failure, retry or restart.

Current

The primary record was open when captured on 2026-08-15. 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/123911. Supporting records are https://github.com/openclaw/openclaw/pull/123910 and https://github.com/openclaw/openclaw/pull/123901. 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

Publish the startup and steady-state budgets together, test cold and warm paths, and make cache eviction visible before operators meet it as latency or memory pressure. 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.