Commitec64600cRecorded25 Aug 2026Repositorysigil-web

Cross the stdlib 0.19 boundary; bump sigil-web to 0.17.0

Message

sigil-web pinned sigil-nrepl "^0.16", whose exclusive ceiling is 0.17.0. The absorbed-standalone fix ships in sigil-nrepl v0.17.1, which consumes sigil-repl from the monorepo instead of the archived standalone, so no consumer reaching sigil-repl through sigil-web could see it.

Crossing that boundary is a multi-range bump, not a one-line change: the runtime floor and every dependency that still declares an absorbed standalone have to move together, or the relock manufactures duplicate module providers instead of removing them.

  sigil             ^0.17   -> ^0.19    nrepl 0.17.1 requires ^0.19
  sigil-nrepl       ^0.16   -> ^0.17.1  first release off the standalone
  sigil-http        ^0.18.0 -> ^0.18.4  first release without sigil-socket
  sigil-test        ^0.19            }  keeps the runner pair on one line
  sigil-test-runner ^0.19            }  0.17.3 declares sigil-ansi

Each floor names the release where the behaviour works, not the series that contains it. That matters most for sigil-nrepl: "^0.17" would also admit v0.17.0, which still declares codeberg:sigil/sigil-repl and sigil-socket, so a lock written before v0.17.1 existed resolves the archived standalone back in and builds green with three duplicate providers. "^0.17.1" is what actually holds the property.

Minor, not patch, and the number is the whole point. A dependency's sigil: floor is not enforced during resolution -- only the root package's is -- so a consumer left on the 0.17 or 0.18 runtime that picks this up resolves a 0.17 stdlib beside 0.19-line packages and builds green with no diagnostic. A patch release would have been taken automatically by everyone pinned ^0.16, and that silence is exactly what pre-1.0 minor-as-major exists to prevent. 0.17.0 makes consumers opt in. sigil-nrepl 0.17.0 -> 0.17.1 and sigil-http 0.18.0 -> 0.18.4 crossed the same boundary as patches; on this mechanism they most likely shipped the same hazard quietly, so they are not a precedent to keep.

The drag is sigil-test-runner, not sigil-test: sigil-test at 0.17.3 has an empty dependencies list. sigil-test-runner declares sigil-ansi directly and reaches sigil-version and sigil-git through workspace sigil-build and sigil-deps.

Full lock inventory, 18 entries -> 12:

  removed  sigil-ansi 0.16.0   sigil-args 0.16.0    sigil-docs 0.16.1
           sigil-git 0.16.0    sigil-hooks 0.16.1   sigil-socket 0.16.0
           sigil-version 0.16.0
  added    sigil-sqlite 0.16.2
  changed  sigil-crypto 0.16.3 -> 0.16.5   sigil-http 0.18.0 -> 0.18.4
           sigil-lib 0.17.3 -> 0.19.3      sigil-nrepl 0.16.1 -> 0.17.1
           sigil-repl 0.16.1 -> 0.19.3     sigil-stdlib 0.17.3 -> 0.19.3
           sigil-test 0.17.3 -> 0.19.3     sigil-test-runner 0.17.3 -> 0.19.3
           sigil-tls 0.16.3 -> 0.16.6

sigil-repl stays in the lock but changes provenance: it now resolves from url codeberg:sigil/sigil with package-selector sigil-repl, not the archived standalone repository.

Two of those entries are more than bookkeeping. sigil-tls 0.16.6 bounds the TLS handshake as a whole rather than per read, makes tls-write yield instead of block, and fixes a descriptor leak, so HTTPS behaviour moves with it. sigil-sqlite vendors a SQLite amalgamation that is compiled into a build.

Verified by looking rather than by a green suite: the five absorbed _pkg manifests are absent post-build where all five were present pre-build, and the build log shows exactly one producing package for all six absorbed modules, now sigil-stdlib where it was previously the standalone. The suite passes 173 assertions, which is recorded but proves nothing here: a tree carrying the archived standalone and three duplicate providers passes the same 173.

Changed
 CHANGELOG.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 package.sgl  | 12 ++++++------
 sigil.lock   | 97 ++++++++++++++++++++++++++++++++++---------------------------------------------------------------
 3 files changed, 88 insertions(+), 69 deletions(-)
Diff
CHANGELOG.mdmodified
@@ -5,6 +5,54 @@ All notable changes to **sigil-web** are documented in this file.
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+8
## [0.17.0] - 2026-08-25
+9
+10
### Breaking
+11
+12
- **This release requires Sigil 0.19 or newer.** Upgrading is not a range bump;
+13
it moves your runtime. Raise `sigil` to `^0.19` in your own `package.sgl` in the
+14
same commit that raises `sigil-web`, then relock.
+15
+16
Nothing will tell you if you skip that. A dependency's `sigil:` floor is not
+17
enforced during resolution, only the root package's, so a consumer left on the
+18
0.17 or 0.18 runtime resolves a 0.17 stdlib alongside 0.19-line packages and
+19
builds green with no error and no warning.
+20
+21
The minor bump is the signal. A patch release would have been picked up
+22
automatically by anyone pinned `^0.16`, silently; `0.17.0` makes you opt in.
+23
+24
### Changed
+25
+26
- Crossed the Sigil 0.19 stdlib boundary. `sigil-stdlib` absorbed the `ansi`,
+27
`socket`, `hooks`, `version`, `fp` and `match` modules at 0.19.0, and this
+28
release moves every dependency range that still reached a standalone copy of
+29
one of them. The lock drops from 18 entries to 12: `sigil-ansi`,
+30
`sigil-hooks`, `sigil-docs`, `sigil-socket`, `sigil-version`, `sigil-args`
+31
and `sigil-git` leave it, and `sigil-repl` now resolves to the `sigil-repl`
+32
package inside `codeberg:sigil/sigil` rather than the archived standalone
+33
repository.
+34
+35
Crossing the boundary is not a single-range change. Bumping one range alone
+36
leaves the remaining standalones in the lock beside a 0.19 stdlib, which
+37
yields two providers of the same module compiling to one output path, where
+38
whichever section builds last silently wins. The ranges moved together:
+39
+40
| dependency | from | to | why |
+41
|---|---|---|---|
+42
| `sigil` | `^0.17` | `^0.19` | `sigil-nrepl` 0.17.1 requires it |
+43
| `sigil-nrepl` | `^0.16` | `^0.17.1` | 0.17.1 is the first release consuming `sigil-repl` from the monorepo; 0.17.0 still reaches the archived standalone |
+44
| `sigil-http` | `^0.18.0` | `^0.18.4` | 0.18.4 is the first release that stopped declaring `sigil-socket` |
+45
| `sigil-test` (dev) | `^0.17` | `^0.19` | keeps the runner pair on one release line |
+46
| `sigil-test-runner` (dev) | `^0.17` | `^0.19` | 0.17.3 declares `sigil-ansi`, and pulls `sigil-version` and `sigil-git` through the workspace |
+47
+48
- `sigil-tls` moves `0.16.3` -> `0.16.6` as part of the relock. That release
+49
line bounds the TLS handshake as a whole rather than per read, makes
+50
`tls-write` yield instead of blocking, and fixes a descriptor leak, so HTTPS
+51
behaviour changes with it.
+52
- `sigil-crypto` moves `0.16.3` -> `0.16.5`, and `sigil-sqlite` `0.16.2` enters
+53
the lock transitively. `sigil-sqlite` vendors a SQLite amalgamation that is
+54
compiled as part of a build.
+55
56
## [0.16.1] - 2026-07-10
57
58
### Fixed
package.sglmodified
@@ -9,8 +9,8 @@
9
10
(package
11
name: "sigil-web"
−12
version: "0.16.1"
−13
sigil: "^0.17"
+12
version: "0.17.0"
+13
sigil: "^0.19"
14
description: "Web application framework for Sigil"
15
url: "https://codeberg.org/sigil/sigil-web"
16
license: "BSD-3-Clause"
@@ -29,13 +29,13 @@
29
optimize: 2))
30
31
dependencies: (list
−32
(from-git url: "codeberg:sigil/sigil-http" version: "^0.18.0")
+32
(from-git url: "codeberg:sigil/sigil-http" version: "^0.18.4")
33
(from-git url: "codeberg:sigil/sigil-sxml" version: "^0.15")
−34
(from-git url: "codeberg:sigil/sigil-nrepl" version: "^0.16"))
+34
(from-git url: "codeberg:sigil/sigil-nrepl" version: "^0.17.1"))
35
36
dev-dependencies: (list
−37
(from-git url: "codeberg:sigil/sigil" package: "sigil-test" version: "^0.17")
−38
(from-git url: "codeberg:sigil/sigil" package: "sigil-test-runner" version: "^0.17"))
+37
(from-git url: "codeberg:sigil/sigil" package: "sigil-test" version: "^0.19")
+38
(from-git url: "codeberg:sigil/sigil" package: "sigil-test-runner" version: "^0.19"))
39
40
provides: (list
41
mcp-tools: '(sigil web mcp tools)))
sigil.lockmodified
@@ -2,15 +2,15 @@
2
(lock
3
(package name: "sigil-stdlib"
4
url: "codeberg:sigil/sigil"
−5
ref: "^0.17"
−6
sha: "c333fbde5ec2d805eddff982952c9993cd441715"
+5
ref: "^0.19"
+6
sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8"
7
package-selector: "sigil-stdlib"
−8
version: "0.17.3")
+8
version: "0.19.3")
9
(package name: "sigil-http"
10
url: "codeberg:sigil/sigil-http"
−11
ref: "^0.18.0"
−12
sha: "80ffd997fcd07443904622648324b0c21fc48f48"
−13
version: "0.18.0")
+11
ref: "^0.18.4"
+12
sha: "23d647f1c782e7f617ac1e8c537744f260b10bb6"
+13
version: "0.18.4")
14
(package name: "sigil-sxml"
15
url: "codeberg:sigil/sigil-sxml"
16
ref: "^0.15"
@@ -18,80 +18,51 @@
18
version: "0.15.0")
19
(package name: "sigil-nrepl"
20
url: "codeberg:sigil/sigil-nrepl"
−21
ref: "^0.16"
−22
sha: "fead992d99169523aa8726cc3eaa12623e547b2d"
−23
version: "0.16.1")
+21
ref: "^0.17.1"
+22
sha: "3d741f14b046ed7a3e39017a3a6d7229be4537a8"
+23
version: "0.17.1")
24
(package name: "sigil-test"
25
url: "codeberg:sigil/sigil"
−26
ref: "^0.17"
−27
sha: "c333fbde5ec2d805eddff982952c9993cd441715"
+26
ref: "^0.19"
+27
sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8"
28
package-selector: "sigil-test"
−29
version: "0.17.3")
+29
version: "0.19.3")
30
(package name: "sigil-test-runner"
31
url: "codeberg:sigil/sigil"
−32
ref: "^0.17"
−33
sha: "c333fbde5ec2d805eddff982952c9993cd441715"
+32
ref: "^0.19"
+33
sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8"
34
package-selector: "sigil-test-runner"
−35
version: "0.17.3")
−36
(package name: "sigil-socket"
−37
url: "codeberg:sigil/sigil-socket"
−38
ref: "^0.16.0"
−39
sha: "6b9e36eb4d4a944b463e5f6826bd711186ba6710"
−40
version: "0.16.0")
+35
version: "0.19.3")
36
(package name: "sigil-tls"
37
url: "codeberg:sigil/sigil-tls"
−43
ref: "^0.16.0"
−44
sha: "30e8c2a84345dc4d484f5c085daa5bd16fc60fe1"
−45
version: "0.16.3")
+38
ref: "^0.16.5"
+39
sha: "4cde885f8bbb15b1457b0293a5b9fa7d292cfc46"
+40
version: "0.16.6")
41
(package name: "sigil-json"
42
url: "codeberg:sigil/sigil-json"
43
ref: "^0.16.0"
44
sha: "55c9e74712b5f79b45d41c65cfe0aef2c8f7e155"
45
version: "0.16.0")
46
(package name: "sigil-repl"
−52
url: "codeberg:sigil/sigil-repl"
−53
ref: "^0.16.0"
−54
sha: "cffebf24367e226aead63ef8e974329b59e10e69"
−55
version: "0.16.1")
−56
(package name: "sigil-ansi"
−57
url: "codeberg:sigil/sigil-ansi"
−58
ref: "^0.16.0"
−59
sha: "1e14b6f9d034ca8ef9f404e2ded316d0780ad7cf"
−60
version: "0.16.0")
−61
(package name: "sigil-version"
−62
url: "codeberg:sigil/sigil-version"
−63
ref: "^0.16.0"
−64
sha: "2d2c9ef9c2694466f65abc14cddf9bfb9cada4a4"
−65
version: "0.16.0")
−66
(package name: "sigil-git"
−67
url: "codeberg:sigil/sigil-git"
−68
ref: "^0.16.0"
−69
sha: "0da6221050319ee241461b45eaba1a353b7bf0ec"
−70
version: "0.16.0")
−71
(package name: "sigil-lib"
47
url: "codeberg:sigil/sigil"
−73
ref: "^0.17"
−74
sha: "c333fbde5ec2d805eddff982952c9993cd441715"
−75
package-selector: "sigil-lib"
−76
version: "0.17.3")
+48
ref: "^0.19"
+49
sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8"
+50
package-selector: "sigil-repl"
+51
version: "0.19.3")
52
(package name: "sigil-crypto"
53
url: "codeberg:sigil/sigil-crypto"
−79
ref: "^0.16"
−80
sha: "a391c4ed73891ac5dc8a6da98b80a340c03f801f"
−81
version: "0.16.3")
−82
(package name: "sigil-hooks"
−83
url: "codeberg:sigil/sigil-hooks"
−84
ref: "^0.16.0"
−85
sha: "0953f39460030b799c92604e66115225324b07d6"
−86
version: "0.16.1")
−87
(package name: "sigil-docs"
−88
url: "codeberg:sigil/sigil-docs"
54
ref: "^0.16.0"
−90
sha: "105327cf559c31945fa3239b770460ca323ea8ed"
−91
version: "0.16.1")
−92
(package name: "sigil-args"
−93
url: "codeberg:sigil/sigil-args"
+55
sha: "debba4462b7ff4de143db9e0792b8606fdc455bc"
+56
version: "0.16.5")
+57
(package name: "sigil-sqlite"
+58
url: "codeberg:sigil/sigil-sqlite"
59
ref: "^0.16.0"
−95
sha: "e8f9427990df5da509d08ea39f24a79f19f7e432"
−96
version: "0.16.0")
+60
sha: "3d441fb32a216aaf99d0e2732bef5877e91d5d48"
+61
version: "0.16.2")
+62
(package name: "sigil-lib"
+63
url: "codeberg:sigil/sigil"
+64
ref: "^0.19"
+65
sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8"
+66
package-selector: "sigil-lib"
+67
version: "0.19.3")
68
)