GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — v0.0.15-beta.3 by Obed0101 · Pull Request #148 · MendCode/MendCode Conversation
|
|
MendCode: @Obed0101's MendCode worked on this pull request on one of its devices; released 2026-11-11 09:42 UTC. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
1 finding · 🟠 1 major
head 22d35bcd6d29
Merge risk: 🟡 Medium · The opt-in scope limits exposure, but the patch changes shared subscription and replay ordering across chats. Regressions can lose running-turn content or approval controls even while the underlying session continues normally.
Change: Bug fix · Review effort: 2/5, about 15 minutes
This patch forces Telegram submissions to queue rather than join an existing turn, and replays running turns separately when another chat already follows the session. The changes are confined to the opt-in bridge, but the new replay limit can silently omit pending approvals in long turns. Review was read-only; tests were inspected but not run.
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).
Stacked on #146: only this pull request's own commits since #146's head a71641f.
| Finding | Where | |
|---|---|---|
| 🟠 | Replay reports success after 50 pages even when the joining chat is still missing events 8/10 | packages/daemon/src/channels.ts:83-90 |
The patch addresses two Telegram remote-control races on top of the parent pull request. Phone submissions explicitly select queued delivery so a concurrent computer turn cannot consume them as steering input. Additional chats replay the running turn through paginated event reads instead of resetting the shared subscription cursor; the existing bridge buffers and deduplicates that replay. Protocol schemas, kernel queue behavior, and normal client subscription handling remain unchanged.
Changes
| Layer / files | Summary |
|---|---|
Telegram submission and replay packages/daemon/src/channels-bridge.ts, packages/daemon/src/channels.ts |
Explicitly queue phone submissions and track shared session subscriptions so subsequent chats receive a separate paginated replay. |
Regression coverage packages/daemon/test/channels-bridge.test.ts, packages/daemon/test/channels-daemon.test.ts |
Assert queued delivery and add a daemon integration scenario covering a second chat joining during an approval without duplicating it for the first chat. |
Release notes CHANGELOG.md |
Document beta.3's remote-control fixes and update the stable release's equivalence note. |
Sequence diagram
sequenceDiagram
participant Chat as Joining Telegram chat
participant Bridge as Channel bridge
participant Host as Channels host
participant Client as Shared daemon client
participant Daemon
Chat->>Bridge: Pair or select session
Bridge->>Host: watch(sessionId)
Host->>Client: loadWindow and session.history
Client->>Daemon: Read end cursor and running turn
alt First chat following session
Host->>Client: subscribe(from)
Client->>Daemon: Replay and subscribe
Daemon-->>Bridge: Session events via client
else Session already followed
loop Up to 50 pages
Host->>Client: loadAfter(after, 200)
Client->>Daemon: session.events
Daemon-->>Host: Event page via client
Host-->>Bridge: onEvent for replayed events
end
end
Host-->>Bridge: Watch result
Bridge->>Bridge: Sort and deduplicate buffered events
Bridge-->>Chat: Prompt, progress and approvals
| Check | Status | Explanation |
|---|---|---|
| Title | ✅ Passed | The version-only title matches the beta.3 release entry added to the changelog. |
| Description | The description explains the two fixes and their origin in the parent review, but does not describe functional testing. The added tests cover queued command construction and a short approval replay, not replay exhaustion. | |
| Out of scope | ✅ Passed | All changes support the stated Telegram fixes, their regression coverage, or the associated release notes. |
Performance (perf-attrib, base 8346c30 against head 22d35bc)
perf-attrib: igual: nothing above the measured noise
base 8346c308c7e1e22a7da32d1986b40b86aaf71e16 (8346c308) vs cand 22d35bcd6d29d479aea924a923d0fe01b4183328 (22d35bcd), 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.9 | 57.1 | +0.2 |
| tui.after.peak_mb | 73.1 | 73.4 | +0.3 |
| tui.ready.fp_mb | 54.8 | 54.5 | -0.3 |
| tui.ready.peak_mb | 73.1 | 73.4 | +0.3 |
| tui.rest.fp_mb | 56.7 | 56.9 | +0.2 |
| tui.rest.peak_mb | 73.1 | 73.4 | +0.3 |
| tui.after.rss_mb | 135.8 | 135.7 | -0.1 |
| tui.ready.rss_mb | 114.1 | 113.9 | -0.2 |
| tui.rest.rss_mb | 136.5 | 136 | -0.5 |
| tui.after.heap.extra_b | 7402632 | 7393734 | -8898 |
| tui.after.heap.objects | 243015 | 242995 | -20 |
| tui.after.heap.protected | 20 | 20 | 0 |
| tui.after.heap.size_b | 25241352 | 25231014 | -10338 |
| tui.ready.heap.extra_b | 2895377 | 2872237 | -23140 |
| tui.ready.heap.objects | 217222 | 217157 | -65 |
| tui.ready.heap.protected | 18 | 18 | 0 |
| tui.ready.heap.size_b | 19331303 | 19299501 | -31802 |
| tui.rest.heap.extra_b | 4669916 | 4666092 | -3824 |
| tui.rest.heap.objects | 238468 | 238450 | -18 |
| tui.rest.heap.protected | 18 | 18 | 0 |
| tui.rest.heap.size_b | 22123244 | 22115500 | -7744 |
| tui.rest.js_code_b | 5885929 | 5880092 | -5837 |
| tui.rest.js_live_b | 19291989 | 19293027 | +1038 |
| tui.cpu_ms.after | 5552 | 5573 | +21 |
| tui.cpu_ms.ready | 352 | 343 | -9 |
| tui.cpu_ms.rest | 483 | 488 | +5 |
| binary.bytes | 72306944 | 72306944 | 0 |
| disk.bytes | 4057 | 4059 | +2 |
| disk.bytes_per_session | 2029 | 2030 | +1 |
JS heap bytes by constructor that rose:
Modules loaded at start: 230 -> 230, 4633324 -> 4633607 bytes of chunks; chunk sizes only in cand: [1009461], only in base: [1009178] (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.5 / 57.1 / peak 73.4 MB, 2030 B per session.
CHANGELOG.mdpackages/daemon/src/channels-bridge.tspackages/daemon/src/channels.tspackages/daemon/test/channels-bridge.test.tspackages/daemon/test/channels-daemon.test.tsComment @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.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
…its end, however many pages, and fails the watch when a page does not advance
|
@MendCode review |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.