Skip to content

fix(auto-reply): bound terminal reply-run settle and reclaim stale lanes#101910

Closed
obviyus wants to merge 5 commits into
mainfrom
fix/reply-run-terminal-release
Closed

fix(auto-reply): bound terminal reply-run settle and reclaim stale lanes#101910
obviyus wants to merge 5 commits into
mainfrom
fix/reply-run-terminal-release

Conversation

@obviyus

@obviyus obviyus commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Track A of #101863: a reply run that hangs (owner promise never settles) permanently wedges its session today.

Why This Change Was Made

Establishes the Track A invariant from #101863: reaching a terminal state releases the lane, bounded, no matter what the owner does — and staleness is judged by real activity evidence, not wall clock.

  1. Bounded terminal settle (reply-run-registry.ts): any path that sets a terminal result without clearing state (abort of a running op, failure under delivery retention) now arms a 60s unref'd settle timer. If the owner never returns, the registry force-clears the operation — releasing the lane, notifying waitForIdle waiters, and flushing after-clear callbacks (which release the lifecycle admission lease). A late owner complete() stays a harmless no-op.
  2. Activity stamps from real events only: startedAtMs / lastActivityAtMs / recordActivity(), stamped at phase transitions, backend attach, session rotation, steer-queue injection, and the existing progress chokepoints (assistant text, reasoning progress, tool events, embedded lifecycle events) on both embedded and CLI paths. Never from timers — this is the seam Track B extends.
  3. Stale takeover at admission (reply-turn-admission.ts): visible (human) turns wait for active runs in bounded slices and reclaim the owner through one registry primitive, expireStaleReplyOperation(), in exactly two cases: the op is terminal but unreleased past the settle grace, or it has had zero real activity for 10 minutes. The expired op gets the new closed failure code run_stalled. Heartbeat, queued-followup, and control-abort turns never take over.
  4. Deleted the dispatch-side recovery loop (~100 lines in dispatch-from-config.ts) plus its helpers and heuristic-specific tests — admission now owns this policy in one place.

Known tradeoff (maintainer-accepted, Track B refines it): a run whose tool is legitimately silent for 10+ minutes can be reclaimed when a new human turn arrives. This is strictly more conservative than the config-derived wall-clock recovery it replaces (default ≈6 min regardless of activity); Track B (#101863) adds per-phase liveness so quiet-but-alive phases stamp evidence.

User Impact

  • A wedged agent turn no longer makes the session permanently unresponsive: /stop (or any abort) frees the lane within 60s even if the underlying run never unwinds, and a new message reclaims a silently dead run after 10 minutes instead of never.
  • Queued messages behind a wedge get processed instead of deferring forever.
  • Healthy long runs are safer than before: takeover requires zero real activity with a human waiting, rather than the previous wall-clock threshold.

Evidence

  • Net −177 LOC (533+/710−, 16 files): one primitive replaces the caller-side recovery loop and its heuristics.
  • Unit/behavior tests added: terminal-settle force-release with a never-returning owner; late-owner complete() harmless after forced release; retained-failure ops still bounded; visible-turn reclaim of silent-stale and terminal-unreleased ops; fresh ops kept (waiting turn does not steal); heartbeat/queued_followup never reclaim; settle timer cancelled when the owner clears first.
  • Integration tests: dispatch-from-config.stale-recovery.test.ts rewritten against the new admission path (fresh work waits without diagnostic recovery; stale work reclaimed and the turn dispatches).
  • Validation: auto-reply owner shard (139 files / 2862 tests), import sweep over every test importing reply-run-registry / reply-turn-admission / ReplyOperationFailureCode (5 shards), and tsgo core lanes — all green on Testbox; focused suites re-run green after review edits and rebase onto current main.
  • Review follow-up: ClawSweeper's P1 (queued-followup reasoning progress not stamping activity) fixed structurally in 4d4df31 — activity now stamps once at the runCliAgentWithLifecycle bridge seam via onActivity; per-callback stamps deleted at both call sites.
  • Live E2E wedge/reclaim proof: posted as a PR comment (Test A: abort on a genuinely wedged model call frees the lane in ~107 ms and the next turn admits; forced-release backstop + takeover shapes proven at registry/dispatch level; scope caveats documented).

Part of #101863 (Track A). Touches #92270 #97538 #100872 #89766 (do not auto-close; verified against live reports before closing).

@openclaw-barnacle openclaw-barnacle Bot added size: XL maintainer Maintainer-authored PR labels Jul 7, 2026
@clawsweeper

clawsweeper Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 8, 2026, 8:03 AM ET / 12:03 UTC.

Summary
The PR adds bounded reply-run terminal settling, activity evidence, visible stale-run takeover, deprecated SDK compatibility exports, and focused regression coverage while removing the dispatch-side stale-recovery loop.

PR surface: Source +113, Tests -97. Total +16 across 19 files.

Reproducibility: yes. at source/proof level: current main waits on active reply runs without stale-running takeover, and the PR discussion includes live black-hole endpoint proof that abort released the lane and a later turn admitted. I did not run tests in this read-only review.

Review metrics: 1 noteworthy metric.

  • Reply-run recovery bounds: 2 introduced: 60s terminal settle, 10-minute visible stale takeover. These defaults determine when an upgraded gateway may force-release or reclaim an active reply lane.

Root-cause cluster
Relationship: superseded
Canonical: #102160
Summary: This PR is the Track A review record; the open integration PR includes its commits and is now the canonical atomic landing path for the lifecycle reliability stack.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
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:

Risk before merge

  • [P1] Merging this Track A PR standalone would intentionally change recovery defaults before the sibling liveness protections in fix(agents): run-lifecycle reliability — bounded release, evidence-based liveness, watchdog semantics #102160 land.
  • [P1] The new 60s terminal settle and 10-minute no-activity takeover clear active reply-run ownership, so missed activity evidence could affect session state and queued message delivery.
  • [P1] The PR is draft and has the protected maintainer label, so direct merge or cleanup closure requires maintainer rollout intent.

Maintainer options:

  1. Use The Atomic Landing PR (recommended)
    Keep this branch as review provenance and land the tested lifecycle stack through fix(agents): run-lifecycle reliability — bounded release, evidence-based liveness, watchdog semantics #102160 so Track A does not reach main without sibling protections.
  2. Accept Track A Standalone
    Maintainers may merge this branch directly only if they accept the standalone recovery-default risk.
  3. Pause For Production Proof
    Hold this PR and the integration PR until the planned production-bot validation is posted or explicitly waived.

Next step before merge

  • No automated repair is needed; maintainers should keep this draft track open as review provenance and use the integration PR for the actual landing decision.

Maintainer decision needed

  • Question: Should this Track A branch stay open only as review provenance for fix(agents): run-lifecycle reliability — bounded release, evidence-based liveness, watchdog semantics #102160, or should maintainers merge it standalone despite the intermediate recovery-default risk?
  • Rationale: The code shape appears coherent, but the branch changes compatibility-sensitive recovery defaults and the latest maintainer discussion says the sibling tracks protect this one.
  • Likely owner: obviyus — They authored the track, recorded the takeover-policy acceptance, and posted the current atomic landing plan.
  • Options:

Security
Cleared: No concrete security or supply-chain regression was found; the meaningful risk is runtime compatibility, session ownership, and message delivery behavior.

Review details

Best possible solution:

Keep this PR open as the Track A review record and land or reject the lifecycle stack through #102160, which includes this branch atomically.

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

Yes at source/proof level: current main waits on active reply runs without stale-running takeover, and the PR discussion includes live black-hole endpoint proof that abort released the lane and a later turn admitted. I did not run tests in this read-only review.

Is this the best way to solve the issue?

Yes for the Track A code shape, but not as the best standalone landing path; the safer maintainer path is the atomic integration PR because sibling liveness work protects this branch's new recovery defaults.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P1: The PR targets real session/message-delivery wedges where user turns can remain queued until gateway restart.
  • merge-risk: 🚨 compatibility: The branch changes default runtime recovery behavior and preserves previously exported diagnostic helpers only as deprecated SDK compatibility exports.
  • merge-risk: 🚨 session-state: The new registry and admission paths can clear active reply-run ownership and lifecycle admission leases when operations are terminal or stale.
  • merge-risk: 🚨 message-delivery: A wrong activity or takeover decision could reclaim a healthy run or change when queued follow-up messages are admitted and delivered.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR discussion includes live black-hole endpoint output for abort and re-admission plus focused registry/admission backstop tests; production-bot validation is still useful for rollout but contributor proof is sufficient.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR discussion includes live black-hole endpoint output for abort and re-admission plus focused registry/admission backstop tests; production-bot validation is still useful for rollout but contributor proof is sufficient.
Evidence reviewed

PR surface:

Source +113, Tests -97. Total +16 across 19 files.

View PR surface stats
Area Files Added Removed Net
Source 9 223 110 +113
Tests 10 506 603 -97
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 19 729 713 +16

What I checked:

  • Repository policy applied: Root AGENTS.md and the plugin SDK scoped policy were read; they affected the review by requiring whole-path review, protected-label handling, compatibility-risk treatment, and SDK deprecation handling. (AGENTS.md:25, 4bf70be01a21)
  • Live PR state: GitHub reports this PR is open, draft, mergeable but behind, protected by the maintainer label, and at head aa874c4. (aa874c4e538a)
  • Current main lacks stale-running takeover: On current main, an active reply operation makes heartbeat/control turns skip and visible/queued turns wait or return active-run; there is no activity-age expiry branch before waiting. (src/auto-reply/reply/reply-turn-admission.ts:252, 4bf70be01a21)
  • PR adds admission-owned stale takeover: The PR head adds expireVisibleStaleOperation and calls it for visible turns before and after bounded active-run waits. (src/auto-reply/reply/reply-turn-admission.ts:61, aa874c4e538a)
  • PR adds bounded terminal release and stale expiry: The PR head introduces the 60s terminal settle, 10-minute stale takeover constant, activity timestamps, and expireStaleReplyOperation that stamps run_stalled before cancelling the backend. (src/auto-reply/reply/reply-run-registry.ts:183, aa874c4e538a)
  • Regression coverage for release and takeover: The PR head tests forced terminal release, late owner completion, retained failure release, reentrant stale-expiry attribution, visible stale reclaim, fresh waits, and non-visible turns not reclaiming. (src/auto-reply/reply/reply-run-registry.test.ts:512, aa874c4e538a)

Likely related people:

  • obviyus: They authored this track branch, the broader lifecycle design issue, the policy-acceptance comments, and the integration PR that now owns landing. (role: current lifecycle-stack proposer and likely rollout owner; confidence: high; commits: 1888bf535dc6, 4d4df31f087b, 1ca9288cf2f7; files: src/auto-reply/reply/reply-run-registry.ts, src/auto-reply/reply/reply-turn-admission.ts, src/auto-reply/reply/agent-runner-cli-dispatch.ts)
  • osolmaz: PR 61267 commit history shows Onur authored the reply lifecycle unification and session-keyed run registry that this PR extends. (role: introduced current reply lifecycle registry behavior; confidence: high; commits: d2dcacd672b2, 658c31050843, 3f6840230b86; files: src/auto-reply/reply/reply-run-registry.ts)
  • vincentkoc: Current-main blame on the sampled reply-run and admission files points to the PR 101922 refactor authored and merged by vincentkoc. (role: recent area contributor and merger; confidence: medium; commits: cc083e5f4fe0, 83b6acd18b85; files: src/auto-reply/reply/reply-run-registry.ts, src/auto-reply/reply/reply-turn-admission.ts, src/auto-reply/reply/agent-runner-cli-dispatch.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.
Review history (17 earlier review cycles; latest 8 shown)
  • reviewed 2026-07-08T09:52:10.157Z sha ef2678f :: needs changes before merge. :: [P1] Stamp suppressed CLI bridge events as activity
  • reviewed 2026-07-08T10:29:44.949Z sha c40447e :: needs changes before merge. :: [P1] Stamp suppressed CLI events before takeover can reclaim them
  • reviewed 2026-07-08T10:36:50.540Z sha c40447e :: needs changes before merge. :: [P1] Stamp suppressed CLI events before takeover can reclaim them
  • reviewed 2026-07-08T11:10:46.239Z sha 0cbae8c :: needs changes before merge. :: [P1] Preserve the exported diagnostic recovery helpers | [P1] Stamp suppressed CLI events before stale takeover
  • reviewed 2026-07-08T11:19:11.561Z sha 0cbae8c :: needs changes before merge. :: [P1] Preserve the exported diagnostic recovery helpers | [P1] Stamp suppressed CLI events before stale takeover
  • reviewed 2026-07-08T11:29:42.291Z sha ae9081d :: needs maintainer review before merge. :: none
  • reviewed 2026-07-08T11:38:43.678Z sha ae9081d :: needs maintainer review before merge. :: none
  • reviewed 2026-07-08T11:53:59.866Z sha aa874c4 :: needs maintainer review before merge. :: none

@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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jul 7, 2026
@obviyus
obviyus force-pushed the fix/reply-run-terminal-release branch from c867aa9 to 1888bf5 Compare July 7, 2026 23:45
@obviyus

obviyus commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Live E2E validation (wedge/reclaim)

Ran the real root-cause scenario on this branch: local gateway (dist build), scratch profile, and a black-hole OpenAI-compatible endpoint (accepts POST /v1/chat/completions, never responds, never closes) with provider timeoutSeconds: 36000 so undici/first-event watchdogs don't break the wedge. Default stuck-session recovery was neutralized (diagnostics.stuckSessionWarnMs) to isolate this PR's mechanisms — in default config that recovery aborts a silent run at ~390s, and this PR's settle bound is what then guarantees the abort actually releases (the released=0 link).

Test A — abort ⇒ bounded release: PASS

time (UTC) event
23:53:53.5 chat.send msg1 → run started
23:53:56.4 black-hole receives request — run genuinely wedged ([model-fetch] ... timeoutMs=36000000)
23:54:23.6 chat.abort{"ok":true,"aborted":true}
23:54:23.8 run settles (end status=cancelled), lane free — ~107 ms after abort
00:00:00.2 chat.send msg2 admitted; fresh black-hole request — lane provably free

Note: release was immediate rather than via the 60s settle timer, because the abort signal propagates into the guarded model fetch and the owner unwinds cleanly (the armed settle timer is cancelled). The forced-release path is the backstop for owners that never unwind post-abort — e.g. the embedded abort settle timed out lag observed when stuck-recovery aborted a phase-1 run — and is covered by the registry/admission tests on this exact build (65/65 green).

Test B — silent-stale takeover: works for its target shape; live-runtime wedges never reach admission

  • Registry/dispatch level: reclaim of a zero-activity owner by a visible turn, and of a terminal-but-unreleased owner past settle grace, both pass (dispatch-from-config.stale-recovery.test.ts, admission suite).
  • Live negative result worth recording: with a live embedded run wedged on a model call, no inbound surface produced a visible admission waiter in 2h of attempts — gateway chat.send on a busy lane always becomes a queued chat turn (queuedFollowupLifecycle, server-methods/chat.ts), and channel DM inbound is steered into the wedged run's queue (queueEmbeddedAgentMessageWithOutcome accepts unconditionally while a run handle exists). So the no_activity takeover rescues stale owners without a live steerable runtime (owner died mid-delivery, detached backend), while live-runtime wedges are rescued by abort (Test A) or by stuck-session recovery + this PR's settle bound in default config.

Follow-up candidates surfaced (out of scope here, feeding #101863 Track B)

  1. Steer/queue capture swallows rescue messages before admission on zero-activity runs — steer acceptance should age out (or divert to admission) when the run has no recent activity evidence.
  2. agents.defaults.timeoutSeconds: 0 clamps to 1s in config position (resolveAgentTimeoutSeconds Math.max(seconds, 1)) instead of meaning "no timeout" — surprising config semantics, worth a doctor/schema look.

Cleanup verified: no gateway/black-hole/QA-bus processes left, scratch state only, ~/.openclaw untouched.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 8, 2026
@obviyus obviyus self-assigned this Jul 8, 2026
@obviyus

obviyus commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the P1 in 4d4df31 — structurally, not with a one-line patch.

The finding was real (queued-followup onReasoningProgress didn't stamp activity), but the defect class is divergence: two call sites hand-rolling the same six CLI callbacks, where any forgotten stamp silently makes healthy runs reclaimable. The fix moves stamping to the one seam both paths share: runCliAgentWithLifecycle now takes onActivity and stamps it before every delivered bridge event (assistant, reasoning text, reasoning progress, tool, commentary, fast-mode). Both callers pass one line (onActivity: () => replyOperation?.recordActivity()) and all eight per-callback stamps were deleted — a future callback can't miss a stamp because call sites no longer stamp. Bonus: reasoning text now also counts as activity (it previously didn't on either path), and it stamps even when no reasoning callback is registered, since the durable-reasoning deliver always runs.

Coverage: two new tests in agent-runner-cli-dispatch.test.ts, including the exact reported scenario — a pure reasoning-progress stretch with no tool/commentary events keeps stamping (onActivity called per delivered progress event).

Acceptance criteria run (worktree, node scripts/run-vitest.mjs + tsgo lanes): followup-runner.test.ts, agent-runner-execution.test.ts, reply-turn-admission.test.ts, reply-run-registry.test.ts, agent-runner-cli-dispatch.test.ts, dispatch-from-config.stale-recovery.test.ts all green; tsgo core + core-test lanes exit 0; oxlint/oxfmt clean on touched files.

On the maintainer decision (10-minute no-activity takeover default): intentionally left open — the PR stays in draft until the maintainer picks accept / narrow / hold-for-Track-B. One datum for that call from the live E2E: for wedges with a live steerable runtime, inbound messages are captured by the steer queue before admission ever evaluates takeover, so the 10-minute policy in practice reclaims dead-owner shapes, not quiet-but-alive runs — the false-positive window is narrower than source inspection suggests.

@obviyus

obviyus commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Maintainer decision (@obviyus): accept the 10-minute zero-activity visible-turn takeover as default policy, with the stamp-seam repair already landed (4d4df31).

Rationale: the takeover requires a human actively waiting plus zero real activity evidence for 10 minutes — and the live E2E on this branch showed that runs with a live steerable runtime capture inbound messages in the steer queue before admission evaluates takeover at all, so the policy in practice reclaims dead-owner shapes. Quiet-but-alive false positives are tracked under #101863; Track B's phase-aware liveness (per-phase floors, reasoning-model allowances) is the designated refinement, not a merge blocker here.

Remaining before undraft: none from this review. The PR stays in draft per maintainer preference until Track A validation on a production bot is scheduled.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 8, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 8, 2026
@clawsweeper clawsweeper Bot added the rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. label Jul 8, 2026
@obviyus
obviyus force-pushed the fix/reply-run-terminal-release branch from 36536d8 to ef2678f Compare July 8, 2026 09:46
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. labels Jul 8, 2026
@obviyus
obviyus force-pushed the fix/reply-run-terminal-release branch from ef2678f to c40447e Compare July 8, 2026 10:22
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 8, 2026
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label Jul 8, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 8, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the scripts Repository scripts label Jul 8, 2026
@obviyus

obviyus commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Both re-review P1s addressed in ae9081d36e1:

  1. Suppressed-run staleness (0.95 confidence — real bug, good catch): activity stamping is now a dedicated delivery-independent bridge that fires on every CLI agent event regardless of suppressAssistantBridge, replacing the per-callback withActivity wrappers entirely (which also removes the wrapper layer). Regression test added: a silentExpected run with suppressed bridges delivers no callbacks but keeps stamping activity.
  2. SDK export removal: isStuckSessionRecoveryEnabled and requestStuckDiagnosticSessionRecovery are restored verbatim as @deprecated exports (unused by core; kept because plugin-sdk/text-runtime.ts re-exports the module; removal deferred to the next SDK major per the deprecation policy). The surface-budget change is reverted accordingly.

Focused suites, surface pin, tsgo core/core-test lanes all green; stacked branch #101985 rebased on the new head.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 8, 2026
@obviyus

obviyus commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Landing plan update: this track lands atomically with its siblings via the integration PR #102160 (all commits preserved, rebase merge) — sequential landing would put untested intermediate states on main (e.g. the stale takeover without the quiet-tool floor). This PR stays open as the per-track review record and closes when #102160 lands.

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

Labels

maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XL 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.

1 participant