GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — v0.0.15 by Obed0101 · Pull Request #146 · MendCode/MendCode

Conversation

@Obed0101

@Obed0101 Obed0101 commented Nov 11, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Stable release of v0.0.15-beta.4, same code.

Changed

  • Remote control joins the Telegram chat to the session you paired it from: its last turns arrive, turns typed in the terminal show in the chat, and a single message shows live progress. /sessions switches session from the phone and /history shows more turns.

Fixed

  • A picture the model reads shows in its tool card in terminals that draw images, also in Claude Code sessions, instead of [image].
  • /remote-control pair copies /pair CODE to the clipboard and keeps the code readable on screen until it expires.
  • Idle compaction on ChatGPT and the OpenAI API no longer runs a couple of minutes after every turn: occasional cache misses no longer count as an expiry, and GPT-5.6 and later use OpenAI's 30-minute cache.
  • A bare sub-agent no longer receives instruction files through a file mentioned in its prompt, and extensions no longer rewrite its prompt or messages.
  • A message sent from Telegram while a turn from the computer runs is answered with a note to wait or /stop, instead of leaving the chat unable to send more, and a chat that joins a session as a turn starts follows that turn.
  • A message from Telegram always runs as a turn of its own, even when a turn from the computer starts as it is sent, and a chat that joins a session another chat follows gets the running turn from its start.
  • When the code graph's scan process cannot start, the graph is built in MendCode's own process without a broken-pipe error escaping.

Weight: measured on the beta parts (#143-#145), footprint medians within noise of v0.0.14.


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Obed0101 and others added 18 commits November 9, 2026 20:19
@Obed0101
Claude Code compacts at 200K unless a per-model point raises it, its …
c32d2b9
…compaction spend is counted, the memory graph groups each category, upgrade docs name v1's data
@Obed0101
Dream, /btw and memory extraction retry a busy provider; the code gra…
c852aff
…ph indexes a project's own repository inside a folder that ignores it
@Obed0101
Bare sub-agents (task_bare): a child with no instruction files, memor…
20d279f
…ies or skills; reads in such a session bring no nearby AGENTS.md
@Obed0101
Bare sub-agents on Claude Code run none of the user's hooks
d41cff7
@Obed0101
Bare sub-agents get no agent profile prompt and are refused on engine…
f1669e7
…s that take no run limits; a compaction in a Claude Code process's first turn is counted
@Obed0101
Computer Use no longer leaves apps slowed and sends browsers to the M…
9697c7e
…endCode extension (on in full); Claude Code's automatic compaction keeps the user's language; every tool call keeps its own row
@Obed0101
Release v0.0.14-beta.1 and v0.0.14
a14e5c4
@Obed0101
Computer Use's automatic cleanup waits until no other session is live…
87cbafc
… or starting, so it never invalidates another session's observation or window
@Obed0101
A picture the model reads shows in its tool card, also in Claude Code…
06b26e6
… sessions
@Obed0101
remote control: /remote-control pair copies /pair CODE and keeps the …
a0b5362
…code on screen, whole, until it expires
@Obed0101
remote control: the Telegram chat joins the paired session (history, …
479cd5a
…terminal turns mirrored, live progress, /sessions, /history)
@Obed0101
idle compaction: scattered cache misses are no expiry when longer gap…
e23e73a
…s still hit; GPT-5.6 and later use OpenAI's 30-minute cache
@Obed0101
Release v0.0.15-beta.1 and v0.0.15
fd777e2
@Obed0101
remote control: a joined session's running turn replays into the chat…
80f6e50
…, leaving a session drops its open questions and keeps other chats subscribed, /sessions buttons name their session; bare sub-agents get no instruction files through mentions and no extension prompt or context rewrites
@Obed0101
remote control: a chat joining a session holds its events until the w…
7c7dfba
…atch answers and reads them in order, and a switch whose watch fails leaves the chat on its session with its running turn and open requests
@Obed0101
remote control: a chat unpaired while its watch starts gets none of t…
1aed947
…he events held for it, and the watch is released
@Obed0101
Merge main into beta for v0.0.15-beta.1 (beta already holds v0.0.14; …
758e1ed
…the tree is main's)
@Obed0101
Merge pull request #145 from MendCode/beta-pr/3-idle-compaction-release
b3a2066
v0.0.15-beta.1 (3/3): Idle compaction follows OpenAI's cache; release
@Obed0101

Obed0101 commented Nov 11, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

MendCode: @Obed0101's MendCode worked on this pull request on one of its devices; released 2026-11-11 10:10 UTC.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Obed0101
Obed0101 commented Nov 11, 2026
View reviewed changes

@Obed0101 Obed0101 left a comment

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

MendCode review

2 findings · 🟠 2 major
head b3a2066572f0

Merge risk: 🔴 High · The change extends a full-authority remote bridge to existing sessions and introduces replay, shared subscriptions and simultaneous local/remote activity. Regressions can lose answers or approvals, disable remote cancellation, or leave a chat unable to continue; the engine changes also affect persisted media and prompt isolation.
Change: Feature · Review effort: 4/5, about 60 minutes

This release adds Telegram session sharing, history and progress, image-bearing tool cards, model-aware cache lifetimes, and stronger bare-agent isolation; the main risk is synchronization between remote chats and existing session activity. Code inspection found two remote-control correctness defects; tests were read but not executed under the read-only review constraints. The ten reader-summarized files were inspected directly in relevant spans, no changed file was left wholly unread, and the generated card file was checked only at its changed revision.
Readers: 10 files went to readers instead of the review pass whole: 10 code files by gpt-6-luna (the review pass gets their summaries and the hunks of their risk spots; 1 call, up to 3 at once, 34,761 tokens counted). Their summaries are hints, not findings. 15 code files no reader could read went to the review pass whole (the readers' share of the review's token cap is spent; the reader gave no usable answer for this file).

Finding Where
🟠 A phone message absorbed into a mirrored turn permanently blocks further chat submissions 9/10 packages/daemon/src/channels-bridge.ts:317-321
🟠 Joining can skip a turn that starts between the history query and event-window lookup 8/10 packages/daemon/src/channels.ts:56-60
Walkthrough

The release connects Telegram to the session open in the terminal rather than always creating a separate session, with history recaps, session selection, mirrored activity and editable progress messages. It also attaches read images to native and Claude tool cards, adjusts idle compaction for newer OpenAI models and intermittent cache misses, and prevents bare native agents from inheriting nearby instructions or prompt/context hook rewrites. Pairing gains an optional sessionId, preserving directory-only requests and existing stored chat records.

Changes

Layer / files Summary
Release documentation
CHANGELOG.md, packages/daemon/cards/cards.generated.json
Adds stable and beta release notes and updates the generated documentation-card revision.
Terminal pairing and protocol
apps/cli/src/ui/app/channels.ts, apps/cli/test/remote-control-command.test.ts, packages/protocol/src/channels.ts
Adds optional session-bound pairing and copies the pairing command while displaying an expiry-length notice.
Telegram session bridge
packages/daemon/src/channels-bridge.ts, packages/daemon/src/channels-config.ts, packages/daemon/src/channels-telegram.ts, packages/daemon/src/channels.ts, packages/daemon/test/channels-bridge.test.ts, packages/daemon/test/channels-daemon.test.ts, docs/channels.md
Implements session restoration, history, switching, terminal-turn mirroring and editable progress, with bridge and daemon coverage.
Idle compaction
packages/daemon/src/idle-compaction.ts, packages/daemon/test/idle-compaction.test.ts, packages/protocol/src/idle-compaction-data.ts, packages/protocol/src/wire.ts, docs/prompt-cache.md
Uses model-dependent cache defaults and learns retention from later reliable hit buckets despite earlier misses.
Claude image cards
packages/daemon/src/main.ts, packages/engine-claude/src/engine.ts, packages/engine-claude/src/protocol.ts, packages/engine-claude/test/tool-result-images.test.ts
Stores bounded base64 tool-result images as session-owned blobs and attaches their references to completed tool cards.
Native image cards and bare-agent isolation
packages/engine-native/src/engine.ts, packages/engine-native/test/engine.test.ts, packages/engine-native/test/run-limits.test.ts, packages/daemon/test/task-bare.test.ts
Displays images returned by read and applies bare-agent restrictions to mention expansion and prompt/context hooks.

Sequence diagram

sequenceDiagram
    participant T as Terminal
    participant D as Daemon
    participant B as Telegram bridge
    participant G as Telegram chat
    T->>D: Pair with directory and sessionId
    D-->>T: Expiring pairing code
    G->>B: /pair CODE
    B->>D: Read session history
    B-->>G: Recent turns
    B->>D: Subscribe and replay running turn
    T->>D: Submit prompt
    D-->>B: Session events
    B-->>G: Prompt, progress and answer
    G->>B: Prompt or approval response
    B->>D: Submit or resolve in shared session
Loading
Pre-merge checks: ⚠️ 1 warning · ✅ 2 passed
Check Status Explanation
Title ✅ Passed The version-only title is appropriate for a stable release and matches the new changelog entry.
Description ⚠️ Warning The description explains the user-visible changes and cites beta footprint measurements, but does not state functional test commands or outcomes. Tests were not executable in this review.
Out of scope ✅ Passed The changed code, tests, documentation and generated revision correspond to the announced remote-control, image-card, cache and bare-agent changes.
Review details
  • Files reviewed: 25 · 877 changed lines · estimated review effort 4/5, about 60 minutes
  • Profile: normal · at most 8 inline comments
  • Verification: every finding was checked again by a separate pass (2 candidates judged)
  • Cost: 1,699,162 tokens in (1,529,728 from the provider's cache) · 7,314 out
  • Readers: 10 files went to readers instead of the review pass whole: 10 code files by gpt-6-luna (the review pass gets their summaries and the hunks of their risk spots; 1 call, up to 3 at once, 34,761 tokens counted). Their summaries are hints, not findings. 15 code files no reader could read went to the review pass whole (the readers' share of the review's token cap is spent; the reader gave no usable answer for this file).

Performance (perf-attrib, base 92ec527 against head b3a2066)

perf-attrib: nota: no total rose; inside, binary.bytes +16416B

base 92ec5274126f61eb29017e2d56129b22bb021a52 (92ec5274) vs cand b3a2066572f04a98d843dee929dc1cfd48cd37a9 (b3a20665), median of 2 faux-engine session(s) per side; flagged = beyond the noise measured on 18 base-vs-base runs (x1.5).

metric base cand diff
tui.after.fp_mb 57.2 57 -0.2
tui.after.peak_mb 72.8 73.5 +0.7
tui.ready.fp_mb 54.7 54.8 +0.1
tui.ready.peak_mb 72.8 73.5 +0.7
tui.rest.fp_mb 56.8 56.6 -0.2
tui.rest.peak_mb 72.8 73.5 +0.7
tui.after.rss_mb 135.8 136 +0.2
tui.ready.rss_mb 114 113.8 -0.2
tui.rest.rss_mb 136.2 136.4 +0.2
tui.after.heap.extra_b 7406226 7132837 -273389
tui.after.heap.objects 243285 242546 -739
tui.after.heap.protected 20 20 0
tui.after.heap.size_b 25379729 24925109 -454620
tui.ready.heap.extra_b 2894885 2872151 -22734
tui.ready.heap.objects 217205 217158 -47
tui.ready.heap.protected 18 18 0
tui.ready.heap.size_b 19329908 19299303 -30605
tui.rest.heap.extra_b 4667331 3732743 -934588
tui.rest.heap.objects 238454 236017 -2437
tui.rest.heap.protected 18 18 0
tui.rest.heap.size_b 22118563 20937927 -1180636
tui.rest.js_code_b 5884393 4886034 -998359
tui.rest.js_live_b 19288432 19256138 -32294
tui.cpu_ms.after 5612 5515 -97
tui.cpu_ms.ready 358 338 -20
tui.cpu_ms.rest 487 474 -13
binary.bytes 72290528 72306944 +16416 UP
disk.bytes 4081 4067 -14
disk.bytes_per_session 2041 2034 -7

JS object types that rose (count):

  • tui.after.heap.type.Function: 44525 -> 44527 (+2)
  • tui.rest.heap.type.Function: 44521 -> 44523 (+2)

JS heap bytes by constructor that rose:

  • tui.rest.ctor.object:ModuleRecord.bytes: 5503002 -> 5504809 (+1807)
  • tui.rest.ctor.native:Blob.bytes: 1741846 -> 1743266 (+1420)
  • tui.rest.ctor.code:JSLexicalEnvironment.bytes: 1280016 -> 1280032 (+16)

Modules loaded at start: 230 -> 230, 4631481 -> 4633288 bytes of chunks; chunk sizes only in cand: [1009142, 715667, 275976, 251528, 110586, 20161, 2295], only in base: [1008597, 715646, 275922, 251346, 110300, 19508, 2229] (chunk names are hashes: the list says which changed in size, not by what name)

Reference (skill, 2026-11-03, real model): footprint 64 ready / 66 after / peak 80 MB, 2.6 KB per session. This run (faux engine, whole process tree): 54.8 / 57 / peak 73.5 MB, 2034 B per session.

Files (25)
  • CHANGELOG.md
  • apps/cli/src/ui/app/channels.ts
  • apps/cli/test/remote-control-command.test.ts
  • docs/channels.md
  • docs/prompt-cache.md
  • packages/daemon/cards/cards.generated.json
  • packages/daemon/src/channels-bridge.ts
  • packages/daemon/src/channels-config.ts
  • packages/daemon/src/channels-telegram.ts
  • packages/daemon/src/channels.ts
  • packages/daemon/src/idle-compaction.ts
  • packages/daemon/src/main.ts
  • packages/daemon/test/channels-bridge.test.ts
  • packages/daemon/test/channels-daemon.test.ts
  • packages/daemon/test/idle-compaction.test.ts
  • packages/daemon/test/task-bare.test.ts
  • packages/engine-claude/src/engine.ts
  • packages/engine-claude/src/protocol.ts
  • packages/engine-claude/test/tool-result-images.test.ts
  • packages/engine-native/src/engine.ts
  • packages/engine-native/test/engine.test.ts
  • packages/engine-native/test/run-limits.test.ts
  • packages/protocol/src/channels.ts
  • packages/protocol/src/idle-compaction-data.ts
  • packages/protocol/src/wire.ts

Comment @mendcode review to review again · @mendcode pause / resume · reply to a finding with explain, fix or learn · settings in .mendcode/review.yaml

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread packages/daemon/src/channels-bridge.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/daemon/src/channels.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@Obed0101
remote control: a phone message waits for a turn from the computer in…
8346c30
…stead of leaving the chat stuck, and a joining chat reads the log's end before the running turn so a turn that just started replays; release v0.0.15-beta.2
@Obed0101 Obed0101 mentioned this pull request Nov 11, 2026
v0.0.15-beta.2 #147
Merged
@Obed0101
Merge pull request #147 from MendCode/main
a71641f
v0.0.15-beta.2
@Obed0101

Obed0101 commented Nov 11, 2026

Copy link
Copy Markdown
Contributor Author

@MendCode review

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Obed0101
Obed0101 commented Nov 11, 2026
View reviewed changes

@Obed0101 Obed0101 left a comment

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

MendCode review

2 findings · 🟠 2 major
head a71641f791f4

Merge risk: 🔴 High · The change connects multiple clients to the same running session and adds replay, subscription sharing and remote approval delivery. Regressions can leave remote control stuck or omit approvals and answers; cache scheduling and blob persistence also cross engine and daemon boundaries.
Change: Feature · Review effort: 4/5, about 60 minutes

This release adds shared Telegram sessions and progress reporting, image attachments on tool cards, model-aware idle compaction, and stronger bare-agent isolation. The main risk is remote-control synchronization: two verified races can lose running-turn events or leave the chat unable to submit further work. The nine reader-summarized code files were checked against relevant source spans; no files were explicitly marked unread, and no tests or scripts were executed in this read-only review.
Readers: 9 files went to readers instead of the review pass whole: 9 code files by gpt-6-luna (the review pass gets their summaries and the hunks of their risk spots; 1 call, up to 3 at once, 34,979 tokens counted). Their summaries are hints, not findings. 16 code files no reader could read went to the review pass whole (the readers' share of the review's token cap is spent; the reader gave no usable answer for this file).

Finding Where
🟠 A terminal turn starting during submission can still permanently wedge the phone chat 8/10 packages/daemon/src/channels-bridge.ts:169-173
🟠 The shared client's cursor can discard replay before the joining chat receives it 8/10 packages/daemon/src/channels.ts:68
Walkthrough

Telegram pairing can now attach a chat to the terminal's current session rather than always creating a separate one. The bridge adds history, session selection, mirrored turns, approval handling and an editable progress message. Separately, native and Claude tool results expose image attachments, idle-compaction defaults account for newer GPT models, and bare native agents avoid instruction-file and prompt/context-hook injection.

Changes

Layer / files Summary
Release documentation
CHANGELOG.md, docs/channels.md, docs/prompt-cache.md, packages/daemon/cards/cards.generated.json
Documents the release, shared-session remote control and revised cache assumptions, and updates the generated-card revision.
Terminal pairing
apps/cli/src/ui/app/channels.ts, apps/cli/test/remote-control-command.test.ts
Includes the current session in pairing requests and copies the pairing command with a longer-lived notice.
Telegram bridge and pairing contract
packages/daemon/src/channels-bridge.ts, packages/daemon/src/channels-config.ts, packages/daemon/src/channels-telegram.ts, packages/daemon/src/channels.ts, packages/protocol/src/channels.ts, packages/daemon/test/channels-bridge.test.ts, packages/daemon/test/channels-daemon.test.ts
Adds optional session-bound pairing, subscription restoration and replay, session/history commands, mirrored turns and editable progress, with unit and daemon integration coverage.
Idle-compaction policy
packages/daemon/src/idle-compaction.ts, packages/protocol/src/idle-compaction-data.ts, packages/protocol/src/wire.ts, packages/daemon/test/idle-compaction.test.ts
Passes model identifiers into lifetime selection, adds 30-minute defaults for newer GPT models and tolerates short-gap misses preceding longer-gap cache hits.
Claude image-result persistence
packages/daemon/src/main.ts, packages/engine-claude/src/engine.ts, packages/engine-claude/src/protocol.ts, packages/engine-claude/test/tool-result-images.test.ts
Connects bounded tool-result image extraction to session-owned blob storage and emits attachment references on completed tool cards.
Native image cards and bare-agent isolation
packages/engine-native/src/engine.ts, packages/engine-native/test/engine.test.ts, packages/engine-native/test/run-limits.test.ts, packages/daemon/test/task-bare.test.ts
Attaches read images to tool cards and applies bare-agent limits to mention resolution and system/context hooks.

Sequence diagram

sequenceDiagram
    participant T as Terminal
    participant D as Daemon
    participant B as Telegram bridge
    participant G as Telegram chat
    T->>D: Pair(directory, optional sessionId)
    D-->>T: Code and expiry
    G->>B: /pair CODE
    B->>D: Read session history
    B-->>G: Recent turns
    B->>D: Subscribe from running-turn start or log end
    D-->>B: Replay and live session events
    B-->>G: Prompt, progress, approvals and answer
    G->>B: Message or session selection
    B->>D: Submit message or change subscription
Loading
Pre-merge checks: ⚠️ 1 warning · ✅ 2 passed
Check Status Explanation
Title ✅ Passed The version-only title is appropriate for a stable release and matches the changelog entry.
Description ⚠️ Warning The description explains the behavior changes and provides performance-measurement context, but does not state functional test commands or outcomes.
Out of scope ✅ Passed The implementation, tests, documentation and generated revision correspond to the announced remote-control, image-card, idle-compaction and bare-agent changes.
Review details
  • Files reviewed: 25 · 921 changed lines · estimated review effort 4/5, about 60 minutes
  • Profile: normal · at most 8 inline comments
  • Verification: every finding was checked again by a separate pass (2 candidates judged)
  • Cost: 1,690,945 tokens in (1,531,264 from the provider's cache) · 6,871 out
  • Readers: 9 files went to readers instead of the review pass whole: 9 code files by gpt-6-luna (the review pass gets their summaries and the hunks of their risk spots; 1 call, up to 3 at once, 34,979 tokens counted). Their summaries are hints, not findings. 16 code files no reader could read went to the review pass whole (the readers' share of the review's token cap is spent; the reader gave no usable answer for this file).

Performance (perf-attrib, base 92ec527 against head a71641f)

perf-attrib: nota: no total rose; inside, binary.bytes +16416B

base 92ec5274126f61eb29017e2d56129b22bb021a52 (92ec5274) vs cand a71641f791f4bf2223b31ae73d0e99c16ca76fcf (a71641f7), median of 2 faux-engine session(s) per side; flagged = beyond the noise measured on 18 base-vs-base runs (x1.5).

metric base cand diff
tui.after.fp_mb 57.1 57.3 +0.2
tui.after.peak_mb 74.1 73.4 -0.7
tui.ready.fp_mb 55.3 54.7 -0.6
tui.ready.peak_mb 74.1 73.4 -0.7
tui.rest.fp_mb 56.8 56.9 +0.1
tui.rest.peak_mb 74.1 73.4 -0.7
tui.after.rss_mb 135.7 135.8 +0.1
tui.ready.rss_mb 114.2 114 -0.2
tui.rest.rss_mb 136.1 136.1 0
tui.after.heap.extra_b 7396926 7395853 -1073
tui.after.heap.objects 243011 243000 -11
tui.after.heap.protected 20 20 0
tui.after.heap.size_b 25236654 25236557 -97
tui.ready.heap.extra_b 2895377 2872166 -23211
tui.ready.heap.objects 217214 217159 -55
tui.ready.heap.protected 18 18 0
tui.ready.heap.size_b 19330605 19299670 -30935
tui.rest.heap.extra_b 4663805 4665680 +1875
tui.rest.heap.objects 238453 238437 -16
tui.rest.heap.protected 18 18 0
tui.rest.heap.size_b 22112733 22114576 +1843
tui.rest.js_code_b 5879388 5878956 -432
tui.rest.js_live_b 19288729 19293037 +4308
tui.cpu_ms.after 5522 5503 -19
tui.cpu_ms.ready 345 342 -3
tui.cpu_ms.rest 484 481 -3
binary.bytes 72290528 72306944 +16416 UP
disk.bytes 4085 4078 -7
disk.bytes_per_session 2043 2039 -4

JS object types that rose (count):

  • tui.after.heap.type.Function: 44526 -> 44529 (+3)
  • tui.rest.heap.type.Function: 44522 -> 44525 (+3)

JS heap bytes by constructor that rose:

  • tui.rest.ctor.native:Blob.bytes: 1741846 -> 1743695 (+1849)
  • tui.rest.ctor.object:ModuleRecord.bytes: 5503002 -> 5504845 (+1843)
  • tui.rest.ctor.code:JSLexicalEnvironment.bytes: 1280016 -> 1280032 (+16)

Modules loaded at start: 230 -> 230, 4631481 -> 4633324 bytes of chunks; chunk sizes only in cand: [1009178, 715667, 275976, 251528, 110586, 20161, 2295], only in base: [1008597, 715646, 275922, 251346, 110300, 19508, 2229] (chunk names are hashes: the list says which changed in size, not by what name)

Reference (skill, 2026-11-03, real model): footprint 64 ready / 66 after / peak 80 MB, 2.6 KB per session. This run (faux engine, whole process tree): 54.7 / 57.3 / peak 73.4 MB, 2039 B per session.

Files (25)
  • CHANGELOG.md
  • apps/cli/src/ui/app/channels.ts
  • apps/cli/test/remote-control-command.test.ts
  • docs/channels.md
  • docs/prompt-cache.md
  • packages/daemon/cards/cards.generated.json
  • packages/daemon/src/channels-bridge.ts
  • packages/daemon/src/channels-config.ts
  • packages/daemon/src/channels-telegram.ts
  • packages/daemon/src/channels.ts
  • packages/daemon/src/idle-compaction.ts
  • packages/daemon/src/main.ts
  • packages/daemon/test/channels-bridge.test.ts
  • packages/daemon/test/channels-daemon.test.ts
  • packages/daemon/test/idle-compaction.test.ts
  • packages/daemon/test/task-bare.test.ts
  • packages/engine-claude/src/engine.ts
  • packages/engine-claude/src/protocol.ts
  • packages/engine-claude/test/tool-result-images.test.ts
  • packages/engine-native/src/engine.ts
  • packages/engine-native/test/engine.test.ts
  • packages/engine-native/test/run-limits.test.ts
  • packages/protocol/src/channels.ts
  • packages/protocol/src/idle-compaction-data.ts
  • packages/protocol/src/wire.ts

Comment @mendcode review to review again · @mendcode pause / resume · reply to a finding with explain, fix or learn · settings in .mendcode/review.yaml

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread packages/daemon/src/channels-bridge.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/daemon/src/channels.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@Obed0101
remote control: a phone message is always queued as its own turn, and…
22d35bc
… a chat joining a session another chat streams reads the running turn from the log instead of rewinding the shared cursor; release v0.0.15-beta.3
@Obed0101 Obed0101 mentioned this pull request Nov 11, 2026
v0.0.15-beta.3 #148
Merged
Obed0101 and others added 2 commits November 11, 2026 04:26
@Obed0101
remote control: a replay for a joining chat reads the session log to …
8981456
…its end, however many pages, and fails the watch when a page does not advance
@Obed0101
Merge pull request #148 from MendCode/main
c300179
v0.0.15-beta.3
Obed0101
Obed0101 commented Nov 11, 2026
View reviewed changes

@Obed0101 Obed0101 left a comment

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

MendCode review

No findings · nothing in this change was confirmed as a problem
head c300179ff348 · only the commits since the last review at a71641f

Merge risk: 🟡 Medium · The patch changes event replay and delivery semantics across a shared client and multiple chats. A regression could lose turn progress or approvals, duplicate chat output, or leave a phone submission waiting; protocol schemas, storage formats, and authorization rules remain unchanged.
Change: Bug fix · Review effort: 2/5, about 15 minutes

This incremental change explicitly queues Telegram submissions and replays running turns in pages when another chat already follows the session. No introduced defect was verified; risk is medium because the changes affect asynchronous submission and shared-subscription behavior. Review was read-only, so tests were inspected but not executed.
Readers: 5 code files no reader could read went to the review pass whole (the diff is small: one reader call costs more than the readers' share of this review's cap, so the review pass reads it).
Incremental review: only what changed since the last review at a71641f; the rest of the pull request was reviewed then (read other files with your tools when a change depends on them).

Walkthrough

Telegram submissions now request queued delivery so a concurrently starting terminal turn cannot consume them through steering. When a second chat joins an already-followed session, the bridge reads historical events in pages instead of rewinding the shared subscription cursor. Existing per-chat buffering and sequence checks order and deduplicate replayed and live events. The changelog identifies these fixes as beta.3 and updates the stable release's stated baseline.

Changes

Layer / files Summary
Telegram submission
packages/daemon/src/channels-bridge.ts
Adds explicit queued delivery to phone submissions while retaining the existing running-turn guards and queue-ID tracking.
Shared session replay
packages/daemon/src/channels.ts
Tracks subscribed sessions and uses paginated event reads for additional followers, rejecting replay pages that cannot advance.
Regression coverage
packages/daemon/test/channels-bridge.test.ts, packages/daemon/test/channels-daemon.test.ts
Checks queued submission, multi-page replay and stalled-page handling, and a second chat receiving an existing turn's approval without duplicating it for the first chat.
Release notes
CHANGELOG.md
Documents the beta.3 remote-control fixes and changes the stable release's equivalence note from beta.2 to beta.3.

Sequence diagram

sequenceDiagram
    participant Chat as Joining Telegram chat
    participant Bridge as Channel bridge
    participant Host as Channel host
    participant Client as Shared daemon client
    participant Daemon as Daemon
    Chat->>Bridge: Pair or switch session
    Bridge->>Host: watch(sessionId)
    Host->>Client: loadWindow and session.history
    Client->>Daemon: Read log end and running turn
    alt Session not yet followed
        Host->>Client: subscribe(sessionId, from)
        Client->>Daemon: Subscribe with replay
        Daemon-->>Bridge: Replayed and live events via client
    else Session already followed
        loop Until no more pages
            Host->>Client: loadAfter(sessionId, cursor, 200)
            Client->>Daemon: session.events
            Daemon-->>Host: Event page
            Host-->>Bridge: Replay through onEvent
        end
    end
    Bridge->>Bridge: Sort buffered events and deduplicate by sequence
    Bridge-->>Chat: Prompt, progress and approvals
Loading
Pre-merge checks: ⚠️ 1 warning · ✅ 2 passed
Check Status Explanation
Title ✅ Passed The version-only title is appropriate for a release pull request, although it does not describe the incremental fixes.
Description ⚠️ Warning The description summarizes the release behavior and performance measurements, but still claims identical code to beta.2 while the changelog now names beta.3. It does not describe functional testing of these incremental fixes.
Out of scope ✅ Passed All changed files support the described Telegram turn-delivery and session-following behavior, its regression coverage, or release documentation.
Review details
  • Files reviewed: 5 · 78 changed lines · estimated review effort 2/5, about 15 minutes
  • Profile: normal · at most 8 inline comments
  • Verification: the review pass raised no candidate findings, so no separate pass was needed
  • Cost: 330,232 tokens in (280,064 from the provider's cache) · 2,113 out
  • Readers: 5 code files no reader could read went to the review pass whole (the diff is small: one reader call costs more than the readers' share of this review's cap, so the review pass reads it).

Performance (perf-attrib, base 92ec527 against head c300179)

perf-attrib: nota: no total rose; inside, binary.bytes +16416B

base 92ec5274126f61eb29017e2d56129b22bb021a52 (92ec5274) vs cand c300179ff348858454908528dfad5b733a27a8d7 (c300179f), median of 2 faux-engine session(s) per side; flagged = beyond the noise measured on 18 base-vs-base runs (x1.5).

metric base cand diff
tui.after.fp_mb 56.8 57.6 +0.8
tui.after.peak_mb 73.1 73.5 +0.4
tui.ready.fp_mb 55 55 0
tui.ready.peak_mb 73.1 73.5 +0.4
tui.rest.fp_mb 56.4 57 +0.6
tui.rest.peak_mb 73.1 73.5 +0.4
tui.after.rss_mb 135.8 136.3 +0.5
tui.ready.rss_mb 114.1 114.2 +0.1
tui.rest.rss_mb 136.2 136.6 +0.4
tui.after.heap.extra_b 7391056 7444567 +53511
tui.after.heap.objects 242996 243260 +264
tui.after.heap.protected 20 20 0
tui.after.heap.size_b 25229056 25310023 +80967
tui.ready.heap.extra_b 2894865 2894888 +23
tui.ready.heap.objects 217212 217234 +22
tui.ready.heap.protected 18 18 0
tui.ready.heap.size_b 19330289 19331464 +1175
tui.rest.heap.extra_b 4668099 4666424 -1675
tui.rest.heap.objects 238458 238476 +18
tui.rest.heap.protected 18 18 0
tui.rest.heap.size_b 22120291 22118696 -1595
tui.rest.js_code_b 5885241 5882260 -2981
tui.rest.js_live_b 19289537 19293502 +3965
tui.cpu_ms.after 5620 5575 -45
tui.cpu_ms.ready 354 342 -12
tui.cpu_ms.rest 482 489 +7
binary.bytes 72290528 72306944 +16416 UP
disk.bytes 4047 4062 +15
disk.bytes_per_session 2024 2031 +7

JS object types that rose (count):

  • tui.ready.heap.type.FunctionExecutable: 14166 -> 14170 (+4)
  • tui.ready.heap.type.UnlinkedFunctionExecutable: 14153 -> 14157 (+4)
  • tui.after.heap.type.Function: 44526 -> 44529 (+3)
  • tui.rest.heap.type.Function: 44522 -> 44525 (+3)

JS heap bytes by constructor that rose:

  • tui.rest.ctor.object:ModuleRecord.bytes: 5503002 -> 5505259 (+2257)
  • tui.rest.ctor.native:Blob.bytes: 1741846 -> 1744090 (+2244)
  • tui.rest.ctor.code:JSLexicalEnvironment.bytes: 1280016 -> 1280032 (+16)
  • tui.rest.ctor.code:JSModuleEnvironment.bytes: 104208 -> 104224 (+16)

Modules loaded at start: 230 -> 230, 4631481 -> 4633738 bytes of chunks; chunk sizes only in cand: [1009592, 715667, 275976, 251528, 110586, 20161, 2295], only in base: [1008597, 715646, 275922, 251346, 110300, 19508, 2229] (chunk names are hashes: the list says which changed in size, not by what name)

Reference (skill, 2026-11-03, real model): footprint 64 ready / 66 after / peak 80 MB, 2.6 KB per session. This run (faux engine, whole process tree): 55 / 57.6 / peak 73.5 MB, 2031 B per session.

Files (5)
  • CHANGELOG.md
  • packages/daemon/src/channels-bridge.ts
  • packages/daemon/src/channels.ts
  • packages/daemon/test/channels-bridge.test.ts
  • packages/daemon/test/channels-daemon.test.ts

Comment @mendcode review to review again · @mendcode pause / resume · reply to a finding with explain, fix or learn · settings in .mendcode/review.yaml

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@Obed0101

Obed0101 commented Nov 11, 2026

Copy link
Copy Markdown
Contributor Author

MendCode: 2 checks failed on c300179, which MendCode reviewed.

checks (cli-2of3, cli, 2/3, false) (details)

gh could not read its log.

checks (packages, packages rest, true) (details)

gh could not read its log.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Obed0101
code graph: a scan host that exits before reading its request no long…
e0f9944
…er leaves an unhandled EPIPE; release v0.0.15-beta.4
@Obed0101 Obed0101 mentioned this pull request Nov 11, 2026
v0.0.15-beta.4 #149
Merged
@Obed0101
Merge pull request #149 from MendCode/main
22e5754
v0.0.15-beta.4
@Obed0101
Obed0101 merged commit 0191062 into stable Nov 11, 2026
18 checks passed

Uh oh!

There was an error while loading. Please reload this page.

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

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@Obed0101
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.