From 2936c7060d2aa51f42414e4513b47e94f28bd971 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Thu, 3 Sep 2026 21:17:39 +0200 Subject: [PATCH] Justify the state test by what peers write, not by what this library happens to write --- AGENTS.md | 5 +++-- todo.md | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e395269..524b2d9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -296,8 +296,9 @@ Grouped by what each one constrains. library cannot read with no `messageDlr` at all — goal 2 wants that reported as undetermined, not withheld. Both spellings resolve into `Dlr.intermediate` at the boundary rather than being read a second time in `DlrMerger`, so the library cannot answer the application one way and conclude the - other. `sendDlr('ENROUTE')` writes 0x04, so the state test is what the marker test cannot replace. - `message_state` 0 is 5.0's `SCHEDULED` and undefined in 3.4; a peer that writes it is read as + other. Not every peer marks a transient report 0x20 — an ordinary receipt carrying `stat:ENROUTE` + is common — so the state test is what the marker test cannot replace. `message_state` 0 is 5.0's + `SCHEDULED` and undefined in 3.4; a peer that writes it is read as transient rather than as saying nothing, maintainer's call, 2026-09-03, since the codec refuses a zero-length integer TLV and so an absent one cannot land there. diff --git a/todo.md b/todo.md index 9e64375..aa2abf7 100644 --- a/todo.md +++ b/todo.md @@ -132,6 +132,13 @@ session message is a change to every call site. and applies it to the other is wrong. A budget type both take would close it. Raised by review, 2026-09-01. +- [ ] **Write a transient state as an intermediate delivery notification.** `sendDlr()` marks every + receipt `esm_class` 0x04, so `sendDlr('ENROUTE')` announces a non-final state with the marker + SMPP 3.4 Appendix B reserves for the final one — the two disagreeing spellings of finality the + reading side was taught to reconcile on 2026-09-03. Decided the same day: fix it, off + `transientStates` in `dlr.ts` so the writer and the reader cannot drift, in a PR of its own. + Costs a bullet in README's "Behaviour that changed on the wire". + - [ ] **`once()` is copied into four test files, and two copies never give up.** `session-extras.test.ts` and `readme.test.ts` reject after 5000 ms; `session.test.ts` and `tls.test.ts` wait forever, so an event that never fires still hangs the run the way an