Release as 0.5.0 rather than 1.0.0 #2

Merged
lilleman merged 2 commits from release-0.5.0 into main 2026-09-14 14:15:27 +02:00
5 changed files with 44 additions and 37 deletions
+10 -9
View File
@@ -5,7 +5,7 @@ Guidance for LLM agents working in this repository. What each file in it is for
## What this is ## What this is
A ground-up TypeScript rewrite of `larvitsmpp` 0.4.0, published as `@larvit/smpp` 1.0.0. The branch A ground-up TypeScript rewrite of `larvitsmpp` 0.4.0, published as `@larvit/smpp` 0.5.0. The branch
started from an orphan commit — no history from 0.4.0 is carried over. The 0.4.0 source is still started from an orphan commit — no history from 0.4.0 is carried over. The 0.4.0 source is still
readable on the `v0.4.0` branch of the same repository and is the reference for protocol behaviour, readable on the `v0.4.0` branch of the same repository and is the reference for protocol behaviour,
not for structure or style. not for structure or style.
@@ -338,14 +338,15 @@ Grouped by what each one constrains.
What settles it here is the resolved text rather than the parameter, because `writeParams()` What settles it here is the resolved text rather than the parameter, because `writeParams()`
substitutes the field's own default: a peer that omits `message_id` and one that writes it empty substitutes the field's own default: a peer that omits `message_id` and one that writes it empty
build the same octets, leaving a raw-parameter test nothing to tell apart. Rejected: keeping `''` build the same octets, leaving a raw-parameter test nothing to tell apart. Rejected: keeping `''`
and documenting it, which leaves the published type promising what the value does not keep — and documenting it, which leaves the published type promising what the value does not keep — goal
goal 2, a wrong answer about what the peer named. Rejected: dropping the unnamed entries, which 2, a wrong answer about what the peer named. Rejected: dropping the unnamed entries, which breaks
breaks the positional correspondence with `pduObjs` that README promises and loses which segment a the positional correspondence with `pduObjs` that README promises and loses which segment a PDU
PDU belongs to. Rejected: `{ id?: string; pduObj: PduObject }[]`, which makes that positional belongs to. Rejected: `{ id?: string; pduObj: PduObject }[]`, which makes that positional promise
promise structural where today the compiler cannot check it; deferred to the next major, the first structural where today the compiler cannot check it; deferred to the next breaking release, the
place two documented fields may become one. Accepted: every consumer reading `smsIds` narrows, first place two documented fields may become one. Accepted: every consumer reading `smsIds`
including the majority whose SMSC names every id; indexing narrows too, except for the consumer narrows, including the majority whose SMSC names every id; indexing narrows too, except for the
who sets `noUncheckedIndexedAccess`, which typed `smsIds[0]` as `string | undefined` already. consumer who sets `noUncheckedIndexedAccess`, which typed `smsIds[0]` as `string | undefined`
already.
### The wire ### The wire
+1 -1
View File
@@ -1,6 +1,6 @@
# Migrating from larvitsmpp 0.4.0 # Migrating from larvitsmpp 0.4.0
`@larvit/smpp` 1.0.0 succeeds [larvitsmpp](https://www.npmjs.com/package/larvitsmpp) 0.4.0. The `@larvit/smpp` 0.5.0 succeeds [larvitsmpp](https://www.npmjs.com/package/larvitsmpp) 0.4.0. The
shape is the same, connect, send, listen for delivery reports, with callbacks replaced by promises. shape is the same, connect, send, listen for delivery reports, with callbacks replaced by promises.
## API changes ## API changes
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "@larvit/smpp", "name": "@larvit/smpp",
"version": "1.0.0", "version": "0.5.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@larvit/smpp", "name": "@larvit/smpp",
"version": "1.0.0", "version": "0.5.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@eslint/js": "10.0.1", "@eslint/js": "10.0.1",
+4 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@larvit/smpp", "name": "@larvit/smpp",
"version": "1.0.0", "version": "0.5.0",
"description": "SMPP 3.4 client and server for Node.js with the session layer built in: keepalive, reconnect, send window, long messages and delivery receipts", "description": "SMPP 3.4 client and server for Node.js with the session layer built in: keepalive, reconnect, send window, long messages and delivery receipts",
"keywords": [ "keywords": [
"esm", "esm",
@@ -10,6 +10,9 @@
"typescript" "typescript"
], ],
"homepage": "https://gitea.larvit.se/larvit/smpp-js", "homepage": "https://gitea.larvit.se/larvit/smpp-js",
"bugs": {
"url": "https://github.com/larvit/smpp-js/issues"
},
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://gitea.larvit.se/larvit/smpp-js.git" "url": "git+https://gitea.larvit.se/larvit/smpp-js.git"
+27 -24
View File
@@ -9,7 +9,7 @@ govern it, and nothing here is a source anything else may cite.
## Status ## Status
The rewrite is **feature complete and green**: the suite, lint and typecheck are clean on Node 18 The rewrite is **feature complete and green**: the suite, lint and typecheck are clean on Node 18
to 26. What is left is release work and a few things worth adding before or after 1.0.0. to 26. What is left is release work and a few things worth adding before or after 0.5.0.
## The agreed API ## The agreed API
@@ -73,51 +73,52 @@ Every defect listed in the AGENTS.md table has a regression test naming the beha
## Move the repository to Gitea ## Move the repository to Gitea
`gitea.larvit.se/larvit/smpp-js` is the repository and `github.com/larvit/smpp-js` becomes a push `gitea.larvit.se/larvit/smpp-js` is the repository. `github.com/larvit/smpp-js` becomes a push mirror
mirror of it. Maintainer's call, 2026-09-13, to move before 1.0.0. of it and the place issues are filed. Maintainer's calls, 2026-09-13 and 2026-09-14.
- [x] `larvit/smpp-js` holds `main`, from `typescript`, and `v0.4.0`, from `master`. `rewrite-base` - [x] `larvit/smpp-js` holds `main`, from `typescript`, and `v0.4.0`, from `master`. `rewrite-base`
and the `renovate/*` branches stayed behind. and the `renovate/*` branches stayed behind.
- [x] Fast-forward is the only merge style. `main` takes no pushes, requires `Test / lint - [x] Fast-forward is the only merge style. `main` takes no pushes, requires `Test / lint
(pull_request)` and `Test / test (*) (pull_request)`, blocks an outdated branch, and gives (pull_request)` and `Test / test (*) (pull_request)`, blocks an outdated branch, and gives
admins no override. admins no override. Every other branch takes force pushes.
- [x] The workflows are in `.gitea/workflows/`. Tests run on pull requests only, the event the gate - [x] The workflows are in `.gitea/workflows/`. Tests run on pull requests only, the event the gate
reads; Renovate runs as a scheduled workflow, as on adf-codec. reads; Renovate runs as a scheduled workflow, as on adf-codec.
- [x] The release publishes without provenance, which npm generates only on GitHub Actions and - [x] The release publishes without provenance, which npm generates only on GitHub Actions and
GitLab CI/CD. GitLab CI/CD.
- [x] `package.json` names Gitea. The README links absolutely: npmjs.com resolves a relative link - [x] `package.json` names Gitea, and the GitHub mirror's issues as `bugs`. The README links
against itself when the `repository` is not on GitHub. Its test badge is gone, since Gitea absolutely: npmjs.com resolves a relative link against itself when the `repository` is not on
reports a workflow's status per branch and no workflow runs on `main`. GitHub. Its test badge is gone, since Gitea reports a workflow's status per branch and no
- [ ] Add `RENOVATE_GITHUB_TOKEN` as an organization secret. The Renovate workflow reads it for workflow runs on `main`.
GitHub-hosted lookups, the actions included, and adf-codec has it as a repository secret only. - `RENOVATE_GITHUB_TOKEN` exists nowhere, so Renovate queries github.com unauthenticated, as
- [ ] **Where issues are filed.** Gitea issues are off, so `package.json` names no `bugs` URL until adf-codec's nightly run already does without a warning. `RENOVATE_TOKEN` is the Gitea token and
this is decided. cannot stand in for it. Add a github.com token only if lookups hit the rate limit.
- [ ] **Review bot.** CodeRabbit does not support Gitea.
## Before publishing 1.0.0 ## Before publishing 0.5.0
- [x] 0.5.0 rather than 1.0.0, while usage is this low. Maintainer's call, 2026-09-14.
- [x] `NPM_TOKEN`, which `.gitea/workflows/release.yaml` needs, is a Gitea organization secret. - [x] `NPM_TOKEN`, which `.gitea/workflows/release.yaml` needs, is a Gitea organization secret.
- [ ] Tag `v1.0.0` on Gitea to publish. The first publish creates `@larvit/smpp` on npm, provided the - [ ] Tag `v0.5.0` on Gitea to publish. The first publish creates `@larvit/smpp` on npm, provided the
token can publish under `@larvit`. token can publish under `@larvit`.
- [ ] `npm deprecate larvitsmpp` pointing at `@larvit/smpp`. Maintainer's call to run it; not - [ ] `npm deprecate larvitsmpp` pointing at `@larvit/smpp`. Maintainer's call to run it; not
something CI should do. something CI should do.
## Retire the GitHub repository ## Retire the GitHub repository
In this order. The push mirror replaces GitHub's branches with Gitea's, which closes every pull Nothing here starts before 0.5.0 is published. Maintainer's call, 2026-09-14. Then in this order:
request based on `master` without a reply, and GitHub refuses to delete the default branch it syncs the push mirror replaces GitHub's branches with Gitea's, which closes every pull request based on
over. `master` without a reply, and GitHub refuses to delete the default branch it syncs over.
- [ ] Close the backlog below. - [ ] Close the backlog below.
- [ ] Close [#71](https://github.com/larvit/larvitsmpp/pull/71), pointing at Gitea. - [ ] Close [#71](https://github.com/larvit/larvitsmpp/pull/71), pointing at Gitea.
- [ ] Rename `larvit/larvitsmpp` to `larvit/smpp-js`; GitHub redirects the old URLs. - [ ] Rename `larvit/larvitsmpp` to `larvit/smpp-js`. GitHub redirects the old URLs, and the `bugs`
URL in `package.json` resolves from then on.
- [ ] Push `main` and make it GitHub's default branch. - [ ] Push `main` and make it GitHub's default branch.
- [ ] Remove Renovate and CodeRabbit from the GitHub repository. - [ ] Remove Renovate and CodeRabbit from the GitHub repository.
- [ ] Add it to Gitea as a push mirror, with a GitHub credential that can write to it. - [ ] Add it to Gitea as a push mirror, with a GitHub credential that can write to it.
## Close the GitHub backlog ## Close the GitHub backlog
**Answer and close as fixed by 1.0.0**, the reply naming what fixed it: **Answer and close as fixed by 0.5.0**, the reply naming what fixed it:
- [ ] [#2](https://github.com/larvit/larvitsmpp/issues/2) Tests for the README examples: - [ ] [#2](https://github.com/larvit/larvitsmpp/issues/2) Tests for the README examples:
`test/readme.test.ts`. `test/readme.test.ts`.
@@ -192,11 +193,13 @@ session message is a change to every call site.
- [ ] **A gate that fails when the test matrix misses the current Node.** Maintainer's ask on - [ ] **A gate that fails when the test matrix misses the current Node.** Maintainer's ask on
[#71](https://github.com/larvit/larvitsmpp/pull/71), 2026-09-06, on the Node 26 thread. Node [#71](https://github.com/larvit/larvitsmpp/pull/71), 2026-09-06, on the Node 26 thread. Node
26 was added by hand; nothing notices when 27 ships. Needs a 26 was added by hand; nothing notices when 27 ships. Needs a source for what Current is — the
source for what Current is — the Node release schedule is published as JSON — and a decision Node release schedule is published as JSON — and a decision on whether a new Current fails the
on whether a new Current fails the build or opens a PR, which is what Renovate already does build or opens a PR, which is what Renovate already does for everything else here.
for everything else here.
- [ ] **CodeRabbit reviews through the GitHub mirror.** CodeRabbit does not support Gitea, so mirror
each Gitea pull request to GitHub for it to review there. Maintainer's ask, 2026-09-14; not
started until asked.
- [ ] **Group the session's collaborators under `src/session/`.** `session.ts` imports - [ ] **Group the session's collaborators under `src/session/`.** `session.ts` imports
`dlr-merger`, `incoming-requests`, `link-timers`, `outgoing-requests`, `pdu-transport`, `dlr-merger`, `incoming-requests`, `link-timers`, `outgoing-requests`, `pdu-transport`,
@@ -248,7 +251,7 @@ session message is a change to every call site.
already had answered, so the loss is real — but surviving it means handing the application the merge already had answered, so the loss is real — but surviving it means handing the application the merge
state to persist, which the scope floor covers as squarely as holding the state here would, and state to persist, which the scope floor covers as squarely as holding the state here would, and
which publishes the shape of `DlrMerger`'s groups against goal 6. Nothing is foreclosed: the seam which publishes the shape of `DlrMerger`'s groups against goal 6. Nothing is foreclosed: the seam
can still be added after 1.0.0 as a minor. can still be added after 0.5.0 as a minor.
- **Throughput throttling — a TPS cap, and backing off on `ESME_RTHROTTLED`.** Declined by AGENTS.md - **Throughput throttling — a TPS cap, and backing off on `ESME_RTHROTTLED`.** Declined by AGENTS.md
goal 7: an operator's rate limit is scoped to the account, while the widest thing this library owns goal 7: an operator's rate limit is scoped to the account, while the widest thing this library owns