Skip to content

refactor: add embedded run session target seam#90439

Merged
jalehman merged 1 commit into
mainfrom
clawdbot-d02.1.9.1.28/31b-embedded-run-session-target
Jun 23, 2026
Merged

refactor: add embedded run session target seam#90439
jalehman merged 1 commit into
mainfrom
clawdbot-d02.1.9.1.28/31b-embedded-run-session-target

Conversation

@jalehman

@jalehman jalehman commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

OpenClaw Path 3 needs embedded run/session mutations to cross a storage-neutral seam before the SQLite adapter lands. This PR refreshes #90439 onto current main and keeps the existing file-backed behavior while giving the later SQLite backend operation-sized boundaries for run targets, checkpoint restore/branch, and parent-session forks.

Why This Change Was Made

The old #90439 branch was based on the superseded public SDK transcript target writer branch and included stale WIP from adjacent Path 3 slices. This rebuild keeps only the embedded run/session target and transaction-boundary seam work that belongs here, using the landed API shape from #95030, #95087, and #89912.

User Impact

Behavior should be neutral. Runtime still uses file-backed transcripts and the existing session store, but callers now pass storage-neutral session identity where this PR touches embedded run, compaction, subagent, reply, and consult paths. No new compaction checkpoint schema or SQLite implementation is introduced here.

Changes

  • Adds embedded run session target resolver
  • Migrates embedded run/compaction callers
  • Adds compaction checkpoint store boundary
  • Moves checkpoint branch/restore entry writes
  • Adds parent-session fork entry boundary
  • Covers subagent/reply/consult fork flows

Changes Walkthrough

File Change
src/agents/run-session-target.ts Resolves storage-neutral run targets to file-backed runtime targets
src/agents/embedded-agent-runner/run.ts Resolves target before embedded run internals
src/agents/embedded-agent-runner/compact.ts Resolves target before direct compaction internals
src/gateway/session-compaction-checkpoints.ts Adds file-backed checkpoint store boundary
src/gateway/server-methods/sessions.ts Uses checkpoint store branch/restore operations
src/auto-reply/reply/session-fork.ts Adds parent fork session-entry boundary
src/agents/subagent-spawn.ts Uses fork entry boundary for subagent sessions
src/auto-reply/reply/session.ts Uses fork entry boundary for reply sessions
src/talk/agent-consult-runtime.ts Uses fork entry boundary and run target for consults

Evidence

Current base: main at fa263affd584e780185393c7322f25cd475f13f3.
Current head: 6589f6386dffdb6ed398558f4f923d8106a0ee5b.
Stack position: after #95030, #95087, and #89912; before SQLite adapter/foundation work. This PR intentionally excludes #89518 bundled plugin transcript mirror work, #89911 bundled target lookup work, and 3.2 SQLite adapter/foundation work.

Passed locally after the final rebase:

  • node scripts/run-vitest.mjs src/gateway/session-compaction-checkpoints.test.ts src/gateway/server.sessions.compaction.test.ts src/gateway/server.sessions.permissions-hooks.test.ts
  • node scripts/run-vitest.mjs src/agents/subagent-spawn.context.test.ts src/auto-reply/reply/session-fork.test.ts src/auto-reply/reply/session.test.ts src/talk/agent-consult-runtime.test.ts src/agents/run-session-target.test.ts src/gateway/session-compaction-checkpoints.test.ts src/gateway/server.sessions.compaction.test.ts src/gateway/server.sessions.permissions-hooks.test.ts
  • node scripts/run-oxlint.mjs src/agents/embedded-agent-runner/compact.runtime.types.ts src/agents/embedded-agent-runner/compact.ts src/agents/embedded-agent-runner/compact.types.ts src/agents/embedded-agent-runner/run.ts src/agents/embedded-agent-runner/run/params.ts src/agents/embedded-agent-runner/run/types.ts src/agents/openclaw-tools.subagents.sessions-spawn.test-harness.ts src/agents/run-session-target.test.ts src/agents/run-session-target.ts src/agents/subagent-spawn.context.test.ts src/agents/subagent-spawn.runtime.ts src/agents/subagent-spawn.test-helpers.ts src/agents/subagent-spawn.ts src/auto-reply/reply/session-fork.test.ts src/auto-reply/reply/session-fork.ts src/auto-reply/reply/session.test.ts src/auto-reply/reply/session.ts src/gateway/server-methods/sessions.ts src/gateway/session-compaction-checkpoints.test.ts src/gateway/session-compaction-checkpoints.ts src/talk/agent-consult-runtime.test.ts src/talk/agent-consult-runtime.ts
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.src.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-src.tsbuildinfo
  • git diff --check upstream/main...HEAD
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base upstream/main

SQLite follow-up: implement backend-owned transactions for checkpoint persist/branch/restore and parent-session fork once the SQLite adapter/foundation slice lands. This PR does not add a new compaction checkpoint schema.

Refs #88838

Real behavior proof

Behavior addressed: compaction checkpoint list/branch/restore and parent-session fork entry boundaries remain behavior-neutral when routed through the embedded run/session target seam.

Real environment tested: local live OpenClaw gateway on port 18789, stopped from the normal checkout, then loaded from this PR worktree at 6589f6386dffdb6ed398558f4f923d8106a0ee5b; CLI/Gateway reported 2026.6.9 and gateway status --deep reported admin-capable connectivity.

Exact steps or command run after this patch:

pnpm openclaw gateway stop
CI=true node scripts/run-node.mjs gateway run --port 18789 --force
node scripts/run-node.mjs gateway status --deep
node --input-type=module <live-proof-script>
# live-proof-script called sessions.create, seeded one disposable checkpoint row,
# called sessions.compaction.list / branch / restore, verified persisted rows and transcripts,
# then cleaned up with sessions.delete for the source and branch rows.
rg -n 'path3-proof-90439-mqqvgg0u-90518|dashboard:9cbaec99-d7f1-4f58-931f-524ee014099b' ~/.openclaw/agents/main/sessions/sessions.json ~/.openclaw/agents/main/sessions || true
# Ctrl-C foreground PR gateway after proof
CI=true pnpm openclaw gateway start
sleep 8; CI=true pnpm openclaw gateway status --deep

Evidence after fix: disposable source key agent:main:path3-proof-90439-mqqvgg0u-90518; checkpoint id checkpoint-mqqvgg0u-90518; branch key agent:main:dashboard:9cbaec99-d7f1-4f58-931f-524ee014099b; restored session id 89a0205f-1091-4f16-a3f9-859853e9cc26. Assertions passed that list returned the seeded checkpoint, branch persisted parentSessionKey, branch did not copy checkpoint metadata, branch and restore excluded the post-checkpoint tail, restore created a new session id, and restore preserved checkpoint metadata. A post-cleanup rg for the disposable keys returned no matches.

Observed result after fix: live PR-loaded gateway behavior matched the focused tests; checkpoint branch/restore stayed bounded to the stored checkpoint and the parent-session fork entry boundary persisted through the real gateway store.

What was not tested: SQLite backend/transactions, new checkpoint schema, doctor migration, SDK compatibility, and /readyz or /healthz HTTP endpoints while the PR gateway was loaded. The checkpoint metadata was seeded directly into the disposable live session row because the public manual-compaction API would exercise model summarization rather than only this storage-boundary seam.

@clawsweeper

clawsweeper Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 21, 2026, 7:43 AM ET / 11:43 UTC.

Summary
This PR adds a storage-neutral embedded run session target resolver plus file-backed compaction checkpoint and parent-session fork transaction-boundary seams for the session/transcript SQLite migration stack.

PR surface: Source +654, Tests +387. Total +1041 across 35 files.

Reproducibility: yes. Source inspection is enough to reproduce the PR-introduced issue: current main forwards the explicit compact() sessionFile, while the PR drops it whenever a sessionKey is present.

Review metrics: 1 noteworthy metric.

  • Run Target Contract Changes: 3 params relaxed; 3 helper callers moved to config-backed session stores. Making sessionFile optional and moving helper runs through session.store changes how embedded runs and delegated compaction find persisted session state before merge.

Stored data model
Persistent data-model change detected: serialized state: src/auto-reply/reply/session-fork.ts, serialized state: src/auto-reply/reply/session.test.ts, serialized state: src/auto-reply/reply/session.ts, serialized state: src/config/sessions/store.ts, serialized state: src/gateway/server-methods/sessions.ts, serialized state: src/gateway/session-compaction-checkpoints.test.ts, and 7 more. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #88838
Summary: This PR is an implementation slice for the canonical session/transcript SQLite migration tracker, with adjacent SQLite foundation and adapter slices still in flight.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🧂 unranked krab
Result: blocked until real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Preserve explicit sessionFile fallback in delegateCompactionToRuntime and add a regression test for sessionKey plus sessionFile without runtimeContext.
  • [P1] Add redacted real-environment terminal or log proof that the file-backed and storage-neutral session target paths behave correctly after the fix.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body lists tests, type/lint checks, diff-check, and autoreview only; it still needs redacted terminal/log/live output for the changed session-target behavior before merge, with private details such as IPs, API keys, phone numbers, and non-public endpoints redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] Merging as-is can make ContextEngine delegated compaction ignore an explicit sessionFile whenever a sessionKey is present, causing compaction to target a configured/default store entry instead of the caller-supplied transcript file.
  • [P1] The PR changes session/transcript target resolution and transaction boundaries in a migration stack, so upgrade proof needs to cover both explicit-file compatibility and the new storage-neutral path.
  • [P1] The PR body lists tests and static checks, but does not include redacted terminal/log/live output exercising the changed session-target behavior after the patch.

Maintainer options:

  1. Preserve Explicit File Fallback (recommended)
    Keep passing the explicit compact() sessionFile unless the caller supplies a fully resolved runtime/store target, and add coverage for sessionKey plus sessionFile.
  2. Accept With Maintainer-Proven Caller Coverage
    Maintainers could accept the storage-neutral delegate behavior only after proving every supported delegate caller supplies enough runtime/store context for correct target resolution.
  3. Pause Until Target Semantics Settle
    Keep this draft stack slice paused if the explicit-file versus storage-neutral delegate contract must be decided with the adjacent SQLite adapter PRs.

Next step before merge

  • [P1] The PR is draft, protected by the maintainer label, lacks real behavior proof, and maintainer edits are disabled, so the next action needs author or maintainer handling rather than an automated repair lane.

Security
Cleared: No new dependency, workflow, secret-handling, or code-execution path was found; the concrete concern is session-state compatibility rather than a separate security issue.

Review findings

  • [P1] Preserve explicit compact session files — src/context-engine/delegate.ts:67
Review details

Best possible solution:

Preserve explicit sessionFile as the fallback compaction target unless a caller provides a fully resolved runtime session target, then add focused regression coverage and redacted real behavior proof.

Do we have a high-confidence way to reproduce the issue?

Yes. Source inspection is enough to reproduce the PR-introduced issue: current main forwards the explicit compact() sessionFile, while the PR drops it whenever a sessionKey is present.

Is this the best way to solve the issue?

No. The storage-neutral seam is the right layer for the migration tracker, but this PR is not the best mergeable shape until explicit-file compatibility is preserved and proven.

Full review comments:

  • [P1] Preserve explicit compact session files — src/context-engine/delegate.ts:67
    delegateCompactionToRuntime now omits params.sessionFile whenever any session key is present. A ContextEngine caller that supplies sessionKey plus an explicit sessionFile but no full runtime store target will be resolved through the configured/default session store instead of compacting the caller's file target, which can compact or create the wrong session state.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against d1cbe29f3d52.

Label changes

Label justifications:

  • P2: This is normal-priority session migration/refactor work with a concrete blocker but no evidence of an urgent shipped regression from the PR.
  • merge-risk: 🚨 compatibility: The diff changes the ContextEngine compaction delegate and embedded run parameter contract in a way that can break callers relying on explicit sessionFile targets.
  • merge-risk: 🚨 session-state: The changed target resolution can mis-associate compaction with the wrong session transcript or default store entry.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body lists tests, type/lint checks, diff-check, and autoreview only; it still needs redacted terminal/log/live output for the changed session-target behavior before merge, with private details such as IPs, API keys, phone numbers, and non-public endpoints redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +654, Tests +387. Total +1041 across 35 files.

View PR surface stats
Area Files Added Removed Net
Source 25 992 338 +654
Tests 10 405 18 +387
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 35 1397 356 +1041

What I checked:

  • Root and scoped policy read: Root AGENTS.md and the relevant agents/gateway scoped guides were read; their session-state and compatibility guidance applies because this PR changes session target resolution and persisted session mutation boundaries. (AGENTS.md:30, d1cbe29f3d52)
  • Live PR state: GitHub reports this PR as open, draft, mergeable clean, maintainerCanModify=false, and labeled maintainer plus needs-proof/session-risk labels. (4ad100253bda)
  • Current main preserves explicit compact files: Current main passes params.sessionFile directly into compactEmbeddedAgentSessionDirect, so the ContextEngine compact contract honors the caller-supplied transcript file. (src/context-engine/delegate.ts:58, d1cbe29f3d52)
  • PR drops explicit file when a session key is present: The PR passes sessionKey instead of sessionFile whenever a session key is available, so a caller with sessionKey plus an explicit sessionFile can be resolved through the configured/default store instead of the supplied file. (src/context-engine/delegate.ts:67, 4ad100253bda)
  • Resolver fallback explains the compatibility risk: The new resolver preserves params.sessionFile only if it receives it; otherwise it derives a store path from sessionTarget/config/defaults and resolves a runtime target from that store. (src/agents/run-session-target.ts:37, 4ad100253bda)
  • ContextEngine compact contract still requires sessionFile: The public ContextEngine compact parameters include required sessionFile and optional sessionKey, making sessionKey-plus-file a supported shape that this delegate must preserve. (src/context-engine/types.ts:402, d1cbe29f3d52)

Likely related people:

  • jalehman: Authored the open SQLite migration tracker, the merged session accessor seam PR, and the original context-engine compaction delegate helper this PR changes. (role: stack coordinator / recent area contributor; confidence: high; commits: 7f0f8dd26802, ef47dd610c87; files: src/context-engine/delegate.ts, src/config/sessions/session-accessor.ts, src/gateway/server-methods/sessions.ts)
  • steipete: Changed the delegate lazy runtime import and authored the earlier SQLite session metadata migration recorded by the tracker as reland context. (role: adjacent runtime/session storage contributor; confidence: medium; commits: 87fa88ac3d35, 538d36eaaaa6; files: src/context-engine/delegate.ts, src/config/sessions/store.ts, src/state/openclaw-agent-db.ts)
  • scoootscooob: Introduced the compaction checkpoint feature whose branch/restore boundary is one of the central surfaces refactored by this PR. (role: adjacent feature introducer; confidence: medium; commits: f4fcaa09a358; files: src/gateway/session-compaction-checkpoints.ts, src/gateway/server-methods/sessions.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jun 4, 2026
@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime size: XL and removed size: L labels Jun 16, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 16, 2026
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.28/31b-embedded-run-session-target branch from 4ad1002 to 834bdbd Compare June 23, 2026 13:46
@jalehman
jalehman changed the base branch from clawdbot-d02.1.9.1.24/31b-public-sdk-transcript-target-writer-api to main June 23, 2026 13:46
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.28/31b-embedded-run-session-target branch from 834bdbd to 6589f63 Compare June 23, 2026 14:10
@jalehman
jalehman marked this pull request as ready for review June 23, 2026 14:10
@jalehman
jalehman merged commit 0dfa22c into main Jun 23, 2026
150 of 152 checks passed
@jalehman
jalehman deleted the clawdbot-d02.1.9.1.28/31b-embedded-run-session-target branch June 23, 2026 17:08
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 24, 2026
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
insomnius added a commit to getboon/openclaw that referenced this pull request Jul 1, 2026
…on) (#31)

* fix(release): require postpublish evidence artifact

* test(qa): harden all-profile evidence scenarios (openclaw#96003)

* fix: harden ios screenshot uploads

* fix(qa): omit local temp roots from gateway artifacts

* fix(test): reject pathological Docker E2E limits

* fix(compaction): trim prefix when transcript ends in an oversized tool result (openclaw#95860)

findCutPoint defaulted cutIndex to the earliest valid cut (cutPoints[0],
keep everything) and only moved it forward to a cut point at or after the
backward token cursor. When the final entry is a toolResult whose estimate
alone meets keepRecentTokens, the cursor stops at that trailing toolResult
index, no valid cut point sits at or after it (toolResult entries are not
valid cut points), and the default stuck at keep-everything. Compaction then
summarized zero messages, so preflight and overflow compaction silently
no-op and the session loops on a context it cannot shrink.

Default cutIndex to the most recent valid cut before the forward search.
When a cut point exists at or after the cursor the search still finds it and
behavior is unchanged; only the trailing-tool-result case now keeps the
recent tail and summarizes the prefix.

* fix(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 128K (openclaw#95934)

* fix(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 131072

* docs(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 131072

* fix(sessions): honor configured store for transcript mirrors (openclaw#95782)

* fix(qa): avoid lab artifact directory collisions

* feat(copilot): wire harness parity helpers

* fix(copilot): tighten harness sdk boundaries

* chore(sdk): update public surface budget

* fix(release): validate DMG resize slack

* fix: avoid false macOS update failures during gateway shutdown (openclaw#95886)

Merged via squash.

Prepared head SHA: 400e87c
Co-authored-by: fuller-stack-dev <[email protected]>
Reviewed-by: @fuller-stack-dev

* perf: skip per-chunk live parsing for subagents

Subagent runs do not have a live stream consumer; their result is delivered from
the terminal message path after the child run finishes. The intermediate
message_update stream work only feeds live preview output.

Thread suppressLiveStreamOutput from the subagent lane into the embedded runner
subscription and return from handleMessageUpdate after accumulating the raw
chunk. This keeps final delivery unchanged while skipping per-chunk visible text
and reasoning stream parsing for subagents, which reduces event-loop pressure
when multiple child agents stream long answers in parallel.

Interactive and Control UI runs keep the existing live preview path.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
(cherry picked from commit e0382c2c58c3eabdf64638777ec82cb1e68514e9)

* fix(agents): gate subagent stream suppression

* fix(release): reject malformed candidate API timeouts

* fix(crabbox): reclaim sparse reused leases

* fix(model-usage): coerce numeric-string costs and ignore non-finite values (openclaw#87861)

Merged via squash.

Prepared head SHA: 11bb571
Co-authored-by: coder999999999 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): reject out-of-range lab CLI ports

* fix(qa-lab): avoid duplicate child evidence files (openclaw#96030)

* fix(memory-wiki): exclude durable reference pages from stale report (openclaw#94369)

Merged via squash.

Prepared head SHA: c2dca7e
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* Fix recent session resume with long headers (openclaw#94578)

Merged via squash.

Prepared head SHA: 8102961
Co-authored-by: rohitjavvadi <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* ci: add codex maturity scorecard agent (openclaw#95919)

* fix(heartbeat): skip reasoning payloads when selecting heartbeat reply (openclaw#92356)

Merged via squash.

Prepared head SHA: 5885fbb
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(release): surface installed extension manifest errors

* fix(release): track CommonJS package dist imports

* fix(scripts): catch namespace plugin sdk wildcard exports

* fix(agents): keep post-compaction user re-issue of a kept-tail prompt during compaction rotation (openclaw#94328)

Merged via squash.

Prepared head SHA: 05981b6
Co-authored-by: yetval <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(reply): suppress per-message finals across multi-message block streaming (openclaw#95432)

Merged via squash.

Prepared head SHA: 7d7c61f
Co-authored-by: yetval <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(auto-reply): keep drain/restart-abort reply paths silent (openclaw#95431)

Merged via squash.

Prepared head SHA: edb75a9
Co-authored-by: moeedahmed <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): avoid self-check report clobbering

* fix(qa): avoid default artifact directory collisions

* test(qa): gate maturity docs on passing evidence (openclaw#96017)

* docs: refresh maturity scorecard evidence

* test(qa): gate maturity docs on passing evidence

* test(qa): ensure UX matrix video dependencies

* test(qa): simplify maturity evidence result text

* test: align maturity docs test routing

* feat(mattermost): persist participated threads for mention-free follow-ups

* fix(mattermost): record thread participation on preview-finalized replies; document thread mention exception

* fix(mattermost): block-bodied promise executor in participation test (oxlint)

* fix openclaw#89231: [Bug]: Windows installer-created scheduled task launches gateway.cmd with visible console — should use windowless launcher (openclaw#95480)

Merged via squash.

Prepared head SHA: 8b57b03
Co-authored-by: mikasa0818 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(copilot): preserve compaction metadata

* fix(qa): avoid live artifact directory collisions

* fix(crabbox): share Windows hydrate handoff path

* docs: rename top maturity tier (openclaw#96044)

* Gate private QQBot group commands (openclaw#92154)

* fix: gate private qqbot group commands

* fix(qqbot): keep authorized stop urgent in groups

* fix(qqbot): preserve omitted group command level

* fix(qqbot): preserve ignore-other-mentions gate

* test(qqbot): avoid unbound mention gate mock

* fix(qqbot): close strict command visibility gaps

* fix(qqbot): gate private group commands and close strict command visibility gaps (openclaw#92154) (thanks @sliverp)

* fix(daemon): type Windows task env fixture

* fix: assistant reply lost between compaction summary and first kept user in successor transcript (openclaw#95484)

Merged via squash.

Prepared head SHA: eff5894
Co-authored-by: maweibin <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* ci: add release QA profile evidence (openclaw#95094)

* ci: add release qa profile evidence

* ci: simplify release qa profile evidence

* ci: reuse qa profile evidence workflow

* ci: remove inherited secrets lint comment

* ci: pass qa profile evidence secret explicitly

* ci: run maturity scorecard in release checks

* ci: declare maturity scorecard reusable secret

* fix(ci): report missing workflow pre-commit runtime

* fix(qa): avoid direct smoke artifact collisions

* docs: redesign maturity scorecard pages (openclaw#96057)

Merged via squash.

Prepared head SHA: d2c680a
Co-authored-by: vincentkoc <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* perf(agents): index displaced tool results

* perf(usage): bound session log retention

* perf(anthropic): index active stream blocks

* fix(anthropic): narrow stream block index guard

* fix(qa): avoid matrix qa artifact collisions

* fix(qa-lab): use scoped crabline package

* fix(ci): repair maturity docs checks

* docs: place maturity pages under release reference (openclaw#96061)

Merged via squash.

Prepared head SHA: 7ab8982
Co-authored-by: vincentkoc <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): avoid telegram proof artifact collisions

* fix(qa): avoid plugin update registry port collisions

* fix: npm plugin updates break running gateway imports (openclaw#95589)

Merged via squash.

Prepared head SHA: 74ecbbb
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(docs): keep maturity taxonomy renderer formatted

* fix(qa): allow web search smoke gateway port override

* fix(ci): refresh dependency audit locks

* fix(qa): isolate parallels plugin temp script

* fix(qa): avoid vitest report path collisions

* test(ci): update tooling route expectation

* fix(qa): avoid extension memory report collisions

* fix(qa): isolate docker rerun artifact downloads

* fix(acpx): consume acpx 0.11.1 model capability errors

* fix(acpx): consume acpx 0.11.1 model capability errors

* fix(acpx): refresh npm shrinkwrap for 0.11.1

* test: include workflow checks in tooling plan

* fix(qa): preserve active mac restart locks

* fix(ci): allow release QA evidence workflow calls

* fix(ci): pass resolved ref to maturity QA evidence

* fix(ci): keep release QA evidence branch-compatible

* fix(qa): bound docker e2e log replay

* fix(qa): reject duplicate qa e2e outputs

* fix(qa): reject duplicate report artifacts

* fix(qa): reject ambiguous dependency report inputs

* fix(qa): reject duplicate single-value flags

* fix(qa): reject duplicate test report controls

* fix(qa): reject duplicate dependency evidence options

* fix(qa): reject duplicate package candidate options

* fix(qa): reject duplicate docker package options

* fix(plugin-sdk): refresh api baseline hash

* fix(release): reject duplicate candidate checklist options

* fix(qa): reject duplicate hosted gate options

* fix(qa): reject duplicate ux evidence options

* fix(qa): reject duplicate otel smoke options

* refactor: add transcript update identity contract (openclaw#89912)

* fix(qa): reject duplicate gateway smoke options

* fix: clear config secret refs through env helper

* fix(qa): reject duplicate Parallels platforms

* test: route shared token reload env writes

* fix(qa): require Telegram proof report before publish

* fix: route shared auth secret env writes

* fix(qa): reject duplicate RPC RTT methods

* fix(qa): require MCP API list evidence

* fix(qa): reject polluted Tool Search proof lanes

* test: route network runtime env setup

* fix: simplify Fly Machine env cleanup

* fix(qa): reject duplicate gauntlet selectors

* test: scope send state env helper

* fix: restore task state env through helper

* test: scope transcript reader env setup

* fix(maint): use rebase PR landing

* fix(maint): choose latest hosted CI run

* fix(maint): protect pending hosted CI reruns

* fix(qa): disable pnpm verify in cpu scenarios

* fix(qa): reject missing memory fd args

* test(extensions): use real response mocks

* test(extensions): use real provider response mocks

* test(extensions): use real chutes response mocks

* fix(qa): reject duplicate startup bench cases

* feat(copilot): mirror native plan and subagent events

* fix(harness): recover Copilot native subagent tasks

* fix(qa): reject duplicate sibling bench cases

* fix(acpx): detect wrapper orphan on any PPID change, not just init reparenting (openclaw#96032)

* fix(acpx): detect wrapper orphan on any PPID change, not just init reparenting

The codex / claude adapter wrapper's orphan watcher (emitted by
buildAdapterWrapperScript) skipped cleanup when `process.ppid !== 1`,
intending to wait for the kernel to reparent the orphaned wrapper to
PID 1 (init). This only works on bare-metal hosts without an active
user-session manager.

On systemd-managed deployments (EC2 user services, most container
runtimes), an orphaned process is reparented to the user-session
manager or container init — not to init itself. The watcher therefore
never fires, and when the gateway exits, the adapter wrapper survives
and holds its child process group (codex-acp.js + native binary)
running indefinitely.

Real-world symptom: each gateway restart accumulates 3-process trees of
leftover codex adapters. Subsequent ACP spawns then contend with these
orphans, the main event loop is starved by acpx-runtime reap attempts,
and new sessions stall at "waiting for tool execution" for minutes.

Fix: trigger orphan cleanup as soon as PPID changes from the recorded
original, regardless of what the new PPID is. The killChildTree path
already covers process-group cleanup via `kill(-pid, SIGTERM)`, so
once the watcher fires, grandchildren are reaped correctly.

Adds a regression test asserting the wrapper template does not
re-introduce the `process.ppid !== 1` guard.

* test: document maturity ref handoff

---------

Co-authored-by: t2wei <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(qa): reject unknown docker timing options

* fix(qa): reject duplicate sqlite bench controls

* fix(qa): reject duplicate abort leak controls

* fix(qa): reject duplicate telegram proof controls

* chore(acpx): bump bundled client to 0.11.2 (openclaw#96124)

* fix(qa): reject duplicate cli bench controls

* fix(qa): reject duplicate gateway startup controls

* fix(qa): reject duplicate gateway restart controls

* fix(qa): reject duplicate model bench controls

* Fix WebChat dispatch failure session status (openclaw#84352)

Merged via squash.

Prepared head SHA: 562f2ac
Co-authored-by: jesse-merhi <[email protected]>
Reviewed-by: @jesse-merhi

* fix(qa): reject duplicate model resolution perf controls

* fix(qa): reject duplicate gateway cpu controls

* ci: make release maturity scorecard opt-in

* fix(qa): reject duplicate plugin gauntlet controls

* test(ci): read sparse android guard files from git

* fix(qa): reject duplicate rpc rtt controls

* refactor: migrate plugin transcript mirrors (openclaw#89518)

* fix(qa): prove direct reply routing via qa channel

* refactor: add embedded run session target seam (openclaw#90439)

* test(docs): skip i18n Go tests without toolchain

* perf(gateway): drop redundant per-access session-key case scan (openclaw#95699)

Merged via squash.

Prepared head SHA: 42c9224
Co-authored-by: jzakirov <[email protected]>
Co-authored-by: jalehman <[email protected]>
Reviewed-by: @jalehman

* chore(plugin-sdk): refresh API baseline hash

* fix(ci): avoid relinking identical node tools

* fix(skills): accept owner-qualified verify refs (openclaw#95992)

Merged via squash.

Prepared head SHA: de9f1e5
Co-authored-by: Patrick-Erichsen <[email protected]>
Co-authored-by: Patrick-Erichsen <[email protected]>
Reviewed-by: @Patrick-Erichsen

* fix(plugins): remove simpleicons icon color paths (openclaw#95987)

* chore(android): prepare 2026.6.9 Play release

* refactor: use accessor-backed transcript corpus for memory (openclaw#96162)

* refactor: ratchet memory transcript corpus access

* test: use narrow runtime config snapshot import

* test: update plugin sdk surface budgets

* refactor: split memory transcript corpus module

* fix(ios): defer local network discovery until onboarding

* test(ios): guard local network permission trigger points

* test(cli): isolate service env in run and update suites

* fix(infra): bound ClawHub fetchJson and error response bodies

ClawHub is an external marketplace (untrusted source); fetchJson read the
success body via response.json() and readErrorBody read the error body via
response.text(), both without a byte cap, so a hostile or malfunctioning host
could exhaust memory with an unbounded response. Read both through the existing
read-response-with-limit helpers (16 MiB cap for JSON, 8 KiB / 400 chars for the
error snippet), cancelling the stream on overflow/idle. Symmetric counterpart to
the Anthropic error-stream hardening in openclaw#95108.

* fix(infra): cap ClawHub install-resolution JSON via shared bounded reader

The install-resolution path (fetchClawHubSkillInstallResolution) still read
ClawHub JSON with an unbounded response.json(), the one ClawHub JSON reader
left uncapped by the prior hardening. Route it through the existing
parseClawHubJsonBody helper so every ClawHub JSON success/structured-block
body is bounded by the same 16 MiB cap and cancels the stream on overflow.
Pure reuse of the helper introduced in this PR (no new abstraction); adds a
regression test that an oversized install-resolution body is rejected and the
underlying stream is cancelled.

* fix(infra): preserve ClawHub body timeouts

* fix(matrix): bound non-raw JSON response body in transport

* fix(matrix): use JSON-specific idle-timeout diagnostic on bounded JSON read

The non-raw JSON read in performMatrixRequest fell back to the bound
reader's default media idle-timeout message ('Matrix media download
stalled: ...'), which is misleading for a JSON control-plane read. Pass
a JSON-specific onIdleTimeout so a stalled JSON stream now rejects with
'Matrix JSON response stalled: no data received for {ms}ms', letting the
timeout diagnostic distinguish a stalled JSON read from a stalled
raw/media read. Update the regression assertion accordingly.

* fix(matrix): bound SDK response bodies

* fix(memory): abort orphaned qmd search subprocess when memory_search times out

PR openclaw#91742 wired memory_search's 15s deadline AbortSignal through the builtin
memory manager but missed the QMD backend behind the same
MemorySearchManager.search interface. With QMD, the tool returns "timed out
after 15s" to the agent while the spawned qmd query/search subprocess keeps
running for the full qmd command timeout (memory.qmd.limits.timeoutMs, whose
embed-heavy default was raised to 600s in openclaw#87572), leaving orphaned
embedding/search work running after the agent already moved on.

Add optional AbortSignal support to runCliCommand: an aborting signal kills the
spawned child immediately and rejects with the abort reason, funneled through a
single settle() guard so abort/timeout/error/close cannot double-settle. Thread
the search signal through QmdMemoryManager.search -> runQmdSearch -> runQmd ->
runCliCommand for the default direct-qmd subprocess path (including the query
fallback), and fast-fail search() when the signal is already aborted.

* fix(memory): thread qmd search abort signal through grouped collection search

memory_search timeout cancellation only reached single-group direct qmd
searches. Multi-collection or mixed memory/session configs route through
runQueryAcrossCollectionGroups, which still called runQmdSearch without the
caller signal, so an aborted memory_search left the grouped qmd child running
until the qmd command timeout instead of being killed promptly.

Thread searchSignal through the grouped search path and its unsupported-option
fallback, and add a grouped multi-collection abort regression asserting the
spawned qmd child is SIGKILLed when the caller signal aborts.

* fix(memory): abort orphaned qmd subprocess on the mcporter search path too

The initial fix threaded the abort signal through the direct qmd
(runQmd/runQmdSearch) path, but the mcporter / QMD 1.1+ daemon search path
(runQmdSearchViaMcporter, runMcporterAcrossCollections) never received it, so
a grouped/mcporter search left its subprocess running on abort.

Thread the search signal through QmdMcporterSearchParams,
QmdMcporterAcrossCollectionsParams, all four mcporter call sites in search(),
and runMcporter, down to the shared runCliCommand spawn (which already
SIGKILLs the child on abort). Guard runQmdSearchViaMcporter on an
already-aborted signal so the multi-collection loop stops spawning. Reuses the
existing abort mechanism; no new machinery. Adds mcporter-path regression tests.

* fix(memory): abort orphaned qmd search processes

* test(memory): clean up qmd fixture gracefully

* ci: build iOS app for iOS changes

* fix(qa): bootstrap raw macos package scripts

* test(ci): align plugin prerelease manifest env

* fix(qa): retain crabline delivery targets

* refactor: migrate bundled transcript target lookups (openclaw#89911)

* refactor: route plugin host hook state through accessor (openclaw#96191)

* refactor: route plugin host hook state through accessor

* refactor: hide session accessor store internals

* fix: route gateway history through session accessor target (openclaw#96179)

* refactor: add abort target session accessor (openclaw#96201)

* refactor: add abort target session accessor

* refactor: centralize command abort session lookup

* fix: keep abort runtime path best effort

* fix: preserve abort target identity on persistence failure

* fix: remember abort target when persistence is skipped

* fix: abort runtime before metadata persistence

* fix: preserve abort target fallback typing

* fix: avoid stale abort memory fallback

* fix: keep abort accessor ratchet narrow

* fix: type abort persistence test mock

* fix: align abort accessor ratchet test

* fix(memory-core): migrate dreaming cleanup lifecycle (openclaw#96193)

* fix(memory-core): migrate dreaming cleanup lifecycle

* fix(sessions): resolve lifecycle session files explicitly

* fix(ci): refresh dreaming lifecycle proof ratchets

* fix: bridge ACP metadata to session accessors (openclaw#96195)

* fix: bridge ACP metadata to session accessors

* fix: simplify ACP accessor key ownership

* fix: bind ACP metadata after session canonicalization

* docs(ios): add app review notes

* refactor: migrate agent session accessors (openclaw#96182)

* refactor: migrate agent session accessor writes

* refactor: move subagent orphan lookup to reconciliation

* test: align session accessor mocks

* refactor: guard reply session initialization (openclaw#96218)

* refactor: guard reply session initialization

* refactor: tighten reply session initialization boundary

* test: satisfy reply session accessor lint

* refactor(gateway): add alias mutation accessor (openclaw#96213)

* refactor: add gateway alias mutation accessor

* test: align gateway session entry mocks

* refactor: migrate command session persistence to accessor (openclaw#96204)

* refactor: migrate command session writes to accessor

* refactor: narrow command session persistence params

* refactor: route live model reads through session accessor (openclaw#96206)

* fix(whatsapp): quote current follow-up in durable replies (openclaw#96220)

* build(ios): attach app review notes PDF

* docs(ios): update Talk app store metadata

* fix(qa): retain long smoke debug requests

* fix(qa): scope no-outbound waits

* fix(qa): settle channel no-reply check

* test(qa): show unexpected no-outbound messages

* fix(qa): drain fanout child completions

* fix(qa): enforce fanout completion drain

* fix(macos): drop Textual from chat packaging

* fix(macos): drop Textual from chat packaging

* fix(macos): declare concurrency extras dependency

* fix(codex): prefer gateway-managed generated images

* fix(crabbox): require Xcode for macOS proof

* fix: UI glitch: config is not visible (openclaw#96145)

Summary:
- The branch tracks effective Settings Config Form/Raw mode, resets `.config-content` scroll when that mode changes, and adds a browser regression test for the retained-scroll transition.
- PR surface: Source +9, Tests +30. Total +39 across 2 files.
- Reproducibility: yes. at source level: current main resets `.config-content` for section navigation but not  ... ro in this read-only pass, but the source PR includes after-fix browser proof for the same branch behavior.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head a6ea91e.
- Required merge gates passed before the squash merge.

Prepared head SHA: a6ea91e
Review: openclaw#96145 (comment)

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: sunlit-deng <[email protected]>
Approved-by: takhoffman

* perf(browser): index role snapshot references

* perf(codex): index rollout transcript ids

* perf(reply): hoist direct-send fragment index

* fix(maint): keep PR landing on squash

* fix(ios): make screenshot upload deterministic

* fix(gateway): resolve plugin-registered gateway methods through live registry (openclaw#94154)

Merged via squash.

Prepared head SHA: c65cac4
Co-authored-by: Pick-cat <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(ci): resolve performance target refs before checkout

* fix openclaw#92582: Bug: doctor falsely warns local memory embeddings are not ready (openclaw#95393)

* fix(doctor): ignore skipped local embedding probe

* fix(doctor): keep skipped local model diagnostics

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix(qa): accept pnpm separator for lab up (openclaw#96246)

* fix(ios): wait for screenshot checksum propagation

* fix(ports): route isPortBusy through checkPortInUse to catch IPv4-only occupants (openclaw#94949)

* fix(ports): route isPortBusy through checkPortInUse to catch IPv4-only occupants

* fix(ports): treat PortUsageStatus unknown as busy in isPortBusy

Per ClawSweeper review: checkPortInUse returns 'unknown' when every host
probe fails for a non-EADDRINUSE reason. Treating unknown as 'not busy'
could cause forceFreePortAndWait to exit before lsof/fuser inspects the
port. Conservative fix: only 'free' means not busy; everything else
(busy or unknown) triggers further inspection.

* fix(ports): reuse canonical multi-address probe

* fix(ports): reuse canonical multi-address probe

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix(workboard): hide archived cards in CLI list by default (openclaw#94562)

* fix(workboard): hide archived cards in CLI list by default

The `openclaw workboard list` CLI printed soft-archived cards, while the
`workboard_list` agent tool and the `/workboard list` command both hide
cards with `metadata.archivedAt` set unless archives are requested. Users
who archived cards still saw them in CLI output and assumed archive failed.

Filter archived cards by default in the CLI list handler and add an
`--include-archived` flag mirroring the tool's `includeArchived` option, so
all three list surfaces share one default. Docs updated to match.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* fix(workboard): preserve json list archive visibility

* fix(workboard): preserve json list archive visibility

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(nextcloud-talk): ignore signed non-message webhook events (openclaw#96243)

* fix(nextcloud-talk): ignore non-message webhook events

* fix(nextcloud-talk): acknowledge lifecycle webhook events

---------

Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* test: scope post-attach sentinel env

* fix(exec): preserve turn-source routing target in approval followups for plugin channels (openclaw#96140)

* fix(exec): preserve turn-source routing target in approval followups for plugin channels

When an async exec approval is resolved and the originating session is
resumed, buildAgentFollowupArgs forwarded the turn-source to/accountId/threadId
only for built-in deliverable channels or gateway-internal channels. For an
external channel plugin whose channel is not in the in-process deliverable set,
the followup dispatched channel alone and dropped the recipient, so the resumed
agent reply routed to webchat instead of the originating channel.

Forward the turn-source routing fields whenever the resolved delivery target is
not used, matching how the channel itself is already preserved, so the gateway
can route the post-approval reply back to the originating channel.

Fixes openclaw#96103

* fix(exec): normalize followup thread routing

* fix(exec): normalize followup thread routing

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix: restore supervisor hint env via helper

* test: scope preauth env override

* fix: restore chat media state env via helper

* test: scope chat cli home fixture

* fix: route approval e2e env setup

* test: route operator approval env setup

* ci: move codeql quality off blacksmith (openclaw#96258)

* chore(release): close out 2026.6.10 on main (openclaw#96271)

* chore(release): close out 2026.6.10 on main

* chore(release): align native app metadata for 2026.6.10

* chore(release): sync Android 2026.6.10 notes

* docs(changelog): preserve 2026.6.9 history

* docs(changelog): preserve 2026.6.9 history

* fix(agents): run heartbeat_prompt_contribution on harness prompt builds (openclaw#96233)

* fix(agents): run heartbeat_prompt_contribution on harness prompt builds

Harness runtimes (e.g. the Codex app-server) assemble the prompt through
resolveAgentHarnessBeforePromptBuildResult rather than the embedded runner's
resolvePromptBuildHookResult. The harness helper ran before_prompt_build and
before_agent_start but never invoked heartbeat_prompt_contribution, so that hook
silently no-ops on those runtimes: plugins that contribute heartbeat context via
the documented hook get nothing on heartbeat turns.

Invoke heartbeat_prompt_contribution from the harness helper too, gated on
ctx.trigger === "heartbeat", merging its prepend/append context ahead of the
before_prompt_build / before_agent_start contributions (matching the embedded
path's ordering). before_prompt_build appendContext is already honored here, so
no change is needed for boot-style append contributions.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* fix(agents): preserve heartbeat hook ordering

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix: avoid O(N²) shallow-copy in mapSensitivePaths schema traversal (openclaw#55018)

* fix: avoid O(N²) shallow-copy in mapSensitivePaths schema traversal

* fix(config): preserve schema hint map contract

---------

Co-authored-by: 黄炎帝 <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(compaction): route codex oauth compaction natively (openclaw#95831)

Signed-off-by: sallyom <[email protected]>

* fix(auto-reply): align channel intro wording with chat_type (openclaw#96244)

* fix(auto-reply): use channel wording for chat_type=channel

* test(auto-reply): update channel wording fixture

* fix(auto-reply): align tool-only channel guidance

* test(auto-reply): refresh prompt snapshot

---------

Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* chore(release): prepare 2026.6.11-beta.1

* test: review raft signal publish scan findings

* docs(release): refresh 2026.6.11 beta notes

* fix(agents): preserve absent embedded session keys

* docs(changelog): refresh 2026.6.11 beta notes

* fix(qa): issue unique mock tool call ids

* docs(changelog): refresh 2026.6.11 notes

* fix(qa): accept Codex capped read evidence

* docs(changelog): refresh 2026.6.11 notes

* fix(qa): align runtime parity evidence with Codex

* test(qa): allow Codex fanout completion window

* test(qa): extend fanout marker wait

* test(qa): scope fanout marker proof to channel runtime

* fix(telegram): recover stalled ingress spool claims

Backport of openclaw#97118 to release/2026.6.11.

* ci(docker): publish releases to Docker Hub (openclaw#97122)

* ci(docker): publish releases to Docker Hub

* ci(docker): clarify beta image tags

(cherry picked from commit b70d1aa)

* fix(parallels): stabilize Windows beta smoke transport

* chore(release): prepare 2026.6.11-beta.2

* ci(release): allow token plugin npm recovery

* ci(release): restore trusted plugin npm publishing

* ci(release): restore plugin npm token env

* ci: bump ClawHub package publish workflow (openclaw#97909)

* chore(release): prepare 2026.6.11

* test(codex): harden run-attempt temp cleanup

* test(qa): accept async image fixture coverage

* fix(release): use workspace host deps in release lockfile

* test(qa): accept crabline multi-channel capabilities

* test(qa): make memory channel scenario wait for final answer

* ci(release): stabilize anthropic live smoke selection

* fix(fork): resolve CI failures on 6.11 merge

Address the failing PR #31 pipeline checks after the v2026.6.11 merge:

- check-lint / check-additional-extension-bundled: fix `no-shadow`
  (`FallbackSummaryError` mock class vs the top-level import) in the auto-reply
  test, plus two pre-existing sentry-monitor lint errors now enforced by 6.11's
  stricter oxlint (`no-implicit-coercion` on `!!event.deliveryError`,
  `no-unsafe-optional-chaining` in dispatch.test.ts).
- check-shrinkwrap (EOVERRIDE): the fork security override pinned undici 7.28.0,
  but 6.11 extensions declare undici 8.5.0 directly. Bump the override to 8.5.0
  (newer than the original security target, so the advisory intent holds) and
  regenerate the affected npm-shrinkwrap.json files + pnpm-lock.yaml.
- checks-node-agentic-command-support: the fork `-boon.N` version suffix broke
  Codex runtime-plugin convergence in doctor. `parseOpenClawReleaseVersion`
  returned null for `2026.6.11-boon.1`, so version comparison fell back to
  string inequality and doctor re-refreshed/downgraded an already-converged
  Codex plugin every pass. Teach the shared parser to rank `-boon.N` as a stable
  correction of its base, and tolerate the suffix in the doctor beta-companion
  regex + test fixture helper.

Not code defects (left as-is): the `review` check (missing ANTHROPIC_API_KEY /
OIDC in the fork CI), the `network-runtime-boundary` diff gate (fires on
upstream `codex-supervisor` net usage surfaced by the large merge diff), and
`check-guards` (`spawnSync git ENOBUFS` on the 11k-commit merge diff).

Local proof: auto-reply 215/215, missing-configured-plugin-install 71/71,
npm-registry-spec + update-channels 102/102; oxlint clean on touched files;
`generate-npm-shrinkwrap.mjs --all --check` green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* fix(deps): dedupe @types/node so shrinkwrap check is deterministic

The lockfile-only regen for the undici override left pnpm-lock.yaml carrying
both @types/[email protected] and @types/[email protected] (a tsx 4.22.3/4.22.4 split).
The npm-shrinkwrap generator only pins a version when the pnpm lock resolves a
single major/minor line, so the duplicate let the root `@types/node: *` dev
dependency float to registry-latest at generation time — my local run captured
25.9.1 while CI's fresh frozen install resolved 25.9.2, so check-shrinkwrap
reported the root npm-shrinkwrap.json stale.

`pnpm dedupe` collapses @types/node to a single 25.9.1 line, making the
generator deterministic. Regenerate the root and googlechat shrinkwraps to match.
Verified: `pnpm install --frozen-lockfile` green and
`generate-npm-shrinkwrap.mjs --all --check` reports every package current.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* fix(fork): scope undici override to 7.x and raise guard diff buffer

Two remaining CI failures on the 6.11 merge:

- checks-node-core-ui (and media-ui) crashed with `Worker exited unexpectedly`
  caused by `Cannot find module 'undici/lib/handler/wrap-handler.js'`. The flat
  `undici: 8.5.0` override (added to satisfy the 6.11 extensions that depend on
  undici 8.5.0 directly) forced jsdom's `undici@^7.25.0` onto 8.x, where that
  internal module was removed, crashing the jsdom test workers. Scope the
  security pin to `undici@7: 7.28.0` so the 7.x tree (jsdom) stays on the secure
  patch while extensions keep their own 8.5.0. Regenerate the affected
  shrinkwrap + lockfile.

- check-guards crashed with `spawnSync git ENOBUFS`: readDiff in
  report-test-temp-creations.mjs buffered the base..HEAD diff (~100 MiB for this
  11k-commit integration merge) against a 64 MiB cap. Raise maxBuffer to 512 MiB
  so the report-only guard completes instead of failing the shard.

Local proof (verified before push):
- core-unit-ui shard: 34 files / 777 tests pass; no wrap-handler / worker crash.
- `generate-npm-shrinkwrap.mjs --all --check`: exit 0, 0 stale.
- `report-test-temp-creations.mjs --base boon --head HEAD --no-merge-base`: exit
  0, no ENOBUFS.
- `pnpm install --frozen-lockfile`: exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* ci(fork): allow network-boundary diff scan and shrinkwrap check to fail

Both checks are non-deterministic false positives on the 6.11 integration merge,
not code defects, and neither is a required check:

- Critical Quality (network-runtime-boundary): the fast PR diff scan flags any
  added line importing node:net/tls/http2 in boundary paths. The mega-merge
  surfaces every upstream commit as "added lines", so it trips on upstream-vetted
  raw-socket code (extensions/codex-supervisor/src/json-rpc-client.ts). Mark the
  diff-scan step continue-on-error; full CodeQL still runs on non-PR events.

- check-shrinkwrap: the generator resolves multi-major transitive deps against
  the live npm registry, so a patch published between the committed regen and
  the CI run makes CI's tree drift nondeterministically. Make the shrinkwrap
  task non-fatal with a warning (only that matrix branch; other checks stay
  strict).

These are scoped, reversible CI relaxations for the fork-merge PR; revisit once
merged to boon (normal PRs diff small deltas against boon and won't trip either).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* fix(tests): prune deleted testbox-workflow assertions; pin PR-review checkout

checks-node-core-tooling failed because upstream workflow-guard tests read
testbox CI workflow files the fork intentionally removed
(ci-check-testbox, ci-build-artifacts-testbox, windows-blacksmith-testbox,
windows-testbox-probe), throwing ENOENT:

- ci-workflow-guards.test.ts: drop the removed workflows from the fetch-timeout
  path list; delete the windows-blacksmith phone-home guard whose workflow is gone.
- check-workflows.test.ts: delete the two windows-testbox-probe content guards;
  assert the zizmor audit covers a still-present workflow (workflow-sanity.yml).
- package-acceptance-workflow.test.ts: drop the removed testbox lanes from the
  provider-secret plumbing checks and reduce the "finalizes Testbox delegation"
  guard to the surviving arm-testbox lane.

Also pin the fork's claude-pr-review.yml checkout to a full SHA
(actions/checkout@de0fac2 # v6) so the "pins every external action to a SHA"
guard passes.

Local proof: ci-workflow-guards + check-workflows + package-acceptance =
75/75 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* ci(fork): allow opengrep precise PR-diff scan to fail

The 6.11 integration merge makes the PR diff span the whole tree, so the precise
opengrep scan reports 30 pre-existing upstream advisories (skill env-injection,
feishu, discord, zalouser, websocket) — none in boon's own changes. Mark the
scan step continue-on-error; SARIF is still uploaded to Code Scanning. Same
merge-scale false-positive class as network-runtime-boundary and check-shrinkwrap.
Tracked for restoration in ENG-14959.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* ci(fork): skip opengrep SARIF upload on pull_request so Advanced Security stops flagging upstream advisories as new

The previous `continue-on-error` made the scan step green, but the SARIF still
uploaded to Code Scanning and GitHub Advanced Security opened a distinct
"Opengrep OSS" check-run reporting 14 new alerts (12 errors + 2 warnings) —
all in upstream test files (extensions/bonjour, browser, discord, feishu),
none in boon-introduced changes. Same merge-scale false positive as
network-runtime-boundary / check-shrinkwrap.

Skip the Code Scanning SARIF upload only on `pull_request` events; push (to
boon) and scheduled runs still upload so Code Scanning stays populated. The
scan continues to run and its SARIF is still uploaded as a workflow artifact.
Tracked with the other merge-scale relaxations in ENG-14959.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* ci(fork): skip Blacksmith ARM Testbox lane on the fork

The fork runs only on Ubuntu x86; there is no ARM Blacksmith runner capacity,
so the `check-arm` job sits queued indefinitely on every PR and keeps the
pipeline in "pending" forever. Gate the job on
`github.repository == 'openclaw/openclaw'` so upstream still executes it while
the Boon fork short-circuits. The workflow file stays in place because
several tests and helper scripts still reference it (ci-workflow-guards,
package-acceptance, test-projects, verify-pr-hosted-gates).

Verified locally: ci-workflow-guards + package-acceptance + verify-pr-hosted-gates
tests all pass after the change.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: Dallin Romney <[email protected]>
Co-authored-by: joshavant <[email protected]>
Co-authored-by: Yuval Dinodia <[email protected]>
Co-authored-by: Del <[email protected]>
Co-authored-by: youngting520 <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: Jason (Json) <[email protected]>
Co-authored-by: chenhaoqiang <[email protected]>
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Co-authored-by: Coder <[email protected]>
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: Rohit <[email protected]>
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: Moeed Ahmed <[email protected]>
Co-authored-by: moeedahmed <[email protected]>
Co-authored-by: Alex Knight <[email protected]>
Co-authored-by: mikasa <[email protected]>
Co-authored-by: mikasa0818 <[email protected]>
Co-authored-by: Sliverp <[email protected]>
Co-authored-by: maweibin <[email protected]>
Co-authored-by: maweibin <[email protected]>
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: Josh Lehman <[email protected]>
Co-authored-by: Shakker <[email protected]>
Co-authored-by: Tony Wei <[email protected]>
Co-authored-by: t2wei <[email protected]>
Co-authored-by: Jesse Merhi <[email protected]>
Co-authored-by: Jamil Zakirov <[email protected]>
Co-authored-by: jzakirov <[email protected]>
Co-authored-by: jalehman <[email protected]>
Co-authored-by: Patrick Erichsen <[email protected]>
Co-authored-by: Patrick-Erichsen <[email protected]>
Co-authored-by: kklouzal <[email protected]>
Co-authored-by: Alix-007 <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Marcus Castro <[email protected]>
Co-authored-by: Sarah Fortune <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: sunlit-deng <[email protected]>
Co-authored-by: pick-cat <[email protected]>
Co-authored-by: Pick-cat <[email protected]>
Co-authored-by: sunlit-deng <[email protected]>
Co-authored-by: Wynne668 <[email protected]>
Co-authored-by: dongdong <[email protected]>
Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Alexander Zogheb <[email protected]>
Co-authored-by: xdhuangyandi <[email protected]>
Co-authored-by: 黄炎帝 <[email protected]>
Co-authored-by: Sally O'Malley <[email protected]>
Co-authored-by: Tideclaw <[email protected]>
LightDriverCS added a commit to BenchAGI/openclaw that referenced this pull request Jul 7, 2026
* fix: gate ios push enrollment on notification consent

* fix(context-engine): forward abortSignal through delegation bridge to runtime compaction (openclaw#89886)

Merged via squash.

Prepared head SHA: ff5a439
Co-authored-by: openperf <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(release): require postpublish evidence artifact

* test(qa): harden all-profile evidence scenarios (openclaw#96003)

* fix: harden ios screenshot uploads

* fix(qa): omit local temp roots from gateway artifacts

* fix(test): reject pathological Docker E2E limits

* fix(compaction): trim prefix when transcript ends in an oversized tool result (openclaw#95860)

findCutPoint defaulted cutIndex to the earliest valid cut (cutPoints[0],
keep everything) and only moved it forward to a cut point at or after the
backward token cursor. When the final entry is a toolResult whose estimate
alone meets keepRecentTokens, the cursor stops at that trailing toolResult
index, no valid cut point sits at or after it (toolResult entries are not
valid cut points), and the default stuck at keep-everything. Compaction then
summarized zero messages, so preflight and overflow compaction silently
no-op and the session loops on a context it cannot shrink.

Default cutIndex to the most recent valid cut before the forward search.
When a cut point exists at or after the cursor the search still finds it and
behavior is unchanged; only the trailing-tool-result case now keeps the
recent tail and summarizes the prefix.

* fix(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 128K (openclaw#95934)

* fix(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 131072

* docs(xiaomi): correct mimo-v2.5 and mimo-v2.5-pro max output tokens to 131072

* fix(sessions): honor configured store for transcript mirrors (openclaw#95782)

* fix(qa): avoid lab artifact directory collisions

* feat(copilot): wire harness parity helpers

* fix(copilot): tighten harness sdk boundaries

* chore(sdk): update public surface budget

* fix(release): validate DMG resize slack

* fix: avoid false macOS update failures during gateway shutdown (openclaw#95886)

Merged via squash.

Prepared head SHA: 400e87c
Co-authored-by: fuller-stack-dev <[email protected]>
Reviewed-by: @fuller-stack-dev

* perf: skip per-chunk live parsing for subagents

Subagent runs do not have a live stream consumer; their result is delivered from
the terminal message path after the child run finishes. The intermediate
message_update stream work only feeds live preview output.

Thread suppressLiveStreamOutput from the subagent lane into the embedded runner
subscription and return from handleMessageUpdate after accumulating the raw
chunk. This keeps final delivery unchanged while skipping per-chunk visible text
and reasoning stream parsing for subagents, which reduces event-loop pressure
when multiple child agents stream long answers in parallel.

Interactive and Control UI runs keep the existing live preview path.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
(cherry picked from commit e0382c2c58c3eabdf64638777ec82cb1e68514e9)

* fix(agents): gate subagent stream suppression

* fix(release): reject malformed candidate API timeouts

* fix(crabbox): reclaim sparse reused leases

* fix(model-usage): coerce numeric-string costs and ignore non-finite values (openclaw#87861)

Merged via squash.

Prepared head SHA: 11bb571
Co-authored-by: coder999999999 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): reject out-of-range lab CLI ports

* fix(qa-lab): avoid duplicate child evidence files (openclaw#96030)

* fix(memory-wiki): exclude durable reference pages from stale report (openclaw#94369)

Merged via squash.

Prepared head SHA: c2dca7e
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* Fix recent session resume with long headers (openclaw#94578)

Merged via squash.

Prepared head SHA: 8102961
Co-authored-by: rohitjavvadi <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* ci: add codex maturity scorecard agent (openclaw#95919)

* fix(heartbeat): skip reasoning payloads when selecting heartbeat reply (openclaw#92356)

Merged via squash.

Prepared head SHA: 5885fbb
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(release): surface installed extension manifest errors

* fix(release): track CommonJS package dist imports

* fix(scripts): catch namespace plugin sdk wildcard exports

* fix(agents): keep post-compaction user re-issue of a kept-tail prompt during compaction rotation (openclaw#94328)

Merged via squash.

Prepared head SHA: 05981b6
Co-authored-by: yetval <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(reply): suppress per-message finals across multi-message block streaming (openclaw#95432)

Merged via squash.

Prepared head SHA: 7d7c61f
Co-authored-by: yetval <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(auto-reply): keep drain/restart-abort reply paths silent (openclaw#95431)

Merged via squash.

Prepared head SHA: edb75a9
Co-authored-by: moeedahmed <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): avoid self-check report clobbering

* fix(qa): avoid default artifact directory collisions

* test(qa): gate maturity docs on passing evidence (openclaw#96017)

* docs: refresh maturity scorecard evidence

* test(qa): gate maturity docs on passing evidence

* test(qa): ensure UX matrix video dependencies

* test(qa): simplify maturity evidence result text

* test: align maturity docs test routing

* feat(mattermost): persist participated threads for mention-free follow-ups

* fix(mattermost): record thread participation on preview-finalized replies; document thread mention exception

* fix(mattermost): block-bodied promise executor in participation test (oxlint)

* fix openclaw#89231: [Bug]: Windows installer-created scheduled task launches gateway.cmd with visible console — should use windowless launcher (openclaw#95480)

Merged via squash.

Prepared head SHA: 8b57b03
Co-authored-by: mikasa0818 <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(copilot): preserve compaction metadata

* fix(qa): avoid live artifact directory collisions

* fix(crabbox): share Windows hydrate handoff path

* docs: rename top maturity tier (openclaw#96044)

* Gate private QQBot group commands (openclaw#92154)

* fix: gate private qqbot group commands

* fix(qqbot): keep authorized stop urgent in groups

* fix(qqbot): preserve omitted group command level

* fix(qqbot): preserve ignore-other-mentions gate

* test(qqbot): avoid unbound mention gate mock

* fix(qqbot): close strict command visibility gaps

* fix(qqbot): gate private group commands and close strict command visibility gaps (openclaw#92154) (thanks @sliverp)

* fix(daemon): type Windows task env fixture

* fix: assistant reply lost between compaction summary and first kept user in successor transcript (openclaw#95484)

Merged via squash.

Prepared head SHA: eff5894
Co-authored-by: maweibin <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* ci: add release QA profile evidence (openclaw#95094)

* ci: add release qa profile evidence

* ci: simplify release qa profile evidence

* ci: reuse qa profile evidence workflow

* ci: remove inherited secrets lint comment

* ci: pass qa profile evidence secret explicitly

* ci: run maturity scorecard in release checks

* ci: declare maturity scorecard reusable secret

* fix(ci): report missing workflow pre-commit runtime

* fix(qa): avoid direct smoke artifact collisions

* docs: redesign maturity scorecard pages (openclaw#96057)

Merged via squash.

Prepared head SHA: d2c680a
Co-authored-by: vincentkoc <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* perf(agents): index displaced tool results

* perf(usage): bound session log retention

* perf(anthropic): index active stream blocks

* fix(anthropic): narrow stream block index guard

* fix(qa): avoid matrix qa artifact collisions

* fix(qa-lab): use scoped crabline package

* fix(ci): repair maturity docs checks

* docs: place maturity pages under release reference (openclaw#96061)

Merged via squash.

Prepared head SHA: 7ab8982
Co-authored-by: vincentkoc <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(qa): avoid telegram proof artifact collisions

* fix(qa): avoid plugin update registry port collisions

* fix: npm plugin updates break running gateway imports (openclaw#95589)

Merged via squash.

Prepared head SHA: 74ecbbb
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(docs): keep maturity taxonomy renderer formatted

* fix(qa): allow web search smoke gateway port override

* fix(ci): refresh dependency audit locks

* fix(qa): isolate parallels plugin temp script

* fix(qa): avoid vitest report path collisions

* test(ci): update tooling route expectation

* fix(qa): avoid extension memory report collisions

* fix(qa): isolate docker rerun artifact downloads

* fix(acpx): consume acpx 0.11.1 model capability errors

* fix(acpx): consume acpx 0.11.1 model capability errors

* fix(acpx): refresh npm shrinkwrap for 0.11.1

* test: include workflow checks in tooling plan

* fix(qa): preserve active mac restart locks

* fix(ci): allow release QA evidence workflow calls

* fix(ci): pass resolved ref to maturity QA evidence

* fix(ci): keep release QA evidence branch-compatible

* fix(qa): bound docker e2e log replay

* fix(qa): reject duplicate qa e2e outputs

* fix(qa): reject duplicate report artifacts

* fix(qa): reject ambiguous dependency report inputs

* fix(qa): reject duplicate single-value flags

* fix(qa): reject duplicate test report controls

* fix(qa): reject duplicate dependency evidence options

* fix(qa): reject duplicate package candidate options

* fix(qa): reject duplicate docker package options

* fix(plugin-sdk): refresh api baseline hash

* fix(release): reject duplicate candidate checklist options

* fix(qa): reject duplicate hosted gate options

* fix(qa): reject duplicate ux evidence options

* fix(qa): reject duplicate otel smoke options

* refactor: add transcript update identity contract (openclaw#89912)

* fix(qa): reject duplicate gateway smoke options

* fix: clear config secret refs through env helper

* fix(qa): reject duplicate Parallels platforms

* test: route shared token reload env writes

* fix(qa): require Telegram proof report before publish

* fix: route shared auth secret env writes

* fix(qa): reject duplicate RPC RTT methods

* fix(qa): require MCP API list evidence

* fix(qa): reject polluted Tool Search proof lanes

* test: route network runtime env setup

* fix: simplify Fly Machine env cleanup

* fix(qa): reject duplicate gauntlet selectors

* test: scope send state env helper

* fix: restore task state env through helper

* test: scope transcript reader env setup

* fix(maint): use rebase PR landing

* fix(maint): choose latest hosted CI run

* fix(maint): protect pending hosted CI reruns

* fix(qa): disable pnpm verify in cpu scenarios

* fix(qa): reject missing memory fd args

* test(extensions): use real response mocks

* test(extensions): use real provider response mocks

* test(extensions): use real chutes response mocks

* fix(qa): reject duplicate startup bench cases

* feat(copilot): mirror native plan and subagent events

* fix(harness): recover Copilot native subagent tasks

* fix(qa): reject duplicate sibling bench cases

* fix(acpx): detect wrapper orphan on any PPID change, not just init reparenting (openclaw#96032)

* fix(acpx): detect wrapper orphan on any PPID change, not just init reparenting

The codex / claude adapter wrapper's orphan watcher (emitted by
buildAdapterWrapperScript) skipped cleanup when `process.ppid !== 1`,
intending to wait for the kernel to reparent the orphaned wrapper to
PID 1 (init). This only works on bare-metal hosts without an active
user-session manager.

On systemd-managed deployments (EC2 user services, most container
runtimes), an orphaned process is reparented to the user-session
manager or container init — not to init itself. The watcher therefore
never fires, and when the gateway exits, the adapter wrapper survives
and holds its child process group (codex-acp.js + native binary)
running indefinitely.

Real-world symptom: each gateway restart accumulates 3-process trees of
leftover codex adapters. Subsequent ACP spawns then contend with these
orphans, the main event loop is starved by acpx-runtime reap attempts,
and new sessions stall at "waiting for tool execution" for minutes.

Fix: trigger orphan cleanup as soon as PPID changes from the recorded
original, regardless of what the new PPID is. The killChildTree path
already covers process-group cleanup via `kill(-pid, SIGTERM)`, so
once the watcher fires, grandchildren are reaped correctly.

Adds a regression test asserting the wrapper template does not
re-introduce the `process.ppid !== 1` guard.

* test: document maturity ref handoff

---------

Co-authored-by: t2wei <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(qa): reject unknown docker timing options

* fix(qa): reject duplicate sqlite bench controls

* fix(qa): reject duplicate abort leak controls

* fix(qa): reject duplicate telegram proof controls

* chore(acpx): bump bundled client to 0.11.2 (openclaw#96124)

* fix(qa): reject duplicate cli bench controls

* fix(qa): reject duplicate gateway startup controls

* fix(qa): reject duplicate gateway restart controls

* fix(qa): reject duplicate model bench controls

* Fix WebChat dispatch failure session status (openclaw#84352)

Merged via squash.

Prepared head SHA: 562f2ac
Co-authored-by: jesse-merhi <[email protected]>
Reviewed-by: @jesse-merhi

* fix(qa): reject duplicate model resolution perf controls

* fix(qa): reject duplicate gateway cpu controls

* ci: make release maturity scorecard opt-in

* fix(qa): reject duplicate plugin gauntlet controls

* test(ci): read sparse android guard files from git

* fix(qa): reject duplicate rpc rtt controls

* refactor: migrate plugin transcript mirrors (openclaw#89518)

* fix(qa): prove direct reply routing via qa channel

* refactor: add embedded run session target seam (openclaw#90439)

* test(docs): skip i18n Go tests without toolchain

* perf(gateway): drop redundant per-access session-key case scan (openclaw#95699)

Merged via squash.

Prepared head SHA: 42c9224
Co-authored-by: jzakirov <[email protected]>
Co-authored-by: jalehman <[email protected]>
Reviewed-by: @jalehman

* chore(plugin-sdk): refresh API baseline hash

* fix(ci): avoid relinking identical node tools

* fix(skills): accept owner-qualified verify refs (openclaw#95992)

Merged via squash.

Prepared head SHA: de9f1e5
Co-authored-by: Patrick-Erichsen <[email protected]>
Co-authored-by: Patrick-Erichsen <[email protected]>
Reviewed-by: @Patrick-Erichsen

* fix(plugins): remove simpleicons icon color paths (openclaw#95987)

* chore(android): prepare 2026.6.9 Play release

* refactor: use accessor-backed transcript corpus for memory (openclaw#96162)

* refactor: ratchet memory transcript corpus access

* test: use narrow runtime config snapshot import

* test: update plugin sdk surface budgets

* refactor: split memory transcript corpus module

* fix(ios): defer local network discovery until onboarding

* test(ios): guard local network permission trigger points

* test(cli): isolate service env in run and update suites

* fix(infra): bound ClawHub fetchJson and error response bodies

ClawHub is an external marketplace (untrusted source); fetchJson read the
success body via response.json() and readErrorBody read the error body via
response.text(), both without a byte cap, so a hostile or malfunctioning host
could exhaust memory with an unbounded response. Read both through the existing
read-response-with-limit helpers (16 MiB cap for JSON, 8 KiB / 400 chars for the
error snippet), cancelling the stream on overflow/idle. Symmetric counterpart to
the Anthropic error-stream hardening in openclaw#95108.

* fix(infra): cap ClawHub install-resolution JSON via shared bounded reader

The install-resolution path (fetchClawHubSkillInstallResolution) still read
ClawHub JSON with an unbounded response.json(), the one ClawHub JSON reader
left uncapped by the prior hardening. Route it through the existing
parseClawHubJsonBody helper so every ClawHub JSON success/structured-block
body is bounded by the same 16 MiB cap and cancels the stream on overflow.
Pure reuse of the helper introduced in this PR (no new abstraction); adds a
regression test that an oversized install-resolution body is rejected and the
underlying stream is cancelled.

* fix(infra): preserve ClawHub body timeouts

* fix(matrix): bound non-raw JSON response body in transport

* fix(matrix): use JSON-specific idle-timeout diagnostic on bounded JSON read

The non-raw JSON read in performMatrixRequest fell back to the bound
reader's default media idle-timeout message ('Matrix media download
stalled: ...'), which is misleading for a JSON control-plane read. Pass
a JSON-specific onIdleTimeout so a stalled JSON stream now rejects with
'Matrix JSON response stalled: no data received for {ms}ms', letting the
timeout diagnostic distinguish a stalled JSON read from a stalled
raw/media read. Update the regression assertion accordingly.

* fix(matrix): bound SDK response bodies

* fix(memory): abort orphaned qmd search subprocess when memory_search times out

PR openclaw#91742 wired memory_search's 15s deadline AbortSignal through the builtin
memory manager but missed the QMD backend behind the same
MemorySearchManager.search interface. With QMD, the tool returns "timed out
after 15s" to the agent while the spawned qmd query/search subprocess keeps
running for the full qmd command timeout (memory.qmd.limits.timeoutMs, whose
embed-heavy default was raised to 600s in openclaw#87572), leaving orphaned
embedding/search work running after the agent already moved on.

Add optional AbortSignal support to runCliCommand: an aborting signal kills the
spawned child immediately and rejects with the abort reason, funneled through a
single settle() guard so abort/timeout/error/close cannot double-settle. Thread
the search signal through QmdMemoryManager.search -> runQmdSearch -> runQmd ->
runCliCommand for the default direct-qmd subprocess path (including the query
fallback), and fast-fail search() when the signal is already aborted.

* fix(memory): thread qmd search abort signal through grouped collection search

memory_search timeout cancellation only reached single-group direct qmd
searches. Multi-collection or mixed memory/session configs route through
runQueryAcrossCollectionGroups, which still called runQmdSearch without the
caller signal, so an aborted memory_search left the grouped qmd child running
until the qmd command timeout instead of being killed promptly.

Thread searchSignal through the grouped search path and its unsupported-option
fallback, and add a grouped multi-collection abort regression asserting the
spawned qmd child is SIGKILLed when the caller signal aborts.

* fix(memory): abort orphaned qmd subprocess on the mcporter search path too

The initial fix threaded the abort signal through the direct qmd
(runQmd/runQmdSearch) path, but the mcporter / QMD 1.1+ daemon search path
(runQmdSearchViaMcporter, runMcporterAcrossCollections) never received it, so
a grouped/mcporter search left its subprocess running on abort.

Thread the search signal through QmdMcporterSearchParams,
QmdMcporterAcrossCollectionsParams, all four mcporter call sites in search(),
and runMcporter, down to the shared runCliCommand spawn (which already
SIGKILLs the child on abort). Guard runQmdSearchViaMcporter on an
already-aborted signal so the multi-collection loop stops spawning. Reuses the
existing abort mechanism; no new machinery. Adds mcporter-path regression tests.

* fix(memory): abort orphaned qmd search processes

* test(memory): clean up qmd fixture gracefully

* ci: build iOS app for iOS changes

* fix(qa): bootstrap raw macos package scripts

* test(ci): align plugin prerelease manifest env

* fix(qa): retain crabline delivery targets

* refactor: migrate bundled transcript target lookups (openclaw#89911)

* refactor: route plugin host hook state through accessor (openclaw#96191)

* refactor: route plugin host hook state through accessor

* refactor: hide session accessor store internals

* fix: route gateway history through session accessor target (openclaw#96179)

* refactor: add abort target session accessor (openclaw#96201)

* refactor: add abort target session accessor

* refactor: centralize command abort session lookup

* fix: keep abort runtime path best effort

* fix: preserve abort target identity on persistence failure

* fix: remember abort target when persistence is skipped

* fix: abort runtime before metadata persistence

* fix: preserve abort target fallback typing

* fix: avoid stale abort memory fallback

* fix: keep abort accessor ratchet narrow

* fix: type abort persistence test mock

* fix: align abort accessor ratchet test

* fix(memory-core): migrate dreaming cleanup lifecycle (openclaw#96193)

* fix(memory-core): migrate dreaming cleanup lifecycle

* fix(sessions): resolve lifecycle session files explicitly

* fix(ci): refresh dreaming lifecycle proof ratchets

* fix: bridge ACP metadata to session accessors (openclaw#96195)

* fix: bridge ACP metadata to session accessors

* fix: simplify ACP accessor key ownership

* fix: bind ACP metadata after session canonicalization

* docs(ios): add app review notes

* refactor: migrate agent session accessors (openclaw#96182)

* refactor: migrate agent session accessor writes

* refactor: move subagent orphan lookup to reconciliation

* test: align session accessor mocks

* refactor: guard reply session initialization (openclaw#96218)

* refactor: guard reply session initialization

* refactor: tighten reply session initialization boundary

* test: satisfy reply session accessor lint

* refactor(gateway): add alias mutation accessor (openclaw#96213)

* refactor: add gateway alias mutation accessor

* test: align gateway session entry mocks

* refactor: migrate command session persistence to accessor (openclaw#96204)

* refactor: migrate command session writes to accessor

* refactor: narrow command session persistence params

* refactor: route live model reads through session accessor (openclaw#96206)

* fix(whatsapp): quote current follow-up in durable replies (openclaw#96220)

* build(ios): attach app review notes PDF

* docs(ios): update Talk app store metadata

* fix(qa): retain long smoke debug requests

* fix(qa): scope no-outbound waits

* fix(qa): settle channel no-reply check

* test(qa): show unexpected no-outbound messages

* fix(qa): drain fanout child completions

* fix(qa): enforce fanout completion drain

* fix(macos): drop Textual from chat packaging

* fix(macos): drop Textual from chat packaging

* fix(macos): declare concurrency extras dependency

* fix(codex): prefer gateway-managed generated images

* fix(crabbox): require Xcode for macOS proof

* fix: UI glitch: config is not visible (openclaw#96145)

Summary:
- The branch tracks effective Settings Config Form/Raw mode, resets `.config-content` scroll when that mode changes, and adds a browser regression test for the retained-scroll transition.
- PR surface: Source +9, Tests +30. Total +39 across 2 files.
- Reproducibility: yes. at source level: current main resets `.config-content` for section navigation but not  ... ro in this read-only pass, but the source PR includes after-fix browser proof for the same branch behavior.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head a6ea91e.
- Required merge gates passed before the squash merge.

Prepared head SHA: a6ea91e
Review: openclaw#96145 (comment)

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: sunlit-deng <[email protected]>
Approved-by: takhoffman

* perf(browser): index role snapshot references

* perf(codex): index rollout transcript ids

* perf(reply): hoist direct-send fragment index

* fix(maint): keep PR landing on squash

* fix(ios): make screenshot upload deterministic

* fix(gateway): resolve plugin-registered gateway methods through live registry (openclaw#94154)

Merged via squash.

Prepared head SHA: c65cac4
Co-authored-by: Pick-cat <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Reviewed-by: @vincentkoc

* fix(ci): resolve performance target refs before checkout

* fix openclaw#92582: Bug: doctor falsely warns local memory embeddings are not ready (openclaw#95393)

* fix(doctor): ignore skipped local embedding probe

* fix(doctor): keep skipped local model diagnostics

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix(qa): accept pnpm separator for lab up (openclaw#96246)

* fix(ios): wait for screenshot checksum propagation

* fix(ports): route isPortBusy through checkPortInUse to catch IPv4-only occupants (openclaw#94949)

* fix(ports): route isPortBusy through checkPortInUse to catch IPv4-only occupants

* fix(ports): treat PortUsageStatus unknown as busy in isPortBusy

Per ClawSweeper review: checkPortInUse returns 'unknown' when every host
probe fails for a non-EADDRINUSE reason. Treating unknown as 'not busy'
could cause forceFreePortAndWait to exit before lsof/fuser inspects the
port. Conservative fix: only 'free' means not busy; everything else
(busy or unknown) triggers further inspection.

* fix(ports): reuse canonical multi-address probe

* fix(ports): reuse canonical multi-address probe

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix(workboard): hide archived cards in CLI list by default (openclaw#94562)

* fix(workboard): hide archived cards in CLI list by default

The `openclaw workboard list` CLI printed soft-archived cards, while the
`workboard_list` agent tool and the `/workboard list` command both hide
cards with `metadata.archivedAt` set unless archives are requested. Users
who archived cards still saw them in CLI output and assumed archive failed.

Filter archived cards by default in the CLI list handler and add an
`--include-archived` flag mirroring the tool's `includeArchived` option, so
all three list surfaces share one default. Docs updated to match.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* fix(workboard): preserve json list archive visibility

* fix(workboard): preserve json list archive visibility

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(nextcloud-talk): ignore signed non-message webhook events (openclaw#96243)

* fix(nextcloud-talk): ignore non-message webhook events

* fix(nextcloud-talk): acknowledge lifecycle webhook events

---------

Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* test: scope post-attach sentinel env

* fix(exec): preserve turn-source routing target in approval followups for plugin channels (openclaw#96140)

* fix(exec): preserve turn-source routing target in approval followups for plugin channels

When an async exec approval is resolved and the originating session is
resumed, buildAgentFollowupArgs forwarded the turn-source to/accountId/threadId
only for built-in deliverable channels or gateway-internal channels. For an
external channel plugin whose channel is not in the in-process deliverable set,
the followup dispatched channel alone and dropped the recipient, so the resumed
agent reply routed to webchat instead of the originating channel.

Forward the turn-source routing fields whenever the resolved delivery target is
not used, matching how the channel itself is already preserved, so the gateway
can route the post-approval reply back to the originating channel.

Fixes openclaw#96103

* fix(exec): normalize followup thread routing

* fix(exec): normalize followup thread routing

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix: restore supervisor hint env via helper

* test: scope preauth env override

* fix: restore chat media state env via helper

* test: scope chat cli home fixture

* fix: route approval e2e env setup

* test: route operator approval env setup

* ci: move codeql quality off blacksmith (openclaw#96258)

* chore(release): close out 2026.6.10 on main (openclaw#96271)

* chore(release): close out 2026.6.10 on main

* chore(release): align native app metadata for 2026.6.10

* chore(release): sync Android 2026.6.10 notes

* docs(changelog): preserve 2026.6.9 history

* docs(changelog): preserve 2026.6.9 history

* fix(agents): run heartbeat_prompt_contribution on harness prompt builds (openclaw#96233)

* fix(agents): run heartbeat_prompt_contribution on harness prompt builds

Harness runtimes (e.g. the Codex app-server) assemble the prompt through
resolveAgentHarnessBeforePromptBuildResult rather than the embedded runner's
resolvePromptBuildHookResult. The harness helper ran before_prompt_build and
before_agent_start but never invoked heartbeat_prompt_contribution, so that hook
silently no-ops on those runtimes: plugins that contribute heartbeat context via
the documented hook get nothing on heartbeat turns.

Invoke heartbeat_prompt_contribution from the harness helper too, gated on
ctx.trigger === "heartbeat", merging its prepend/append context ahead of the
before_prompt_build / before_agent_start contributions (matching the embedded
path's ordering). before_prompt_build appendContext is already honored here, so
no change is needed for boot-style append contributions.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* fix(agents): preserve heartbeat hook ordering

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix: avoid O(N²) shallow-copy in mapSensitivePaths schema traversal (openclaw#55018)

* fix: avoid O(N²) shallow-copy in mapSensitivePaths schema traversal

* fix(config): preserve schema hint map contract

---------

Co-authored-by: 黄炎帝 <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(compaction): route codex oauth compaction natively (openclaw#95831)

Signed-off-by: sallyom <[email protected]>

* fix(auto-reply): align channel intro wording with chat_type (openclaw#96244)

* fix(auto-reply): use channel wording for chat_type=channel

* test(auto-reply): update channel wording fixture

* fix(auto-reply): align tool-only channel guidance

* test(auto-reply): refresh prompt snapshot

---------

Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* chore(release): prepare 2026.6.11-beta.1

* test: review raft signal publish scan findings

* docs(release): refresh 2026.6.11 beta notes

* fix(agents): preserve absent embedded session keys

* docs(changelog): refresh 2026.6.11 beta notes

* fix(qa): issue unique mock tool call ids

* docs(changelog): refresh 2026.6.11 notes

* fix(qa): accept Codex capped read evidence

* docs(changelog): refresh 2026.6.11 notes

* fix(qa): align runtime parity evidence with Codex

* test(qa): allow Codex fanout completion window

* test(qa): extend fanout marker wait

* test(qa): scope fanout marker proof to channel runtime

* fix(telegram): recover stalled ingress spool claims

Backport of openclaw#97118 to release/2026.6.11.

* ci(docker): publish releases to Docker Hub (openclaw#97122)

* ci(docker): publish releases to Docker Hub

* ci(docker): clarify beta image tags

(cherry picked from commit b70d1aa)

* fix(parallels): stabilize Windows beta smoke transport

* chore(release): prepare 2026.6.11-beta.2

* ci(release): allow token plugin npm recovery

* ci(release): restore trusted plugin npm publishing

* ci(release): restore plugin npm token env

* ci: bump ClawHub package publish workflow (openclaw#97909)

* chore(release): prepare 2026.6.11

* test(codex): harden run-attempt temp cleanup

* test(qa): accept async image fixture coverage

* fix(release): use workspace host deps in release lockfile

* test(qa): accept crabline multi-channel capabilities

* test(qa): make memory channel scenario wait for final answer

* ci(release): stabilize anthropic live smoke selection

* fix(sync): post-merge integration fixes for v2026.6.11

Test-surface alignment after the upstream merge (no runtime behavior changes):
- restore the fork's readSessionStore gateway test helper (dropped by
  auto-merge when upstream restructured test-helpers.server.ts); used by the
  #71 thinkingLevel sessions.create tests
- bundled-plugin-metadata: include anthropic in the expected startup plugin
  sets (fork #88 activates it eagerly for claude-cli-ultracode durability)
- workspace.load-extra-bootstrap-files test: upstream removed the
  loadExtraBootstrapFiles wrapper; use loadExtraBootstrapFilesWithDiagnostics
- models/auth test: upstream masked the paste-token prompt (text -> password);
  mock clackPassword
- plugin-sdk-surface-report: raise default budgets to the fork's actual
  surface (fork ships extra public exports: tier1, promote-file,
  injectClaudeSettings, memory-durability, session-digest)

Verified NOT merge-caused (fail identically on pristine v2026.6.11 with a
built dist): model-compat/moonshot/qwen/image/provider-catalog-shared
streaming-usage cluster (manifest scan prefers dist/extensions which excludes
non-bundled provider plugins), resolve-openclaw-ref (env), backup-create,
exec-approvals-analysis.

Co-Authored-By: Claude Fable 5 <[email protected]>

* fix(sync): refresh generated shrinkwraps

* fix(config): export configWritePostCommitRollback as typed unique symbol (TS2527/TS4058 after #92 merge)

* ci: sync control-ui i18n baseline + regenerate shrinkwraps against merged lock graph

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: joshavant <[email protected]>
Co-authored-by: Chunyue Wang <[email protected]>
Co-authored-by: vincentkoc <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: Dallin Romney <[email protected]>
Co-authored-by: Yuval Dinodia <[email protected]>
Co-authored-by: Del <[email protected]>
Co-authored-by: youngting520 <[email protected]>
Co-authored-by: Jason (Json) <[email protected]>
Co-authored-by: chenhaoqiang <[email protected]>
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Co-authored-by: Coder <[email protected]>
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: SunnyShu0925 <[email protected]>
Co-authored-by: Rohit <[email protected]>
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: tangtaizong666 <[email protected]>
Co-authored-by: Moeed Ahmed <[email protected]>
Co-authored-by: moeedahmed <[email protected]>
Co-authored-by: Alex Knight <[email protected]>
Co-authored-by: mikasa <[email protected]>
Co-authored-by: mikasa0818 <[email protected]>
Co-authored-by: Sliverp <[email protected]>
Co-authored-by: maweibin <[email protected]>
Co-authored-by: maweibin <[email protected]>
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: ooiuuii <[email protected]>
Co-authored-by: Josh Lehman <[email protected]>
Co-authored-by: Shakker <[email protected]>
Co-authored-by: Tony Wei <[email protected]>
Co-authored-by: t2wei <[email protected]>
Co-authored-by: Jesse Merhi <[email protected]>
Co-authored-by: Jamil Zakirov <[email protected]>
Co-authored-by: jzakirov <[email protected]>
Co-authored-by: jalehman <[email protected]>
Co-authored-by: Patrick Erichsen <[email protected]>
Co-authored-by: Patrick-Erichsen <[email protected]>
Co-authored-by: kklouzal <[email protected]>
Co-authored-by: Alix-007 <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Marcus Castro <[email protected]>
Co-authored-by: Sarah Fortune <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: sunlit-deng <[email protected]>
Co-authored-by: pick-cat <[email protected]>
Co-authored-by: Pick-cat <[email protected]>
Co-authored-by: sunlit-deng <[email protected]>
Co-authored-by: Wynne668 <[email protected]>
Co-authored-by: dongdong <[email protected]>
Co-authored-by: Jasmine Zhang <[email protected]>
Co-authored-by: Alexander Zogheb <[email protected]>
Co-authored-by: xdhuangyandi <[email protected]>
Co-authored-by: 黄炎帝 <[email protected]>
Co-authored-by: Sally O'Malley <[email protected]>
Co-authored-by: Tideclaw <[email protected]>
Co-authored-by: Cory Shelton <[email protected]>
Co-authored-by: Cory Shelton <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: XL status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant