Skip to content

trace: Correlate channel message diagnostics into one trace#88821

Merged
steipete merged 8 commits into
mainfrom
fix/fix-trace-waterfall
Jun 2, 2026
Merged

trace: Correlate channel message diagnostics into one trace#88821
steipete merged 8 commits into
mainfrom
fix/fix-trace-waterfall

Conversation

@bek91

@bek91 bek91 commented May 31, 2026

Copy link
Copy Markdown
Contributor

Fixes #88811.

Root Cause

Slack/channel message handling did not establish one diagnostic trace scope for the inbound message. The callback path can bypass the gateway request span, the embedded runner created a separate unrepresented diagnostic parent for model diagnostics, and diagnostics-otel only created openclaw.message.processed at completion time. That left harness/model diagnostics without a live message parent in OTel, queued async diagnostic ordering could make child spans arrive before the harness parent, and same-lifecycle file log records had no direct regression coverage for the channel trace scope.

Implementation

  • Add a per-inbound-channel-message diagnostic trace scope in the shared channel turn kernel.
  • Run harness attempts inside a child diagnostic trace scope and let harness lifecycle diagnostics fall back to the active trace.
  • Keep embedded model diagnostics under the active harness/message scope instead of minting an unrepresented intermediate parent.
  • Start and track the openclaw.message.processed OTel span at message dispatch start for internal/trusted diagnostics, then finalize it after queued child diagnostics drain.
  • Parent delivery completed/error spans from trusted event metadata and active message lifecycle state so delivery spans stay in the inbound trace.
  • Keep harness/run spans alive through the immediate post-return usage emission path so openclaw.model.usage can still parent under the harness span.
  • Dispatch harness.run.started synchronously so it can anchor openclaw.run, openclaw.model.usage, and openclaw.model.call children.
  • Add coverage for diagnostic event trace propagation, exported OTel waterfall relationships, production logMessageDispatchStarted / logMessageProcessed lifecycle helpers, duplicate/skipped dispatch diagnostics, and file log records emitted in the same channel lifecycle.

Real behavior proof

  • Behavior or issue addressed: Channel-message diagnostics now keep inbound processing, harness/model work, and outbound delivery in the same diagnostic trace instead of splitting OTel spans across unrelated roots.
  • Real environment tested: Local OpenClaw QA scenario using qa-channel, qa-lab bus, a real gateway child process, diagnostics-otel enabled, a local OTLP/HTTP receiver, and the repo mock-openai provider.
  • Exact steps or command run after this patch: pnpm qa:otel:smoke -- --collector local --output-dir .artifacts/qa-e2e/otel-trace-waterfall-pr88821
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):
qa-otel-smoke: local OTLP receiver listening on http://127.0.0.1:51334
[qa-suite] run start: scenarios=1 concurrency=1 transport=qa-channel
[qa-suite] lab ready: http://127.0.0.1:51352
[qa-suite] provider ready: http://127.0.0.1:51355
[qa-suite] gateway ready: http://127.0.0.1:51356
[qa-suite] scenario start (1/1): otel-trace-smoke
[qa-suite] scenario pass (1/1): otel-trace-smoke
[qa-suite] run complete: passed=1 failed=0 total=1
QA suite report: /Users/bek/Desktop/openclaw-fix-trace-waterfall/.artifacts/qa-e2e/otel-trace-waterfall-pr88821/qa-suite-report.md
qa-otel-smoke: summary .artifacts/qa-e2e/otel-trace-waterfall-pr88821/otel-smoke-summary.json
qa-otel-smoke: passed spans=18 metrics=23 logs=12 traces=3 metricRequests=5 logRequests=3

The local OTLP summary captured exported spans named openclaw.run, openclaw.harness.run, openclaw.context.assembled, openclaw.message.delivery, and the GenAI model-call span chat gpt-5.5, with no raw diagnostic id/content attributes exported and no model-call error attributes.

  • Observed result after fix: The qa-channel scenario completed successfully and diagnostics-otel exported traces, metrics, and logs through the local OTLP receiver. Focused regression tests also prove the openclaw.message.processed lifecycle span, harness/model child relationships, delivery span parentage, and duplicate/skipped dispatch diagnostics remain inside the active inbound trace.
  • What was not tested: A live Slack account plus Tempo UI was not run from this environment.
  • Proof limitations or environment constraints: The real behavior smoke uses the repo QA harness and mock provider rather than external Slack/Tempo credentials. It proves real gateway and diagnostics-otel export behavior through OTLP, but it is not a redacted production Slack/Tempo screenshot.
  • Before evidence (optional but encouraged): Issue Correlate Slack/channel message diagnostics into a single trace #88811 documents the before state: Slack diagnostics produced disconnected OTel traces instead of one message waterfall.

Tests and validation

  • node scripts/run-vitest.mjs extensions/diagnostics-otel/src/service.test.ts src/channels/turn/kernel.test.ts src/agents/harness/v2.test.ts
  • node scripts/run-vitest.mjs extensions/diagnostics-otel/src/service.test.ts src/channels/turn/kernel.test.ts src/agents/harness/v2.test.ts src/auto-reply/reply/dispatch-from-config.test.ts -t "keeps duplicate skip diagnostics inside the active inbound trace"
  • OPENCLAW_VITEST_MAX_WORKERS=2 OPENCLAW_VITEST_SHARD_NAME=core-runtime-infra-file-safety OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 OPENCLAW_TEST_PROJECTS_PARALLEL=2 node scripts/test-projects.mjs src/infra/boundary-file-read.test.ts src/infra/boundary-path.test.ts src/infra/hardlink-guards.test.ts src/infra/replace-file.test.ts src/infra/resolve-system-bin.test.ts src/infra/safe-package-install.test.ts src/infra/stable-node-path.test.ts src/infra/watch-node.test.ts
  • pnpm check:test-types
  • OPENCLAW_ADDITIONAL_BOUNDARY_SHARD=2/4,3/4,4/4 OPENCLAW_ADDITIONAL_BOUNDARY_CONCURRENCY=4 node scripts/run-additional-boundary-checks.mjs
  • pnpm lint --threads=8
  • pnpm qa:otel:smoke -- --collector local --output-dir .artifacts/qa-e2e/otel-trace-waterfall-pr88821

Remote validation on head 12f51001e4dd388e111a5d1d1d90d428e712bca8:

  • check-test-types passed.
  • check-additional-boundaries-a passed.
  • check-additional-boundaries-bcd passed.
  • checks-node-core-runtime-infra-file-safety passed.
  • checks-node-core-runtime-media-ui passed.
  • Real behavior proof passed.
  • check-lint, check-prod-types, check-shrinkwrap, check-guards, and the node shards reported green at the latest check.

node scripts/crabbox-wrapper.mjs run -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed did not reach project checks because local Crabbox failed its binary sanity check: [crabbox] selected binary failed basic --version/--help sanity checks.

Risk checklist

  • Did user-visible behavior change? No.
  • Did config, environment, or migration behavior change? No.
  • Did security, auth, secrets, network, or tool execution behavior change? No.
  • Highest-risk area: Diagnostic ordering and OTel parentage around message, harness, model, and delivery lifecycle events.
  • Mitigation: Focused OTel exporter regression coverage, channel kernel trace-scope coverage, duplicate-path trace coverage, local OTLP smoke proof, and green focused CI lanes.

Current review state

The branch has been rebased onto origin/main (9cb347e4c364a42ce63788710ff6059e6464f711) and the previous dirty merge state is resolved. The earlier file-safety timeout was reproduced locally, traced to a watch-node test fake already fixed upstream, and the rebased PR now passes the remote file-safety shard.

Remaining reviewer decision: whether the local qa-channel OTLP smoke proof is sufficient for this diagnostics PR, or whether maintainers still require a live Slack + Tempo artifact before merge.

AI-assisted change: implemented with Codex.

@openclaw-barnacle openclaw-barnacle Bot added extensions: diagnostics-otel Extension: diagnostics-otel agents Agent runtime and tooling size: M maintainer Maintainer-authored PR labels May 31, 2026
@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 1, 2026, 4:26 PM ET / 20:26 UTC.

Summary
The branch adds channel-message diagnostic trace scoping, harness/run trace propagation, OTel lifecycle span retention and parenting, plugin test-runtime diagnostic helpers, and regression coverage for the trace waterfall.

PR surface: Source +410, Tests +1179, Generated 0. Total +1589 across 12 files.

Reproducibility: yes. at source level: current docs promise trace inheritance, while current main does not create a channel-message trace scope and diagnostics-otel starts message.processed only at completion. I did not run a live Slack reproduction in this read-only review.

Review metrics: 1 noteworthy metric.

  • Plugin test-runtime exports: 3 added, 0 removed. The diff expands the public plugin test facade and generated SDK baseline, so maintainers should notice the contract change before merge.

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:

  • Maintainers should decide whether qa-channel OTLP proof is enough or request live Slack plus Tempo output.
  • Confirm the three new plugin-test-runtime exports are an intentional public test SDK surface.

Risk before merge

  • [P1] Trace-retention and parentage changes affect observability truth: a wrong edge would not break message delivery but would make OTel waterfalls misleading.
  • [P1] The proof covers qa-channel with a local OTLP receiver and mock provider, not live Slack plus Tempo, so maintainers must decide whether external-transport proof is required.
  • [P1] The PR adds three plugin-test-runtime exports and updates the SDK baseline hash, creating a new test facade surface that owners should accept explicitly.

Maintainer options:

  1. Accept current proof and facade (recommended)
    Maintainers can accept the qa-channel OTLP smoke plus focused tests as sufficient for this shared diagnostics path and merge after normal owner review.
  2. Require live Slack plus Tempo proof
    If owners need external-transport confidence, ask for a redacted Slack run with Tempo or collector output showing one trace waterfall before merge.
  3. Narrow the test SDK export
    If plugin-test-runtime should not expose these helpers, replace the added exports with a narrower internal test seam and regenerate the API baseline.

Next step before merge

  • [P2] Human owner review is the remaining action; there is no narrow automated repair from this pass, but maintainers need to accept the proof threshold and SDK test facade expansion.

Security
Cleared: No concrete security or supply-chain regression was found; the diff does not change dependencies, workflows, secrets, auth, or execution policy, and added tests continue to check diagnostic identifier/content redaction.

Review details

Best possible solution:

Land the shared channel/harness/Otel trace fix after owner acceptance of the qa-channel OTLP proof and the new test-runtime helper surface; otherwise narrow the proof or export requirements before merge.

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

Yes at source level: current docs promise trace inheritance, while current main does not create a channel-message trace scope and diagnostics-otel starts message.processed only at completion. I did not run a live Slack reproduction in this read-only review.

Is this the best way to solve the issue?

Yes, this appears to be the right shared-layer fix rather than a Slack-only workaround: it scopes the channel kernel, harness lifecycle, and OTel exporter together. The remaining question is owner acceptance of the proof threshold and public test helper export.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add merge-risk: 🚨 compatibility: The PR changes a plugin SDK test facade and generated API baseline, which creates or extends a public test contract.

Label justifications:

  • P2: This is a normal-priority observability bug fix with limited runtime blast radius but meaningful operator impact.
  • merge-risk: 🚨 compatibility: The PR changes a plugin SDK test facade and generated API baseline, which creates or extends a public test contract.
  • merge-risk: 🚨 other: The main merge risk is diagnostics correctness: bad async parent retention would produce misleading OTel traces without breaking normal message delivery.
  • 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 body includes after-fix live output from a qa-channel QA run through a real gateway child process, diagnostics-otel, a local OTLP receiver, and mock provider; live Slack plus Tempo remains an owner proof-threshold choice, not an absent-proof blocker.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix live output from a qa-channel QA run through a real gateway child process, diagnostics-otel, a local OTLP receiver, and mock provider; live Slack plus Tempo remains an owner proof-threshold choice, not an absent-proof blocker.
Evidence reviewed

PR surface:

Source +410, Tests +1179, Generated 0. Total +1589 across 12 files.

View PR surface stats
Area Files Added Removed Net
Source 7 471 61 +410
Tests 4 1207 28 +1179
Docs 0 0 0 0
Config 0 0 0 0
Generated 1 2 2 0
Other 0 0 0 0
Total 12 1680 91 +1589

What I checked:

  • Current main lacks channel message trace scope: Current main runs prepared channel turns directly through record and dispatch without creating a per-message diagnostic trace scope, so channel callbacks can run outside the request trace promised by docs. (src/channels/turn/kernel.ts:453, fe97c6000c5c)
  • PR adds shared channel trace scope: The PR wraps runPreparedChannelTurnCore in createDiagnosticTraceContextFromActiveScope and runWithDiagnosticTraceContext, putting the shared channel turn kernel under a message trace before dispatch. (src/channels/turn/kernel.ts:463, 1ab07ca2e9b8)
  • Current OTel message span is completion-only: Current main records message.dispatch.started only as a metric and creates openclaw.message.processed at completion without a diagnostic parent context, which matches the reported split-root shape. (extensions/diagnostics-otel/src/service.ts:1963, fe97c6000c5c)
  • PR starts and retains lifecycle spans: The PR starts openclaw.message.processed at dispatch start, completes tracked lifecycle spans at processed/completed events, and retains completed span contexts briefly so late async delivery/model children can still parent correctly. (extensions/diagnostics-otel/src/service.ts:2182, 1ab07ca2e9b8)
  • PR scopes harness and plugin runs: The PR emits harness diagnostics under the active harness trace, emits plugin run.started/run.completed under a child run trace, and runs send/resolve inside that run trace. (src/agents/harness/v2.ts:315, 1ab07ca2e9b8)
  • Regression coverage exercises shared waterfall: New tests assert message, harness, usage, model-call, and log-record diagnostics share one trace in the channel kernel, plus OTel parent-child relationships across message, harness, run, usage, delivery, duplicate, and retained async paths. (src/channels/turn/kernel.test.ts:693, 1ab07ca2e9b8)

Likely related people:

  • steipete: Current-main blame for the diagnostics-otel message span logic, shared channel turn kernel, and harness lifecycle code points to Peter Steinberger in commit 6668eb8. (role: recent area contributor; confidence: high; commits: 6668eb82258c; files: extensions/diagnostics-otel/src/service.ts, src/channels/turn/kernel.ts, src/agents/harness/v2.ts)
  • vincentkoc: The release changelog credits @vincentkoc for prior diagnostics/OTEL harness lifecycle telemetry and traceparent propagation, which are sibling behaviors this PR extends. (role: feature-history contributor; confidence: medium; commits: e93216080aa1; files: CHANGELOG.md, extensions/diagnostics-otel/src/service.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.

@bek91 bek91 force-pushed the fix/fix-trace-waterfall branch from 5c9b833 to 31d588e Compare May 31, 2026 23:29
@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: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. labels May 31, 2026
@bek91 bek91 changed the title [codex] Correlate channel message diagnostics into one trace trace: Correlate channel message diagnostics into one trace Jun 1, 2026
@bek91 bek91 force-pushed the fix/fix-trace-waterfall branch 2 times, most recently from 8719ff6 to 2d0b308 Compare June 1, 2026 01:54
@bek91 bek91 marked this pull request as ready for review June 1, 2026 04:42
@bek91

bek91 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@bek91

bek91 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

To resolve #88811

@openclaw-barnacle openclaw-barnacle Bot added the docs Improvements or additions to documentation label Jun 1, 2026
@bek91 bek91 force-pushed the fix/fix-trace-waterfall branch 2 times, most recently from 7004b47 to cf097ae Compare June 1, 2026 13:12
@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 Jun 1, 2026
@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui size: XL and removed size: L labels Jun 1, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 1, 2026
@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. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 1, 2026
@bek91 bek91 requested a review from a team as a code owner June 1, 2026 19:10
@openclaw-barnacle openclaw-barnacle Bot added the gateway Gateway runtime label Jun 1, 2026
@bek91

bek91 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@bek91

bek91 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

[P1] The main remaining risk is observability-specific: async trace retention and parentage changes could produce split or misleading OTel waterfalls even when message delivery still works.

I don’t think the Clawsweeper item is a real P1 as stated. The normal/success waterfall path is covered and working:

  • Channel turn creates one active diagnostic trace scope in src/channels/turn/kernel.ts:463
  • Message lifecycle spans are tracked and retained after message.processed in extensions/diagnostics-otel/src/service.ts:2221
  • Late async delivery spans parent through the active/retained message context in extensions/diagnostics-otel/src/service.ts:2272
  • Harness/run completed paths use completeTrackedLifecycleSpan, so late async children can still attach to the completed span in extensions/diagnostics-otel/src/service.ts:2683

Reran the focused trace-parenting tests: 2 files passed, 13 focused tests passed, 103 skipped

@bek91 bek91 force-pushed the fix/fix-trace-waterfall branch from ef11443 to 1ab07ca Compare June 1, 2026 20:13
@openclaw-barnacle openclaw-barnacle Bot removed the gateway Gateway runtime label Jun 1, 2026
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. label Jun 1, 2026
@steipete steipete self-assigned this Jun 2, 2026
@steipete

steipete commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Land-ready proof after maintainer refactor.

Summary:

  • Removed the internal AgentHarnessV2 adapter surface and renamed the file to src/agents/harness/lifecycle.ts.
  • src/agents/harness/selection.ts now runs the canonical AgentHarness lifecycle directly; no second harness contract remains.
  • Reworked lifecycle tests around AgentHarness behavior and updated the QA scenario codeRef away from the removed v2 path.

Local proof on head 04e9189c15480d53663d533a04c9883164b4dd54:

  • node scripts/run-vitest.mjs src/agents/harness/lifecycle.test.ts src/agents/harness/selection.test.ts src/channels/turn/kernel.test.ts passed after rebase, 2 shards in 9.90s.
  • git diff --check origin/main...HEAD passed.
  • /Users/steipete/Projects/agent-scripts/skills/autoreview/scripts/autoreview --mode local reported no accepted/actionable findings.
  • pnpm check:changed passed in Testbox run tbx_01kt3xtrm70qc7nb90cqv5rah1, GitHub Actions run https://github.com/openclaw/openclaw/actions/runs/26813740053, total 7m12.165s.

CI proof:

  • PR checks passed on head 04e9189c15480d53663d533a04c9883164b4dd54, including build-artifacts, check-lint, check-prod-types, check-test-types, critical quality shards, security shards, and Real behavior proof.

Known proof gap:

  • No separate manual live OTEL collector run beyond the PR's existing real-behavior proof and CI/Testbox coverage.

@steipete steipete merged commit bce3d5b into main Jun 2, 2026
167 of 168 checks passed
@steipete steipete deleted the fix/fix-trace-waterfall branch June 2, 2026 10:38
steipete added a commit that referenced this pull request Jun 2, 2026
Refactor the agent harness surface after PR #88821 by moving compaction dispatch into its own module, splitting the harness type into explicit capability interfaces, and renaming the private agent-core class declaration to `CoreAgentHarness` while preserving the exported `AgentHarness` contract.

Verification:
- `node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/command/cli-compaction.test.ts src/agents/embedded-agent-runner/compact.hooks.test.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/messages.test.ts`
- `pnpm build`
- autoreview clean
- `pnpm check:changed` passed on Testbox `tbx_01kt407hq8sv1csm287pdj3fmp`
- PR CI merge state `CLEAN`
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 3, 2026
Refactor the agent harness surface after PR openclaw#88821 by moving compaction dispatch into its own module, splitting the harness type into explicit capability interfaces, and renaming the private agent-core class declaration to `CoreAgentHarness` while preserving the exported `AgentHarness` contract.

Verification:
- `node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/command/cli-compaction.test.ts src/agents/embedded-agent-runner/compact.hooks.test.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/messages.test.ts`
- `pnpm build`
- autoreview clean
- `pnpm check:changed` passed on Testbox `tbx_01kt407hq8sv1csm287pdj3fmp`
- PR CI merge state `CLEAN`
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
Refactor the agent harness surface after PR openclaw#88821 by moving compaction dispatch into its own module, splitting the harness type into explicit capability interfaces, and renaming the private agent-core class declaration to `CoreAgentHarness` while preserving the exported `AgentHarness` contract.

Verification:
- `node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/command/cli-compaction.test.ts src/agents/embedded-agent-runner/compact.hooks.test.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/messages.test.ts`
- `pnpm build`
- autoreview clean
- `pnpm check:changed` passed on Testbox `tbx_01kt407hq8sv1csm287pdj3fmp`
- PR CI merge state `CLEAN`
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
Refactor the agent harness surface after PR openclaw#88821 by moving compaction dispatch into its own module, splitting the harness type into explicit capability interfaces, and renaming the private agent-core class declaration to `CoreAgentHarness` while preserving the exported `AgentHarness` contract.

Verification:
- `node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/command/cli-compaction.test.ts src/agents/embedded-agent-runner/compact.hooks.test.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/messages.test.ts`
- `pnpm build`
- autoreview clean
- `pnpm check:changed` passed on Testbox `tbx_01kt407hq8sv1csm287pdj3fmp`
- PR CI merge state `CLEAN`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling docs Improvements or additions to documentation extensions: diagnostics-otel Extension: diagnostics-otel extensions: qa-lab maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P2 Normal backlog priority with limited blast radius. 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.

Correlate Slack/channel message diagnostics into a single trace

2 participants