Skip to content

OpenClaw 2026.8.1 alignment - #86

Merged
obaid merged 3 commits into
mainfrom
feature/openclaw-2026-8-1-alignment
Aug 31, 2026
Merged

obaid merged 3 commits into
mainfrom
feature/openclaw-2026-8-1-alignment

Conversation

@obaid

@obaid obaid commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Bumps the OpenClaw pin 2026.7.1 → 2026.8.1 and fixes every break a source-verified gap review (five parallel review passes over the v2026.7.1..v2026.8.1 tag diff) surfaced in our integration surface.

Breaks fixed (all verified against the 2026.8.1 source)

  1. agents.list → agents.entries — the strict 2026.8.1 schema rejects the legacy list next to entries and requires explicit ownership on multi-agent rosters. All writers (install script, full-config rebuild, config.patch service) now emit the keyed map, delete any leftover list, and set ownership: explicit. Removal rides the locked RPC via null-keyed map delete.
  2. Headless plugin-install consent — 2026.8.1 requires --accept-capabilities (no TTY = no consent handler) and --force for non-ClawHub npm sources. Previously: fresh agent installs hard-aborted at the provision-web step; ByteRover + both Bedrock providers failed silently behind || true (BYO-AWS servers would provision with no Bedrock provider).
  3. openai-codex provider id removed upstream — renamed to openai in the device-code login, auth order set, and model refs (ChatGPT-subscription BYO flow).
  4. Sessions moved to per-agent SQLite — gateway refuses to boot while a legacy sessions.json exists; both upgrade paths now run openclaw doctor --fix between package swap and restart + a one-time plugins update --all --accept-capabilities. Session browser rebuilt on sessions.list/chat.history RPCs; SyncAgentStatsJob reads tokens from sessions.list and counts transcript *.jsonl files (which remain on disk).
  5. Browser profile color — rejected by the strict schema; dropped from both writers.

Hardening

  • provisiond 0.5.1: relay requests operator.admin (short-circuits the new canReceiveSessionEvent filter — without it a future gateway.roles write silently kills chat streaming) and fixes sessions.list pagination (nextOffset/hasMore never existed; sync was silently capped at 100 sessions).
  • OPENCLAW_SUPERVISOR_MODE=external in the gateway systemd unit — no double supervision, no self-updates off the fleet pin.
  • Full-config rebuild re-emits installer-recorded plugin enable markers (provision-web, byterover) instead of stripping them.

Verified-safe (no changes needed)

paste-api-key SQLite injection, loopback pairing bypass (#95997), provider/model schema incl. both Bedrock overlays, chat.send fast-send shape, streaming delta events, config.patch baseHash round-trip, installer env contract (OPENCLAW_VERSION/NO_PROMPT/NO_ONBOARD), --version parsing, gateway install auth gate (loopback+token passes).

Tests

  • provision-core: 1148 passed (full suite)
  • provisiond: 41/41, tsc clean

Rollout

Needs a live droplet E2E before merge (fresh provision + in-place 7.1→8.1 upgrade + chat/skills/plugin checks) — the plugin-consent and doctor-migration paths are multi-layer and were reviewed statically.

Companion PRs: provision-skills (strict YAML frontmatter gate), provision-openclaw-web (channel-contract import + SDK bump).

obaid added 2 commits August 31, 2026 11:50
… SQLite, provider merge

Pin bumped 2026.7.1 → 2026.8.1 with every break the source diff surfaced,
each verified against the v2026.8.1 tag:

- agents.entries roster: all writers emit the keyed map (no id in entry
  body) with agents.ownership=explicit and delete any legacy agents.list —
  a leftover list next to entries fails the strict schema and takes the
  gateway down. Agent removal now rides the locked config.patch RPC
  (null-keyed map delete) instead of a raw file edit.
- Headless plugin installs: --accept-capabilities everywhere (no TTY = no
  consent handler at 2026.8.1), --force for non-ClawHub npm sources.
  Without this every fresh agent install aborts at the provision-web step
  and Bedrock/ByteRover installs fail silently behind || true.
- openai-codex provider id merged upstream into openai: auth login, auth
  order set, and model refs all renamed (device-code method unchanged).
- Session store moved to per-agent SQLite: upgrade paths run
  openclaw doctor --fix between package swap and gateway restart (the
  gateway refuses to boot while a legacy sessions.json exists), plus a
  one-time plugins update --all --accept-capabilities. Session browser now
  reads sessions.list/chat.history RPCs; agent stats read sessions.list
  for tokens and count transcript *.jsonl directly.
- Browser profiles: color field dropped (strict schema rejects it).
- provisiond 0.5.1: relay requests operator.admin (immunizes chat
  streaming against 2026.8.1's canReceiveSessionEvent filter if
  gateway.roles is ever set) and sessions.list pagination pages on row
  count — nextOffset/hasMore never existed, sync was capped at 100.
- Gateway systemd unit: OPENCLAW_SUPERVISOR_MODE=external so the daemon
  defers lifecycle to systemd and never self-updates off the fleet pin.
- VerifyAgentChannelsJob accepts both roster shapes during migration.

1148 core tests green; provisiond 41/41.
…d mounts, doctor ordering, plugin consent repair

Every fix below was discovered by running the full upgrade + fresh-agent
E2E on a live DO droplet (7.1 box → fleet updater → 8.1 → agent install →
streamed chat verified in the dashboard):

- env block: 2026.8.1's strict root schema is {shellEnv, vars} — flat
  provider keys fail validation and take the gateway down. All writers now
  emit env.vars and migrate legacy flat keys.
- memory search moved to the root memory.search key (agents.defaults.
  memorySearch is rejected); the query.hybrid tuning block was retired
  upstream, as were compaction.reserveTokensFloor and
  contextPruning.keepLastAssistants — all dropped from our defaults.
- Persistent-volume dirs are now BIND MOUNTS, not symlinks: the 8.1
  SQLite session import refuses symbolic-link path components, which
  bricked the doctor migration on our layout. Fresh installs mount, and
  both upgrade paths convert symlink → bind mount idempotently.
- Doctor migration ordering: the gateway must be STOPPED while doctor
  runs — a live (even crash-looping) gateway owns the state-dir lock and
  doctor silently skips automatic state migrations. Both upgrade paths
  now stop → doctor --fix → update repair --accept-capabilities → start.
- 'openclaw update repair --accept-capabilities' added: bundled plugins
  (perplexity) can lack recorded capability consent after upgrade and the
  gateway refuses readiness ('plugin verification failed').
- OPENCLAW_SUPERVISOR_MODE=external REVERTED: the 8.1 CLI honors it by
  refusing 'openclaw update' entirely, which would break every future
  fleet pin bump.
- Fleet updater self-heal: when the binary already matches the pin but
  the gateway is down (interrupted earlier run), run the doctor repair
  instead of declaring convergence. Long SSH execs get explicit timeouts
  (the 30s default left phpseclib channels poisoned mid-update).
- OpenClawDriver verifier now accepts the agents.entries roster (the
  optional-chained agents?.list read dodged the review grep).
- provision-web install check accepts 2026.8.1's bare package dir name
  (the __openclaw-generation__ suffix is gone).

Full suite: 1147 passed. Live E2E: legacy sessions.json migrated into
SQLite with data intact (visible in the session browser), agent installed
on 8.1 with consent flags, chat streamed end-to-end.
@obaid

obaid commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

🤖 AI token usage for feature/openclaw-2026-8-1-alignment

No AI agent token usage has been recorded for this branch yet.

Records appear here once contributors run tokenchecker sync (installed as a pre-push hook) on machines where AI sessions ran.

…efaults

The completion/error events are what re-enable the chat composer — riding
the queued broadcasts lane left seconds of dead air after the final
streamed token (deltas already broadcast inline since #84). All chat
conversation events now ShouldBroadcastNow.

sqlite connections default to WAL journal mode with a 5s busy timeout so
concurrent Horizon workers and web requests wait for the write lock
instead of throwing 'database is locked' (local dev + Docker; prod MySQL
unaffected). Both env-overridable.
@obaid
obaid merged commit c0b9827 into main Aug 31, 2026
1 of 2 checks passed
@obaid
obaid deleted the feature/openclaw-2026-8-1-alignment branch August 31, 2026 23:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant