Skip to content

release: 1.17.0#83

Merged
nelsonduarte merged 1 commit into
mainfrom
release/1.17.0
Jul 18, 2026
Merged

release: 1.17.0#83
nelsonduarte merged 1 commit into
mainfrom
release/1.17.0

Conversation

@nelsonduarte

Copy link
Copy Markdown
Owner

Additive minor release. Serve is a new built-in capability; nothing changes shape, so no existing program needs touching.

The headline is the tenth capability, but the release is warranted on the bug fixes alone. Anyone on 1.16.0 is currently exposed to a hard build failure (parse_float in a program that never formats a Float emits a call to a helper that was never defined), an editor regression (LSP completion had never offered Proc or Db), and four Python-versus-Wasm divergences, which is precisely the parity promise the project sells.

Added

Serve, the tenth built-in capability: the authority to listen and accept inbound connections. Every capability so far reaches out; this one is reached.

The surface is connection-level rather than HTTP-level, so protocol parsing lives in ordinary Capa code and a protocol bug is not a bug in the trusted computing base. Attenuation is conjunctive over (address, port) with ranges, enforced before the syscall so a denied bind never happens even transiently. Sequential by design, one connection at a time, enforced rather than advised. Python backend only: wasi:sockets is not reachable from the wasmtime bindings, so the Wasm emitter and --wit reject any program whose signatures reach it, listing every offending site.

Serve.recv is the language's first inbound information-flow source and is @public, with Serve.send a sink on its payload argument. The docs now state that the lattice models confidentiality rather than integrity or taint, so @public on an attacker-controlled request asserts nothing about its trustworthiness.

Changed

capa --help now advertises the ten subcommands, which were dispatched before argparse ran and so were undiscoverable.

The handle-bearing capability set was a tuple hand-copied at 21 sites; it now routes through one registry, and the cross-check the code comment had long claimed existed now actually runs.

Fixed

parse_float no longer produces an unbuildable module. Fs/Db/Proc error text is identical across backends again. A payloadless variant bound by an unannotated let supports method calls and match on Wasm. A value-discarded call no longer leaves values on the stack, closed across all 47 affected shapes through a single seam with a sweep test that fails CI if a builtin is added without a discard recipe. A method copying self into an unannotated binding compiles. A tuple with a pointer element returned through ? compiles. LSP completion offers Proc and Db. capa --wit no longer emits a document describing a different program.

Verification

python -m unittest discover tests (what CI runs): 4304 tests, OK, 18 skipped. pytest: 4321 passed. The seven files touched match the shape of the 1.16.0 release commit; the four hardcoded version pins were each verified by reading the line.

The new capability was dogfooded before this release rather than after, by building an HTTP library on top of it. That surfaced no compiler bugs but three real gaps in Serve itself, all now recorded: no half-close (so a close with unread client bytes can lose the response to a TCP reset, including on the success path), a 30s timeout that bounds a read rather than a request, and --check-capabilities attributing an example root's capabilities to the package.

Serve, the tenth built-in capability and the language's first inbound
authority (Python backend only, conjunctive addr:port attenuation enforced
before the syscall, sequential connections, Serve.recv as the first inbound
IFC source); a single source of truth for the handle-bearing capability set
with the cross-check guard the code already promised (which caught LSP
completion missing Proc and Db); three Python-vs-Wasm parity fixes
(parse_float's undefined helper, Fs/Db/Proc error text on the Wasm hosts,
payloadless-variant receivers); the discarded-result drop class and the
self-copy type loss; the tuple pointer element type through the ? boundary;
`capa --wit` no longer describing a different program; and `capa --help`
advertising the subcommands. Version bump + CHANGELOG + DONE + doc version
pins. No breaking changes; additive minor release.
@nelsonduarte
nelsonduarte merged commit e5b7f47 into main Jul 18, 2026
14 checks passed
@nelsonduarte
nelsonduarte deleted the release/1.17.0 branch July 18, 2026 22:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant