lilleman
f4bb1e542f
Leave alert_notification and outbind unanswered
Mirror / push (push) Has been cancelled
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 30s
Test / test (20) (pull_request) Successful in 30s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 30s
Test / test (26) (pull_request) Successful in 29s
2026-09-22 21:39:58 +02:00
lilleman
bdebef849c
Correct three claims a reader would have built on
Test / lint (pull_request) Successful in 29s
Test / test (18) (pull_request) Successful in 30s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 29s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
Mirror / push (push) Successful in 5s
2026-09-21 10:39:54 +02:00
lilleman
0620d205d6
Take back the surface the compiler cannot guard
Mirror / push (push) Has been cancelled
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 31s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 31s
2026-09-21 10:38:40 +02:00
lilleman
3eb93303c3
Name the goal that outranks, on the number the guard still lets through
Mirror / push (push) Successful in 4s
Test / lint (pull_request) Successful in 22s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 29s
Test / test (24) (pull_request) Successful in 35s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 10:35:57 +02:00
lilleman
0c4e6000b0
Tell a consumer how the refusal reaches them, and what it does not cover
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 31s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 33s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 10:33:59 +02:00
lilleman
bbfd1083b8
File what tracing the numeric branch turned up
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 28s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 32s
Test / test (24) (pull_request) Successful in 30s
Test / test (26) (pull_request) Successful in 36s
2026-09-21 10:29:43 +02:00
lilleman
e7e71ca9bd
Refuse a non-finite number where a text field coerces one
Mirror / push (push) Successful in 4s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 36s
Test / test (20) (pull_request) Successful in 30s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 10:22:41 +02:00
lilleman
a7eb4923f5
Say what is true for a TLV too, and cover the to half of the check
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 30s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 31s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 08:20:59 +02:00
lilleman
f870b7530f
Cover the guarded address writers, and cut what the code already says
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 22s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 30s
Test / test (22) (pull_request) Successful in 37s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 08:08:42 +02:00
lilleman
7db242e375
Read and write every text field on the wire as latin1
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 22s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 30s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
2026-09-21 07:54:25 +02:00
lilleman
b85d1f1dab
Compare throughput against jsmpp and Cloudhopper on one sink
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 29s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 29s
Mirror / push (push) Has been cancelled
2026-09-20 23:45:09 +02:00
lilleman
c5ed25f915
Make throughput goal 6, with floors a release has to clear
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 30s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 30s
Test / test (26) (pull_request) Successful in 31s
Mirror / push (push) Successful in 5s
2026-09-20 23:23:08 +02:00
lilleman
36d32591c3
Plan 0.6.0 as the quality cut the comprehension panel and architecture review ask for
Test / lint (pull_request) Successful in 22s
Test / test (18) (pull_request) Successful in 30s
Test / test (20) (pull_request) Successful in 29s
Test / test (22) (pull_request) Successful in 30s
Test / test (24) (pull_request) Successful in 29s
Test / test (26) (pull_request) Successful in 30s
Mirror / push (push) Has been cancelled
2026-09-20 22:42:07 +02:00
lilleman
45171c2697
Bound the wait in the default test, and pin the boolean a refusal prints
Mirror / push (push) Successful in 4s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Failing after 18s
Test / test (20) (pull_request) Successful in 22s
Test / test (22) (pull_request) Successful in 19s
Test / test (24) (pull_request) Successful in 19s
Test / test (26) (pull_request) Successful in 19s
2026-09-20 20:46:45 +02:00
lilleman
a24f350b7a
Prove the default bound is wired, and name the option on the failure a consumer reads
Mirror / push (push) Successful in 4s
Test / lint (pull_request) Successful in 22s
Test / test (18) (pull_request) Failing after 19s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 24s
Test / test (24) (pull_request) Successful in 20s
Test / test (26) (pull_request) Successful in 19s
2026-09-20 20:41:45 +02:00
lilleman
1416615ca3
Bound every connect attempt at 10 s by default, with false the way to opt out
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 19s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 19s
Test / test (24) (pull_request) Successful in 20s
Test / test (26) (pull_request) Successful in 19s
2026-09-20 20:34:53 +02:00
lilleman
8f416c2bc4
Name the peer and the stalled phase on a connect timeout, and quote an untyped value
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 19s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 24s
Test / test (24) (pull_request) Successful in 18s
Test / test (26) (pull_request) Successful in 19s
2026-09-20 18:17:39 +02:00
lilleman
84174b4a5b
Refuse a connectTimeout Node's timers cannot hold, and pin the refusals the tests missed
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 20s
Test / test (18) (pull_request) Successful in 26s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 20s
Test / test (24) (pull_request) Successful in 19s
Test / test (26) (pull_request) Successful in 20s
2026-09-20 18:12:39 +02:00
lilleman
17447bbe3a
Give up a connect after connectTimeout instead of waiting the OS out
Mirror / push (push) Successful in 4s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 22s
Test / test (20) (pull_request) Successful in 18s
Test / test (22) (pull_request) Successful in 18s
Test / test (24) (pull_request) Successful in 19s
Test / test (26) (pull_request) Successful in 27s
2026-09-20 00:42:09 +02:00
lilleman
d874448273
Plan a connectTimeout option, found comparing 0.5.0 with the larvitsmpp forks
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 20s
Test / test (20) (pull_request) Successful in 18s
Test / test (22) (pull_request) Successful in 27s
Test / test (24) (pull_request) Successful in 19s
Test / test (26) (pull_request) Successful in 28s
Mirror / push (push) Successful in 4s
2026-09-20 00:23:06 +02:00
lilleman
0f13951e8c
Move the goals to README.md and state the audience
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 21s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 20s
Test / test (24) (pull_request) Successful in 20s
Test / test (26) (pull_request) Successful in 20s
2026-09-19 00:48:21 +02:00
lilleman
1c0b4bef34
Tick off the 0.5.0 cleanup in todo.md, and decline a token expiry check
Test / lint (pull_request) Successful in 20s
Test / test (18) (pull_request) Successful in 18s
Test / test (20) (pull_request) Successful in 17s
Test / test (22) (pull_request) Successful in 18s
Test / test (24) (pull_request) Successful in 18s
Test / test (26) (pull_request) Successful in 18s
Mirror / push (push) Successful in 4s
2026-09-14 21:19:17 +02:00
lilleman
14b114afda
Split the GitHub mirror so Gitea creates its runs and no delete is dropped
Mirror / push (push) Successful in 5s
Test / lint (pull_request) Successful in 20s
Test / test (18) (pull_request) Successful in 18s
Test / test (20) (pull_request) Successful in 18s
Test / test (22) (pull_request) Successful in 22s
Test / test (24) (pull_request) Successful in 17s
Test / test (26) (pull_request) Successful in 17s
2026-09-14 20:40:38 +02:00
lilleman
27e8f288ec
Mirror every branch and tag to GitHub from CI, keeping what only GitHub has
2026-09-14 20:40:38 +02:00
lilleman
e1999a7305
Let a registered encoding claim a data_coding a built-in already uses, in todo.md
Test / lint (pull_request) Successful in 20s
Test / test (18) (pull_request) Successful in 17s
Test / test (20) (pull_request) Successful in 18s
Test / test (22) (pull_request) Successful in 18s
Test / test (24) (pull_request) Successful in 17s
Test / test (26) (pull_request) Successful in 19s
2026-09-14 20:38:02 +02:00
lilleman
baa0ad553a
Set failover's options, and decide to test on Linux only while keeping macOS and Windows unbroken
Test / lint (pull_request) Successful in 19s
Test / test (18) (pull_request) Successful in 17s
Test / test (20) (pull_request) Successful in 17s
Test / test (22) (pull_request) Successful in 17s
Test / test (24) (pull_request) Successful in 17s
Test / test (26) (pull_request) Successful in 17s
2026-09-14 17:26:46 +02:00
lilleman
e32f9ccf46
Plan failover, an optional store for pooling and restarts, shipping src, and Gitea runners for macOS and Windows
Test / lint (pull_request) Successful in 19s
Test / test (18) (pull_request) Successful in 18s
Test / test (20) (pull_request) Successful in 18s
Test / test (22) (pull_request) Successful in 19s
Test / test (24) (pull_request) Successful in 17s
Test / test (26) (pull_request) Successful in 18s
2026-09-14 17:08:54 +02:00
lilleman
b3cbbba615
Record the gaps found against other SMPP libraries, and make configurable and extendable a goal
Test / lint (pull_request) Successful in 1m4s
Test / test (18) (pull_request) Successful in 17s
Test / test (20) (pull_request) Successful in 17s
Test / test (22) (pull_request) Successful in 18s
Test / test (24) (pull_request) Successful in 25s
Test / test (26) (pull_request) Successful in 56s
2026-09-14 16:32:23 +02:00
lilleman
95e1f910a3
Track the peer's address on every log message in todo.md, and keep Renovate's dashboard open
Test / lint (pull_request) Successful in 24s
Test / test (18) (pull_request) Successful in 19s
Test / test (20) (pull_request) Successful in 19s
Test / test (22) (pull_request) Successful in 19s
Test / test (24) (pull_request) Successful in 18s
Test / test (26) (pull_request) Successful in 20s
2026-09-14 15:04:12 +02:00
lilleman
0f14ca85c2
Plan 0.5.0 in todo.md, holding the GitHub work until it is published
Test / lint (pull_request) Successful in 21s
Test / test (18) (pull_request) Successful in 19s
Test / test (20) (pull_request) Successful in 24s
Test / test (22) (pull_request) Successful in 19s
Test / test (24) (pull_request) Successful in 18s
Test / test (26) (pull_request) Successful in 19s
Release / publish (push) Successful in 37s
2026-09-14 14:09:58 +02:00
lilleman
773db43305
Record the move to Gitea and the GitHub retirement in todo.md
Test / lint (pull_request) Successful in 20s
Test / test (18) (pull_request) Successful in 18s
Test / test (20) (pull_request) Successful in 17s
Test / test (22) (pull_request) Successful in 17s
Test / test (24) (pull_request) Successful in 18s
Test / test (26) (pull_request) Successful in 19s
2026-09-13 17:57:10 +02:00
lilleman
8315f1882a
Keep todo.md, and plan the backlog close-out and the move to Gitea in it
Test / lint (push) Successful in 20s
Test / test (18) (push) Successful in 19s
Test / test (20) (push) Successful in 19s
Test / test (22) (push) Successful in 19s
Test / test (24) (push) Successful in 18s
Test / test (26) (push) Successful in 29s
2026-09-13 16:31:07 +02:00
lilleman
13e3ff8f1f
Say undefined where the SMSC named no id for a segment it took ( #101 )
...
* Cover the ids a send gets back where the SMSC named only some of them
* Say undefined where the SMSC named no id for a segment it took
* Record why the merger takes the wider type, and de-duplicate the interop narrowing
* Guard the numbering hole the merger must refuse, and correct the phase record
2026-09-12 22:37:55 +02:00
lilleman
ca1a7473ed
Declare the alphabet a GSM message is actually written in ( #100 )
...
* Regression tests for the alphabet a GSM message declares
* Declare the alphabet a GSM message is actually written in
* Reflow the composing-by-hand paragraph
* Drop the ASCII alias SMPP's flat table shares with the option's own
* Bound the receipt test's wait and tighten the notes around it
2026-09-09 21:30:55 +02:00
lilleman
989eb01763
Name the refusal rule, and refuse a period the encoder cannot spell ( #99 )
...
* Refuse a relative validity period the SMPP time format cannot hold
* Export unencodableText(), so a caller can word a refusal as the library does
* Name the refusal rule in the README, and correct what it claims
* Word the period refusal by what the encoder spells, and keep unencodableText() internal
* Correct the decision bullet premise about what the relative format holds
* Close the stability nits on the time guard and its tests
2026-09-09 20:36:13 +02:00
lilleman
ef13290230
Refuse a body the PDU's own data_coding cannot carry ( #98 )
...
* Regression tests for a body the PDU's own data_coding cannot carry
* Refuse a body the PDU's own data_coding cannot carry, in the codec both send paths build through
* Record the codec's body refusal, and drop two todo entries it and the interop run close
* Regression tests for the aliased body TLV and the data_coding short_message settles
* Find the body TLV by tag id, leave data_coding to the field that will be read, and correct the record
* Record the two architecture findings this change does not close
* Regression tests for a duplicated body tag and a short_message the wire never carries
* Resolve every body TLV against the field that will be read, and move TLV writing to its table
* Regression tests for a body only the TLV carries and an empty short_message
* Let only octets the command writes settle the alphabet, and stop shadowing the TLV table
2026-09-09 19:33:36 +02:00
lilleman
c06cc0648b
Refuse what we cannot send: an alphabet that cannot carry the message, and a time nobody can read ( #97 )
...
* Regression tests for a named alphabet and a time that cannot carry the send
* Refuse a message the named alphabet cannot carry, and a time nobody can read
* Close the architecture review: a builder that cannot drop a time, and docs that hold
* Refuse a time of no known kind, and clamp a relative period to what the format holds
* Reflow the decision record and name the clamp in its test
2026-09-09 18:16:08 +02:00
lilleman
7d6039796d
Fit every concatenated segment in an SMS, and close the encoding helpers' throw ( #96 )
...
* Regression tests for the concatenated segment budget and the encoding-name door
* Budget unpacked segments at 134 octets, and export isEncodingName
* Name the length a Latin-1 message starts costing more segments at
* Fold the totality clause into hard rule 1, and log the unrepresentable-alphabet finding
* Make the maxSegments regression discriminate, and drop the narrating comments
* State the per-alphabet capacities accurately, and log the invalid-date path
2026-09-09 17:21:51 +02:00
lilleman
e80b07167c
Read the GSM 03.38 message class where the spec puts it ( #95 )
...
* Regression tests for the GSM 03.38 message class behind sms.flash
* Read the GSM 03.38 message class where the spec puts it, and refuse a flash message no alphabet can carry
* Keep the code span in the message-class decision on one line
* Stop offering the flash message class as an alphabet, and check the encoding option by name
* Settle every refusable send option in one check, and record what the review left open
* Say what the flash refusal and the encoding option actually do
* Keep the README off the alphabet whose long messages do not fit
2026-09-09 16:40:32 +02:00
lilleman
bd466d393a
Turn the interoperability plan into the suite's README now that every phase has run
2026-09-09 14:06:34 +02:00
lilleman
ad094b3897
Record the two version-gate asks left open on the rewrite PR
2026-09-06 17:26:44 +02:00
lilleman
d21df7c04b
Plan one product-owner pass over the surface the interoperability fixes moved
2026-09-06 17:24:50 +02:00
lilleman
8a565cf557
Plan the interoperability tests against real-world SMPP peers before 1.0.0
2026-09-05 17:31:02 +02:00
lilleman
8c46e925a1
Record the branch renames: master to v0.4.0, typescript to main as default
2026-09-04 11:16:54 +02:00
lilleman
144567c294
Claim an error only where the state failed, and freeze the two state lists
2026-09-04 08:51:13 +02:00
lilleman
54493c12b2
Write a transient state as an intermediate delivery notification
2026-09-04 08:38:29 +02:00
lilleman
2936c7060d
Justify the state test by what peers write, not by what this library happens to write
2026-09-03 21:17:39 +02:00
lilleman
42e6e97447
Read a receipt reporting a transient state as non-final too, so the merge waits for the real one
2026-09-03 19:28:08 +02:00
lilleman
50679ec2fe
Read an intermediate delivery notification as a report, and keep it out of the merge
2026-09-03 17:30:09 +02:00
lilleman
0d30864886
Say in goal 7 that the scope floor covers the seam too, and decline merge-state persistence
2026-09-02 12:36:06 +02:00