[INFO] fetching crate libaipm 0.22.3...
[INFO] testing libaipm-0.22.3 against try#33835004928d3bf65db4d4712e1330766263b0bd for pr-155739
[INFO] extracting crate libaipm 0.22.3 into /workspace/builds/worker-4-tc2/source
[INFO] started tweaking crates.io crate libaipm 0.22.3
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate libaipm 0.22.3
[INFO] tweaked toml for crates.io crate libaipm 0.22.3 written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate libaipm 0.22.3 on toolchain 33835004928d3bf65db4d4712e1330766263b0bd
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate libaipm 0.22.3 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" "+33835004928d3bf65db4d4712e1330766263b0bd" "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/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 12b5fbb6401af81197c92b5074ac18b8461516d3b9a6c7f98ffe2234d56bb13b
[INFO] running `Command { std: "docker" "start" "-a" "12b5fbb6401af81197c92b5074ac18b8461516d3b9a6c7f98ffe2234d56bb13b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "12b5fbb6401af81197c92b5074ac18b8461516d3b9a6c7f98ffe2234d56bb13b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "12b5fbb6401af81197c92b5074ac18b8461516d3b9a6c7f98ffe2234d56bb13b", kill_on_drop: false }`
[INFO] [stdout] 12b5fbb6401af81197c92b5074ac18b8461516d3b9a6c7f98ffe2234d56bb13b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] fb7f415c09cd67fbb9ddf361e8688bb65fff2434648325f65db7c54bb04d1dca
[INFO] running `Command { std: "docker" "start" "-a" "fb7f415c09cd67fbb9ddf361e8688bb65fff2434648325f65db7c54bb04d1dca", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustls v0.23.37
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling filetime v0.2.27
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling webpki-roots v1.0.6
[INFO] [stderr]    Compiling ureq-proto v0.6.0
[INFO] [stderr]    Compiling utf8-zero v0.8.1
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling openssl-probe v0.1.6
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling annotate-snippets v0.11.5
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling semver v1.0.27
[INFO] [stderr]    Compiling fs2 v0.4.3
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling xattr v1.6.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling openssl-sys v0.9.112
[INFO] [stderr]    Compiling libz-sys v1.1.25
[INFO] [stderr]    Compiling libgit2-sys v0.17.0+1.8.1
[INFO] [stderr]    Compiling tar v0.4.44
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling rustls-webpki v0.103.9
[INFO] [stderr]    Compiling synstructure v0.13.2
[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 displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling ureq v3.3.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling tracing-appender v0.2.4
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling git2 v0.19.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling libaipm v0.22.3 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 01s
[INFO] running `Command { std: "docker" "inspect" "fb7f415c09cd67fbb9ddf361e8688bb65fff2434648325f65db7c54bb04d1dca", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fb7f415c09cd67fbb9ddf361e8688bb65fff2434648325f65db7c54bb04d1dca", kill_on_drop: false }`
[INFO] [stdout] fb7f415c09cd67fbb9ddf361e8688bb65fff2434648325f65db7c54bb04d1dca
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] ef3dcd89a93de21017545781b691862fd8c46a4f3f5c6934afe2f65488cd4ccb
[INFO] running `Command { std: "docker" "start" "-a" "ef3dcd89a93de21017545781b691862fd8c46a4f3f5c6934afe2f65488cd4ccb", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling bytecount v0.6.9
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling regex-syntax v0.7.5
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling peg-runtime v0.6.3
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling typed-builder-macro v0.15.2
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling peg-macros v0.6.3
[INFO] [stderr]    Compiling smawk v0.3.2
[INFO] [stderr]    Compiling sealed v0.5.0
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling synthez-core v0.3.1
[INFO] [stderr]    Compiling predicates-core v1.0.10
[INFO] [stderr]    Compiling unicode-linebreak v0.1.5
[INFO] [stderr]    Compiling typed-builder v0.15.2
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling synthez-codegen v0.3.1
[INFO] [stderr]    Compiling peg v0.6.3
[INFO] [stderr]    Compiling synthez v0.3.1
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling gherkin v0.14.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling nom_locate v4.2.0
[INFO] [stderr]    Compiling termtree v0.5.1
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling assert_cmd v2.2.0
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]    Compiling predicates-tree v1.0.13
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling smart-default v0.7.1
[INFO] [stderr]    Compiling predicates v3.1.4
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling terminal_size v0.4.3
[INFO] [stderr]    Compiling xattr v1.6.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling tar v0.4.44
[INFO] [stderr]    Compiling humantime v2.3.0
[INFO] [stderr]    Compiling drain_filter_polyfill v0.1.3
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling inventory v0.3.22
[INFO] [stderr]    Compiling insta v1.46.3
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling cucumber-expressions v0.3.0
[INFO] [stderr]    Compiling lazy-regex-proc_macros v3.6.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling cucumber-codegen v0.21.1
[INFO] [stderr]    Compiling lazy-regex v3.6.0
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling tracing-appender v0.2.4
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling libaipm v0.22.3 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling cucumber v0.21.1
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/acquirer.rs:858:64
[INFO] [stdout]     |
[INFO] [stdout] 858 |             sub_git(&["rev-parse", "HEAD"]).unwrap_or_else(|_| return std::process::abort());
[INFO] [stdout]     |                                                                ^^^^^^^---------------------
[INFO] [stdout]     |                                                                |      |
[INFO] [stdout]     |                                                                |      any code following this expression is unreachable
[INFO] [stdout]     |                                                                unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lint/rules/import_resolver.rs:287:13
[INFO] [stdout]     |
[INFO] [stdout] 287 |         let mut fs = make_fs_with_file("CLAUDE.md", "@../../etc/passwd.md\ntext");
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lint/rules/import_resolver.rs:297:13
[INFO] [stdout]     |
[INFO] [stdout] 297 |         let mut fs = make_fs_with_file("CLAUDE.md", "@/etc/passwd.md\ntext");
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lint/rules/import_resolver.rs:324:13
[INFO] [stdout]     |
[INFO] [stdout] 324 |         let mut fs = make_fs_with_file("CLAUDE.md", "@nonexistent.md\ntext");
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/migrate/emitter.rs:3464:13
[INFO] [stdout]      |
[INFO] [stdout] 3464 |         let mut fs = MockFs::new();
[INFO] [stdout]      |             ----^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/migrate/emitter.rs:3660:13
[INFO] [stdout]      |
[INFO] [stdout] 3660 |         let mut fs = MockFs::new();
[INFO] [stdout]      |             ----^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 02s
[INFO] running `Command { std: "docker" "inspect" "ef3dcd89a93de21017545781b691862fd8c46a4f3f5c6934afe2f65488cd4ccb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ef3dcd89a93de21017545781b691862fd8c46a4f3f5c6934afe2f65488cd4ccb", kill_on_drop: false }`
[INFO] [stdout] ef3dcd89a93de21017545781b691862fd8c46a4f3f5c6934afe2f65488cd4ccb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 377e0c7f67b845f5dad60a3be79c6b142cf45c8c78f289a97092317994a5490e
[INFO] running `Command { std: "docker" "start" "-a" "377e0c7f67b845f5dad60a3be79c6b142cf45c8c78f289a97092317994a5490e", kill_on_drop: false }`
[INFO] [stderr] warning: unreachable expression
[INFO] [stderr]    --> src/acquirer.rs:858:64
[INFO] [stderr]     |
[INFO] [stderr] 858 |             sub_git(&["rev-parse", "HEAD"]).unwrap_or_else(|_| return std::process::abort());
[INFO] [stderr]     |                                                                ^^^^^^^---------------------
[INFO] [stderr]     |                                                                |      |
[INFO] [stderr]     |                                                                |      any code following this expression is unreachable
[INFO] [stderr]     |                                                                unreachable expression
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/lint/rules/import_resolver.rs:287:13
[INFO] [stderr]     |
[INFO] [stderr] 287 |         let mut fs = make_fs_with_file("CLAUDE.md", "@../../etc/passwd.md\ntext");
[INFO] [stderr]     |             ----^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/lint/rules/import_resolver.rs:297:13
[INFO] [stderr]     |
[INFO] [stderr] 297 |         let mut fs = make_fs_with_file("CLAUDE.md", "@/etc/passwd.md\ntext");
[INFO] [stderr]     |             ----^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/lint/rules/import_resolver.rs:324:13
[INFO] [stderr]     |
[INFO] [stderr] 324 |         let mut fs = make_fs_with_file("CLAUDE.md", "@nonexistent.md\ntext");
[INFO] [stderr]     |             ----^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]     --> src/migrate/emitter.rs:3464:13
[INFO] [stderr]      |
[INFO] [stderr] 3464 |         let mut fs = MockFs::new();
[INFO] [stderr]      |             ----^^
[INFO] [stderr]      |             |
[INFO] [stderr]      |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]     --> src/migrate/emitter.rs:3660:13
[INFO] [stderr]      |
[INFO] [stderr] 3660 |         let mut fs = MockFs::new();
[INFO] [stderr]      |             ----^^
[INFO] [stderr]      |             |
[INFO] [stderr]      |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: `libaipm` (lib test) generated 6 warnings (run `cargo fix --lib -p libaipm --tests` to apply 5 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.41s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/libaipm-0f1b44c13a9c7729)
[INFO] [stdout] 
[INFO] [stdout] running 1950 tests
[INFO] [stdout] test acquirer::tests::acquire_local_from_source_not_found ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_not_found ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_source_is_file_not_dir ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_source_is_directory_proceeds_to_validation ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_not_directory ... ok
[INFO] [stdout] test acquirer::tests::copy_dir_recursive_empty_src ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_validates_structure ... ok
[INFO] [stdout] test acquirer::tests::copy_dir_recursive_copy_file_fails_returns_copy_failed_error ... ok
[INFO] [stdout] test acquirer::tests::check_file_count_empty_dir ... ok
[INFO] [stdout] test acquirer::tests::copy_dir_recursive_skips_symlinks ... ok
[INFO] [stdout] test acquirer::tests::copy_dir_recursive_skips_git_dir ... ok
[INFO] [stdout] test acquirer::tests::acquire_local_valid_plugin ... ok
[INFO] [stdout] test acquirer::tests::source_redirect_none_when_no_aipm_toml ... ok
[INFO] [stdout] test acquirer::tests::count_files_empty ... ok
[INFO] [stdout] test acquirer::tests::count_files_nested ... ok
[INFO] [stdout] test acquirer::tests::count_files_nonexistent_dir ... ok
[INFO] [stdout] test acquirer::tests::file_count_check_passes_normal ... ok
[INFO] [stdout] test acquirer::tests::source_redirect_parses_from_aipm_toml ... ok
[INFO] [stdout] test cache::tests::cache_force_refresh_always_misses ... ok
[INFO] [stdout] test acquirer::tests::source_redirect_with_no_package_section ... ok
[INFO] [stdout] test acquirer::tests::source_redirect_with_invalid_toml ... ok
[INFO] [stdout] test acquirer::tests::source_redirect_none_when_no_source_section ... ok
[INFO] [stdout] test cache::tests::cache_only_errors_on_miss ... ok
[INFO] [stdout] test cache::tests::auto_returns_none_when_dir_missing ... ok
[INFO] [stdout] test cache::tests::cache_policy_parse_unknown_returns_err ... ok
[INFO] [stdout] test cache::tests::cache_miss_returns_none ... ok
[INFO] [stdout] test cache::tests::cache_policy_parse_aliases ... ok
[INFO] [stdout] test cache::tests::cache_no_refresh_uses_stale_entry ... ok
[INFO] [stdout] test cache::tests::cache_skip_policy_always_misses ... ok
[INFO] [stdout] test cache::tests::cache_policy_roundtrip ... ok
[INFO] [stdout] test cache::tests::cache_put_and_get ... ok
[INFO] [stdout] test cache::tests::copy_to_session_missing_spec_errors ... ok
[INFO] [stdout] test cache::tests::cache_stale_entry_returns_none ... ok
[INFO] [stdout] test cache::tests::gc_preserves_installed_entries ... ok
[INFO] [stdout] test cache::tests::gc_preserves_recent_unreferenced_directories ... ok
[INFO] [stdout] test cache::tests::gc_removes_old_entries ... ok
[INFO] [stdout] test cache::tests::gc_silently_ignores_unreadable_entries_dir ... ok
[INFO] [stdout] test cache::tests::copy_to_session ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_with_ref_invalid_url_returns_error ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_invalid_url_returns_error ... ok
[INFO] [stdout] test cache::tests::gc_skips_non_directory_entries_in_entries_dir ... ok
[INFO] [stdout] test cache::tests::get_with_empty_index_file_returns_none ... ok
[INFO] [stdout] test cache::tests::gc_with_no_entries_is_noop ... ok
[INFO] [stdout] test cache::tests::is_enabled_for_each_policy ... ok
[INFO] [stdout] test cache::tests::gc_silently_skips_non_utf8_entry_names ... ok
[INFO] [stdout] test cache::tests::mark_installed_nonexistent_is_noop ... ok
[INFO] [stdout] test cache::tests::new_entry_dir_name_is_unique ... ok
[INFO] [stdout] test cache::tests::put_handles_already_removed_old_entry_dir ... ok
[INFO] [stdout] test cache::tests::cache_only_corrupted_when_dir_missing ... ok
[INFO] [stdout] test cache::tests::per_entry_ttl_overrides_global ... ok
[INFO] [stdout] test cache::tests::gc_removes_unreferenced_directories ... ok
[INFO] [stdout] test cache::tests::put_replaces_old_entry_dir ... ok
[INFO] [stdout] test cache::tests::gc_stale_dir_that_no_longer_exists ... ok
[INFO] [stdout] test cache::tests::copy_to_session_missing_dir_errors ... ok
[INFO] [stdout] test cache::tests::put_source_with_symlink_is_silently_skipped ... ok
[INFO] [stdout] test cache::tests::skip_cache_put_returns_error ... ok
[INFO] [stdout] test cache::tests::installed_still_respects_ttl ... ok
[INFO] [stdout] test cache::tests::set_entry_ttl_nonexistent_is_noop ... ok
[INFO] [stdout] test discovery::tests::classify_agents_md_alone ... ok
[INFO] [stdout] test discovery::tests::classify_claude_md ... ok
[INFO] [stdout] test discovery::tests::classify_copilot_md ... ok
[INFO] [stdout] test discovery::tests::classify_claude_md_lowercase ... ok
[INFO] [stdout] test discovery::tests::classify_gemini_md ... ok
[INFO] [stdout] test discovery::tests::classify_instructions_md_suffix ... ok
[INFO] [stdout] test discovery::tests::classify_instructions_md_suffix_in_subdir ... ok
[INFO] [stdout] test discovery::tests::classify_instructions_md ... ok
[INFO] [stdout] test discovery::tests::classify_claude_md_in_subdir ... ok
[INFO] [stdout] test discovery::tests::classify_regular_agent_unchanged ... ok
[INFO] [stdout] test cache::tests::touch_entry_missing_key_is_noop ... ok
[INFO] [stdout] test discovery::tests::discover_excludes_ai_directory ... ok
[INFO] [stdout] test cache::tests::with_policy_shares_root ... ok
[INFO] [stdout] test discovery::tests::discover_features_classifies_source_context_none_for_unknown ... ok
[INFO] [stdout] test discovery::tests::classify_agents_md_in_agents_dir_is_instructions_not_agent ... ok
[INFO] [stdout] test discovery::tests::discover_assigns_correct_package_name ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_agent_md ... ok
[INFO] [stdout] test discovery::tests::discover_features_hooks_json_wrong_parent_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_features_ignores_random_md_outside_agents_dir ... ok
[INFO] [stdout] test cache::tests::set_entry_ttl_updates_stored_ttl ... ok
[INFO] [stdout] test discovery::tests::discover_features_marketplace_json_classified_correctly ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_hooks_json ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_skill_in_github ... ok
[INFO] [stdout] test discovery::tests::discover_features_ignores_skill_md_outside_skills_dir ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_skill_in_flat_layout ... ok
[INFO] [stdout] test discovery::tests::discover_features_marketplace_json_wrong_parent_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_features_plugin_json_classified_correctly ... ok
[INFO] [stdout] test discovery::tests::discover_features_marketplace_json_outside_ai_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_features_plugin_manifest_nested_too_deep_is_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_features_plugin_json_wrong_parent_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_features_plugin_manifest_at_correct_depth_is_classified ... ok
[INFO] [stdout] test discovery::tests::discover_features_returns_sorted_output ... ok
[INFO] [stdout] test discovery::tests::discover_finds_root_claude_dir ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_skill_in_claude ... ok
[INFO] [stdout] test acquirer::tests::acquire_with_redirect_no_redirect ... ok
[INFO] [stdout] test discovery::tests::discover_features_finds_skill_in_ai ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_with_nonexistent_subpath ... ok
[INFO] [stdout] test discovery::tests::discover_finds_nested_claude_dirs ... ok
[INFO] [stdout] test discovery::tests::discover_returns_empty_when_no_claude_dirs ... ok
[INFO] [stdout] test discovery::tests::discover_respects_max_depth ... ok
[INFO] [stdout] test discovery::tests::discover_features_plugin_json_outside_ai_ignored ... ok
[INFO] [stdout] test discovery::tests::discover_returns_none_package_for_root ... ok
[INFO] [stdout] test discovery::tests::error_display ... ok
[INFO] [stdout] test engine::tests::engine_all_names ... ok
[INFO] [stdout] test engine::tests::human_readable_error_multi_marker ... ok
[INFO] [stdout] test discovery::tests::discover_source_dirs_root_github_has_none_package_name ... ok
[INFO] [stdout] test discovery::tests::discover_features_respects_max_depth ... ok
[INFO] [stdout] test engine::tests::marketplace_manifest_path_returns_correct_path ... ok
[INFO] [stdout] test discovery::tests::discover_source_dirs_sets_correct_source_type ... ok
[INFO] [stdout] test engine::tests::validate_fallback_no_aipm_toml_missing_all_markers_claude ... ok
[INFO] [stdout] test engine::tests::validate_fallback_no_aipm_toml_missing_all_markers_copilot ... ok
[INFO] [stdout] test engine::tests::human_readable_error_single_marker ... ok
[INFO] [stdout] test discovery::tests::discover_returns_sorted_results ... ok
[INFO] [stdout] test discovery::tests::discover_source_dirs_finds_both_claude_and_github ... ok
[INFO] [stdout] test engine::tests::validate_fallback_no_aipm_toml_valid_markers_claude ... ok
[INFO] [stdout] test discovery::tests::discover_with_gitignore_skips_ignored ... ok
[INFO] [stdout] test engine::tests::validate_fallback_no_aipm_toml_valid_markers_copilot ... ok
[INFO] [stdout] test engine::tests::validate_malformed_aipm_toml_treated_as_universal ... ok
[INFO] [stdout] test frontmatter::tests::field_lines_accounts_for_leading_blank_lines ... ok
[INFO] [stdout] test frontmatter::tests::field_lines_multiline_value_records_starting_line ... ok
[INFO] [stdout] test frontmatter::tests::field_lines_tracks_each_key_line ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_description_field ... ok
[INFO] [stdout] test frontmatter::tests::field_lines_empty_frontmatter_no_fields ... ok
[INFO] [stdout] test engine::tests::validate_with_aipm_toml_engines_omitted_is_universal ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_exact_match ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_empty_value_returns_none ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_extra_spaces ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_trailing_spaces_trim ... ok
[INFO] [stdout] test frontmatter::tests::field_value_range_wrong_key_returns_none ... ok
[INFO] [stdout] test frontmatter::tests::parse_body_is_content_after_closing ... ok
[INFO] [stdout] test frontmatter::tests::parse_carriage_return_body ... ok
[INFO] [stdout] test frontmatter::tests::parse_crlf_line_endings ... ok
[INFO] [stdout] test frontmatter::tests::parse_disable_model_invocation ... ok
[INFO] [stdout] test frontmatter::tests::parse_empty_content ... ok
[INFO] [stdout] test frontmatter::tests::parse_empty_value_key ... ok
[INFO] [stdout] test frontmatter::tests::parse_end_line_correct ... ok
[INFO] [stdout] test frontmatter::tests::parse_final_key_empty_no_continuation ... ok
[INFO] [stdout] test frontmatter::tests::parse_hooks_block_exits_on_non_indented_line ... ok
[INFO] [stdout] test frontmatter::tests::parse_hooks_inline_value ... ok
[INFO] [stdout] test frontmatter::tests::parse_hooks_single_space_indent_fallback ... ok
[INFO] [stdout] test frontmatter::tests::parse_key_empty_value_no_continuation ... ok
[INFO] [stdout] test frontmatter::tests::parse_leading_blank_lines ... ok
[INFO] [stdout] test frontmatter::tests::parse_leading_blank_lines_start_line_offset ... ok
[INFO] [stdout] test frontmatter::tests::parse_leading_spaces_only ... ok
[INFO] [stdout] test frontmatter::tests::parse_line_without_colon_ignored ... ok
[INFO] [stdout] test frontmatter::tests::parse_missing_closing_delimiter ... ok
[INFO] [stdout] test frontmatter::tests::parse_multiline_hooks_with_tab_indent ... ok
[INFO] [stdout] test frontmatter::tests::parse_multiline_hooks_block ... ok
[INFO] [stdout] test frontmatter::tests::parse_multiline_key_then_eof_no_continuation ... ok
[INFO] [stdout] test frontmatter::tests::parse_no_body_after_closing ... ok
[INFO] [stdout] test frontmatter::tests::parse_no_frontmatter ... ok
[INFO] [stdout] test frontmatter::tests::parse_quoted_values_stripped ... ok
[INFO] [stdout] test frontmatter::tests::parse_tab_indented_multiline ... ok
[INFO] [stdout] test frontmatter::tests::parse_unknown_keys_preserved ... ok
[INFO] [stdout] test frontmatter::tests::parse_valid_frontmatter ... ok
[INFO] [stdout] test frontmatter::tests::parse_value_with_colon ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_double ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_empty ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_mismatched ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_no_match_cases ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_no_quotes ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_single ... ok
[INFO] [stdout] test engine::tests::validate_unreadable_aipm_toml_treated_as_universal ... ok
[INFO] [stdout] test frontmatter::tests::strip_yaml_quotes_single_quotes ... ok
[INFO] [stdout] test engine::tests::validate_with_aipm_toml_matching_engine ... ok
[INFO] [stdout] test fs::tests::read_or_default_deserializes_valid_json ... ok
[INFO] [stdout] test engine::tests::validate_with_aipm_toml_engine_not_in_list ... ok
[INFO] [stdout] test fs::tests::read_or_default_returns_default_when_file_missing ... ok
[INFO] [stdout] test fs::tests::read_or_default_returns_err_on_non_not_found_io_error ... ok
[INFO] [stdout] test fs::tests::read_or_default_errors_on_invalid_json ... ok
[INFO] [stdout] test fs::tests::read_toml_or_default_returns_default_when_file_missing ... ok
[INFO] [stdout] test fs::tests::read_toml_or_default_errors_on_invalid_toml ... ok
[INFO] [stdout] test fs::tests::read_toml_or_default_deserializes_valid_toml ... ok
[INFO] [stdout] test discovery::tests::discover_features_skips_node_modules_and_target ... ok
[INFO] [stdout] test fs::tests::real_is_file_returns_false_for_nonexistent ... ok
[INFO] [stdout] test fs::tests::real_is_file_returns_true_for_regular_file ... ok
[INFO] [stdout] test fs::tests::real_is_file_returns_false_for_directory ... ok
[INFO] [stdout] test fs::tests::real_copy_file ... ok
[INFO] [stdout] test fs::tests::read_toml_or_default_returns_err_on_non_not_found_io_error ... ok
[INFO] [stdout] test fs::tests::real_is_file_returns_false_for_symlink_to_directory ... ok
[INFO] [stdout] test fs::tests::real_hard_link ... ok
[INFO] [stdout] test fs::tests::real_read_dir_nonexistent ... ok
[INFO] [stdout] test fs::tests::real_remove_file ... ok
[INFO] [stdout] test fs::tests::real_remove_dir_all ... ok
[INFO] [stdout] test fs::tests::real_read_dir_lists_entries ... ok
[INFO] [stdout] test fs::tests::real_is_symlink_returns_false_for_regular ... ok
[INFO] [stdout] test fs::tests::write_file_with_parents_bare_filename_no_parent_create ... ok
[INFO] [stdout] test fs::tests::real_symlink_dir_and_read_link ... ok
[INFO] [stdout] test fs::tests::real_is_file_returns_true_for_symlink_to_file ... ok
[INFO] [stdout] test generate::marketplace::tests::create_with_no_plugins ... ok
[INFO] [stdout] test fs::tests::write_file_with_parents_creates_nested_dirs_and_file ... ok
[INFO] [stdout] test fs::tests::real_read_dir_distinguishes_files_and_dirs ... ok
[INFO] [stdout] test fs::tests::real_read_dir_empty_dir ... ok
[INFO] [stdout] test generate::marketplace::tests::create_with_plugins ... ok
[INFO] [stdout] test fs::tests::write_file_with_parents_empty_parent_skips_create_dir_all ... ok
[INFO] [stdout] test fs::tests::real_atomic_write ... ok
[INFO] [stdout] test fs::tests::write_file_with_parents_overwrites_existing_file ... ok
[INFO] [stdout] test fs::tests::write_file_with_parents_single_level_parent ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_adds_multiple_plugins ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_all_duplicates_no_write ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_empty_entries_is_noop ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_skips_duplicates ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_returns_error_when_plugins_missing ... ok
[INFO] [stdout] test generate::marketplace::tests::register_new_plugin ... ok
[INFO] [stdout] test generate::marketplace::tests::unregister_nonexistent_is_noop ... ok
[INFO] [stdout] test generate::marketplace::tests::register_duplicate_is_skipped ... ok
[INFO] [stdout] test generate::marketplace::tests::unregister_returns_error_when_plugins_missing ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_with_subpath_is_file_not_dir ... ok
[INFO] [stdout] test generate::plugin_json::tests::all_component_keys ... ok
[INFO] [stdout] test generate::marketplace::tests::register_returns_error_when_plugins_missing ... ok
[INFO] [stdout] test generate::marketplace::tests::unregister_existing_plugin ... ok
[INFO] [stdout] test acquirer::tests::acquire_with_redirect_redirect_loop ... ok
[INFO] [stdout] test generate::plugin_json::tests::empty_components_produces_no_extra_keys ... ok
[INFO] [stdout] test generate::plugin_json::tests::minimal_plugin_json ... ok
[INFO] [stdout] test generate::plugin_json::tests::valid_json_roundtrip ... ok
[INFO] [stdout] test generate::plugin_json::tests::special_characters_in_description ... ok
[INFO] [stdout] test generate::plugin_json::tests::with_components ... ok
[INFO] [stdout] test generate::settings::tests::add_known_marketplace_non_object_ekm_returns_false ... ok
[INFO] [stdout] test generate::settings::tests::add_known_marketplace_non_object_root_returns_false ... ok
[INFO] [stdout] test generate::settings::tests::add_known_marketplace_to_empty_object ... ok
[INFO] [stdout] test generate::settings::tests::enable_plugin_non_object_root_returns_false ... ok
[INFO] [stdout] test generate::settings::tests::add_known_marketplace_adds_alongside_existing ... ok
[INFO] [stdout] test generate::settings::tests::enable_plugin_adds_alongside_existing ... ok
[INFO] [stdout] test generate::settings::tests::enable_plugin_non_object_ep_returns_false ... ok
[INFO] [stdout] test generate::settings::tests::enable_plugin_to_empty_object ... ok
[INFO] [stdout] test generate::settings::tests::full_rmw_cycle_preserves_existing_keys ... ok
[INFO] [stdout] test generate::settings::tests::full_rmw_cycle_with_missing_file ... ok
[INFO] [stdout] test generate::settings::tests::read_or_create_parses_existing_file ... ok
[INFO] [stdout] test generate::plugin_json::tests::trailing_newline ... ok
[INFO] [stdout] test generate::settings::tests::add_known_marketplace_skips_duplicate ... ok
[INFO] [stdout] test generate::settings::tests::read_or_create_propagates_non_not_found_error ... ok
[INFO] [stdout] test generate::settings::tests::read_or_create_returns_empty_object_for_missing_file ... ok
[INFO] [stdout] test generate::settings::tests::read_or_create_returns_error_for_invalid_json ... ok
[INFO] [stdout] test generate::settings::tests::enable_plugin_skips_duplicate ... ok
[INFO] [stdout] test generate::settings::tests::write_pretty_prints_with_newline ... ok
[INFO] [stdout] test init::tests::fail_fs_write_file_ok_branch ... ok
[INFO] [stdout] test init::tests::init_agent_layout_dir_fails ... ok
[INFO] [stdout] test init::tests::init_agent_layout_write_fails ... ok
[INFO] [stdout] test init::tests::init_fails_for_empty_name ... ok
[INFO] [stdout] test init::tests::init_fails_for_scoped_name_with_empty_scope ... ok
[INFO] [stdout] test init::tests::init_fails_for_scoped_name_with_invalid_segment ... ok
[INFO] [stdout] test init::tests::init_composite_write_fails_on_gitkeep ... ok
[INFO] [stdout] test init::tests::init_fails_on_write_file_error ... ok
[INFO] [stdout] test init::tests::init_hook_layout_write_fails ... ok
[INFO] [stdout] test init::tests::init_fails_if_already_initialized ... ok
[INFO] [stdout] test init::tests::init_fails_on_create_dir_error ... ok
[INFO] [stdout] test init::tests::init_mcp_layout_write_fails ... ok
[INFO] [stdout] test init::tests::init_creates_manifest_and_dirs ... ok
[INFO] [stdout] test init::tests::init_skill_layout_fails_on_second_create_dir ... ok
[INFO] [stdout] test init::tests::generated_manifest_is_parseable ... ok
[INFO] [stdout] test init::tests::init_fails_for_scoped_name_without_slash ... ok
[INFO] [stdout] test engine::tests::engine_display ... ok
[INFO] [stdout] test init::tests::invalid_names ... ok
[INFO] [stdout] test init::tests::valid_names ... ok
[INFO] [stdout] test init::tests::init_fails_for_invalid_name ... ok
[INFO] [stdout] test init::tests::init_skill_write_fails_on_template ... ok
[INFO] [stdout] test init::tests::make_temp_dir_cleans_up_existing_directory ... ok
[INFO] [stdout] test init::tests::init_skill_type_creates_template ... ok
[INFO] [stdout] test installed::tests::applies_to_specific_engine ... ok
[INFO] [stdout] test installed::tests::engines_overlap_both_empty ... ok
[INFO] [stdout] test init::tests::init_no_directory_name_from_root_path ... ok
[INFO] [stdout] test installed::tests::engines_overlap_no_match ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_local_repo_success ... ok
[INFO] [stdout] test installed::tests::engines_overlap_one_empty ... ok
[INFO] [stdout] test installed::tests::cache_policy_serialization_roundtrip ... ok
[INFO] [stdout] test installed::tests::install_additive_deduplicates ... ok
[INFO] [stdout] test installed::tests::engines_overlap_case_insensitive ... ok
[INFO] [stdout] test init::tests::init_each_type_sets_correct_manifest ... ok
[INFO] [stdout] test generate::marketplace::tests::register_all_returns_error_when_file_not_found ... ok
[INFO] [stdout] test installed::tests::applies_to_all_engines ... ok
[INFO] [stdout] test installed::tests::engines_overlap_matching ... ok
[INFO] [stdout] test installed::tests::install_additive_engines ... ok
[INFO] [stdout] test installed::tests::install_no_engine_resets_to_all ... ok
[INFO] [stdout] test installed::tests::install_new_plugin ... ok
[INFO] [stdout] test installed::tests::install_specific_engine_when_all_is_noop ... ok
[INFO] [stdout] test installed::tests::install_stores_cache_policy ... ok
[INFO] [stdout] test installed::tests::name_conflict_adding_engine_causes_overlap ... ok
[INFO] [stdout] test installed::tests::name_conflict_case_insensitive ... ok
[INFO] [stdout] test installed::tests::install_unparseable_spec_skips_conflict_check ... ok
[INFO] [stdout] test installed::tests::name_conflict_same_name_all_engines ... ok
[INFO] [stdout] test installed::tests::name_conflict_all_engines_vs_specific ... ok
[INFO] [stdout] test installed::tests::name_conflict_allowed_non_overlapping_engines ... ok
[INFO] [stdout] test installed::tests::no_conflict_different_names ... ok
[INFO] [stdout] test installed::tests::no_conflict_same_spec_reinstall ... ok
[INFO] [stdout] test installed::tests::reinstall_none_preserves_existing_cache_policy ... ok
[INFO] [stdout] test installed::tests::reinstall_updates_cache_policy ... ok
[INFO] [stdout] test installed::tests::plugins_for_engine ... ok
[INFO] [stdout] test installed::tests::resolve_spec_by_name_disambiguated_by_engine ... ok
[INFO] [stdout] test installed::tests::resolve_spec_by_name_ambiguous ... ok
[INFO] [stdout] test installed::tests::resolve_spec_engine_filter_matches_all_engines_plugin ... ok
[INFO] [stdout] test installed::tests::resolve_spec_non_shorthand_not_found ... ok
[INFO] [stdout] test installed::tests::resolve_spec_by_name_unique ... ok
[INFO] [stdout] test installed::tests::resolve_spec_exact_match ... ok
[INFO] [stdout] test installed::tests::serialization_roundtrip ... ok
[INFO] [stdout] test installed::tests::uninstall_missing ... ok
[INFO] [stdout] test installed::tests::uninstall_engine_from_all_engines ... ok
[INFO] [stdout] test installed::tests::ttl_stored_with_non_auto_policy ... ok
[INFO] [stdout] test installed::tests::uninstall_engine_from_explicit_list ... ok
[INFO] [stdout] test installed::tests::resolve_spec_not_found ... ok
[INFO] [stdout] test installer::manifest_editor::tests::parse_package_spec_exact_version ... ok
[INFO] [stdout] test installed::tests::uninstall_existing ... ok
[INFO] [stdout] test installer::manifest_editor::tests::parse_package_spec_with_version ... ok
[INFO] [stdout] test installed::tests::uninstall_last_engine_removes_plugin ... ok
[INFO] [stdout] test installer::manifest_editor::tests::parse_package_spec_without_version ... ok
[INFO] [stdout] test installed::tests::uninstall_engine_missing_plugin ... ok
[INFO] [stdout] test installer::manifest_editor::tests::add_dependency_fails_when_dependencies_is_scalar ... ok
[INFO] [stdout] test installer::pipeline::tests::build_lockfile_workspace_source ... ok
[INFO] [stdout] test installer::pipeline::tests::build_lockfile_from_resolution ... ok
[INFO] [stdout] test installer::pipeline::tests::build_lockfile_path_source ... ok
[INFO] [stdout] test installer::pipeline::tests::build_pins_from_packages ... ok
[INFO] [stdout] test installer::pipeline::tests::build_resolution_from_lockfile_invalid_version_errors ... ok
[INFO] [stdout] test installer::pipeline::tests::build_resolution_from_lockfile_path_source ... ok
[INFO] [stdout] test installer::pipeline::tests::build_resolution_from_lockfile_round_trip ... ok
[INFO] [stdout] test installer::pipeline::tests::build_pins_skips_invalid_version_entries ... ok
[INFO] [stdout] test installer::pipeline::tests::build_resolution_from_lockfile_unknown_source_fallback ... ok
[INFO] [stdout] test installer::pipeline::tests::clear_dev_links_when_no_state_file ... ok
[INFO] [stdout] test installer::manifest_editor::tests::remove_nonexistent_is_noop ... ok
[INFO] [stdout] test installer::manifest_editor::tests::add_dependency_updates_existing ... ok
[INFO] [stdout] test installer::manifest_editor::tests::add_dependency_creates_table_if_missing ... ok
[INFO] [stdout] test installer::pipeline::tests::collect_transitive_skips_missing_member ... ok
[INFO] [stdout] test installer::pipeline::tests::collect_transitive_registry_deps_from_workspace_members ... ok
[INFO] [stdout] test installer::pipeline::tests::collect_transitive_skips_member_with_no_deps ... ok
[INFO] [stdout] test installer::pipeline::tests::discover_workspace_members_from_manifest ... ok
[INFO] [stdout] test installer::pipeline::tests::collect_transitive_registry_deps_with_detailed ... ok
[INFO] [stdout] test installer::manifest_editor::tests::remove_dependency_no_deps_table_is_noop ... ok
[INFO] [stdout] test installer::pipeline::tests::discover_workspace_members_via_workspace_root ... ok
[INFO] [stdout] test installer::manifest_editor::tests::add_dependency_to_existing_table ... ok
[INFO] [stdout] test init::tests::init_uses_directory_name_as_default ... ok
[INFO] [stdout] test installer::manifest_editor::tests::remove_dependency_removes_entry ... ok
[INFO] [stdout] test installer::pipeline::tests::discover_workspace_members_no_workspace_context ... ok
[INFO] [stdout] test installer::pipeline::tests::clear_dev_links_with_existing_entries ... ok
[INFO] [stdout] test installer::pipeline::tests::handle_removals_no_existing_lockfile ... ok
[INFO] [stdout] test installer::pipeline::tests::extract_dep_names_from_manifest ... ok
[INFO] [stdout] test installer::pipeline::tests::discover_workspace_members_workspace_root_no_manifest_file ... ok
[INFO] [stdout] test installer::pipeline::tests::clear_dev_links_with_existing_entries_clears_them ... ok
[INFO] [stdout] test installer::pipeline::tests::extract_dep_names_no_dependencies ... ok
[INFO] [stdout] test installer::pipeline::tests::install_fails_when_package_not_in_registry ... ok
[INFO] [stdout] test installer::pipeline::tests::install_locked_fails_on_drift ... ok
[INFO] [stdout] test installer::pipeline::tests::install_locked_fails_without_lockfile ... ok
[INFO] [stdout] test installer::pipeline::tests::handle_removals_no_stale_packages_returns_zero ... ok
[INFO] [stdout] test installer::pipeline::tests::install_transitive_workspace_deps_in_place ... ok
[INFO] [stdout] test acquirer::tests::file_count_exceeds_limit ... ok
[INFO] [stdout] test installer::pipeline::tests::install_second_run_counts_up_to_date ... ok
[INFO] [stdout] test installer::pipeline::tests::discover_workspace_members_workspace_root_no_workspace_section ... ok
[INFO] [stdout] test installer::pipeline::tests::handle_removals_with_stale_package_increments_removed ... ok
[INFO] [stdout] test installer::pipeline::tests::install_locked_without_lockfile_returns_drift_error ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_invalid_manifest_toml_returns_manifest_error ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_malformed_lockfile_returns_manifest_error ... ok
[INFO] [stdout] test installer::pipeline::tests::manifest_to_resolver_deps_detailed_no_version ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_add_package ... ok
[INFO] [stdout] test installer::pipeline::tests::manifest_to_resolver_deps_detailed ... ok
[INFO] [stdout] test installer::pipeline::tests::manifest_to_resolver_deps_no_dependencies ... ok
[INFO] [stdout] test installer::pipeline::tests::manifest_to_resolver_deps_simple ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_detects_version_change ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_false_when_found_and_both_match ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_false_when_same ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_true_when_checksum_differs ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_true_when_no_lockfile ... ok
[INFO] [stdout] test installer::pipeline::tests::needs_update_true_when_package_not_in_lockfile ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_collects_transitive_dep_strings ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_direct_workspace_dep ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_error_unknown_member ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_link_overrides_keep_workspace_source ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_registry_deps_empty ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_registry_deps_locked_with_no_lockfile_falls_through ... ok
[INFO] [stdout] test installer::pipeline::tests::link_resolved_packages_skips_path_source ... ok
[INFO] [stdout] test installer::pipeline::tests::install_locked_clears_dev_links ... ok
[INFO] [stdout] test installer::pipeline::tests::install_workspace_deps_end_to_end ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_workspace_dep_invalid_version ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_transitive_workspace_deps ... ok
[INFO] [stdout] test installer::pipeline::tests::link_resolved_packages_workspace_source ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_manifest_having_overrides ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_all_workspace ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_detailed_no_version ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_workspace_deps_skips_duplicate_names ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_workspace_dep_with_detailed_non_ws_transitive ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_all_registry ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_empty ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_workspace_and_registry ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_circular_deps ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_existing_lockfile_reconciles ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_registry_deps_with_removed_dep_falls_through_to_resolution ... ok
[INFO] [stdout] test installer::pipeline::tests::install_workspace_dep_already_in_plugins_dir ... ok
[INFO] [stdout] test installer::pipeline::tests::link_resolved_packages_skips_link_override ... ok
[INFO] [stdout] test installer::pipeline::tests::update_full_re_resolves_all ... ok
[INFO] [stdout] test installer::pipeline::tests::split_deps_detailed_non_workspace ... ok
[INFO] [stdout] test installer::pipeline::tests::update_full_with_existing_lockfile ... ok
[INFO] [stdout] test installer::pipeline::tests::resolve_dependencies_locked_with_lockfile_uses_it ... ok
[INFO] [stdout] test installer::pipeline::tests::install_with_changed_manifest_forces_re_resolution ... ok
[INFO] [stdout] test linker::directory_link::tests::is_link_returns_false_for_nonexistent ... ok
[INFO] [stdout] test linker::directory_link::tests::create_fails_if_source_missing ... ok
[INFO] [stdout] test linker::directory_link::tests::is_link_returns_false_for_regular_dir ... ok
[INFO] [stdout] test linker::directory_link::tests::create_fails_if_target_is_regular_dir ... ok
[INFO] [stdout] test linker::directory_link::tests::create_makes_parent_dirs ... ok
[INFO] [stdout] test linker::directory_link::tests::remove_symlink ... ok
[INFO] [stdout] test linker::gitignore::tests::add_entry_at_sign_without_slash_is_not_scoped ... ok
[INFO] [stdout] test linker::directory_link::tests::create_and_read_symlink ... ok
[INFO] [stdout] test linker::directory_link::tests::create_replaces_existing_symlink ... ok
[INFO] [stdout] test installer::pipeline::tests::update_all_without_lockfile ... ok
[INFO] [stdout] test linker::directory_link::tests::create_with_parentless_target_skips_parent_mkdir ... ok
[INFO] [stdout] test linker::gitignore::tests::build_content_trailing_newline_not_doubled_when_after_empty_line ... ok
[INFO] [stdout] test linker::gitignore::tests::add_scoped_entry_scope_dir_already_present_is_idempotent ... ok
[INFO] [stdout] test linker::gitignore::tests::read_entries_empty_file ... ok
[INFO] [stdout] test linker::gitignore::tests::read_or_default_returns_error_on_permission_denied ... ok
[INFO] [stdout] test linker::gitignore::tests::add_entry_preserves_existing_manual_entries ... ok
[INFO] [stdout] test installer::pipeline::tests::update_targeted_package ... ok
[INFO] [stdout] test linker::gitignore::tests::preserves_content_after_markers ... ok
[INFO] [stdout] test linker::gitignore::tests::add_entry_creates_file_with_markers ... ok
[INFO] [stdout] test linker::gitignore::tests::add_scoped_entry_adds_scope_dir ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_entry_removes_package ... ok
[INFO] [stdout] test linker::gitignore::tests::add_entry_idempotent ... ok
[INFO] [stdout] test linker::gitignore::tests::managed_section_ignores_comment_lines_within_markers ... ok
[INFO] [stdout] test installer::pipeline::tests::update_second_run_counts_up_to_date ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_scoped_entry_removes_scope_when_last ... ok
[INFO] [stdout] test linker::gitignore::tests::split_sections_empty_line_in_managed_section_is_skipped ... ok
[INFO] [stdout] test installer::pipeline::tests::update_targeted_with_existing_lockfile ... ok
[INFO] [stdout] test linker::gitignore::tests::split_sections_only_start_marker_no_end ... ok
[INFO] [stdout] test linker::gitignore::tests::write_gitignore_empty_path_returns_io_error ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_nonexistent_is_noop ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_absolute_rel_path_skips_parent_dir_creation ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_empty_package ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_creates_directory_tree ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_scoped_entry_keeps_scope_when_others_exist ... ok
[INFO] [stdout] test installer::pipeline::tests::update_with_stale_checksum_in_lockfile_reinstalls ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_missing_hash_returns_error ... ok
[INFO] [stdout] test linker::gitignore::tests::split_sections_reversed_markers_treated_as_no_markers ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_scoped_entry_scope_removed_when_non_scoped_packages_also_present ... ok
[INFO] [stdout] test linker::gitignore::tests::remove_scoped_entry_with_another_scoped_package_keeps_scope ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_cleans_existing_directory ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_with_valid_subpath ... ok
[INFO] [stdout] test linker::link_state::tests::write_to_root_returns_error ... ok
[INFO] [stdout] test linker::link_state::tests::read_other_io_error_propagates ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_file_content_matches ... ok
[INFO] [stdout] test linker::link_state::tests::read_nonexistent_returns_default ... ok
[INFO] [stdout] test linker::link_state::tests::read_invalid_toml_returns_error ... ok
[INFO] [stdout] test linker::link_state::tests::written_file_has_header_comment ... ok
[INFO] [stdout] test linker::link_state::tests::remove_nonexistent_is_noop ... ok
[INFO] [stdout] test linker::pipeline::tests::unlink_package_cleans_assembled_dir_when_plugin_link_absent ... ok
[INFO] [stdout] test linker::link_state::tests::remove_entry ... ok
[INFO] [stdout] test linker::pipeline::tests::unlink_nonexistent_is_noop ... ok
[INFO] [stdout] test linker::link_state::tests::add_creates_entry ... ok
[INFO] [stdout] test linker::link_state::tests::write_and_read_roundtrip ... ok
[INFO] [stdout] test linker::hard_link::tests::assemble_deeply_nested_files ... ok
[INFO] [stdout] test linker::security::tests::blocked_scripts_filters_correctly ... ok
[INFO] [stdout] test linker::security::tests::no_scripts_no_verdicts ... ok
[INFO] [stdout] test lint::config::tests::default_config_has_no_overrides ... ok
[INFO] [stdout] test lint::config::tests::is_suppressed_returns_true_for_allow ... ok
[INFO] [stdout] test linker::security::tests::all_allowed_when_all_in_allowlist ... ok
[INFO] [stdout] test lint::config::tests::rule_ignore_paths_returns_empty_for_simple ... ok
[INFO] [stdout] test linker::security::tests::all_blocked_with_empty_allowlist ... ok
[INFO] [stdout] test linker::security::tests::allowed_packages_pass ... ok
[INFO] [stdout] test linker::link_state::tests::clear_all_removes_everything ... ok
[INFO] [stdout] test lint::config::tests::rule_ignore_paths_returns_paths_for_detailed ... ok
[INFO] [stdout] test linker::pipeline::tests::link_package_creates_both_tiers ... ok
[INFO] [stdout] test lint::config::tests::is_suppressed_returns_false_for_level ... ok
[INFO] [stdout] test lint::config::tests::rule_options_empty_for_allow_variant ... ok
[INFO] [stdout] test lint::config::tests::severity_override_from_detailed ... ok
[INFO] [stdout] test lint::config::tests::rule_options_empty_for_level_variant ... ok
[INFO] [stdout] test installer::pipeline::tests::install_creates_lockfile ... ok
[INFO] [stdout] test linker::pipeline::tests::unlink_package_removes_both_tiers ... ok
[INFO] [stdout] test lint::config::tests::rule_options_empty_for_missing_rule ... ok
[INFO] [stdout] test linker::pipeline::tests::link_package_replaces_existing ... ok
[INFO] [stdout] test linker::link_state::tests::add_replaces_existing ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_code_property_present ... ok
[INFO] [stdout] test lint::config::tests::rule_override_detailed_with_options_stores_and_returns ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_defaults_line_col ... ok
[INFO] [stdout] test lint::config::tests::severity_override_returns_level ... ok
[INFO] [stdout] test lint::config::tests::severity_override_returns_none_for_allow ... ok
[INFO] [stdout] test lint::config::tests::severity_override_none_level_in_detailed_returns_none ... ok
[INFO] [stdout] test lint::diagnostic::tests::diagnostic_construction ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_error_format ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_escape_semicolon_in_help_url ... ok
[INFO] [stdout] test lint::diagnostic::tests::severity_from_str_config_invalid ... ok
[INFO] [stdout] test lint::diagnostic::tests::severity_from_str_config_valid ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_no_task_complete_on_clean_run ... ok
[INFO] [stdout] test lint::diagnostic::tests::severity_ordering_warning_less_than_error ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_group_per_file ... ok
[INFO] [stdout] test lint::diagnostic::tests::severity_display ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_no_task_complete_on_errors ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_single_file_single_group ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_empty_diagnostics ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_rule_id_with_slashes_unchanged ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_task_complete_on_warnings_only ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_with_help_text_and_url ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_with_col ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_with_help_text_only ... ok
[INFO] [stdout] test lint::reporter::tests::ci_github_defaults_line_col ... ok
[INFO] [stdout] test lint::reporter::tests::ci_github_empty_diagnostics ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_with_neither ... ok
[INFO] [stdout] test lint::reporter::tests::ci_github_error_format ... ok
[INFO] [stdout] test lint::reporter::tests::ci_github_with_col ... ok
[INFO] [stdout] test lint::reporter::tests::color_choice_auto_no_color_env ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_with_help_url_only ... ok
[INFO] [stdout] test lint::reporter::tests::escape_json_string_special_chars ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_escape_bracket_in_help_text ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_col_and_end_col_span ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_escape_newline_in_message ... ok
[INFO] [stdout] test lint::reporter::tests::format_azure_logissue_body_help_url_only ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_col_only_span ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_directory_level_no_snippet ... ok
[INFO] [stdout] test lint::reporter::tests::format_azure_logissue_body_both_present ... ok
[INFO] [stdout] test lint::reporter::tests::color_choice_never_always ... ok
[INFO] [stdout] test lint::reporter::tests::format_azure_logissue_body_neither ... ok
[INFO] [stdout] test lint::reporter::tests::format_azure_logissue_body_help_text_only ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_empty_file_with_line_number ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_graceful_missing_file ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_help_text_and_url_together ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_line_past_file_end ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_no_color_output ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_no_issues ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_renders_help_text ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_renders_help_url ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_renders_snippet_with_source ... ok
[INFO] [stdout] test lint::reporter::tests::json_reporter_empty ... ok
[INFO] [stdout] test lint::reporter::tests::json_reporter_includes_new_fields ... ok
[INFO] [stdout] test lint::reporter::tests::json_reporter_valid_json ... ok
[INFO] [stdout] test lint::reporter::tests::text_reporter_errors_only ... ok
[INFO] [stdout] test lint::reporter::tests::human_reporter_styled_renderer_executes ... ok
[INFO] [stdout] test lint::reporter::tests::json_reporter_null_optional_fields ... ok
[INFO] [stdout] test lint::reporter::tests::text_reporter_file_path_and_line ... ok
[INFO] [stdout] test lint::reporter::tests::text_reporter_warnings_only ... ok
[INFO] [stdout] test lint::reporter::tests::text_reporter_formats_diagnostics ... ok
[INFO] [stdout] test lint::reporter::tests::text_reporter_no_issues ... ok
[INFO] [stdout] test lint::rule::tests::check_file_returns_empty ... ok
[INFO] [stdout] test lint::rule::tests::default_help_text_is_none ... ok
[INFO] [stdout] test lint::rule::tests::default_help_url_is_none ... ok
[INFO] [stdout] test lint::rules::agent_missing_tools::tests::check_file_agent_with_tools_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::agent_missing_tools::tests::check_file_agent_without_tools_warns ... ok
[INFO] [stdout] test lint::rules::agent_missing_tools::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_absolute_path_rejected ... ok
[INFO] [stdout] test lint::rules::agent_missing_tools::tests::check_file_no_frontmatter_warns ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_broken_reference_produces_diagnostic ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_empty_ref_path_skipped ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_existing_reference_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_multiple_references_same_line ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_no_skill_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_reference_terminated_by_single_quote ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_skill_dir_prefix ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_reference_terminated_by_double_quote ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_root_path_no_parent_returns_empty ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_canonical_names_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_non_object_json_skipped ... ok
[INFO] [stdout] test lint::rules::broken_paths::tests::check_file_path_traversal_rejected ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_locate_json_key_returns_none_for_unicode_escaped_key ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_multiline_json_line_number_found ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_malformed_json_silently_skipped ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_malformed_json_error ... ok
[INFO] [stdout] test lint::rules::hook_legacy_event::tests::check_file_legacy_event_diagnostic ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_structural_keys_are_skipped ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_unknown_event_diagnostic ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_valid_events_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::absolute_path_rejected ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::absolute_path_in_at_import_rejected ... ok
[INFO] [stdout] test lint::rules::hook_unknown_event::tests::check_file_non_object_json_skipped ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::at_import_basic ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::at_import_non_md_ignored ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::at_import_resolves_and_sums_sizes ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::at_import_with_leading_whitespace_trimmed ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::at_import_with_spaces_ignored ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::circular_import_no_infinite_loop ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::external_url_ignored ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::http_url_ignored ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::markdown_link_basic ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::markdown_link_resolves ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::markdown_link_unclosed_paren_ignored ... ok
[INFO] [stdout] test acquirer::tests::acquire_with_redirect_follows_redirect ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::missing_file_returns_zero ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::missing_import_target_silently_skipped ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::mixed_imports_both_followed ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::nested_imports_all_counted ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::non_md_link_ignored ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::path_traversal_in_at_import_rejected ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::path_traversal_in_markdown_link_rejected ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::path_traversal_rejected ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::both_limits_exceeded_two_diagnostics ... ok
[INFO] [stdout] test lint::rules::import_resolver::tests::relative_path_safe ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::case_insensitive_detection_claude_lowercase ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::empty_file_no_finding ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::exactly_at_char_limit_no_finding ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::custom_thresholds_trigger_at_lower_limit ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::instructions_md_suffix ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_circular_no_loop ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_disabled_by_default ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::missing_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_diagnostic_message_includes_both_counts ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::over_char_limit_one_diagnostic ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::over_line_limit_one_diagnostic ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_basic ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_char_limit_exceeded_message_includes_resolved_and_direct_counts ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_markdown_link_followed ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::resolve_imports_under_limit_no_finding ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::small_file_no_finding ... ok
[INFO] [stdout] test lint::rules::known_events::tests::copilot_events_count ... ok
[INFO] [stdout] test lint::rules::known_events::tests::is_valid_event_claude ... ok
[INFO] [stdout] test lint::rules::known_events::tests::is_valid_event_copilot ... ok
[INFO] [stdout] test lint::rules::known_events::tests::is_valid_event_unknown_tool_falls_back_to_any ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::source_type_claude_for_dotclaude_file ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::source_type_project_for_root_file ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::exactly_at_line_limit_no_finding ... ok
[INFO] [stdout] test lint::rules::instructions_oversized::tests::subdirectory_detection ... ok
[INFO] [stdout] test lint::rules::known_events::tests::claude_events_count ... ok
[INFO] [stdout] test lint::rules::known_events::tests::is_valid_for_any_tool_union ... ok
[INFO] [stdout] test lint::rules::known_events::tests::suggest_canonical_finds_mapping ... ok
[INFO] [stdout] test lint::rules::known_events::tests::suggest_canonical_returns_none_for_non_legacy ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::both_mismatch_emits_two_diagnostics ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::check_file_no_grandparent_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::description_mismatch_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::description_only_in_marketplace_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::entry_without_source_skipped ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::no_plugins_array_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::nonexistent_marketplace_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::malformed_marketplace_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::pj_name_empty_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::plugin_json_not_found_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::check_file_shallow_path_no_grandparent_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::malformed_json_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::missing_plugins_array_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::matching_fields_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::mp_name_empty_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::nonexistent_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::multiple_plugins_one_bad_source_emits_one_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::plugin_entry_source_not_a_string_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::plugin_without_name_uses_index_in_message ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::name_mismatch_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::plugin_json_parse_error_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_field_mismatch::tests::rule_metadata ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::plugins_array_is_not_array_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::source_path_does_not_exist_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::misplaced_features::tests::help_text_without_marketplace_suggests_init ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::check_file_no_grandparent_returns_empty ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::source_without_dotslash_prefix_resolves ... ok
[INFO] [stdout] test lint::rules::misplaced_features::tests::check_file_produces_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::file_entries_ignored ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::source_present_and_resolves_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::missing_plugin_json_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::misplaced_features::tests::check_file_without_marketplace ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::ai_dir_not_readable_returns_empty ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::claude_plugin_dir_excluded_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::check_file_no_grandparent_returns_empty ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::duplicate_plugin_names_in_helper_are_deduplicated ... ok
[INFO] [stdout] test lint::rules::misplaced_features::tests::help_text_with_marketplace ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::empty_plugins_array_emits_diagnostic_for_each_dir ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::malformed_marketplace_json_emits_parse_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::file_entries_in_ai_dir_ignored ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::ai_dir_not_readable_returns_empty ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::all_plugins_have_manifest_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::check_file_no_grandparent_returns_empty ... ok
[INFO] [stdout] test lint::rules::plugin_missing_manifest::tests::claude_plugin_dir_excluded ... ok
[INFO] [stdout] test lint::rules::marketplace_source_resolve::tests::source_field_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::no_plugins_key_emits_missing_array_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::all_dirs_registered_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::nonexistent_marketplace_still_reports_unregistered ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::rule_metadata ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::all_fields_present_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::author_email_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::malformed_json_emits_single_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::description_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::author_name_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_missing_registration::tests::unregistered_dir_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::author_not_object_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::name_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::nonexistent_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::version_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::whitespace_only_fields_treated_as_missing ... ok
[INFO] [stdout] test lint::rules::scan::tests::list_plugin_dirs_excludes_claude_plugin ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::empty_string_fields_treated_as_missing ... ok
[INFO] [stdout] test lint::rules::plugin_required_fields::tests::author_missing_emits_diagnostic ... ok
[INFO] [stdout] test lint::rules::scan::tests::list_plugin_dirs_nonexistent_dir_returns_empty ... ok
[INFO] [stdout] test lint::rules::scan::tests::list_plugin_dirs_returns_dir_names ... ok
[INFO] [stdout] test lint::rules::scan::tests::list_plugin_dirs_skips_file_entries ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_agent_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_agent_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_hook_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_hook_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_skill_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::read_skill_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::rules::scan::tests::source_type_ai ... ok
[INFO] [stdout] test lint::rules::scan::tests::source_type_claude ... ok
[INFO] [stdout] test lint::rules::scan::tests::source_type_github ... ok
[INFO] [stdout] test lint::rules::skill_desc_too_long::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_desc_too_long::tests::check_file_no_frontmatter_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_desc_too_long::tests::check_file_no_description_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_desc_too_long::tests::check_file_populates_col_and_end_col ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_invalid_shell_diagnostic ... ok
[INFO] [stdout] test lint::rules::scan::tests::source_type_other ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_populates_col_and_end_col ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_valid_shell_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_missing_desc::tests::check_file_description_absent_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_missing_desc::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_no_frontmatter_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_missing_desc::tests::check_file_description_present_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_invalid_shell::tests::check_file_no_shell_field_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_missing_desc::tests::check_file_no_frontmatter_produces_no_frontmatter_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_desc_too_long::tests::check_file_exceeds_limit_produces_diagnostic ... ok
[INFO] [stdout] test lint::reporter::tests::ci_azure_sample_outcome_snapshot ... ok
[INFO] [stdout] test lint::rules::skill_missing_name::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_missing_name::tests::check_file_name_present_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_no_frontmatter_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::valid_names ... ok
[INFO] [stdout] test lint::rules::skill_name_too_long::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_name_too_long::tests::check_file_exceeds_limit_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_missing_name::tests::check_file_no_frontmatter_warns ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_empty_name_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_invalid_name_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_no_name_field_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_valid_name_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::invalid_names ... ok
[INFO] [stdout] test lint::rules::skill_missing_name::tests::check_file_name_absent_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_invalid::tests::check_file_populates_col_and_end_col ... ok
[INFO] [stdout] test lint::rules::skill_name_too_long::tests::check_file_no_name_field_no_diagnostic ... ok
[INFO] [stdout] test lint::rules::skill_name_too_long::tests::check_file_no_frontmatter_returns_empty ... ok
[INFO] [stdout] test lint::rules::skill_name_too_long::tests::check_file_populates_col_and_end_col ... ok
[INFO] [stdout] test lint::rules::skill_oversized::tests::check_file_no_file_returns_empty ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_agent_creates_entries ... ok
[INFO] [stdout] test lint::rules::skill_oversized::tests::check_file_oversized_diagnostic ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_existing ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_hooks_creates_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_hooks_no_duplicate_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_read_to_string_not_found ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_agent_no_duplicate_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_write_file ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_marketplace_json_creates_correct_path ... ok
[INFO] [stdout] test lint::rules::tests::locate_json_key_finds_key_on_first_line ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_marketplace_json_no_duplicate_dir_entry ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_plugin_json_adds_plugin_dir_entry_in_ai ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_plugin_json_creates_correct_path ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_plugin_json_no_duplicate_dir_entry ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_skill_creates_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_skill_no_duplicate_skill_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_create_dir_all ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_exists_false ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_no_duplicate_entries ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_read_dir_not_found ... ok
[INFO] [stdout] test lint::rules::test_helpers::tests::mock_fs_add_marketplace_json_adds_claude_plugin_dir_entry ... ok
[INFO] [stdout] test lint::rules::tests::locate_json_key_empty_content ... ok
[INFO] [stdout] test lint::rules::tests::locate_json_key_finds_key_on_later_line ... ok
[INFO] [stdout] test lint::rules::tests::locate_json_key_returns_none_for_missing_key ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_marketplace_kind ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_agent_kind ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_plugin_json_kind ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_plugin_kind_includes_broken_paths ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_instructions_kind ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_hook_kind ... ok
[INFO] [stdout] test lint::rules::tests::quality_rules_for_skill_kind ... ok
[INFO] [stdout] test lint::rules::tests::read_agent_preamble_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::tests::read_agent_preamble_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::tests::is_ignored_empty_patterns ... ok
[INFO] [stdout] test lint::tests::is_ignored_invalid_pattern_skipped ... ok
[INFO] [stdout] test lint::tests::is_ignored_prefix_glob ... ok
[INFO] [stdout] test lint::tests::is_ignored_no_match ... ok
[INFO] [stdout] test lint::tests::is_ignored_suffix_glob ... ok
[INFO] [stdout] test lint::tests::is_ignored_star_pattern ... ok
[INFO] [stdout] test lint::rules::tests::read_hook_preamble_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::tests::read_hook_preamble_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::rules::tests::read_skill_preamble_returns_none_for_missing_file ... ok
[INFO] [stdout] test lint::rules::tests::simple_diag_creates_diagnostic_with_no_positions ... ok
[INFO] [stdout] test lint::rules::tests::read_skill_preamble_returns_some_for_existing_file ... ok
[INFO] [stdout] test lint::tests::is_ignored_wildcard_pattern ... ok
[INFO] [stdout] test lint::rules::tests::simple_diag_warning_severity ... ok
[INFO] [stdout] test lint::tests::apply_rule_diagnostics_rule_ignore_path_filters_diagnostic ... ok
[INFO] [stdout] test lint::tests::diagnostics_sort_by_file_then_line_then_col ... ok
[INFO] [stdout] test lint::tests::lint_config_overrides_thresholds ... ok
[INFO] [stdout] test lint::tests::lint_empty_dir_no_sources ... ok
[INFO] [stdout] test lint::tests::error_display ... ok
[INFO] [stdout] test lint::tests::lint_config_suppress_misplaced_features ... ok
[INFO] [stdout] test lint::tests::lint_global_ignore_paths_filter_diagnostics ... ok
[INFO] [stdout] test lint::tests::lint_config_allow_suppresses_instructions_oversized ... ok
[INFO] [stdout] test lint::tests::lint_discovers_oversized_instruction_file ... ok
[INFO] [stdout] test lint::tests::lint_ignore_paths_filter_source_diagnostics ... ok
[INFO] [stdout] test lint::tests::lint_instruction_files_not_flagged_as_misplaced ... ok
[INFO] [stdout] test lint::tests::lint_marketplace_field_mismatch_emits_diagnostic ... ok
[INFO] [stdout] test acquirer::tests::acquire_git_empty_subpath_returns_empty_directory_error ... ok
[INFO] [stdout] test lint::tests::lint_discovers_nested_github_dirs ... ok
[INFO] [stdout] test lint::tests::lint_options_construction ... ok
[INFO] [stdout] test lint::tests::lint_no_sources_found_succeeds ... ok
[INFO] [stdout] test lint::tests::lint_outcome_default_counts ... ok
[INFO] [stdout] test lint::tests::lint_misplaced_features_suppressed_by_allow_config ... ok
[INFO] [stdout] test lint::tests::lint_plugin_missing_registration_emits_diagnostic ... ok
[INFO] [stdout] test lint::tests::lint_plugin_missing_manifest_emits_diagnostic ... ok
[INFO] [stdout] test lint::tests::lint_new_rules_configurable_via_allow ... ok
[INFO] [stdout] test lint::tests::lint_config_allow_suppresses_rules ... ok
[INFO] [stdout] test lint::tests::lint_plugin_json_missing_required_fields_emits_diagnostics ... ok
[INFO] [stdout] test lint::tests::lint_max_depth_limits_discovery ... ok
[INFO] [stdout] test lint::tests::lint_rule_ignore_paths_filter_diagnostics ... ok
[INFO] [stdout] test locked_file::tests::open_file_in_current_directory ... ok
[INFO] [stdout] test lint::tests::lint_severity_override_applied ... ok
[INFO] [stdout] test locked_file::tests::open_path_with_no_parent_skips_mkdir_and_fails ... ok
[INFO] [stdout] test lint::tests::lint_valid_marketplace_and_plugin_no_new_rule_diagnostics ... ok
[INFO] [stdout] test locked_file::tests::read_empty_file_returns_empty_string ... ok
[INFO] [stdout] test lint::tests::lint_source_filter_ai_skips_discovery ... ok
[INFO] [stdout] test lockfile::reconcile::tests::dep_removed ... ok
[INFO] [stdout] test lockfile::reconcile::tests::both_added_and_removed ... ok
[INFO] [stdout] test lockfile::reconcile::tests::empty_lockfile_all_new ... ok
[INFO] [stdout] test lockfile::reconcile::tests::new_dep_added ... ok
[INFO] [stdout] test lockfile::reconcile::tests::no_changes ... ok
[INFO] [stdout] test lockfile::reconcile::tests::prune_orphans_empty_reachable ... ok
[INFO] [stdout] test lockfile::reconcile::tests::prune_orphans_keeps_reachable ... ok
[INFO] [stdout] test lockfile::reconcile::tests::registry_packages_still_carried_forward ... ok
[INFO] [stdout] test lockfile::reconcile::tests::workspace_packages_excluded_from_carried_forward ... ok
[INFO] [stdout] test lockfile::tests::read_empty_lockfile ... ok
[INFO] [stdout] test lockfile::tests::read_invalid_toml_errors ... ok
[INFO] [stdout] test lockfile::tests::read_nonexistent_file_errors ... ok
[INFO] [stdout] test lockfile::tests::read_unsupported_version_errors ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_all_present ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_detects_removed_dep ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_empty_both ... ok
[INFO] [stdout] test lockfile::reconcile::tests::empty_manifest_all_removed ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_extra_lockfile_ok ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_missing_dep ... ok
[INFO] [stdout] test lockfile::tests::validate_matches_manifest_multiple_missing ... ok
[INFO] [stdout] test lockfile::tests::write_creates_parent_directories ... ok
[INFO] [stdout] test locked_file::tests::write_truncates_previous_content ... ok
[INFO] [stdout] test lockfile::tests::write_and_read_round_trip ... ok
[INFO] [stdout] test lockfile::tests::write_to_path_without_parent_returns_io_error ... ok
[INFO] [stdout] test lockfile::tests::written_file_contains_header ... ok
[INFO] [stdout] test lockfile::types::tests::deserialize_from_spec_format ... ok
[INFO] [stdout] test lockfile::types::tests::deserialize_no_packages_defaults_empty ... ok
[INFO] [stdout] test lockfile::types::tests::deserialize_missing_dependencies_defaults_empty ... ok
[INFO] [stdout] test lint::tests::lint_auto_discovers_sources ... ok
[INFO] [stdout] test lockfile::types::tests::new_lockfile_has_correct_version ... ok
[INFO] [stdout] test lint::tests::lint_source_github_filters_discovery ... ok
[INFO] [stdout] test lint::tests::lint_marketplace_source_not_found_emits_diagnostic ... ok
[INFO] [stdout] test lint::tests::lint_deduplicates_sources_scanned ... ok
[INFO] [stdout] test lockfile::types::tests::package_source_types ... ok
[INFO] [stdout] test lint::tests::lint_discovers_nested_claude_dirs ... ok
[INFO] [stdout] test logging::tests::log_format_equality ... ok
[INFO] [stdout] test lockfile::types::tests::round_trip_serialization_empty ... ok
[INFO] [stdout] test make::action::tests::action_debug_and_clone ... ok
[INFO] [stdout] test make::action::tests::action_variants_equality ... ok
[INFO] [stdout] test logging::tests::error_display ... ok
[INFO] [stdout] test logging::tests::log_format_debug ... ok
[INFO] [stdout] test make::discovery::tests::find_marketplace_not_found ... ok
[INFO] [stdout] test make::action::tests::plugin_created_contains_features ... ok
[INFO] [stdout] test make::discovery::tests::find_marketplace_root_returns_error ... ok
[INFO] [stdout] test lockfile::types::tests::round_trip_serialization_with_packages ... ok
[INFO] [stdout] test make::discovery::tests::find_marketplace_skips_incomplete ... ok
[INFO] [stdout] test make::discovery::tests::find_marketplace_in_current_dir ... ok
[INFO] [stdout] test make::engine_features::tests::engine_features_claude ... ok
[INFO] [stdout] test make::discovery::tests::find_marketplace_walks_up ... ok
[INFO] [stdout] test make::action::tests::idempotent_variants_exist ... ok
[INFO] [stdout] test logging::tests::stderr_filter_all_verbosity_levels ... ok
[INFO] [stdout] test lint::tests::lint_sources_scanned_deduplicates_same_source_type ... ok
[INFO] [stdout] test lint::tests::lint_no_marketplace_fires_misplaced_features ... ok
[INFO] [stdout] test logging::tests::stderr_filter_respects_env_and_verbosity ... ok
[INFO] [stdout] test locked_file::tests::read_write_roundtrip ... ok
[INFO] [stdout] test locked_file::tests::open_creates_parent_directories ... ok
[INFO] [stdout] test lint::tests::lint_source_filter_claude_only ... ok
[INFO] [stdout] test locked_file::tests::lock_released_on_drop ... ok
[INFO] [stdout] test lint::tests::lint_with_source_filter ... ok
[INFO] [stdout] test lint::tests::lint_after_init_produces_zero_diagnostics ... ok
[INFO] [stdout] test make::engine_features::tests::engine_features_unknown_returns_empty ... ok
[INFO] [stdout] test make::engine_features::tests::from_cli_name_roundtrip ... ok
[INFO] [stdout] test make::engine_features::tests::from_cli_name_unknown_returns_none ... ok
[INFO] [stdout] test make::engine_features::tests::labels_are_non_empty ... ok
[INFO] [stdout] test make::engine_features::tests::validate_features_accepts_valid_combination ... ok
[INFO] [stdout] test make::engine_features::tests::validate_features_rejects_lsp_for_claude ... ok
[INFO] [stdout] test make::engine_features::tests::engine_features_copilot ... ok
[INFO] [stdout] test make::engine_features::tests::validate_features_rejects_output_style_for_copilot ... ok
[INFO] [stdout] test make::engine_features::tests::validate_features_reports_multiple_unsupported ... ok
[INFO] [stdout] test make::error::tests::invalid_engine_message ... ok
[INFO] [stdout] test make::error::tests::invalid_name_message ... ok
[INFO] [stdout] test make::error::tests::invalid_feature_message ... ok
[INFO] [stdout] test make::error::tests::io_error_transparent ... ok
[INFO] [stdout] test make::error::tests::json_error_transparent ... ok
[INFO] [stdout] test make::error::tests::marketplace_not_found_message ... ok
[INFO] [stdout] test make::error::tests::missing_flag_message ... ok
[INFO] [stdout] test make::engine_features::tests::engine_features_both ... ok
[INFO] [stdout] test make::error::tests::unsupported_feature_message ... ok
[INFO] [stdout] test make::templates::tests::agent_template_has_required_frontmatter ... ok
[INFO] [stdout] test make::templates::tests::json_templates_are_valid ... ok
[INFO] [stdout] test make::templates::tests::skill_template_has_required_frontmatter ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_false_for_invalid_json ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_false_when_file_not_found ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_false_for_missing_file ... ok
[INFO] [stdout] test make::templates::tests::agent_template_snapshot ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_false_when_not_present ... ok
[INFO] [stdout] test make::templates::tests::mcp_template_snapshot ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_false_when_json_invalid ... ok
[INFO] [stdout] test make::templates::tests::skill_template_snapshot ... ok
[INFO] [stdout] test make::templates::tests::output_style_template_snapshot ... ok
[INFO] [stdout] test make::templates::tests::hook_template_snapshot ... ok
[INFO] [stdout] test make::tests::is_plugin_registered_returns_true_when_present ... ok
[INFO] [stdout] test make::templates::tests::lsp_template_snapshot ... ok
[INFO] [stdout] test make::tests::make_plugin_already_registered_emits_already_registered_action ... ok
[INFO] [stdout] test make::tests::make_plugin_already_registered_in_marketplace ... ok
[INFO] [stdout] test make::tests::make_plugin_already_enabled_in_settings ... ok
[INFO] [stdout] test make::tests::make_plugin_copilot_no_settings ... ok
[INFO] [stdout] test make::tests::make_plugin_emits_already_registered_for_existing_plugin ... ok
[INFO] [stdout] test make::tests::make_plugin_creates_skill_plugin ... ok
[INFO] [stdout] test make::tests::make_plugin_creates_composite ... ok
[INFO] [stdout] test make::tests::make_plugin_enables_in_settings ... ok
[INFO] [stdout] test make::tests::make_plugin_both_engine_updates_settings ... ok
[INFO] [stdout] test make::tests::make_plugin_extension_feature ... ok
[INFO] [stdout] test make::tests::make_plugin_idempotent ... ok
[INFO] [stdout] test make::tests::make_plugin_both_engines ... ok
[INFO] [stdout] test make::tests::make_plugin_lsp_feature ... ok
[INFO] [stdout] test make::tests::make_plugin_marketplace_dir_at_root_skips_settings ... ok
[INFO] [stdout] test make::tests::make_plugin_output_style_feature ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_fallback_invalid_json ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_fallback_missing_file ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_fallback_missing_name_field ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_returns_actual_name ... ok
[INFO] [stdout] test make::tests::make_plugin_registers_in_marketplace ... ok
[INFO] [stdout] test make::tests::make_plugin_mcp_feature ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_returns_default_when_json_invalid ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_mcp_and_output_styles ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_scoped_name ... ok
[INFO] [stdout] test make::tests::read_marketplace_name_returns_default_when_file_not_found ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_with_description ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_with_components ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_special_characters_in_description ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_with_type ... ok
[INFO] [stdout] test manifest::builder::tests::full_workspace_manifest_snapshot ... ok
[INFO] [stdout] test manifest::builder::tests::insert_string_array_ignores_some_empty_slice ... ok
[INFO] [stdout] test manifest::builder::tests::minimal_plugin_manifest ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_round_trips_through_toml_parse ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_header_empty_line ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_with_header_comments ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_round_trips_toml_section ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_multiple_members ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_with_plugins_dir ... ok
[INFO] [stdout] test manifest::builder::tests::minimal_workspace_manifest ... ok
[INFO] [stdout] test manifest::builder::tests::workspace_manifest_with_trailing_comments ... ok
[INFO] [stdout] test manifest::tests::component_path_not_found ... ok
[INFO] [stdout] test manifest::tests::empty_manifest_is_valid ... ok
[INFO] [stdout] test manifest::tests::catalogs_parse ... ok
[INFO] [stdout] test manifest::tests::edition_field_rejected ... ok
[INFO] [stdout] test manifest::tests::environment_section_parses ... ok
[INFO] [stdout] test manifest::builder::tests::plugin_manifest_empty_components_omitted ... ok
[INFO] [stdout] test manifest::tests::all_plugin_types_valid ... ok
[INFO] [stdout] test manifest::tests::manifest_with_github_dependency ... ok
[INFO] [stdout] test manifest::tests::install_section_parses ... ok
[INFO] [stdout] test manifest::tests::full_components_with_lsp_and_scripts ... ok
[INFO] [stdout] test manifest::tests::invalid_dependency_version_fails ... ok
[INFO] [stdout] test manifest::tests::invalid_plugin_type_fails ... ok
[INFO] [stdout] test manifest::tests::invalid_name_fails ... ok
[INFO] [stdout] test manifest::tests::features_section_parses ... ok
[INFO] [stdout] test manifest::tests::invalid_version_fails ... ok
[INFO] [stdout] test manifest::tests::load_invalid_content_returns_parse_error ... ok
[INFO] [stdout] test manifest::tests::load_nonexistent_file_returns_io_error ... ok
[INFO] [stdout] test manifest::tests::load_valid_manifest_file_succeeds ... ok
[INFO] [stdout] test manifest::tests::lsp_plugin_type_valid ... ok
[INFO] [stdout] test manifest::tests::manifest_with_engines_field ... ok
[INFO] [stdout] test manifest::tests::manifest_with_git_dependency ... ok
[INFO] [stdout] test manifest::tests::manifest_with_marketplace_dependency ... ok
[INFO] [stdout] test manifest::tests::missing_version_fails ... ok
[INFO] [stdout] test manifest::tests::manifest_with_local_path_dependency ... ok
[INFO] [stdout] test manifest::tests::missing_name_fails ... ok
[INFO] [stdout] test manifest::tests::manifest_with_mixed_registry_and_source_deps ... ok
[INFO] [stdout] test manifest::tests::manifest_with_source_redirect ... ok
[INFO] [stdout] test manifest::tests::overrides_section_parses ... ok
[INFO] [stdout] test manifest::tests::scoped_package_name_valid ... ok
[INFO] [stdout] test manifest::tests::prerelease_version_valid ... ok
[INFO] [stdout] test manifest::tests::parse_minimal_manifest ... ok
[INFO] [stdout] test manifest::tests::valid_dependency_versions ... ok
[INFO] [stdout] test manifest::tests::version_with_build_metadata_valid ... ok
[INFO] [stdout] test manifest::tests::multiple_errors_format_with_separator ... ok
[INFO] [stdout] test manifest::tests::workspace_caret_protocol_rejected ... ok
[INFO] [stdout] test manifest::tests::parse_workspace_root_manifest ... ok
[INFO] [stdout] test manifest::validate::tests::interactive_mode_accepts_valid_chars ... ok
[INFO] [stdout] test manifest::tests::workspace_equals_protocol_rejected ... ok
[INFO] [stdout] test manifest::tests::parse_full_member_manifest ... ok
[INFO] [stdout] test manifest::validate::tests::catalog_refs_valid ... ok
[INFO] [stdout] test manifest::validate::tests::is_valid_segment_empty_returns_false ... ok
[INFO] [stdout] test manifest::validate::tests::segment_starting_with_digit_is_valid ... ok
[INFO] [stdout] test manifest::tests::workspace_ref_dependency_valid ... ok
[INFO] [stdout] test manifest::validate::tests::dependency_with_no_version_is_accepted ... ok
[INFO] [stdout] test manifest::validate::tests::interactive_mode_accepts_empty ... ok
[INFO] [stdout] test manifest::validate::tests::interactive_mode_rejects_invalid_chars ... ok
[INFO] [stdout] test manifest::validate::tests::invalid_names ... ok
[INFO] [stdout] test manifest::validate::tests::validate_name_returns_err_for_invalid ... ok
[INFO] [stdout] test manifest::validate::tests::validate_name_returns_ok_for_valid ... ok
[INFO] [stdout] test manifest::validate::tests::workspace_protocol_valid ... ok
[INFO] [stdout] test manifest::validate::tests::strict_mode_delegates_to_strict ... ok
[INFO] [stdout] test manifest::validate::tests::valid_scoped_name ... ok
[INFO] [stdout] test manifest::validate::tests::valid_simple_name ... ok
[INFO] [stdout] test manifest::validate::tests::valid_version_reqs ... ok
[INFO] [stdout] test marketplace::tests::available_names ... ok
[INFO] [stdout] test marketplace::tests::available_names_returns_all ... ok
[INFO] [stdout] test manifest::validate::tests::invalid_version_reqs ... ok
[INFO] [stdout] test marketplace::tests::must_parse_invalid_toml_returns_empty_manifest ... ok
[INFO] [stdout] test marketplace::tests::find_plugin_by_name ... ok
[INFO] [stdout] test marketplace::tests::find_plugin_not_found ... ok
[INFO] [stdout] test marketplace::tests::find_plugin_case_sensitive ... ok
[INFO] [stdout] test marketplace::tests::parse_empty_sha_treated_as_none ... ok
[INFO] [stdout] test marketplace::tests::parse_empty_path_treated_as_none ... ok
[INFO] [stdout] test marketplace::tests::parse_empty_url_in_git_source_errors ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_missing_source ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_with_empty_plugin_root ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_empty_plugins ... ok
[INFO] [stdout] test marketplace::tests::parse_source_empty_ref_treated_as_none ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_no_metadata ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest ... ok
[INFO] [stdout] test marketplace::tests::parse_mixed_source_types ... ok
[INFO] [stdout] test marketplace::tests::parse_source_git_object ... ok
[INFO] [stdout] test marketplace::tests::parse_many_plugins ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_invalid_toml ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_missing_name ... ok
[INFO] [stdout] test marketplace::tests::parse_source_git_missing_url ... ok
[INFO] [stdout] test marketplace::tests::parse_source_git_with_ref_and_sha ... ok
[INFO] [stdout] test marketplace::tests::parse_source_missing_type_defaults_to_unknown ... ok
[INFO] [stdout] test marketplace::tests::parse_manifest_with_plugin_root ... ok
[INFO] [stdout] test marketplace::tests::parse_source_git_with_path ... ok
[INFO] [stdout] test marketplace::tests::parse_source_number_invalid ... ok
[INFO] [stdout] test marketplace::tests::parse_source_string ... ok
[INFO] [stdout] test marketplace::tests::parse_source_with_description ... ok
[INFO] [stdout] test marketplace::tests::parse_source_unsupported_type ... ok
[INFO] [stdout] test migrate::agent_detector::tests::agent_detects_script_refs ... ok
[INFO] [stdout] test migrate::agent_detector::tests::agent_detects_relative_script_refs ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_empty_dir ... ok
[INFO] [stdout] test marketplace::tests::resolve_source_path_with_root ... ok
[INFO] [stdout] test migrate::agent_detector::tests::agent_no_scripts ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_malformed_frontmatter ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_md_file ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_no_frontmatter_uses_filename ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_skips_directories ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_skips_non_md_files ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_strips_quoted_description ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_multiple_agents ... ok
[INFO] [stdout] test migrate::agent_detector::tests::frontmatter_name_fallback_to_filename_stem ... ok
[INFO] [stdout] test migrate::agent_detector::tests::frontmatter_unknown_fields_are_ignored ... ok
[INFO] [stdout] test marketplace::tests::resolve_source_path_without_root ... ok
[INFO] [stdout] test migrate::cleanup::tests::command_file_is_removed_via_remove_file ... ok
[INFO] [stdout] test migrate::cleanup::tests::empty_outcome_produces_no_actions ... ok
[INFO] [stdout] test migrate::agent_detector::tests::detect_agent_no_agents_dir ... ok
[INFO] [stdout] test migrate::cleanup::tests::mcp_json_is_skipped ... ok
[INFO] [stdout] test migrate::cleanup::tests::empty_parent_directory_is_pruned ... ok
[INFO] [stdout] test migrate::cleanup::tests::mixed_artifacts_with_skip ... ok
[INFO] [stdout] test migrate::cleanup::tests::mock_fs_exists_returns_true_for_dir ... ok
[INFO] [stdout] test migrate::cleanup::tests::skill_directory_is_removed_via_remove_dir_all ... ok
[INFO] [stdout] test migrate::cleanup::tests::non_empty_parent_directory_is_not_pruned ... ok
[INFO] [stdout] test migrate::cleanup::tests::source_at_root_path_has_no_parent_dir_to_check ... ok
[INFO] [stdout] test migrate::cleanup::tests::parent_dir_read_error_is_silently_skipped ... ok
[INFO] [stdout] test migrate::cleanup::tests::remove_dir_all_error_on_prune_propagates ... ok
[INFO] [stdout] test migrate::cleanup::tests::remove_dir_all_error_on_source_dir_propagates ... ok
[INFO] [stdout] test migrate::cleanup::tests::remove_file_error_propagates ... ok
[INFO] [stdout] test migrate::cleanup::tests::should_skip_for_report_does_not_match_regular_file ... ok
[INFO] [stdout] test migrate::cleanup::tests::should_skip_for_report_matches_mcp_json ... ok
[INFO] [stdout] test migrate::cleanup::tests::should_skip_for_report_matches_settings_json ... ok
[INFO] [stdout] test migrate::cleanup::tests::should_skip_for_report_does_not_match_root_path ... ok
[INFO] [stdout] test migrate::cleanup::tests::remove_file_succeeds_when_fail_path_differs ... ok
[INFO] [stdout] test migrate::cleanup::tests::settings_json_is_skipped ... ok
[INFO] [stdout] test migrate::cleanup::tests::mock_fs_exists_returns_true_for_file_not_in_dirs ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_adds_disable_model_invocation ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_ignores_non_md ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_md_file ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_ignores_unknown_frontmatter_keys ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_strips_quoted_description ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_no_commands_dir ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_with_frontmatter ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::agent_md_first_in_listing_skips_plain_md ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_ignores_directories ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::agent_md_takes_precedence_over_plain_md ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::detect_agent_md_file ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::detect_agent_stores_raw_content ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::empty_name_entry_is_skipped ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::has_agent_md_suffix_edge_cases ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::detect_plain_md_when_no_agent_md ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::long_plain_md_not_treated_as_agent_md ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::malformed_frontmatter_returns_error ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::multiple_agents_detected ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::no_agents_dir_returns_empty ... ok
[INFO] [stdout] test migrate::command_detector::tests::detect_command_without_frontmatter ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::skips_directories_and_non_md_files ... ok
[INFO] [stdout] test migrate::copilot_extension_detector::tests::detect_extension_subdirectory_with_config ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::quoted_frontmatter_values_stripped ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::no_frontmatter_uses_filename_stem ... ok
[INFO] [stdout] test migrate::copilot_extension_detector::tests::detect_multiple_extensions ... ok
[INFO] [stdout] test migrate::copilot_extension_detector::tests::empty_extensions_dir_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_agent_detector::tests::empty_agents_dir_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_extension_detector::tests::skips_non_directory_entries ... ok
[INFO] [stdout] test migrate::copilot_extension_detector::tests::no_extensions_dir_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::canonical_names_pass_through ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::command_type_without_command_key_yields_no_script_refs ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::detect_hooks_in_subdirectory ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::detect_hooks_json_is_array_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::detect_standalone_hooks_json_at_root ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::empty_hooks_object_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::hooks_json_at_root_takes_priority ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::legacy_session_start_normalized ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::legacy_stop_normalized ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::legacy_user_prompt_submit_normalized ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::malformed_json_returns_error ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::no_hooks_files_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::normalize_merges_duplicate_canonical_keys ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::normalize_non_object_passes_through ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::normalize_remaining_legacy_names ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::normalize_skips_merge_when_existing_is_not_array ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::relative_script_without_dot_slash_prefix_is_extracted ... ok
[INFO] [stdout] test migrate::copilot_hook_detector::tests::script_references_extracted_from_command_hooks ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::detect_github_lsp_json_fallback ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::detect_valid_lsp_json_at_source_dir ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::empty_object_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::malformed_json_returns_config_parse_error ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::multiple_lsp_servers_counted ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::project_root_derivation ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::source_dir_root_path_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_claude_skill_dir_refs_also_extracted ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_from_copilot_dir_without_name_uses_dir_name ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_from_github_skills ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_from_github_copilot_dir ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_frontmatter_name_overrides_dir ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_skips_dir_without_skill_md ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_skips_non_dir_entries ... ok
[INFO] [stdout] test migrate::detector::tests::claude_detectors_returns_six ... ok
[INFO] [stdout] test migrate::detector::tests::copilot_detector_names ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skills_from_both_github_skills_and_copilot_dirs ... ok
[INFO] [stdout] test migrate::detector::tests::copilot_detectors_returns_six ... ok
[INFO] [stdout] test migrate::detector::tests::detectors_for_claude_source ... ok
[INFO] [stdout] test migrate::detector::tests::detectors_for_unknown_source ... ok
[INFO] [stdout] test migrate::dry_run::tests::cleanup_plan_skipped_other_kind_shows_shared_configuration_reason ... ok
[INFO] [stdout] test migrate::dry_run::tests::component_path_all_kinds ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_agents_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_all_types ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_commands_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_artifact_with_no_files_omits_files_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_command_listed_as_file ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_mixed_skipped_and_removable ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_skill_listed_as_directory ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_only_skipped_shows_no_files_to_remove ... ok
[INFO] [stdout] test migrate::detector::tests::detectors_for_github_source ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_skips_mcp_json ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_destructive_skips_shared_config ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_hooks_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_lists_all_artifacts ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_empty_artifacts ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_mcp_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_no_manifest_shows_hint ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_output_styles_section ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::no_lsp_json_returns_empty ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_shows_conflict_renames ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::root_source_dir_no_parent_returns_empty ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_with_destructive_has_cleanup_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_summary_table ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::detect_valid_copilot_mcp_config_local_transport ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_with_hooks ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::detect_valid_copilot_mcp_config_stdio_transport ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::empty_mcp_servers_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::malformed_json_returns_error ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::no_copilot_mcp_config_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_mcp_detector::tests::no_mcp_servers_key_returns_empty ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_empty_skills_dir ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_no_skills_dir ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_dir_refs_extracted ... ok
[INFO] [stdout] test migrate::copilot_skill_detector::tests::detect_skill_without_frontmatter_uses_dir_name ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_shows_file_list ... ok
[INFO] [stdout] test migrate::copilot_lsp_detector::tests::non_object_json_returns_empty ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_composite_with_new_types ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_empty_discovery ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_shows_name_conflicts ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_rename_loop_skips_already_used_name ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_single_artifact_plan ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_shows_discovery_table ... ok
[INFO] [stdout] test migrate::dry_run::tests::report_no_other_files ... ok
[INFO] [stdout] test migrate::dry_run::tests::report_other_files_in_summary_table ... ok
[INFO] [stdout] test migrate::dry_run::tests::report_with_external_refs ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_with_destructive_has_cleanup_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_with_other_files_in_plan ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_indented_line_without_key ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_empty ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_indented_key_empty_value_before_top_level_key ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_basic ... ok
[INFO] [stdout] test migrate::dry_run::tests::report_with_associated_files ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_indented_key_value_before_top_level_key ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_indented_continuation ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_without_destructive_has_no_cleanup_section ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_discovery_table_counts_hook_and_other_kinds ... ok
[INFO] [stdout] test migrate::dry_run::tests::recursive_report_new_type_counts ... ok
[INFO] [stdout] test migrate::dry_run::tests::report_with_unassociated_files ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_with_manifest_shows_aipm_toml ... ok
[INFO] [stdout] test migrate::dry_run::tests::dry_run_report_with_script_references ... ok
[INFO] [stdout] test migrate::emitter::tests::copy_referenced_scripts_skips_non_regular_file ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_agent_creates_agents_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_agent_plugin_json_has_agents_field ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_command_as_skill ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_command_wraps_with_frontmatter ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_copies_referenced_scripts ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_key_with_empty_value_then_non_indented ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_no_colon ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_tab_indented ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_command_with_existing_frontmatter ... ok
[INFO] [stdout] test migrate::emitter::tests::copy_referenced_scripts_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_creates_plugin_directory_structure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_copies_skill_files ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_agent_files_returns_error_on_write_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_extension_files_absolute_path_dest_has_no_parent ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_extension_files_non_config_before_config_covers_false_branch ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_with_blank_lines ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_extension_files_no_raw_content_copies_all_files ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_external_without_association_no_action ... ok
[INFO] [stdout] test migrate::emitter::tests::copy_referenced_scripts_returns_error_on_write_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_extension_files_skips_unreadable_file_with_warning ... ok
[INFO] [stdout] test migrate::emitter::tests::convert_hooks_yaml_multiline ... ok
[INFO] [stdout] test migrate::emitter::tests::copy_referenced_scripts_dest_without_parent_skips_create_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_agent_files_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_generates_plugin_json ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_generates_valid_aipm_toml ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hooks_config_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_lsp_config_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_mcp_config_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hooks_no_raw_content_falls_back_to_source ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_mcp_no_raw_content_falls_back_to_source ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_file_collision_avoidance ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_file_nonexistent_skips_write ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_mcp_plugin_json_has_mcp_servers_field ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_mcp_writes_mcp_json ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_mcp_no_raw_content_no_source_errors ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hooks_plugin_json_has_hooks_field ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_file_collision_no_extension ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_files_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_files_returns_error_on_write_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_files_skips_non_regular_file ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hook_artifact_with_metadata_hooks_skips_extra_hooks_json ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_associated_other_file ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_files_unassociated_no_filename_component_uses_string_lossy ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_lsp_config_no_raw_content_falls_back_to_source ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hook_with_script_references ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_other_files_associated_with_root_relative_path_skips_create_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_hooks_writes_hooks_json ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_extracts_hooks_to_json ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_output_style_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_output_style_returns_error_on_write_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_output_style_copies_to_plugin_root ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_output_style_plugin_json_has_output_styles_field ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_hook_and_mcp ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_hook_artifact_suppresses_inline_hooks_entry ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_empty_artifacts ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_mcp_only ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_merges_hooks ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_no_manifest_skips_aipm_toml ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_shared_source_path_deduplicates_plugin_created ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_mixed_agent_and_skill ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_missing_script ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_output_style_only ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_multiple_artifacts_composite ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_single_skill ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_unsafe_plugin_name ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_unsafe_name_is_skipped ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_with_scripts ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_agent ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_extension_writes_config_and_files ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_no_manifest_skips_aipm_toml ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_command_artifact ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_creates_structure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_extension ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_mcp ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_output_style ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_lsp_server ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_no_manifest_skips_aipm_toml ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_hook ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_unsafe_artifact_name ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_missing_script_skipped ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_rejects_unsafe_name_with_separator ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_rejects_unsafe_name_with_traversal ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_file_skips_non_regular_file ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_files_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_with_scripts ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_preserves_nested_script_paths ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_rewrites_claude_skill_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_files_returns_error_on_write_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_files_absolute_path_skips_parent_dir_creation ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_files_skips_non_regular_file_entry ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_keeps_unreferenced_scripts_in_skill_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_with_missing_script ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_with_non_skill_md_files ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_unassociated_collision_via_dest_exists ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skips_external ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_skill_skips_referenced_scripts_from_file_copy ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_unassociated_other_file ... ok
[INFO] [stdout] test migrate::emitter::tests::file_is_skill_md_true ... ok
[INFO] [stdout] test migrate::emitter::tests::file_is_skill_md_false ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_agent_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_hook_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_command_as_skill_returns_error_on_read_failure ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_mcp_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_with_scripts_and_hooks ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_description_with_special_chars ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_valid_toml_roundtrip ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_agent_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_extension_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_no_description ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_hook_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_command_copies_referenced_scripts_from_parent_dir ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_description_with_special_chars ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_lsp_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_unsafe_plugin_name ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_mcp_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_with_name_with_hooks ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_multi_all_kinds ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_no_description ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_deduplicates_source_paths ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_output_style_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_multi_composite ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_lsp_and_extension ... ok
[INFO] [stdout] test migrate::emitter::tests::is_safe_path_segment_rejects_backslash ... ok
[INFO] [stdout] test migrate::emitter::tests::is_safe_path_segment_rejects_dot ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_valid_json_roundtrip ... ok
[INFO] [stdout] test migrate::emitter::tests::is_safe_path_segment_rejects_dotdot ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_plugin_json_with_description ... ok
[INFO] [stdout] test migrate::emitter::tests::inject_disable_deduplicates_existing_key ... ok
[INFO] [stdout] test migrate::emitter::tests::generate_manifest_output_style_kind ... ok
[INFO] [stdout] test migrate::emitter::tests::inject_disable_no_closing_delimiter ... ok
[INFO] [stdout] test migrate::emitter::tests::hook_artifact_with_metadata_hooks_does_not_double_write_hooks_json ... ok
[INFO] [stdout] test migrate::emitter::tests::inject_disable_no_frontmatter ... ok
[INFO] [stdout] test migrate::emitter::tests::is_safe_path_segment_rejects_empty ... ok
[INFO] [stdout] test migrate::emitter::tests::resolve_name_multiple_conflicts ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_plugin_lsp_server_writes_lsp_json ... ok
[INFO] [stdout] test migrate::emitter::tests::is_safe_path_segment_accepts_valid ... ok
[INFO] [stdout] test migrate::emitter::tests::inject_disable_with_frontmatter ... ok
[INFO] [stdout] test migrate::emitter::tests::resolve_name_no_conflict ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_invalid_json ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_command_type_without_command_key ... ok
[INFO] [stdout] test migrate::emitter::tests::resolve_name_conflict_renames ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_unsafe_artifact_name ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_nested_arrays ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_no_grandparent_skips_rewrite ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_rewrites_relative ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_leaves_bare_commands ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_single_command_bare_command_unchanged ... ok
[INFO] [stdout] test migrate::emitter::tests::emit_package_plugin_command_only ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_paths_no_scripts ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_no_args ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_command_value_not_a_string ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_single_command_with_slash_path ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_empty_hooks_object ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_hooks_from_settings ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_absolute_path_command_not_extracted ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_ignores_bare_command_names ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_malformed_json ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_paths_with_scripts ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_hooks_value_not_object ... ok
[INFO] [stdout] test migrate::emitter::tests::rewrite_hook_command_paths_leaves_absolute_alone ... ok
[INFO] [stdout] test migrate::hook_detector::tests::collect_command_scripts_with_missing_command_field ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_nested_script_in_array_handler ... ok
[INFO] [stdout] test migrate::hook_detector::tests::is_relative_script_windows_backslash_path_is_relative ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_no_settings_json ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_empty_mcp_servers ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_read_error_propagated ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_script_with_extension_in_command ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_malformed_json ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_io_error_on_read ... ok
[INFO] [stdout] test migrate::hook_detector::tests::has_windows_drive_prefix_detects_drive_letters ... ok
[INFO] [stdout] test migrate::hook_detector::tests::is_relative_script_unrecognized_extension_returns_false ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_project_root_derivation ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_root_source_dir_no_parent ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_valid_mcp_json ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_empty_output_styles_dir ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_frontmatter_ignores_unknown_fields ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_multiple_output_styles ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_skips_directories ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_name_fallback_to_filename ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_output_style_strips_quoted_description ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_no_output_styles_dir ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::frontmatter_with_no_name_uses_description_only ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_artifact_raw_content_contains_path ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_artifact_referenced_script_true_branch ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_no_raw_content ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_normalizes_dot_slash_prefix ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_all_claimed ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_artifact_referenced_script_false_then_true_branch ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_raw_content_no_match ... ok
[INFO] [stdout] test migrate::reconciler::tests::find_associated_via_referenced_scripts ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_associated_dependency ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_propagates_read_dir_error ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_associated_via_raw_content ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_empty_dir ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_settings_json_claimed_by_hook ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_extension_files_claimed ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_settings_json_claimed_by_mcp ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_skill_files_claimed ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_unassociated ... ok
[INFO] [stdout] test migrate::registrar::tests::mock_write_file_non_utf8_skips_files_map_update ... ok
[INFO] [stdout] test migrate::reconciler::tests::reconcile_unclaimed_files ... ok
[INFO] [stdout] test migrate::registrar::tests::register_appends_alongside_existing ... ok
[INFO] [stdout] test migrate::registrar::tests::register_appends_to_empty_plugins_array ... ok
[INFO] [stdout] test migrate::registrar::tests::register_returns_error_when_marketplace_file_not_found ... ok
[INFO] [stdout] test migrate::registrar::tests::register_mixed_descriptions ... ok
[INFO] [stdout] test migrate::registrar::tests::register_preserves_marketplace_metadata ... ok
[INFO] [stdout] test migrate::registrar::tests::register_returns_error_when_plugins_is_not_array ... ok
[INFO] [stdout] test migrate::registrar::tests::register_returns_error_when_marketplace_json_invalid ... ok
[INFO] [stdout] test migrate::registrar::tests::register_returns_error_when_write_file_fails ... ok
[INFO] [stdout] test migrate::registrar::tests::register_returns_error_when_plugins_key_missing ... ok
[INFO] [stdout] test migrate::registrar::tests::register_uses_fallback_when_no_description ... ok
[INFO] [stdout] test migrate::registrar::tests::register_skips_already_registered ... ok
[INFO] [stdout] test migrate::registrar::tests::register_uses_entry_description ... ok
[INFO] [stdout] test migrate::skill_common::tests::collect_files_nested_dir ... ok
[INFO] [stdout] test migrate::registrar::tests::register_empty_entries_returns_ok_without_reading_marketplace ... ok
[INFO] [stdout] test migrate::skill_common::tests::collect_files_flat_dir ... ok
[INFO] [stdout] test migrate::skill_common::tests::collect_files_skips_entries_not_under_base ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_bare_invocation ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_bare_invocation_ignores_flags ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_bare_invocation_python3 ... ok
[INFO] [stdout] test migrate::skill_common::tests::collect_files_skips_non_regular_file_entries ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_deduplicates ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_ignores_urls ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_multiple_patterns_combined ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_colon_before_skips ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_dot_dot_slash ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_dot_slash_dot_dot_is_captured ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_short_path_skipped ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_at_start_of_line ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_slash_before_dot_slash_skipped ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_terminated_by_double_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_backtick_preceded ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_bare_dollar_preceded ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_empty_path ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_invalid_start ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_script_terminated_by_double_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern2_terminated_by_single_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_dollar_preceded ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_no_slash_or_dot ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_paren_preceded ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_script_terminated_by_single_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_with_extension_only ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_tab_preceded ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_with_http_url_is_ignored ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_pattern3_with_url ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_relative_dot_dot ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_non_script_path_ignored ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_multiple ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_terminated_by_closing_paren ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_no_match ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_terminated_by_single_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_terminated_by_double_quote ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_with_claude_prefix ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_scripts_with_skill_dir_prefix ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_variable_prefix_still_works ... ok
[INFO] [stdout] test migrate::skill_common::tests::extract_relative_dot_slash ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_disable_model_invocation_false ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_disable_model_invocation ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_hooks_inline_value ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_hooks_single_space_indent_falls_back_to_raw_line ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_empty_name ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_hooks_block_exits_on_non_indented_line ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_extracts_name_and_description ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_no_closing ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_with_hooks ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_with_hooks_tab_indent ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_unknown_key_ignored ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_empty_skills_dir ... ok
[INFO] [stdout] test migrate::skill_common::tests::parse_frontmatter_no_frontmatter ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_multiple_skills ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_no_skills_dir ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_extracts_frontmatter ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_nested_files ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_uses_dir_name_when_no_frontmatter_name ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_with_skill_md ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_with_scripts ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_skips_non_dir_entries ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_read_dir_error_propagates ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_end_of_line ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_multiple ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_strips_quoted_description ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_non_script_path ... ok
[INFO] [stdout] test migrate::skill_detector::tests::detect_skill_without_skill_md ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_single_quote_terminated ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_none ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_with_quotes ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_backtick_terminated ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_disable_model_invocation_false ... ok
[INFO] [stdout] test migrate::skill_detector::tests::extract_scripts_paren_terminated ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_empty_name ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_hooks_with_inline_value ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_hooks_with_tab_indent ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_no_closing ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_no_frontmatter ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_unknown_key ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_with_hooks_multiline ... ok
[INFO] [stdout] test migrate::tests::artifact_kind_to_type_string_all_variants ... ok
[INFO] [stdout] test migrate::skill_detector::tests::parse_frontmatter_with_disable_model_invocation ... ok
[INFO] [stdout] test migrate::tests::migrate_errors_if_no_source_dir ... ok
[INFO] [stdout] test migrate::tests::has_migrated_artifacts_empty ... ok
[INFO] [stdout] test migrate::tests::has_migrated_artifacts_only_skipped ... ok
[INFO] [stdout] test migrate::tests::migrate_empty_source ... ok
[INFO] [stdout] test migrate::tests::migrate_dry_run_writes_report ... ok
[INFO] [stdout] test migrate::tests::migrate_other_files_skipped_when_no_artifacts ... ok
[INFO] [stdout] test migrate::tests::migrate_errors_if_no_ai_dir ... ok
[INFO] [stdout] test migrate::tests::has_migrated_artifacts_with_plugin_created ... ok
[INFO] [stdout] test migrate::tests::migrate_other_files_skipped_when_no_artifacts_detected ... ok
[INFO] [stdout] test migrate::tests::migrate_github_source_accepted ... ok
[INFO] [stdout] test migrate::tests::migrate_full_flow ... ok
[INFO] [stdout] test migrate::tests::emit_and_register_plan_with_no_artifacts_skips_plugin_emission ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_dry_run_generates_report ... ok
[INFO] [stdout] test migrate::tests::migrate_unknown_source_falls_back_to_all_detectors ... ok
[INFO] [stdout] test migrate::tests::migrate_single_source_unknown_type_falls_back_to_all_detectors ... ok
[INFO] [stdout] test migrate::tests::migrate_with_other_files_emits_them ... ok
[INFO] [stdout] test migrate::tests::migrated_sources_empty ... ok
[INFO] [stdout] test migrate::tests::migrated_sources_filters_correctly ... ok
[INFO] [stdout] test migrate::tests::migrated_sources_includes_other_file_migrated ... ok
[INFO] [stdout] test path_security::tests::plugin_path_as_ref_str ... ok
[INFO] [stdout] test path_security::tests::plugin_path_display ... ok
[INFO] [stdout] test path_security::tests::plugin_path_folder_name ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_non_dry_run_no_artifacts_succeeds ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_returns_empty_when_no_source_dirs_exist ... ok
[INFO] [stdout] test path_security::tests::validate_absolute_path_unix ... ok
[INFO] [stdout] test migrate::tests::migrate_unknown_source_runs_all_detectors ... ok
[INFO] [stdout] test path_security::tests::plugin_path_folder_name_simple ... ok
[INFO] [stdout] test path_security::tests::validate_deeply_nested_path ... ok
[INFO] [stdout] test path_security::tests::validate_double_dot_in_filename_rejected ... ok
[INFO] [stdout] test path_security::tests::plugin_path_new_invalid_traversal ... ok
[INFO] [stdout] test path_security::tests::validate_empty_path ... ok
[INFO] [stdout] test path_security::tests::validate_path_traversal_encoded ... ok
[INFO] [stdout] test path_security::tests::validate_nested_path ... ok
[INFO] [stdout] test path_security::tests::validate_null_byte_rejected ... ok
[INFO] [stdout] test path_security::tests::plugin_path_new_valid ... ok
[INFO] [stdout] test path_security::tests::validate_path_traversal_middle ... ok
[INFO] [stdout] test path_security::tests::validate_path_traversal_start ... ok
[INFO] [stdout] test path_security::tests::validate_path_with_dots_not_traversal ... ok
[INFO] [stdout] test path_security::tests::validate_simple_path ... ok
[INFO] [stdout] test platform::tests::compatibility_compatible_with_current_os ... ok
[INFO] [stdout] test path_security::tests::validate_path_with_dashes ... ok
[INFO] [stdout] test platform::tests::compatibility_universal_when_empty_platforms ... ok
[INFO] [stdout] test platform::tests::compatibility_incompatible_different_os ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_other_files_emitted_via_emit_and_register ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_package_scoped_source_triggers_is_package_scoped ... ok
[INFO] [stdout] test migrate::tests::migrate_recursive_root_skill_attaches_other_files_to_first_plan ... ok
[INFO] [stdout] test path_security::tests::validate_path_with_underscores ... ok
[INFO] [stdout] test platform::tests::compatibility_universal_when_no_platforms ... ok
[INFO] [stdout] test platform::tests::current_platforms_exactly_one ... ok
[INFO] [stdout] test platform::tests::compatibility_unknown_platform_no_match ... ok
[INFO] [stdout] test platform::tests::current_platforms_includes_known_os ... ok
[INFO] [stdout] test platform::tests::platform_display_known ... ok
[INFO] [stdout] test platform::tests::platform_display_unknown ... ok
[INFO] [stdout] test platform::tests::platform_roundtrip ... ok
[INFO] [stdout] test registry::config::tests::empty_config_defaults ... ok
[INFO] [stdout] test registry::config::tests::extract_scope_no_slash ... ok
[INFO] [stdout] test registry::config::tests::extract_scope_unscoped ... ok
[INFO] [stdout] test registry::config::tests::extract_scope_scoped ... ok
[INFO] [stdout] test registry::config::tests::index_config_download_url ... ok
[INFO] [stdout] test registry::config::tests::index_config_parse ... ok
[INFO] [stdout] test registry::config::tests::registry_for_scoped_package ... ok
[INFO] [stdout] test registry::config::tests::registry_for_unknown_scope_uses_default ... ok
[INFO] [stdout] test platform::tests::platform_deserialize_known_values ... ok
[INFO] [stdout] test registry::config::tests::get_index_url ... ok
[INFO] [stdout] test platform::tests::unknown_string_roundtrips ... ok
[INFO] [stdout] test registry::config::tests::registry_for_unscoped_package ... ok
[INFO] [stdout] test registry::git::tests::checksum_matches ... ok
[INFO] [stdout] test registry::git::tests::checksum_empty_data ... ok
[INFO] [stdout] test registry::config::tests::parse_registry_config_toml ... ok
[INFO] [stdout] test registry::git::tests::checksum_mismatch ... ok
[INFO] [stdout] test registry::git::tests::checksum_with_sha512_prefix_matches ... ok
[INFO] [stdout] test registry::git::tests::checksum_with_sha512_prefix ... ok
[INFO] [stdout] test registry::git::tests::checksum_with_sha512_prefix_mismatch ... ok
[INFO] [stdout] test registry::git::tests::find_version_found ... ok
[INFO] [stdout] test registry::git::tests::find_version_not_found ... ok
[INFO] [stdout] test registry::git::tests::download_url_from_config ... ok
[INFO] [stdout] test registry::git::tests::get_metadata_package_not_found ... ok
[INFO] [stdout] test registry::git::tests::http_get_connection_refused_returns_err ... ok
[INFO] [stdout] test registry::git::tests::get_metadata_from_local_index ... ok
[INFO] [stdout] test registry::git::tests::get_metadata_scoped_package ... ok
[INFO] [stdout] test registry::git::tests::load_config_invalid_json ... ok
[INFO] [stdout] test registry::git::tests::load_config_missing ... ok
[INFO] [stdout] test registry::git::tests::new_returns_err_when_cache_dir_cannot_be_created ... ok
[INFO] [stdout] test registry::git::tests::load_config_valid ... ok
[INFO] [stdout] test registry::git::tests::new_creates_cache_dir ... ok
[INFO] [stdout] test registry::git::tests::normalize_no_prefix_unchanged ... ok
[INFO] [stdout] test registry::git::tests::normalize_strips_prefix ... ok
[INFO] [stdout] test registry::index::tests::index_path_four_plus_char ... ok
[INFO] [stdout] test registry::index::tests::index_path_scoped ... ok
[INFO] [stdout] test registry::index::tests::index_path_one_char ... ok
[INFO] [stdout] test registry::git::tests::http_get_success_returns_body ... ok
[INFO] [stdout] test registry::git::tests::http_get_404_returns_err ... ok
[INFO] [stdout] test registry::index::tests::index_path_scoped_no_name_errors ... ok
[INFO] [stdout] test registry::index::tests::index_path_scoped_no_scope_errors ... ok
[INFO] [stdout] test registry::index::tests::index_path_three_char ... ok
[INFO] [stdout] test registry::index::tests::index_path_scoped_short_scope ... ok
[INFO] [stdout] test registry::index::tests::index_path_two_char ... ok
[INFO] [stdout] test registry::index::tests::parse_index_file_blank_lines_skipped ... ok
[INFO] [stdout] test registry::index::tests::parse_index_file_empty ... ok
[INFO] [stdout] test registry::index::tests::parse_index_file_multiple_lines ... ok
[INFO] [stdout] test registry::index::tests::parse_index_file_invalid_json_errors ... ok
[INFO] [stdout] test registry::index::tests::parse_index_file_single_line ... ok
[INFO] [stdout] test registry::index::tests::index_path_empty_errors ... ok
[INFO] [stdout] test registry::tests::package_metadata_construction ... ok
[INFO] [stdout] test registry::index::tests::index_path_exactly_four_char ... ok
[INFO] [stdout] test registry::tests::dep_entry_default_features_defaults_true ... ok
[INFO] [stdout] test registry::tests::version_entry_deserialize_minimal ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_no_hooks_key ... ok
[INFO] [stdout] test registry::index::tests::read_package_index_not_found ... ok
[INFO] [stdout] test registry::tests::version_entry_deserialize_json ... ok
[INFO] [stdout] test resolver::error::tests::build_chain_lockfile_source_breaks_early ... ok
[INFO] [stdout] test resolver::error::tests::build_chain_missing_source_breaks ... ok
[INFO] [stdout] test registry::index::tests::read_package_index_from_disk ... ok
[INFO] [stdout] test resolver::error::tests::build_chain_simple ... ok
[INFO] [stdout] test resolver::error::tests::conflict_error_with_chains ... ok
[INFO] [stdout] test resolver::error::tests::conflict_error_only_existing_chain ... ok
[INFO] [stdout] test resolver::error::tests::conflict_error_only_new_chain ... ok
[INFO] [stdout] test resolver::error::tests::format_chain_single_element ... ok
[INFO] [stdout] test resolver::error::tests::no_match_error_format ... ok
[INFO] [stdout] test resolver::error::tests::version_error_format ... ok
[INFO] [stdout] test resolver::error::tests::registry_error_format ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_global_no_match ... ok
[INFO] [stdout] test resolver::error::tests::conflict_error_basic_format ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_global_override ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_empty ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_global_updates_multiple_matching_deps ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_replacement_no_match ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_scoped_no_match_wrong_child ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_scoped_override ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_with_empty_deps ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_global_override ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_multiple_overrides ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_replacement_override ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_replacement_without_at_sign_falls_back_to_global ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_scoped_override ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_scoped_with_replacement_value ... ok
[INFO] [stdout] test resolver::overrides::tests::replacement_value_without_at_is_global ... ok
[INFO] [stdout] test resolver::tests::activate_feature_recursive_already_active_no_infinite_loop ... ok
[INFO] [stdout] test resolver::tests::activate_feature_recursive_with_dep_prefix_skipped ... ok
[INFO] [stdout] test resolver::tests::backtrack_detects_conflict_with_lockfile_pin ... ok
[INFO] [stdout] test resolver::tests::backtrack_exhausts_all_candidates ... ok
[INFO] [stdout] test resolver::tests::backtrack_on_conflict ... ok
[INFO] [stdout] test resolver::tests::backtrack_saves_choice_point_when_more_candidates_remain ... ok
[INFO] [stdout] test resolver::tests::collect_dep_features ... ok
[INFO] [stdout] test resolver::tests::collect_feature_deps_active_feature_not_in_defs ... ok
[INFO] [stdout] test resolver::tests::compute_active_features_no_default_feature_defined ... ok
[INFO] [stdout] test resolver::tests::cross_major_deps_coexist ... ok
[INFO] [stdout] test resolver::tests::cross_major_framework_coexistence ... ok
[INFO] [stdout] test resolver::tests::default_features_enabled ... ok
[INFO] [stdout] test resolver::tests::enable_specific_feature ... ok
[INFO] [stdout] test resolver::tests::feature_computation_basics ... ok
[INFO] [stdout] test resolver::tests::global_override_forces_version ... ok
[INFO] [stdout] test resolver::tests::opt_out_of_default_features ... ok
[INFO] [stdout] test resolver::tests::optional_dep_included_with_feature ... ok
[INFO] [stdout] test resolver::tests::optional_dep_not_included_without_feature ... ok
[INFO] [stdout] test resolver::tests::prefer_highest_compatible_version ... ok
[INFO] [stdout] test resolver::tests::replacement_override_swaps_package ... ok
[INFO] [stdout] test resolver::tests::report_unsolvable_conflicts ... ok
[INFO] [stdout] test resolver::tests::resolve_conflict_error ... ok
[INFO] [stdout] test resolver::tests::resolve_diamond_dependency ... ok
[INFO] [stdout] test resolver::tests::resolve_empty_deps ... ok
[INFO] [stdout] test resolver::tests::resolve_invalid_requirement_returns_version_error ... ok
[INFO] [stdout] test resolver::tests::resolve_no_matching_version ... ok
[INFO] [stdout] test resolver::tests::resolve_package_not_found ... ok
[INFO] [stdout] test resolver::tests::resolve_picks_highest_matching_version ... ok
[INFO] [stdout] test resolver::tests::resolve_respects_lockfile_pins ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_non_command_type_ignored ... ok
[INFO] [stdout] test migrate::hook_detector::tests::detect_script_references_from_command_hooks ... ok
[INFO] [stdout] test migrate::hook_detector::tests::is_relative_script_detects_paths ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_no_mcp_json ... ok
[INFO] [stdout] test migrate::mcp_detector::tests::detect_no_mcp_servers_key ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_output_style_md_file ... ok
[INFO] [stdout] test migrate::output_style_detector::tests::detect_skips_non_md_files ... ok
[INFO] [stdout] test registry::tests::version_entry_json_lines_parsing ... ok
[INFO] [stdout] test registry::tests::version_entry_round_trip_json ... ok
[INFO] [stdout] test resolver::error::tests::build_chain_deep ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_replacement_override ... ok
[INFO] [stdout] test resolver::overrides::tests::apply_scoped_no_match_wrong_parent ... ok
[INFO] [stdout] test resolver::overrides::tests::parse_empty_overrides ... ok
[INFO] [stdout] test resolver::tests::resolve_shared_transitive_dep_unifies_compatible_versions ... ok
[INFO] [stdout] test resolver::tests::resolve_single_dep ... ok
[INFO] [stdout] test resolver::tests::resolve_skips_yanked_versions ... ok
[INFO] [stdout] test resolver::tests::resolve_transitive_deps ... ok
[INFO] [stdout] test resolver::tests::resolve_with_lockfile_pins_unified ... ok
[INFO] [stdout] test resolver::tests::scoped_override_only_affects_parent ... ok
[INFO] [stdout] test resolver::tests::resolve_with_unknown_feature ... ok
[INFO] [stdout] test resolver::tests::transitive_conflict_same_major_reported ... ok
[INFO] [stdout] test resolver::tests::same_major_deps_unified_to_one_version ... ok
[INFO] [stdout] test resolver::tests::resolve_unifies_same_major_from_two_parents ... ok
[INFO] [stdout] test security::tests::allowed_source_matches_pattern ... ok
[INFO] [stdout] test resolver::tests::select_sorted_candidates_excludes_yanked ... ok
[INFO] [stdout] test security::tests::env_enforce_allowlist_numeric_one ... ok
[INFO] [stdout] test resolver::tests::three_level_cross_major ... ok
[INFO] [stdout] test resolver::tests::unify_shared_deps_to_single_version ... ok
[INFO] [stdout] test security::tests::case_insensitive_matching ... ok
[INFO] [stdout] test security::tests::empty_allowlist_no_enforcement_allows_all ... ok
[INFO] [stdout] test resolver::tests::resolve_simple_dependency_tree ... ok
[INFO] [stdout] test security::tests::glob_exact_match ... ok
[INFO] [stdout] test security::tests::glob_middle_part_absent_when_end_matches ... ok
[INFO] [stdout] test security::tests::glob_middle_part_not_found ... ok
[INFO] [stdout] test security::tests::glob_no_match_end ... ok
[INFO] [stdout] test security::tests::glob_no_match_start ... ok
[INFO] [stdout] test security::tests::glob_wildcard_at_start ... ok
[INFO] [stdout] test security::tests::local_sources_always_allowed ... ok
[INFO] [stdout] test security::tests::unknown_source_rejected_when_enforced ... ok
[INFO] [stdout] test security::tests::unknown_source_allowed_when_not_enforced ... ok
[INFO] [stdout] test security::tests::glob_double_wildcard ... ok
[INFO] [stdout] test spec::tests::as_git_returns_some_for_git_spec ... ok
[INFO] [stdout] test spec::tests::as_marketplace_returns_none_for_registry_spec ... ok
[INFO] [stdout] test security::tests::glob_wildcard_at_end ... ok
[INFO] [stdout] test spec::tests::as_marketplace_returns_some_for_marketplace_spec ... ok
[INFO] [stdout] test security::tests::glob_wildcard_in_middle ... ok
[INFO] [stdout] test security::tests::env_enforce_allowlist_true_string ... ok
[INFO] [stdout] test spec::tests::canonical_key_git_no_path ... ok
[INFO] [stdout] test security::tests::error_message_contains_source_and_allowed ... ok
[INFO] [stdout] test resolver::tests::transitive_dep_conflict_when_both_major_versions_already_activated ... ok
[INFO] [stdout] test spec::tests::canonical_key_git_with_path ... ok
[INFO] [stdout] test spec::tests::as_git_returns_none_for_registry_spec ... ok
[INFO] [stdout] test security::tests::empty_allowlist_enforced_rejects ... ok
[INFO] [stdout] test spec::tests::canonical_key_marketplace ... ok
[INFO] [stdout] test spec::tests::canonical_key_no_ref_clean ... ok
[INFO] [stdout] test spec::tests::canonical_key_registry ... ok
[INFO] [stdout] test spec::tests::duplicate_folder_name_case_insensitive ... ok
[INFO] [stdout] test spec::tests::canonical_key_strips_ref ... ok
[INFO] [stdout] test spec::tests::error_display_variants ... ok
[INFO] [stdout] test spec::tests::git_display_with_path_and_ref ... ok
[INFO] [stdout] test spec::tests::git_display_with_path_only ... ok
[INFO] [stdout] test spec::tests::git_display_with_ref_only ... ok
[INFO] [stdout] test spec::tests::git_display_url_only ... ok
[INFO] [stdout] test spec::tests::git_folder_name_from_path ... ok
[INFO] [stdout] test spec::tests::git_folder_name_from_url_no_git_suffix ... ok
[INFO] [stdout] test spec::tests::folder_name_all_variants ... ok
[INFO] [stdout] test spec::tests::git_folder_name_trailing_slash ... ok
[INFO] [stdout] test spec::tests::git_ref_from_spec ... ok
[INFO] [stdout] test spec::tests::git_folder_name_from_url ... ok
[INFO] [stdout] test spec::tests::git_ref_from_git_spec_no_ref ... ok
[INFO] [stdout] test spec::tests::git_ref_from_marketplace_spec ... ok
[INFO] [stdout] test spec::tests::git_spec_empty_url ... ok
[INFO] [stdout] test spec::tests::git_source_name ... ok
[INFO] [stdout] test spec::tests::canonical_key_local ... ok
[INFO] [stdout] test spec::tests::git_spec_url_with_colon_in_path ... ok
[INFO] [stdout] test spec::tests::git_spec_url_with_empty_path_after_colon ... ok
[INFO] [stdout] test spec::tests::git_spec_with_empty_scheme_url ... ok
[INFO] [stdout] test spec::tests::github_empty_owner ... ok
[INFO] [stdout] test spec::tests::github_empty_owner_rejected ... ok
[INFO] [stdout] test spec::tests::github_empty_repo ... ok
[INFO] [stdout] test spec::tests::github_owner_invalid_chars ... ok
[INFO] [stdout] test spec::tests::github_too_many_slashes_in_coords ... ok
[INFO] [stdout] test spec::tests::github_owner_too_long ... ok
[INFO] [stdout] test spec::tests::is_local_path_absolute_unix ... ok
[INFO] [stdout] test spec::tests::github_owner_ends_with_hyphen ... ok
[INFO] [stdout] test spec::tests::is_local_path_backslash ... ok
[INFO] [stdout] test spec::tests::git_spec_empty_url_after_scheme_strip ... ok
[INFO] [stdout] test spec::tests::is_local_path_parent_dir ... ok
[INFO] [stdout] test spec::tests::is_local_path_windows_drive ... ok
[INFO] [stdout] test spec::tests::local_source_name ... ok
[INFO] [stdout] test spec::tests::marketplace_display_without_ref ... ok
[INFO] [stdout] test spec::tests::local_path_traversal ... ok
[INFO] [stdout] test spec::tests::marketplace_display_git_url ... ok
[INFO] [stdout] test spec::tests::market_location_display_variants ... ok
[INFO] [stdout] test spec::tests::marketplace_display_local ... ok
[INFO] [stdout] test spec::tests::marketplace_display_with_ref ... ok
[INFO] [stdout] test spec::tests::marketplace_http_url_location ... ok
[INFO] [stdout] test spec::tests::marketplace_location_backslash_start ... ok
[INFO] [stdout] test spec::tests::is_local_path_digit_first_not_windows_drive ... ok
[INFO] [stdout] test spec::tests::marketplace_invalid_location_single_segment ... ok
[INFO] [stdout] test spec::tests::marketplace_location_drive_letter ... ok
[INFO] [stdout] test spec::tests::marketplace_location_empty_owner_is_local_path ... ok
[INFO] [stdout] test spec::tests::marketplace_local_absolute_path ... ok
[INFO] [stdout] test spec::tests::marketplace_location_empty_repo_in_github ... ok
[INFO] [stdout] test spec::tests::marketplace_local_windows_drive_path ... ok
[INFO] [stdout] test spec::tests::marketplace_location_owner_slash_repo_slash_extra ... ok
[INFO] [stdout] test spec::tests::marketplace_location_repo_has_slash ... ok
[INFO] [stdout] test spec::tests::marketplace_location_single_char_not_drive ... ok
[INFO] [stdout] test spec::tests::marketplace_source_name ... ok
[INFO] [stdout] test spec::tests::parse_empty_string_is_error ... ok
[INFO] [stdout] test spec::tests::parse_empty_identifier ... ok
[INFO] [stdout] test spec::tests::parse_git_at_ref_only_is_error ... ok
[INFO] [stdout] test spec::tests::parse_git_fully_qualified ... ok
[INFO] [stdout] test spec::tests::parse_git_no_path_no_ref ... ok
[INFO] [stdout] test spec::tests::marketplace_parent_path_location ... ok
[INFO] [stdout] test spec::tests::parse_git_path_traversal_rejected ... ok
[INFO] [stdout] test spec::tests::parse_git_with_ref_no_path ... ok
[INFO] [stdout] test spec::tests::parse_github_folder_name_from_path ... ok
[INFO] [stdout] test spec::tests::parse_github_folder_name_from_repo ... ok
[INFO] [stdout] test spec::tests::parse_case_insensitive_source ... ok
[INFO] [stdout] test spec::tests::parse_github_invalid_owner ... ok
[INFO] [stdout] test spec::tests::parse_git_display_roundtrip ... ok
[INFO] [stdout] test spec::tests::parse_github_no_path ... ok
[INFO] [stdout] test spec::tests::parse_github_no_ref ... ok
[INFO] [stdout] test spec::tests::marketplace_location_with_three_slashes ... ok
[INFO] [stdout] test spec::tests::parse_github_path_traversal_rejected ... ok
[INFO] [stdout] test spec::tests::parse_local_display ... ok
[INFO] [stdout] test spec::tests::parse_github_fully_qualified ... ok
[INFO] [stdout] test spec::tests::parse_github_no_path_with_ref ... ok
[INFO] [stdout] test spec::tests::parse_local_folder_name ... ok
[INFO] [stdout] test spec::tests::parse_local_nested ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_display_roundtrip ... ok
[INFO] [stdout] test spec::tests::parse_market_alias ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_empty_name ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_empty_ref_after_hash ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_location_empty_repo_is_error ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_local ... ok
[INFO] [stdout] test spec::tests::parse_local_relative ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_empty_location ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_location_no_slash_is_error ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_folder_name ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_location_too_many_slashes_is_error ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_url ... ok
[INFO] [stdout] test spec::tests::parse_registry_name_at_version ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_github ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_local_hash_not_ref ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_missing_at ... ok
[INFO] [stdout] test spec::tests::parse_marketplace_with_ref ... ok
[INFO] [stdout] test spec::tests::parse_registry_display_roundtrip ... ok
[INFO] [stdout] test spec::tests::parse_registry_name_only ... ok
[INFO] [stdout] test spec::tests::parse_source_spec_unknown_prefix_returns_error ... ok
[INFO] [stdout] test spec::tests::parse_whitespace_is_error ... ok
[INFO] [stdout] test spec::tests::registry_empty_name_at_version ... ok
[INFO] [stdout] test spec::tests::registry_name_at_empty_version ... ok
[INFO] [stdout] test spec::tests::registry_source_name ... ok
[INFO] [stdout] test spec::tests::serde_roundtrip ... ok
[INFO] [stdout] test spec::tests::parse_unknown_source ... ok
[INFO] [stdout] test spec::tests::spec_deserialize_non_string_returns_error ... ok
[INFO] [stdout] test spec::tests::serde_roundtrip_all_variants ... ok
[INFO] [stdout] test spec::tests::serde_deserialize_invalid ... ok
[INFO] [stdout] test spec::tests::spec_try_from_str ... ok
[INFO] [stdout] test spec::tests::split_ref_at_after_slash ... ok
[INFO] [stdout] test spec::tests::split_ref_empty_after ... ok
[INFO] [stdout] test spec::tests::split_url_and_path_no_scheme ... ok
[INFO] [stdout] test spec::tests::split_ref_at_end_of_url_slash ... ok
[INFO] [stdout] test spec::tests::spec_display_all_variants ... ok
[INFO] [stdout] test spec::tests::split_url_and_path_empty_path_after_colon ... ok
[INFO] [stdout] test spec::tests::valid_git_ref_variants ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_empty_returns_error ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_empty_via_direct ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_invalid_chars_underscore ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_leading_hyphen_rejected ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_trailing_hyphen_rejected ... ok
[INFO] [stdout] test spec::tests::validate_github_owner_with_dots ... ok
[INFO] [stdout] test store::hash::tests::sha512_binary_data ... ok
[INFO] [stdout] test store::hash::tests::sha512_different_inputs_produce_different_hashes ... ok
[INFO] [stdout] test store::hash::tests::validate_empty_string ... ok
[INFO] [stdout] test store::hash::tests::sha512_empty_input ... ok
[INFO] [stdout] test store::hash::tests::validate_non_hex_rejected ... ok
[INFO] [stdout] test store::hash::tests::sha512_hello_world ... ok
[INFO] [stdout] test store::hash::tests::validate_too_long ... ok
[INFO] [stdout] test store::hash::tests::validate_too_short ... ok
[INFO] [stdout] test store::hash::tests::validate_uppercase_rejected ... ok
[INFO] [stdout] test store::layout::tests::hash_prefix_dir_rejects_too_short ... ok
[INFO] [stdout] test store::layout::tests::hash_prefix_dir_works ... ok
[INFO] [stdout] test store::hash::tests::validate_valid ... ok
[INFO] [stdout] test store::layout::tests::hash_to_path_rejects_non_hex ... ok
[INFO] [stdout] test store::layout::tests::hash_to_path_splits_correctly ... ok
[INFO] [stdout] test store::layout::tests::hash_to_path_rejects_short_hash ... ok
[INFO] [stdout] test store::layout::tests::hash_to_path_rejects_uppercase ... ok
[INFO] [stdout] test store::hash::tests::sha512_deterministic ... ok
[INFO] [stdout] test store::tests::is_cross_device_false_for_regular_error ... ok
[INFO] [stdout] test store::tests::get_path_returns_none_for_missing ... ok
[INFO] [stdout] test store::tests::has_content_returns_false_for_missing ... ok
[INFO] [stdout] test store::tests::different_content_produces_different_entries ... ok
[INFO] [stdout] test store::tests::link_to_errors_on_invalid_hash ... ok
[INFO] [stdout] test store::tests::empty_content_can_be_stored ... ok
[INFO] [stdout] test store::tests::link_to_creates_hard_link ... ok
[INFO] [stdout] test store::tests::link_to_creates_parent_directories ... ok
[INFO] [stdout] test store::tests::link_to_falls_back_to_copy_on_cross_device ... ok
[INFO] [stdout] test store::tests::link_to_errors_on_existing_target_same_dir ... ok
[INFO] [stdout] test store::tests::link_to_with_no_parent_target ... ok
[INFO] [stdout] test store::tests::link_to_target_with_no_parent_still_works ... ok
[INFO] [stdout] test store::tests::lock_creates_lock_file ... ok
[INFO] [stdout] test store::tests::get_path_errors_on_invalid_hash ... ok
[INFO] [stdout] test store::tests::has_content_returns_false_for_invalid_hash ... ok
[INFO] [stdout] test store::tests::link_to_errors_on_missing_hash ... ok
[INFO] [stdout] test store::tests::lock_creates_store_directory ... ok
[INFO] [stdout] test tests::version_is_not_empty ... ok
[INFO] [stdout] test version::tests::caret_matches ... ok
[INFO] [stdout] test store::tests::store_and_retrieve_file ... ok
[INFO] [stdout] test store::tests::store_creates_prefix_directories ... ok
[INFO] [stdout] test store::tests::store_package_empty_directory ... ok
[INFO] [stdout] test store::tests::lock_released_on_drop ... ok
[INFO] [stdout] test version::tests::compound_range_matches ... ok
[INFO] [stdout] test version::tests::exact_matches ... ok
[INFO] [stdout] test store::tests::store_file_is_idempotent ... ok
[INFO] [stdout] test version::tests::parse_caret_req ... ok
[INFO] [stdout] test version::tests::parse_compound_range ... ok
[INFO] [stdout] test version::tests::parse_exact_req ... ok
[INFO] [stdout] test store::tests::get_path_returns_some_for_existing ... ok
[INFO] [stdout] test store::tests::store_package_deduplicates_identical_files ... ok
[INFO] [stdout] test version::tests::parse_tilde_req ... ok
[INFO] [stdout] test version::tests::parse_prerelease_versions ... ok
[INFO] [stdout] test store::tests::store_package_walks_directory ... ok
[INFO] [stdout] test store::tests::store_package_skips_symlinks ... ok
[INFO] [stdout] test store::tests::store_package_with_nested_dirs ... ok
[INFO] [stdout] test version::tests::stable_version_is_not_prerelease ... ok
[INFO] [stdout] test version::tests::requirement_inner_returns_semver_version_req ... ok
[INFO] [stdout] test version::tests::pre_1_0_caret_treats_minor_as_breaking ... ok
[INFO] [stdout] test version::tests::parse_wildcard_req ... ok
[INFO] [stdout] test version::tests::prerelease_ordering ... ok
[INFO] [stdout] test version::tests::tilde_matches ... ok
[INFO] [stdout] test version::tests::parse_valid_versions ... ok
[INFO] [stdout] test version::tests::reject_invalid_versions ... ok
[INFO] [stdout] test version::tests::select_best_excludes_prerelease ... ok
[INFO] [stdout] test version::tests::version_inner_returns_semver_version ... ok
[INFO] [stdout] test version::tests::select_best_picks_highest_matching ... ok
[INFO] [stdout] test version::tests::select_best_pre_1_0_caret ... ok
[INFO] [stdout] test version::tests::select_best_returns_none_when_no_match ... ok
[INFO] [stdout] test version::tests::reject_invalid_reqs ... ok
[INFO] [stdout] test version::tests::version_ordering ... ok
[INFO] [stdout] test version::tests::wildcard_matches_everything ... ok
[INFO] [stdout] test workspace::tests::discover_members_empty_when_no_matches ... ok
[INFO] [stdout] test workspace::tests::find_root_from_member ... ok
[INFO] [stdout] test workspace::tests::discover_members_error_manifest_is_directory ... ok
[INFO] [stdout] test workspace::tests::discover_members_error_no_package_section ... ok
[INFO] [stdout] test workspace::tests::discover_members_single_glob ... ok
[INFO] [stdout] test workspace::tests::find_root_from_root_itself ... ok
[INFO] [stdout] test workspace::tests::discover_members_multiple_patterns ... ok
[INFO] [stdout] test workspace::tests::discover_members_skips_no_manifest ... ok
[INFO] [stdout] test workspace::tests::discover_members_error_duplicate_name ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_create_dir_failure_propagates_as_io_variant ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_io_error_on_read_propagates_as_io_variant ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_handles_non_object_enabled_plugins ... ok
[INFO] [stdout] test workspace::tests::find_root_skips_invalid_toml ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_created_fresh_no_starter ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_merge_existing ... ok
[INFO] [stdout] test workspace::tests::find_root_returns_none_for_non_workspace ... ok
[INFO] [stdout] test workspace::tests::discover_members_skips_non_directory_match ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_skip_if_fully_configured ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_rejects_invalid_json ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_handles_non_object_marketplace_value ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_rejects_non_object_root ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_adds_enabled_plugins_when_marketplace_exists ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_write_failure_propagates_as_io_variant ... ok
[INFO] [stdout] test workspace::tests::discover_members_error_invalid_manifest_content ... ok
[INFO] [stdout] test workspace_init::tests::agent_template_has_frontmatter ... ok
[INFO] [stdout] test workspace_init::tests::hook_template_is_valid_json ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_created_fresh ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::make_temp_dir_removes_existing_dir ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_no_starter_already_configured ... ok
[INFO] [stdout] test workspace_init::tests::init_adaptor_error_propagates ... ok
[INFO] [stdout] test workspace_init::adaptors::claude::tests::claude_settings_no_starter_merge_adds_marketplace_only ... ok
[INFO] [stdout] test registry::git::tests::ensure_index_clone_path_covered_when_not_synced ... ok
[INFO] [stdout] test workspace_init::tests::adaptor_apply_returns_false_when_already_configured ... ok
[INFO] [stdout] test workspace_init::tests::gitignore_has_managed_markers ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_creates_marketplace_json ... ok
[INFO] [stdout] test workspace_init::tests::init_workspace_fails_on_create_dir_error ... ok
[INFO] [stdout] test workspace_init::tests::init_workspace_fails_on_write_file_error ... ok
[INFO] [stdout] test workspace_init::tests::init_workspace_creates_manifest ... ok
[INFO] [stdout] test workspace_init::tests::init_workspace_rejects_existing ... ok
[INFO] [stdout] test workspace_init::tests::init_adaptor_returns_false_no_tool_configured_action ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_no_manifest_skips_aipm_toml ... ok
[INFO] [stdout] test workspace_init::tests::gitignore_no_starter_omits_tool_usage_log ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_rejects_existing ... ok
[INFO] [stdout] test workspace_init::tests::plugin_json_is_valid ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_no_starter ... ok
[INFO] [stdout] test workspace_init::tests::init_no_starter_creates_marketplace_json_with_empty_plugins ... ok
[INFO] [stdout] test workspace_init::tests::init_no_starter_still_configures_tools ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_with_manifest_creates_aipm_toml ... ok
[INFO] [stdout] test workspace_init::tests::make_temp_dir_cleans_up_existing_directory ... ok
[INFO] [stdout] test workspace_init::tests::marketplace_json_no_starter_has_empty_plugins ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_fails_on_create_dir_error ... ok
[INFO] [stdout] test workspace_init::tests::marketplace_json_with_starter_is_valid ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_write_marketplace_json_fails ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_write_scanner_md_fails ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_script_is_nonempty ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_write_scaffold_sh_fails ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_fails_on_write_file_error ... ok
[INFO] [stdout] test workspace_init::tests::skill_template_has_frontmatter ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_marketplace_write_skill_md_fails ... ok
[INFO] [stdout] test workspace_init::tests::workspace_manifest_has_correct_members ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_creates_tree ... ok
[INFO] [stdout] test workspace_init::tests::init_both_creates_everything ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_script_delegates_to_aipm_cli ... ok
[INFO] [stdout] test workspace_init::tests::scaffold_script_snapshot ... ok
[INFO] [stdout] test workspace_init::tests::starter_manifest_round_trips ... ok
[INFO] [stdout] test workspace_init::tests::workspace_manifest_round_trips ... ok
[INFO] [stdout] test workspace_init::tests::init_marketplace_with_preconfigured_claude_settings ... ok
[INFO] [stdout] test workspace_init::tests::init_with_no_adaptors ... ok
[INFO] [stdout] test registry::git::tests::ensure_index_fetch_path_covered_when_git_dir_exists ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1950 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.81s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/bdd.rs (/opt/rustwide/target/debug/deps/bdd-3f1063a67db3ed5c)
[INFO] [stdout] Failed to parse: Failed to parse feature: Could not read path: /opt/rustwide/workdir/../../tests/features/manifest
[INFO] [stdout] [Summary]
[INFO] [stdout] 0 features
[INFO] [stdout] 0 scenarios
[INFO] [stdout] 0 steps
[INFO] [stdout] 1 parsing error
[INFO] [stderr]    Doc-tests libaipm
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/frontmatter.rs - frontmatter::field_value_range (line 161) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.10s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "377e0c7f67b845f5dad60a3be79c6b142cf45c8c78f289a97092317994a5490e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "377e0c7f67b845f5dad60a3be79c6b142cf45c8c78f289a97092317994a5490e", kill_on_drop: false }`
[INFO] [stdout] 377e0c7f67b845f5dad60a3be79c6b142cf45c8c78f289a97092317994a5490e
