Skip to content

chore: release 0.12.3 - #71

Merged
TerrifiedBug merged 1 commit into
masterfrom
chore/release-0.12.3
Aug 23, 2026
Merged

chore: release 0.12.3#71
TerrifiedBug merged 1 commit into
masterfrom
chore/release-0.12.3

Conversation

@TerrifiedBug

Copy link
Copy Markdown
Owner

Patch release closing #61, #67 and #68 — all three open issues.

PR Issue What
#69 #68 A daemon spawn either becomes a daemon or says why
#70 #61 Durable inbound receipt, written before the handoff
#70 #67 /cleanup can select exact ids or the crash-loop set

Also in #69, found on the way: registry claims were an unserialised read-modify-write through a shared temp file, so concurrent claims silently lost rows — and a lost row is a topic nothing can ever find again, since the registry is the only index that exists.

Contents

1387374  feat: durable inbound receipts, and a /cleanup that can clean (#61, #67) (#70)
932d1ab  fix: a daemon spawn either becomes a daemon or says why (#68) (#69)

Verified

bun run check                          → 314 pass, 0 fail   (0.12.2 shipped 288)
npm publish --dry-run --access public  → 20 files, 106.9 kB, no bun.lock, no tests

Master is already deployed to the affected host and byte-identical to this branch's src/. In the exact condition that produced 83 topics:

ensureDaemon() => declined
45s watch: spawn-chain=0, topics=1

Patch rather than minor at the maintainer's request, though #61 and #67 add surface (last-inbound.json, /cleanup go <ids|never-ran>).

After merge

npm whoami returns 401 on the affected host, so publishing needs an operator credential:

npm login                              # or a fresh automation token
npm publish --access public
npm view omp-telegram version           # expect 0.12.3
omp plugin install omp-telegram@0.12.3  # replaces the hand-deployed src/

Two fixes, both from one incident on a live host.

#68 — ensureDaemon launched `process.execPath`, which inside the omp binary is
omp: a compiled Bun executable that ignores a script argument and boots an
interactive session. So daemon.ts never ran from an omp host, and every spawn
was a session that claimed a permanent Telegram topic and exited. 83 of them,
five seconds apart, before the loop was broken by hand. The runtime is now
resolved by name, the poll lock is read before spawning rather than discovered
by spawning, and a daemon child cannot claim a topic at all.

#61 — an inbound message now leaves a durable receipt, written before the
handoff, so a supervising process can verify delivery without parsing another
program's transcript.

#67 — /cleanup can select: exact ids, or the crash-loop set identified by
evidence (a recorded session file that never existed). Its old dead-pid-only
predicate would have deleted eight days of unrelated history along with the
spam, irreversibly, in a DM host.

Also fixed on the way: registry claims were an unserialised read-modify-write
through a shared temp file, so concurrent claims silently lost rows — and a lost
row is a topic nothing can ever find again, because the registry is the only
index that exists.
@TerrifiedBug
TerrifiedBug merged commit f33b844 into master Aug 23, 2026
1 check passed
@TerrifiedBug
TerrifiedBug deleted the chore/release-0.12.3 branch August 23, 2026 08:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant