[INFO] fetching crate trafficcop 1.4.12...
[INFO] documenting trafficcop-1.4.12 against da3f5c31e5535b3dc210067de660a45784ae1e9c for pr-162169
[INFO] extracting crate trafficcop 1.4.12 into /workspace/builds/worker-4-tc2/source
[INFO] started tweaking crates.io crate trafficcop 1.4.12
[INFO] finished tweaking crates.io crate trafficcop 1.4.12
[INFO] tweaked toml for crates.io crate trafficcop 1.4.12 written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate trafficcop 1.4.12 on toolchain da3f5c31e5535b3dc210067de660a45784ae1e9c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate trafficcop 1.4.12 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84
[INFO] running `Command { std: "docker" "start" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "doc" "--frozen" "--no-deps" "--document-private-items" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling pkg-config v0.3.34
[INFO] [stderr]    Compiling aws-lc-rs v1.18.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling zerovec-derive v0.11.4
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling rustls v0.23.43
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]    Compiling time-macros v0.2.32
[INFO] [stderr]     Checking deranged v0.5.8
[INFO] [stderr]     Checking alloc-stdlib v0.2.4
[INFO] [stderr]     Checking rustls-native-certs v0.8.4
[INFO] [stderr]     Checking num-integer v0.1.47
[INFO] [stderr]    Compiling asn1-rs-derive v0.6.0
[INFO] [stderr]    Compiling asn1-rs-impl v0.2.0
[INFO] [stderr]     Checking aho-corasick v1.1.5
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.20
[INFO] [stderr]     Checking simd-adler32 v0.3.10
[INFO] [stderr]     Checking futures-util v0.3.34
[INFO] [stderr]     Checking parking v2.2.1
[INFO] [stderr]    Compiling inotify-sys v0.1.8
[INFO] [stderr]     Checking num-bigint v0.4.8
[INFO] [stderr]     Checking rapidhash v4.5.1
[INFO] [stderr]     Checking event-listener v5.4.2
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking zerovec v0.11.7
[INFO] [stderr]     Checking zerotrie v0.2.5
[INFO] [stderr]     Checking anstyle-parse v1.0.0
[INFO] [stderr]     Checking brotli-decompressor v5.0.3
[INFO] [stderr]     Checking raw-cpuid v11.6.0
[INFO] [stderr]     Checking colorchoice v1.0.5
[INFO] [stderr]    Compiling cfg_aliases v0.2.2
[INFO] [stderr]    Compiling oid-registry v0.8.1
[INFO] [stderr]     Checking anstyle v1.0.14
[INFO] [stderr]     Checking regex-automata v0.4.18
[INFO] [stderr]    Compiling noyalib v0.0.5
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]     Checking anstream v1.0.0
[INFO] [stderr]     Checking event-listener-strategy v0.5.4
[INFO] [stderr]    Compiling nix v0.31.3
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking tinystr v0.8.4
[INFO] [stderr]     Checking potential_utf v0.1.6
[INFO] [stderr]     Checking icu_collections v2.3.0
[INFO] [stderr]     Checking rusticata-macros v4.1.0
[INFO] [stderr]    Compiling jobserver v0.1.35
[INFO] [stderr]     Checking icu_locale_core v2.3.0
[INFO] [stderr]     Checking metrics v0.24.6
[INFO] [stderr]     Checking left-right v0.11.8
[INFO] [stderr]     Checking fastrand v2.5.0
[INFO] [stderr]    Compiling cc v1.4.3
[INFO] [stderr]     Checking sketches-ddsketch v0.3.1
[INFO] [stderr]    Compiling metrics-exporter-prometheus v0.18.3
[INFO] [stderr]     Checking clap_lex v1.1.0
[INFO] [stderr]     Checking hashbag v0.1.13
[INFO] [stderr]    Compiling anyhow v1.0.104
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]     Checking clap_builder v4.6.6
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.2.2
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking socket2 v0.6.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking time v0.3.55
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking inotify v0.11.5
[INFO] [stderr]     Checking evmap v11.0.0
[INFO] [stderr]     Checking icu_provider v2.3.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand_xoshiro v0.7.0
[INFO] [stderr]     Checking getrandom v0.4.3
[INFO] [stderr]     Checking brotli v8.0.4
[INFO] [stderr]     Checking backon v1.6.0
[INFO] [stderr]     Checking rand v0.9.5
[INFO] [stderr]     Checking async-lock v3.4.2
[INFO] [stderr]     Checking arc-swap v1.9.2
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]     Checking notify-types v2.1.0
[INFO] [stderr]     Checking xxhash-rust v0.8.18
[INFO] [stderr]     Checking arcstr v1.2.0
[INFO] [stderr]     Checking tokio v1.53.1
[INFO] [stderr]     Checking quanta v0.12.6
[INFO] [stderr]     Checking dashmap v6.2.1
[INFO] [stderr]     Checking notify v8.2.0
[INFO] [stderr]     Checking uuid v1.24.1
[INFO] [stderr]     Checking icu_normalizer v2.3.0
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]     Checking icu_properties v2.3.0
[INFO] [stderr]     Checking metrics-util v0.20.4
[INFO] [stderr]     Checking hostname v0.4.2
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking ipnetwork v0.21.1
[INFO] [stderr]     Checking base64 v0.23.1
[INFO] [stderr]    Compiling aws-lc-sys v0.44.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking clap v4.6.6
[INFO] [stderr]     Checking futures-executor v0.3.34
[INFO] [stderr]     Checking futures v0.3.34
[INFO] [stderr]     Checking serde_yml v0.0.13
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking asn1-rs v0.7.2
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.13.1
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking compression-codecs v0.4.38
[INFO] [stderr]     Checking der-parser v10.0.0
[INFO] [stderr]     Checking x509-parser v0.18.1
[INFO] [stderr]     Checking tokio-util v0.7.19
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking async-compression v0.4.43
[INFO] [stderr]     Checking h2 v0.4.15
[INFO] [stderr]     Checking combine v4.6.7
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking hyper v1.11.0
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking redis v1.5.0
[INFO] [stderr]     Checking rustls-webpki v0.103.14
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking rustls-platform-verifier v0.7.0
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking reqwest v0.13.4
[INFO] [stderr]  Documenting trafficcop v1.4.12 (/opt/rustwide/workdir)
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/admin/api.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct AdminApi {
[INFO] [stdout] 16 | |     config: Arc<Config>,
[INFO] [stdout] 17 | |     _router: Arc<Router>,
[INFO] [stdout] 18 | |     _services: Arc<ServiceManager>,
[INFO] [stdout] 19 | |     _health_checker: Option<Arc<HealthChecker>>,
[INFO] [stdout] 20 | |     cluster_manager: Option<Arc<ClusterManager>>,
[INFO] [stdout] 21 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `REST API handler for inspecting routers, services, health, and cluster state.`
[INFO] [stdout]    = help: ends near `Admin API handler for runtime inspection and cluster management`
[INFO] [stdout]    = note: `#[deny(rustdoc::unportable_markdown)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/admin/api.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct AdminApi {
[INFO] [stdout] 16 | |     config: Arc<Config>,
[INFO] [stdout] 17 | |     _router: Arc<Router>,
[INFO] [stdout] 18 | |     _services: Arc<ServiceManager>,
[INFO] [stdout] 19 | |     _health_checker: Option<Arc<HealthChecker>>,
[INFO] [stdout] 20 | |     cluster_manager: Option<Arc<ClusterManager>>,
[INFO] [stdout] 21 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Admin API handler for runtime inspection and cluster management`
[INFO] [stdout]    = help: ends near `Admin API handler for runtime inspection and cluster management`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/admin/server.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | / pub struct AdminServer {
[INFO] [stdout] 15 | |     api: Arc<AdminApi>,
[INFO] [stdout] 16 | |     address: SocketAddr,
[INFO] [stdout] 17 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP server that hosts the admin API and dashboard.`
[INFO] [stdout]    = help: ends near `Admin server for serving the admin API`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/admin/server.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | / pub struct AdminServer {
[INFO] [stdout] 15 | |     api: Arc<AdminApi>,
[INFO] [stdout] 16 | |     address: SocketAddr,
[INFO] [stdout] 17 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Admin server for serving the admin API`
[INFO] [stdout]    = help: ends near `Admin server for serving the admin API`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/cluster/manager.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct ClusterManager {
[INFO] [stdout] 10 | |     node_id: String,
[INFO] [stdout] 11 | |     advertise_address: String,
[INFO] [stdout] 12 | |     store: Arc<dyn Store>,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     shutdown_tx: tokio::sync::broadcast::Sender<()>,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages node registration, heartbeats, leader election, and graceful draining.`
[INFO] [stdout]    = help: ends near `Cluster manager handles node registration, heartbeats, and coordination`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/cluster/manager.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct ClusterManager {
[INFO] [stdout] 10 | |     node_id: String,
[INFO] [stdout] 11 | |     advertise_address: String,
[INFO] [stdout] 12 | |     store: Arc<dyn Store>,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     shutdown_tx: tokio::sync::broadcast::Sender<()>,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Cluster manager handles node registration, heartbeats, and coordination`
[INFO] [stdout]    = help: ends near `Cluster manager handles node registration, heartbeats, and coordination`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/cluster/provider.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | / pub trait ConfigProvider: Send + Sync {
[INFO] [stdout] 11 | |     /// Fetch the current configuration
[INFO] [stdout] 12 | |     async fn fetch(&self) -> anyhow::Result<String>;
[INFO] [stdout] ...  |
[INFO] [stdout] 18 | |     fn poll_interval(&self) -> Duration;
[INFO] [stdout] 19 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Trait and implementations for fetching configuration from external sources.`
[INFO] [stdout]    = help: ends near ` Trait for configuration providers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/cluster/provider.rs:22:1
[INFO] [stdout]    |
[INFO] [stdout] 22 | / pub struct HttpConfigProvider {
[INFO] [stdout] 23 | |     config: HttpProviderConfig,
[INFO] [stdout] 24 | |     client: reqwest::Client,
[INFO] [stdout] 25 | |     last_etag: RwLock<Option<String>>,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Trait and implementations for fetching configuration from external sources.`
[INFO] [stdout]    = help: ends near `HTTP configuration provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/cluster/provider.rs:22:1
[INFO] [stdout]    |
[INFO] [stdout] 22 | / pub struct HttpConfigProvider {
[INFO] [stdout] 23 | |     config: HttpProviderConfig,
[INFO] [stdout] 24 | |     client: reqwest::Client,
[INFO] [stdout] 25 | |     last_etag: RwLock<Option<String>>,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP configuration provider`
[INFO] [stdout]    = help: ends near `HTTP configuration provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/checker.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct HealthChecker {
[INFO] [stdout] 16 | |     config: HealthCheck,
[INFO] [stdout] 17 | |     server_url: String,
[INFO] [stdout] 18 | |     status: Arc<HealthStatus>,
[INFO] [stdout] ...  |
[INFO] [stdout] 23 | |     check_method: Method,
[INFO] [stdout] 24 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Active HTTP health checker that polls backends on a schedule.`
[INFO] [stdout]    = help: ends near `Active HTTP health checker that periodically polls a backend server.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/checker.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct HealthChecker {
[INFO] [stdout] 16 | |     config: HealthCheck,
[INFO] [stdout] 17 | |     server_url: String,
[INFO] [stdout] 18 | |     status: Arc<HealthStatus>,
[INFO] [stdout] ...  |
[INFO] [stdout] 23 | |     check_method: Method,
[INFO] [stdout] 24 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Active HTTP health checker that periodically polls a backend server.`
[INFO] [stdout]    = help: ends near `Active HTTP health checker that periodically polls a backend server.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/circuit_breaker.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | / pub struct CircuitBreaker {
[INFO] [stdout] 17 | |     failure_threshold: u32,
[INFO] [stdout] 18 | |     recovery_timeout_ms: u64,
[INFO] [stdout] ...  |
[INFO] [stdout] 25 | |     epoch: Instant,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Circuit breaker with closed/open/half-open state transitions.`
[INFO] [stdout]    = help: ends near `High-performance circuit breaker using atomics`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/circuit_breaker.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | / pub struct CircuitBreaker {
[INFO] [stdout] 17 | |     failure_threshold: u32,
[INFO] [stdout] 18 | |     recovery_timeout_ms: u64,
[INFO] [stdout] ...  |
[INFO] [stdout] 25 | |     epoch: Instant,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `High-performance circuit breaker using atomics`
[INFO] [stdout]    = help: ends near `High-performance circuit breaker using atomics`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/circuit_breaker.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub enum CircuitState {
[INFO] [stdout]  7 | |     /// Normal operation, requests flow through.
[INFO] [stdout]  8 | |     Closed,
[INFO] [stdout]  9 | |     /// Failing, all requests are rejected.
[INFO] [stdout] ...  |
[INFO] [stdout] 12 | |     HalfOpen,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Circuit breaker with closed/open/half-open state transitions.`
[INFO] [stdout]    = help: ends near `Circuit breaker states`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/circuit_breaker.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub enum CircuitState {
[INFO] [stdout]  7 | |     /// Normal operation, requests flow through.
[INFO] [stdout]  8 | |     Closed,
[INFO] [stdout]  9 | |     /// Failing, all requests are rejected.
[INFO] [stdout] ...  |
[INFO] [stdout] 12 | |     HalfOpen,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Circuit breaker states`
[INFO] [stdout]    = help: ends near `Circuit breaker states`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/distributed.rs:21:1
[INFO] [stdout]    |
[INFO] [stdout] 21 | / pub struct DistributedHealthChecker {
[INFO] [stdout] 22 | |     service_name: String,
[INFO] [stdout] 23 | |     server_url: String,
[INFO] [stdout] 24 | |     config: HealthCheck,
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     client: Client<HttpConnector, http_body_util::Empty<Bytes>>,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Cluster-aware health checker coordinated via distributed store.`
[INFO] [stdout]    = help: ends near `Distributed health checker that coordinates health checks across the cluster`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/distributed.rs:21:1
[INFO] [stdout]    |
[INFO] [stdout] 21 | / pub struct DistributedHealthChecker {
[INFO] [stdout] 22 | |     service_name: String,
[INFO] [stdout] 23 | |     server_url: String,
[INFO] [stdout] 24 | |     config: HealthCheck,
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     client: Client<HttpConnector, http_body_util::Empty<Bytes>>,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Distributed health checker that coordinates health checks across the cluster`
[INFO] [stdout]    = help: ends near `Distributed health checker that coordinates health checks across the cluster`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/distributed.rs:203:1
[INFO] [stdout]     |
[INFO] [stdout] 203 | / pub struct DistributedHealthManager {
[INFO] [stdout] 204 | |     store: Arc<dyn Store>,
[INFO] [stdout] 205 | |     is_leader: Arc<AtomicBool>,
[INFO] [stdout] 206 | |     node_id: String,
[INFO] [stdout] 207 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Cluster-aware health checker coordinated via distributed store.`
[INFO] [stdout]     = help: ends near `Manager for distributed health checks across multiple servers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/distributed.rs:203:1
[INFO] [stdout]     |
[INFO] [stdout] 203 | / pub struct DistributedHealthManager {
[INFO] [stdout] 204 | |     store: Arc<dyn Store>,
[INFO] [stdout] 205 | |     is_leader: Arc<AtomicBool>,
[INFO] [stdout] 206 | |     node_id: String,
[INFO] [stdout] 207 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Manager for distributed health checks across multiple servers`
[INFO] [stdout]     = help: ends near `Manager for distributed health checks across multiple servers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:300:1
[INFO] [stdout]     |
[INFO] [stdout] 300 | / pub struct BackendStats {
[INFO] [stdout] 301 | |     /// Whether the backend is currently healthy.
[INFO] [stdout] 302 | |     pub healthy: bool,
[INFO] [stdout] 303 | |     /// Total number of requests recorded.
[INFO] [stdout] ...   |
[INFO] [stdout] 314 | |     pub recent_failure_count: usize,
[INFO] [stdout] 315 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Passive health monitoring based on response codes and latencies.`
[INFO] [stdout]     = help: ends near `Statistics for a backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:300:1
[INFO] [stdout]     |
[INFO] [stdout] 300 | / pub struct BackendStats {
[INFO] [stdout] 301 | |     /// Whether the backend is currently healthy.
[INFO] [stdout] 302 | |     pub healthy: bool,
[INFO] [stdout] 303 | |     /// Total number of requests recorded.
[INFO] [stdout] ...   |
[INFO] [stdout] 314 | |     pub recent_failure_count: usize,
[INFO] [stdout] 315 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Statistics for a backend`
[INFO] [stdout]     = help: ends near `Statistics for a backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:289:1
[INFO] [stdout]     |
[INFO] [stdout] 289 | / pub enum HealthChange {
[INFO] [stdout] 290 | |     /// Health status did not change.
[INFO] [stdout] 291 | |     NoChange,
[INFO] [stdout] 292 | |     /// Backend transitioned from unhealthy to healthy.
[INFO] [stdout] ...   |
[INFO] [stdout] 295 | |     BecameUnhealthy,
[INFO] [stdout] 296 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Passive health monitoring based on response codes and latencies.`
[INFO] [stdout]     = help: ends near `Result of recording a response`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:289:1
[INFO] [stdout]     |
[INFO] [stdout] 289 | / pub enum HealthChange {
[INFO] [stdout] 290 | |     /// Health status did not change.
[INFO] [stdout] 291 | |     NoChange,
[INFO] [stdout] 292 | |     /// Backend transitioned from unhealthy to healthy.
[INFO] [stdout] ...   |
[INFO] [stdout] 295 | |     BecameUnhealthy,
[INFO] [stdout] 296 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Result of recording a response`
[INFO] [stdout]     = help: ends near `Result of recording a response`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/passive.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct PassiveHealthChecker {
[INFO] [stdout]  9 | |     /// Configuration
[INFO] [stdout] 10 | |     config: PassiveHealthConfig,
[INFO] [stdout] 11 | |     /// State per backend
[INFO] [stdout] 12 | |     backends: RwLock<std::collections::HashMap<String, BackendState>>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Passive health monitoring based on response codes and latencies.`
[INFO] [stdout]    = help: ends near `to detect unhealthy backends without active probing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/passive.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct PassiveHealthChecker {
[INFO] [stdout]  9 | |     /// Configuration
[INFO] [stdout] 10 | |     config: PassiveHealthConfig,
[INFO] [stdout] 11 | |     /// State per backend
[INFO] [stdout] 12 | |     backends: RwLock<std::collections::HashMap<String, BackendState>>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Passive health checker that monitors response codes and latencies`
[INFO] [stdout]    = help: ends near `Passive health checker that monitors response codes and latencies`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/passive.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct PassiveHealthConfig {
[INFO] [stdout] 18 | |     /// Number of consecutive failures before marking unhealthy
[INFO] [stdout] 19 | |     pub failure_threshold: u32,
[INFO] [stdout] 20 | |     /// Number of consecutive successes before marking healthy again
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     pub recovery_interval: Duration,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Passive health monitoring based on response codes and latencies.`
[INFO] [stdout]    = help: ends near `Configuration for passive health checks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/health/passive.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct PassiveHealthConfig {
[INFO] [stdout] 18 | |     /// Number of consecutive failures before marking unhealthy
[INFO] [stdout] 19 | |     pub failure_threshold: u32,
[INFO] [stdout] 20 | |     /// Number of consecutive successes before marking healthy again
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     pub recovery_interval: Duration,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Configuration for passive health checks`
[INFO] [stdout]    = help: ends near `Configuration for passive health checks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:318:1
[INFO] [stdout]     |
[INFO] [stdout] 318 | / pub struct PassiveHealthConfigBuilder {
[INFO] [stdout] 319 | |     config: PassiveHealthConfig,
[INFO] [stdout] 320 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Passive health monitoring based on response codes and latencies.`
[INFO] [stdout]     = help: ends near `Builder for PassiveHealthConfig`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/health/passive.rs:318:1
[INFO] [stdout]     |
[INFO] [stdout] 318 | / pub struct PassiveHealthConfigBuilder {
[INFO] [stdout] 319 | |     config: PassiveHealthConfig,
[INFO] [stdout] 320 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Builder for PassiveHealthConfig`
[INFO] [stdout]     = help: ends near `Builder for PassiveHealthConfig`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/access_log.rs:86:1
[INFO] [stdout]    |
[INFO] [stdout] 86 | / pub struct AccessLogBuilder {
[INFO] [stdout] 87 | |     start: Instant,
[INFO] [stdout] 88 | |     remote_addr: SocketAddr,
[INFO] [stdout] 89 | |     method: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     is_tls: bool,
[INFO] [stdout] 99 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Structured access log entry builder, output, and file writer.`
[INFO] [stdout]    = help: ends near `Builder for creating access log entries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/access_log.rs:86:1
[INFO] [stdout]    |
[INFO] [stdout] 86 | / pub struct AccessLogBuilder {
[INFO] [stdout] 87 | |     start: Instant,
[INFO] [stdout] 88 | |     remote_addr: SocketAddr,
[INFO] [stdout] 89 | |     method: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     is_tls: bool,
[INFO] [stdout] 99 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Builder for creating access log entries`
[INFO] [stdout]    = help: ends near `Builder for creating access log entries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/access_log.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | / pub struct AccessLogEntry {
[INFO] [stdout] 12 | |     /// Timestamp (RFC3339)
[INFO] [stdout] 13 | |     pub timestamp: String,
[INFO] [stdout] 14 | |     /// Remote client address
[INFO] [stdout] ...  |
[INFO] [stdout] 58 | |     pub protocol: String,
[INFO] [stdout] 59 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Structured access log entry builder, output, and file writer.`
[INFO] [stdout]    = help: ends near `Structured access log entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/access_log.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | / pub struct AccessLogEntry {
[INFO] [stdout] 12 | |     /// Timestamp (RFC3339)
[INFO] [stdout] 13 | |     pub timestamp: String,
[INFO] [stdout] 14 | |     /// Remote client address
[INFO] [stdout] ...  |
[INFO] [stdout] 58 | |     pub protocol: String,
[INFO] [stdout] 59 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Structured access log entry`
[INFO] [stdout]    = help: ends near `Structured access log entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/access_log.rs:206:1
[INFO] [stdout]     |
[INFO] [stdout] 206 | / pub struct AccessLogWriter {
[INFO] [stdout] 207 | |     writer: Option<Arc<Mutex<BufWriter<std::fs::File>>>>,
[INFO] [stdout] 208 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Structured access log entry builder, output, and file writer.`
[INFO] [stdout]     = help: ends near `File-backed access log writer that writes JSON lines to a configured file path.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/access_log.rs:206:1
[INFO] [stdout]     |
[INFO] [stdout] 206 | / pub struct AccessLogWriter {
[INFO] [stdout] 207 | |     writer: Option<Arc<Mutex<BufWriter<std::fs::File>>>>,
[INFO] [stdout] 208 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `File-backed access log writer that writes JSON lines to a configured file path.`
[INFO] [stdout]     = help: ends near `File-backed access log writer that writes JSON lines to a configured file path.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/basic_auth.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct BasicAuthMiddleware {
[INFO] [stdout]  9 | |     /// Map of username -> password (plaintext or hash)
[INFO] [stdout] 10 | |     users: HashMap<String, String>,
[INFO] [stdout] 11 | |     realm: String,
[INFO] [stdout] 12 | |     www_authenticate: HeaderValue,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP Basic authentication middleware.`
[INFO] [stdout]    = help: ends near `Supports htpasswd-style password format: user:password (plaintext) or user:$apr1$... (hashed)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/basic_auth.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct BasicAuthMiddleware {
[INFO] [stdout]  9 | |     /// Map of username -> password (plaintext or hash)
[INFO] [stdout] 10 | |     users: HashMap<String, String>,
[INFO] [stdout] 11 | |     realm: String,
[INFO] [stdout] 12 | |     www_authenticate: HeaderValue,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Basic authentication middleware`
[INFO] [stdout]    = help: ends near `Basic authentication middleware`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/buffering.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct BufferingMiddleware {
[INFO] [stdout]  6 | |     /// Maximum size of request body to buffer (0 = no limit)
[INFO] [stdout]  7 | |     pub max_request_body_bytes: i64,
[INFO] [stdout]  8 | |     /// Size of memory buffer for request body before spooling to disk
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     pub retry_expression: Option<String>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Request/response body buffering for retry support.`
[INFO] [stdout]    = help: ends near `This allows retrying requests by buffering the body in memory`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/buffering.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct BufferingMiddleware {
[INFO] [stdout]  6 | |     /// Maximum size of request body to buffer (0 = no limit)
[INFO] [stdout]  7 | |     pub max_request_body_bytes: i64,
[INFO] [stdout]  8 | |     /// Size of memory buffer for request body before spooling to disk
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     pub retry_expression: Option<String>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Buffering middleware configuration for request/response body buffering`
[INFO] [stdout]    = help: ends near `Buffering middleware configuration for request/response body buffering`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/errors.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct ErrorsMiddleware {
[INFO] [stdout]  6 | |     /// Parsed status code ranges to intercept
[INFO] [stdout]  7 | |     status_ranges: Vec<StatusRange>,
[INFO] [stdout]  8 | |     /// Service name to handle errors
[INFO] [stdout] ...  |
[INFO] [stdout] 11 | |     query: String,
[INFO] [stdout] 12 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Custom error page middleware.`
[INFO] [stdout]    = help: ends near `Errors middleware - intercepts error responses and serves custom error pages`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/errors.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct ErrorsMiddleware {
[INFO] [stdout]  6 | |     /// Parsed status code ranges to intercept
[INFO] [stdout]  7 | |     status_ranges: Vec<StatusRange>,
[INFO] [stdout]  8 | |     /// Service name to handle errors
[INFO] [stdout] ...  |
[INFO] [stdout] 11 | |     query: String,
[INFO] [stdout] 12 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Errors middleware - intercepts error responses and serves custom error pages`
[INFO] [stdout]    = help: ends near `Errors middleware - intercepts error responses and serves custom error pages`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/digest_auth.rs:185:1
[INFO] [stdout]     |
[INFO] [stdout] 185 | / pub enum AuthResult {
[INFO] [stdout] 186 | |     /// Successfully authenticated, contains username
[INFO] [stdout] 187 | |     Authenticated(String),
[INFO] [stdout] 188 | |     /// No Authorization header present
[INFO] [stdout] ...   |
[INFO] [stdout] 191 | |     Invalid,
[INFO] [stdout] 192 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `HTTP Digest authentication (RFC 7616).`
[INFO] [stdout]     = help: ends near `Result of digest authentication attempt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/digest_auth.rs:185:1
[INFO] [stdout]     |
[INFO] [stdout] 185 | / pub enum AuthResult {
[INFO] [stdout] 186 | |     /// Successfully authenticated, contains username
[INFO] [stdout] 187 | |     Authenticated(String),
[INFO] [stdout] 188 | |     /// No Authorization header present
[INFO] [stdout] ...   |
[INFO] [stdout] 191 | |     Invalid,
[INFO] [stdout] 192 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Result of digest authentication attempt`
[INFO] [stdout]     = help: ends near `Result of digest authentication attempt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/digest_auth.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | / pub struct DigestAuthMiddleware {
[INFO] [stdout] 11 | |     /// Map of username -> HA1 (precomputed MD5(username:realm:password))
[INFO] [stdout] 12 | |     users: HashMap<String, String>,
[INFO] [stdout] 13 | |     realm: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     opaque: String,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP Digest authentication (RFC 7616).`
[INFO] [stdout]    = help: ends near `Uses MD5 algorithm for compatibility with most clients`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/digest_auth.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | / pub struct DigestAuthMiddleware {
[INFO] [stdout] 11 | |     /// Map of username -> HA1 (precomputed MD5(username:realm:password))
[INFO] [stdout] 12 | |     users: HashMap<String, String>,
[INFO] [stdout] 13 | |     realm: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     opaque: String,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP Digest authentication middleware (RFC 7616)`
[INFO] [stdout]    = help: ends near `HTTP Digest authentication middleware (RFC 7616)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/builtin/chain.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | / pub struct ChainMiddleware {
[INFO] [stdout] 7 | |     /// List of middleware names to chain together (in order)
[INFO] [stdout] 8 | |     pub middlewares: Vec<String>,
[INFO] [stdout] 9 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `Compose multiple named middleware into a single reference.`
[INFO] [stdout]   = help: ends near `happens in the middleware pipeline, but this struct holds the config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/builtin/chain.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | / pub struct ChainMiddleware {
[INFO] [stdout] 7 | |     /// List of middleware names to chain together (in order)
[INFO] [stdout] 8 | |     pub middlewares: Vec<String>,
[INFO] [stdout] 9 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `Chain middleware composes multiple middlewares together`
[INFO] [stdout]   = help: ends near `Chain middleware composes multiple middlewares together`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/compress.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct CompressMiddleware {
[INFO] [stdout] 10 | |     min_size: u64,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Response body compression (gzip/brotli).`
[INFO] [stdout]    = help: ends near `Compression middleware for response body compression`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/compress.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct CompressMiddleware {
[INFO] [stdout] 10 | |     min_size: u64,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Compression middleware for response body compression`
[INFO] [stdout]    = help: ends near `Compression middleware for response body compression`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/compress.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub enum CompressionAlgorithm {
[INFO] [stdout] 16 | |     /// Gzip compression (RFC 1952).
[INFO] [stdout] 17 | |     Gzip,
[INFO] [stdout] 18 | |     /// Brotli compression (RFC 7932).
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     None,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Response body compression (gzip/brotli).`
[INFO] [stdout]    = help: ends near `Supported response compression algorithms.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/compress.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub enum CompressionAlgorithm {
[INFO] [stdout] 16 | |     /// Gzip compression (RFC 1952).
[INFO] [stdout] 17 | |     Gzip,
[INFO] [stdout] 18 | |     /// Brotli compression (RFC 7932).
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     None,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Supported response compression algorithms.`
[INFO] [stdout]    = help: ends near `Supported response compression algorithms.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/cors.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct CorsMiddleware {
[INFO] [stdout] 13 | |     allowed_origins: Vec<String>,
[INFO] [stdout] 14 | |     allow_all_origins: bool,
[INFO] [stdout] 15 | |     allowed_methods: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     add_vary_header: bool,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Cross-Origin Resource Sharing (CORS) middleware.`
[INFO] [stdout]    = help: ends near `In Traefik, CORS is handled through the headers middleware`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/cors.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct CorsMiddleware {
[INFO] [stdout] 13 | |     allowed_origins: Vec<String>,
[INFO] [stdout] 14 | |     allow_all_origins: bool,
[INFO] [stdout] 15 | |     allowed_methods: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     add_vary_header: bool,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `CORS middleware for handling Cross-Origin Resource Sharing`
[INFO] [stdout]    = help: ends near `CORS middleware for handling Cross-Origin Resource Sharing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/forward_auth.rs:167:1
[INFO] [stdout]     |
[INFO] [stdout] 167 | / pub struct AuthResult {
[INFO] [stdout] 168 | |     /// Headers to add to the request before forwarding to backend
[INFO] [stdout] 169 | |     pub headers_to_request: HeaderMap,
[INFO] [stdout] 170 | |     /// Cookies to add to the response
[INFO] [stdout] 171 | |     pub cookies_to_response: Vec<String>,
[INFO] [stdout] 172 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Delegate authentication to an external HTTP service.`
[INFO] [stdout]     = help: ends near `Result of successful authentication`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/forward_auth.rs:167:1
[INFO] [stdout]     |
[INFO] [stdout] 167 | / pub struct AuthResult {
[INFO] [stdout] 168 | |     /// Headers to add to the request before forwarding to backend
[INFO] [stdout] 169 | |     pub headers_to_request: HeaderMap,
[INFO] [stdout] 170 | |     /// Cookies to add to the response
[INFO] [stdout] 171 | |     pub cookies_to_response: Vec<String>,
[INFO] [stdout] 172 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Result of successful authentication`
[INFO] [stdout]     = help: ends near `Result of successful authentication`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/forward_auth.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | / pub struct ForwardAuthMiddleware {
[INFO] [stdout] 11 | |     client: Client,
[INFO] [stdout] 12 | |     address: String,
[INFO] [stdout] 13 | |     trust_forward_header: bool,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     add_auth_cookies_to_response: Vec<String>,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Delegate authentication to an external HTTP service.`
[INFO] [stdout]    = help: ends near `ForwardAuth middleware delegates authentication to an external service`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/forward_auth.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | / pub struct ForwardAuthMiddleware {
[INFO] [stdout] 11 | |     client: Client,
[INFO] [stdout] 12 | |     address: String,
[INFO] [stdout] 13 | |     trust_forward_header: bool,
[INFO] [stdout] ...  |
[INFO] [stdout] 17 | |     add_auth_cookies_to_response: Vec<String>,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `ForwardAuth middleware delegates authentication to an external service`
[INFO] [stdout]    = help: ends near `ForwardAuth middleware delegates authentication to an external service`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/grpc_web.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct GrpcWebMiddleware {
[INFO] [stdout] 24 | |     allow_origins: Vec<Regex>,
[INFO] [stdout] 25 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `gRPC-Web to native gRPC protocol translation.`
[INFO] [stdout]    = help: ends near `gRPC-Web middleware that translates between gRPC-Web and gRPC protocols`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/grpc_web.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct GrpcWebMiddleware {
[INFO] [stdout] 24 | |     allow_origins: Vec<Regex>,
[INFO] [stdout] 25 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `gRPC-Web middleware that translates between gRPC-Web and gRPC protocols`
[INFO] [stdout]    = help: ends near `gRPC-Web middleware that translates between gRPC-Web and gRPC protocols`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/headers.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct HeadersMiddleware {
[INFO] [stdout]  8 | |     #[allow(dead_code)]
[INFO] [stdout]  9 | |     config: HeadersConfig,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     remove_response: Vec<HeaderName>,
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Add, remove, or override request/response headers.`
[INFO] [stdout]    = help: ends near `In Traefik, empty header values mean "remove this header"`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/headers.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct HeadersMiddleware {
[INFO] [stdout]  8 | |     #[allow(dead_code)]
[INFO] [stdout]  9 | |     config: HeadersConfig,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     remove_response: Vec<HeaderName>,
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Headers middleware for adding/removing request and response headers`
[INFO] [stdout]    = help: ends near `Headers middleware for adding/removing request and response headers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/jwt.rs:262:1
[INFO] [stdout]     |
[INFO] [stdout] 262 | / pub enum ClaimValue {
[INFO] [stdout] 263 | |     /// A string claim value.
[INFO] [stdout] 264 | |     String(String),
[INFO] [stdout] 265 | |     /// A numeric claim value.
[INFO] [stdout] ...   |
[INFO] [stdout] 272 | |     Null,
[INFO] [stdout] 273 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `JWT token validation and claim forwarding.`
[INFO] [stdout]     = help: ends near `JWT claim value types`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/jwt.rs:262:1
[INFO] [stdout]     |
[INFO] [stdout] 262 | / pub enum ClaimValue {
[INFO] [stdout] 263 | |     /// A string claim value.
[INFO] [stdout] 264 | |     String(String),
[INFO] [stdout] 265 | |     /// A numeric claim value.
[INFO] [stdout] ...   |
[INFO] [stdout] 272 | |     Null,
[INFO] [stdout] 273 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `JWT claim value types`
[INFO] [stdout]     = help: ends near `JWT claim value types`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/jwt.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | / pub enum JwtAlgorithm {
[INFO] [stdout] 25 | |     /// HMAC using SHA-256.
[INFO] [stdout] 26 | |     HS256,
[INFO] [stdout] 27 | |     /// HMAC using SHA-384.
[INFO] [stdout] ...  |
[INFO] [stdout] 33 | |     None,
[INFO] [stdout] 34 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `JWT token validation and claim forwarding.`
[INFO] [stdout]    = help: ends near `Supported JWT signing algorithms.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/jwt.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | / pub enum JwtAlgorithm {
[INFO] [stdout] 25 | |     /// HMAC using SHA-256.
[INFO] [stdout] 26 | |     HS256,
[INFO] [stdout] 27 | |     /// HMAC using SHA-384.
[INFO] [stdout] ...  |
[INFO] [stdout] 33 | |     None,
[INFO] [stdout] 34 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Supported JWT signing algorithms.`
[INFO] [stdout]    = help: ends near `Supported JWT signing algorithms.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/jwt.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct JwtMiddleware {
[INFO] [stdout] 10 | |     secret: Option<Vec<u8>>,
[INFO] [stdout] 11 | |     algorithm: JwtAlgorithm,
[INFO] [stdout] 12 | |     issuer: Option<String>,
[INFO] [stdout] ...  |
[INFO] [stdout] 19 | |     strip_authorization_header: bool,
[INFO] [stdout] 20 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `JWT token validation and claim forwarding.`
[INFO] [stdout]    = help: ends near `Can extract JWT from header, query param, or cookie`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/jwt.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct JwtMiddleware {
[INFO] [stdout] 10 | |     secret: Option<Vec<u8>>,
[INFO] [stdout] 11 | |     algorithm: JwtAlgorithm,
[INFO] [stdout] 12 | |     issuer: Option<String>,
[INFO] [stdout] ...  |
[INFO] [stdout] 19 | |     strip_authorization_header: bool,
[INFO] [stdout] 20 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `JWT validation middleware`
[INFO] [stdout]    = help: ends near `JWT validation middleware`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/jwt.rs:251:1
[INFO] [stdout]     |
[INFO] [stdout] 251 | / pub struct JwtValidationResult {
[INFO] [stdout] 252 | |     /// Parsed claims from the token
[INFO] [stdout] 253 | |     pub claims: HashMap<String, ClaimValue>,
[INFO] [stdout] 254 | |     /// Headers to add to the request based on forward_claims config
[INFO] [stdout] ...   |
[INFO] [stdout] 257 | |     pub strip_auth_header: bool,
[INFO] [stdout] 258 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `JWT token validation and claim forwarding.`
[INFO] [stdout]     = help: ends near `Result of successful JWT validation`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/jwt.rs:251:1
[INFO] [stdout]     |
[INFO] [stdout] 251 | / pub struct JwtValidationResult {
[INFO] [stdout] 252 | |     /// Parsed claims from the token
[INFO] [stdout] 253 | |     pub claims: HashMap<String, ClaimValue>,
[INFO] [stdout] 254 | |     /// Headers to add to the request based on forward_claims config
[INFO] [stdout] ...   |
[INFO] [stdout] 257 | |     pub strip_auth_header: bool,
[INFO] [stdout] 258 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Result of successful JWT validation`
[INFO] [stdout]     = help: ends near `Result of successful JWT validation`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/ip_filter.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct IpAllowListMiddleware {
[INFO] [stdout]  7 | |     source_range: Vec<IpNetwork>,
[INFO] [stdout]  8 | |     ip_strategy: Option<IpStrategy>,
[INFO] [stdout]  9 | |     /// Pre-parsed excluded IP networks (avoids parse_network() per request)
[INFO] [stdout] 10 | |     excluded_networks: Vec<IpNetwork>,
[INFO] [stdout] 11 | |     reject_status_code: u16,
[INFO] [stdout] 12 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `IP-based allow/deny list filtering.`
[INFO] [stdout]    = help: ends near `IP allowlist middleware (Traefik ipAllowList)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/ip_filter.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct IpAllowListMiddleware {
[INFO] [stdout]  7 | |     source_range: Vec<IpNetwork>,
[INFO] [stdout]  8 | |     ip_strategy: Option<IpStrategy>,
[INFO] [stdout]  9 | |     /// Pre-parsed excluded IP networks (avoids parse_network() per request)
[INFO] [stdout] 10 | |     excluded_networks: Vec<IpNetwork>,
[INFO] [stdout] 11 | |     reject_status_code: u16,
[INFO] [stdout] 12 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `IP allowlist middleware (Traefik ipAllowList)`
[INFO] [stdout]    = help: ends near `IP allowlist middleware (Traefik ipAllowList)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/ip_filter.rs:86:1
[INFO] [stdout]    |
[INFO] [stdout] 86 | / pub struct IpDenyListMiddleware {
[INFO] [stdout] 87 | |     source_range: Vec<IpNetwork>,
[INFO] [stdout] 88 | |     ip_strategy: Option<IpStrategy>,
[INFO] [stdout] 89 | |     /// Pre-parsed excluded IP networks (avoids parse_network() per request)
[INFO] [stdout] 90 | |     excluded_networks: Vec<IpNetwork>,
[INFO] [stdout] 91 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `IP-based allow/deny list filtering.`
[INFO] [stdout]    = help: ends near `IP denylist middleware (Traefik ipDenyList)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/ip_filter.rs:86:1
[INFO] [stdout]    |
[INFO] [stdout] 86 | / pub struct IpDenyListMiddleware {
[INFO] [stdout] 87 | |     source_range: Vec<IpNetwork>,
[INFO] [stdout] 88 | |     ip_strategy: Option<IpStrategy>,
[INFO] [stdout] 89 | |     /// Pre-parsed excluded IP networks (avoids parse_network() per request)
[INFO] [stdout] 90 | |     excluded_networks: Vec<IpNetwork>,
[INFO] [stdout] 91 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `IP denylist middleware (Traefik ipDenyList)`
[INFO] [stdout]    = help: ends near `IP denylist middleware (Traefik ipDenyList)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/path.rs:94:1
[INFO] [stdout]    |
[INFO] [stdout] 94 | / pub struct AddPrefixMiddleware {
[INFO] [stdout] 95 | |     prefix: String,
[INFO] [stdout] 96 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `URL path manipulation (strip, add, replace with literal or regex).`
[INFO] [stdout]    = help: ends near `AddPrefix middleware adds a prefix to the request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/path.rs:94:1
[INFO] [stdout]    |
[INFO] [stdout] 94 | / pub struct AddPrefixMiddleware {
[INFO] [stdout] 95 | |     prefix: String,
[INFO] [stdout] 96 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `AddPrefix middleware adds a prefix to the request URL path`
[INFO] [stdout]    = help: ends near `AddPrefix middleware adds a prefix to the request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/path.rs:115:1
[INFO] [stdout]     |
[INFO] [stdout] 115 | / pub struct ReplacePathMiddleware {
[INFO] [stdout] 116 | |     path: String,
[INFO] [stdout] 117 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `URL path manipulation (strip, add, replace with literal or regex).`
[INFO] [stdout]     = help: ends near `ReplacePath middleware replaces the entire request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/path.rs:115:1
[INFO] [stdout]     |
[INFO] [stdout] 115 | / pub struct ReplacePathMiddleware {
[INFO] [stdout] 116 | |     path: String,
[INFO] [stdout] 117 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `ReplacePath middleware replaces the entire request URL path`
[INFO] [stdout]     = help: ends near `ReplacePath middleware replaces the entire request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/path.rs:136:1
[INFO] [stdout]     |
[INFO] [stdout] 136 | / pub struct ReplacePathRegexMiddleware {
[INFO] [stdout] 137 | |     pattern: Regex,
[INFO] [stdout] 138 | |     replacement: String,
[INFO] [stdout] 139 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `URL path manipulation (strip, add, replace with literal or regex).`
[INFO] [stdout]     = help: ends near `ReplacePathRegex middleware replaces the path using regex substitution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/middleware/builtin/path.rs:136:1
[INFO] [stdout]     |
[INFO] [stdout] 136 | / pub struct ReplacePathRegexMiddleware {
[INFO] [stdout] 137 | |     pattern: Regex,
[INFO] [stdout] 138 | |     replacement: String,
[INFO] [stdout] 139 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `ReplacePathRegex middleware replaces the path using regex substitution`
[INFO] [stdout]     = help: ends near `ReplacePathRegex middleware replaces the path using regex substitution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/builtin/path.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | / pub struct StripPrefixMiddleware {
[INFO] [stdout] 7 | |     prefixes: Vec<String>,
[INFO] [stdout] 8 | |     force_slash: bool,
[INFO] [stdout] 9 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `URL path manipulation (strip, add, replace with literal or regex).`
[INFO] [stdout]   = help: ends near `StripPrefix middleware removes the specified prefixes from the request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/builtin/path.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | / pub struct StripPrefixMiddleware {
[INFO] [stdout] 7 | |     prefixes: Vec<String>,
[INFO] [stdout] 8 | |     force_slash: bool,
[INFO] [stdout] 9 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `StripPrefix middleware removes the specified prefixes from the request URL path`
[INFO] [stdout]   = help: ends near `StripPrefix middleware removes the specified prefixes from the request URL path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/path.rs:50:1
[INFO] [stdout]    |
[INFO] [stdout] 50 | / pub struct StripPrefixRegexMiddleware {
[INFO] [stdout] 51 | |     patterns: Vec<Regex>,
[INFO] [stdout] 52 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `URL path manipulation (strip, add, replace with literal or regex).`
[INFO] [stdout]    = help: ends near `StripPrefixRegex middleware removes prefixes matching regex patterns`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/path.rs:50:1
[INFO] [stdout]    |
[INFO] [stdout] 50 | / pub struct StripPrefixRegexMiddleware {
[INFO] [stdout] 51 | |     patterns: Vec<Regex>,
[INFO] [stdout] 52 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `StripPrefixRegex middleware removes prefixes matching regex patterns`
[INFO] [stdout]    = help: ends near `StripPrefixRegex middleware removes prefixes matching regex patterns`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/rate_limit.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | / pub struct RateLimitMiddleware {
[INFO] [stdout] 20 | |     config: RateLimitConfig,
[INFO] [stdout] 21 | |     /// Local token buckets for fast path
[INFO] [stdout] 22 | |     buckets: DashMap<String, TokenBucket>,
[INFO] [stdout] ...  |
[INFO] [stdout] 30 | |     cleanup_interval: Duration,
[INFO] [stdout] 31 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Token-bucket rate limiting with optional distributed backing store.`
[INFO] [stdout]    = help: ends near `High-performance token bucket rate limiter with optional distributed backing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/rate_limit.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | / pub struct RateLimitMiddleware {
[INFO] [stdout] 20 | |     config: RateLimitConfig,
[INFO] [stdout] 21 | |     /// Local token buckets for fast path
[INFO] [stdout] 22 | |     buckets: DashMap<String, TokenBucket>,
[INFO] [stdout] ...  |
[INFO] [stdout] 30 | |     cleanup_interval: Duration,
[INFO] [stdout] 31 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `High-performance token bucket rate limiter with optional distributed backing`
[INFO] [stdout]    = help: ends near `High-performance token bucket rate limiter with optional distributed backing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/redirect_scheme.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct RedirectSchemeMiddleware {
[INFO] [stdout]  7 | |     scheme: String,
[INFO] [stdout]  8 | |     permanent: bool,
[INFO] [stdout]  9 | |     port: Option<u16>,
[INFO] [stdout] 10 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP-to-HTTPS (or reverse) scheme redirect.`
[INFO] [stdout]    = help: ends near `Middleware for redirecting between HTTP and HTTPS schemes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/redirect_scheme.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct RedirectSchemeMiddleware {
[INFO] [stdout]  7 | |     scheme: String,
[INFO] [stdout]  8 | |     permanent: bool,
[INFO] [stdout]  9 | |     port: Option<u16>,
[INFO] [stdout] 10 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Middleware for redirecting between HTTP and HTTPS schemes`
[INFO] [stdout]    = help: ends near `Middleware for redirecting between HTTP and HTTPS schemes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/retry.rs:87:1
[INFO] [stdout]    |
[INFO] [stdout] 87 | / pub struct RetryIterator {
[INFO] [stdout] 88 | |     middleware: RetryMiddleware,
[INFO] [stdout] 89 | |     current_attempt: u32,
[INFO] [stdout] 90 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Retry failed requests with exponential backoff.`
[INFO] [stdout]    = help: ends near `Iterator that yields exponential backoff delays for each retry attempt.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/retry.rs:87:1
[INFO] [stdout]    |
[INFO] [stdout] 87 | / pub struct RetryIterator {
[INFO] [stdout] 88 | |     middleware: RetryMiddleware,
[INFO] [stdout] 89 | |     current_attempt: u32,
[INFO] [stdout] 90 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Iterator that yields exponential backoff delays for each retry attempt.`
[INFO] [stdout]    = help: ends near `Iterator that yields exponential backoff delays for each retry attempt.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/retry.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct RetryMiddleware {
[INFO] [stdout]  6 | |     max_attempts: u32,
[INFO] [stdout]  7 | |     initial_interval: Duration,
[INFO] [stdout]  8 | |     max_interval: Duration,
[INFO] [stdout]  9 | |     multiplier: f64,
[INFO] [stdout] 10 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Retry failed requests with exponential backoff.`
[INFO] [stdout]    = help: ends near `Retry middleware with exponential backoff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/middleware/builtin/retry.rs:5:1
[INFO] [stdout]    |
[INFO] [stdout]  5 | / pub struct RetryMiddleware {
[INFO] [stdout]  6 | |     max_attempts: u32,
[INFO] [stdout]  7 | |     initial_interval: Duration,
[INFO] [stdout]  8 | |     max_interval: Duration,
[INFO] [stdout]  9 | |     multiplier: f64,
[INFO] [stdout] 10 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Retry middleware with exponential backoff`
[INFO] [stdout]    = help: ends near `Retry middleware with exponential backoff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/chain.rs:4:1
[INFO] [stdout]   |
[INFO] [stdout] 4 | / pub struct MiddlewareChain {
[INFO] [stdout] 5 | |     middlewares: Vec<Box<dyn Middleware>>,
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `Ordered chain of middleware to execute per request.`
[INFO] [stdout]   = help: ends near `Ordered collection of middleware instances to execute for a route.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]  --> src/middleware/chain.rs:4:1
[INFO] [stdout]   |
[INFO] [stdout] 4 | / pub struct MiddlewareChain {
[INFO] [stdout] 5 | |     middlewares: Vec<Box<dyn Middleware>>,
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: the way this is parsed might change in the future
[INFO] [stdout]   = help: starts near `Ordered collection of middleware instances to execute for a route.`
[INFO] [stdout]   = help: ends near `Ordered collection of middleware instances to execute for a route.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/server/listener.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | / pub struct Listener {
[INFO] [stdout] 21 | |     name: Arc<str>,
[INFO] [stdout] 22 | |     entrypoint: EntryPoint,
[INFO] [stdout] 23 | |     state: Arc<SharedState>,
[INFO] [stdout] 24 | |     proxy: Arc<ProxyHandler>,
[INFO] [stdout] 25 | |     tls_acceptor: Option<TokioTlsAcceptor>,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `TCP/TLS listener for HTTP and HTTPS entrypoints.`
[INFO] [stdout]    = help: ends near `TCP/TLS listener for a single entrypoint, handling HTTP/1.1 and HTTP/2 connections.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/server/listener.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | / pub struct Listener {
[INFO] [stdout] 21 | |     name: Arc<str>,
[INFO] [stdout] 22 | |     entrypoint: EntryPoint,
[INFO] [stdout] 23 | |     state: Arc<SharedState>,
[INFO] [stdout] 24 | |     proxy: Arc<ProxyHandler>,
[INFO] [stdout] 25 | |     tls_acceptor: Option<TokioTlsAcceptor>,
[INFO] [stdout] 26 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `TCP/TLS listener for a single entrypoint, handling HTTP/1.1 and HTTP/2 connections.`
[INFO] [stdout]    = help: ends near `TCP/TLS listener for a single entrypoint, handling HTTP/1.1 and HTTP/2 connections.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/server/udp_listener.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | / pub struct UdpListener {
[INFO] [stdout] 12 | |     name: String,
[INFO] [stdout] 13 | |     entrypoint: EntryPoint,
[INFO] [stdout] 14 | |     router: Arc<UdpRouter>,
[INFO] [stdout] 15 | |     services: Arc<UdpServiceManager>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `UDP listener for UDP-based entrypoints.`
[INFO] [stdout]    = help: ends near `UDP listener for a specific entrypoint`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/server/udp_listener.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | / pub struct UdpListener {
[INFO] [stdout] 12 | |     name: String,
[INFO] [stdout] 13 | |     entrypoint: EntryPoint,
[INFO] [stdout] 14 | |     router: Arc<UdpRouter>,
[INFO] [stdout] 15 | |     services: Arc<UdpServiceManager>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `UDP listener for a specific entrypoint`
[INFO] [stdout]    = help: ends near `UDP listener for a specific entrypoint`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/failover.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct FailoverServiceRouter {
[INFO] [stdout]  8 | |     /// Primary service name
[INFO] [stdout]  9 | |     primary: String,
[INFO] [stdout] 10 | |     /// Fallback service name
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     health_status: Option<Arc<HealthStatus>>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Failover router that switches between primary and fallback services.`
[INFO] [stdout]    = help: ends near `Failover service router - routes to primary service unless it's unhealthy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/failover.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct FailoverServiceRouter {
[INFO] [stdout]  8 | |     /// Primary service name
[INFO] [stdout]  9 | |     primary: String,
[INFO] [stdout] 10 | |     /// Fallback service name
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     health_status: Option<Arc<HealthStatus>>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Failover service router - routes to primary service unless it's unhealthy`
[INFO] [stdout]    = help: ends near `Failover service router - routes to primary service unless it's unhealthy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/manager.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct ServiceManager {
[INFO] [stdout] 10 | |     services: DashMap<String, ServiceState>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Central registry of all configured services and their backends.`
[INFO] [stdout]    = help: ends near `Manages all configured services, their load balancers, and health statuses.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/manager.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct ServiceManager {
[INFO] [stdout] 10 | |     services: DashMap<String, ServiceState>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages all configured services, their load balancers, and health statuses.`
[INFO] [stdout]    = help: ends near `Manages all configured services, their load balancers, and health statuses.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/mirroring.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct MirroringServiceRouter {
[INFO] [stdout] 24 | |     /// The main service that always receives the request
[INFO] [stdout] 25 | |     main_service: String,
[INFO] [stdout] 26 | |     /// Mirror services with their percentages (0-100)
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     max_body_size: Option<i64>,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Traffic mirroring router that shadows requests to secondary services.`
[INFO] [stdout]    = help: ends near `based on their configured percentage`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/mirroring.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct MirroringServiceRouter {
[INFO] [stdout] 24 | |     /// The main service that always receives the request
[INFO] [stdout] 25 | |     main_service: String,
[INFO] [stdout] 26 | |     /// Mirror services with their percentages (0-100)
[INFO] [stdout] ...  |
[INFO] [stdout] 29 | |     max_body_size: Option<i64>,
[INFO] [stdout] 30 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Mirroring service router for shadowing traffic to secondary services`
[INFO] [stdout]    = help: ends near `Mirroring service router for shadowing traffic to secondary services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/weighted.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct WeightedServiceRouter {
[INFO] [stdout]  7 | |     services: Vec<WeightedServiceEntry>,
[INFO] [stdout]  8 | |     total_weight: i64,
[INFO] [stdout] ...  |
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Weighted traffic splitter using smooth round-robin distribution.`
[INFO] [stdout]    = help: ends near `Uses smooth weighted round-robin for even distribution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/service/weighted.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | / pub struct WeightedServiceRouter {
[INFO] [stdout]  7 | |     services: Vec<WeightedServiceEntry>,
[INFO] [stdout]  8 | |     total_weight: i64,
[INFO] [stdout] ...  |
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Weighted service router for traffic splitting between services`
[INFO] [stdout]    = help: ends near `Weighted service router for traffic splitting between services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/store/local.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | / pub struct LocalStore {
[INFO] [stdout] 15 | |     // Rate limiting: key -> (count, window_start)
[INFO] [stdout] 16 | |     rate_limits: DashMap<String, RateLimitEntry>,
[INFO] [stdout] ...  |
[INFO] [stdout] 43 | |     drain_tx: broadcast::Sender<String>,
[INFO] [stdout] 44 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `In-memory store for single-node deployments.`
[INFO] [stdout]    = help: ends near `All state is local to this process`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/store/local.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | / pub struct LocalStore {
[INFO] [stdout] 15 | |     // Rate limiting: key -> (count, window_start)
[INFO] [stdout] 16 | |     rate_limits: DashMap<String, RateLimitEntry>,
[INFO] [stdout] ...  |
[INFO] [stdout] 43 | |     drain_tx: broadcast::Sender<String>,
[INFO] [stdout] 44 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Local in-memory store for single-node deployments`
[INFO] [stdout]    = help: ends near `Local in-memory store for single-node deployments`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/store/valkey.rs:67:1
[INFO] [stdout]    |
[INFO] [stdout] 67 | / pub struct ValkeyStore {
[INFO] [stdout] 68 | |     conn: ConnectionManager,
[INFO] [stdout] 69 | |     key_prefix: String,
[INFO] [stdout] 70 | |     #[allow(dead_code)]
[INFO] [stdout] ...  |
[INFO] [stdout] 84 | |     subscriber_handle: RwLock<Option<tokio::task::JoinHandle<()>>>,
[INFO] [stdout] 85 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Valkey/Redis-backed store for distributed multi-node deployments.`
[INFO] [stdout]    = help: ends near `Distributed store using Valkey/Redis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/store/valkey.rs:67:1
[INFO] [stdout]    |
[INFO] [stdout] 67 | / pub struct ValkeyStore {
[INFO] [stdout] 68 | |     conn: ConnectionManager,
[INFO] [stdout] 69 | |     key_prefix: String,
[INFO] [stdout] 70 | |     #[allow(dead_code)]
[INFO] [stdout] ...  |
[INFO] [stdout] 84 | |     subscriber_handle: RwLock<Option<tokio::task::JoinHandle<()>>>,
[INFO] [stdout] 85 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Distributed store using Valkey/Redis`
[INFO] [stdout]    = help: ends near `Distributed store using Valkey/Redis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unclosed HTML tag `SNI`
[INFO] [stdout]    --> src/tcp/proxy.rs:117:24
[INFO] [stdout]     |
[INFO] [stdout] 117 |     /// Returns (Option<SNI>, initial_data)
[INFO] [stdout]     |                        ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(rustdoc::invalid_html_tags)]` on by default
[INFO] [stdout] help: try marking as source code
[INFO] [stdout]     |
[INFO] [stdout] 117 |     /// Returns (`Option<SNI>`, initial_data)
[INFO] [stdout]     |                  +           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/proxy.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct TcpProxy {
[INFO] [stdout] 18 | |     router: Arc<TcpRouter>,
[INFO] [stdout] 19 | |     services: Arc<TcpServiceManager>,
[INFO] [stdout] 20 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Handles incoming TCP connections, extracts SNI, and proxies to backends.`
[INFO] [stdout]    = help: ends near `TCP proxy handler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/proxy.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct TcpProxy {
[INFO] [stdout] 18 | |     router: Arc<TcpRouter>,
[INFO] [stdout] 19 | |     services: Arc<TcpServiceManager>,
[INFO] [stdout] 20 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `TCP proxy handler`
[INFO] [stdout]    = help: ends near `TCP proxy handler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/router.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct TcpRouter {
[INFO] [stdout]  9 | |     /// Routers by entrypoint
[INFO] [stdout] 10 | |     routers: HashMap<String, Vec<TcpRoute>>,
[INFO] [stdout] 11 | |     /// Catch-all routers (rule = "*")
[INFO] [stdout] 12 | |     catch_all: HashMap<String, TcpRoute>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Matches TCP connections to routes by SNI hostname or client IP.`
[INFO] [stdout]    = help: ends near `TCP router for matching connections to services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/router.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct TcpRouter {
[INFO] [stdout]  9 | |     /// Routers by entrypoint
[INFO] [stdout] 10 | |     routers: HashMap<String, Vec<TcpRoute>>,
[INFO] [stdout] 11 | |     /// Catch-all routers (rule = "*")
[INFO] [stdout] 12 | |     catch_all: HashMap<String, TcpRoute>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `TCP router for matching connections to services`
[INFO] [stdout]    = help: ends near `TCP router for matching connections to services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/service.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct TcpServiceManager {
[INFO] [stdout] 10 | |     services: HashMap<String, Arc<TcpService>>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages TCP backend services and round-robin load balancing.`
[INFO] [stdout]    = help: ends near `Manages TCP services and load balancing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tcp/service.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct TcpServiceManager {
[INFO] [stdout] 10 | |     services: HashMap<String, Arc<TcpService>>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages TCP services and load balancing`
[INFO] [stdout]    = help: ends near `Manages TCP services and load balancing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/telemetry/propagation.rs:151:1
[INFO] [stdout]     |
[INFO] [stdout] 151 | / pub fn extract_context(headers: &HeaderMap) -> TraceContext {
[INFO] [stdout] 152 | |     // Try W3C traceparent header first
[INFO] [stdout] 153 | |     if let Some(traceparent) = headers.get("traceparent")
[INFO] [stdout] 154 | |         && let Ok(value) = traceparent.to_str()
[INFO] [stdout] ...   |
[INFO] [stdout] 218 | |     TraceContext::new()
[INFO] [stdout] 219 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Extract trace context from incoming headers, inject into outgoing headers.`
[INFO] [stdout]     = help: ends near `Extract trace context from incoming request headers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/telemetry/propagation.rs:151:1
[INFO] [stdout]     |
[INFO] [stdout] 151 | / pub fn extract_context(headers: &HeaderMap) -> TraceContext {
[INFO] [stdout] 152 | |     // Try W3C traceparent header first
[INFO] [stdout] 153 | |     if let Some(traceparent) = headers.get("traceparent")
[INFO] [stdout] 154 | |         && let Ok(value) = traceparent.to_str()
[INFO] [stdout] ...   |
[INFO] [stdout] 218 | |     TraceContext::new()
[INFO] [stdout] 219 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Extract trace context from incoming request headers`
[INFO] [stdout]     = help: ends near `Extract trace context from incoming request headers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/telemetry/propagation.rs:222:1
[INFO] [stdout]     |
[INFO] [stdout] 222 | / pub fn inject_context(headers: &mut HeaderMap, ctx: &TraceContext) {
[INFO] [stdout] 223 | |     // Always inject W3C traceparent
[INFO] [stdout] 224 | |     if let Ok(value) = HeaderValue::from_str(&ctx.to_traceparent()) {
[INFO] [stdout] 225 | |         headers.insert("traceparent", value);
[INFO] [stdout] ...   |
[INFO] [stdout] 246 | |     headers.insert("x-b3-sampled", sampled);
[INFO] [stdout] 247 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Extract trace context from incoming headers, inject into outgoing headers.`
[INFO] [stdout]     = help: ends near `Inject trace context into outgoing request headers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/telemetry/propagation.rs:222:1
[INFO] [stdout]     |
[INFO] [stdout] 222 | / pub fn inject_context(headers: &mut HeaderMap, ctx: &TraceContext) {
[INFO] [stdout] 223 | |     // Always inject W3C traceparent
[INFO] [stdout] 224 | |     if let Ok(value) = HeaderValue::from_str(&ctx.to_traceparent()) {
[INFO] [stdout] 225 | |         headers.insert("traceparent", value);
[INFO] [stdout] ...   |
[INFO] [stdout] 246 | |     headers.insert("x-b3-sampled", sampled);
[INFO] [stdout] 247 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Inject trace context into outgoing request headers`
[INFO] [stdout]     = help: ends near `Inject trace context into outgoing request headers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/propagation.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct TraceContext {
[INFO] [stdout]  8 | |     /// Trace ID - 32 hex characters (16 bytes)
[INFO] [stdout]  9 | |     pub trace_id: String,
[INFO] [stdout] 10 | |     /// Parent Span ID - 16 hex characters (8 bytes)
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     pub trace_state: Option<String>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Extract trace context from incoming headers, inject into outgoing headers.`
[INFO] [stdout]    = help: ends near `See: <https://www.w3.org/TR/trace-context/>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/propagation.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | / pub struct TraceContext {
[INFO] [stdout]  8 | |     /// Trace ID - 32 hex characters (16 bytes)
[INFO] [stdout]  9 | |     pub trace_id: String,
[INFO] [stdout] 10 | |     /// Parent Span ID - 16 hex characters (8 bytes)
[INFO] [stdout] ...  |
[INFO] [stdout] 15 | |     pub trace_state: Option<String>,
[INFO] [stdout] 16 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `W3C Trace Context for distributed tracing`
[INFO] [stdout]    = help: ends near `W3C Trace Context for distributed tracing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/span.rs:29:1
[INFO] [stdout]    |
[INFO] [stdout] 29 | / pub struct RequestSpan {
[INFO] [stdout] 30 | |     /// Trace context
[INFO] [stdout] 31 | |     pub context: TraceContext,
[INFO] [stdout] 32 | |     /// Span ID for this specific span
[INFO] [stdout] ...  |
[INFO] [stdout] 53 | |     attributes: Vec<(String, String)>,
[INFO] [stdout] 54 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Request span for structured tracing of HTTP requests through the proxy.`
[INFO] [stdout]    = help: ends near `Request span for tracing HTTP requests`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/span.rs:29:1
[INFO] [stdout]    |
[INFO] [stdout] 29 | / pub struct RequestSpan {
[INFO] [stdout] 30 | |     /// Trace context
[INFO] [stdout] 31 | |     pub context: TraceContext,
[INFO] [stdout] 32 | |     /// Span ID for this specific span
[INFO] [stdout] ...  |
[INFO] [stdout] 53 | |     attributes: Vec<(String, String)>,
[INFO] [stdout] 54 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Request span for tracing HTTP requests`
[INFO] [stdout]    = help: ends near `Request span for tracing HTTP requests`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/span.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub enum SpanKind {
[INFO] [stdout]  9 | |     /// Server span - handles incoming request
[INFO] [stdout] 10 | |     Server,
[INFO] [stdout] 11 | |     /// Client span - makes outgoing request
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     Internal,
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Request span for structured tracing of HTTP requests through the proxy.`
[INFO] [stdout]    = help: ends near `Span kind following OpenTelemetry conventions`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/telemetry/span.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub enum SpanKind {
[INFO] [stdout]  9 | |     /// Server span - handles incoming request
[INFO] [stdout] 10 | |     Server,
[INFO] [stdout] 11 | |     /// Client span - makes outgoing request
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     Internal,
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Span kind following OpenTelemetry conventions`
[INFO] [stdout]    = help: ends near `Span kind following OpenTelemetry conventions`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/challenge.rs:74:1
[INFO] [stdout]    |
[INFO] [stdout] 74 | / pub async fn try_handle_challenge<B>(
[INFO] [stdout] 75 | |     req: &Request<B>,
[INFO] [stdout] 76 | |     pending: &Arc<RwLock<HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 77 | | ) -> Option<Response<Full<Bytes>>> {
[INFO] [stdout] ...  |
[INFO] [stdout] 83 | |     handler.handle(req).await
[INFO] [stdout] 84 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP-01 challenge handler and standalone request matcher.`
[INFO] [stdout]    = help: ends near `Returns Some(response) if this was a challenge request, None otherwise`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/challenge.rs:74:1
[INFO] [stdout]    |
[INFO] [stdout] 74 | / pub async fn try_handle_challenge<B>(
[INFO] [stdout] 75 | |     req: &Request<B>,
[INFO] [stdout] 76 | |     pending: &Arc<RwLock<HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 77 | | ) -> Option<Response<Full<Bytes>>> {
[INFO] [stdout] ...  |
[INFO] [stdout] 83 | |     handler.handle(req).await
[INFO] [stdout] 84 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Standalone function to check and handle ACME challenges`
[INFO] [stdout]    = help: ends near `Standalone function to check and handle ACME challenges`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/challenge.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct ChallengeHandler {
[INFO] [stdout] 13 | |     pending: Arc<RwLock<HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 14 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP-01 challenge handler and standalone request matcher.`
[INFO] [stdout]    = help: ends near `Responds to requests at /.well-known/acme-challenge/{token}`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/challenge.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct ChallengeHandler {
[INFO] [stdout] 13 | |     pending: Arc<RwLock<HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 14 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `HTTP-01 ACME challenge handler`
[INFO] [stdout]    = help: ends near `HTTP-01 ACME challenge handler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/client.rs:99:1
[INFO] [stdout]     |
[INFO] [stdout]  99 | / pub struct AcmeClient {
[INFO] [stdout] 100 | |     storage: Arc<StorageManager>,
[INFO] [stdout] 101 | |     directory_url: String,
[INFO] [stdout] 102 | |     directory: Option<AcmeDirectory>,
[INFO] [stdout] ...   |
[INFO] [stdout] 107 | |     pending_challenges: Arc<RwLock<std::collections::HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 108 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `ACME protocol client for account management and certificate ordering.`
[INFO] [stdout]     = help: ends near `ACME client for certificate management`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/client.rs:99:1
[INFO] [stdout]     |
[INFO] [stdout]  99 | / pub struct AcmeClient {
[INFO] [stdout] 100 | |     storage: Arc<StorageManager>,
[INFO] [stdout] 101 | |     directory_url: String,
[INFO] [stdout] 102 | |     directory: Option<AcmeDirectory>,
[INFO] [stdout] ...   |
[INFO] [stdout] 107 | |     pending_challenges: Arc<RwLock<std::collections::HashMap<String, PendingChallenge>>>,
[INFO] [stdout] 108 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `ACME client for certificate management`
[INFO] [stdout]     = help: ends near `ACME client for certificate management`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/client.rs:91:1
[INFO] [stdout]    |
[INFO] [stdout] 91 | / pub struct PendingChallenge {
[INFO] [stdout] 92 | |     /// The challenge token from the ACME server.
[INFO] [stdout] 93 | |     pub token: String,
[INFO] [stdout] 94 | |     /// The computed key authorization response.
[INFO] [stdout] 95 | |     pub key_authorization: String,
[INFO] [stdout] 96 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `ACME protocol client for account management and certificate ordering.`
[INFO] [stdout]    = help: ends near `An in-progress HTTP-01 challenge awaiting validation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/client.rs:91:1
[INFO] [stdout]    |
[INFO] [stdout] 91 | / pub struct PendingChallenge {
[INFO] [stdout] 92 | |     /// The challenge token from the ACME server.
[INFO] [stdout] 93 | |     pub token: String,
[INFO] [stdout] 94 | |     /// The computed key authorization response.
[INFO] [stdout] 95 | |     pub key_authorization: String,
[INFO] [stdout] 96 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `An in-progress HTTP-01 challenge awaiting validation.`
[INFO] [stdout]    = help: ends near `An in-progress HTTP-01 challenge awaiting validation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/manager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct AcmeManager {
[INFO] [stdout] 13 | |     storage: Arc<StorageManager>,
[INFO] [stdout] 14 | |     client: Arc<RwLock<AcmeClient>>,
[INFO] [stdout] 15 | |     resolver: Arc<CertificateResolver>,
[INFO] [stdout] 16 | |     pending_challenges: Arc<RwLock<HashMap<String, super::client::PendingChallenge>>>,
[INFO] [stdout] 17 | |     renewal_interval: Duration,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Certificate lifecycle manager with automatic renewal.`
[INFO] [stdout]    = help: ends near `ACME manager that handles certificate lifecycle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/manager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | / pub struct AcmeManager {
[INFO] [stdout] 13 | |     storage: Arc<StorageManager>,
[INFO] [stdout] 14 | |     client: Arc<RwLock<AcmeClient>>,
[INFO] [stdout] 15 | |     resolver: Arc<CertificateResolver>,
[INFO] [stdout] 16 | |     pending_challenges: Arc<RwLock<HashMap<String, super::client::PendingChallenge>>>,
[INFO] [stdout] 17 | |     renewal_interval: Duration,
[INFO] [stdout] 18 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `ACME manager that handles certificate lifecycle`
[INFO] [stdout]    = help: ends near `ACME manager that handles certificate lifecycle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/manager.rs:131:1
[INFO] [stdout]     |
[INFO] [stdout] 131 | / pub struct AcmeManagerBuilder {
[INFO] [stdout] 132 | |     storage_path: String,
[INFO] [stdout] 133 | |     email: String,
[INFO] [stdout] 134 | |     ca_server: Option<String>,
[INFO] [stdout] 135 | |     domains: Vec<Vec<String>>,
[INFO] [stdout] 136 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Certificate lifecycle manager with automatic renewal.`
[INFO] [stdout]     = help: ends near `Builder for configuring and initializing an `AcmeManager`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/manager.rs:131:1
[INFO] [stdout]     |
[INFO] [stdout] 131 | / pub struct AcmeManagerBuilder {
[INFO] [stdout] 132 | |     storage_path: String,
[INFO] [stdout] 133 | |     email: String,
[INFO] [stdout] 134 | |     ca_server: Option<String>,
[INFO] [stdout] 135 | |     domains: Vec<Vec<String>>,
[INFO] [stdout] 136 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Builder for configuring and initializing an `AcmeManager`.`
[INFO] [stdout]     = help: ends near `Builder for configuring and initializing an `AcmeManager`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:28:1
[INFO] [stdout]    |
[INFO] [stdout] 28 | / pub struct AcmeAccount {
[INFO] [stdout] 29 | |     /// Account URL from ACME server
[INFO] [stdout] 30 | |     pub url: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |     pub email: String,
[INFO] [stdout] 37 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Persistent storage for ACME accounts and certificates.`
[INFO] [stdout]    = help: ends near `ACME account credentials and registration info.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:28:1
[INFO] [stdout]    |
[INFO] [stdout] 28 | / pub struct AcmeAccount {
[INFO] [stdout] 29 | |     /// Account URL from ACME server
[INFO] [stdout] 30 | |     pub url: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |     pub email: String,
[INFO] [stdout] 37 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `ACME account credentials and registration info.`
[INFO] [stdout]    = help: ends near `ACME account credentials and registration info.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | / pub struct AcmeStorage {
[INFO] [stdout] 17 | |     /// ACME account information
[INFO] [stdout] 18 | |     #[serde(default)]
[INFO] [stdout] 19 | |     pub account: Option<AcmeAccount>,
[INFO] [stdout] ...  |
[INFO] [stdout] 23 | |     pub certificates: HashMap<String, StoredCertificate>,
[INFO] [stdout] 24 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Persistent storage for ACME accounts and certificates.`
[INFO] [stdout]    = help: ends near `Storage for ACME account and certificates`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | / pub struct AcmeStorage {
[INFO] [stdout] 17 | |     /// ACME account information
[INFO] [stdout] 18 | |     #[serde(default)]
[INFO] [stdout] 19 | |     pub account: Option<AcmeAccount>,
[INFO] [stdout] ...  |
[INFO] [stdout] 23 | |     pub certificates: HashMap<String, StoredCertificate>,
[INFO] [stdout] 24 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Storage for ACME account and certificates`
[INFO] [stdout]    = help: ends near `Storage for ACME account and certificates`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/storage.rs:104:1
[INFO] [stdout]     |
[INFO] [stdout] 104 | / pub struct StorageManager {
[INFO] [stdout] 105 | |     path: String,
[INFO] [stdout] 106 | |     data: Arc<RwLock<AcmeStorage>>,
[INFO] [stdout] 107 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Persistent storage for ACME accounts and certificates.`
[INFO] [stdout]     = help: ends near `Thread-safe storage manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tls/acme/storage.rs:104:1
[INFO] [stdout]     |
[INFO] [stdout] 104 | / pub struct StorageManager {
[INFO] [stdout] 105 | |     path: String,
[INFO] [stdout] 106 | |     data: Arc<RwLock<AcmeStorage>>,
[INFO] [stdout] 107 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Thread-safe storage manager`
[INFO] [stdout]     = help: ends near `Thread-safe storage manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:41:1
[INFO] [stdout]    |
[INFO] [stdout] 41 | / pub struct StoredCertificate {
[INFO] [stdout] 42 | |     /// The main domain this certificate is for
[INFO] [stdout] 43 | |     pub domain: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 58 | |     pub not_before: u64,
[INFO] [stdout] 59 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Persistent storage for ACME accounts and certificates.`
[INFO] [stdout]    = help: ends near `A stored TLS certificate with its private key and validity metadata.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/acme/storage.rs:41:1
[INFO] [stdout]    |
[INFO] [stdout] 41 | / pub struct StoredCertificate {
[INFO] [stdout] 42 | |     /// The main domain this certificate is for
[INFO] [stdout] 43 | |     pub domain: String,
[INFO] [stdout] ...  |
[INFO] [stdout] 58 | |     pub not_before: u64,
[INFO] [stdout] 59 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `A stored TLS certificate with its private key and validity metadata.`
[INFO] [stdout]    = help: ends near `A stored TLS certificate with its private key and validity metadata.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/resolver.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct CertificateResolver {
[INFO] [stdout] 18 | |     /// Static certificates loaded from files
[INFO] [stdout] 19 | |     static_certs: HashMap<String, Arc<CertifiedKey>>,
[INFO] [stdout] ...  |
[INFO] [stdout] 28 | |     default_cert: Option<Arc<CertifiedKey>>,
[INFO] [stdout] 29 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `SNI-based certificate resolver with static, ACME, and wildcard support.`
[INFO] [stdout]    = help: ends near `SNI-based certificate resolver that supports:`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tls/resolver.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | / pub struct CertificateResolver {
[INFO] [stdout] 18 | |     /// Static certificates loaded from files
[INFO] [stdout] 19 | |     static_certs: HashMap<String, Arc<CertifiedKey>>,
[INFO] [stdout] ...  |
[INFO] [stdout] 28 | |     default_cert: Option<Arc<CertifiedKey>>,
[INFO] [stdout] 29 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `SNI-based certificate resolver that supports:`
[INFO] [stdout]    = help: ends near `SNI-based certificate resolver that supports:`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/proxy.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct UdpProxy {
[INFO] [stdout] 24 | |     router: Arc<UdpRouter>,
[INFO] [stdout] 25 | |     services: Arc<UdpServiceManager>,
[INFO] [stdout] 26 | |     /// Session tracking: maps client addr -> backend info
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     bytes_sent: AtomicU64,
[INFO] [stdout] 35 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Session-aware UDP proxy that forwards datagrams and tracks client sessions.`
[INFO] [stdout]    = help: ends near `UDP proxy handler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/proxy.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | / pub struct UdpProxy {
[INFO] [stdout] 24 | |     router: Arc<UdpRouter>,
[INFO] [stdout] 25 | |     services: Arc<UdpServiceManager>,
[INFO] [stdout] 26 | |     /// Session tracking: maps client addr -> backend info
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     bytes_sent: AtomicU64,
[INFO] [stdout] 35 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `UDP proxy handler`
[INFO] [stdout]    = help: ends near `UDP proxy handler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/router.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct UdpRouter {
[INFO] [stdout]  9 | |     /// Routers by entrypoint
[INFO] [stdout] 10 | |     routers: HashMap<String, Vec<UdpRoute>>,
[INFO] [stdout] 11 | |     /// Catch-all routers (rule = "*")
[INFO] [stdout] 12 | |     catch_all: HashMap<String, UdpRoute>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Matches UDP datagrams to routes by client IP.`
[INFO] [stdout]    = help: ends near `UDP router for matching datagrams to services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/router.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / pub struct UdpRouter {
[INFO] [stdout]  9 | |     /// Routers by entrypoint
[INFO] [stdout] 10 | |     routers: HashMap<String, Vec<UdpRoute>>,
[INFO] [stdout] 11 | |     /// Catch-all routers (rule = "*")
[INFO] [stdout] 12 | |     catch_all: HashMap<String, UdpRoute>,
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `UDP router for matching datagrams to services`
[INFO] [stdout]    = help: ends near `UDP router for matching datagrams to services`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/service.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct UdpServiceManager {
[INFO] [stdout] 10 | |     services: HashMap<String, Arc<UdpService>>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages UDP backend services and round-robin load balancing.`
[INFO] [stdout]    = help: ends near `Manages UDP services and load balancing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/udp/service.rs:9:1
[INFO] [stdout]    |
[INFO] [stdout]  9 | / pub struct UdpServiceManager {
[INFO] [stdout] 10 | |     services: HashMap<String, Arc<UdpService>>,
[INFO] [stdout] 11 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Manages UDP services and load balancing`
[INFO] [stdout]    = help: ends near `Manages UDP services and load balancing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not document `trafficcop`
[INFO] running `Command { std: "docker" "inspect" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84", kill_on_drop: false }`
[INFO] [stdout] 63af35e8cf89333a8d2d1111d8f52e33ef91cc34a0d7d8cb9a3d4f03290ccf84
