Justify the state test by what peers write, not by what this library happens to write

This commit is contained in:
2026-09-03 21:17:39 +02:00
parent e28b219a4f
commit 2936c7060d
2 changed files with 10 additions and 2 deletions
+3 -2
View File
@@ -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.
+7
View File
@@ -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