[INFO] cloning repository https://github.com/dhofheinz/skim [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/dhofheinz/skim" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdhofheinz%2Fskim", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdhofheinz%2Fskim'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b0ca2471935fce87c1fe1f72f08b2188f5b18b57 [INFO] testing dhofheinz/skim against try#8da20828b6ea601dfd8e2448cb50ace88876bd78 for pr-150933 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdhofheinz%2Fskim" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/dhofheinz/skim [INFO] finished tweaking git repo https://github.com/dhofheinz/skim [INFO] tweaked toml for git repo https://github.com/dhofheinz/skim written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/dhofheinz/skim on toolchain 8da20828b6ea601dfd8e2448cb50ace88876bd78 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/dhofheinz/skim 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" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 5cba7db729a489ee2fc9d1ff1fc8a8028c4b80737c6ffbb0b96d1bab0e1af21d [INFO] running `Command { std: "docker" "start" "-a" "5cba7db729a489ee2fc9d1ff1fc8a8028c4b80737c6ffbb0b96d1bab0e1af21d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "5cba7db729a489ee2fc9d1ff1fc8a8028c4b80737c6ffbb0b96d1bab0e1af21d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5cba7db729a489ee2fc9d1ff1fc8a8028c4b80737c6ffbb0b96d1bab0e1af21d", kill_on_drop: false }` [INFO] [stdout] 5cba7db729a489ee2fc9d1ff1fc8a8028c4b80737c6ffbb0b96d1bab0e1af21d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] ce1355d6ca9fa1ccce16ae0594b9900e096ba5e8bc8fa72e5c0aa1894998608c [INFO] running `Command { std: "docker" "start" "-a" "ce1355d6ca9fa1ccce16ae0594b9900e096ba5e8bc8fa72e5c0aa1894998608c", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling bytes v1.11.1 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Compiling critical-section v1.2.0 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling socket2 v0.6.2 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling typenum v1.19.0 [INFO] [stderr] Compiling dunce v1.0.5 [INFO] [stderr] Compiling fs_extra v1.3.0 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling zmij v1.0.19 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling cc v1.2.55 [INFO] [stderr] Compiling aws-lc-rs v1.15.4 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling zerocopy v0.8.38 [INFO] [stderr] Compiling crc v3.4.0 [INFO] [stderr] Compiling http v1.4.0 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling concurrent-queue v2.5.0 [INFO] [stderr] Compiling hashlink v0.10.0 [INFO] [stderr] Compiling once_cell v1.21.3 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling event-listener v5.4.1 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling futures-intrusive v0.5.0 [INFO] [stderr] Compiling crossbeam-queue v0.3.12 [INFO] [stderr] Compiling rand_core v0.9.5 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling regex-syntax v0.8.9 [INFO] [stderr] Compiling flume v0.11.1 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling uuid v1.20.0 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling tinyvec v1.10.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling crossbeam-channel v0.5.15 [INFO] [stderr] Compiling crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling aws-lc-sys v0.37.0 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling data-encoding v2.10.0 [INFO] [stderr] Compiling linux-raw-sys v0.4.15 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling block-buffer v0.10.4 [INFO] [stderr] Compiling dotenvy v0.15.7 [INFO] [stderr] Compiling tagptr v0.2.0 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling hex v0.4.3 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling moka v0.12.12 [INFO] [stderr] Compiling is-docker v0.2.0 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling pulldown-cmark v0.12.2 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling iana-time-zone v0.1.65 [INFO] [stderr] Compiling resolv-conf v0.7.6 [INFO] [stderr] Compiling clap_builder v4.5.57 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling is-wsl v0.4.0 [INFO] [stderr] Compiling getopts v0.2.24 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling pulldown-cmark-escape v0.11.0 [INFO] [stderr] Compiling pathdiff v0.2.3 [INFO] [stderr] Compiling siphasher v1.0.2 [INFO] [stderr] Compiling open v5.3.3 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Compiling secrecy v0.10.3 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling enum-as-inner v0.6.1 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling clap v4.5.57 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling chrono v0.4.43 [INFO] [stderr] Compiling mediatype v0.19.20 [INFO] [stderr] Compiling quick-xml v0.37.5 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling futures v0.3.31 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling feed-rs v2.3.1 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling hickory-proto v0.25.2 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling hickory-resolver v0.25.2 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Compiling rustls-webpki v0.103.9 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling rustls-platform-verifier v0.6.2 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling reqwest v0.13.1 [INFO] [stderr] Compiling skim v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 03s [INFO] running `Command { std: "docker" "inspect" "ce1355d6ca9fa1ccce16ae0594b9900e096ba5e8bc8fa72e5c0aa1894998608c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ce1355d6ca9fa1ccce16ae0594b9900e096ba5e8bc8fa72e5c0aa1894998608c", kill_on_drop: false }` [INFO] [stdout] ce1355d6ca9fa1ccce16ae0594b9900e096ba5e8bc8fa72e5c0aa1894998608c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e19f4a8136bd2c0361c61211d5f8ffb976c3ae1e6b6e2aa813cf6fc9ab9fa3af [INFO] running `Command { std: "docker" "start" "-a" "e19f4a8136bd2c0361c61211d5f8ffb976c3ae1e6b6e2aa813cf6fc9ab9fa3af", kill_on_drop: false }` [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling tempfile v3.24.0 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling num_cpus v1.17.0 [INFO] [stderr] Compiling quick-error v1.2.3 [INFO] [stderr] Compiling deadpool-runtime v0.1.4 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling assert-json-diff v2.0.2 [INFO] [stderr] Compiling diff v0.1.13 [INFO] [stderr] Compiling unarray v0.1.4 [INFO] [stderr] Compiling pretty_assertions v1.4.1 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling rusty-fork v0.3.1 [INFO] [stderr] Compiling proptest v1.9.0 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling hickory-proto v0.25.2 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling deadpool v0.12.3 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling hickory-resolver v0.25.2 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling wiremock v0.6.5 [INFO] [stderr] Compiling reqwest v0.13.1 [INFO] [stderr] Compiling skim v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 09s [INFO] running `Command { std: "docker" "inspect" "e19f4a8136bd2c0361c61211d5f8ffb976c3ae1e6b6e2aa813cf6fc9ab9fa3af", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e19f4a8136bd2c0361c61211d5f8ffb976c3ae1e6b6e2aa813cf6fc9ab9fa3af", kill_on_drop: false }` [INFO] [stdout] e19f4a8136bd2c0361c61211d5f8ffb976c3ae1e6b6e2aa813cf6fc9ab9fa3af [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 1410edea16a4e93a983eee4a940f796de8618b896de8779c931e0afcae37d10c [INFO] running `Command { std: "docker" "start" "-a" "1410edea16a4e93a983eee4a940f796de8618b896de8779c931e0afcae37d10c", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.58s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/skim-cd2f9960e7ebb65f) [INFO] [stdout] [INFO] [stdout] running 180 tests [INFO] [stdout] test storage::articles::tests::test_upsert_articles_insert ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_idempotent ... ok [INFO] [stdout] test storage::articles::tests::test_get_articles_pagination ... ok [INFO] [stdout] test storage::articles::tests::test_mark_article_read ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_empty_batch ... ok [INFO] [stdout] test storage::articles::tests::test_unread_counts_after_bulk_mark_read ... ok [INFO] [stdout] test storage::categories::tests::test_create_category ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed_empty ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_update_returns_zero ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed_idempotent ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_mixed_batch ... ok [INFO] [stdout] test storage::categories::tests::test_delete_category_orphans_children ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_trims_whitespace ... ok [INFO] [stdout] test storage::articles::tests::test_toggle_article_starred_twice ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_empty_name ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_whitespace_only ... ok [INFO] [stdout] test storage::categories::tests::test_delete_category_orphans_feeds ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_control_chars_only ... ok [INFO] [stdout] test storage::categories::tests::test_get_categories_tree_ordering ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_strips_control_chars ... ok [INFO] [stdout] test storage::articles::tests::test_toggle_article_starred ... ok [INFO] [stdout] test storage::categories::tests::test_max_nesting_depth ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_updates_metadata ... ok [INFO] [stdout] test storage::categories::tests::test_nested_categories ... ok [INFO] [stdout] test storage::feeds::tests::test_circuit_breaker_threshold_constant ... ok [INFO] [stdout] test storage::categories::tests::test_move_feed_to_category ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_rejects_empty_name ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_strips_control_chars ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_trims_whitespace ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_content ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_content_replace ... ok [INFO] [stdout] test storage::feeds::tests::test_batch_set_feed_errors_empty ... ok [INFO] [stdout] test storage::feeds::tests::test_batch_set_feed_errors ... ok [INFO] [stdout] test storage::content_cache::tests::test_get_expired_returns_none ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_empty_articles ... ok [INFO] [stdout] test storage::content_cache::tests::test_evict_expired ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_atomic ... ok [INFO] [stdout] test storage::content_cache::tests::test_prefetch_candidates ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_stats ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_resets_failures ... ok [INFO] [stdout] test storage::content_cache::tests::test_cascade_delete ... ok [INFO] [stdout] test storage::feeds::tests::test_rename_feed_db ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_for_export ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_for_export_empty ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_nonexistent_feed ... ok [INFO] [stdout] test storage::feeds::tests::test_reset_feed_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_increment_feed_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_get_active_feeds_filters_high_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_rename_nonexistent_feed ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_unread_counts ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_batch_chunking ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_upsert ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_feed_cleans_fts ... ok [INFO] [stdout] test storage::content_cache::tests::test_cached_article_ids ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_feed_cascades ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_empty ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preference_missing ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix ... ok [INFO] [stdout] test storage::preferences::tests::test_set_preference_upsert ... ok [INFO] [stdout] test storage::reading_history::tests::test_reading_stats_zero_days ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_batch_upsert ... ok [INFO] [stdout] test storage::reading_history::tests::test_null_duration_on_unclosed ... ok [INFO] [stdout] test storage::reading_history::tests::test_cascade_delete_on_article_removal ... ok [INFO] [stdout] test storage::reading_history::tests::test_reading_stats_calculation ... ok [INFO] [stdout] test storage::search::tests::test_fts5_content_column_indexed ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_after_operations ... ok [INFO] [stdout] test storage::reading_history::tests::test_top_feeds_ranking ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_check_consistent ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_empty_table ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_detailed_consistent ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix_no_false_matches ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix_empty ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_detailed_empty ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_index ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_insert ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_or ... ok [INFO] [stdout] test storage::search::tests::test_search_scope_default_unchanged ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_wildcards ... ok [INFO] [stdout] test storage::search::tests::test_search_all_scope ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_and_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_flat_parens_ok ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_length_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_nesting_depth_exceeded ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_nesting_depth_ok ... ok [INFO] [stdout] test storage::search::tests::test_search_by_title ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_normal_term_length ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_or_case_insensitive ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_parentheses_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_rejects_column_filter_syntax ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_maintains_searchability ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_term_length_strips_decorators ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_term_too_long ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_unbalanced_parentheses ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_wildcard_limit ... ok [INFO] [stdout] test storage::types::tests::test_cantopen_message_returns_instance_locked ... ok [INFO] [stdout] test storage::types::tests::test_error_code_6_returns_instance_locked ... ok [INFO] [stdout] test storage::types::tests::test_no_code_with_lock_message_falls_through_to_string_match ... ok [INFO] [stdout] test storage::types::tests::test_non_database_error_variant_returns_other ... ok [INFO] [stdout] test storage::types::tests::test_unknown_code_with_lock_message_falls_through_to_string_match ... ok [INFO] [stdout] test storage::types::tests::test_unrelated_error_returns_other ... ok [INFO] [stdout] test util::text::tests::test_ascii_truncation ... ok [INFO] [stdout] test util::text::tests::test_cjk_truncation ... ok [INFO] [stdout] test util::text::tests::test_edge_case_widths ... ok [INFO] [stdout] test util::text::tests::test_emoji_truncation ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_or_limit ... ok [INFO] [stdout] test util::text::tests::test_exact_fit ... ok [INFO] [stdout] test util::text::tests::test_min_width ... ok [INFO] [stdout] test util::text::tests::test_no_panic_on_utf8_boundaries ... ok [INFO] [stdout] test util::text::tests::test_strip_ansi_color_codes ... ok [INFO] [stdout] test util::text::tests::test_strip_ansi_cursor_movement ... ok [INFO] [stdout] test util::text::tests::test_strip_bare_esc ... ok [INFO] [stdout] test util::text::tests::test_strip_clean_text_returns_borrowed ... ok [INFO] [stdout] test util::text::tests::test_strip_control_chars_removes_controls ... ok [INFO] [stdout] test util::text::tests::test_strip_empty_string ... ok [INFO] [stdout] test util::text::tests::test_strip_mixed_content ... ok [INFO] [stdout] test util::text::tests::test_strip_osc_with_bel ... ok [INFO] [stdout] test util::text::tests::test_strip_osc_with_st ... ok [INFO] [stdout] test util::text::tests::test_strip_preserves_tabs_newlines_cr ... ok [INFO] [stdout] test util::text::tests::test_strip_removes_del ... ok [INFO] [stdout] test storage::types::tests::test_error_code_5_returns_instance_locked ... ok [INFO] [stdout] test util::text::tests::test_strip_unicode_preserved ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv4_mapped_ipv6_loopback_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv4_mapped_ipv6_private_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv6_loopback_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_link_local_ipv6_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_link_local_ipv4_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_localhost_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_no_userinfo_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_private_ips_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_url_with_port_on_private_ip ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_encoded_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_username_only_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_username_password_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_public_url_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_urls ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_backslash ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_backtick ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_data_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_url_with_port_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_del ... ok [INFO] [stdout] test util::url_validator::tests::test_invalid_schemes ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_cr_lowercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_cr_uppercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_crlf ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_lf_lowercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_file_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_dollar ... ok [INFO] [stdout] test storage::search::tests::test_search_empty_query ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_lf_uppercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_javascript_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_malformed ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_pipe ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_raw_carriage_return ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_and ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_raw_newline ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_semicolon ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_unicode_paragraph_separator ... ok [INFO] [stdout] test storage::preferences::tests::test_set_preference_updates_timestamp ... ok [INFO] [stdout] test storage::preferences::tests::test_set_and_get_preference ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_unicode_line_separator ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_userinfo ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_http ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_fragment ... ok [INFO] [stdout] test util::url_validator::tests::test_zero_address_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_null_byte ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_long_query ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_parentheses ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_https ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_path ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_upsert_updates_title ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_query_params ... ok [INFO] [stdout] test storage::search::tests::test_search_no_results ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_and_case_insensitive ... ok [INFO] [stdout] test storage::reading_history::tests::test_get_reading_history ... ok [INFO] [stdout] test storage::search::tests::test_search_title_and_summary_scope ... ok [INFO] [stdout] test storage::search::tests::test_index_content ... ok [INFO] [stdout] test storage::reading_history::tests::test_record_open_close ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.82s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/skim-7fbc705bce26c895) [INFO] [stdout] [INFO] [stdout] running 410 tests [INFO] [stdout] test app::tests::test_config_theme_variant_from_str ... ok [INFO] [stdout] test app::tests::test_clamp_selections_valid_indices ... ok [INFO] [stdout] test app::tests::test_category_collapse_expand ... ok [INFO] [stdout] test app::tests::test_clamp_reader_scroll_with_loaded_content ... ok [INFO] [stdout] test app::tests::test_category_filter_feeds ... ok [INFO] [stdout] test app::tests::test_clamp_selections_out_of_bounds ... ok [INFO] [stdout] test app::tests::test_clamp_scroll_exceeds_max ... ok [INFO] [stdout] test app::tests::test_context_menu_delegates_delete ... ok [INFO] [stdout] test app::tests::test_clamp_selections_empty_lists ... ok [INFO] [stdout] test app::tests::test_category_tree_building ... ok [INFO] [stdout] test app::tests::test_all_bindings_include_theme_and_help ... ok [INFO] [stdout] test app::tests::test_category_focus_cycle ... ok [INFO] [stdout] test app::tests::test_clamp_scroll_content_smaller_than_viewport ... ok [INFO] [stdout] test app::tests::test_config_keybinding_overrides_applied_to_app ... ok [INFO] [stdout] test app::tests::test_category_panel_toggle ... ok [INFO] [stdout] test app::tests::test_category_selection_clamp ... ok [INFO] [stdout] test app::tests::test_clamp_scroll_within_bounds ... ok [INFO] [stdout] test app::tests::test_move_feed_to_category_state ... ok [INFO] [stdout] test app::tests::test_cycle_theme_dark_to_light ... ok [INFO] [stdout] test app::tests::test_cycle_theme_full_round_trip ... ok [INFO] [stdout] test app::tests::test_reader_content_lines_loaded ... ok [INFO] [stdout] test app::tests::test_keybinding_registry_has_cycle_theme ... ok [INFO] [stdout] test app::tests::test_delete_cancel ... ok [INFO] [stdout] test app::tests::test_delete_confirm_flow ... ok [INFO] [stdout] test app::tests::test_feed_deleted_event_updates_state ... ok [INFO] [stdout] test app::tests::test_context_menu_open_close ... ok [INFO] [stdout] test app::tests::test_reader_content_lines_idle ... ok [INFO] [stdout] test app::tests::test_snapshot_default_on_empty_json ... ok [INFO] [stdout] test app::tests::test_snapshot_forward_compatible ... ok [INFO] [stdout] test app::tests::test_snapshot_json_round_trip ... ok [INFO] [stdout] test app::tests::test_selected_category_id ... ok [INFO] [stdout] test app::tests::test_show_help_keybinding_exists ... ok [INFO] [stdout] test app::tests::test_scroll_down_increment ... ok [INFO] [stdout] test app::tests::test_status_expires_after_3_seconds ... ok [INFO] [stdout] test app::tests::test_set_theme_updates_variant_and_styles ... ok [INFO] [stdout] test app::tests::test_restore_clamps_out_of_bounds ... ok [INFO] [stdout] test app::tests::test_dismiss_whats_new ... ok [INFO] [stdout] test app::tests::test_scroll_up_at_zero ... ok [INFO] [stdout] test app::tests::test_exit_reader_resets_scroll ... ok [INFO] [stdout] test app::tests::test_cycle_theme_light_to_dark ... ok [INFO] [stdout] test app::tests::test_snapshot_captures_state ... ok [INFO] [stdout] test config::tests::test_debug_masks_api_key ... ok [INFO] [stdout] test config::tests::test_debug_shows_none_when_no_api_key ... ok [INFO] [stdout] test config::tests::test_default_config ... ok [INFO] [stdout] test app::tests::test_nav_empty_list ... ok [INFO] [stdout] test app::tests::test_restore_applies_state ... ok [INFO] [stdout] test config::tests::test_empty_file_returns_default ... ok [INFO] [stdout] test app::tests::test_keybinding_override_preserves_theme_cycling ... ok [INFO] [stdout] test config::tests::test_invalid_toml_returns_error ... ok [INFO] [stdout] test config::tests::test_missing_file_returns_default ... ok [INFO] [stdout] test config::tests::test_partial_config_uses_defaults_for_missing ... ok [INFO] [stdout] test config::tests::test_keybindings_empty_map ... ok [INFO] [stdout] test app::tests::test_restore_unknown_focus_defaults_to_feeds ... ok [INFO] [stdout] test config::tests::test_whitespace_only_file_returns_default ... ok [INFO] [stdout] test config::tests::test_wrong_type_returns_error ... ok [INFO] [stdout] test config::tests::test_full_config ... ok [INFO] [stdout] test config::tests::test_unknown_keys_accepted ... ok [INFO] [stdout] test config::tests::test_too_large_file_rejected ... ok [INFO] [stdout] test app::tests::test_status_not_expired_before_3_seconds ... ok [INFO] [stdout] test app::tests::test_sync_feed_cache_removes_stale_entries ... ok [INFO] [stdout] test content::jina::tests::test_http_base_url_rejected ... ok [INFO] [stdout] test app::tests::test_theme_set_status_on_cycle ... ok [INFO] [stdout] test app::tests::test_update_feed_cache_incremental ... ok [INFO] [stdout] test app::tests::test_theme_style_resolves_all_roles ... ok [INFO] [stdout] test content::jina::tests::test_is_archive_link ... ok [INFO] [stdout] test app::tests::test_sync_feed_cache_updates_existing_titles ... ok [INFO] [stdout] test app::tests::test_theme_defaults_to_dark ... ok [INFO] [stdout] test content::jina::tests::test_preserve_legitimate_content ... ok [INFO] [stdout] test content::jina::tests::test_preserve_short_archive_list ... ok [INFO] [stdout] test app::tests::test_sync_feed_cache_handles_empty_feeds ... ok [INFO] [stdout] test content::jina::tests::test_strip_archive_links ... ok [INFO] [stdout] test app::tests::test_update_feed_cache_removes_deleted ... ok [INFO] [stdout] test content::jina::tests::test_strip_menu_remnant ... ok [INFO] [stdout] test content::jina::tests::test_strip_skip_to_content ... ok [INFO] [stdout] test content::jina::tests::test_strip_wordpress_footer ... ok [INFO] [stdout] test content::jina::tests::test_strip_comment_scaffolding ... ok [INFO] [stdout] test app::tests::test_theme_styles_differ_between_variants ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_from_html_finds_and_parses_feed ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_direct_rss ... ok [INFO] [stdout] test content::jina::tests::test_private_ip_rejected ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_invalid_url ... ok [INFO] [stdout] test app::tests::test_theme_unknown_role_returns_default ... ok [INFO] [stdout] test feed::discovery::tests::test_find_atom_link_in_html ... ok [INFO] [stdout] test feed::discovery::tests::test_find_feed_link_absolute_url ... ok [INFO] [stdout] test feed::discovery::tests::test_find_feed_link_protocol_relative ... ok [INFO] [stdout] test feed::discovery::tests::test_find_feed_link_reversed_attrs ... ok [INFO] [stdout] test feed::discovery::tests::test_find_feed_link_single_quotes ... ok [INFO] [stdout] test feed::discovery::tests::test_find_rss_link_in_html ... ok [INFO] [stdout] test feed::discovery::tests::test_no_feed_link_in_html ... ok [INFO] [stdout] test content::jina::tests::test_localhost_rejected ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_atom_metadata ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_not_a_feed ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_localhost_rejected ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_private_ip_rejected ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_feed_strips_control_chars_from_description ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_absolute_url ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_rss_metadata ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_protocol_relative_normalizes_path ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_protocol_relative_uses_parser ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_relative_path ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_relative_url ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_invalid_xml_returns_not_a_feed ... ok [INFO] [stdout] test feed::discovery::tests::test_resolve_protocol_relative ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_feed_strips_control_chars_from_title ... ok [INFO] [stdout] test feed::discovery::tests::test_parse_feed_without_title_defaults ... ok [INFO] [stdout] test content::jina::tests::test_empty_response ... ok [INFO] [stdout] test feed::discovery::tests::test_discover_ambiguous_content_type_tries_feed_first ... ok [INFO] [stdout] test feed::opml::tests::test_deeply_nested_opml_rejected ... ok [INFO] [stdout] test feed::opml::tests::test_empty_opml ... ok [INFO] [stdout] test content::jina::tests::test_invalid_url_rejected ... ok [INFO] [stdout] test feed::fetcher::tests::test_malformed_feed_parse_error ... ok [INFO] [stdout] test config::tests::test_file_at_size_limit_accepted ... ok [INFO] [stdout] test feed::fetcher::tests::test_refresh_404_error ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_empty ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_depth_limit ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_roundtrip ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_with_html_url ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_file_atomic ... ok [INFO] [stdout] test feed::fetcher::tests::test_refresh_success ... ok [INFO] [stdout] test content::jina::tests::test_fetch_content_success ... ok [INFO] [stdout] test feed::opml::tests::test_export_opml_empty_feeds ... ok [INFO] [stdout] test feed::opml::tests::test_export_with_categories ... ok [INFO] [stdout] test feed::opml::tests::test_export_opml_xml_escaping ... ok [INFO] [stdout] test feed::opml::tests::test_export_categories_xml_escaping ... ok [INFO] [stdout] test feed::opml::tests::test_export_nested_categories ... ok [INFO] [stdout] test feed::opml::tests::test_fallback_to_text ... ok [INFO] [stdout] test feed::opml::tests::test_export_opml_round_trip ... ok [INFO] [stdout] test feed::opml::tests::test_export_uncategorized_at_root ... ok [INFO] [stdout] test feed::opml::tests::test_export_to_file ... ok [INFO] [stdout] test feed::opml::tests::test_fallback_to_url ... ok [INFO] [stdout] test feed::opml::tests::test_malformed_xml_error ... ok [INFO] [stdout] test feed::opml::tests::test_skip_private_ip_feeds ... ok [INFO] [stdout] test feed::opml::tests::test_parse_opml_content ... ok [INFO] [stdout] test feed::opml::tests::test_xxe_entity_in_url_attribute ... ok [INFO] [stdout] test feed::opml::tests::test_xxe_internal_entity_not_expanded ... ok [INFO] [stdout] test feed::opml::tests::test_xxe_parameter_entity_not_expanded ... ok [INFO] [stdout] test feed::opml::tests::test_skip_localhost_feeds ... ok [INFO] [stdout] test feed::parser::tests::test_file_scheme_rejected ... ok [INFO] [stdout] test feed::opml::tests::test_xxe_protection ... ok [INFO] [stdout] test feed::parser::tests::test_article_without_url_included ... ok [INFO] [stdout] test feed::parser::tests::test_ftp_scheme_rejected ... ok [INFO] [stdout] test feed::parser::tests::test_guid_deterministic ... ok [INFO] [stdout] test feed::opml::tests::test_skip_invalid_scheme_feeds ... ok [INFO] [stdout] test feed::parser::tests::test_localhost_url_rejected ... ok [INFO] [stdout] test feed::parser::tests::test_mixed_valid_and_invalid_urls ... ok [INFO] [stdout] test feed::opml::tests::test_nesting_at_depth_limit_allowed ... ok [INFO] [stdout] test feed::parser::tests::test_parse_atom_basic ... ok [INFO] [stdout] test feed::parser::tests::test_loopback_ip_rejected ... ok [INFO] [stdout] test feed::parser::tests::test_parse_malformed_xml_error ... ok [INFO] [stdout] test feed::parser::tests::test_parse_missing_title_defaults_untitled ... ok [INFO] [stdout] test feed::parser::tests::test_parse_missing_guid_generates_hash ... ok [INFO] [stdout] test feed::parser::tests::test_parse_empty_feed ... ok [INFO] [stdout] test feed::parser::tests::test_private_ip_192_168_rejected ... ok [INFO] [stdout] test feed::parser::tests::test_valid_http_url_accepted ... ok [INFO] [stdout] test keybindings::tests::test_action_describe ... ok [INFO] [stdout] test feed::parser::tests::test_private_ip_10_rejected ... ok [INFO] [stdout] test keybindings::tests::test_apply_overrides_bad_key ... ok [INFO] [stdout] test feed::parser::tests::test_private_ip_172_16_rejected ... ok [INFO] [stdout] test feed::parser::tests::test_valid_https_url_accepted ... ok [INFO] [stdout] test keybindings::tests::test_ctrl_modifiers ... ok [INFO] [stdout] test keybindings::tests::test_all_bindings_non_empty ... ok [INFO] [stdout] test keybindings::tests::test_default_nav_keys ... ok [INFO] [stdout] test keybindings::tests::test_apply_overrides_unknown_action ... ok [INFO] [stdout] test keybindings::tests::test_apply_overrides_valid ... ok [INFO] [stdout] test keybindings::tests::test_default_registry_has_quit ... ok [INFO] [stdout] test keybindings::tests::test_export_only_in_feed_list ... ok [INFO] [stdout] test keybindings::tests::test_format_key_display ... ok [INFO] [stdout] test keybindings::tests::test_parse_key_string_ctrl ... ok [INFO] [stdout] test keybindings::tests::test_override_preserves_contexts ... ok [INFO] [stdout] test keybindings::tests::test_parse_key_string_named_keys ... ok [INFO] [stdout] test keybindings::tests::test_reader_context_overrides_global ... ok [INFO] [stdout] test keybindings::tests::test_reader_falls_back_to_global_for_quit ... ok [INFO] [stdout] test keybindings::tests::test_unknown_key_returns_none ... ok [INFO] [stdout] test keybindings::tests::test_search_context ... ok [INFO] [stdout] test feed::fetcher::tests::test_empty_feed_success ... ok [INFO] [stdout] test keybindings::tests::test_parse_key_string_function_keys ... ok [INFO] [stdout] test keybindings::tests::test_parse_key_string_single_char ... ok [INFO] [stdout] test preferences::tests::test_from_config_fallback ... ok [INFO] [stdout] test preferences::tests::test_config_to_db_round_trip ... ok [INFO] [stdout] test preferences::tests::test_corrupt_snapshot_ignored ... ok [INFO] [stdout] test preferences::tests::test_config_keybindings_flattened ... ok [INFO] [stdout] test preferences::tests::test_config_file_load_and_merge ... ok [INFO] [stdout] test preferences::tests::test_db_overrides_config ... ok [INFO] [stdout] test preferences::tests::test_get_returns_none_for_unknown ... ok [INFO] [stdout] test preferences::tests::test_refresh_interval_parse ... ok [INFO] [stdout] test preferences::tests::test_preferences_survive_reload ... ok [INFO] [stdout] test content::jina::tests::test_http_404 ... ok [INFO] [stdout] test preferences::tests::test_restore_session_default_false ... ok [INFO] [stdout] test feed::parser::tests::test_parse_rss_basic ... ok [INFO] [stdout] test preferences::tests::test_load_defaults_from_config ... ok [INFO] [stdout] test preferences::tests::test_restore_session_from_db ... ok [INFO] [stdout] test preferences::tests::test_session_snapshot_round_trip ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed_idempotent ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_idempotent ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed ... ok [INFO] [stdout] test storage::articles::tests::test_mark_article_read ... ok [INFO] [stdout] test storage::articles::tests::test_toggle_article_starred_twice ... ok [INFO] [stdout] test storage::articles::tests::test_toggle_article_starred ... ok [INFO] [stdout] test storage::articles::tests::test_unread_counts_after_bulk_mark_read ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_empty_batch ... ok [INFO] [stdout] test storage::articles::tests::test_mark_all_read_for_feed_empty ... ok [INFO] [stdout] test preferences::tests::test_set_persists_and_updates_memory ... ok [INFO] [stdout] test storage::articles::tests::test_get_articles_pagination ... ok [INFO] [stdout] test content::jina::tests::test_host_confusion_base_url_rejected ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_update_returns_zero ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_insert ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_empty_name ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_mixed_batch ... ok [INFO] [stdout] test storage::categories::tests::test_create_category ... ok [INFO] [stdout] test storage::articles::tests::test_upsert_articles_updates_metadata ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_whitespace_only ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_rejects_control_chars_only ... ok [INFO] [stdout] test storage::categories::tests::test_delete_category_orphans_children ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_trims_whitespace ... ok [INFO] [stdout] test storage::categories::tests::test_move_feed_to_category ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category ... ok [INFO] [stdout] test storage::categories::tests::test_max_nesting_depth ... ok [INFO] [stdout] test storage::categories::tests::test_nested_categories ... ok [INFO] [stdout] test storage::categories::tests::test_get_categories_tree_ordering ... ok [INFO] [stdout] test storage::categories::tests::test_delete_category_orphans_feeds ... ok [INFO] [stdout] test storage::categories::tests::test_create_category_strips_control_chars ... ok [INFO] [stdout] test content::jina::tests::test_localhost_base_url_allowed ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_rejects_empty_name ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_trims_whitespace ... ok [INFO] [stdout] test storage::categories::tests::test_rename_category_strips_control_chars ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_content ... ok [INFO] [stdout] test storage::feeds::tests::test_circuit_breaker_threshold_constant ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_content_replace ... ok [INFO] [stdout] test storage::content_cache::tests::test_evict_expired ... ok [INFO] [stdout] test storage::content_cache::tests::test_cache_stats ... ok [INFO] [stdout] test storage::content_cache::tests::test_cached_article_ids ... ok [INFO] [stdout] test storage::feeds::tests::test_batch_set_feed_errors_empty ... ok [INFO] [stdout] test storage::content_cache::tests::test_cascade_delete ... ok [INFO] [stdout] test storage::content_cache::tests::test_get_expired_returns_none ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_empty_articles ... ok [INFO] [stdout] test feed::parser::tests::test_guid_never_empty ... ok [INFO] [stdout] test storage::content_cache::tests::test_prefetch_candidates ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_atomic ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_nonexistent_feed ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_upsert ... ok [INFO] [stdout] test storage::feeds::tests::test_get_active_feeds_filters_high_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_feed_cleans_fts ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_for_export ... ok [INFO] [stdout] test storage::feeds::tests::test_complete_feed_refresh_resets_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_rename_feed_db ... ok [INFO] [stdout] test storage::feeds::tests::test_increment_feed_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_delete_feed_cascades ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_empty ... ok [INFO] [stdout] test storage::feeds::tests::test_rename_nonexistent_feed ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_unread_counts ... ok [INFO] [stdout] test storage::feeds::tests::test_batch_set_feed_errors ... ok [INFO] [stdout] test storage::feeds::tests::test_reset_feed_failures ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_batch_upsert ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_batch_chunking ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_insert ... ok [INFO] [stdout] test storage::feeds::tests::test_sync_feeds_upsert_updates_title ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preference_missing ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix_empty ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix_no_false_matches ... ok [INFO] [stdout] test storage::preferences::tests::test_set_preference_updates_timestamp ... ok [INFO] [stdout] test storage::preferences::tests::test_set_and_get_preference ... ok [INFO] [stdout] test storage::feeds::tests::test_get_feeds_for_export_empty ... ok [INFO] [stdout] test storage::preferences::tests::test_get_preferences_by_prefix ... ok [INFO] [stdout] test storage::preferences::tests::test_set_preference_upsert ... ok [INFO] [stdout] test storage::reading_history::tests::test_null_duration_on_unclosed ... ok [INFO] [stdout] test storage::reading_history::tests::test_reading_stats_zero_days ... ok [INFO] [stdout] test storage::reading_history::tests::test_get_reading_history ... ok [INFO] [stdout] test storage::reading_history::tests::test_cascade_delete_on_article_removal ... ok [INFO] [stdout] test storage::reading_history::tests::test_record_open_close ... ok [INFO] [stdout] test storage::search::tests::test_fts5_content_column_indexed ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_check_consistent ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_detailed_consistent ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_after_operations ... ok [INFO] [stdout] test storage::reading_history::tests::test_reading_stats_calculation ... ok [INFO] [stdout] test storage::reading_history::tests::test_top_feeds_ranking ... ok [INFO] [stdout] test storage::search::tests::test_fts_consistency_detailed_empty ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_empty_table ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_long_query ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_and ... ok [INFO] [stdout] test storage::search::tests::test_search_scope_default_unchanged ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_maintains_searchability ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_and_case_insensitive ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_and_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_flat_parens_ok ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_length_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_nesting_depth_exceeded ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_nesting_depth_ok ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_normal_term_length ... ok [INFO] [stdout] test storage::search::tests::test_fts_rebuild_index ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_or_case_insensitive ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_or_limit ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_or ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_parentheses_limit ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_rejects_column_filter_syntax ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_term_length_strips_decorators ... ok [INFO] [stdout] test storage::search::tests::test_index_content ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_unbalanced_parentheses ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_wildcard_limit ... ok [INFO] [stdout] test storage::types::tests::test_cantopen_message_returns_instance_locked ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_parentheses ... ok [INFO] [stdout] test storage::types::tests::test_error_code_5_returns_instance_locked ... ok [INFO] [stdout] test storage::search::tests::test_validate_fts_query_term_too_long ... ok [INFO] [stdout] test storage::types::tests::test_error_code_6_returns_instance_locked ... ok [INFO] [stdout] test storage::types::tests::test_no_code_with_lock_message_falls_through_to_string_match ... ok [INFO] [stdout] test storage::types::tests::test_non_database_error_variant_returns_other ... ok [INFO] [stdout] test storage::types::tests::test_unknown_code_with_lock_message_falls_through_to_string_match ... ok [INFO] [stdout] test storage::types::tests::test_unrelated_error_returns_other ... ok [INFO] [stdout] test theme::tests::dark_palette_stars_matches_original ... ok [INFO] [stdout] test theme::tests::dark_palette_reader_code_block_matches_original ... ok [INFO] [stdout] test theme::tests::dark_palette_feed_selected_matches_original ... ok [INFO] [stdout] test theme::tests::dark_palette_focus_border_matches_original ... ok [INFO] [stdout] test theme::tests::dark_palette_status_bar_matches_original ... ok [INFO] [stdout] test theme::tests::role_names_count_matches_palette_fields ... ok [INFO] [stdout] test theme::tests::light_palette_differs_from_dark ... ok [INFO] [stdout] test theme::tests::dark_palette_whatsnew_focused_matches_original ... ok [INFO] [stdout] test theme::tests::style_map_has_all_roles ... ok [INFO] [stdout] test theme::tests::style_map_resolves_known_roles ... ok [INFO] [stdout] test theme::tests::style_map_returns_default_for_unknown ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_days ... ok [INFO] [stdout] test theme::tests::variant_from_str_name ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_future ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_hours ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_minutes ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_none ... ok [INFO] [stdout] test ui::articles::tests::test_search_scope_indicator_text ... ok [INFO] [stdout] test ui::articles::tests::test_format_relative_time_older_shows_date ... ok [INFO] [stdout] test ui::articles::tests::test_scope_persists_across_sessions ... ok [INFO] [stdout] test ui::articles::tests::test_scope_toggle_visual_update ... ok [INFO] [stdout] test ui::reader::tests::test_render_bold ... ok [INFO] [stdout] test ui::reader::tests::test_render_code_block ... ok [INFO] [stdout] test ui::reader::tests::test_render_empty ... ok [INFO] [stdout] test ui::reader::tests::test_render_heading ... ok [INFO] [stdout] test ui::reader::tests::test_render_link ... ok [INFO] [stdout] test ui::reader::tests::test_render_plain_text ... ok [INFO] [stdout] test ui::reader::tests::test_render_italic ... ok [INFO] [stdout] test ui::reader::tests::test_render_unicode ... ok [INFO] [stdout] test util::text::tests::test_ascii_truncation ... ok [INFO] [stdout] test util::text::tests::test_cjk_truncation ... ok [INFO] [stdout] test util::text::tests::test_exact_fit ... ok [INFO] [stdout] test util::text::tests::test_min_width ... ok [INFO] [stdout] test util::text::tests::test_edge_case_widths ... ok [INFO] [stdout] test util::text::tests::test_emoji_truncation ... ok [INFO] [stdout] test util::text::tests::test_no_panic_on_utf8_boundaries ... ok [INFO] [stdout] test util::text::tests::test_strip_ansi_color_codes ... ok [INFO] [stdout] test util::text::tests::test_strip_bare_esc ... ok [INFO] [stdout] test util::text::tests::test_strip_ansi_cursor_movement ... ok [INFO] [stdout] test util::text::tests::test_strip_clean_text_returns_borrowed ... ok [INFO] [stdout] test storage::search::tests::test_search_all_scope ... ok [INFO] [stdout] test util::text::tests::test_strip_control_chars_removes_controls ... ok [INFO] [stdout] test util::text::tests::test_strip_osc_with_st ... ok [INFO] [stdout] test util::text::tests::test_strip_preserves_tabs_newlines_cr ... ok [INFO] [stdout] test util::text::tests::test_strip_osc_with_bel ... ok [INFO] [stdout] test util::text::tests::test_strip_mixed_content ... ok [INFO] [stdout] test util::text::tests::test_strip_empty_string ... ok [INFO] [stdout] test util::text::tests::test_strip_unicode_preserved ... ok [INFO] [stdout] test util::url_validator::tests::test_invalid_schemes ... ok [INFO] [stdout] test util::text::tests::test_strip_removes_del ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv4_mapped_ipv6_private_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv4_mapped_ipv6_loopback_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_ipv6_loopback_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_link_local_ipv4_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_link_local_ipv6_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_url_with_port_on_private_ip ... ok [INFO] [stdout] test util::url_validator::tests::test_no_userinfo_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_localhost_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_private_ips_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_encoded_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_username_only_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_public_url_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_userinfo_username_password_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_urls ... ok [INFO] [stdout] test util::url_validator::tests::test_valid_url_with_port_accepted ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_backslash ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_data_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_cr_lowercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_backtick ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_del ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_cr_uppercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_crlf ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_lf_lowercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_dollar ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_encoded_lf_uppercase ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_file_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_null_byte ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_pipe ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_raw_newline ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_javascript_scheme ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_semicolon ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_unicode_paragraph_separator ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_malformed ... ok [INFO] [stdout] test storage::search::tests::test_search_articles_rejects_too_many_wildcards ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_unicode_line_separator ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_userinfo ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_rejects_raw_carriage_return ... ok [INFO] [stdout] test storage::search::tests::test_search_empty_query ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_http ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_path ... ok [INFO] [stdout] test util::url_validator::tests::test_zero_address_rejected ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_query_params ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_with_fragment ... ok [INFO] [stdout] test util::url_validator::tests::test_validate_url_for_open_valid_https ... ok [INFO] [stdout] test storage::search::tests::test_search_no_results ... ok [INFO] [stdout] test storage::search::tests::test_search_by_title ... ok [INFO] [stdout] test storage::search::tests::test_search_title_and_summary_scope ... ok [INFO] [stdout] test feed::fetcher::tests::test_refresh_503_retry_then_success ... ok [INFO] [stdout] test content::jina::tests::test_ipv6_loopback_base_url_allowed ... ok [INFO] [stdout] test content::jina::tests::test_https_base_url_allowed ... ok [INFO] [stdout] test feed::fetcher::tests::test_refresh_500_error_retries_then_fails ... ok [INFO] [stdout] test content::jina::tests::test_http_500 ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 410 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.60s [INFO] [stdout] [INFO] [stderr] Running tests/content_cache.rs (/opt/rustwide/target/debug/deps/content_cache-c485cba22797f864) [INFO] [stdout] [INFO] [stdout] running 17 tests [INFO] [stdout] test test_cache_replace_updates_content ... ok [INFO] [stdout] test test_prefetch_candidates_respects_limit ... ok [INFO] [stdout] test test_cache_stats_empty ... ok [INFO] [stdout] test test_cached_article_ids_empty_returns_empty ... ok [INFO] [stdout] test test_cached_article_ids_empty_input ... ok [INFO] [stdout] test test_cache_content_and_get ... ok [INFO] [stdout] test test_cache_stats_accuracy ... ok [INFO] [stdout] test test_cache_and_index_workflow ... ok [INFO] [stdout] test test_prefetch_candidates_excludes_cached ... ok [INFO] [stdout] test test_content_searchable_after_indexing ... ok [INFO] [stdout] test test_content_not_searchable_with_title_summary_scope ... ok [INFO] [stdout] test test_cascade_delete_removes_cache ... ok [INFO] [stdout] test test_evict_expired_no_valid_entries_affected ... ok [INFO] [stdout] test test_prefetch_candidates_for_feed ... ok [INFO] [stdout] test test_prefetch_candidates_excludes_read ... ok [INFO] [stdout] test test_cached_article_ids_returns_subset ... ok [INFO] [stdout] test test_uncached_article_returns_none ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s [INFO] [stdout] [INFO] [stderr] Running tests/feed_lifecycle.rs (/opt/rustwide/target/debug/deps/feed_lifecycle-20fc743cad6bbd88) [INFO] [stdout] [INFO] [stdout] running 13 tests [INFO] [stdout] test test_delete_nonexistent_feed_is_idempotent ... ok [INFO] [stdout] test test_subscribe_duplicate_url_updates_title ... ok [INFO] [stdout] test test_delete_category_uncategorizes_feeds ... ok [INFO] [stdout] test test_uncategorize_feed ... ok [INFO] [stdout] test test_rename_feed_updates_title ... ok [INFO] [stdout] test test_delete_feed_removes_articles ... ok [INFO] [stdout] test test_nested_categories_with_feeds ... ok [INFO] [stdout] test test_delete_feed_cleans_fts ... ok [INFO] [stdout] test test_subscribe_with_html_url ... ok [INFO] [stdout] test test_subscribe_feed_appears_in_list ... ok [INFO] [stdout] test test_full_lifecycle_subscribe_categorize_delete ... ok [INFO] [stdout] test test_categorize_feed_updates_category_id ... ok [INFO] [stdout] test test_export_includes_all_feeds ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.26s [INFO] [stdout] [INFO] [stderr] Doc-tests skim [INFO] [stdout] [INFO] [stdout] running 4 tests [INFO] [stdout] test src/util/mod.rs - util (line 10) ... ok [INFO] [stdout] test src/util/url_validator.rs - util::url_validator::validate_url (line 54) ... ok [INFO] [stdout] test src/util/text.rs - util::text::truncate_to_width (line 76) ... ok [INFO] [stdout] test src/util/text.rs - util::text::display_width (line 23) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.11s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "1410edea16a4e93a983eee4a940f796de8618b896de8779c931e0afcae37d10c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1410edea16a4e93a983eee4a940f796de8618b896de8779c931e0afcae37d10c", kill_on_drop: false }` [INFO] [stdout] 1410edea16a4e93a983eee4a940f796de8618b896de8779c931e0afcae37d10c