Cross the stdlib 0.19 boundary; bump sigil-web to 0.17.0
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-ansiEach 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.6sigil-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.
CHANGELOG.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
package.sgl | 12 ++++++------
sigil.lock | 97 ++++++++++++++++++++++++++++++++++---------------------------------------------------------------
3 files changed, 88 insertions(+), 69 deletions(-)CHANGELOG.mdmodified
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).## [0.17.0] - 2026-08-25### Breaking- **This release requires Sigil 0.19 or newer.** Upgrading is not a range bump; it moves your runtime. Raise `sigil` to `^0.19` in your own `package.sgl` in the same commit that raises `sigil-web`, then relock. Nothing will tell you if you skip that. A dependency's `sigil:` floor is not enforced during resolution, only the root package's, so a consumer left on the 0.17 or 0.18 runtime resolves a 0.17 stdlib alongside 0.19-line packages and builds green with no error and no warning. The minor bump is the signal. A patch release would have been picked up automatically by anyone pinned `^0.16`, silently; `0.17.0` makes you opt in.### Changed- Crossed the Sigil 0.19 stdlib boundary. `sigil-stdlib` absorbed the `ansi`, `socket`, `hooks`, `version`, `fp` and `match` modules at 0.19.0, and this release moves every dependency range that still reached a standalone copy of one of them. The lock drops from 18 entries to 12: `sigil-ansi`, `sigil-hooks`, `sigil-docs`, `sigil-socket`, `sigil-version`, `sigil-args` and `sigil-git` leave it, and `sigil-repl` now resolves to the `sigil-repl` package inside `codeberg:sigil/sigil` rather than the archived standalone repository. Crossing the boundary is not a single-range change. Bumping one range alone leaves the remaining standalones in the lock beside a 0.19 stdlib, which yields two providers of the same module compiling to one output path, where whichever section builds last silently wins. The ranges moved together: | dependency | from | to | why | |---|---|---|---| | `sigil` | `^0.17` | `^0.19` | `sigil-nrepl` 0.17.1 requires it | | `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 | | `sigil-http` | `^0.18.0` | `^0.18.4` | 0.18.4 is the first release that stopped declaring `sigil-socket` | | `sigil-test` (dev) | `^0.17` | `^0.19` | keeps the runner pair on one release line | | `sigil-test-runner` (dev) | `^0.17` | `^0.19` | 0.17.3 declares `sigil-ansi`, and pulls `sigil-version` and `sigil-git` through the workspace |- `sigil-tls` moves `0.16.3` -> `0.16.6` as part of the relock. That release line bounds the TLS handshake as a whole rather than per read, makes `tls-write` yield instead of blocking, and fixes a descriptor leak, so HTTPS behaviour changes with it.- `sigil-crypto` moves `0.16.3` -> `0.16.5`, and `sigil-sqlite` `0.16.2` enters the lock transitively. `sigil-sqlite` vendors a SQLite amalgamation that is compiled as part of a build.## [0.16.1] - 2026-07-10### Fixedpackage.sglmodified
(package name: "sigil-web" version: "0.16.1" sigil: "^0.17" version: "0.17.0" sigil: "^0.19" description: "Web application framework for Sigil" url: "https://codeberg.org/sigil/sigil-web" license: "BSD-3-Clause" optimize: 2)) dependencies: (list (from-git url: "codeberg:sigil/sigil-http" version: "^0.18.0") (from-git url: "codeberg:sigil/sigil-http" version: "^0.18.4") (from-git url: "codeberg:sigil/sigil-sxml" version: "^0.15") (from-git url: "codeberg:sigil/sigil-nrepl" version: "^0.16")) (from-git url: "codeberg:sigil/sigil-nrepl" version: "^0.17.1")) dev-dependencies: (list (from-git url: "codeberg:sigil/sigil" package: "sigil-test" version: "^0.17") (from-git url: "codeberg:sigil/sigil" package: "sigil-test-runner" version: "^0.17")) (from-git url: "codeberg:sigil/sigil" package: "sigil-test" version: "^0.19") (from-git url: "codeberg:sigil/sigil" package: "sigil-test-runner" version: "^0.19")) provides: (list mcp-tools: '(sigil web mcp tools)))sigil.lockmodified
(lock (package name: "sigil-stdlib" url: "codeberg:sigil/sigil" ref: "^0.17" sha: "c333fbde5ec2d805eddff982952c9993cd441715" ref: "^0.19" sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8" package-selector: "sigil-stdlib" version: "0.17.3") version: "0.19.3") (package name: "sigil-http" url: "codeberg:sigil/sigil-http" ref: "^0.18.0" sha: "80ffd997fcd07443904622648324b0c21fc48f48" version: "0.18.0") ref: "^0.18.4" sha: "23d647f1c782e7f617ac1e8c537744f260b10bb6" version: "0.18.4") (package name: "sigil-sxml" url: "codeberg:sigil/sigil-sxml" ref: "^0.15" version: "0.15.0") (package name: "sigil-nrepl" url: "codeberg:sigil/sigil-nrepl" ref: "^0.16" sha: "fead992d99169523aa8726cc3eaa12623e547b2d" version: "0.16.1") ref: "^0.17.1" sha: "3d741f14b046ed7a3e39017a3a6d7229be4537a8" version: "0.17.1") (package name: "sigil-test" url: "codeberg:sigil/sigil" ref: "^0.17" sha: "c333fbde5ec2d805eddff982952c9993cd441715" ref: "^0.19" sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8" package-selector: "sigil-test" version: "0.17.3") version: "0.19.3") (package name: "sigil-test-runner" url: "codeberg:sigil/sigil" ref: "^0.17" sha: "c333fbde5ec2d805eddff982952c9993cd441715" ref: "^0.19" sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8" package-selector: "sigil-test-runner" version: "0.17.3") (package name: "sigil-socket" url: "codeberg:sigil/sigil-socket" ref: "^0.16.0" sha: "6b9e36eb4d4a944b463e5f6826bd711186ba6710" version: "0.16.0") version: "0.19.3") (package name: "sigil-tls" url: "codeberg:sigil/sigil-tls" ref: "^0.16.0" sha: "30e8c2a84345dc4d484f5c085daa5bd16fc60fe1" version: "0.16.3") ref: "^0.16.5" sha: "4cde885f8bbb15b1457b0293a5b9fa7d292cfc46" version: "0.16.6") (package name: "sigil-json" url: "codeberg:sigil/sigil-json" ref: "^0.16.0" sha: "55c9e74712b5f79b45d41c65cfe0aef2c8f7e155" version: "0.16.0") (package name: "sigil-repl" url: "codeberg:sigil/sigil-repl" ref: "^0.16.0" sha: "cffebf24367e226aead63ef8e974329b59e10e69" version: "0.16.1") (package name: "sigil-ansi" url: "codeberg:sigil/sigil-ansi" ref: "^0.16.0" sha: "1e14b6f9d034ca8ef9f404e2ded316d0780ad7cf" version: "0.16.0") (package name: "sigil-version" url: "codeberg:sigil/sigil-version" ref: "^0.16.0" sha: "2d2c9ef9c2694466f65abc14cddf9bfb9cada4a4" version: "0.16.0") (package name: "sigil-git" url: "codeberg:sigil/sigil-git" ref: "^0.16.0" sha: "0da6221050319ee241461b45eaba1a353b7bf0ec" version: "0.16.0") (package name: "sigil-lib" url: "codeberg:sigil/sigil" ref: "^0.17" sha: "c333fbde5ec2d805eddff982952c9993cd441715" package-selector: "sigil-lib" version: "0.17.3") ref: "^0.19" sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8" package-selector: "sigil-repl" version: "0.19.3") (package name: "sigil-crypto" url: "codeberg:sigil/sigil-crypto" ref: "^0.16" sha: "a391c4ed73891ac5dc8a6da98b80a340c03f801f" version: "0.16.3") (package name: "sigil-hooks" url: "codeberg:sigil/sigil-hooks" ref: "^0.16.0" sha: "0953f39460030b799c92604e66115225324b07d6" version: "0.16.1") (package name: "sigil-docs" url: "codeberg:sigil/sigil-docs" ref: "^0.16.0" sha: "105327cf559c31945fa3239b770460ca323ea8ed" version: "0.16.1") (package name: "sigil-args" url: "codeberg:sigil/sigil-args" sha: "debba4462b7ff4de143db9e0792b8606fdc455bc" version: "0.16.5") (package name: "sigil-sqlite" url: "codeberg:sigil/sigil-sqlite" ref: "^0.16.0" sha: "e8f9427990df5da509d08ea39f24a79f19f7e432" version: "0.16.0") sha: "3d441fb32a216aaf99d0e2732bef5877e91d5d48" version: "0.16.2") (package name: "sigil-lib" url: "codeberg:sigil/sigil" ref: "^0.19" sha: "fe8ff55d07455c78796a7f172f18549ee771c7d8" package-selector: "sigil-lib" version: "0.19.3"))