Skip to content

fix: restore backgrounded in-flight runs on TUI switch-back via gateway snapshot#88785

Merged
steipete merged 5 commits into
openclaw:mainfrom
williamliu-ai:fix/tui-switchback-inflight-snapshot
Jun 1, 2026
Merged

fix: restore backgrounded in-flight runs on TUI switch-back via gateway snapshot#88785
steipete merged 5 commits into
openclaw:mainfrom
williamliu-ai:fix/tui-switchback-inflight-snapshot

Conversation

@williamliu-ai

@williamliu-ai williamliu-ai commented May 31, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Restores a backgrounded in-flight run on terminal-TUI session/agent switch-back. Switching agents while a run was streaming left the TUI blank/idle on return — the result never surfaced.
  • Root cause (delivery scoping, not rendering): global-session runs are delivered per agent (src/gateway/server-chat.ts resolveSessionDeliveryKeyagent:<id>:global), so once the client switches to another agent it stops receiving the backgrounded run's events entirely. chat.history rebuilds only from persisted messages, and an in-flight run's text isn't persisted yet — so switch-back shows neither the live run nor a result.
  • Fix (gateway-sourced snapshot; additive, no protocol break): chat.history returns an additive inFlightRun ({ runId, text }) for any active run on the requested session+agent, read from the authoritative gateway state (chatAbortControllers + chatRunBuffers). The TUI adopts it on switch-back: renders any buffered partial, shows streaming, and re-adopts activeChatRunId so the run's completion is owned by the client. Works across runtimes (Codex/embedded) and for /agent + /session switches, because the run state comes from the gateway on return rather than client event capture.
  • The run match mirrors sessions.list's active-run projection (isTrackedActiveSessionRunForKey): match on the requested OR canonical session key, scope the shared global session by agent, and include only projectSessionActive !== false, non-aborted runs (so a finalized run already in history is not duplicated and a stale run can't get stuck in streaming).
  • Supersedes an earlier client-side live-run-store attempt that real-gateway testing proved inert — the backgrounded run's events are never delivered to the switched-away client, so there was nothing for a client store to retain.
  • Codex adversarial review: 3 rounds, ended clean (matching, lifecycle/race, TUI adoption, empty-text adoption, and compatibility with other chat.history callers all checked; final verdict: no remaining substantiated bug).

Verification

node scripts/run-vitest.mjs run src/gateway/chat-abort.test.ts src/tui/tui-session-actions.test.ts
  -> passing (incl. requested-or-canonical key match, global agent scoping, undefined
     projectSessionActive == active, empty-text Codex adoption, TUI render + adopt)
node scripts/run-vitest.mjs run src/gateway/server-methods/server-methods.test.ts \
  src/gateway/server.chat.gateway-server-chat.test.ts
  -> chat.history coverage passing
node scripts/run-tsgo.mjs -p tsconfig.core.json   -> no errors in touched files
oxfmt --check  and  oxlint                          -> clean on touched files

Real behavior proof

Behavior addressed: switching agents (/agent) while a task was running left the terminal TUI blank/idle on switch-back — the backgrounded run's result never appeared. Originally observed on gpt-5.4-mini (Codex runtime).
Real environment tested: a real Dockerized OpenClaw gateway (the openclaw:williamliu image rebuilt from this branch) with the openai-codex provider (gpt-5.x), driving the terminal TUI against the live gateway over its real transport.
Exact steps or command run after this patch:

OPENCLAW_IMAGE=openclaw:williamliu docker compose build && docker compose up -d
# in the TUI: start a task on an agent; /agent switch away while it runs; /agent switch back

Evidence after fix: proof-of-fix screen recording captured on the live Dockerized gateway running a patched build — https://github.com/user-attachments/assets/8922a5d7-3967-4abb-a81c-4fab5f753100 . The recording shows the patched TUI (it carries diagnostic markers not present in this PR), the agent's session remaining in the streaming state after switching to a different agent and a different session and back, and the content rendering correctly at the end of the run. (Observed directly in the live TUI terminal/console output.)
Observed result after fix: the previously-lost backgrounded run is restored on switch-back (status streaming, result rendered on completion). Before the fix, the returned session was blank/idle and the result never surfaced. A gateway trace during diagnosis confirmed the run was active for the session but its in-flight text was empty mid-run (Codex emits the answer only at completion), which the fix now adopts as streaming rather than dropping.
What was not tested: a captured screenshot/recording is not attached inline (verified interactively on the live gateway); the WebChat surface was not separately exercised; the embedded (non-Codex) runtime relies on the same inFlightRun path, covered by unit tests rather than a separate live capture.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 31, 2026
@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 31, 2026, 9:01 PM ET / 01:01 UTC.

Summary
Adds an optional chat.history.inFlightRun snapshot from gateway active-run state and teaches the TUI to adopt it when switching back to a session or agent with an in-flight run.

PR surface: Source +138, Tests +320. Total +458 across 5 files.

Reproducibility: yes. source-reproducible: current main scopes global run events per agent, clears TUI run ownership on switch, and rebuilds only persisted history, while the supplied recording shows the patched switch-back recovery.

Review metrics: 1 noteworthy metric.

  • Gateway response surface: 1 optional field added. chat.history can now return inFlightRun, which is additive but still a maintainer-visible gateway/TUI contract extension.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

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

Rank-up moves:

  • [P2] Resolve or intentionally waive the current check-dependencies failure before merge.

Risk before merge

  • [P1] The latest head still has a failing check-dependencies check; it does not appear caused by this diff, but maintainers should wait for it to pass or intentionally waive it before merge.

Maintainer options:

  1. Decide the mitigation before merge
    Land the additive gateway snapshot and TUI adoption after the dependency check failure is resolved or deliberately waived by maintainers.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] No repair lane is needed because no discrete patch defect was found; remaining work is maintainer CI and merge handling.

Security
Cleared: The diff touches gateway/TUI TypeScript and tests only, with no dependency, lockfile, workflow, package, secret, permission, or downloaded-code execution changes.

Review details

Best possible solution:

Land the additive gateway snapshot and TUI adoption after the dependency check failure is resolved or deliberately waived by maintainers.

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

Yes, source-reproducible: current main scopes global run events per agent, clears TUI run ownership on switch, and rebuilds only persisted history, while the supplied recording shows the patched switch-back recovery.

Is this the best way to solve the issue?

Yes. Gateway-owned active-run state is the best layer because a switched-away client cannot retain events it no longer receives, and the additive history field is narrower than changing delivery routing or persisting partial output.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 432312a17c9e.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The linked recording convincingly shows after-fix real gateway/TUI behavior: switch-back restores the in-flight run as streaming and the final answer renders.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🦞 diamond lobster: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.

Label justifications:

  • P1: The PR repairs a user-facing TUI/gateway workflow where switching agents during an active run can leave the returned session idle and lose the visible result.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (recording): The linked recording convincingly shows after-fix real gateway/TUI behavior: switch-back restores the in-flight run as streaming and the final answer renders.
  • proof: sufficient: Contributor real behavior proof is sufficient. The linked recording convincingly shows after-fix real gateway/TUI behavior: switch-back restores the in-flight run as streaming and the final answer renders.
  • proof: 🎥 video: Contributor real behavior proof includes video or recording evidence. The linked recording convincingly shows after-fix real gateway/TUI behavior: switch-back restores the in-flight run as streaming and the final answer renders.
Evidence reviewed

PR surface:

Source +138, Tests +320. Total +458 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 3 138 0 +138
Tests 2 320 0 +320
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 458 0 +458

What I checked:

  • Repository policy applied: Root AGENTS.md and scoped gateway, server-methods, and TUI guides were read; their gateway hot-path, chat history, proof, and Codex-source review rules were applied. (AGENTS.md:1, 432312a17c9e)
  • Current main scopes global delivery by agent: resolveSessionDeliveryKey maps global session events to agent:<id>:global, so a client that switches agents can stop receiving the original run's live events. (src/gateway/server-chat.ts:417, 432312a17c9e)
  • Current main history has no in-flight snapshot: chat.history currently rebuilds bounded persisted messages and reports hasActiveRun, but it does not return the active run id or live buffered text. (src/gateway/server-methods/chat.ts:2399, 432312a17c9e)
  • Current TUI drops run ownership on switch: setSession clears activeChatRunId, sets status to idle, and then loads history; without a returned run snapshot there is no switch-back re-adoption path. (src/tui/tui-session-actions.ts:516, 432312a17c9e)
  • PR implements the right gateway snapshot invariant: The PR adds snapshot selection from chatAbortControllers and chatRunBuffers, skips aborted/inactive runs, scopes global sessions by agent, chooses the newest matching run deterministically, filters buffered text, and keeps the run id under the history byte budget. (src/gateway/chat-abort.ts:164, 7d5da819ff49)
  • Sibling active-run contract matches the PR: hasTrackedActiveSessionRun already accepts requested or canonical keys and scopes global sessions by agent/default agent, matching the PR's snapshot matching rules. (src/gateway/server-methods/session-active-runs.ts:31, 432312a17c9e)

Likely related people:

  • Vincent Koc: Blame and git log -S for resolveSessionDeliveryKey, chat.history, session-active-runs, and TUI setSession all point to commit 03151a2ebe across the central current-main paths. (role: current-main gateway/TUI chat surface contributor; confidence: medium; commits: 03151a2ebe15; files: src/gateway/server-chat.ts, src/gateway/server-methods/chat.ts, src/gateway/server-methods/session-active-runs.ts)
  • Peter Steinberger: Recent main history touches server-methods/chat.ts, and the live PR head includes follow-up commits by this author that bound and filter the in-flight snapshot. (role: recent adjacent contributor and PR follow-up author; confidence: medium; commits: 27dde7a4d69b, f5dc4d157b43, 7d5da819ff49; files: src/gateway/server-methods/chat.ts, src/gateway/chat-abort.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.

@williamliu-ai

Copy link
Copy Markdown
Contributor Author
openclaw-switch-back-fix.mov

This is the proof of fix video. You can observed that the TUI is patched with the fix (with the debugging information that does not exist in the PR). The agent's session is still in the streaming state after switching back from another aganet and and another session. the content is properly displayed at the end of the execution

@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. labels May 31, 2026
@williamliu-ai
williamliu-ai force-pushed the fix/tui-switchback-inflight-snapshot branch 2 times, most recently from 4677259 to e4d74bd Compare May 31, 2026 21:04
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 31, 2026
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. 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 May 31, 2026
@williamliu-ai

Copy link
Copy Markdown
Contributor Author

CI note: the red lanes here are pre-existing breakage on main, not from this PR.

This PR's diff is 5 files, all under src/gateway/** and src/tui/**:

  • src/gateway/chat-abort.ts, src/gateway/chat-abort.test.ts, src/gateway/server-methods/chat.ts
  • src/tui/tui-session-actions.ts, src/tui/tui-session-actions.test.ts

The branch is rebased onto the latest main (5df0ed3b9f), and the failing lanes all fail in files outside that diff:

Lane Failing file (not in this PR) Cause
check-test-types extensions/voice-call/** test mocks the plugin-state interface gained openChannelIngressQueue, but the voice-call test mocks/harness weren't updated → TS2741: Property 'openChannelIngressQueue' is missing
checks-node-core-fast src/tasks/task-boundaries.test.ts the approved task-registry import allowlist drifted (expected 3, now 4)
check-lint, check-additional-boundaries-bcd, check-additional-extension-bundled extensions/** / non-src files same feature-churn class

Lanes that touch this PR's code are green: Real behavior proof, checks-node-agentic-control-plane-agent-chat (the chat.history shard), and all touched-file lint/type/test checks. The PR is MERGEABLE.

I'm opening a separate change to fix the trunk breakage so these lanes go green.

@williamliu-ai
williamliu-ai force-pushed the fix/tui-switchback-inflight-snapshot branch from e4d74bd to 3c5b7fc Compare May 31, 2026 21:56
@williamliu-ai

Copy link
Copy Markdown
Contributor Author

Green and ready to merge. Rebased onto the latest main (3c5b7fc7e1): 133 checks pass, 0 failing, mergeable / CLEAN.

  • The 5 lanes that were red earlier were pre-existing trunk breakage (voice-call test-types, task-registry allowlist, lint/boundary) — fixed upstream on main, and this rebase inherited those fixes.
  • Lanes covering this PR's code are green: Real behavior proof, checks-node-agentic-control-plane-agent-chat (the chat.history shard), tui-pty, plus all touched-file lint/type/test checks.
  • Behavior live-verified on a real Dockerized gateway (Codex gpt-5.x) — screen recording attached above.

@byungskers

Copy link
Copy Markdown

Nice direction — pulling the snapshot from gateway state feels like the right layer for switch-back recovery.

One edge case I'd double-check: resolveInFlightRunSnapshot() currently returns the first matching controller it sees. If the gateway ever ends up with two active entries for the same (sessionKey, agentId) during a fast restart / retry / stale-controller race, the restored run becomes Map-insertion-order dependent. Would it be safer to prefer the newest startedAtMs (or otherwise make the selection deterministic) before returning?

@williamliu-ai
williamliu-ai force-pushed the fix/tui-switchback-inflight-snapshot branch from 3c5b7fc to 8d1ce3f Compare May 31, 2026 23:16
@williamliu-ai

Copy link
Copy Markdown
Contributor Author

Good catch — addressed in 8d1ce3fce0. resolveInFlightRunSnapshot() no longer returns the first-iterated match; it now scans all matching active controllers and selects the one with the newest startedAtMs, with a runId tie-break so the choice is fully deterministic even when two entries share a timestamp. That removes the Map-insertion-order dependence in the fast-restart/retry/stale-controller race you described, and picks the run a switching-back client actually wants (the latest one).

Two regression tests cover it in src/gateway/chat-abort.test.ts:

  • "prefers the newest startedAtMs when several runs match the same session+agent" — older run inserted first, so a first-match selector would fail it.
  • "breaks startedAtMs ties deterministically by runId regardless of insertion order" — same winner whether the map is built ascending or descending.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 🎥 video Contributor real behavior proof includes video or recording evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P1 High-priority user-facing bug, regression, or broken workflow. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels May 31, 2026
@steipete steipete self-assigned this Jun 1, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 1, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 1, 2026
@steipete
steipete force-pushed the fix/tui-switchback-inflight-snapshot branch from 62abaa1 to 7d5da81 Compare June 1, 2026 00:50
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 1, 2026
williamliu-ai and others added 3 commits June 1, 2026 01:56
…napshot

Switching agents/sessions while a run is streaming left the TUI blank on return:
the run keeps executing, but its result never appears. Root cause is delivery
scoping, not client rendering — global-session runs are delivered per agent
(server-chat.ts resolveSessionDeliveryKey -> `agent:<id>:global`), so once the
client switches to another agent it stops receiving the backgrounded run's
events entirely. A purely client-side store therefore has nothing to retain, and
chat.history rebuilds only from PERSISTED messages (an in-flight run's text is
not yet persisted), so switch-back shows neither the live run nor a result.

Fix (gateway-sourced snapshot; additive, no protocol break):
- chat-abort.ts: resolveInFlightRunSnapshot() returns the active run for a
  session+agent from the authoritative gateway state (chatAbortControllers +
  chatRunBuffers). Only projectSessionActive, non-aborted runs are returned, so a
  completed run (already in history) is not duplicated; the shared "global"
  session is scoped by agentId. The active run is matched
  by the requested OR the canonical store key (an abort entry can hold either),
  mirroring sessions.list's active-run projection, so a run started under a
  different-but-equivalent session key is still restored. The run is returned even with no buffered text:
  some runtimes (Codex) withhold incremental assistant text and only emit the
  reply at completion, so there is nothing to show mid-run, but the client should
  still adopt the run and show `streaming` (not idle) and finalize cleanly.
- server-methods/chat.ts: chat.history includes an additive `inFlightRun`
  ({ runId, text }) for the requested session+agent.
- tui-session-actions.ts: loadHistory renders any buffered partial and re-adopts
  activeChatRunId + `streaming` status, so resumed delivery continues the run and
  its completion is owned by the client rather than an unowned error path.

Works across runtimes (Codex/embedded) and for /agent and /session switches
because the run state comes from the gateway on return, not from client event
capture. Supersedes the earlier client-side live-run-store attempt, which
real-gateway testing proved inert (the backgrounded run's events are never
delivered to the switched-away client).

- node scripts/run-vitest.mjs run src/gateway/chat-abort.test.ts src/tui/tui-session-actions.test.ts -> 57 passed
- node scripts/run-vitest.mjs run src/tui/ -> all passed
- gateway chat.history coverage (server-methods + server.chat suites) -> 263 passed
- tsgo -p tsconfig.core.json clean; oxfmt/oxlint clean
- Verified on a real gateway: /agent switch-back now shows `streaming` and the
  result lands cleanly (Codex gpt-5.x).
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Jun 1, 2026
@steipete
steipete force-pushed the fix/tui-switchback-inflight-snapshot branch from 7d5da81 to 2b8bf5f Compare June 1, 2026 01:18
@steipete

steipete commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Land-ready after maintainer fixups.

What changed:

  • Restores switch-back adoption by returning inFlightRun from chat.history when a visible chat-send run is still active for the requested session.
  • Bounds opportunistic buffered snapshot text to the existing history response byte budget while preserving the run id for adoption.
  • Projects buffered snapshot text through the live chat projector so suppressed lead fragments stay hidden.
  • Scopes bare global history to the configured default agent and filters out hidden kind: "agent" runs.

Local proof on head 2b8bf5f214722c754845990efb358271fba83281:

  • node scripts/run-vitest.mjs run src/gateway/chat-abort.test.ts src/tui/tui-session-actions.test.ts passed: 25 gateway tests, 30 TUI tests.
  • node scripts/run-tsgo.mjs -p tsconfig.core.json passed.
  • pnpm --silent exec oxfmt --check src/gateway/chat-abort.ts src/gateway/chat-abort.test.ts src/gateway/server-methods/chat.ts src/tui/tui-session-actions.ts src/tui/tui-session-actions.test.ts passed.
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main passed clean with no accepted/actionable findings.

CI observed on the current pushed head:

Known gap: broad non-required CI shards were still queued/pending when checked; no required checks are configured for this branch and no current-head failures were observed in the relevant proof above.

@steipete
steipete merged commit 8eeb930 into openclaw:main Jun 1, 2026
164 of 168 checks passed
@steipete

steipete commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Landed PR #88785 and added two maintainer follow-up fixes on main after review:

  • 6ad73e173b keeps hidden/internal agent runs out of visible chat state, session active projections, session-wide aborts, chat abort broadcasts, and aborted partial persistence while preserving explicit authorized run-id abort.
  • 912ea4897f scopes global active-run matching to the default agent when agentId is omitted, keeping chat.history and active-run flags aligned with the default global session store.

Proof run after the follow-up commits:

  • node scripts/run-vitest.mjs src/gateway/chat-abort.test.ts src/gateway/server-methods/agent.test.ts src/gateway/server-methods/chat.abort-authorization.test.ts src/gateway/server-methods/chat.abort-persistence.test.ts src/gateway/server.sessions.list-changed.test.ts - passed, 5 files / 217 tests.
  • autoreview --mode branch --base origin/main - clean, no accepted/actionable findings.
  • tmux live TUI proof with /session main -> /session other -> /session main restored TMUX_SWITCHBACK_INFLIGHT_TEXT as the streaming in-flight run on switch-back.
  • Codex contract checked directly in ../codex/sdk/typescript/src/thread.ts, ../codex/sdk/typescript/src/events.ts, ../codex/sdk/typescript/src/items.ts, ../codex/codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts, ../codex/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItem.ts, plus the OpenClaw Codex projector in extensions/codex/src/app-server/event-projector.ts.

Remote broad proof gap: pnpm check:changed could not complete because Blacksmith Testbox refused SSH/rsync on repeated fresh leases (tbx_01kt0e3dg7cpwe6cv5y4x3bb17, tbx_01kt0em01ykp9b19j12nh6zvkf). Direct AWS Crabbox reached run_9aa17c81d8e3 but raw sync lacked .git, so check:changed could not compute origin/main...HEAD; reuse then lost SSH. Main CI was rerun at https://github.com/openclaw/openclaw/actions/runs/26731483202 after the direct push.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui gateway Gateway runtime P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. proof: 🎥 video Contributor real behavior proof includes video or recording evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: L status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants