NanoClaw
NanoClaw makes mid-turn streaming its single delivery door
NanoClaw consolidates container output through mid-turn streaming, adding cross-segment assembly and database-backed echo suppression while removing result-door sends. Companion changes preserve structured chat links and accept Telegram pairing codes pasted with spaces.
nanocoai/nanoclaw PR #3284 is the inspected primary source: “container: mid-turn streaming is the single delivery door — cross-segment assembly, DB-backed echo suppression, no result-door sends.” The related records below were inspected as supporting context rather than independent confirmation.
The facts
- nanocoai/nanoclaw PR #3284 was created 2026-08-16T20:30:24Z and was closed at inspection; its title is “container: mid-turn streaming is the single delivery door — cross-segment assembly, DB-backed echo suppression, no result-door sends.” - nanocoai/nanoclaw PR #3283 was created 2026-08-16T20:16:09Z and was closed at inspection; its title is “Preserve structured chat links.” - nanocoai/nanoclaw PR #3282 was created 2026-08-16T19:28:56Z and was open at inspection; its title is “fix: accept telegram pairing codes pasted with spaces.” - The repository reported 30524 stars, 899 open issues, default branch main, and last push 2026-08-16T21:32:50Z. - The latest tagged-release baseline checked was v2.2.0 published 2026-08-13T20:43:27Z.
What changed
nanocoai/nanoclaw PR #3284 reports: Mid-turn delivery: one content door, no persistent dedupe state Providers that stream assistant text declare emitsMidTurnText; for them, mid-turn streaming is the **single content door**. The final result never delivers content. The invariant A block is written to messages_out exactly once, at the moment the streamed text containing its closing tag is scanned — whether the block arrived whole in one text event or was **assembled from fragments** carried across events by a frame-local, turn-local buffer (unclosed opens, tag prefixes split mid-token, and unclosed block with different content remains out of scope; cross-process idempotency follows separately. The spurious-nudge duplicate path (tool send invisible to the poll loop → nudge → re-send) is closed here by the DB-based nudge gate. Independent trunk improvement; no dependency on other open PRs. Note: touches container/agent-runner/src/providers/claude.ts, which #2941 also modifies in a different region — whichever merges second rebases trivially. Generated with Claude Code
nanocoai/nanoclaw PR #3283 reports: Type of Change [x] **Fix** - bug fix or security fix to source code Description Preserves Chat SDK hyperlink targets when platform display text is shortened or labeled differently. The shared formatter now appends hidden, deduplicated URLs from links[]; plain URLs remain unchanged. Root cause: inbound events retained the full target, but prompt formatting used only visible text. Tested with the full agent-runner suite (178 passed, 1 skipped) and TypeScript typecheck.
nanocoai/nanoclaw PR #3282 reports: Type of Change [x] **Fix** - bug fix or security fix to source code Description Telegram’s setup card displays the six-digit pairing code with spaces, but extractCode previously trimmed only the message edges and rejected that displayed value when pasted verbatim. This collapses whitespace before the existing exact six-digit check, while still rejecting surrounding chatter, and adds regression coverage through both extractCode and tryConsume. Testing pnpm exec vitest run src/channels/telegram-pairing.test.ts -t "accepts the code as copied|accepts spaced digits|consumes a code pasted" pnpm exec eslint src/channels/telegram-pairing.ts src/channels/telegram-pairing.test.ts (0 errors; existing warnings only) pnpm exec prettier --check src/channels/telegram-pairing.ts src/channels/telegram-pairing.test.ts Repo-wide checks remain blocked by unrelated failures already present on the channels branch: a missing DeltaChat type dependency, existing lint/format errors, and fs.watch resource errors in unrelated Telegram waiter tests.
Why it matters
One delivery path reduces duplicate replies only if it also preserves message structure and identity across segments. Small pairing and link fixes show where polished demos usually fracture in real chat traffic. The operator test is whether the system remains bounded and its receipts still describe the action after failure, retry or restart.
Current
The primary record was closed when captured on 2026-08-17. The tagged-release baseline was v2.2.0 published 2026-08-13T20:43:27Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/nanocoai/nanoclaw/pull/3284. Supporting records are https://github.com/nanocoai/nanoclaw/pull/3283 and https://github.com/nanocoai/nanoclaw/pull/3282. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Give every emitted segment a durable identity, suppress echoes from stored receipts rather than timing, and round-trip structured links and human-formatted pairing codes in adapter tests. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.