[INFO] cloning repository https://github.com/ErikAllanKincaid/tetron
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ErikAllanKincaid/tetron" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FErikAllanKincaid%2Ftetron", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FErikAllanKincaid%2Ftetron'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 345b5b101f402efb09f11c7854fe8be229e47abc
[INFO] documenting ErikAllanKincaid/tetron against da3f5c31e5535b3dc210067de660a45784ae1e9c for pr-162169
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FErikAllanKincaid%2Ftetron" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/ErikAllanKincaid/tetron
[INFO] finished tweaking git repo https://github.com/ErikAllanKincaid/tetron
[INFO] tweaked toml for git repo https://github.com/ErikAllanKincaid/tetron written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/ErikAllanKincaid/tetron 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 git repo https://github.com/ErikAllanKincaid/tetron 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] 6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff
[INFO] running `Command { std: "docker" "start" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff", 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" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff", 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" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "doc" "--frozen" "--no-deps" "--document-private-items" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling portable-atomic v1.14.0
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]     Checking socket2 v0.6.5
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.2.2
[INFO] [stderr]     Checking futures-sink v0.3.33
[INFO] [stderr]    Compiling futures-macro v0.3.33
[INFO] [stderr]     Checking futures-channel v0.3.33
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling zeroize_derive v1.5.0
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking getrandom v0.4.3
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]     Checking hashbrown v0.17.1
[INFO] [stderr]     Checking zeroize v1.9.0
[INFO] [stderr]     Checking futures-util v0.3.33
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]     Checking rustls-pki-types v1.15.1
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking chacha20 v0.10.1
[INFO] [stderr]    Compiling rustls v0.23.42
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]     Checking rand v0.10.2
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking fastrand v2.5.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.13
[INFO] [stderr]    Compiling spez v0.1.2
[INFO] [stderr]    Compiling n0-error-macros v1.0.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]     Checking futures-lite v2.6.1
[INFO] [stderr]     Checking pem-rfc7468 v1.0.0
[INFO] [stderr]     Checking pin-project v1.1.13
[INFO] [stderr]     Checking der v0.8.1
[INFO] [stderr]     Checking n0-error v1.0.0
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling thiserror-impl v2.0.19
[INFO] [stderr]     Checking rustls-webpki v0.103.13
[INFO] [stderr]     Checking crypto-common v0.2.2
[INFO] [stderr]    Compiling n0-future v0.3.2
[INFO] [stderr]     Checking spin v0.10.1
[INFO] [stderr]     Checking cordyceps v0.3.4
[INFO] [stderr]     Checking diatomic-waker v0.2.3
[INFO] [stderr]     Checking digest v0.11.3
[INFO] [stderr]     Checking futures-buffered v0.2.13
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]    Compiling curve25519-dalek v5.0.0
[INFO] [stderr]     Checking thiserror v2.0.19
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]     Checking base16ct v1.0.0
[INFO] [stderr]     Checking spki v0.8.0
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking futures-executor v0.3.33
[INFO] [stderr]     Checking pkcs8 v0.11.0
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]    Compiling heapless v0.7.17
[INFO] [stderr]     Checking signature v3.0.0
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling noq-udp v1.1.1 (/opt/rustwide/workdir/vendor/noq-udp-1.1.0)
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.20
[INFO] [stderr]    Compiling data-encoding v2.11.0
[INFO] [stderr]     Checking either v1.16.0
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking hash32 v0.2.1
[INFO] [stderr]     Checking time v0.3.54
[INFO] [stderr]     Checking derive_more v2.1.1
[INFO] [stderr]     Checking futures v0.3.33
[INFO] [stderr]    Compiling proc-macro-crate v3.5.0
[INFO] [stderr]     Checking sha2 v0.11.0
[INFO] [stderr]     Checking crossbeam-channel v0.5.16
[INFO] [stderr]     Checking spin v0.9.9
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]    Compiling data-encoding-macro-internal v0.1.18
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking cobs v0.3.0
[INFO] [stderr]    Compiling async-trait v0.1.91
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking data-encoding-macro v0.1.20
[INFO] [stderr]     Checking uuid v1.24.0
[INFO] [stderr]    Compiling blake3 v1.8.5
[INFO] [stderr]    Compiling postcard-derive v0.2.2
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]    Compiling netdev v0.45.0
[INFO] [stderr]     Checking rustls-native-certs v0.8.4
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]    Compiling num_enum_derive v0.7.6
[INFO] [stderr]     Checking netlink-packet-route v0.31.0
[INFO] [stderr]    Compiling iroh-metrics-derive v1.0.1
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]     Checking rand_pcg v0.10.2
[INFO] [stderr]    Compiling proc-macro-error-attr v0.4.12
[INFO] [stderr]    Compiling enum-assoc v1.3.0
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]    Compiling iroh-dns v1.0.3
[INFO] [stderr]    Compiling netwatch v0.19.1
[INFO] [stderr]    Compiling noq v1.1.0
[INFO] [stderr]     Checking constant_time_eq v0.4.2
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking bytes v1.12.1
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking ipnet v2.12.0
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking serdect v0.4.3
[INFO] [stderr]     Checking ed25519 v3.0.0
[INFO] [stderr]     Checking prefix-trie v0.8.4
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking once_cell v1.21.4
[INFO] [stderr]     Checking tokio v1.53.1
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]     Checking http v1.4.2
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking postcard v1.1.3
[INFO] [stderr]     Checking ed25519-dalek v3.0.0
[INFO] [stderr]     Checking hickory-proto v0.26.1
[INFO] [stderr]     Checking iroh-base v1.0.3
[INFO] [stderr]     Checking moka v0.12.15
[INFO] [stderr]     Checking mac-addr v0.3.0
[INFO] [stderr]     Checking http-body v1.1.0
[INFO] [stderr]     Checking http-body-util v0.1.4
[INFO] [stderr]     Checking xml-rs v0.8.28
[INFO] [stderr]     Checking identity-hash v0.1.0
[INFO] [stderr]     Checking sorted-index-buffer v0.2.1
[INFO] [stderr]     Checking iroh-metrics v1.0.1
[INFO] [stderr]     Checking xmltree v0.10.3
[INFO] [stderr]     Checking attohttpc v0.30.1
[INFO] [stderr]     Checking strum v0.28.0
[INFO] [stderr]     Checking num_enum v0.7.6
[INFO] [stderr]     Checking arc-swap v1.9.2
[INFO] [stderr]    Compiling syn-mid v0.5.4
[INFO] [stderr]     Checking simple-dns v0.11.3
[INFO] [stderr]    Compiling proc-macro-error v0.4.12
[INFO] [stderr]    Compiling iroh-relay v1.0.3
[INFO] [stderr]    Compiling proc-macro-hack v0.5.20+deprecated
[INFO] [stderr]     Checking simdutf8 v0.1.5
[INFO] [stderr]     Checking serde_bytes v0.11.19
[INFO] [stderr]     Checking lru v0.18.1
[INFO] [stderr]     Checking webpki-roots v1.0.9
[INFO] [stderr]     Checking seize v0.5.1
[INFO] [stderr]    Compiling iroh v1.0.3 (/opt/rustwide/workdir/vendor/iroh-1.0.3)
[INFO] [stderr]     Checking papaya v0.2.4
[INFO] [stderr]    Compiling ref-cast-impl v1.0.26
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]     Checking regex-automata v0.4.16
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]     Checking inplace-vec-builder v0.1.1
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]     Checking ref-cast v1.0.26
[INFO] [stderr]    Compiling nix v0.31.3
[INFO] [stderr]    Compiling redb v4.1.0
[INFO] [stderr]     Checking genawaiter-macro v0.99.1
[INFO] [stderr]     Checking binary-merge v0.1.2
[INFO] [stderr]     Checking range-collections v0.4.6
[INFO] [stderr]    Compiling genawaiter-proc-macro v0.99.1
[INFO] [stderr]     Checking clap_builder v4.6.2
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking rustls-platform-verifier v0.7.0
[INFO] [stderr]     Checking noq-proto v1.1.0 (/opt/rustwide/workdir/vendor/noq-proto-1.1.0)
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]     Checking genawaiter v0.99.1
[INFO] [stderr]    Compiling tun v0.8.14
[INFO] [stderr]     Checking rmp v0.8.15
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]    Compiling irpc-derive v0.17.0
[INFO] [stderr]     Checking positioned-io v0.3.5
[INFO] [stderr]    Compiling iroh-blobs v0.103.0
[INFO] [stderr]     Checking tokio-util v0.7.19
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking netlink-sys v0.8.8
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking netlink-proto v0.12.0
[INFO] [stderr]     Checking backon v1.6.0
[INFO] [stderr]     Checking iroh-io v0.6.2
[INFO] [stderr]     Checking h2 v0.4.16
[INFO] [stderr]     Checking n0-watcher v1.0.0
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking tokio-stream v0.1.19
[INFO] [stderr]     Checking tokio-websockets v0.13.3
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking clap v4.6.4
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking bao-tree v0.16.0
[INFO] [stderr]     Checking irpc v0.17.0
[INFO] [stderr]     Checking reflink-copy v0.1.30
[INFO] [stderr]     Checking rmp-serde v1.3.1
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking iroh-tickets v1.0.0
[INFO] [stderr]     Checking clocksource v0.8.3
[INFO] [stderr]    Compiling nested_enum_utils v0.2.3
[INFO] [stderr]     Checking netlink-packet-route v0.30.0
[INFO] [stderr]     Checking toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking serde_spanned v1.1.1
[INFO] [stderr]     Checking bs58 v0.5.1
[INFO] [stderr]    Compiling tetron v0.11.3 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking symlink v0.1.0
[INFO] [stderr]     Checking toml v1.1.3+spec-1.1.0
[INFO] [stderr]     Checking dashmap v6.2.1
[INFO] [stderr]     Checking tracing-appender v0.2.5
[INFO] [stderr]     Checking ratelimit v0.10.1
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking dirs v6.0.0
[INFO] [stderr]     Checking clap_complete v4.6.7
[INFO] [stderr]     Checking smol_str v0.3.6
[INFO] [stderr]     Checking bytesize v2.4.2
[INFO] [stderr]     Checking hyper v1.11.0
[INFO] [stderr]     Checking hickory-net v0.26.1
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking hickory-resolver v0.26.1
[INFO] [stderr]     Checking rtnetlink v0.21.0
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking igd-next v0.17.1
[INFO] [stderr]     Checking reqwest v0.13.4
[INFO] [stderr]     Checking portmapper v0.19.1
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> vendor/iroh-1.0.3/src/endpoint/bind.rs:235:1
[INFO] [stdout]     |
[INFO] [stdout] 235 | #[stack_error(derive, add_meta, from_sources)]
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     | |
[INFO] [stdout]     | unreachable expression
[INFO] [stdout]     | any code following this expression is unreachable
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the derive macro `::n0_error::StackError` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking iroh-util v0.6.0
[INFO] [stderr]     Checking tetron-proto v0.11.3 (/opt/rustwide/workdir/tetron-proto)
[INFO] [stderr]  Documenting tetron v0.11.3 (/opt/rustwide/workdir)
[INFO] [stdout] warning: public documentation for `daemon` links to private item `ProtocolRouter`
[INFO] [stdout]  --> src/daemon/mod.rs:2:64
[INFO] [stdout]   |
[INFO] [stdout] 2 | //! [`Endpoint`], the TUN device, the [`PeerTable`], and the [`ProtocolRouter`],
[INFO] [stdout]   |                                                                ^^^^^^^^^^^^^^ this item is private
[INFO] [stdout]   |
[INFO] [stdout]   = note: this link resolves only because you passed `--document-private-items`, but will break without
[INFO] [stdout]   = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: public documentation for `daemon` links to private item `MeshManager::active`
[INFO] [stdout]   --> src/daemon/mod.rs:20:17
[INFO] [stdout]    |
[INFO] [stdout] 20 | //!   others; [`MeshManager::active`] now only seeds a brand-new network's
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^ this item is private
[INFO] [stdout]    |
[INFO] [stdout]    = note: this link resolves only because you passed `--document-private-items`, but will break without
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `MeshManager`
[INFO] [stdout]  --> src/daemon/mesh/mod.rs:1:7
[INFO] [stdout]   |
[INFO] [stdout] 1 | //! [`MeshManager`]'s IPC operations, split by domain. Each submodule holds an
[INFO] [stdout]   |       ^^^^^^^^^^^ no item named `MeshManager` in scope
[INFO] [stdout]   |
[INFO] [stdout]   = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout]   = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `ControlGate`
[INFO] [stdout]    --> src/daemon/mesh/join.rs:732:46
[INFO] [stdout]     |
[INFO] [stdout] 732 | /// off the coordinator connection under a [`ControlGate`] rate limit and applies
[INFO] [stdout]     |                                              ^^^^^^^^^^^ no item named `ControlGate` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `serve_ipc`
[INFO] [stdout]    --> src/daemon/mod.rs:449:49
[INFO] [stdout]     |
[INFO] [stdout] 449 |     /// Promotion-channel receiver drained by [`serve_ipc`]. Stored here so the
[INFO] [stdout]     |                                                 ^^^^^^^^^ no item named `serve_ipc` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `serve_ipc`
[INFO] [stdout]    --> src/daemon/mod.rs:480:24
[INFO] [stdout]     |
[INFO] [stdout] 480 |     /// daemon loop ([`serve_ipc`]) drains it into
[INFO] [stdout]     |                        ^^^^^^^^^ no item named `serve_ipc` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `serve_ipc`
[INFO] [stdout]    --> src/daemon/mod.rs:485:52
[INFO] [stdout]     |
[INFO] [stdout] 485 |     /// Self-removal-channel receiver drained by [`serve_ipc`]. Mirrors
[INFO] [stdout]     |                                                    ^^^^^^^^^ no item named `serve_ipc` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `serve_ipc`
[INFO] [stdout]    --> src/daemon/mod.rs:492:29
[INFO] [stdout]     |
[INFO] [stdout] 492 |     /// main daemon loop ([`serve_ipc`]) drains it into
[INFO] [stdout]     |                             ^^^^^^^^^ no item named `serve_ipc` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `transport::MESH_PROTOCOL_VERSION`
[INFO] [stdout]   --> src/dht.rs:68:18
[INFO] [stdout]    |
[INFO] [stdout] 68 | /// (`m,<v>` = [`transport::MESH_PROTOCOL_VERSION`]). The version lets a joiner
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `transport` in scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: public documentation for `resolve_network_packet` links to private item `RESOLVE_TIMEOUT`
[INFO] [stdout]    --> src/dht.rs:188:51
[INFO] [stdout]     |
[INFO] [stdout] 188 | /// chain (`{e:#}`), and it caps the resolve at [`RESOLVE_TIMEOUT`] so a dead
[INFO] [stdout]     |                                                   ^^^^^^^^^^^^^^^ this item is private
[INFO] [stdout]     |
[INFO] [stdout]     = note: this link resolves only because you passed `--document-private-items`, but will break without
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `DaemonState::attach_tun`
[INFO] [stdout]    --> src/forward.rs:232:11
[INFO] [stdout]     |
[INFO] [stdout] 232 |     /// [`DaemonState::attach_tun`].
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^ no item named `DaemonState` in scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `fragment_ipv6`
[INFO] [stdout]    --> src/packet.rs:310:7
[INFO] [stdout]     |
[INFO] [stdout] 310 | /// [`fragment_ipv6`]). Its top nibble (0xF) can never collide with a real IP
[INFO] [stdout]     |       ^^^^^^^^^^^^^ no item named `fragment_ipv6` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `fragment_ipv6`
[INFO] [stdout]    --> src/packet.rs:319:50
[INFO] [stdout]     |
[INFO] [stdout] 319 | /// Mirrors `tun::TUN_MTU` (1280) -- no packet [`fragment_ipv6`] ever produced
[INFO] [stdout]     |                                                  ^^^^^^^^^^^^^ no item named `fragment_ipv6` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `fragment_ipv6`
[INFO] [stdout]    --> src/packet.rs:515:48
[INFO] [stdout]     |
[INFO] [stdout] 515 | /// Per-peer-connection reassembly state for [`fragment_ipv6`] envelopes. One
[INFO] [stdout]     |                                                ^^^^^^^^^^^^^ no item named `fragment_ipv6` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `connect_to_peer_with_alpn`
[INFO] [stdout]   --> src/peercache.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 | //! On startup, the cache is loaded and [`connect_to_peer_with_alpn`] checks it
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `connect_to_peer_with_alpn` in scope
[INFO] [stdout]    |
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `connect_to_peer_with_alpn`
[INFO] [stdout]    --> src/peercache.rs:151:7
[INFO] [stdout]     |
[INFO] [stdout] 151 | /// [`connect_to_peer_with_alpn`] in `transport.rs`.
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `connect_to_peer_with_alpn` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: public documentation for `GlobalRateLimiter` links to private item `crate::daemon::MeshCtx`
[INFO] [stdout]    --> src/ratelimit.rs:134:23
[INFO] [stdout]     |
[INFO] [stdout] 134 | /// every network's [`crate::daemon::MeshCtx`].
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^ this item is private
[INFO] [stdout]     |
[INFO] [stdout]     = note: this link resolves only because you passed `--document-private-items`, but will break without
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `OnceLock`
[INFO] [stdout]   --> src/stats.rs:85:29
[INFO] [stdout]    |
[INFO] [stdout] 85 | /// Dropped into a global [`OnceLock`] at daemon start so
[INFO] [stdout]    |                             ^^^^^^^^ no item named `OnceLock` in scope
[INFO] [stdout]    |
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `run_daemon`
[INFO] [stdout]    --> src/stats.rs:168:53
[INFO] [stdout]     |
[INFO] [stdout] 168 | /// before any packet flow starts (typically from [`run_daemon`]) and only once.
[INFO] [stdout]     |                                                     ^^^^^^^^^^ no item named `run_daemon` in scope
[INFO] [stdout]     |
[INFO] [stdout]     = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `forward::run_mesh`
[INFO] [stdout]   --> src/tun.rs:59:45
[INFO] [stdout]    |
[INFO] [stdout] 59 | /// Read half of the TUN device. Owned by [`forward::run_mesh`].
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^^^^ no item named `forward` in scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `forward::spawn_tun_writer`
[INFO] [stdout]   --> src/tun.rs:65:46
[INFO] [stdout]    |
[INFO] [stdout] 65 | /// Write half of the TUN device. Owned by [`forward::spawn_tun_writer`].
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `forward` in scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:178:1
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub mod cidr_opt {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `arrays that a raw `(Ipv4Addr, u8)` tuple would trip.`
[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/addressing.rs:178:1
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub mod cidr_opt {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Serde helper (de)serializing `Option<Subnet>` as an optional CIDR string`
[INFO] [stdout]     = help: ends near `Serde helper (de)serializing `Option<Subnet>` as an optional CIDR string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:279:1
[INFO] [stdout]     |
[INFO] [stdout] 279 | pub const IPV6_NETWORK_PREFIX_LEN: u8 = 56;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `the CIDR block shared by every member of one network (IPV6-003).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:279:1
[INFO] [stdout]     |
[INFO] [stdout] 279 | pub const IPV6_NETWORK_PREFIX_LEN: u8 = 56;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Bit width of the fixed `0x02` tag plus [`derive_ipv6`]'s network-prefix —`
[INFO] [stdout]     = help: ends near `Bit width of the fixed `0x02` tag plus [`derive_ipv6`]'s network-prefix —`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub type Subnet = (Ipv4Addr, u8);
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `[`crate::membership::GroupBlob`] / config means "use [`default_subnet`]".`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub type Subnet = (Ipv4Addr, u8);
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `The overlay subnet as `(base address, prefix length)`. `None` in a`
[INFO] [stdout]    = help: ends near `The overlay subnet as `(base address, prefix length)`. `None` in a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:243:1
[INFO] [stdout]     |
[INFO] [stdout] 243 | / pub fn assign_ip(members: &MemberList, identity: &EndpointId, subnet: Subnet) -> (Ipv4Addr, u32) {
[INFO] [stdout] 244 | |     let mut index = 0u32;
[INFO] [stdout] 245 | |     loop {
[INFO] [stdout] 246 | |         let ip = derive_ip_with_index(identity, index, subnet);
[INFO] [stdout] ...   |
[INFO] [stdout] 252 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `Finds the lowest collision index whose derived IPv4 is free in `members`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:243:1
[INFO] [stdout]     |
[INFO] [stdout] 243 | / pub fn assign_ip(members: &MemberList, identity: &EndpointId, subnet: Subnet) -> (Ipv4Addr, u32) {
[INFO] [stdout] 244 | |     let mut index = 0u32;
[INFO] [stdout] 245 | |     loop {
[INFO] [stdout] 246 | |         let ip = derive_ip_with_index(identity, index, subnet);
[INFO] [stdout] ...   |
[INFO] [stdout] 252 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Finds the lowest collision index whose derived IPv4 is free in `members`.`
[INFO] [stdout]     = help: ends near `Finds the lowest collision index whose derived IPv4 is free in `members`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | / pub fn default_subnet() -> Subnet {
[INFO] [stdout] 25 | |     (Ipv4Addr::new(10, 88, 0, 0), 24)
[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 `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `enough for personal/team meshes.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | / pub fn default_subnet() -> Subnet {
[INFO] [stdout] 25 | |     (Ipv4Addr::new(10, 88, 0, 0), 24)
[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 `The default overlay subnet when none is configured: 10.88.0.0/24, an`
[INFO] [stdout]    = help: ends near `The default overlay subnet when none is configured: 10.88.0.0/24, an`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:203:1
[INFO] [stdout]     |
[INFO] [stdout] 203 | / pub fn derive_ip(identity: &EndpointId, subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 204 | |     derive_ip_with_index(identity, 0, subnet)
[INFO] [stdout] 205 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `(network address and TUN gateway).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:203:1
[INFO] [stdout]     |
[INFO] [stdout] 203 | / pub fn derive_ip(identity: &EndpointId, subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 204 | |     derive_ip_with_index(identity, 0, subnet)
[INFO] [stdout] 205 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Derives a deterministic virtual IP from an [`EndpointId`] using FNV-1a.`
[INFO] [stdout]     = help: ends near `Derives a deterministic virtual IP from an [`EndpointId`] using FNV-1a.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:211:1
[INFO] [stdout]     |
[INFO] [stdout] 211 | / pub fn derive_ip_with_index(identity: &EndpointId, index: u32, subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 212 | |     let input = if index == 0 {
[INFO] [stdout] 213 | |         identity.to_string()
[INFO] [stdout] 214 | |     } else {
[INFO] [stdout] ...   |
[INFO] [stdout] 235 | |     Ipv4Addr::from(base | host_bits)
[INFO] [stdout] 236 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `resolves collisions independently.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:211:1
[INFO] [stdout]     |
[INFO] [stdout] 211 | / pub fn derive_ip_with_index(identity: &EndpointId, index: u32, subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 212 | |     let input = if index == 0 {
[INFO] [stdout] 213 | |         identity.to_string()
[INFO] [stdout] 214 | |     } else {
[INFO] [stdout] ...   |
[INFO] [stdout] 235 | |     Ipv4Addr::from(base | host_bits)
[INFO] [stdout] 236 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Derives a virtual IPv4 with a collision index. Index 0 produces the same`
[INFO] [stdout]     = help: ends near `Derives a virtual IPv4 with a collision index. Index 0 produces the same`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:266:1
[INFO] [stdout]     |
[INFO] [stdout] 266 | / pub fn derive_ipv6(identity: &EndpointId, network: &EndpointId) -> Ipv6Addr {
[INFO] [stdout] 267 | |     let prefix = ipv6_network_prefix(network);
[INFO] [stdout] 268 | |     let peer_hash = blake3::hash(format!("{identity}:{network}").as_bytes());
[INFO] [stdout] 269 | |     let peer_bytes = peer_hash.as_bytes();
[INFO] [stdout] ...   |
[INFO] [stdout] 274 | |     Ipv6Addr::from(octets)
[INFO] [stdout] 275 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `admission).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:266:1
[INFO] [stdout]     |
[INFO] [stdout] 266 | / pub fn derive_ipv6(identity: &EndpointId, network: &EndpointId) -> Ipv6Addr {
[INFO] [stdout] 267 | |     let prefix = ipv6_network_prefix(network);
[INFO] [stdout] 268 | |     let peer_hash = blake3::hash(format!("{identity}:{network}").as_bytes());
[INFO] [stdout] 269 | |     let peer_bytes = peer_hash.as_bytes();
[INFO] [stdout] ...   |
[INFO] [stdout] 274 | |     Ipv6Addr::from(octets)
[INFO] [stdout] 275 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Derives a stable, per-network IPv6 address from an [`EndpointId`] in the`
[INFO] [stdout]     = help: ends near `Derives a stable, per-network IPv6 address from an [`EndpointId`] in the`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:65:1
[INFO] [stdout]    |
[INFO] [stdout] 65 | / pub fn ip_in_subnet(ip: Ipv4Addr, subnet: Subnet) -> bool {
[INFO] [stdout] 66 | |     let (base_addr, prefix) = subnet;
[INFO] [stdout] 67 | |     let host_mask = subnet_host_mask(prefix);
[INFO] [stdout] 68 | |     let base = u32::from(base_addr) & !host_mask;
[INFO] [stdout] 69 | |     (u32::from(ip) & !host_mask) == base
[INFO] [stdout] 70 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `PTR/reverse-lookup range check, so the two can never diverge (SUBNET-008).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:65:1
[INFO] [stdout]    |
[INFO] [stdout] 65 | / pub fn ip_in_subnet(ip: Ipv4Addr, subnet: Subnet) -> bool {
[INFO] [stdout] 66 | |     let (base_addr, prefix) = subnet;
[INFO] [stdout] 67 | |     let host_mask = subnet_host_mask(prefix);
[INFO] [stdout] 68 | |     let base = u32::from(base_addr) & !host_mask;
[INFO] [stdout] 69 | |     (u32::from(ip) & !host_mask) == base
[INFO] [stdout] 70 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `True if `ip` falls within `subnet` (network bits match). The single`
[INFO] [stdout]    = help: ends near `True if `ip` falls within `subnet` (network bits match). The single`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:299:1
[INFO] [stdout]     |
[INFO] [stdout] 299 | / pub fn ipv6_in_network(addr: Ipv6Addr, network: &EndpointId) -> bool {
[INFO] [stdout] 300 | |     let prefix_bytes = (IPV6_NETWORK_PREFIX_LEN / 8) as usize;
[INFO] [stdout] 301 | |     addr.octets()[..prefix_bytes] == ipv6_network_prefix(network).octets()[..prefix_bytes]
[INFO] [stdout] 302 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `is a whole number of bytes, so comparing the first 7 octets is exact.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:299:1
[INFO] [stdout]     |
[INFO] [stdout] 299 | / pub fn ipv6_in_network(addr: Ipv6Addr, network: &EndpointId) -> bool {
[INFO] [stdout] 300 | |     let prefix_bytes = (IPV6_NETWORK_PREFIX_LEN / 8) as usize;
[INFO] [stdout] 301 | |     addr.octets()[..prefix_bytes] == ipv6_network_prefix(network).octets()[..prefix_bytes]
[INFO] [stdout] 302 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Whether `addr` falls within `network`'s own `/56` (PATHBLEED-STATUS-001):`
[INFO] [stdout]     = help: ends near `Whether `addr` falls within `network`'s own `/56` (PATHBLEED-STATUS-001):`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:285:1
[INFO] [stdout]     |
[INFO] [stdout] 285 | / pub fn ipv6_network_prefix(network: &EndpointId) -> Ipv6Addr {
[INFO] [stdout] 286 | |     let hash = blake3::hash(network.to_string().as_bytes());
[INFO] [stdout] 287 | |     let bytes = hash.as_bytes();
[INFO] [stdout] 288 | |     let octets: [u8; 16] = [
[INFO] [stdout] ...   |
[INFO] [stdout] 291 | |     Ipv6Addr::from(octets)
[INFO] [stdout] 292 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `TUN device gets (`crate::tun::route_peer_range`).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:285:1
[INFO] [stdout]     |
[INFO] [stdout] 285 | / pub fn ipv6_network_prefix(network: &EndpointId) -> Ipv6Addr {
[INFO] [stdout] 286 | |     let hash = blake3::hash(network.to_string().as_bytes());
[INFO] [stdout] 287 | |     let bytes = hash.as_bytes();
[INFO] [stdout] 288 | |     let octets: [u8; 16] = [
[INFO] [stdout] ...   |
[INFO] [stdout] 291 | |     Ipv6Addr::from(octets)
[INFO] [stdout] 292 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `The `/56` network-prefix address for `network` (IPV6-001/003): fixed`
[INFO] [stdout]     = help: ends near `The `/56` network-prefix address for `network` (IPV6-001/003): fixed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:133:1
[INFO] [stdout]     |
[INFO] [stdout] 133 | / pub fn next_available_subnet(candidate: Subnet, existing: impl Iterator<Item = Subnet>) -> Subnet {
[INFO] [stdout] 134 | |     let existing: Vec<Subnet> = existing.collect();
[INFO] [stdout] 135 | |     let (base, prefix) = candidate;
[INFO] [stdout] 136 | |     let block_size = 1u32.checked_shl(u32::from(32 - prefix)).unwrap_or(0);
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |     attempt
[INFO] [stdout] 149 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `again if it cares.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:133:1
[INFO] [stdout]     |
[INFO] [stdout] 133 | / pub fn next_available_subnet(candidate: Subnet, existing: impl Iterator<Item = Subnet>) -> Subnet {
[INFO] [stdout] 134 | |     let existing: Vec<Subnet> = existing.collect();
[INFO] [stdout] 135 | |     let (base, prefix) = candidate;
[INFO] [stdout] 136 | |     let block_size = 1u32.checked_shl(u32::from(32 - prefix)).unwrap_or(0);
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |     attempt
[INFO] [stdout] 149 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Finds a subnet that doesn't overlap any of `existing`, starting from`
[INFO] [stdout]     = help: ends near `Finds a subnet that doesn't overlap any of `existing`, starting from`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:158:1
[INFO] [stdout]     |
[INFO] [stdout] 158 | / pub fn parse_cidr(s: &str) -> Result<Subnet> {
[INFO] [stdout] 159 | |     let (base, prefix) = s
[INFO] [stdout] 160 | |         .split_once('/')
[INFO] [stdout] 161 | |         .ok_or_else(|| anyhow::anyhow!("subnet must be CIDR base/prefix, e.g. 10.88.0.0/16"))?;
[INFO] [stdout] ...   |
[INFO] [stdout] 171 | |     Ok((base, prefix))
[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 `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `Parse a CIDR string (e.g. `"10.88.0.0/16"`) into a [`Subnet`].`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:158:1
[INFO] [stdout]     |
[INFO] [stdout] 158 | / pub fn parse_cidr(s: &str) -> Result<Subnet> {
[INFO] [stdout] 159 | |     let (base, prefix) = s
[INFO] [stdout] 160 | |         .split_once('/')
[INFO] [stdout] 161 | |         .ok_or_else(|| anyhow::anyhow!("subnet must be CIDR base/prefix, e.g. 10.88.0.0/16"))?;
[INFO] [stdout] ...   |
[INFO] [stdout] 171 | |     Ok((base, prefix))
[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 `Parse a CIDR string (e.g. `"10.88.0.0/16"`) into a [`Subnet`].`
[INFO] [stdout]     = help: ends near `Parse a CIDR string (e.g. `"10.88.0.0/16"`) into a [`Subnet`].`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:30:1
[INFO] [stdout]    |
[INFO] [stdout] 30 | / pub fn resolve_subnet(subnet: Option<Subnet>) -> Subnet {
[INFO] [stdout] 31 | |     subnet.unwrap_or_else(default_subnet)
[INFO] [stdout] 32 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `[`default_subnet`].`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:30:1
[INFO] [stdout]    |
[INFO] [stdout] 30 | / pub fn resolve_subnet(subnet: Option<Subnet>) -> Subnet {
[INFO] [stdout] 31 | |     subnet.unwrap_or_else(default_subnet)
[INFO] [stdout] 32 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Resolve an optional configured subnet to a concrete one, falling back to`
[INFO] [stdout]    = help: ends near `Resolve an optional configured subnet to a concrete one, falling back to`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:39:1
[INFO] [stdout]    |
[INFO] [stdout] 39 | / pub fn subnet_change_warning(chosen: Subnet, live: Subnet) -> Option<String> {
[INFO] [stdout] 40 | |     (chosen != live).then(|| {
[INFO] [stdout] 41 | |         let (b, p) = chosen;
[INFO] [stdout] 42 | |         format!(
[INFO] [stdout] ...  |
[INFO] [stdout] 45 | |     })
[INFO] [stdout] 46 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `match (nothing to announce).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:39:1
[INFO] [stdout]    |
[INFO] [stdout] 39 | / pub fn subnet_change_warning(chosen: Subnet, live: Subnet) -> Option<String> {
[INFO] [stdout] 40 | |     (chosen != live).then(|| {
[INFO] [stdout] 41 | |         let (b, p) = chosen;
[INFO] [stdout] 42 | |         format!(
[INFO] [stdout] ...  |
[INFO] [stdout] 45 | |     })
[INFO] [stdout] 46 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `SUBNET-014: the node runs a single TUN whose subnet is fixed at daemon`
[INFO] [stdout]    = help: ends near `SUBNET-014: the node runs a single TUN whose subnet is fixed at daemon`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:152:1
[INFO] [stdout]     |
[INFO] [stdout] 152 | / pub fn subnet_gateway(subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 153 | |     let (base, _) = subnet;
[INFO] [stdout] 154 | |     Ipv4Addr::from(u32::from(base).wrapping_add(1))
[INFO] [stdout] 155 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `The gateway address for a subnet: base + 1 (the `.1` the TUN takes).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:152:1
[INFO] [stdout]     |
[INFO] [stdout] 152 | / pub fn subnet_gateway(subnet: Subnet) -> Ipv4Addr {
[INFO] [stdout] 153 | |     let (base, _) = subnet;
[INFO] [stdout] 154 | |     Ipv4Addr::from(u32::from(base).wrapping_add(1))
[INFO] [stdout] 155 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `The gateway address for a subnet: base + 1 (the `.1` the TUN takes).`
[INFO] [stdout]     = help: ends near `The gateway address for a subnet: base + 1 (the `.1` the TUN takes).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:49:1
[INFO] [stdout]    |
[INFO] [stdout] 49 | / pub fn subnet_host_mask(prefix: u8) -> u32 {
[INFO] [stdout] 50 | |     if prefix >= 32 {
[INFO] [stdout] 51 | |         0
[INFO] [stdout] 52 | |     } else {
[INFO] [stdout] ...  |
[INFO] [stdout] 55 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `Host-bit mask for a prefix length: the low `32 - prefix` bits set.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:49:1
[INFO] [stdout]    |
[INFO] [stdout] 49 | / pub fn subnet_host_mask(prefix: u8) -> u32 {
[INFO] [stdout] 50 | |     if prefix >= 32 {
[INFO] [stdout] 51 | |         0
[INFO] [stdout] 52 | |     } else {
[INFO] [stdout] ...  |
[INFO] [stdout] 55 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Host-bit mask for a prefix length: the low `32 - prefix` bits set.`
[INFO] [stdout]    = help: ends near `Host-bit mask for a prefix length: the low `32 - prefix` bits set.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:58:1
[INFO] [stdout]    |
[INFO] [stdout] 58 | / pub fn subnet_netmask(prefix: u8) -> Ipv4Addr {
[INFO] [stdout] 59 | |     Ipv4Addr::from(!subnet_host_mask(prefix))
[INFO] [stdout] 60 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]    = help: ends near `Dotted-quad netmask for a prefix length (e.g. /10 -> 255.192.0.0).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/addressing.rs:58:1
[INFO] [stdout]    |
[INFO] [stdout] 58 | / pub fn subnet_netmask(prefix: u8) -> Ipv4Addr {
[INFO] [stdout] 59 | |     Ipv4Addr::from(!subnet_host_mask(prefix))
[INFO] [stdout] 60 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Dotted-quad netmask for a prefix length (e.g. /10 -> 255.192.0.0).`
[INFO] [stdout]    = help: ends near `Dotted-quad netmask for a prefix length (e.g. /10 -> 255.192.0.0).`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:113:1
[INFO] [stdout]     |
[INFO] [stdout] 113 | / pub fn subnets_overlap(a: Subnet, b: Subnet) -> bool {
[INFO] [stdout] 114 | |     let (a_addr, a_prefix) = a;
[INFO] [stdout] 115 | |     let (b_addr, b_prefix) = b;
[INFO] [stdout] 116 | |     let host_mask = subnet_host_mask(a_prefix.min(b_prefix));
[INFO] [stdout] 117 | |     (u32::from(a_addr) & !host_mask) == (u32::from(b_addr) & !host_mask)
[INFO] [stdout] 118 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `do not overlap.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:113:1
[INFO] [stdout]     |
[INFO] [stdout] 113 | / pub fn subnets_overlap(a: Subnet, b: Subnet) -> bool {
[INFO] [stdout] 114 | |     let (a_addr, a_prefix) = a;
[INFO] [stdout] 115 | |     let (b_addr, b_prefix) = b;
[INFO] [stdout] 116 | |     let host_mask = subnet_host_mask(a_prefix.min(b_prefix));
[INFO] [stdout] 117 | |     (u32::from(a_addr) & !host_mask) == (u32::from(b_addr) & !host_mask)
[INFO] [stdout] 118 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `True if two IPv4 subnets share any address. Compares network bits at the`
[INFO] [stdout]     = help: ends near `True if two IPv4 subnets share any address. Compares network bits at the`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:84:1
[INFO] [stdout]     |
[INFO] [stdout]  84 | / pub fn validate_subnet_matches_roster<'a>(
[INFO] [stdout]  85 | |     subnet: Subnet,
[INFO] [stdout]  86 | |     roster: impl IntoIterator<Item = &'a Member>,
[INFO] [stdout]  87 | |     self_identity: &EndpointId,
[INFO] [stdout] ...   |
[INFO] [stdout] 106 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Overlay addressing (Subnet, IP derivation, IPv6) — moved to`
[INFO] [stdout]     = help: ends near `check against.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/addressing.rs:84:1
[INFO] [stdout]     |
[INFO] [stdout]  84 | / pub fn validate_subnet_matches_roster<'a>(
[INFO] [stdout]  85 | |     subnet: Subnet,
[INFO] [stdout]  86 | |     roster: impl IntoIterator<Item = &'a Member>,
[INFO] [stdout]  87 | |     self_identity: &EndpointId,
[INFO] [stdout] ...   |
[INFO] [stdout] 106 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Checks a resolved subnet against this identity's own already-recorded`
[INFO] [stdout]     = help: ends near `Checks a resolved subnet against this identity's own already-recorded`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/identity.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | / pub trait IdentityProvider: Send + Sync {
[INFO] [stdout] 60 | |     fn local_ip(&self) -> Ipv4Addr;
[INFO] [stdout] 61 | |     fn local_identity(&self) -> EndpointId;
[INFO] [stdout] 62 | |     fn derive_ip(&self, peer_identity: &EndpointId) -> Ipv4Addr;
[INFO] [stdout] 63 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Identity abstraction — moved to `crate::identity` (MODULARIZE-001);`
[INFO] [stdout]    = help: ends near `depend directly on iroh types.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/identity.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | / pub trait IdentityProvider: Send + Sync {
[INFO] [stdout] 60 | |     fn local_ip(&self) -> Ipv4Addr;
[INFO] [stdout] 61 | |     fn local_identity(&self) -> EndpointId;
[INFO] [stdout] 62 | |     fn derive_ip(&self, peer_identity: &EndpointId) -> Ipv4Addr;
[INFO] [stdout] 63 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Abstracts identity and IP derivation so the membership system doesn't`
[INFO] [stdout]    = help: ends near `Abstracts identity and IP derivation so the membership system doesn't`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/identity.rs:67:1
[INFO] [stdout]    |
[INFO] [stdout] 67 | / pub struct IrohIdentityProvider {
[INFO] [stdout] 68 | |     endpoint_id: EndpointId,
[INFO] [stdout] 69 | |     ip: Ipv4Addr,
[INFO] [stdout] 70 | |     /// The node's operative overlay subnet (from `AppConfig.subnet` at
[INFO] [stdout] ...  |
[INFO] [stdout] 73 | |     subnet: Subnet,
[INFO] [stdout] 74 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Identity abstraction — moved to `crate::identity` (MODULARIZE-001);`
[INFO] [stdout]    = help: ends near `[`IdentityProvider`] backed by an iroh [`EndpointId`].`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/invite.rs:77:1
[INFO] [stdout]    |
[INFO] [stdout] 77 | / pub struct InviteEntry {
[INFO] [stdout] 78 | |     /// Short human id: the first 8 hex chars of the secret hash.
[INFO] [stdout] 79 | |     pub id: String,
[INFO] [stdout] 80 | |     /// Unix seconds when minted.
[INFO] [stdout] ...  |
[INFO] [stdout] 86 | |     pub revoked: bool,
[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 `Invite/reusable-key record types — moved to `crate::invite``
[INFO] [stdout]    = help: ends near `A single-use invite entry carried in the signed `GroupBlob`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/invite.rs:77:1
[INFO] [stdout]    |
[INFO] [stdout] 77 | / pub struct InviteEntry {
[INFO] [stdout] 78 | |     /// Short human id: the first 8 hex chars of the secret hash.
[INFO] [stdout] 79 | |     pub id: String,
[INFO] [stdout] 80 | |     /// Unix seconds when minted.
[INFO] [stdout] ...  |
[INFO] [stdout] 86 | |     pub revoked: bool,
[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 `A single-use invite entry carried in the signed `GroupBlob`.`
[INFO] [stdout]    = help: ends near `A single-use invite entry carried in the signed `GroupBlob`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/invite.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 | / pub struct ReusableKey {
[INFO] [stdout] 36 | |     /// Short human id: the first 8 hex chars of the secret hash.
[INFO] [stdout] 37 | |     pub id: String,
[INFO] [stdout] 38 | |     /// Unix seconds when minted.
[INFO] [stdout] ...  |
[INFO] [stdout] 43 | |     pub revoked: bool,
[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 `Invite/reusable-key record types — moved to `crate::invite``
[INFO] [stdout]    = help: ends near `holder can verify-and-admit and revocation propagates to every admin.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/invite.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 | / pub struct ReusableKey {
[INFO] [stdout] 36 | |     /// Short human id: the first 8 hex chars of the secret hash.
[INFO] [stdout] 37 | |     pub id: String,
[INFO] [stdout] 38 | |     /// Unix seconds when minted.
[INFO] [stdout] ...  |
[INFO] [stdout] 43 | |     pub revoked: bool,
[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 `A reusable, expiring join key (Tailscale auth-key analog). Only the`
[INFO] [stdout]    = help: ends near `A reusable, expiring join key (Tailscale auth-key analog). Only the`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not document `tetron`
[INFO] running `Command { std: "docker" "inspect" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff", kill_on_drop: false }`
[INFO] [stdout] 6df71235ec14f7575078a3bb980cb73b5344872dabe1a919cc7ba91e3a499fff
