Skip to content

fix(cli): preserve first line of channels logs at window boundary#84106

Merged
clawsweeper[bot] merged 3 commits into
openclaw:mainfrom
BSG2000:fix/channels-logs-drop-first-line
May 19, 2026
Merged

fix(cli): preserve first line of channels logs at window boundary#84106
clawsweeper[bot] merged 3 commits into
openclaw:mainfrom
BSG2000:fix/channels-logs-drop-first-line

Conversation

@BSG2000

@BSG2000 BSG2000 commented May 19, 2026

Copy link
Copy Markdown
Contributor

Summary

readTailLines in src/commands/channels/logs.ts silently drops the first complete line of openclaw channels logs output whenever the rolling tail window starts exactly on a line boundary (i.e. the byte immediately before start is \n).

The sister implementation in src/logging/log-tail.ts (readLogSlice) already handles this correctly — it reads a single prefix byte and only skips the first line when the preceding byte is not a newline. That fix landed in #42904 but was never applied to the parallel readTailLines helper.

Reproduction (against current main and published openclaw@2026.5.12)

Build a log file of exactly 2 × MAX_BYTES = 2_000_000 bytes made of 10_000 fixed-size lines (200 bytes each). The 1 MB read window starts at byte 1_000_000, which is exactly the byte after the \n of line 4999, so line 5000 should be the first line of the output.

Before the fix the line at the window boundary is silently dropped (4999 lines returned instead of 5000, first line is filler-5001 instead of FIRST-LINE-IN-WINDOW). See Real behavior proof below for the full live openclaw channels logs runs.

Fix

Mirror the proven-correct pattern from readLogSlice in src/logging/log-tail.ts: read one byte at start - 1 and only drop the first line when that byte is not \n.

Regression test

Added a new case in src/commands/channels.logs.test.ts that constructs a deterministic 2 MB log file of fixed 200-byte JSON log lines, runs channelsLogsCommand, and asserts the line at the window boundary appears and last-line is the final entry. The test fails on main and passes with the fix.

✓ commands  src/commands/channels.logs.test.ts (5 tests) 868ms
   ✓ returns the first line of the tail window when start aligns with a line boundary  806ms

 Test Files  1 passed (1)
      Tests  5 passed (5)

Impact

  • Severity: low — only triggers on exact byte alignment with the read window, which depends on file size.
  • User-visible symptom: openclaw channels logs occasionally misses the oldest line of the visible tail. Hard to spot because the tail keeps moving.

Scope

  • Surgical change to one function (readTailLines) + one regression test + one CHANGELOG entry.
  • No public API changes, no behaviour change for the common path (start === 0 or first byte ≠ \n).

Real behavior proof

Behavior or issue addressed: openclaw channels logs silently drops one log line from the tail output when the file size is large enough that the rolling 1 MB read window starts exactly on a line boundary (file[start - 1] === '\n').

Real environment tested: WSL Ubuntu 24.04, Node 22.x. Tested against the published openclaw@2026.5.12 binary (installed via npm install openclaw@2026.5.12) for the BEFORE run, and against the locally-built CLI from this PR branch (fix/channels-logs-drop-first-line @ 3af767a49b) for the AFTER run. Both runs target the same on-disk log file at /tmp/openclaw/openclaw-2026-05-19.log and use OPENCLAW_LOG_LEVEL=silent so the CLI's own startup logging does not append to the file and shift the alignment offset.

Exact steps or command run after this patch:

  1. Build a deterministic 2 MB log file (10 000 JSON-log lines × 200 bytes each), with line index 5000 set to a recognizable marker (FIRST-LINE-IN-WINDOW) and line 9999 set to LAST-LINE-MARKER. The byte at size - 1_000_001 is verified to be \n so the 1 MB tail window starts exactly on a line boundary.
  2. Drop that file into the location the CLI's rolling log resolver chooses (/tmp/openclaw/openclaw-2026-05-19.log).
  3. Run OPENCLAW_LOG_LEVEL=silent openclaw channels logs --channel slack --lines 6000 --json against the published openclaw@2026.5.12 (BEFORE).
  4. Build this PR branch with pnpm run build and run OPENCLAW_LOG_LEVEL=silent node ./openclaw.mjs channels logs --channel slack --lines 6000 --json against the same file (AFTER).
  5. Parse the JSON output and count returned lines, log first/last messages, and check whether FIRST-LINE-IN-WINDOW appears.

Evidence after fix:

BEFORE — published openclaw@2026.5.12:

size: 2000000   byte at (size-1_000_001): "\n"          ← perfect alignment

$ openclaw --version
OpenClaw 2026.5.12 (f066dd2)
$ OPENCLAW_LOG_LEVEL=silent openclaw channels logs --channel slack --lines 6000 --json
returned lines: 4999
first message : filler-5001
last message  : LAST-LINE-MARKER
contains FIRST-LINE-IN-WINDOW: False        ← bug: line 5000 silently dropped

AFTER — PR branch fix/channels-logs-drop-first-line @ 3af767a49b:

size: 2000000   byte at (size-1_000_001): "\n"          ← perfect alignment

$ node ./openclaw.mjs --version
OpenClaw 2026.5.19 (3af767a)
$ OPENCLAW_LOG_LEVEL=silent node ./openclaw.mjs channels logs --channel slack --lines 6000 --json
returned lines: 5000
first message : FIRST-LINE-IN-WINDOW
last message  : LAST-LINE-MARKER
contains FIRST-LINE-IN-WINDOW: True         ← fixed: boundary line preserved

Observed result after fix: With the PR applied, the CLI returns the full 5000 lines in the read window starting with FIRST-LINE-IN-WINDOW; without the fix it returns 4999 lines starting with filler-5001 (line 5000 silently dropped). The unit test added in src/commands/channels.logs.test.ts reproduces the same byte-perfect alignment via channelsLogsCommand and asserts the boundary line and last line are both present — it fails on main and passes on this branch.

What was not tested: No interactive/TUI mode of openclaw channels logs was exercised (the bug lives entirely in the JSON/text shared helper). No real production rolling-log rotation was triggered; the test uses a single hand-crafted log file at the exact byte size required to hit the alignment, since natural log files only hit this edge case occasionally.

readTailLines in src/commands/channels/logs.ts unconditionally dropped
the first line of the read window whenever start > 0, even when the
read happened to align exactly on a line boundary (file[start-1] === '\n').
That silently loses one valid log line every time the rolling tail
window happens to land on a newline.

readLogSlice in src/logging/log-tail.ts already handles this case by
reading a single prefix byte and only slicing the first line when the
preceding byte is not a newline. This change mirrors that pattern in
readTailLines and adds a regression test that constructs a 2 MB log
file of fixed-size lines so the 1 MB window starts exactly on a line
boundary.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

Summary
The PR updates openclaw channels logs tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.

Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR comments provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

PR rating
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Summary: The PR has strong terminal proof, a focused implementation, matching regression coverage, and no blocking findings.

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.

PR egg
✨ Hatched: 🥚 common Brave Shellbean

       _..------.._          
    .-'  .-.  .-.  '-.       
   /    ( * )( * )    \      
  |        .--.        |     
  |   <\   ====   />   |     
   \    '.______.'    /      
    '-._   ____   _.-'       
        `-.____.-'           
       __/|_||_|\__          
      /__.'    '.__\         
       .-----------.         
      '-------------'        

Rarity: 🥚 common.
Trait: hums during re-review.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Brave Shellbean in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • How to hatch it: reach status: 👀 ready for maintainer look or status: 🚀 automerge armed; that usually means sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

Real behavior proof
Override: A maintainer applied proof: override for this PR.

Risk before merge
Why this matters: - This read-only review did not run the regression test locally; exact-head CI and the existing automerge validation should remain the merge gate.

Maintainer options:

  1. Decide the mitigation before merge
    Land the narrow prefix-byte guard and regression test through the existing exact-head automerge and required-check gates.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge
No ClawSweeper repair job is needed; the PR is already opted into automerge, has proof override, and has no actionable review findings.

Security
Cleared: The diff only changes local log-tail reading logic, a focused Vitest regression, and changelog text; no security or supply-chain concern was found.

Review details

Best possible solution:

Land the narrow prefix-byte guard and regression test through the existing exact-head automerge and required-check gates.

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

Yes. Source inspection on current main shows the unconditional first-line drop, and the PR comments provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Is this the best way to solve the issue?

Yes. Mirroring the already-used readLogSlice prefix-byte rule is the narrowest maintainable fix and avoids changing channel filtering, parsing, CLI options, or log-file resolution.

Label justifications:

  • P2: The PR fixes a real but low-blast-radius CLI log-tail correctness bug with focused code and test coverage.

What I checked:

  • Current main drops the first line whenever the tail window is nonzero: readTailLines splits the 1 MB tail window and unconditionally runs lines.slice(1) when start > 0, so a complete line is also dropped when file[start - 1] is already a newline. (src/commands/channels/logs.ts:73, f07c87405c30)
  • Existing log-tail implementation has the intended boundary rule: readLogSlice reads one byte before start and only discards the first split line when that prefix byte is not \n, matching the PR's proposed fix shape. (src/logging/log-tail.ts:114, f07c87405c30)
  • PR diff is narrow and matches the existing pattern: The PR adds the prefix-byte read to readTailLines, changes the slice guard to start > 0 && prefix !== "\n", adds a deterministic 2 MB boundary regression, and adds one changelog line. (src/commands/channels/logs.ts:63, 284b312b315e)
  • Contributor supplied real CLI proof and maintainer applied proof override: The PR comments include before/after terminal output showing published openclaw@2026.5.12 misses FIRST-LINE-IN-WINDOW while the PR branch keeps it, and the live labels include proof: override. (284b312b315e)
  • History ties the affected helper to the channels logs refactor: The channels logs command and its original unconditional if (start > 0) lines = lines.slice(1) tail helper appear in the channels rename refactor. (src/commands/channels/logs.ts:1, 90342a4f3a5b)
  • Related history explains the sister implementation mentioned by the PR: The local log-tail helper was introduced with the prefix-byte guard, and the later related PR exported resolveLogFile for channels logs but did not apply that boundary fix to readTailLines. (src/logging/log-tail.ts:1, 306fe841f54b)

Likely related people:

  • steipete: Peter Steinberger authored the channels logs refactor that carried the original unconditional slice behavior and also introduced the existing readLogSlice prefix-byte pattern used as the fix model. (role: feature-history owner; confidence: high; commits: 90342a4f3a5b, 306fe841f54b; files: src/commands/channels/logs.ts, src/logging/log-tail.ts)
  • ethanclaw: The related merged logs PR updated channels logs to use the shared rolling log resolver and added adjacent regression coverage in the same test file. (role: adjacent recent contributor; confidence: medium; commits: 492e2a3060db; files: src/commands/channels/logs.ts, src/commands/channels.logs.test.ts, src/logging/log-tail.ts)
  • Takhoffman: The PR timeline shows Takhoffman applied proof: override and requested ClawSweeper automerge for this exact head, making them relevant for final merge routing rather than original code provenance. (role: review and automation requester; confidence: medium; files: src/commands/channels/logs.ts, src/commands/channels.logs.test.ts)

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

@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. labels May 19, 2026
@BSG2000

BSG2000 commented May 19, 2026

Copy link
Copy Markdown
Contributor Author

Real CLI proof (per ClawSweeper request)

Setup: identical 2 MB log file (10 000 × 200-byte JSON lines) deliberately crafted so the rolling 1 MB tail window starts exactly on a line boundary.

size: 2000000   byte at (size-1_000_001): "\n"   ← perfect alignment

Line at index 5000 is FIRST-LINE-IN-WINDOW (should be the first line returned), line at index 9999 is LAST-LINE-MARKER.

BEFORE — published openclaw@2026.5.12 (against the same file)

$ openclaw --version
OpenClaw 2026.5.12 (f066dd2)
$ OPENCLAW_LOG_LEVEL=silent openclaw channels logs --channel slack --lines 6000 --json | jq ...
returned lines: 4999
first message : filler-5001
last message  : LAST-LINE-MARKER
contains FIRST-LINE-IN-WINDOW: False        ← bug: line 5000 silently dropped

AFTER — PR branch fix/channels-logs-drop-first-line @ 3af767a49b

$ node ./openclaw.mjs --version
OpenClaw 2026.5.19 (3af767a)
$ OPENCLAW_LOG_LEVEL=silent node ./openclaw.mjs channels logs --channel slack --lines 6000 --json | jq ...
returned lines: 5000
first message : FIRST-LINE-IN-WINDOW
last message  : LAST-LINE-MARKER
contains FIRST-LINE-IN-WINDOW: True         ← fixed: line preserved

OPENCLAW_LOG_LEVEL=silent is set on both runs so the CLI's own startup logging does not append to the test file and shift the alignment offset.

Reproduction script

The exact build/run wrapper used to produce these numbers is proof_after.sh + proof_before_clean.sh from this session. The core test-file builder (same byte-perfect layout) is also covered by the unit test added in src/commands/channels.logs.test.ts (5/5 passing on the PR branch, fails on main before the fix).

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 19, 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:

@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: 🧂 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 19, 2026
@Takhoffman Takhoffman added the proof: override Maintainer override for the external PR real behavior proof gate. label May 19, 2026
@Takhoffman

Copy link
Copy Markdown
Contributor

@clawsweeper automerge

@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 19, 2026
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper automerge is enabled.

  • Head: 284b312b315e
  • Label: clawsweeper:automerge
  • Action: exact-head review queued (workflow sweep.yml, event repository_dispatch).
  • Flow: review this head, repair/rebase only if needed, then re-review the exact repaired head before merge.

Draft PRs stay fix-only until GitHub marks them ready for review. Pause with /clawsweeper stop.

Automerge progress:

  • 2026-05-19 13:02:05 UTC review queued 3af767a49bca (queued)
  • 2026-05-19 13:08:34 UTC review passed 3af767a49bca (structured ClawSweeper verdict: pass (sha=3af767a49bca7b22059f389f195066436b554...)
  • 2026-05-19 13:21:43 UTC review queued 284b312b315e (after repair)
  • 2026-05-19 13:27:26 UTC review passed 284b312b315e (structured ClawSweeper verdict: pass (sha=284b312b315e087b501b55cfcc99d20f42ee1...)
  • 2026-05-19 13:27:47 UTC merged 284b312b315e (merged by ClawSweeper automerge)
  • 2026-05-19 13:27:52 UTC review queued 284b312b315e (queued)

@clawsweeper clawsweeper Bot added status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 19, 2026
@clawsweeper clawsweeper Bot merged commit b7ba7c3 into openclaw:main May 19, 2026
97 checks passed

@martingarramon martingarramon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fix is a correct port of the identical logic already in src/logging/log-tail.ts:114-118,126 (readLogSlice). The PR reads one byte before the window start and only skips the first partial line when that byte is not \n — matching readLogSlice exactly. The test at channels.logs.test.ts:144 reproduces the boundary case from the PR body (2×MAX_BYTES file, window starts on a line boundary) and confirms the first line is no longer dropped.

@BSG2000 BSG2000 deleted the fix/channels-logs-drop-first-line branch May 19, 2026 14:05
frankhli843 added a commit to gemmaclaw/gemmaclaw that referenced this pull request May 20, 2026
* feat(ui): tool name style in usage panel (openclaw#84310)

Summary:
- This PR adds scoped truncation and hover titles to usage-panel context-breakdown names and adds a changelog entry crediting the source PR.
- Reproducibility: yes. at source/proof level: current main renders long context names without truncation or t ... he overflow before and ellipsis/tooltip after. I did not run a live browser session in this read-only pass.

Automerge notes:
- PR branch already contained follow-up commit before automerge: feat(ui): tool name style in usage panel

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

Prepared head SHA: 396e405
Review: openclaw#84310 (comment)

Co-authored-by: Rain120 <1085131904@qq.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(clawhub): preserve base URL path prefix [AI-assisted] (openclaw#83982)

Summary:
- The PR updates `src/infra/clawhub.ts` URL joining, adds a path-prefix regression test in `src/infra/clawhub.test.ts`, and adds a changelog bullet.
- Reproducibility: yes. Source inspection plus a direct Node URL check show current main drops `/clawhub` when resolving a leading-slash API path against a prefixed base URL.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(clawhub): preserve base URL path prefix [AI-assisted]

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

Prepared head SHA: 7bb2cb8
Review: openclaw#83982 (comment)

Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(docker): keep codex plugin in release images

Ported from upstream d0f7c8f. Adds OPENCLAW_EXTENSIONS=diagnostics-otel,codex
to both amd64 and arm64 Docker release builds and adds regression test.

* fix(cli): format acp client errors with formatErrorMessage (openclaw#83904) (openclaw#84080)

Summary:
- The PR changes `openclaw acp client` error handling to use `formatErrorMessage`, adds a plain-object rejection regression test, and adds a changelog entry.
- Reproducibility: yes. Current main visibly sends `openclaw acp client` caught errors through `String(err)`,  ...  catch already uses `formatErrorMessage`; I did not run a live failing ACP server in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): format acp client errors with formatErrorMessage (openclaw#83904)

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

Prepared head SHA: 69ef0e7
Review: openclaw#84080 (comment)

Co-authored-by: HCL <chenglunhu@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): preserve first line of channels logs at window boundary (openclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): preserve equals in root option values [AI-assisted] (openclaw#84107)

Summary:
- This PR updates CLI root option parsing to preserve embedded equals signs, adds focused Vitest coverage for inline and space-separated values, and records the fix in the changelog.
- Reproducibility: yes. by source inspection: current main uses `raw.split("=", 2)`, so `--token=abc=def` returns only `abc`; the PR body also supplies after-fix live output for the same path.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): preserve equals in root option values [AI-assisted]

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

Prepared head SHA: 8a15801
Review: openclaw#84107 (comment)

Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): reject out-of-range port numbers in parsePort (openclaw#83900) (openclaw#84008)

Summary:
- The PR adds a 65,535 upper-bound check to the shared CLI `parsePort` helper, a colocated regression test, and a changelog entry for the linked port-range bug.
- Reproducibility: yes. Source inspection on current main shows `parsePort('99999')` delegates to `parseStrict ... sitive safe integer, so the return would be `99999`; I did not execute it because this review is read-only.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): reject out-of-range port numbers in parsePort (openclaw#83900)

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

Prepared head SHA: 9ad0705
Review: openclaw#84008 (comment)

Co-authored-by: HCL <chenglunhu@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(agents): ignore duplicate embedded run clears

* fix(agents): ignore duplicate embedded run clears

* test(agents): fix embedded run clear lint

* docs(changelog): note embedded run clear fix

---------

Co-authored-by: Galin Iliev <Galin.Iliev@microsoft.com>

* fix(config): allow bundled provider timeout overlays (openclaw#83267)

* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models

* fix(whatsapp): clarify inbound group diagnostics (openclaw#83969)

Summary:
- The PR updates WhatsApp inbound listener and group-drop diagnostics, adds focused tests, and documents that observed but unregistered groups must be admitted through `channels.whatsapp.groups`.
- Reproducibility: yes. from source inspection: current main still emits the DM-only startup log and vague gro ... sions/whatsapp/src/auto-reply/monitor.ts` and `extensions/whatsapp/src/auto-reply/monitor/group-gating.ts`.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(whatsapp): clarify group drop guidance
- PR branch already contained follow-up commit before automerge: fix(whatsapp): make inbound diagnostics policy-aware
- PR branch already contained follow-up commit before automerge: fix(whatsapp): clarify inbound group diagnostics

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

Prepared head SHA: 0da24e3
Review: openclaw#83969 (comment)

Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

---------

Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Rain120 <1085131904@qq.com>
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: hcl <chenglunhu@gmail.com>
Co-authored-by: Thomas Krohnfuß <BSG2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Galin Iliev <iliev@galcho.com>
Co-authored-by: Galin Iliev <Galin.Iliev@microsoft.com>
Co-authored-by: Gio Della-Libera <giodl73@gmail.com>
Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
markfietje pushed a commit to markfietje/openclaw that referenced this pull request May 20, 2026
…4106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312b315e087b501b55cfcc99d20f42ee1173
Review: openclaw/openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
markfietje pushed a commit to markfietje/openclaw that referenced this pull request May 20, 2026
…4106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312b315e087b501b55cfcc99d20f42ee1173
Review: openclaw/openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
…enclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

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

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge commands Command implementations P2 Normal backlog priority with limited blast radius. proof: override Maintainer override for the external PR real behavior proof gate. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants