Commita00853eaRecorded3 Aug 2026Repositorycourier

Relock courier to sigil 0.18.2

Message

Moves courier onto the 0.18.2 runtime for the guard/continuation fixes (silent exit 0 mid-program, handler corruption across suspension, escaped raises), the defects courier's long-standing silent-drop and send-duplication bugs are suspected to share.

Changes:

  • sigil: ^0.17 -> ^0.18, and the existing explicit sigil-lib pin moves to ^0.18. That pin is load-bearing: without it, bumping sigil: alone moves sigil-stdlib to 0.18.2 while leaving sigil-lib, the C runtime carrying the fix, at 0.17.x, and sigil deps install still exits 0.
  • Import rename (sigil env) -> (sigil dotenv) in main.sgl. Sigil 0.18 renamed the stdlib module and reused the old name for an unrelated library, so the rename is the fix, not a new dependency.
  • sigil-mcp pinned to ^0.17, whose server.sgl carries the same migration. The 0.17 line is the one requiring the 0.18 runtime; ^0.16 must NOT be used here, since the 0.16 line is reserved for 0.17 runtimes and would reintroduce a binary that cannot load.

sigil-test/-runner stay on ^0.17: sigil-tls and sigil-crypto, still on 0.16.x, declare them as dev-deps at ^0.17, so ^0.18 is unsatisfiable.

Lock resolves sigil-lib to 0.18.2 (sha 7e7c8873) and sigil-mcp to 0.17.0 (sha be7cf755).

Verified behaviourally: courier 0.3.9 (sigil 0.18.2), against a baseline binary that self-reported courier 0.3.9 (sigil 0.17.12).

Matched pair against the 0.17.12 baseline, identical on both sides: suite, 10 consecutive runs 82 passed / 0 failed, every run multi-relay stress, 20 runs 0/20 crashes poller heartbeat 4/4 checks

No test changed state. That is a statement about SUITE COVERAGE, not about the runtime fix: the suite was already non-flaky on 0.17.12 across 10 runs, so it does not exercise the silent-drop or duplication paths. Those are live-operation failures and remain open questions answerable only by running this build and watching it.

Changed
 package.sgl          | 13 +++++++++----
 sigil.lock           | 18 +++++++++---------
 src/courier/main.sgl |  2 +-
 3 files changed, 19 insertions(+), 14 deletions(-)
Diff
package.sglmodified
@@ -10,7 +10,7 @@
10
url: "https://codeberg.org/sigil/courier"
11
license: "BSD-3-Clause"
12
authors: (list "David Wilson <david@daviwil.com>")
−13
sigil: "^0.17"
+13
sigil: "^0.18"
14
15
entry: '(courier main)
16
bundle-name: "courier"
@@ -35,13 +35,18 @@
35
;; sigil-lib (^0.14 from the retired sigil-lang repo) that the
36
;; transitive c-source packages (sigil-tls/sigil-crypto, via
37
;; sigil-telegram's ^0.14 chain) would otherwise derive. The 0.17
−38
;; native codegen needs 0.17 runtime headers to build libsigil.a.
+38
;; native codegen needs matching runtime headers to build libsigil.a.
+39
;; Bumped to ^0.18 for the 0.18.2 guard/continuation fix. This pin is
+40
;; load-bearing: WITHOUT it, bumping only the `sigil:` field above moves
+41
;; sigil-stdlib to 0.18.2 while leaving sigil-lib -- the C runtime that
+42
;; carries the fix -- derived transitively at 0.17.x, and `sigil deps
+43
;; install` still exits 0. Verify in sigil.lock, not here.
44
(from-git url: "codeberg:sigil/sigil"
−40
package: "sigil-lib" version: "^0.17")
+45
package: "sigil-lib" version: "^0.18")
46
(from-git url: "codeberg:sigil/sigil-json" version: "^0.16")
47
(from-git url: "codeberg:sigil/sigil-log" version: "^0.16")
48
(from-git url: "codeberg:sigil/sigil-socket" version: "^0.17")
−44
(from-git url: "codeberg:sigil/sigil-mcp" version: "^0.16")
+49
(from-git url: "codeberg:sigil/sigil-mcp" version: "^0.17") ; the 0.17 line REQUIRES the 0.18 runtime; ^0.16 must not be used here
50
(from-git url: "codeberg:sigil/sigil-yaml" version: "^0.9.1")
51
(from-git url: "codeberg:sigil/sigil-telegram" version: "^0.10.0"))
52
sigil.lockmodified
@@ -2,16 +2,16 @@
2
(lock
3
(package name: "sigil-stdlib"
4
url: "codeberg:sigil/sigil"
−5
ref: "^0.17"
−6
sha: "bd2a47b44bff2051073044046e000fd7f0e587ca"
+5
ref: "^0.18"
+6
sha: "7e7c8873d45338a8e892aa3982b6991d9a1fa5a5"
7
package-selector: "sigil-stdlib"
−8
version: "0.17.12")
+8
version: "0.18.2")
9
(package name: "sigil-lib"
10
url: "codeberg:sigil/sigil"
−11
ref: "^0.17"
−12
sha: "bd2a47b44bff2051073044046e000fd7f0e587ca"
+11
ref: "^0.18"
+12
sha: "7e7c8873d45338a8e892aa3982b6991d9a1fa5a5"
13
package-selector: "sigil-lib"
−14
version: "0.17.12")
+14
version: "0.18.2")
15
(package name: "sigil-json"
16
url: "codeberg:sigil/sigil-json"
17
ref: "^0.16"
@@ -29,9 +29,9 @@
29
version: "0.17.0")
30
(package name: "sigil-mcp"
31
url: "codeberg:sigil/sigil-mcp"
−32
ref: "^0.16"
−33
sha: "1a0175939d7841686cad8793ed5faa1d10602351"
−34
version: "0.16.4")
+32
ref: "^0.17"
+33
sha: "be7cf755df13f76b83695d6f3d8af12682470dbd"
+34
version: "0.17.0")
35
(package name: "sigil-yaml"
36
url: "codeberg:sigil/sigil-yaml"
37
ref: "^0.9.1"
src/courier/main.sglmodified
@@ -9,7 +9,7 @@
9
(import (sigil core)
10
(sigil string)
11
(sigil io)
−12
(sigil env)
+12
(sigil dotenv)
13
(sigil async)
14
(sigil fs)
15
(sigil path)