Build Skirr ASGI server with protocol tests and benchmark tooling

Commit 5a43dfc · patx · Nov 9 at 1:08PM

Changeset
5a43dfc3912ae3c4fb1eac639c922bff42f57118

View source at this commit

Build Skirr ASGI server with protocol tests and benchmark tooling

Implement the Linux HTTP/1 ASGI transport with bounded native reactor work, lifespan, streaming, backpressure, and request isolation. Include profile-driven optimizations, socket regression coverage, and reproducible benchmark evidence documenting remaining FastAPI throughput and p99 gaps.

Comments

No comments yet.

Log in to comment

Diff

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..91b22f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+/target/
+*.so
+__pycache__/
+.pytest_cache/
+.venv/
+*.egg-info/
+
+/dist/
diff --git a/COMPLIANCE.md b/COMPLIANCE.md
new file mode 100644
index 0000000..205a03c
--- /dev/null
+++ b/COMPLIANCE.md
@@ -0,0 +1,56 @@
+# HTTP/ASGI prototype requirements matrix
+
+Normative references: [ASGI 3.0](https://asgi.readthedocs.io/en/latest/specs/main.html),
+[HTTP/WebSocket 2.5](https://asgi.readthedocs.io/en/latest/specs/www.html),
+[Lifespan 2.0](https://asgi.readthedocs.io/en/latest/specs/lifespan.html),
+[RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html),
+[RFC 9112](https://www.rfc-editor.org/rfc/rfc9112.html).
+
+This matrix tracks specific evidence. It is not a blanket compliance claim.
+Specifications and verified errata need another review before a release.
+
+| Contract | Evidence / state |
+|---|---|
+| ASGI 3 asynchronous application interface | Real ASGI apps, FastAPI benchmark |
+| HTTP scopes, paths, query strings, repeated headers | `test_scope_headers_and_percent_decoding` |
+| Absolute-target authority replaces Host | `test_absolute_target_authority_overrides_host` |
+| Incremental fixed/chunked request bodies | Upload, fragmentation, and native segmentation tests |
+| Exact request boundaries and ordered pipelining | Fixed-upload/pipeline test and native consumed-prefix test |
+| Framing ambiguity closes the connection | Table of malformed requests plus a pipelined successor |
+| Resource bounds and integer overflow | 100/101-header boundaries, oversized head/body cases; native chunk syntax/overflow test |
+| Response start/body order and header validation | Response validation and iterable-header-pair tests; broader invalid-message matrix remains |
+| Duplicate response fields preserved | Repeated Set-Cookie socket test |
+| Header snapshots and owned scope values | Empty/obs-text/trimmed values, retained/mutated scope headers, changed same-length values, and large/duplicate header tables; mutation of response headers after start |
+| Native send call signature | Invalid arity/type and positional/keyword send calls through a real application |
+| Ready awaitable iterator returns the receive value | Explicit `__await__` iterator completion plus socket echo/fragmentation tests |
+| HEAD/204/205/304 no response body | Parameterized bodyless pipeline test |
+| Response Content-Length checked | Mismatch before/after response bytes begin, with no second response appended |
+| Streaming sends flush before app completion | Event-controlled streaming socket test |
+| ASGI response trailers | Multi-message trailer socket test |
+| receive waits after the final request event | Disconnect test |
+| Pending receive wakes when the response completes | Response-completion socket test |
+| Closed send raises OSError | Backpressure/disconnect test |
+| Cancelled receive may be replaced | Cancellation socket test |
+| Retained request callables cannot cross requests | Retained-channel socket test |
+| Immediate awaits preserve fairness | Streaming producer, ready disconnect receives and queued-marker pipeline checks |
+| Buffered pipelining remains ordered while an app is held | 200-request pipeline test |
+| Eager execution preserves Task and context isolation | Ready/waiting app context test |
+| Embedding task factories are respected | Custom factory socket test |
+| Disconnect during dispatch cannot panic or stop serving | Final/streaming TCP resets and subsequent healthy-request test |
+| Server closed-send errors are quiet; application failures remain visible | Disconnect logging regression and ready/waiting Task failures, including application OSError and cancellation |
+| Scope method/version defaults do not leak across requests | Mixed HTTP/1.0 and HTTP/1.1 methods on keepalive connections |
+| Completion outside the native reactor flushes output | 24 independently held applications released together |
+| Large body data and chunk framing survive partial writes | Byte-exact streamed payloads at 4095/4096/4097 bytes and 8 MiB |
+| Lifespan on serving loop; request state shallow copies | Lifespan/state test for on/off; optional state omitted only when explicitly off |
+| Explicit startup.failed prevents serving | Lifespan failure test |
+| Graceful shutdown ordering | Cancellation cleanup precedes lifespan shutdown in embedding test; process-level qualification remains |
+| Slow-client timeouts and truncated EOF | Implemented; broader deadline/EOF matrix remains |
+| WebSockets | Unsupported; upgrade rejected with 501 |
+| Optional ASGI extensions | None advertised |
+| HTTP/2, HTTP/3, TLS | Unsupported |
+
+Before production: complete the remaining HTTP requirement-by-requirement audit,
+add property/fuzz coverage, extend the native/Python AddressSanitizer checks with leak and fuzz qualification,
+qualify all advertised Python/platform combinations, and exercise prolonged
+mixed-client load and shutdown failures. Differential server behavior is useful
+evidence but does not replace the specifications as the authority.
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..d8f725a
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,140 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "libc"
+version = "0.2.191"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "portable-atomic"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.29.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655"
+dependencies = [
+ "libc",
+ "once_cell",
+ "portable-atomic",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.29.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb"
+dependencies = [
+ "target-lexicon",
+]
+
+[[package]]
+name = "pyo3-ffi"
+version = "0.29.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330"
+dependencies = [
+ "libc",
+ "pyo3-build-config",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.29.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6"
+dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.29.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "skirr"
+version = "0.1.0"
+dependencies = [
+ "httparse",
+ "libc",
+ "pyo3",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..68ffe82
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "skirr"
+version = "0.1.0"
+edition = "2024"
+license = "MIT"
+description = "A small experimental ASGI-only server"
+
+[lib]
+name = "_native"
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+pyo3 = "0.29"
+httparse = "1.10"
+libc = "0.2"
+
+[features]
+extension-module = ["pyo3/extension-module"]
+
+[profile.release]
+lto = "thin"
+codegen-units = 1
+
diff --git a/DESIGN.md b/DESIGN.md
new file mode 100644
index 0000000..2cdb9aa
--- /dev/null
+++ b/DESIGN.md
@@ -0,0 +1,142 @@
+# Prototype decisions
+
+Skirr is an ASGI transport, not an application framework. Keep a single native
+owner for each connection and run the application on the same thread and loop.
+
+The prototype tests Peregrine's native-poller integration: epoll itself is
+registered with asyncio, and the callback processes bounded native work. This
+keeps uvloop usable and avoids another runtime and cross-thread request queues.
+The alternative Weft design drives Tokio through a replacement asyncio selector.
+Both deserve measurement; neither language nor reactor choice guarantees a win.
+
+Sources reviewed:
+
+- [Weft ASGI](https://github.com/grepjava/weft/blob/cec2030ed2a2f6e3fcb54df1270cc654cc9247e3/src/asgi.rs)
+- [Weft callable types](https://github.com/grepjava/weft/blob/cec2030ed2a2f6e3fcb54df1270cc654cc9247e3/src/types.rs)
+- [Peregrine ASGI](https://github.com/grepjava/peregrine/blob/3f8cac19b60ce6a151a07a5535a7e4ee8e3bbccf/Sources/PeregrineServer/ASGIDispatch.swift)
+- [Peregrine connections](https://github.com/grepjava/peregrine/blob/3f8cac19b60ce6a151a07a5535a7e4ee8e3bbccf/Sources/PeregrineServer/Connection.swift)
+- [Peregrine fuzzing](https://github.com/grepjava/peregrine/blob/3f8cac19b60ce6a151a07a5535a7e4ee8e3bbccf/Sources/PeregrineFuzzTargets/FuzzTargets.swift)
+
+Native send and receive return a completed awaitable for ready operations and
+Futures for waits. A shared completed-None awaitable avoids allocating a Future for every send.
+A bounded operation budget forces cooperative yields even on fast sockets.
+
+Connections have monotonically assigned identities; request callables refer to
+their own request state and hold weak connection/worker references. Connections
+are not recycled into the same identity. This is simpler than a slab for the
+prototype and preserves the stale-callback safety property of generation tokens.
+A slab is a later profiling decision.
+
+Worker fields and connection state use thread-local ownership (Rc/RefCell),
+not locks. Mutable state borrows must end before potentially reentrant Python
+calls. CPython object ownership uses PyO3 rather than a parallel handwritten
+reference-counting abstraction. Free-threaded Python is intentionally unqualified.
+
+## Profile-driven optimization
+
+Native cycle sampling found a large read-buffer clearing cost (about 16% of
+baseline raw-ASGI user-space cycles), while wall-time stack sampling also exposed
+repeated epoll changes. The worker now reuses initialized scratch space and leaves
+an empty socket readable across requests. Buffered pipelined bytes still pause
+reads; a held application cannot make the reactor spin on its next request.
+
+Response serialization writes into the connection's reusable buffer. A later
+large-response profile still attributed about 42% of user-space cycles to copying.
+Vectored writes now pass large immutable Python bodies directly to the socket;
+partial writes immediately copy the unsent suffix into owned native memory.
+The retained implementation's bulk profile reduced copying to about 2.5% of
+user-space cycles. This avoids an intermediate copy, not the kernel's copy.
+
+CPython Task eager startup (available in the supported Python 3.12+) avoids a
+scheduler turn when the application does not need to wait. Each request still
+has its own Task and context. Custom task factories use the normal loop path.
+Already-finished tasks are cleaned up synchronously; pending tasks retain a done
+callback. Pipeline progress belongs to the outer bounded pump, with explicit
+deferred resumption when buffered work remains. It must never recurse once per
+pipelined request. A request may disappear during eager dispatch on write failure,
+so pump re-checks its active request rather than assuming one still exists.
+
+The first optimization round shared an already-completed asyncio Future for sends. Real waits still get
+their own Future. The operation budget still forces cooperative yields. Empty
+request events are constructed lazily without allocating an otherwise unused
+body queue. Parser header scratch uses httparse's safe uninitialized-header API.
+
+Two experiments were discarded: borrowed native header views did not show a
+clear benefit, and a PyCFunction vectorcall wrapper's modest improvements did not
+justify extra unsafe code and two additional context/function objects per request.
+That optimization round added neither dependencies nor unsafe blocks. A separate eager-work-budget/scope-completion experiment also failed to improve tail latency and was reverted; its patch and diagnostic runs are retained.
+
+The next bottlenecks include request dispatch and the Python application itself.
+FastAPI's baseline native CPU profile attributed roughly 45% of user-space cycles
+to CPython's evaluator alone. The server does not change application GC policy,
+skip response validation, disable fairness, or specialize for benchmark routes.
+
+Cycle percentages are samples of user-space execution, not end-to-end wall time.
+They must not be interpreted as predicted throughput gains. Raw perf reports,
+commands and sampled build metadata live in `bench/profiles`; the authoritative
+performance comparison is the repeated unprofiled run in `bench/results`.
+
+Remaining roadmap: complete HTTP conformance evidence, aggregate byte budgets,
+worker supervision and listener handoff, WebSockets via a maintained codec, then
+optional TLS/HTTP2/HTTP3 dependencies with independent protocol qualification.
+
+## Exact-release Peregrine comparison
+
+The second round reviewed the source of the installed Peregrine 1.1.7 release,
+including its native ready awaitables, header spans and reusable buffers. The
+[study](bench/profiles/peregrine-study.md) records profiles, source provenance,
+syscall counts, tests and rejected experiments. Request headers now use one
+owned block with safe ranges, response headers serialize once into bounded
+reusable storage, and decoded uploads copy straight into owned Python bytes.
+A level-triggered short read ends the current read batch instead of probing
+again for EAGAIN. Another event services later data.
+
+Completed sends now share a native stateless awaitable. Ready receives and
+fairness yields use the same native slots with per-operation state; waits still
+use Futures. CPython ownership for this small type is isolated in
+`src/completed.rs`, with no thread-bound Rust pointers or global interpreter
+references. Unlike the discarded vectorcall channel experiment, this is not a
+parallel callable/connection ownership framework. The operation quota, Task
+isolation, validation and scope isolation remain in force.
+
+## FastAPI fairness and allocation study
+
+The third round profiles the exact release binaries and the actual FastAPI worker.
+A worker-global send quota made some short requests yield behind an unrelated batch.
+The quota now belongs to each request and includes ready receives. A 16-event
+reactor batch and bounded eager starts preserve loop opportunities without making
+every response asynchronous. Custom task factories and request contexts remain intact.
+
+Scope construction uses startup-interned fixed keys, separate shallow copies of
+mutable dictionaries, borrowed common method names and a pre-sized header list.
+Completed Tasks are inspected once through result(), preserving application errors
+and cancellation. Server-generated disconnect errors have an OSError subclass so
+expected disconnects are quiet while application OSError failures remain reported.
+
+The retained changes add 48 native lines and no dependencies or unsafe code.
+Write-batching and alternative task schedulers were rejected after throughput and
+disconnect checks. Detailed profiles, rejected patches and comparisons are in
+[the FastAPI study](bench/profiles/fastapi-study.md). Native library sample shares
+are small; CPython execution includes both application code and server object/API
+work, so it is not valid to treat that entire share as unavoidable application cost.
+
+## Bounded final writes and FastAPI overhead
+
+The fourth round replaces the adaptive-batch checkpoint with sixteen-event
+cheap-work batches and at most 32 events while final flushes are queued. Small
+final responses can copy into the kernel using MSG_MORE, then push at the native poll boundary or in a bounded
+loop callback for independently resumed apps. Streaming responses retain immediate writes. A queued callback
+tries the write before arming EPOLLOUT, avoiding redundant interest changes.
+
+Native request-head scratch storage is recycled after Python owns its scope.
+Short identical header blocks share immutable pairs behind fresh mutable lists;
+the worker's cross-connection hint is weak and each connection retains only one
+bounded snapshot. Optional state is omitted only for explicit lifespan off.
+Loop methods are cached without caching the result of get_task_factory.
+
+A guarded vectorcall entry removes generic call packaging for Sender while
+keeping its PyO3 allocation, thread checks, errors and ownership. Layout checks
+fall back to PyO3's ordinary call path; type slots are initialized under the GIL.
+This adds unsafe CPython integration, so it needs independent qualification for
+each Python version. The repeated profiles, rejected experiments and precise
+limits of the results are in [the fourth-round study](bench/profiles/latency-round4-study.md).
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..6d90757
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 Skirr contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..073771b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,189 @@
+# Skirr
+
+A small, experimental **ASGI-only** Rust server for Linux. Python owns the
+application's asyncio loop; Rust owns nonblocking sockets, HTTP/1 framing,
+buffering, and native ASGI send/receive objects. The native epoll descriptor is
+registered with `loop.add_reader`. There is no second async runtime or thread.
+
+This is an architecture prototype, not a production release. Profile-driven
+optimizations and same-session before/after comparisons live in
+[the latest comparison](bench/results/latency-round4-final-report.txt). Results are
+workload-specific; this is not a claim of overall superiority to other servers.
+The fourth round improves FastAPI throughput by 1.9–3.4% over its starting
+release and fixed-rate p99 by 4.4%. It does not consistently beat Peregrine on
+both FastAPI throughput and latency; some saturation p99 regressions remain.
+See [the profile and regression study](bench/profiles/latency-round4-study.md).
+
+## Build and run
+
+Requires Linux, Rust 1.88 or newer, and CPython 3.12 or newer. This initial implementation has
+been tested on CPython 3.14.4 on Linux x86-64; other supported Python versions
+and ARM64 still need qualification. Free-threaded Python is not supported.
+
+```bash
+python -m pip install .
+skirr app:app --host 127.0.0.1 --port 8000
+```
+
+`pip install '.[speed]'` installs optional uvloop. Standard asyncio also works.
+Applications use the ordinary ASGI 3 `(scope, receive, send)` interface.
+`--lifespan auto|on|off` defaults to `auto`. Only one worker is implemented;
+other worker counts fail explicitly.
+
+For development without installing the package:
+
+```bash
+python tools/build.py
+PYTHONPATH=python python -m pytest tests -q
+cargo test --lib
+```
+
+## Implemented scope
+
+- HTTP/1.0 and HTTP/1.1, sequential pipelining, fixed-length and chunked bodies.
+- Request dispatch at headers, incremental upload consumption, demand-driven
+  `100 Continue`, streaming responses, and HTTP/1.1 response trailers.
+- Native completed awaitables; Futures for blocked receive and output drain.
+- Eager task startup when no custom task factory is installed; normal factory
+  behavior is preserved. Completed tasks are cleaned up without another callback.
+- Read and write backpressure, per-callback I/O budgets and an ASGI operation
+  budget per request so immediately completed sends and receives cooperate with the loop.
+  Native event batches and eager application starts are also bounded.
+- Request identities that prevent retained channels from writing into a later
+  request, disconnect delivery, closed-send errors, and cancelled receive reuse.
+- Lifespan startup/shutdown on the serving loop, request state copies and
+  graceful drain. IPv4 and IPv6 TCP listeners.
+
+No WSGI, routing, application framework, caching, compression, or static files.
+WebSockets and other upgrades return 501. TLS, HTTP/2, HTTP/3, Unix sockets,
+proxy-header processing, worker supervision and structured access logs are not
+implemented. Informational-response extensions are not advertised. CONNECT is
+not implemented and returns 501. An HTTP/1.0 response cannot carry trailers;
+trailer events complete it without transmitting trailer fields.
+
+## Standards and limits
+
+The HTTP scope advertises ASGI 3.0 and HTTP sub-specification 2.5. Lifespan uses
+2.0. The implementation targets RFC 9110/9112 for HTTP semantics/framing.
+This describes the intended contract, not a claim of completed conformance
+certification. See [the requirements matrix](COMPLIANCE.md) for tested behavior
+and outstanding qualification. Supporting HTTP/1 does not imply HTTP/2 or HTTP/3
+support, nor support for the ASGI WebSocket protocol.
+
+Current fixed prototype limits:
+
+| Resource | Limit |
+|---|---:|
+| Request head | 32 KiB / 100 fields |
+| Decoded request body | 16 MiB |
+| Chunk framing and trailer metadata combined | 32 KiB |
+| Individual chunk-size line | 8 KiB |
+| Buffered request-body high-water mark | 64 KiB, plus one decoded segment |
+| Unconsumed wire buffer | 1 MiB |
+| Output pause / resume thresholds | 512 KiB / 64 KiB |
+| Connections | 10,000 |
+| Header deadline / keepalive idle timeout | 10 s / 5 s |
+| Stalled client I/O timeout | 30 s |
+
+Output backpressure bounds queued work between awaited sends. One application
+body message can exceed the threshold; any unsent suffix is copied into
+its output buffer. There is no aggregate worker byte budget yet. Consequently,
+the connection limit is not a sufficient production memory limit.
+
+## Architecture and dependency budget
+
+Three direct Rust dependencies: PyO3 (Python ownership/integration), httparse
+(request-head syntax), and libc (isolated socket/poller calls). Cargo.lock pins the full
+graph, including build dependencies. Python runtime dependencies are optional.
+
+- `src/http.rs`: framing without Python or sockets, plus segmentation tests.
+- `src/net.rs`: owned epoll descriptor and OS-specific socket/poller operations.
+- `src/vectorcall.rs`: guarded CPython call entry for the existing PyO3 Sender.
+- `src/completed.rs`: native ready-awaitable slots, with isolated CPython ownership.
+- `src/lib.rs`: connection ownership, I/O, ASGI objects and worker callbacks.
+
+The worker reuses one initialized read buffer. An empty socket remains armed
+between requests, avoiding two epoll changes per request; buffered pipelined
+input still pauses reads. Small writes are coalesced; large bodies use vectored
+I/O with an owned copy of any unsent suffix. Python body pointers are never
+retained after a send call. Header-name caching is capped at 512 names, each
+at most 128 bytes; application-visible mutable scope dictionaries remain separate.
+Identical short request-header blocks can share immutable tuples and bytes, with
+a fresh mutable header list per request. Snapshots are bounded to eight fields
+and 512 wire bytes per connection, with a weak hint for sharing across connections.
+Native request-head storage is reused only after Python owns the scope values.
+With explicit lifespan off, the optional state namespace is omitted; auto/on
+still provide a fresh shallow copy.
+Fixed scope keys are interned once; each request still gets separate mutable scope
+and ASGI-version dictionaries. Header spans use one owned request block. Response-header storage is reused up
+to 64 KiB per connection. Upload segments copy directly into owned Python bytes.
+Completed sends allocate no iterator, while real I/O waits still use Futures.
+Small final responses after more expensive application work copy into the kernel
+with MSG_MORE and push at the end of the bounded native callback (or a queued
+callback for independently resumed apps). Streaming sends flush
+immediately. Queued flushes do not arm EPOLLOUT until an attempted write blocks.
+- `python/skirr`: application loading, lifespan, CLI and loop orchestration.
+
+Readability takes priority over a line-count target. CPython integration still
+has overhead worth measuring: native callable dispatch, scope/message allocation,
+buffer copies, task scheduling, and done callbacks. The Sender uses a guarded vectorcall entry while retaining PyO3 ownership,
+thread checks and error/panic translation. This integration needs qualification
+on every supported Python version.
+
+Design research used pinned Weft `cec2030` and Peregrine `3f8cac1` source
+snapshots. The implementation is new Rust code; their architectural ideas are
+credited in [DESIGN.md](DESIGN.md). The latest study also reviews the exact
+Peregrine 1.1.7 release source; [profiles and findings](bench/profiles/peregrine-study.md)
+explain the retained and rejected experiments. The benchmark apps and resource-sampling
+harness were adapted from our MRHTTP benchmark tooling.
+
+## Benchmark reproduction
+
+Install the optional benchmark dependencies and `wrk`. Run from this directory:
+
+```bash
+PYTHONPATH=python python bench/compare.py --workers 1 --connections 64 \
+  --duration 5 --repeats 3 --output bench/results/my-c64
+```
+
+The default server CPU is core 0 and load-generator CPUs are 4–7; override
+`--server-cpus` and `--client-cpus` for your machine. Their sets must not overlap.
+Each result records versions, build/source hashes, CPU and memory sampling,
+worker readiness, response validation, raw wrk output and streaming latency.
+The main throughput run validates exact responses before and after load;
+it does not validate every response body during the run.
+
+These are closed-loop local microbenchmarks, not production capacity estimates.
+wrk's timeout counter also includes completed responses outside its three-second
+latency histogram. Compare that separately from connect/read/write failures.
+A separate [fixed-rate comparison](bench/results/latency-round4-final-rate20k-report.txt)
+uses wrk2 corrected histograms; do not pool those percentiles with wrk results.
+Extended soak tests, fuzzing, broader sanitizer/leak qualification,
+and broader platform testing remain required before a production release.
+
+Verification: 64 real-socket/ASGI tests pass under both standard asyncio
+and uvloop; three native framing-invariant tests pass; strict Clippy passes.
+An installable CPython 3.14 Linux wheel was built and the same 64 socket tests
+passed against that installed wheel. These checks cover the listed contracts,
+not every requirement in the HTTP specifications. A separate AddressSanitizer
+build passes the 64 cases under both loops; its embedding-host limitations and
+commands are recorded in [the sanitizer log](bench/profiles/asan-round4-final-check.txt).
+
+To reproduce the same-session before/after comparison, extract
+`bench/profiles/round4-before-source.tar.gz` into a separate directory and include
+`--servers skirr-before skirr weft peregrine --baseline /path/to/extracted`.
+The archive includes the original source and CPython 3.14 x86-64 release binary.
+Rebuild that binary when using another interpreter or architecture.
+
+The latest before/after baseline is `bench/profiles/round3-before-source.tar.gz`;
+its results are in `bench/results/latency-round4-final-report.txt`.
+The [FastAPI study](bench/profiles/fastapi-study.md) records profiling, retained
+changes, rejected prototypes, and measurement limitations. Earlier reports
+and their distinct original baseline remain available for historical comparison.
+
+For a comparable run on this laptop, the final matrices were launched with
+`powerprofilesctl launch --profile performance --appid skirr-benchmark --` before
+the Python benchmark command. This temporary hold releases on command exit;
+it is optional benchmark tooling, not a Skirr runtime dependency. CPU-frequency
+samples and the active power profile are recorded in each result. Discarded
+power-saver and mixed-clock trials remain clearly named in the results folder.
diff --git a/bench/apps.py b/bench/apps.py
new file mode 100644
index 0000000..74c5232
--- /dev/null
+++ b/bench/apps.py
@@ -0,0 +1,68 @@
+"""The same application code is loaded by every server in the comparison."""
+import asyncio
+import os
+
+TINY = b'Hello world!'
+LARGE = b'x' * 65536
+STREAM = b'first\nlast\n'
+
+
+async def raw_app(scope, receive, send):
+  if scope['type'] == 'lifespan':
+    while True:
+      message = await receive()
+      if message['type'] == 'lifespan.startup':
+        await send({'type': 'lifespan.startup.complete'})
+      elif message['type'] == 'lifespan.shutdown':
+        await send({'type': 'lifespan.shutdown.complete'})
+        return
+  path = scope['path']
+  if path == '/tiny':
+    body = TINY
+  elif path == '/bytes':
+    body = LARGE
+  elif path == '/echo':
+    parts = []
+    while True:
+      message = await receive()
+      if message['type'] != 'http.request':
+        return
+      parts.append(message.get('body', b''))
+      if not message.get('more_body', False):
+        break
+    body = b''.join(parts)
+  elif path == '/_benchmark_pid':
+    body = str(os.getpid()).encode('ascii')
+  elif path == '/stream':
+    await send({'type': 'http.response.start', 'status': 200,
+                'headers': [(b'content-type', b'text/plain'), (b'content-length', b'11')]})
+    await send({'type': 'http.response.body', 'body': b'first\n', 'more_body': True})
+    await asyncio.sleep(0.05)
+    await send({'type': 'http.response.body', 'body': b'last\n'})
+    return
+  else:
+    await send({'type': 'http.response.start', 'status': 404})
+    await send({'type': 'http.response.body', 'body': b'missing'})
+    return
+  await send({'type': 'http.response.start', 'status': 200,
+              'headers': [(b'content-type', b'text/plain'),
+                          (b'content-length', str(len(body)).encode('ascii'))]})
+  await send({'type': 'http.response.body', 'body': body})
+
+
+def __getattr__(name):
+  if name != 'fastapi_app':
+    raise AttributeError(name)
+  from fastapi import FastAPI
+  app = FastAPI()
+
+  @app.get('/json')
+  async def json_response():
+    return {'hello': 'world'}
+
+  @app.get('/_benchmark_pid')
+  async def process_id():
+    return os.getpid()
+
+  globals()['fastapi_app'] = app
+  return app
diff --git a/bench/compare.py b/bench/compare.py
new file mode 100644
index 0000000..475c3bb
--- /dev/null
+++ b/bench/compare.py
@@ -0,0 +1,372 @@
+"""Repeated same-app HTTP/1 benchmarks, pinned to separate server/client cores.
+
+Raw results are retained; failures are reported, never discarded.
+"""
+import argparse
+from concurrent.futures import ThreadPoolExecutor
+import csv
+import datetime
+import http.client
+import hashlib
+from importlib import metadata
+import json
+import os
+from pathlib import Path
+import random
+import re
+import resource
+import signal
+import shutil
+import socket
+import statistics
+import subprocess
+import sys
+import time
+from zoneinfo import ZoneInfo
+
+import psutil
+
+BENCH = Path(__file__).resolve().parent
+REPO = BENCH.parent
+WORKLOADS = {
+  'raw_get': ('raw', 'GET', '/tiny', None, b'Hello world!'),
+  'fastapi_json': ('fastapi', 'GET', '/json', None, b'{"hello":"world"}'),
+  'post_4k': ('raw', 'POST', '/echo', b'x' * 4096, b'x' * 4096),
+  'get_64k': ('raw', 'GET', '/bytes', None, b'x' * 65536),
+}
+SERVERS = ('skirr', 'weft', 'peregrine', 'skirr-before')
+
+
+def power_profile():
+  try:
+    return subprocess.check_output(['powerprofilesctl', 'get'], text=True).strip()
+  except (FileNotFoundError, subprocess.CalledProcessError):
+    return None
+
+
+def package_version(package):
+  try:
+    return metadata.version(package)
+  except metadata.PackageNotFoundError:
+    return None
+
+
+def seconds(value):
+  match = re.fullmatch(r'([\d.]+)(us|ms|s|m)', value)
+  if not match:
+    raise ValueError('Unrecognized latency: ' + value)
+  return float(match[1]) * {'us': 0.001, 'ms': 1, 's': 1000, 'm': 60000}[match[2]]
+
+
+def parse_wrk(text):
+  rps = re.search(r'Requests/sec:\s+([\d.]+)', text)
+  latency = re.search(r'^\s+Latency\s+(\S+)\s+(\S+)\s+(\S+)', text, re.M)
+  p99 = re.search(r'^\s+99(?:\.0+)?%\s+(\S+)', text, re.M)
+  count = re.search(r'(\d+) requests in ([\d.]+)s', text)
+  sockets = re.search(r'Socket errors: connect (\d+), read (\d+), write (\d+), timeout (\d+)', text)
+  non2xx = re.search(r'Non-2xx or 3xx responses:\s+(\d+)', text)
+  if not all((rps, latency, p99, count)):
+    raise RuntimeError('Incomplete wrk output:\n' + text)
+  return {
+    'requests_per_second': float(rps[1]), 'requests': int(count[1]),
+    'wrk_seconds': float(count[2]), 'mean_latency_ms': seconds(latency[1]),
+    'p99_latency_ms': seconds(p99[1]),
+    'socket_errors': sum(map(int, sockets.groups())) if sockets else 0,
+    'socket_error_detail': dict(zip(('connect', 'read', 'write', 'timeout'), map(int, sockets.groups()))) if sockets else {},
+    'non_2xx_3xx': int(non2xx[1]) if non2xx else 0,
+  }
+
+
+def process_tree(root):
+  try:
+    return [root] + root.children(recursive=True)
+  except psutil.NoSuchProcess:
+    return []
+
+
+def sample_tree(root):
+  cpu, rss, pss, pids = {}, 0, 0, []
+  for process in process_tree(root):
+    try:
+      times = process.cpu_times()
+      cpu[process.pid] = times.user + times.system
+      memory = process.memory_full_info()
+      rss += memory.rss
+      pss += getattr(memory, 'pss', memory.rss)
+      pids.append(process.pid)
+    except (psutil.NoSuchProcess, psutil.AccessDenied, ProcessLookupError):
+      pass
+  return cpu, rss, pss, pids
+
+
+class Server:
+  def __init__(self, name, app, workers, args, label):
+    self.args, self.name, self.workers = args, name, workers
+    self.ready_pids = set()
+    with socket.socket() as sock:
+      sock.bind(('127.0.0.1', 0))
+      self.port = sock.getsockname()[1]
+    source = args.baseline / 'python' if name == 'skirr-before' else REPO / 'python'
+    env = dict(os.environ)
+    paths = [BENCH, source, *args.dependency_paths]
+    if env.get('PYTHONPATH'):
+      paths.append(env['PYTHONPATH'])
+    env['PYTHONPATH'] = os.pathsep.join(map(str, paths))
+    cpus = args.server_cpus[:workers]
+    self.command = [sys.executable, str(BENCH / 'server.py'), name,
+                    '--app', app, '--lifespan', args.lifespan, '--workers', str(workers), '--port', str(self.port),
+                    '--cpus', ','.join(map(str, cpus))]
+    self.log_path = args.output / 'logs' / (label + '.server.log')
+    self.log = self.log_path.open('w')
+    self.process = subprocess.Popen(self.command, cwd=BENCH, env=env,
+                                    stdout=self.log, stderr=subprocess.STDOUT,
+                                    start_new_session=True)
+    self.root = psutil.Process(self.process.pid)
+
+  def ready(self, workload):
+    deadline = time.monotonic() + 20
+    def get_pid(_):
+      client = http.client.HTTPConnection('127.0.0.1', self.port, timeout=0.5)
+      try:
+        client.request('GET', '/_benchmark_pid')
+        response = client.getresponse()
+        body = response.read()
+        return int(body) if response.status == 200 else None
+      except (OSError, http.client.HTTPException, ValueError):
+        return None
+      finally:
+        client.close()
+    with ThreadPoolExecutor(max_workers=self.workers * 4) as pool:
+      while time.monotonic() < deadline:
+        if self.process.poll() is not None:
+          raise RuntimeError('Server exited: ' + self.log_path.read_text())
+        self.ready_pids.update(pid for pid in pool.map(get_pid, range(self.workers * 8)) if pid)
+        if len(self.ready_pids) == self.workers:
+          for _ in range(5):
+            self.validate(workload)
+          self.affinities()
+          return
+        time.sleep(0.05)
+    raise TimeoutError('Not all workers became ready: {} {}'.format(self.ready_pids, self.log_path))
+
+  def affinities(self):
+    actual = {str(pid): psutil.Process(pid).cpu_affinity() for pid in sorted(self.ready_pids)}
+    allowed = set(self.args.server_cpus[:self.workers])
+    if any(not cpus or not set(cpus) <= allowed for cpus in actual.values()):
+      raise RuntimeError(f"Worker CPU affinity differs from configured server CPUs: {actual}")
+    return actual
+
+  def validate(self, workload):
+    _, method, path, body, expected = WORKLOADS[workload]
+    client = http.client.HTTPConnection('127.0.0.1', self.port, timeout=1)
+    try:
+      client.request(method, path, body=body)
+      response = client.getresponse()
+      actual = response.read()
+      if response.status != 200 or actual != expected:
+        raise AssertionError((self.name, workload, response.status, len(actual), actual[:100]))
+    finally:
+      client.close()
+
+  def stop(self):
+    if self.process.poll() is None:
+      self.process.send_signal(signal.SIGTERM)
+      try:
+        self.process.wait(timeout=15)
+      except subprocess.TimeoutExpired:
+        os.killpg(self.process.pid, signal.SIGKILL)
+        self.process.wait()
+    self.log.close()
+    # Includes process-manager helper children that might otherwise linger.
+    try:
+      os.killpg(self.process.pid, signal.SIGTERM)
+    except ProcessLookupError:
+      pass
+
+
+def wrk_command(args, server, workload, duration):
+  command = ['taskset', '-c', ','.join(map(str, args.client_cpus)), args.wrk,
+             '-t', str(args.threads), '-c', str(args.connections),
+             '-d', str(duration) + 's', '--latency', '--timeout', '3s']
+  if args.rate is not None:
+    command += ['-R', str(args.rate)]
+  if workload == 'post_4k':
+    command += ['-s', str(BENCH / 'post_4k.lua')]
+  return command + ['http://127.0.0.1:{}{}'.format(server.port, WORKLOADS[workload][2])]
+
+
+def run_load(args, server, workload, repeat, ordinal):
+  server.validate(workload)
+  warmup = subprocess.run(wrk_command(args, server, workload, args.warmup),
+                          stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, timeout=args.warmup + 10)
+  if warmup.returncode:
+    raise RuntimeError(warmup.stdout)
+  before_cpu, _, _, _ = sample_tree(server.root)
+  before_times = {}
+  for member in process_tree(server.root):
+    try:
+      before_times[member.pid] = member.cpu_times()
+    except (psutil.NoSuchProcess, psutil.AccessDenied):
+      pass
+  child_cpu = resource.getrusage(resource.RUSAGE_CHILDREN)
+  before_child = child_cpu.ru_utime + child_cpu.ru_stime
+  started = time.monotonic()
+  process = subprocess.Popen(wrk_command(args, server, workload, args.duration),
+                              stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
+  samples = []
+  frequencies = []
+  psutil.cpu_percent(percpu=True)
+  while process.poll() is None:
+    _, rss, pss, pids = sample_tree(server.root)
+    samples.append((rss, pss, psutil.cpu_percent(percpu=True)))
+    frequencies.append({str(cpu): int(Path(f'/sys/devices/system/cpu/cpu{cpu}/cpufreq/scaling_cur_freq').read_text())
+                        for cpu in args.server_cpus[:server.workers]})
+    if server.process.poll() is not None:
+      process.terminate()
+      raise RuntimeError('Server crashed: ' + str(server.log_path))
+    if time.monotonic() - started > args.duration + 12:
+      process.kill()
+      raise TimeoutError('Load generator did not complete')
+    time.sleep(0.2)
+  output, _ = process.communicate(timeout=2)
+  elapsed = time.monotonic() - started
+  if process.returncode:
+    raise RuntimeError(output)
+  after_cpu, _, _, pids = sample_tree(server.root)
+  child_cpu = resource.getrusage(resource.RUSAGE_CHILDREN)
+  client_cpu = child_cpu.ru_utime + child_cpu.ru_stime - before_child
+  cpu_used = sum(max(0, value - before_cpu.get(pid, 0)) for pid, value in after_cpu.items())
+  cpu_parts = {'user': 0.0, 'system': 0.0}
+  for member in process_tree(server.root):
+    try:
+      current = member.cpu_times()
+      previous = before_times.get(member.pid)
+      for part in cpu_parts:
+        cpu_parts[part] += max(0, getattr(current, part) - (getattr(previous, part) if previous else 0))
+    except (psutil.NoSuchProcess, psutil.AccessDenied):
+      pass
+  row = dict(server=server.name, workers=server.workers,
+             workload=workload, repeat=repeat, ordinal=ordinal,
+             timestamp=datetime.datetime.now(ZoneInfo('America/New_York')).isoformat(),
+             **parse_wrk(output), server_cpu_percent=100 * cpu_used / elapsed,
+             server_cpu_seconds=cpu_parts,
+             client_cpu_percent=100 * client_cpu / elapsed,
+             peak_tree_rss_mib=max(s[0] for s in samples) / 2**20,
+             peak_tree_pss_mib=max(s[1] for s in samples) / 2**20,
+             mean_system_cpu_percent=[statistics.mean(s[2][i] for s in samples) for i in range(psutil.cpu_count())],
+             server_frequency_khz=frequencies,
+             server_pids=pids, verified_worker_pids=sorted(server.ready_pids),
+             verified_worker_affinities=server.affinities())
+  path = args.output / 'logs' / ('{:03d}-{}-w{}-{}-r{}.wrk.txt'.format(ordinal, row['server'], row['workers'], workload, repeat))
+  path.write_text(output)
+  row['raw_log'] = str(path.relative_to(args.output))
+  server.validate(workload)
+  print('{ordinal:03d} {server:8s} w{workers} {workload:13s} r{repeat}: {requests_per_second:9,.0f} req/s; p99 {p99_latency_ms:.2f} ms; errors {socket_errors}/{non_2xx_3xx}; CPU srv/client {server_cpu_percent:.0f}/{client_cpu_percent:.0f}%'.format(**row), flush=True)
+  return row
+
+
+def measure_stream(server, count=20):
+  first, total = [], []
+  for _ in range(count):
+    client = http.client.HTTPConnection('127.0.0.1', server.port, timeout=2)
+    try:
+      started = time.perf_counter()
+      client.request('GET', '/stream')
+      response = client.getresponse()
+      prefix = response.read(1)
+      first.append((time.perf_counter() - started) * 1000)
+      body = prefix + response.read()
+      total.append((time.perf_counter() - started) * 1000)
+      assert response.status == 200 and body == b'first\nlast\n', (server.name, body)
+    finally:
+      client.close()
+  return dict(server=server.name, first_body_byte_ms=first, total_ms=total,
+              median_first_body_byte_ms=statistics.median(first), median_total_ms=statistics.median(total))
+
+
+def main():
+  parser = argparse.ArgumentParser(description=__doc__)
+  parser.add_argument('--servers', nargs='+', choices=SERVERS, default=list(SERVERS[:3]))
+  parser.add_argument('--workloads', nargs='+', choices=list(WORKLOADS), default=list(WORKLOADS))
+  parser.add_argument('--baseline', type=Path, help='Preserved source/binary directory for skirr-before')
+  parser.add_argument('--output', type=Path, required=True)
+  parser.add_argument('--dependency-paths', type=Path, nargs='*', default=[])
+  parser.add_argument('--server-cpus', type=lambda s: list(map(int, s.split(','))), default=[0, 1, 2, 3])
+  parser.add_argument('--client-cpus', type=lambda s: list(map(int, s.split(','))), default=[4, 5, 6, 7])
+  parser.add_argument('--workers', type=lambda s: list(map(int, s.split(','))), default=[1])
+  parser.add_argument('--wrk', default='wrk', help='wrk-compatible load-generator binary')
+  parser.add_argument('--rate', type=int, help='Total fixed rate; requires a wrk2-compatible generator')
+  parser.add_argument('--duration', type=int, default=10)
+  parser.add_argument('--warmup', type=int, default=1)
+  parser.add_argument('--repeats', type=int, default=3)
+  parser.add_argument('--threads', type=int, default=4)
+  parser.add_argument('--lifespan', choices=['off', 'on'], default='off')
+  parser.add_argument('--connections', type=int, default=256)
+  parser.add_argument('--seed', type=int, default=20261108)
+  parser.add_argument('--smoke', action='store_true')
+  args = parser.parse_args()
+  if 'skirr-before' in args.servers and args.baseline is None:
+    parser.error('--baseline is required for skirr-before')
+  args.output = args.output.resolve()
+  args.output.mkdir(parents=True, exist_ok=True)
+  (args.output / 'logs').mkdir(exist_ok=True)
+  if set(args.server_cpus) & set(args.client_cpus):
+    parser.error('Client and server CPU sets must not overlap')
+  if max(args.workers) > len(args.server_cpus):
+    parser.error('Each worker needs a dedicated allowed server CPU')
+  if args.smoke:
+    args.duration, args.warmup, args.repeats = 2, 1, 1
+  os.sched_setaffinity(0, set(args.client_cpus))
+  if shutil.which(args.wrk) is None:
+    parser.error('Load generator not found: ' + args.wrk)
+  versions = {p: package_version(p) for p in ('weft-server', 'peregrine-server', 'uvloop', 'fastapi')}
+  metadata_out = dict(python=sys.version, versions=versions,
+                      load_generator=dict(path=shutil.which(args.wrk), sha256=hashlib.sha256(Path(shutil.which(args.wrk)).read_bytes()).hexdigest()),
+                      build='cargo build --release --features extension-module; native Linux epoll',
+                      source_sha256={str(p.relative_to(REPO)): hashlib.sha256(p.read_bytes()).hexdigest() for p in [REPO/'Cargo.toml', REPO/'Cargo.lock', REPO/'pyproject.toml', *sorted((REPO/'src').glob('*.rs')), REPO/'python/skirr/__init__.py', REPO/'python/skirr/_native.so']},
+                      runtime_policy='Server allocator/GC defaults retained; Skirr does not change application GC policy.',
+                      baseline_sha256={str(p.relative_to(args.baseline)): hashlib.sha256(p.read_bytes()).hexdigest() for p in [args.baseline/'Cargo.toml', args.baseline/'Cargo.lock', *sorted((args.baseline/'src').glob('*.rs')), args.baseline/'python/skirr/__init__.py', args.baseline/'python/skirr/_native.so']} if args.baseline else None,
+                      configuration={k: str(v) if isinstance(v, Path) else [str(x) for x in v] if k == 'dependency_paths' else v for k, v in vars(args).items()},
+                      cpu_info=subprocess.check_output(['lscpu'], text=True),
+                      governor=Path('/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor').read_text().strip(),
+                      energy_preference=Path('/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference').read_text().strip(),
+                      power_profile=power_profile(),
+                      initial_load_average=os.getloadavg(), mode='smoke' if args.smoke else 'measured')
+  result = dict(metadata=metadata_out, runs=[], streaming=[])
+  def save():
+    (args.output / 'results.json').write_text(json.dumps(result, indent=2))
+  save()
+  ordinal = 0
+  rng = random.Random(args.seed)
+  for repeat in range(1, args.repeats + 1):
+    groups = [(name, workers, app) for name in args.servers for workers in args.workers for app in sorted({WORKLOADS[w][0] for w in args.workloads})]
+    rng.shuffle(groups)
+    for name, workers, app in groups:
+      workloads = [name for name, definition in WORKLOADS.items() if definition[0] == app and name in args.workloads]
+      rng.shuffle(workloads)
+      label = '{}-w{}-{}-r{}'.format(name, workers, app, repeat)
+      server = Server(name, app, workers, args, label)
+      try:
+        server.ready(workloads[0])
+        if app == 'raw' and repeat == 1:
+          timing = measure_stream(server)
+          timing['workers'] = workers
+          result['streaming'].append(timing)
+          save()
+        for workload in workloads:
+          ordinal += 1
+          result['runs'].append(run_load(args, server, workload, repeat, ordinal))
+          save()
+      finally:
+        server.stop()
+  fields = ['server', 'workers', 'workload', 'repeat', 'requests_per_second', 'mean_latency_ms', 'p99_latency_ms',
+            'socket_errors', 'non_2xx_3xx', 'server_cpu_percent', 'client_cpu_percent', 'peak_tree_rss_mib', 'peak_tree_pss_mib']
+  with (args.output / 'runs.csv').open('w', newline='') as output:
+    writer = csv.DictWriter(output, fields, extrasaction='ignore')
+    writer.writeheader()
+    writer.writerows(result['runs'])
+  print('Saved {} runs to {}'.format(len(result['runs']), args.output), flush=True)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/bench/post_4k.lua b/bench/post_4k.lua
new file mode 100644
index 0000000..f074cc8
--- /dev/null
+++ b/bench/post_4k.lua
@@ -0,0 +1,3 @@
+wrk.method = "POST"
+wrk.body = string.rep("x", 4096)
+wrk.headers["Content-Type"] = "application/octet-stream"
diff --git a/bench/profile.py b/bench/profile.py
new file mode 100644
index 0000000..af7841d
--- /dev/null
+++ b/bench/profile.py
@@ -0,0 +1,178 @@
+"""Native/Python sampling under HTTP load; diagnostic throughput is not a benchmark."""
+import argparse
+import hashlib
+import http.client
+import json
+import os
+from pathlib import Path
+import signal
+import socket
+import subprocess
+import sys
+import time
+
+root = Path(__file__).resolve().parents[1]
+p = argparse.ArgumentParser(description=__doc__)
+p.add_argument('--profiler', required=True)
+p.add_argument('--kind', choices=['py-spy', 'perf'], default='py-spy')
+p.add_argument('--python-only', action='store_true')
+p.add_argument('--baseline', type=Path)
+p.add_argument('--server', choices=['skirr', 'peregrine', 'weft'], default='skirr')
+p.add_argument('--app', choices=['raw', 'fastapi'], default='raw')
+p.add_argument('--path', default='/tiny')
+p.add_argument('--python-perf', action='store_true', help='CPython DWARF trampolines; diagnostic overhead')
+p.add_argument('--connections', type=int, default=64)
+p.add_argument('--duration', type=int, default=11)
+p.add_argument('--wrk', default='wrk')
+p.add_argument('--rate', type=int)
+p.add_argument('--output', required=True, type=Path)
+a = p.parse_args()
+a.output.mkdir(parents=True, exist_ok=True)
+with socket.socket() as s:
+    s.bind(('127.0.0.1', 0))
+    port = s.getsockname()[1]
+source = a.baseline/'python' if a.baseline else root/'python'
+env = dict(os.environ, PYTHONPATH=str(source) + os.pathsep + str(root/'bench'))
+if a.python_perf:
+    env['PYTHON_PERF_JIT_SUPPORT'] = '1'
+server = [sys.executable, str(root/'bench/server.py'), a.server, '--app', a.app,
+          '--port', str(port), '--workers', '1', '--cpus', '0']
+command = [a.profiler, 'record', '--subprocesses', '--native', '--rate', '500', '--duration', str(a.duration + 3),
+           '--format', 'raw', '--output', str(a.output/'stacks.txt'), '--',
+           *server]
+if a.python_only:
+    command.remove('--native')
+if a.kind == 'perf':
+    data = Path('/tmp') / (a.output.name + '.perf.data')
+    data.unlink(missing_ok=True)
+    command = [a.profiler, 'record', '-e', 'cycles:u', '-F', '499',
+               '--call-graph', 'dwarf,8192', '--delay', '3000', '-o', str(data), '--', *server]
+if a.kind == 'perf' and a.python_perf:
+    command[2:2] = ['-k', '1']
+os.sched_setaffinity(0, {7})
+with (a.output/'profiler.log').open('w') as log:
+    proc = subprocess.Popen(command, env=env, stdout=log, stderr=subprocess.STDOUT,
+                            start_new_session=True)
+    try:
+        deadline = time.monotonic() + 10
+        while True:
+            if proc.poll() is not None:
+                raise RuntimeError((a.output/'profiler.log').read_text())
+            client = http.client.HTTPConnection('127.0.0.1', port, timeout=.2)
+            try:
+                client.request('GET', '/_benchmark_pid')
+                r = client.getresponse()
+                if r.status == 200 and (pid := int(r.read())):
+                    worker_affinity = sorted(os.sched_getaffinity(pid))
+                    if worker_affinity != [0]:
+                        raise RuntimeError(f'Worker affinity differs from CPU 0: {worker_affinity}')
+                    (a.output/'maps.txt').write_text(Path(f'/proc/{pid}/maps').read_text())
+                    break
+            except (OSError, http.client.HTTPException):
+                if time.monotonic() > deadline:
+                    raise
+                time.sleep(.03)
+            finally:
+                client.close()
+        client = http.client.HTTPConnection('127.0.0.1', port, timeout=2)
+        try:
+            payload = b'x' * 4096 if a.path == '/echo' else None
+            client.request('POST' if payload is not None else 'GET', a.path, body=payload)
+            response = client.getresponse()
+            body = response.read()
+            expected = {'/json': b'{"hello":"world"}', '/tiny': b'Hello world!',
+                        '/echo': b'x' * 4096, '/bytes': b'x' * 65536}[a.path]
+            if response.status != 200 or body != expected:
+                raise RuntimeError(f'Invalid profiling workload: status {response.status}, body {body[:80]!r}')
+            (a.output/'validation.json').write_text(json.dumps({'status': 200, 'body_bytes': len(body),
+                                                               'app': a.app, 'path': a.path}))
+        finally:
+            client.close()
+        load_command = ['taskset', '-c', '4,5,6,7', a.wrk, '-t4', f'-c{a.connections}', f'-d{a.duration}s', '--latency']
+        if a.rate is not None:
+            load_command += ['-R', str(a.rate)]
+        if a.path == '/echo':
+            load_command += ['-s', str(root/'bench/post_4k.lua')]
+        load_command += [f'http://127.0.0.1:{port}{a.path}']
+        load = subprocess.run(load_command,
+                              capture_output=True, text=True, timeout=a.duration + 10, check=True)
+        (a.output/'diagnostic-load.txt').write_text(load.stdout)
+        if 'Non-2xx or 3xx' in load.stdout or 'Socket errors:' in load.stdout:
+            raise RuntimeError('Invalid diagnostic load: ' + load.stdout)
+        if a.kind == 'perf':
+            os.killpg(proc.pid, signal.SIGINT)
+        proc.wait(timeout=20)
+        if proc.returncode and not (a.kind == 'perf' and proc.returncode in (130, -signal.SIGINT) and data.exists()):
+            raise RuntimeError((a.output/'profiler.log').read_text())
+    finally:
+        try:
+            os.killpg(proc.pid, signal.SIGTERM)
+        except ProcessLookupError:
+            pass
+        proc.wait(timeout=5)
+(a.output/'command.json').write_text(json.dumps(command, indent=2))
+if a.server == 'skirr':
+    library = source/'skirr/_native.so'
+else:
+    mappings = (a.output/'maps.txt').read_text().splitlines()
+    module = '_native.' if a.server == 'peregrine' else '_weft.'
+    library = Path(next(line.split()[-1] for line in mappings
+                        if f'/{a.server}/{module}' in line and '.so' in line))
+try:
+    power_profile = subprocess.check_output(['powerprofilesctl', 'get'], text=True).strip()
+except (OSError, subprocess.CalledProcessError):
+    power_profile = None
+(a.output/'metadata.json').write_text(json.dumps({
+    'server': a.server,
+    'power_profile': power_profile,
+    'workload': dict(app=a.app, path=a.path, connections=a.connections, threads=4, rate=a.rate, duration=a.duration, load_generator=a.wrk, worker_pid=pid),
+    'verified_worker_affinity': worker_affinity,
+    'python_only': a.python_only,
+    'python_perf_trampolines': a.python_perf,
+    'sample_subprocesses': a.kind == 'py-spy',
+    'library': str(library),
+    'binary_sha256': hashlib.sha256(library.read_bytes()).hexdigest(),
+    'python_source_sha256': hashlib.sha256((source/'skirr/__init__.py').read_bytes()).hexdigest() if a.server == 'skirr' else None,
+    'source_sha256': {p.name: hashlib.sha256(p.read_bytes()).hexdigest()
+                      for p in (a.baseline or root).joinpath('src').glob('*.rs')} if a.server == 'skirr' else {},
+    'startup_sampling_delay_ms': 3000 if a.kind == 'perf' else 0,
+    'diagnostic_only': True,
+}, indent=2))
+if a.kind == 'perf':
+    if a.python_perf:
+        injected = data.with_suffix('.jit.data')
+        subprocess.run([a.profiler, 'inject', '--jit', '-i', str(data), '-o', str(injected)], check=True)
+        data = injected
+    for label, extra in [('exclusive', ['--no-children']), ('inclusive', ['--children']), ('flat', ['--no-children', '-g', 'none'])]:
+        report = subprocess.run([a.profiler, 'report', '--stdio', '--percent-limit', '0.5',
+                                 '-i', str(data), *extra, '--sort', 'symbol,dso'],
+                                capture_output=True, text=True, check=True)
+        (a.output/(label+'.txt')).write_text(report.stdout)
+    if a.python_perf:
+        from collections import Counter
+        import re
+        stacks = subprocess.run([a.profiler, 'script', '-i', str(data), '-F',
+                                 'comm,pid,tid,time,period,event,ip,sym,dso'],
+                                capture_output=True, text=True, check=True)
+        counts = Counter()
+        total = 0
+        for stack in stacks.stdout.split('\n\n'):
+            lines = stack.splitlines()
+            if not lines:
+                continue
+            sample = re.search(r':\s+(\d+)\s+\S+:', lines[0])
+            if not sample:
+                continue
+            weight = int(sample[1])
+            total += weight
+            frames = [line.strip().split('py::', 1)[1].rsplit(' (', 1)[0]
+                      for line in lines[1:] if 'py::' in line]
+            counts[frames[0] if frames else '[no Python trampoline frame]'] += weight
+        (a.output/'python-attribution.json').write_text(json.dumps({
+            'total_sample_period': total,
+            'nearest_python_frame_percent': {key: round(value/total*100, 2)
+                                              for key, value in counts.most_common(40)},
+            'limitations': 'Nearest Python caller includes its native/C-API callees; normalized diagnostic samples.',
+        }, indent=2))
+        (a.output/'script-diagnostics.txt').write_text(stacks.stderr)
+print(a.output)
diff --git a/bench/profiles/README.md b/bench/profiles/README.md
new file mode 100644
index 0000000..e983e60
--- /dev/null
+++ b/bench/profiles/README.md
@@ -0,0 +1,95 @@
+# Profiling artifacts
+
+These are diagnostic profiles, not throughput benchmark results. No profiling
+process is active during the repeated comparisons in `bench/results`.
+
+- `before-raw`, `before-fastapi`: py-spy native/Python stack samples. They include
+  startup; do not treat import activity as steady-state request overhead. The raw
+  profile had 6,195 accepted samples and 53 stack-unwinding/merge errors.
+- `perf-before-raw`, `perf-before-fastapi`: original release binary, user-space
+  cycles only, sampling delayed three seconds to exclude application startup.
+- `perf-readiness-raw`: after read-buffer and readiness changes.
+- `perf-optimized-*`: intermediate implementation before the vectored-write change.
+- `perf-final-*`: retained source after all optimizations. Build hashes are in
+  metadata.json; benchmark wheel hashes are recorded separately in results.json.
+- `before-source.tar.gz`: original source and original tested release extension,
+  retained for repeatable before/after comparisons. No production code is fetched
+  from this archive at runtime.
+
+Each perf directory contains exclusive/inclusive text reports, command line,
+loaded mappings, profiler diagnostics and its load-generator output. Raw perf.data
+files are temporary files under `/tmp`, named after each profile directory.
+Perf reports record zero lost samples. Unknown/unresolved symbols remain visible;
+they are not silently assigned to a guessed function.
+
+Example, from the project directory with perf already permitted for your process:
+
+```bash
+python bench/profile.py --kind perf --profiler /usr/bin/perf \
+  --path /bytes --output bench/profiles/my-bulk
+```
+
+The script runs server CPU 0, client CPUs 4–7 (four threads, 64 connections by default; override with --connections). It uses
+`cycles:u`, 499 Hz, DWARF call chains, a three-second sampling delay, and eleven
+seconds of diagnostic load. Commands and output paths are saved. Python/native
+stack sampling instead uses `--profiler /path/to/py-spy` with the default kind.
+
+Profiling required temporarily changing this machine's perf_event_paranoid from
+4 to 2. The user performed the privileged change; restoring it to 4 is also a
+user action. The server itself never changes kernel profiling or application GC
+settings. Security-setting changes are not required to run normal benchmarks.
+
+## Peregrine comparison round
+
+`peregrine-{tiny,upload,fastapi}` profile the installed Peregrine 1.1.7 binary.
+`skirr-round2-{tiny,upload,fastapi}` are the saved Skirr baseline;
+`skirr-round2-final-*` are the retained release wheel. The exact Peregrine source
+archive, hash and reviewed files are recorded in `peregrine-source.json`.
+Swift symbols in `exclusive-readable.txt` were demangled with the installed
+Peregrine wheel's `libswiftCore.so` / `swift_demangle`; original reports remain.
+See [the comparison analysis](peregrine-study.md).
+
+`syscalls-{before,after,peregrine}` record 1,001 sequential tiny requests under
+strace, including readiness and shutdown. Use `bench/syscalls.py` to reproduce;
+the output is diagnostic and must not be used as throughput data. The retained
+Skirr before-source for this round is `round2-before-source.tar.gz`.
+`rejected-token-channel.patch` records the discarded vectorcall experiment;
+its workload measurements are in `bench/results/channel-experiment`.
+
+## FastAPI and p99 study
+
+See [fastapi-study.md](fastapi-study.md) for the third-round findings and provenance.
+`fastapi-round3-before`, `fastapi-round3-peregrine` and `fastapi-round3-retained`
+are validated native profiles. `python-only-round3-*-workers` samples Python
+worker stacks; `tail-round3-*-c64` measures instrumented loop delays and send yields.
+Only `retained` names identify the final release binary. Earlier `final` and
+`pre-intern` names are intermediate experiments, not final performance evidence.
+
+`invalid-404-*`, the parent-only Peregrine Python profile, and the py-spy native
+profile with merge errors are excluded evidence. Their limitations are recorded
+in the study. `round3-before-source.tar.gz` preserves this round's starting code
+and binary. `wrk2-round3-source.json` records the temporary fixed-rate generator.
+
+## Fourth-round final-write and allocation study
+
+[latency-round4-study.md](latency-round4-study.md) describes the current wheel,
+qualification and remaining FastAPI costs. `round4-final-native` and
+`round4-final-peregrine-native` contain delayed user-cycle profiles at 256
+connections. `round4-final-python` and `round4-final-peregrine-python` contain
+Python-only worker stacks and last-frame summaries. Actual serving-worker
+affinity is verified. `round4-final-*-syscalls` traces sequential FastAPI requests.
+
+`round4-before-source.tar.gz` is this user turn's starting release (09140253...).
+`round4-adaptive-checkpoint-source.tar.gz` preserves the rejected adaptive
+checkpoint (18449600...), described separately in
+`latency-round4-checkpoint-study.md`; its 75-run comparisons are intermediate.
+The final comparison uses only `latency-round4-final-*` matrices and the
+qualified extension a126b0fb... . Component trials with `round4-*` names can
+have different before candidates; consult their recorded baseline hashes.
+
+The optional CPython perf trampoline mode requires --python-perf and the
+monotonic clock configured by profile.py. It is diagnostic only and not used
+for comparative function percentages because eager and ordinary Task paths
+have unequal Python-frame coverage. Invalid JIT clock/unwind outputs are
+explicitly excluded in the study. No compiler, sanitizer or profiler runs
+concurrently with the final performance comparisons.
diff --git a/bench/profiles/asan-check.txt b/bench/profiles/asan-check.txt
new file mode 100644
index 0000000..c73d851
--- /dev/null
+++ b/bench/profiles/asan-check.txt
@@ -0,0 +1,24 @@
+Rust 1.93.0 / LLVM 21.1.8; x86_64 Linux / CPython 3.14.4.
+Separate AddressSanitizer build; production wheel was not replaced.
+
+Native build:
+RUSTC_BOOTSTRAP=1 RUSTFLAGS=-Zsanitizer=address CARGO_HOME=/tmp/skirr-cargo CARGO_TARGET_DIR=/tmp/skirr-asan-target PYO3_PYTHON=/usr/bin/python cargo build --release --target x86_64-unknown-linux-gnu --features extension-module
+
+Runtime:
+LLVM runtime from rustc's librustc-stable_rt.asan.a, copied to /tmp;
+asan_preinit.cpp.o removed from that copy because it is executable-only;
+remaining archive linked as a shared runtime with gcc --whole-archive,
+-ldl -lpthread -lrt -lm. Preloaded into the Python test process.
+
+Test environment:
+LD_PRELOAD=/tmp/skirr-asan-runtime.so ASAN_OPTIONS=detect_leaks=0
+PYTHONMALLOC=malloc PYTHONPATH=/tmp/skirr-asan-package
+
+Results:
+python -m pytest tests -q: 45 passed, no sanitizer findings.
+uvloop installed as asyncio policy, same suite: 45 passed, no sanitizer findings.
+
+Scope: instrumented Rust extension/dependencies within the ordinary Python host.
+Python and system libraries were not rebuilt with instrumentation. Leak detection
+was disabled for the embedding host. This does not establish absence of all
+memory bugs or leaks, nor replace fuzzing and multi-version qualification.
diff --git a/bench/profiles/asan-round3-check.txt b/bench/profiles/asan-round3-check.txt
new file mode 100644
index 0000000..9c57fa1
--- /dev/null
+++ b/bench/profiles/asan-round3-check.txt
@@ -0,0 +1,17 @@
+Round 3 qualification, CPython 3.14.4, Linux x86-64
+Final release extension SHA256: 09140253d30af272785eadc1a1d2613a6e2066653a63dbe09a552dcc9d762705
+
+Installed release wheel: PYTHONMALLOC=debug, 52 passed on asyncio; 52 on uvloop.
+Rust framing tests: 3 passed. Strict Clippy --all-targets -- -D warnings: passed.
+Separate Rust AddressSanitizer build: 52 passed on asyncio; 52 on uvloop.
+No ASan diagnostics. Embedding Python host and dependencies are not instrumented.
+Leak detection disabled (detect_leaks=0); this is not leak qualification.
+
+RUSTC_BOOTSTRAP=1 RUSTFLAGS=-Zsanitizer=address CARGO_HOME=/tmp/skirr-cargo CARGO_TARGET_DIR=/tmp/skirr-asan-target PYO3_PYTHON=$(command -v python) cargo build --release --target x86_64-unknown-linux-gnu --features extension-module
+Installed that extension in /tmp/skirr-asan-package/skirr.
+LD_PRELOAD=/tmp/skirr-asan-runtime.so ASAN_OPTIONS=detect_leaks=0 PYTHONMALLOC=malloc PYTHONPATH=/tmp/skirr-asan-package python -m pytest tests -q
+For uvloop, run pytest.main(['tests','-q']) after asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()).
+
+The new disconnect-logging regression was also run against the saved starting
+binary and failed for the expected erroneous application-failure log. See
+round3-disconnect-regression-before.txt.
diff --git a/bench/profiles/asan-round4-check.txt b/bench/profiles/asan-round4-check.txt
new file mode 100644
index 0000000..f63f30d
--- /dev/null
+++ b/bench/profiles/asan-round4-check.txt
@@ -0,0 +1,16 @@
+Round 4 qualification, CPython 3.14.4, Linux x86-64
+Release extension SHA256: 18449600b0e0984867e6afa9ebca1818c06daf8094d6e3425b3ab12af2334e83
+
+Strict Clippy --all-targets -- -D warnings: passed.
+Cargo test --lib: 3 passed.
+Installed release wheel, PYTHONMALLOC=debug: 61 passed on asyncio; 61 on uvloop.
+Saved round4 baseline binary, expanded socket cases: 61 passed.
+Separate Rust AddressSanitizer build: 61 passed on asyncio; 61 on uvloop.
+ASAN_OPTIONS=detect_leaks=0; embedding Python and system libraries uninstrumented.
+No ASan diagnostics; this is not a leak or complete conformance qualification.
+
+Commands follow asan-round3-check.txt, with installed wheel at
+/tmp/skirr-round4-installed and the same /tmp/skirr-asan-package setup.
+New table entries cover absolute-form empty/escaped paths and mixed/malformed
+CRLF boundaries. These protect equivalent behavior during refactoring, rather
+than claim bugs in the previous release.
diff --git a/bench/profiles/asan-round4-final-check.txt b/bench/profiles/asan-round4-final-check.txt
new file mode 100644
index 0000000..7a335ab
--- /dev/null
+++ b/bench/profiles/asan-round4-final-check.txt
@@ -0,0 +1,36 @@
+Final round 4 qualification: CPython 3.14.4, Linux x86-64
+Release extension SHA256: a126b0fbc2e541fda09d4d0e533d4dd4b7910891f4291f3ef9cf1837143ca73a
+Wheel SHA256: b2a01f65ba9b2c3ed2905a7786357d815d306bb03da6cce0912d30be7bc5fcbd
+
+cargo fmt --check: passed.
+cargo clippy --locked --all-targets -- -D warnings: passed.
+cargo test --locked --lib: 3 passed.
+Installed wheel PYTHONMALLOC=debug: 64 passed on asyncio; 64 passed on uvloop.
+Saved starting release, expanded cases PYTHONMALLOC=debug: 64 passed.
+Separate Rust AddressSanitizer extension: 64 passed on asyncio; 64 on uvloop.
+No ASan diagnostics. Leak detection disabled: host Python/system libraries are
+uninstrumented. This is not leak, fuzz or full protocol qualification.
+
+Wheel built with:
+CARGO_HOME=/tmp/skirr-cargo CARGO_TARGET_DIR=/tmp/skirr-target \
+  /tmp/skirr-build-tools/bin/maturin build --release --locked --interpreter python --out dist
+python -m pip install --no-deps --no-compile --target /tmp/skirr-round4-inline-installed --upgrade dist/*.whl
+PYTHONMALLOC=debug PYTHONPATH=/tmp/skirr-round4-inline-installed python -m pytest tests -q
+uvloop selected through asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
+before invoking pytest; this API emits a CPython 3.14 deprecation notice.
+
+ASan build:
+RUSTC_BOOTSTRAP=1 RUSTFLAGS=-Zsanitizer=address CARGO_HOME=/tmp/skirr-cargo \
+  CARGO_TARGET_DIR=/tmp/skirr-asan-target PYO3_PYTHON=/usr/bin/python \
+  cargo build --release --target x86_64-unknown-linux-gnu --features extension-module
+Copy lib_native.so and the final Python __init__.py to /tmp/skirr-asan-package/skirr.
+LD_PRELOAD=/tmp/skirr-asan-runtime.so ASAN_OPTIONS=detect_leaks=0 \
+  PYTHONMALLOC=malloc PYTHONPATH=/tmp/skirr-asan-package python -m pytest tests -q
+Use the same uvloop selection for its separate run. Runtime setup follows
+asan-round3-check.txt. The new vectorcall slots and MSG_MORE path are exercised.
+
+All additional cases protect externally observable compatibility; the expanded
+suite also passes the pre-optimization release. No test-only runtime hooks.
+
+Inline cohort flush at the end of the native callback is included in this build.
+Cheap callbacks with no pending flush avoid entering the flush routine.
diff --git a/bench/profiles/before-fastapi/command.json b/bench/profiles/before-fastapi/command.json
new file mode 100644
index 0000000..9cb45e1
--- /dev/null
+++ b/bench/profiles/before-fastapi/command.json
@@ -0,0 +1,25 @@
+[
+  "/tmp/skirr-profile-tools/bin/py-spy",
+  "record",
+  "--native",
+  "--rate",
+  "500",
+  "--duration",
+  "14",
+  "--format",
+  "raw",
+  "--output",
+  "bench/profiles/before-fastapi/stacks.txt",
+  "--",
+  "/usr/bin/python",
+  "/home/harrisonerd/Dropbox/Projects/oss/skirr/bench/server.py",
+  "skirr",
+  "--app",
+  "fastapi",
+  "--port",
+  "37323",
+  "--workers",
+  "1",
+  "--cpus",
+  "0"
+]
\ No newline at end of file
diff --git a/bench/profiles/before-fastapi/diagnostic-load.txt b/bench/profiles/before-fastapi/diagnostic-load.txt
new file mode 100644
index 0000000..b5b9ffc
--- /dev/null
+++ b/bench/profiles/before-fastapi/diagnostic-load.txt
@@ -0,0 +1,14 @@
+Running 11s test @ http://127.0.0.1:37323/json
+  3 threads and 64 connections
+  Thread Stats   Avg      Stdev     Max   +/- Stdev
+    Latency    20.34ms    8.23ms  55.98ms   70.78%
+    Req/Sec     1.03k   200.70     1.51k    70.24%
+  Latency Distribution
+     50%   18.70ms
+     75%   24.91ms
+     90%   31.42ms
+     99%   46.44ms
+  25814 requests in 11.01s, 3.08MB read
+  Socket errors: connect 0, read 75, write 344360, timeout 0
+Requests/sec:   2344.08
+Transfer/sec:    286.14KB
diff --git a/bench/profiles/before-fastapi/profiler.log b/bench/profiles/before-fastapi/profiler.log
new file mode 100644
index 0000000..11b5529
--- /dev/null
+++ b/bench/profiles/before-fastapi/profiler.log
@@ -0,0 +1,12 @@
+py-spy> Sampling process 500 times a second for 14 seconds. Press Control-C to exit.
+
+[2026-11-09T04:00:18.179563935Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 12 native and 13 python)
+[2026-11-09T04:00:19.363651102Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 80 native and 86 python)
+[2026-11-09T04:00:20.275907602Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 80 native and 86 python)
+[2026-11-09T04:00:20.277551168Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 80 native and 86 python)
+[2026-11-09T04:00:20.456473180Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 52 native and 58 python)
+[2026-11-09T04:00:24.778823131Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 1 native and 7 python)
+[2026-11-09T04:00:27.266509529Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 2 native and 9 python)
+[2026-11-09T04:00:29.254130129Z WARN  py_spy] Failed to get stack trace from 54295: Failed to merge native and python frames (Have 18 native and 24 python)
+py-spy> Wrote raw flamegraph data to 'bench/profiles/before-fastapi/stacks.txt'. Samples: 6979 Errors: 8
+py-spy> You can use the flamegraph.pl script from https://github.com/brendangregg/flamegraph to generate a SVG
diff --git a/bench/profiles/before-fastapi/stacks.txt b/bench/profiles/before-fastapi/stacks.txt
new file mode 100644
index 0000000..9beab90
--- /dev/null
+++ b/bench/profiles/before-fastapi/stacks.txt
@@ -0,0 +1,1867 @@
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:681) 5
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_model_construction.py:25);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_generate_schema.py:69);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:755);SourceLoader.get_code (<frozen importlib._bootstrap_external>:851);FileLoader.get_data (<frozen importlib._bootstrap_external>:951);0x78e0776b3dbf (libc.so.6);0x78e0776b3300 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:399);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1194);GenerateSchema._dict_schema (pydantic/_internal/_generate_schema.py:402);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1194);GenerateSchema._dict_schema (pydantic/_internal/_generate_schema.py:402);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2233);_extract_get_pydantic_json_schema (pydantic/_internal/_generate_schema.py:2686) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:2775);_TypedDictMeta.__new__ (typing.py:3152) 1
+<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);_native::State::pump::h4a92abdf40a60226 (skirr/_native.so);create_task (loop.c:34350);create_task (loop.c:34451);Py_XDECREF (refcount.h:513);0x78e0775d3ce5 (_asyncio.cpython-314-x86_64-linux-gnu.so);call_soon (loop.c:31927);call_soon (loop.c:32033);Loop__call_soon (loop.c:22162);loop_new_Handle (loop.c:75698);__pyx_tp_new_vectorcall_6uvloop_4loop_Handle (loop.c:175001);__pyx_tp_new__initialisation_6uvloop_4loop_Handle (loop.c:174949) 8
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:422);getattr_migration (pydantic/_migration.py:262);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/errors.py:11);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_repr.py:14);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_typing_extra.py:99);compile (re/__init__.py:289);_compile (re/__init__.py:350);compile (re/_compiler.py:766);_code (re/_compiler.py:599);_compile (re/_compiler.py:124);_compile (re/_compiler.py:133);_compile (re/_compiler.py:125) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:748);_operation (fastapi/telemetry/_api.py:193);_get_request_telemetry (fastapi/telemetry/_api.py:136) 7
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:434);BaseModel.model_rebuild (pydantic/main.py:683);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1188);GenerateSchema._list_schema (pydantic/_internal/_generate_schema.py:399);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1194);GenerateSchema._dict_schema (pydantic/_internal/_generate_schema.py:402);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1037) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:2612);_TypedDictMeta.__new__ (typing.py:3177) 2
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:152);Response.__call__ (starlette/responses.py:169);wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender (starlette/_exception_handler.py:39);wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender (starlette/_exception_handler.py:39);ServerErrorMiddleware.__call__.<locals>._send (starlette/middleware/errors.py:161);pyo3::internal::state::ReferencePool::drop_deferred_references::h57766d1ff5ff6865 (skirr/_native.so) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:3121);_TypedDictMeta.__new__ (typing.py:3176);_type_check (typing.py:210) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:263);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1327);_extract_json_schema_info_from_field_info (pydantic/_internal/_generate_schema.py:290) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:15);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (skirr/__init__.py:3);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (asyncio/__init__.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (asyncio/base_events.py:23);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (socket.py:78);EnumType._convert_ (enum.py:914);EnumType.__members__ (enum.py:797) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_decorators.py:164);dataclass (dataclasses.py:1442);dataclass.<locals>.wrap (dataclasses.py:1432);_process_class (dataclasses.py:1215);_FuncBuilder.add_fns_to_class (dataclasses.py:506) 12
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_mock_val_ser.py:9);_find_and_load (<frozen importlib._bootstrap>:1368);_ModuleLockManager.__enter__ (<frozen importlib._bootstrap>:421);_ModuleLock.acquire (<frozen importlib._bootstrap>:311) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_config.py:18);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/config.py:36);_TypedDictMeta.__new__ (typing_extensions.py:1139);_type_check (typing.py:212) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_model_construction.py:25);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_generate_schema.py:69);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/json_schema.py:47);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1333);_find_spec (<frozen importlib._bootstrap>:1267);PathFinder.find_spec (<frozen importlib._bootstrap_external>:1292);PathFinder._get_spec (<frozen importlib._bootstrap_external>:1266);FileFinder.find_spec (<frozen importlib._bootstrap_external>:1372) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:433);BaseModel.model_rebuild (pydantic/main.py:683);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1181);is_typealiastype (<string>:3) 2
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:691);HTTPConnection.cookies (starlette/requests.py:154);HTTPConnection.headers (starlette/requests.py:135) 4
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19349);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:421);__pyx_tp_dealloc_6uvloop_4loop_Handle (loop.c:175049) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:613);MutableHeaders.__delitem__ (starlette/datastructures.py:617) 4
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:52);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/dependencies/models.py:9);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1314);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/security/__init__.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/security/http.py:16);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._get_wrapped_inner_schema.<locals>.new_handler (pydantic/_internal/_generate_schema.py:2425);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1018) 2
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:769);JSONResponse.__init__ (starlette/responses.py:195);Response.__init__ (starlette/responses.py:47);Response.init_headers (starlette/responses.py:70) 2
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:688);HTTPConnection.headers (starlette/requests.py:135) 4
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:613);MutableHeaders.__delitem__ (starlette/datastructures.py:620) 3
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_model_construction.py:25);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_generate_schema.py:39);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (uuid.py:634);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:924);module_from_spec (<frozen importlib._bootstrap>:816);ExtensionFileLoader.create_module (<frozen importlib._bootstrap_external>:1053);_call_with_frames_removed (<frozen importlib._bootstrap>:491);dlopen (libc.so.6);0x78e07769f993 (libc.so.6);0x78e077b66659 (ld-linux-x86-64.so.2);_dl_catch_exception (ld-linux-x86-64.so.2);0x78e07769fea4 (libc.so.6);0x78e077b7274a (ld-linux-x86-64.so.2);_dl_catch_exception (ld-linux-x86-64.so.2);0x78e077b7220c (ld-linux-x86-64.so.2);_dl_catch_exception (ld-linux-x86-64.so.2);0x78e077b73461 (ld-linux-x86-64.so.2);0x78e077b6e98a (ld-linux-x86-64.so.2);0x78e077b6d311 (ld-linux-x86-64.so.2);0x78e077b8d95c (ld-linux-x86-64.so.2) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:749);serialize_response (fastapi/routing.py:348);jsonable_encoder (fastapi/encoders.py:298);jsonable_encoder (fastapi/encoders.py:243) 9
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:6);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (typing_extensions.py:279) 6
+0x78e07762a601 (libc.so.6);<module> (server.py:2);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (argparse.py:91);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (re/__init__.py:125);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:755);SourceLoader.get_code (<frozen importlib._bootstrap_external>:888);_compile_bytecode (<frozen importlib._bootstrap_external>:511) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:328);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:123);call_annotate_function (annotationlib.py:780);0x78e0776b3dbf (libc.so.6);0x78e0776b2ff4 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:58);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/dependencies/utils.py:52);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/background.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1314);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/__init__.py:1);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/_api.py:12);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (metrics/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (metrics/_internal/__init__.py:42);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (metrics/_internal/instrument.py:31);dataclass (dataclasses.py:1414) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:149);AsyncExitStack.__aexit__ (contextlib.py:741) 12
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:2775);_TypedDictMeta.__new__ (typing.py:3159) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499) 41
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:157);create_model (pydantic/main.py:1828);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:690);create_schema_validator (pydantic/plugin/_schema_validator.py:40);get_plugins (pydantic/plugin/_loader.py:40);Distribution.entry_points (importlib/metadata/__init__.py:496);PathDistribution.read_text (importlib/metadata/__init__.py:915);Path.read_text (pathlib/__init__.py:789);read (libc.so.6);0x78e0776a03e6 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:749);serialize_response (fastapi/routing.py:348);jsonable_encoder (fastapi/encoders.py:298);jsonable_encoder (fastapi/encoders.py:231) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1214);NativeTelemetry.enabled (fastapi/telemetry/_asgi.py:188);_unconfigured (fastapi/telemetry/_api.py:280);0x78e077797599 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:422);getattr_migration (pydantic/_migration.py:262);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/errors.py:11);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1368);_ModuleLockManager.__enter__ (<frozen importlib._bootstrap>:420);_get_module_lock (<frozen importlib._bootstrap>:443) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:58);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/dependencies/utils.py:52);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/background.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1314);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/__init__.py:1);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/_api.py:16);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (starlette/websockets.py:9);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (starlette/responses.py:15);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (secrets.py:17);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (hmac.py:17);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1333);_find_spec (<frozen importlib._bootstrap>:1267);PathFinder.find_spec (<frozen importlib._bootstrap_external>:1292);PathFinder._get_spec (<frozen importlib._bootstrap_external>:1266);FileFinder.find_spec (<frozen importlib._bootstrap_external>:1365);_path_stat (<frozen importlib._bootstrap_external>:152);fstatat64 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:263);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._get_wrapped_inner_schema.<locals>.new_handler (pydantic/_internal/_generate_schema.py:2426);GenerateSchema._apply_single_annotation (pydantic/_internal/_generate_schema.py:2304);GenerateSchema._apply_single_annotation (pydantic/_internal/_generate_schema.py:2368);apply_known_metadata (pydantic/_internal/_known_annotated_metadata.py:194);collect_known_metadata (pydantic/_internal/_known_annotated_metadata.py:366);expand_grouped_metadata (pydantic/_internal/_known_annotated_metadata.py:131);_ProtocolMeta.__instancecheck__ (typing.py:2049);getattr_static (inspect.py:1748);_check_class (inspect.py:1688);_shadowed_dict (inspect.py:1721) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:16);AsyncExitStack.__aenter__ (contextlib.py:714) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:243);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1161);GenerateSchema._match_generic_type (pydantic/_internal/_generate_schema.py:1184);GenerateSchema._union_schema (pydantic/_internal/_generate_schema.py:1344) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1214);NativeTelemetry.enabled (fastapi/telemetry/_asgi.py:181) 7
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:422);getattr_migration (pydantic/_migration.py:262);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/errors.py:11);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_repr.py:14);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_typing_extra.py:21);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_namespace_utils.py:30);NamedTupleMeta.__new__ (typing.py:3011) 4
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_handle_fromlist (<frozen importlib._bootstrap>:1431);__getattr__ (pydantic/__init__.py:446);import_module (importlib/__init__.py:88);_gcd_import (<frozen importlib._bootstrap>:1406);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/main.py:36);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_internal/_config.py:18);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1333);_find_spec (<frozen importlib._bootstrap>:1263) 1
+<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:152);Response.__call__ (starlette/responses.py:170);wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender (starlette/_exception_handler.py:39);wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender (starlette/_exception_handler.py:39);ServerErrorMiddleware.__call__.<locals>._send (starlette/middleware/errors.py:161);alloc::raw_vec::RawVecInner$LT$A$GT$::finish_grow::h3a08e8e9aa495a3f (skirr/_native.so);realloc (libc.so.6);0x78e0776b4248 (libc.so.6) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:499);solve_dependencies (fastapi/dependencies/utils.py:612);__init__ (__init__);Response.__init__ (starlette/responses.py:47);Response.init_headers (starlette/responses.py:74);0x78e077799ff3 (libc.so.6) 3
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:568);_TypedDictMeta.__new__ (typing.py:3176) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:157);create_model (pydantic/main.py:1828);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:690);create_schema_validator (pydantic/plugin/_schema_validator.py:40);get_plugins (pydantic/plugin/_loader.py:39);DeprecatedNonAbstract.__new__ (importlib/metadata/__init__.py:336) 3
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:8);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/openapi/models.py:413);ModelMetaclass.__new__ (pydantic/_internal/_model_construction.py:256);complete_model_class (pydantic/_internal/_model_construction.py:667);GenerateSchema.generate_schema (pydantic/_internal/_generate_schema.py:744);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1038);GenerateSchema._model_schema (pydantic/_internal/_generate_schema.py:868);GenerateSchema._generate_md_field_schema (pydantic/_internal/_generate_schema.py:1245);GenerateSchema._common_field_schema (pydantic/_internal/_generate_schema.py:1299);GenerateSchema._apply_annotations (pydantic/_internal/_generate_schema.py:2252);CallbackGetCoreSchemaHandler.__call__ (pydantic/_internal/_schema_generation_shared.py:83);GenerateSchema._apply_annotations.<locals>.inner_handler (pydantic/_internal/_generate_schema.py:2231);GenerateSchema._generate_schema_inner (pydantic/_internal/_generate_schema.py:1043);GenerateSchema.match_type (pydantic/_internal/_generate_schema.py:1122);is_callable (pydantic/_internal/_typing_extra.py:82) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2778) 2
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2771) 6
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:45);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/params.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/exceptions.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/__init__.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/_migration.py:4);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/warnings.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic/version.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/__init__.py:31);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (pydantic_core/core_schema.py:692);_TypedDictMeta.__new__ (typing.py:3176);_type_check (typing.py:202);_type_convert (typing.py:180);_make_forward_ref (typing.py:960);ForwardRef.__forward_code__ (annotationlib.py:267) 1
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);FastAPI.__call__ (fastapi/applications.py:1216);Starlette.__call__ (starlette/applications.py:96);ServerErrorMiddleware.__call__ (starlette/middleware/errors.py:164);ExceptionTelemetryMiddleware.__call__ (fastapi/telemetry/_asgi.py:151);ExceptionMiddleware.__call__ (starlette/middleware/exceptions.py:63);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);AsyncExitStackMiddleware.__call__ (fastapi/middleware/asyncexitstack.py:18);Router.__call__ (starlette/routing.py:676);APIRouter.app (fastapi/routing.py:2788);APIRoute.handle (fastapi/routing.py:1310);Route.handle (starlette/routing.py:282);request_response.<locals>.app (fastapi/routing.py:165);wrap_app_handling_exceptions.<locals>.wrapped_app (starlette/_exception_handler.py:42);request_response.<locals>.app.<locals>.app (fastapi/routing.py:151);get_request_handler.<locals>.app (fastapi/routing.py:769);JSONResponse.__init__ (starlette/responses.py:195);Response.__init__ (starlette/responses.py:46);JSONResponse.render (starlette/responses.py:198);dumps (json/__init__.py:242);JSONEncoder.encode (json/encoder.py:202);JSONEncoder.iterencode (json/encoder.py:227) 9
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/__init__.py:7);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/applications.py:7);_handle_fromlist (<frozen importlib._bootstrap>:1434);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/routing.py:58);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/dependencies/utils.py:52);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/background.py:5);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1314);_call_with_frames_removed (<frozen importlib._bootstrap>:491);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/__init__.py:1);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (fastapi/telemetry/_api.py:16);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (starlette/websockets.py:9);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<module> (starlette/responses.py:23);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:755);SourceLoader.get_code (<frozen importlib._bootstrap_external>:851);FileLoader.get_data (<frozen importlib._bootstrap_external>:950) 5
+0x78e07762a601 (libc.so.6);<module> (server.py:16);run (skirr/__init__.py:148);_worker (skirr/__init__.py:142);run (uvloop/__init__.py:96);run (asyncio/runners.py:204);Runner.run (asyncio/runners.py:127);run_until_complete (loop.c:35414);Py_XDECREF (refcount.h:513);run_until_complete (loop.c:35886);Py_XDECREF (refcount.h:514);Py_DECREF (refcount.h:415);_Py_IsImmortal (refcount.h:131);run_forever (loop.c:33192);run_forever (loop.c:33397);Loop__run (loop.c:20313);Loop__Loop__run (loop.c:19903);uv_run (core.c:452);uv__run_idle (loop-watcher.c:68);uv__queue_empty (queue.h:33);loop_cb_idle_callback (loop.c:92362);Handle__run (loop.c:70959);Loop__on_idle (loop.c:19387);Handle__run (loop.c:70906);__Pyx_PyObject_FastCallDict (loop.c:205117);0x78e0775d4ab9 (_asyncio.cpython-314-x86_64-linux-gnu.so);0x78e0775d4c5e (_asyncio.cpython-314-x86_64-linux-gnu.so);run.<locals>.wrapper (uvloop/__init__.py:48);_serve (skirr/__init__.py:124);Server.__init__ (skirr/__init__.py:79);load (skirr/__init__.py:15);__getattr__ (apps.py:56);_find_and_load (<frozen importlib._bootstrap>:1371);_find_and_load_unlocked (<frozen importlib._bootstrap>:1342);_load_unlocked (<frozen importlib._bootstrap>:938);_LoaderBasics.exec_module (<frozen importlib._bootstrap_external>:759);_call_with_frames_removed (<frozen importlib._bootstrap>:491);<modu

[Diff truncated. Use the raw view or local clone for the full content.]