[INFO] fetching crate rater 0.1.2...
[INFO] documenting rater-0.1.2 against da3f5c31e5535b3dc210067de660a45784ae1e9c for pr-162169
[INFO] extracting crate rater 0.1.2 into /workspace/builds/worker-4-tc2/source
[INFO] started tweaking crates.io crate rater 0.1.2
[INFO] finished tweaking crates.io crate rater 0.1.2
[INFO] tweaked toml for crates.io crate rater 0.1.2 written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate rater 0.1.2 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 rater 0.1.2 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] 4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096
[INFO] running `Command { std: "docker" "start" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096", 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" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096", 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" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096" "/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.174
[INFO] [stderr]    Compiling proc-macro2 v1.0.95
[INFO] [stderr]    Compiling unicode-ident v1.0.18
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]     Checking cfg-if v1.0.1
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]     Checking pin-project-lite v0.2.16
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking tracing-core v0.1.34
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking dashmap v6.1.0
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]  Documenting rater v0.1.2 (/opt/rustwide/workdir)
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/rate_limiter/utils.rs:85:1
[INFO] [stdout]    |
[INFO] [stdout] 85 | / pub fn cpu_relax() {
[INFO] [stdout] 86 | |     std::hint::spin_loop();
[INFO] [stdout] 87 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Utility functions for time and CPU optimizations`
[INFO] [stdout]    = help: ends near `CPU-specific relaxation hint for spin loops.`
[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/rate_limiter/utils.rs:85:1
[INFO] [stdout]    |
[INFO] [stdout] 85 | / pub fn cpu_relax() {
[INFO] [stdout] 86 | |     std::hint::spin_loop();
[INFO] [stdout] 87 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `CPU-specific relaxation hint for spin loops.`
[INFO] [stdout]    = help: ends near `CPU-specific relaxation hint for spin loops.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:103:1
[INFO] [stdout]     |
[INFO] [stdout] 103 | / pub fn current_time_ms() -> u64 {
[INFO] [stdout] 104 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 105 | |     tb.base_ms
[INFO] [stdout] 106 | |         .wrapping_add(tb.start.elapsed().as_millis() as u64)
[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 `Utility functions for time and CPU optimizations`
[INFO] [stdout]     = help: ends near `Returns the current time in milliseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:103:1
[INFO] [stdout]     |
[INFO] [stdout] 103 | / pub fn current_time_ms() -> u64 {
[INFO] [stdout] 104 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 105 | |     tb.base_ms
[INFO] [stdout] 106 | |         .wrapping_add(tb.start.elapsed().as_millis() as u64)
[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 `Returns the current time in milliseconds since UNIX epoch.`
[INFO] [stdout]     = help: ends near `Returns the current time in milliseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:146:1
[INFO] [stdout]     |
[INFO] [stdout] 146 | / pub fn current_time_ns() -> u64 {
[INFO] [stdout] 147 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 148 | |     tb.base_us
[INFO] [stdout] 149 | |         .saturating_mul(1_000)
[INFO] [stdout] 150 | |         .saturating_add(tb.start.elapsed().as_nanos() as u64)
[INFO] [stdout] 151 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Utility functions for time and CPU optimizations`
[INFO] [stdout]     = help: ends near `Returns the current time in nanoseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:146:1
[INFO] [stdout]     |
[INFO] [stdout] 146 | / pub fn current_time_ns() -> u64 {
[INFO] [stdout] 147 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 148 | |     tb.base_us
[INFO] [stdout] 149 | |         .saturating_mul(1_000)
[INFO] [stdout] 150 | |         .saturating_add(tb.start.elapsed().as_nanos() as u64)
[INFO] [stdout] 151 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Returns the current time in nanoseconds since UNIX epoch.`
[INFO] [stdout]     = help: ends near `Returns the current time in nanoseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:124:1
[INFO] [stdout]     |
[INFO] [stdout] 124 | / pub fn current_time_us() -> u64 {
[INFO] [stdout] 125 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 126 | |     tb.base_us
[INFO] [stdout] 127 | |         .saturating_add(tb.start.elapsed().as_micros() as u64)
[INFO] [stdout] 128 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Utility functions for time and CPU optimizations`
[INFO] [stdout]     = help: ends near `Returns the current time in microseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/utils.rs:124:1
[INFO] [stdout]     |
[INFO] [stdout] 124 | / pub fn current_time_us() -> u64 {
[INFO] [stdout] 125 | |     let tb = START_TIME_BASE.get_or_init(init_time_base);
[INFO] [stdout] 126 | |     tb.base_us
[INFO] [stdout] 127 | |         .saturating_add(tb.start.elapsed().as_micros() as u64)
[INFO] [stdout] 128 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Returns the current time in microseconds since UNIX epoch.`
[INFO] [stdout]     = help: ends near `Returns the current time in microseconds since UNIX epoch.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/metrics.rs:412:1
[INFO] [stdout]     |
[INFO] [stdout] 412 | / pub enum HealthStatus {
[INFO] [stdout] 413 | |     /// Operating normally with good success rates.
[INFO] [stdout] 414 | |     ///
[INFO] [stdout] 415 | |     /// Indicates:
[INFO] [stdout] ...   |
[INFO] [stdout] 435 | |     Critical,
[INFO] [stdout] 436 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Metrics and health monitoring for observability`
[INFO] [stdout]     = help: ends near `Health status indicator for the rate limiter.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/metrics.rs:412:1
[INFO] [stdout]     |
[INFO] [stdout] 412 | / pub enum HealthStatus {
[INFO] [stdout] 413 | |     /// Operating normally with good success rates.
[INFO] [stdout] 414 | |     ///
[INFO] [stdout] 415 | |     /// Indicates:
[INFO] [stdout] ...   |
[INFO] [stdout] 435 | |     Critical,
[INFO] [stdout] 436 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Health status indicator for the rate limiter.`
[INFO] [stdout]     = help: ends near `Health status indicator for the rate limiter.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/manager.rs:131:1
[INFO] [stdout]     |
[INFO] [stdout] 131 | / pub struct IpRateLimiterManager {
[INFO] [stdout] 132 | |     /// Concurrent hash map storing IP to rate limiter mappings.
[INFO] [stdout] 133 | |     /// DashMap provides lock-free concurrent access with sharding.
[INFO] [stdout] 134 | |     limiters: Arc<DashMap<IpAddr, Arc<RateLimiter>, ahash::RandomState>>,
[INFO] [stdout] ...   |
[INFO] [stdout] 156 | |     cleanup_in_progress: Arc<AtomicBool>,
[INFO] [stdout] 157 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `IP-based rate limiting manager for per-client limits`
[INFO] [stdout]     = help: ends near `Manager for per-IP rate limiting.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/manager.rs:131:1
[INFO] [stdout]     |
[INFO] [stdout] 131 | / pub struct IpRateLimiterManager {
[INFO] [stdout] 132 | |     /// Concurrent hash map storing IP to rate limiter mappings.
[INFO] [stdout] 133 | |     /// DashMap provides lock-free concurrent access with sharding.
[INFO] [stdout] 134 | |     limiters: Arc<DashMap<IpAddr, Arc<RateLimiter>, ahash::RandomState>>,
[INFO] [stdout] ...   |
[INFO] [stdout] 156 | |     cleanup_in_progress: Arc<AtomicBool>,
[INFO] [stdout] 157 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Manager for per-IP rate limiting.`
[INFO] [stdout]     = help: ends near `Manager for per-IP rate limiting.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/manager.rs:788:1
[INFO] [stdout]     |
[INFO] [stdout] 788 | / pub struct ManagerStats {
[INFO] [stdout] 789 | |     /// Number of currently active IP limiters.
[INFO] [stdout] 790 | |     pub active_ips: usize,
[INFO] [stdout] ...   |
[INFO] [stdout] 802 | |     pub max_capacity: usize,
[INFO] [stdout] 803 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `IP-based rate limiting manager for per-client limits`
[INFO] [stdout]     = help: ends near `Statistics for the IP rate limiter manager.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/manager.rs:788:1
[INFO] [stdout]     |
[INFO] [stdout] 788 | / pub struct ManagerStats {
[INFO] [stdout] 789 | |     /// Number of currently active IP limiters.
[INFO] [stdout] 790 | |     pub active_ips: usize,
[INFO] [stdout] ...   |
[INFO] [stdout] 802 | |     pub max_capacity: usize,
[INFO] [stdout] 803 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Statistics for the IP rate limiter manager.`
[INFO] [stdout]     = help: ends near `Statistics for the IP rate limiter manager.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/rate_limiter/config.rs:75:1
[INFO] [stdout]    |
[INFO] [stdout] 75 | / pub enum MemoryOrdering {
[INFO] [stdout] 76 | |     /// Relaxed ordering - fastest but provides minimal guarantees.
[INFO] [stdout] 77 | |     ///
[INFO] [stdout] 78 | |     /// Use when:
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     Sequential,
[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 `Configuration types for customizing rate limiter behavior`
[INFO] [stdout]    = help: ends near `Memory ordering strategy for atomic operations.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/rate_limiter/config.rs:75:1
[INFO] [stdout]    |
[INFO] [stdout] 75 | / pub enum MemoryOrdering {
[INFO] [stdout] 76 | |     /// Relaxed ordering - fastest but provides minimal guarantees.
[INFO] [stdout] 77 | |     ///
[INFO] [stdout] 78 | |     /// Use when:
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     Sequential,
[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 `Memory ordering strategy for atomic operations.`
[INFO] [stdout]    = help: ends near `Memory ordering strategy for atomic operations.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/core.rs:197:1
[INFO] [stdout]     |
[INFO] [stdout] 197 | / pub struct RateLimiter {
[INFO] [stdout] 198 | |     // === HOT: touched on every try_acquire call ===
[INFO] [stdout] 199 | |     tokens: CacheAligned<TokenCounter>,
[INFO] [stdout] ...   |
[INFO] [stdout] 223 | |     total_refills: AtomicU64,
[INFO] [stdout] 224 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Core rate limiter implementing the token bucket algorithm`
[INFO] [stdout]     = help: ends near `Lock-free token bucket rate limiter.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/core.rs:197:1
[INFO] [stdout]     |
[INFO] [stdout] 197 | / pub struct RateLimiter {
[INFO] [stdout] 198 | |     // === HOT: touched on every try_acquire call ===
[INFO] [stdout] 199 | |     tokens: CacheAligned<TokenCounter>,
[INFO] [stdout] ...   |
[INFO] [stdout] 223 | |     total_refills: AtomicU64,
[INFO] [stdout] 224 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Lock-free token bucket rate limiter.`
[INFO] [stdout]     = help: ends near `Lock-free token bucket rate limiter.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/config.rs:205:1
[INFO] [stdout]     |
[INFO] [stdout] 205 | / pub struct RateLimiterConfig {
[INFO] [stdout] 206 | |     /// Maximum number of tokens the bucket can hold.
[INFO] [stdout] 207 | |     ///
[INFO] [stdout] 208 | |     /// This is your "burst capacity" - the maximum number of requests
[INFO] [stdout] ...   |
[INFO] [stdout] 232 | |     pub ordering: MemoryOrdering,
[INFO] [stdout] 233 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Configuration types for customizing rate limiter behavior`
[INFO] [stdout]     = help: ends near `Configuration for rate limiter instances.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/rate_limiter/config.rs:205:1
[INFO] [stdout]     |
[INFO] [stdout] 205 | / pub struct RateLimiterConfig {
[INFO] [stdout] 206 | |     /// Maximum number of tokens the bucket can hold.
[INFO] [stdout] 207 | |     ///
[INFO] [stdout] 208 | |     /// This is your "burst capacity" - the maximum number of requests
[INFO] [stdout] ...   |
[INFO] [stdout] 232 | |     pub ordering: MemoryOrdering,
[INFO] [stdout] 233 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Configuration for rate limiter instances.`
[INFO] [stdout]     = help: ends near `Configuration for rate limiter instances.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/rate_limiter/metrics.rs:67:1
[INFO] [stdout]    |
[INFO] [stdout] 67 | / pub struct RateLimiterMetrics {
[INFO] [stdout] 68 | |     /// Total number of tokens successfully acquired.
[INFO] [stdout] 69 | |     /// This represents the number of allowed requests.
[INFO] [stdout] 70 | |     pub total_acquired: u64,
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     pub pressure_ratio: f64,
[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 `Metrics and health monitoring for observability`
[INFO] [stdout]    = help: ends near `Comprehensive metrics for rate limiter performance analysis.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/rate_limiter/metrics.rs:67:1
[INFO] [stdout]    |
[INFO] [stdout] 67 | / pub struct RateLimiterMetrics {
[INFO] [stdout] 68 | |     /// Total number of tokens successfully acquired.
[INFO] [stdout] 69 | |     /// This represents the number of allowed requests.
[INFO] [stdout] 70 | |     pub total_acquired: u64,
[INFO] [stdout] ...  |
[INFO] [stdout] 98 | |     pub pressure_ratio: f64,
[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 `Comprehensive metrics for rate limiter performance analysis.`
[INFO] [stdout]    = help: ends near `Comprehensive metrics for rate limiter performance analysis.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not document `rater`
[INFO] running `Command { std: "docker" "inspect" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096", kill_on_drop: false }`
[INFO] [stdout] 4137991c1698a42cfe28e9881cd750cfe2e5dd1b3949ddae727841d1740d1096
