Skip to content

release: v0.20.0 - #190

Merged
octalide merged 22 commits into
mainfrom
dev
Sep 27, 2026
Merged

octalide merged 22 commits into
mainfrom
dev

Conversation

@octalide

Copy link
Copy Markdown
Contributor

Integration merge of dev for 0.20.0. Release commit: #189.

std ^9.0, http ^0.21 and hedge =0.12.0, with the gitlinks moved by
mach dep update to std v9.0.0, crypto v0.24.0, http v0.21.0 and
hedge v0.12.0. laurel stays a path dependency on the working tree,
which overrides hedge's =0.19.0 pin.
mach 6.2.1 warns on them in the demo and the bench.
hedge 0.12.0 requires mach ^6.2.1, so the v6.0.0 seed cannot build them.
chore(#179): re-pin the demo and bench to hedge 0.12.0 and restore them in CI
observability.Telemetry carries counters, gauges and events produced outside a
request, labelled from the existing vocabulary. Request and signal labels now
share one validation path.
A resolver's callback type mentions a secret, so mach refuses to erase it to
ptr. It is registered in a bounded module-private table, the csrf key-ring
pattern, and everything else holds the public secret.Source.
Non-blocking steps with a cancel scope and deadline, single-flight triggers
refused once drain begins, leased snapshot reads that never wait with a
refused publish when every slot is held, and a bounded drain that reports an
overrun as abandoned. Tasks borrow secrets through Run.secrets.
testing.tasks.Runner implements task.Provider in caller-owned storage, driven
by the caller's clock, and covers the hedge#305 hardest case: a periodic job
borrowing a secret that drains on shutdown. The new public records join the
erasure assertions.
feat(#184): host provider interfaces: background tasks, config, secrets, telemetry
…used import

The four registry arrays in secret.mach were sized by a literal 8, so
changing MAX_RESOLVERS would silently desync them from the loops that
walk them. router.mach imported opt without using it, which warned on
every build.
chore(#186): size the secret registry by MAX_RESOLVERS and drop an unused import
laurel.testing.tasks becomes laurel.task.runner, the runner both hosts use.
Every provider call and poll take the runner's lock and a step runs with it
released, so a step can publish or trigger through the provider and handlers
can read snapshots from any thread. on_wake tells a driver of new work, and
next_due and busy say when to poll again. laurel.testing still drives it by
hand with a fixed clock.
laurel.serve needs http 0.23's server runner, its settle call and wake_at,
and its framing of unframed responses. The hedge-hosted demo and bench server
override hedge 0.12.0's =0.21.0 pin by ref until they move to graft, since
0.22 and 0.23 only add the runner and fix the h1 engine compatibly.
serve.Host owns the built-in providers (the task runner on its own thread,
configuration and secrets from the environment, telemetry on stderr), handed
to the application as one provider entry it can override key by key.
serve.run serves the application on http.server.server: each exchange is
routed, bound, executed and resumed through app, woken at its handler deadline
through wake_at, and released when the server settles it. The lifecycle runs
through the server's start, ready, drain and stop hooks, the task provider
drains beside it, and SIGTERM or SIGINT begins the bounded drain.

Tests: the same assemble under laurel.testing, and a real socket served,
signalled with SIGTERM while a request is in flight, and drained.
demo/standalone is one application written against its host's providers: a
text route, a configuration value, a periodic task's snapshot and telemetry,
and a body echo that suspends on the host. bin/main.mach hosts it with
laurel.serve, and its test runs the same assemble in process under
laurel.testing. CI builds it and runs the test on the primary leg.
doc/serve.md states the laurel.serve contract: running, the lifecycle
mapping, signals and drain, request handling, and the current limits, no
WebSockets until mach-http#191 and long streams bounded by the runner's
whole-exchange deadline until mach-http#193. doc/providers.md describes the
shared task runner and the built-in providers, and the README shows both
hosting modes.
feat(#184): laurel.serve, a standalone host with built-in providers
@octalide
octalide merged commit befd721 into main Sep 27, 2026
7 checks passed
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