Say in goal 7 that the scope floor covers the seam too, and decline merge-state persistence
This commit is contained in:
@@ -34,8 +34,10 @@ one wins. They do not override the hard rules below.
|
|||||||
promise this library can verify. The low-level surface is a passthrough: policy binds what the
|
promise this library can verify. The low-level surface is a passthrough: policy binds what the
|
||||||
library composes, never what the caller wrote.
|
library composes, never what the caller wrote.
|
||||||
7. **Nothing that needs state wider than one session.** No throughput throttling, no persistence
|
7. **Nothing that needs state wider than one session.** No throughput throttling, no persistence
|
||||||
across a restart, no coordination between processes. This is the scope floor, and it is why an
|
across a restart, no coordination between processes — and no seam handing the application state to
|
||||||
otherwise reasonable feature is declined without a fresh argument each time.
|
persist for one of those either, which commits to the same scope through the back door and
|
||||||
|
publishes an internal shape to do it. This is the scope floor, and it is why an otherwise
|
||||||
|
reasonable feature is declined without a fresh argument each time.
|
||||||
8. **It builds, tests and runs the same everywhere.** Container-only toolchain, no runtime
|
8. **It builds, tests and runs the same everywhere.** Container-only toolchain, no runtime
|
||||||
dependencies, the Node 18 floor verified in CI rather than asserted, every README example executed
|
dependencies, the Node 18 floor verified in CI rather than asserted, every README example executed
|
||||||
by the suite.
|
by the suite.
|
||||||
|
|||||||
@@ -118,10 +118,6 @@ session message is a change to every call site.
|
|||||||
|
|
||||||
## Worth doing, not blocking
|
## Worth doing, not blocking
|
||||||
|
|
||||||
- [ ] **Merge state does not survive a process restart.** A drop no longer discards it, but a restart
|
|
||||||
loses every incomplete group, and a peer has no reason to resend a receipt it already had
|
|
||||||
answered. Surviving one means exposing the merge state for the application to persist and hand
|
|
||||||
back, which is a public-surface decision.
|
|
||||||
- [ ] **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`,
|
||||||
`reconnect-loop` and `send-sms`, and nothing else does, so the directory would make that
|
`reconnect-loop` and `send-sms`, and nothing else does, so the directory would make that
|
||||||
@@ -168,6 +164,13 @@ session message is a change to every call site.
|
|||||||
|
|
||||||
## Declined
|
## Declined
|
||||||
|
|
||||||
|
- **Merge state surviving a process restart.** Declined by AGENTS.md goal 7, maintainer's call,
|
||||||
|
2026-09-02. A restart loses every incomplete receipt group and a peer has no reason to resend one it
|
||||||
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
- **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
|
||||||
is a session, so a bucket here cannot see a second process binding the same account and is wrong in
|
is a session, so a bucket here cannot see a second process binding the same account and is wrong in
|
||||||
|
|||||||
Reference in New Issue
Block a user