Skip to content

fix(tlon): cap SSE payload JSON.parse at 16 MiB to prevent OOM#101274

Merged
steipete merged 10 commits into
openclaw:mainfrom
Pick-cat:fix/tlon-sse-bounded-json-parse
Jul 12, 2026
Merged

fix(tlon): cap SSE payload JSON.parse at 16 MiB to prevent OOM#101274
steipete merged 10 commits into
openclaw:mainfrom
Pick-cat:fix/tlon-sse-bounded-json-parse

Conversation

@Pick-cat

@Pick-cat Pick-cat commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

extensions/tlon/src/urbit/sse-client.ts accepted two unbounded inputs from an external Urbit ship:

  1. an unterminated SSE event could grow the retained stream buffer without limit;
  2. a complete event could reach JSON.parse without a size limit.

Either path could exhaust the OpenClaw process before the event was rejected.

Why This Change Was Made

  • Cap retained SSE event data and JSON payload input at 16 MiB.
  • Reject oversized retained data before concatenating it into the pending buffer.
  • Drain complete events before applying the limit to later data from the same network chunk.
  • Decode binary chunks with TextDecoder, preserving UTF-8 code points split by transport boundaries.
  • Keep UTF-8 byte accounting exact when a UTF-16 surrogate pair is split across string chunks.
  • Hold an ambiguous trailing newline outside the event budget until the next byte proves whether it is delimiter or event data.

The 16 MiB value is an OpenClaw safety boundary, not an Urbit protocol limit. The official Eyre documentation and urbit/js-http-api parser do not specify a maximum event size.

User Impact

  • Normal and boundary-sized Tlon SSE events continue to dispatch.
  • Acceptance no longer depends on UTF-8, UTF-16, or \n\n delimiter chunk boundaries.
  • Retained event data or JSON payloads above 16 MiB fail closed with owned Tlon errors instead of growing or parsing without bound.

Evidence

  • Current candidate head: c895c97d66d030fcd1d694249f89c8677ba0e74f.
  • Aggregate Tlon code/test patch-id before and after the current-main rebase: 8a472770ce305c005a46753b7dfea92b05908975.
  • Sanitized AWS Crabbox run run_c6cf3a56ae87: public networking, no Tailscale, no instance profile, Linux Node 24.
  • Focused command: pnpm test extensions/tlon/src/urbit/sse-client.test.ts; 22/22 passed in 335 ms.
  • Fresh full-branch autoreview: clean on the exact head.
  • Exact-head hosted CI run 29185926126: completed without failing jobs after rebasing onto the extensions noUncheckedIndexedAccess and Plugin SDK declaration-budget fixes; Control UI locale parity was not scheduled for this unrelated change.
  • Release-note context and contributor credit are retained here because the repository gate keeps root CHANGELOG.md release-owned.

Proof gap

A real authenticated Tlon/Urbit ship connect and subscription smoke has not run. This host has no configured Tlon channel, and exact credential lookups for Tlon and Urbit found no item. The maintainer explicitly directed landing after this gap was disclosed; focused sanitized-AWS proof and exact-head hosted CI are complete.

@openclaw-barnacle openclaw-barnacle Bot added channel: tlon Channel integration: tlon size: XS labels Jul 7, 2026
@Pick-cat
Pick-cat force-pushed the fix/tlon-sse-bounded-json-parse branch from 76b9d74 to 71e32d0 Compare July 7, 2026 02:35
@clawsweeper

clawsweeper Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 12, 2026, 4:35 AM ET / 08:35 UTC.

Summary
The PR adds independent 16 MiB limits for retained Tlon SSE events and parsed JSON payloads, preserves incremental UTF-8 and delimiter handling, and adds focused boundary regression tests.

PR surface: Source +57, Tests +130. Total +187 across 2 files.

Reproducibility: yes. at the source boundary: current main retains unterminated event data without a limit and sends extracted JSON to JSON.parse without a size guard. The submitted negative control also demonstrates both failures, although no authenticated ship reproduction was run.

Review metrics: 1 noteworthy metric.

  • Safety boundaries: 2 added at 16 MiB. The retained framed event and extracted JSON are independently bounded, closing both unbounded external-input memory paths.

Stored data model
Persistent data-model change detected: serialized state: extensions/tlon/src/urbit/sse-client.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #101274
Summary: This PR is the viable incremental per-event implementation for the Tlon SSE memory-boundary problem.

Members:

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

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

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

Rank-up moves:

  • [P2] Allow the remaining exact-head required checks to finish before landing.

Risk before merge

  • [P1] The new fail-closed limits intentionally reject Tlon events above 16 MiB that previous versions attempted to retain or parse, and Urbit does not publish a protocol-level maximum.
  • [P1] No authenticated exact-head Tlon ship connection and subscription smoke was available; the assigned owner explicitly accepted this gap based on focused sanitized-AWS runtime proof and boundary coverage.

Maintainer options:

  1. Land with the accepted safety boundary (recommended)
    Merge after exact-head checks pass, retaining the documented 16 MiB fail-closed behavior and the assigned owner's accepted authenticated-smoke gap.
  2. Pause for authenticated Tlon proof
    Delay landing until a real ship connection and subscription smoke confirms normal delivery and oversized-event recovery on the exact head.

Next step before merge

  • [P2] No repair or product decision remains; let the remaining exact-head checks gate the assigned owner's land-ready merge path.

Security
Cleared: The patch safely bounds hostile external stream input and introduces no new dependency, permission, credential, downloaded-code, or supply-chain exposure.

Review details

Best possible solution:

Land the incremental per-event and JSON limits after the remaining exact-head required checks pass, preserving the explicit fail-closed errors and comprehensive split-boundary regression coverage.

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

Yes at the source boundary: current main retains unterminated event data without a limit and sends extracted JSON to JSON.parse without a size guard. The submitted negative control also demonstrates both failures, although no authenticated ship reproduction was run.

Is this the best way to solve the issue?

Yes. Incremental per-event bounding preserves a long-lived SSE connection better than the earlier whole-response cap proposal, and the exact-head tests cover the important byte, Unicode, delimiter, overflow, and multi-event boundaries.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Override: Authenticated Tlon proof is unavailable, but the assigned owner explicitly accepted that disclosed gap after an exact-head sanitized-AWS run, current-main negative control, focused boundary suite, and hosted CI evidence.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a focused Tlon reliability and resource-exhaustion fix with limited plugin blast radius and no evidence of a widespread active outage.
  • merge-risk: 🚨 compatibility: Previously accepted oversized events now fail closed under a locally selected limit that is not specified by the Urbit protocol.
  • merge-risk: 🚨 message-delivery: Tlon events exceeding either boundary are deliberately rejected instead of reaching subscription handlers.
  • merge-risk: 🚨 availability: The changed parser is the protection boundary against externally induced retained-buffer and JSON parsing memory exhaustion.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Override: Authenticated Tlon proof is unavailable, but the assigned owner explicitly accepted that disclosed gap after an exact-head sanitized-AWS run, current-main negative control, focused boundary suite, and hosted CI evidence.
Evidence reviewed

PR surface:

Source +57, Tests +130. Total +187 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 63 6 +57
Tests 1 130 0 +130
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 193 6 +187

What I checked:

  • Current-main bug remains: Current main incrementally concatenates incomplete SSE event text without a retained-byte limit and passes extracted data to JSON.parse without a payload-size guard. (extensions/tlon/src/urbit/sse-client.ts:231, d31eeea4080c)
  • Exact-head memory boundaries: The proposed implementation checks JSON bytes before parsing and rejects retained event text before appending data that would exceed 16 MiB. (extensions/tlon/src/urbit/sse-client.ts:29, c895c97d66d0)
  • Incremental parser correctness: The exact head drains complete events before budgeting later chunk data, uses streaming TextDecoder handling, corrects split-surrogate byte accounting, and preserves a possible split delimiter without charging it prematurely. (extensions/tlon/src/urbit/sse-client.ts:240, c895c97d66d0)
  • Boundary regression coverage: Tests cover oversized JSON, exactly 16 MiB JSON, retained-buffer overflow, draining two events whose combined chunk exceeds the cap, split UTF-8 and delimiters, and an exactly 16 MiB framed event with a split surrogate pair. (extensions/tlon/src/urbit/sse-client.test.ts:198, c895c97d66d0)
  • Upstream protocol comparison: The maintained urbit/js-http-api SSE parser incrementally buffers incomplete lines but does not define an event-size maximum, supporting the PR body's characterization of 16 MiB as an OpenClaw safety boundary rather than an Urbit protocol limit. (2ebfbd0f357f)
  • Maintainer-owned proof gap: The assigned owner reported a sanitized AWS Node 24 run with all 22 focused tests passing, clean autoreview and hosted CI, and explicitly accepted the unavailable authenticated Tlon subscription smoke before directing landing. (c895c97d66d0)

Likely related people:

  • steipete: He landed the original Tlon plugin, is assigned to this PR, authored the final parser refinements, and explicitly recorded the land-ready proof assessment. (role: assigned reviewer, merger, and recent area contributor; confidence: high; commits: c1b7f6b6ba3f, fe1528c970af, f6b9e2974a0a; files: extensions/tlon/src/urbit/sse-client.ts, extensions/tlon/src/urbit/sse-client.test.ts)
  • wca4a: The merged original Tlon/Urbit channel PR introduced the plugin and SSE client behavior that this patch hardens. (role: feature introducer; confidence: high; commits: 9cdd0c28be6d, c1b7f6b6ba3f; files: extensions/tlon/src/urbit/sse-client.ts)
  • Vincent Koc: Current-main blame attributes the present Tlon SSE client and adjacent tests to the runtime-parity commit imported immediately before this review. (role: recent merged-history contributor; confidence: medium; commits: 4d15c47e9f16; files: extensions/tlon/src/urbit/sse-client.ts, extensions/tlon/src/urbit/sse-client.test.ts)
  • hclsys: The earlier merged Tlon SSE timeout hardening addressed the same externally controlled long-lived stream and process-availability surface. (role: prior reliability contributor; confidence: medium; commits: 13c8b2ada5a4, 411d5fda587c; files: extensions/tlon/src/urbit/sse-client.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 (10 earlier review cycles; latest 8 shown)
  • reviewed 2026-07-07T05:07:53.646Z sha 5993428 :: needs changes before merge. :: [P1] Check the stream cap before appending the chunk
  • reviewed 2026-07-07T06:55:18.562Z sha 32f7c18 :: found issues before merge. :: [P3] Remove the PR-specific proof script
  • reviewed 2026-07-11T01:50:06.508Z sha 7324ef0 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-12T06:06:27.695Z sha db92d9d :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-12T06:14:52.090Z sha db92d9d :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-12T07:00:52.379Z sha a5d0c8e :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-12T07:12:30.875Z sha 4ae3169 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-12T07:49:59.855Z sha 4ae3169 :: needs real behavior proof 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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 7, 2026
@Pick-cat

Pick-cat commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 7, 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.

Pick-cat added a commit to Pick-cat/openclaw that referenced this pull request Jul 7, 2026
…101274)

Adds extensions/tlon/proof-sse-bounded.mts which drives the real
UrbitSSEClient.processStream and processEvent against Node Readable streams
(not unit-test mocks) to demonstrate:

- normal SSE events are still delivered through the stream path;
- an unterminated stream that would grow beyond 16 MiB is rejected before
  unbounded accumulation;
- a single SSE payload above 16 MiB is rejected before JSON.parse.

The script passes on this branch and fails 2/3 assertions when run against
origin/main's sse-client.ts, providing the before/after proof ClawSweeper
requested.
@Pick-cat
Pick-cat force-pushed the fix/tlon-sse-bounded-json-parse branch from c4efb73 to 91cd6bf Compare July 7, 2026 04:27
@Pick-cat

Pick-cat commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Real behavior proof is now supplied.

Pushed 91cd6bfe1e which adds extensions/tlon/proof-sse-bounded.mts. The script drives the real UrbitSSEClient.processStream and processEvent against Node Readable streams (not unit-test mocks) to demonstrate production-style SSE behavior.

After fix — production-style proof:

[case 1] normal SSE event delivered through stream path
  ok: normal event delivered
[case 2] oversized stream buffer rejected before unbounded accumulation
  ok: stream buffer overflow rejected
[case 3] oversized single payload rejected before JSON.parse
  ok: oversized payload rejected before JSON.parse

=== Proof Summary ===
passed: 3, failed: 0

Negative control — same script against origin/main sse-client.ts:

[case 1] normal SSE event delivered through stream path
  ok: normal event delivered
[case 2] oversized stream buffer rejected before unbounded accumulation
  FAIL: stream buffer overflow rejected
[case 3] oversized single payload rejected before JSON.parse
  FAIL: oversized payload rejected

=== Proof Summary ===
passed: 1, failed: 2
EXIT=1

Local verification:

  • node --import tsx extensions/tlon/proof-sse-bounded.mts passes
  • node scripts/run-vitest.mjs extensions/tlon/src/urbit/sse-client.test.ts --run passes
  • pnpm dlx oxlint --config .oxlintrc.json extensions/tlon/src/urbit/sse-client.ts extensions/tlon/src/urbit/sse-client.test.ts extensions/tlon/proof-sse-bounded.mts passes

@clawsweeper

clawsweeper Bot commented Jul 7, 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.

Pick-cat added a commit to Pick-cat/openclaw that referenced this pull request Jul 7, 2026
…101274)

Adds extensions/tlon/proof-sse-bounded.mts which drives the real
UrbitSSEClient.processStream and processEvent against Node Readable streams
(not unit-test mocks) to demonstrate:

- normal SSE events are still delivered through the stream path;
- an unterminated stream that would grow beyond 16 MiB is rejected before
  unbounded accumulation;
- a single SSE payload above 16 MiB is rejected before JSON.parse.

The script passes on this branch and fails 2/3 assertions when run against
origin/main's sse-client.ts, providing the before/after proof ClawSweeper
requested.
Pick-cat added a commit to Pick-cat/openclaw that referenced this pull request Jul 7, 2026
@Pick-cat
Pick-cat force-pushed the fix/tlon-sse-bounded-json-parse branch from 91cd6bf to 5993428 Compare July 7, 2026 04:38
@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 7, 2026
@Pick-cat

Pick-cat commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Pushed 32f7c18 addressing the P1 rank-up blocker:

  1. Guard ordering fixed — stream byte-limit check now runs BEFORE buffer += chunkStr. The next byte total is computed first; if it exceeds the cap, the chunk is rejected without concatenation. This closes the memory-spike gap: a single oversized chunk can no longer land in the pending buffer.

  2. Single-oversized-chunk test addedextensions/tlon/src/urbit/sse-client.test.ts now includes a test that feeds a single 17 MiB chunk and verifies the guard fires before concatenation.

After fix — 22/22 tests pass:

node scripts/run-vitest.mjs extensions/tlon/src/urbit/sse-client.test.ts --run
Tests: 22 passed (22)

Guard before/after:

-        buffer += chunkStr;
-        bufferBytes += Buffer.byteLength(chunkStr, "utf8");
-        if (bufferBytes > MAX_SSE_PAYLOAD_BYTES) {
+        const chunkBytes = Buffer.byteLength(chunkStr, "utf8");
+        // Reject before concatenating so an oversized chunk never lands in the
+        // pending buffer — the guard protects memory, not just the byte counter.
+        if (bufferBytes + chunkBytes > MAX_SSE_PAYLOAD_BYTES) {
+          throw new Error("...");
+        }
+        buffer += chunkStr;
+        bufferBytes += chunkBytes;

@clawsweeper

clawsweeper Bot commented Jul 7, 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.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. 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 7, 2026
@steipete

steipete commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Superseded by the final exact-head proof: #101274 (comment)

The repository landing gate required keeping root CHANGELOG.md release-owned, so the maintainer changelog commit was dropped and its release-note context retained in the PR body. The branch was then rebased onto the Plugin SDK declaration-budget fix and passed exact-head CI run 29185926126 before landing as 1710ccad2977f39d36e8c6a9aaa908bcd0ad785b.

steipete pushed a commit to Pick-cat/openclaw that referenced this pull request Jul 12, 2026
…101274)

Adds extensions/tlon/proof-sse-bounded.mts which drives the real
UrbitSSEClient.processStream and processEvent against Node Readable streams
(not unit-test mocks) to demonstrate:

- normal SSE events are still delivered through the stream path;
- an unterminated stream that would grow beyond 16 MiB is rejected before
  unbounded accumulation;
- a single SSE payload above 16 MiB is rejected before JSON.parse.

The script passes on this branch and fails 2/3 assertions when run against
origin/main's sse-client.ts, providing the before/after proof ClawSweeper
requested.
@steipete
steipete force-pushed the fix/tlon-sse-bounded-json-parse branch from e0b1523 to 7f3de02 Compare July 12, 2026 08:21
steipete pushed a commit to Pick-cat/openclaw that referenced this pull request Jul 12, 2026
steipete pushed a commit to Pick-cat/openclaw that referenced this pull request Jul 12, 2026
The proof script was review-only validation for openclaw#101274. Durable behavior
coverage lives in sse-client.test.ts (stream buffer bounding, oversized
chunk rejection before concatenation, 16 MiB boundary, normal delivery,
1000 small events). Per ClawSweeper P3 finding, drop the one-off script
from the plugin tree.
Pick-cat and others added 10 commits July 12, 2026 04:29
…101274)

Adds extensions/tlon/proof-sse-bounded.mts which drives the real
UrbitSSEClient.processStream and processEvent against Node Readable streams
(not unit-test mocks) to demonstrate:

- normal SSE events are still delivered through the stream path;
- an unterminated stream that would grow beyond 16 MiB is rejected before
  unbounded accumulation;
- a single SSE payload above 16 MiB is rejected before JSON.parse.

The script passes on this branch and fails 2/3 assertions when run against
origin/main's sse-client.ts, providing the before/after proof ClawSweeper
requested.
Move the stream byte-limit check before buffer += chunkStr so a
single oversized chunk never lands in the pending buffer. The old
guard ran after concatenation, which still allowed the memory spike
this hardening is meant to prevent.

Add a single-oversized-chunk test to prove the guard fires before
the chunk is concatenated into the pending buffer.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
The proof script was review-only validation for openclaw#101274. Durable behavior
coverage lives in sse-client.test.ts (stream buffer bounding, oversized
chunk rejection before concatenation, 16 MiB boundary, normal delivery,
1000 small events). Per ClawSweeper P3 finding, drop the one-off script
from the plugin tree.
@steipete
steipete force-pushed the fix/tlon-sse-bounded-json-parse branch from 7f3de02 to c895c97 Compare July 12, 2026 08:29
@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: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 12, 2026

Copy link
Copy Markdown
Contributor

Land-ready at c895c97d66d030fcd1d694249f89c8677ba0e74f.

Proof:

  • Sanitized AWS Crabbox run run_c6cf3a56ae87: focused Tlon SSE suite 22/22 passed on Linux Node 24 with public networking, no Tailscale, and no instance profile.
  • The aggregate Tlon code/test patch-id is 8a472770ce305c005a46753b7dfea92b05908975 both before and after the current-main rebase.
  • Fresh exact-head full-branch autoreview: clean, no accepted or actionable findings.
  • Exact-head hosted CI run 29185926126: completed without failing jobs after rebasing onto the relevant shared build/type fixes; Control UI locale parity was correctly not scheduled for this unrelated Tlon change.
  • Repo-native review artifacts validate with zero findings.
  • Release-note context and @Pick-cat credit are retained in the PR body; the repository gate keeps root CHANGELOG.md release-owned.

Accepted proof gap: no authenticated Tlon/Urbit ship is configured on this host, so a real subscription smoke could not run. The focused sanitized-AWS proof covers all 22 boundary, split-chunk, and rejection cases, and the maintainer explicitly directed landing after this gap was disclosed.

@steipete
steipete merged commit 1710cca into openclaw:main Jul 12, 2026
120 of 126 checks passed
@steipete

Copy link
Copy Markdown
Contributor

Merged via squash.

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

Labels

channel: tlon Channel integration: tlon merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. 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. P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S 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.

2 participants