[INFO] cloning repository https://github.com/andrew-garfield101/writ [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/andrew-garfield101/writ" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandrew-garfield101%2Fwrit", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandrew-garfield101%2Fwrit'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 54086adecceda71b1dca78f2e3ebed66f183f8cf [INFO] testing andrew-garfield101/writ against beta-2026-04-21 for beta-1.96-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandrew-garfield101%2Fwrit" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/andrew-garfield101/writ [INFO] finished tweaking git repo https://github.com/andrew-garfield101/writ [INFO] tweaked toml for git repo https://github.com/andrew-garfield101/writ written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/andrew-garfield101/writ on toolchain beta-2026-04-21 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/andrew-garfield101/writ 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" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 599de60f779b629ce04ffc0777856e0ff91b1fd85bb824931f87665459a21e72 [INFO] running `Command { std: "docker" "start" "-a" "599de60f779b629ce04ffc0777856e0ff91b1fd85bb824931f87665459a21e72", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "599de60f779b629ce04ffc0777856e0ff91b1fd85bb824931f87665459a21e72", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "599de60f779b629ce04ffc0777856e0ff91b1fd85bb824931f87665459a21e72", kill_on_drop: false }` [INFO] [stdout] 599de60f779b629ce04ffc0777856e0ff91b1fd85bb824931f87665459a21e72 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b90a0722e75af27b761af230cf16f6856685f561fc3a3b47919468c657fbeb11 [INFO] running `Command { std: "docker" "start" "-a" "b90a0722e75af27b761af230cf16f6856685f561fc3a3b47919468c657fbeb11", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling target-lexicon v0.12.16 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling semver v1.0.27 [INFO] [stderr] Compiling zerocopy v0.8.39 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling futures-task v0.3.32 [INFO] [stderr] Compiling percent-encoding v2.3.2 [INFO] [stderr] Compiling futures-io v0.3.32 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling memoffset v0.9.1 [INFO] [stderr] Compiling signature v2.2.0 [INFO] [stderr] Compiling getrandom v0.4.1 [INFO] [stderr] Compiling rustc_version v0.4.1 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Compiling syn v2.0.116 [INFO] [stderr] Compiling memchr v2.8.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling ed25519 v2.2.3 [INFO] [stderr] Compiling crossbeam-channel v0.5.15 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling constant_time_eq v0.4.2 [INFO] [stderr] Compiling rmcp v0.16.0 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Compiling clap_lex v1.0.0 [INFO] [stderr] Compiling pastey v0.2.1 [INFO] [stderr] Compiling shell-words v1.1.1 [INFO] [stderr] Compiling pyo3-build-config v0.23.5 [INFO] [stderr] Compiling clap_builder v4.5.59 [INFO] [stderr] Compiling colored v3.1.1 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling universal-hash v0.5.1 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling cipher v0.4.4 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling polyval v0.6.2 [INFO] [stderr] Compiling inotify-sys v0.1.5 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling inotify v0.9.6 [INFO] [stderr] Compiling aes v0.8.4 [INFO] [stderr] Compiling ctr v0.9.2 [INFO] [stderr] Compiling ghash v0.5.1 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling aead v0.5.2 [INFO] [stderr] Compiling dirs-sys v0.4.1 [INFO] [stderr] Compiling filetime v0.2.27 [INFO] [stderr] Compiling mio v0.8.11 [INFO] [stderr] Compiling aes-gcm v0.10.3 [INFO] [stderr] Compiling dirs v5.0.1 [INFO] [stderr] Compiling fs2 v0.4.3 [INFO] [stderr] Compiling notify v6.1.1 [INFO] [stderr] Compiling hostname v0.4.2 [INFO] [stderr] Compiling console v0.15.11 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling pyo3-macros-backend v0.23.5 [INFO] [stderr] Compiling pyo3-ffi v0.23.5 [INFO] [stderr] Compiling pyo3 v0.23.5 [INFO] [stderr] Compiling indicatif v0.17.11 [INFO] [stderr] Compiling tempfile v3.25.0 [INFO] [stderr] Compiling libz-sys v1.1.23 [INFO] [stderr] Compiling zstd-sys v2.0.16+zstd.1.5.7 [INFO] [stderr] Compiling libgit2-sys v0.17.0+1.8.1 [INFO] [stderr] Compiling blake3 v1.8.3 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling rand_chacha v0.3.1 [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 thiserror-impl v2.0.18 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling ref-cast-impl v1.0.25 [INFO] [stderr] Compiling tokio-macros v2.6.1 [INFO] [stderr] Compiling schemars_derive v1.2.1 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling ref-cast v1.0.25 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling zstd v0.13.3 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling tokio v1.50.0 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling dialoguer v0.11.0 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling ed25519-dalek v2.2.0 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling rmcp-macros v0.16.0 [INFO] [stderr] Compiling clap v4.5.59 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling pyo3-macros v0.23.5 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling toon-format v0.4.4 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling git2 v0.19.0 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling pythonize v0.23.0 [INFO] [stderr] Compiling writ-core v0.1.1 (/opt/rustwide/workdir/crates/writ-core) [INFO] [stdout] warning: unused import: `HashMap` [INFO] [stdout] --> crates/writ-core/src/watch.rs:10:24 [INFO] [stdout] | [INFO] [stdout] 10 | use std::collections::{HashMap, HashSet}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/writ-core/src/watch.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/repo.rs:4553:48 [INFO] [stdout] | [INFO] [stdout] 4553 | "most-recent" => ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:48:41 [INFO] [stdout] | [INFO] [stdout] 48 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling writ-mcp v0.1.1 (/opt/rustwide/workdir/crates/writ-mcp) [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/writ-core/src/repo.rs:4062:13 [INFO] [stdout] | [INFO] [stdout] 4062 | let mut proposal = [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: function `is_dir_empty` is never used [INFO] [stdout] --> crates/writ-core/src/hooks.rs:1039:4 [INFO] [stdout] | [INFO] [stdout] 1039 | fn is_dir_empty(path: &Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `convergence_epoch` and `bridge_tree_hash` are never used [INFO] [stdout] --> crates/writ-core/src/repo.rs:6741:8 [INFO] [stdout] | [INFO] [stdout] 201 | impl Repository { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 6741 | fn convergence_epoch(&self) -> Option> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 6746 | fn bridge_tree_hash(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling writ-py v0.1.1 (/opt/rustwide/workdir/crates/writ-py) [INFO] [stderr] Compiling writ-cli v0.1.1 (/opt/rustwide/workdir/crates/writ-cli) [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1477:19 [INFO] [stdout] | [INFO] [stdout] 1477 | d.to_object(py) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1485:17 [INFO] [stdout] | [INFO] [stdout] 1485 | Ok(dict.to_object(py)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1507:25 [INFO] [stdout] | [INFO] [stdout] 1507 | Ok(dict.to_object(py)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strategy` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4897:5 [INFO] [stdout] | [INFO] [stdout] 4897 | strategy: &str, [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `proposal` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4953:9 [INFO] [stdout] | [INFO] [stdout] 4953 | let proposal = repo.reject_proposal(proposal_id)?; [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proposal` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strategy` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4967:35 [INFO] [stdout] | [INFO] [stdout] 4967 | fn cmd_finish_auto(cwd: &PathBuf, strategy: &str) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `profile` is never read [INFO] [stdout] --> crates/writ-cli/src/init.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct InitOptions { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 40 | pub profile: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `InitOptions` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `global_config`, `enable_git`, `project_name`, and `scan` are never read [INFO] [stdout] --> crates/writ-cli/src/init.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct InitPlan { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 50 | pub global_config: Option, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 51 | pub project_config: ProjectConfig, [INFO] [stdout] 52 | pub enable_git: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub project_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 57 | pub scan: EnvironmentScan, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `InitPlan` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 41s [INFO] running `Command { std: "docker" "inspect" "b90a0722e75af27b761af230cf16f6856685f561fc3a3b47919468c657fbeb11", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b90a0722e75af27b761af230cf16f6856685f561fc3a3b47919468c657fbeb11", kill_on_drop: false }` [INFO] [stdout] b90a0722e75af27b761af230cf16f6856685f561fc3a3b47919468c657fbeb11 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] cd79de84464bf51737ecd7fb5fa326e3007b677bab36e0aa5e0205a4dda4d65e [INFO] running `Command { std: "docker" "start" "-a" "cd79de84464bf51737ecd7fb5fa326e3007b677bab36e0aa5e0205a4dda4d65e", kill_on_drop: false }` [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling anyhow v1.0.101 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling rand_core v0.9.5 [INFO] [stderr] Compiling rusty-fork v0.3.1 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling proptest v1.10.0 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling writ-core v0.1.1 (/opt/rustwide/workdir/crates/writ-core) [INFO] [stderr] Compiling rmcp v0.16.0 [INFO] [stdout] warning: unused import: `HashMap` [INFO] [stdout] --> crates/writ-core/src/watch.rs:10:24 [INFO] [stdout] | [INFO] [stdout] 10 | use std::collections::{HashMap, HashSet}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/writ-core/src/watch.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/repo.rs:4553:48 [INFO] [stdout] | [INFO] [stdout] 4553 | "most-recent" => ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:48:41 [INFO] [stdout] | [INFO] [stdout] 48 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling bstr v1.12.1 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling fancy-regex v0.13.0 [INFO] [stderr] Compiling tiktoken-rs v0.9.1 [INFO] [stdout] warning: unused import: `HashMap` [INFO] [stdout] --> crates/writ-core/src/watch.rs:10:24 [INFO] [stdout] | [INFO] [stdout] 10 | use std::collections::{HashMap, HashSet}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/writ-core/src/watch.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: duplicated attribute [INFO] [stdout] --> crates/writ-core/src/watch.rs:1139:5 [INFO] [stdout] | [INFO] [stdout] 1139 | #[test] [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(duplicate_macro_attributes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/repo.rs:4553:48 [INFO] [stdout] | [INFO] [stdout] 4553 | "most-recent" => ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:48:41 [INFO] [stdout] | [INFO] [stdout] 48 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:880:41 [INFO] [stdout] | [INFO] [stdout] 880 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:1202:41 [INFO] [stdout] | [INFO] [stdout] 1202 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:1297:41 [INFO] [stdout] | [INFO] [stdout] 1297 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stdout] --> crates/writ-core/src/watch.rs:1389:41 [INFO] [stdout] | [INFO] [stdout] 1389 | strategy: ConvergeStrategy::MostRecent, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/writ-core/src/repo.rs:4062:13 [INFO] [stdout] | [INFO] [stdout] 4062 | let mut proposal = [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: function `is_dir_empty` is never used [INFO] [stdout] --> crates/writ-core/src/hooks.rs:1039:4 [INFO] [stdout] | [INFO] [stdout] 1039 | fn is_dir_empty(path: &Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `convergence_epoch` and `bridge_tree_hash` are never used [INFO] [stdout] --> crates/writ-core/src/repo.rs:6741:8 [INFO] [stdout] | [INFO] [stdout] 201 | impl Repository { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 6741 | fn convergence_epoch(&self) -> Option> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 6746 | fn bridge_tree_hash(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling writ-mcp v0.1.1 (/opt/rustwide/workdir/crates/writ-mcp) [INFO] [stderr] Compiling writ-cli v0.1.1 (/opt/rustwide/workdir/crates/writ-cli) [INFO] [stderr] Compiling writ-py v0.1.1 (/opt/rustwide/workdir/crates/writ-py) [INFO] [stdout] warning: variant `Append` is never constructed [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 44 | enum FileChange { [INFO] [stdout] | ---------- variant in this enum [INFO] [stdout] 45 | Write(String, String), [INFO] [stdout] 46 | Append(String, String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `appends` is never used [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:219:12 [INFO] [stdout] | [INFO] [stdout] 210 | impl AgentBuilder { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 219 | pub fn appends(mut self, path: &str, content: &str) -> Self { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `expect_error` is never used [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:290:12 [INFO] [stdout] | [INFO] [stdout] 252 | impl ConvergeResult { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 290 | pub fn expect_error(self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `repo` is never read [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:304:5 [INFO] [stdout] | [INFO] [stdout] 300 | pub struct SuccessResult { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 304 | repo: Repository, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `assert_file_not_contains`, `assert_fully_resolved`, `assert_files_changed`, `report`, and `repo` are never used [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:322:12 [INFO] [stdout] | [INFO] [stdout] 307 | impl SuccessResult { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 322 | pub fn assert_file_not_contains(&self, path: &str, content: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 348 | pub fn assert_fully_resolved(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 357 | pub fn assert_files_changed(&self, expected: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 379 | pub fn report(&self) -> &ConvergeAllReport { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 384 | pub fn repo(&self) -> &Repository { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `root` and `repo` are never read [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:399:5 [INFO] [stdout] | [INFO] [stdout] 397 | pub struct EscalationResult { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 398 | _dir: TempDir, [INFO] [stdout] 399 | root: PathBuf, [INFO] [stdout] | ^^^^ [INFO] [stdout] 400 | report: ConvergeAllReport, [INFO] [stdout] 401 | repo: Repository, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `report` and `file_content` are never used [INFO] [stdout] --> crates/writ-core/tests/convergence_scenarios/mod.rs:419:12 [INFO] [stdout] | [INFO] [stdout] 404 | impl EscalationResult { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 419 | pub fn report(&self) -> &ConvergeAllReport { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 424 | pub fn file_content(&self, path: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1477:19 [INFO] [stdout] | [INFO] [stdout] 1477 | d.to_object(py) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1485:17 [INFO] [stdout] | [INFO] [stdout] 1485 | Ok(dict.to_object(py)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stdout] --> crates/writ-py/src/lib.rs:1507:25 [INFO] [stdout] | [INFO] [stdout] 1507 | Ok(dict.to_object(py)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strategy` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4897:5 [INFO] [stdout] | [INFO] [stdout] 4897 | strategy: &str, [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `proposal` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4953:9 [INFO] [stdout] | [INFO] [stdout] 4953 | let proposal = repo.reject_proposal(proposal_id)?; [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proposal` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strategy` [INFO] [stdout] --> crates/writ-cli/src/main.rs:4967:35 [INFO] [stdout] | [INFO] [stdout] 4967 | fn cmd_finish_auto(cwd: &PathBuf, strategy: &str) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/writ-core/src/repo.rs:4062:13 [INFO] [stdout] | [INFO] [stdout] 4062 | let mut proposal = [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: field `profile` is never read [INFO] [stdout] --> crates/writ-cli/src/init.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct InitOptions { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 40 | pub profile: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `InitOptions` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `global_config`, `enable_git`, `project_name`, and `scan` are never read [INFO] [stdout] --> crates/writ-cli/src/init.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct InitPlan { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 50 | pub global_config: Option, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 51 | pub project_config: ProjectConfig, [INFO] [stdout] 52 | pub enable_git: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub project_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 57 | pub scan: EnvironmentScan, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `InitPlan` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `result` [INFO] [stdout] --> crates/writ-core/src/repo.rs:31877:13 [INFO] [stdout] | [INFO] [stdout] 31877 | let result = repo.create_task("Complete me".into(), None).unwrap(); [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/writ-core/src/watch.rs:685:13 [INFO] [stdout] | [INFO] [stdout] 685 | let mut state = WatchState::new(&repo).unwrap(); [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> crates/writ-core/src/watch.rs:685:13 [INFO] [stdout] | [INFO] [stdout] 685 | let mut state = WatchState::new(&repo).unwrap(); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rx` [INFO] [stdout] --> crates/writ-core/src/watch.rs:955:18 [INFO] [stdout] | [INFO] [stdout] 955 | let (tx, rx) = mpsc::channel(); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_rx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_dir_empty` is never used [INFO] [stdout] --> crates/writ-core/src/hooks.rs:1039:4 [INFO] [stdout] | [INFO] [stdout] 1039 | fn is_dir_empty(path: &Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `bridge_tree_hash` is never used [INFO] [stdout] --> crates/writ-core/src/repo.rs:6746:8 [INFO] [stdout] | [INFO] [stdout] 201 | impl Repository { [INFO] [stdout] | --------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 6746 | fn bridge_tree_hash(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `test_watch_no_re_convergence_on_same_overlap` is never used [INFO] [stdout] --> crates/writ-core/src/watch.rs:1234:8 [INFO] [stdout] | [INFO] [stdout] 1234 | fn test_watch_no_re_convergence_on_same_overlap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 12s [INFO] running `Command { std: "docker" "inspect" "cd79de84464bf51737ecd7fb5fa326e3007b677bab36e0aa5e0205a4dda4d65e", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cd79de84464bf51737ecd7fb5fa326e3007b677bab36e0aa5e0205a4dda4d65e", kill_on_drop: false }` [INFO] [stdout] cd79de84464bf51737ecd7fb5fa326e3007b677bab36e0aa5e0205a4dda4d65e [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 72772de368b5fccd041b4c9cd7342df6dd439bd072ce55c282444c9c60fb67e4 [INFO] running `Command { std: "docker" "start" "-a" "72772de368b5fccd041b4c9cd7342df6dd439bd072ce55c282444c9c60fb67e4", kill_on_drop: false }` [INFO] [stderr] warning: unused import: `HashMap` [INFO] [stderr] --> crates/writ-core/src/watch.rs:10:24 [INFO] [stderr] | [INFO] [stderr] 10 | use std::collections::{HashMap, HashSet}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> crates/writ-core/src/watch.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/repo.rs:4553:48 [INFO] [stderr] | [INFO] [stderr] 4553 | "most-recent" => ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/watch.rs:48:41 [INFO] [stderr] | [INFO] [stderr] 48 | strategy: ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> crates/writ-core/src/repo.rs:4062:13 [INFO] [stderr] | [INFO] [stderr] 4062 | let mut proposal = [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: function `is_dir_empty` is never used [INFO] [stderr] --> crates/writ-core/src/hooks.rs:1039:4 [INFO] [stderr] | [INFO] [stderr] 1039 | fn is_dir_empty(path: &Path) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: methods `convergence_epoch` and `bridge_tree_hash` are never used [INFO] [stderr] --> crates/writ-core/src/repo.rs:6741:8 [INFO] [stderr] | [INFO] [stderr] 201 | impl Repository { [INFO] [stderr] | --------------- methods in this implementation [INFO] [stderr] ... [INFO] [stderr] 6741 | fn convergence_epoch(&self) -> Option> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 6746 | fn bridge_tree_hash(&self) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `writ-core` (lib) generated 7 warnings (run `cargo fix --lib -p writ-core` to apply 3 suggestions) [INFO] [stderr] warning: duplicated attribute [INFO] [stderr] --> crates/writ-core/src/watch.rs:1139:5 [INFO] [stderr] | [INFO] [stderr] 1139 | #[test] [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(duplicate_macro_attributes)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/watch.rs:880:41 [INFO] [stderr] | [INFO] [stderr] 880 | strategy: ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/watch.rs:1202:41 [INFO] [stderr] | [INFO] [stderr] 1202 | strategy: ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/watch.rs:1297:41 [INFO] [stderr] | [INFO] [stderr] 1297 | strategy: ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated unit variant `convergence::ConvergeStrategy::MostRecent`: use Escalate instead — MostRecent silently drops work [INFO] [stderr] --> crates/writ-core/src/watch.rs:1389:41 [INFO] [stderr] | [INFO] [stderr] 1389 | strategy: ConvergeStrategy::MostRecent, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `result` [INFO] [stderr] --> crates/writ-core/src/repo.rs:31877:13 [INFO] [stderr] | [INFO] [stderr] 31877 | let result = repo.create_task("Complete me".into(), None).unwrap(); [INFO] [stderr] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> crates/writ-core/src/watch.rs:685:13 [INFO] [stderr] | [INFO] [stderr] 685 | let mut state = WatchState::new(&repo).unwrap(); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `state` [INFO] [stderr] --> crates/writ-core/src/watch.rs:685:13 [INFO] [stderr] | [INFO] [stderr] 685 | let mut state = WatchState::new(&repo).unwrap(); [INFO] [stderr] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `rx` [INFO] [stderr] --> crates/writ-core/src/watch.rs:955:18 [INFO] [stderr] | [INFO] [stderr] 955 | let (tx, rx) = mpsc::channel(); [INFO] [stderr] | ^^ help: if this is intentional, prefix it with an underscore: `_rx` [INFO] [stderr] [INFO] [stderr] warning: method `bridge_tree_hash` is never used [INFO] [stderr] --> crates/writ-core/src/repo.rs:6746:8 [INFO] [stderr] | [INFO] [stderr] 201 | impl Repository { [INFO] [stderr] | --------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 6746 | fn bridge_tree_hash(&self) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `test_watch_no_re_convergence_on_same_overlap` is never used [INFO] [stderr] --> crates/writ-core/src/watch.rs:1234:8 [INFO] [stderr] | [INFO] [stderr] 1234 | fn test_watch_no_re_convergence_on_same_overlap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `Append` is never constructed [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 44 | enum FileChange { [INFO] [stderr] | ---------- variant in this enum [INFO] [stderr] 45 | Write(String, String), [INFO] [stderr] 46 | Append(String, String), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: method `appends` is never used [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:219:12 [INFO] [stderr] | [INFO] [stderr] 210 | impl AgentBuilder { [INFO] [stderr] | ----------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 219 | pub fn appends(mut self, path: &str, content: &str) -> Self { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `expect_error` is never used [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:290:12 [INFO] [stderr] | [INFO] [stderr] 252 | impl ConvergeResult { [INFO] [stderr] | ------------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 290 | pub fn expect_error(self) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field `repo` is never read [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:304:5 [INFO] [stderr] | [INFO] [stderr] 300 | pub struct SuccessResult { [INFO] [stderr] | ------------- field in this struct [INFO] [stderr] ... [INFO] [stderr] 304 | repo: Repository, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods `assert_file_not_contains`, `assert_fully_resolved`, `assert_files_changed`, `report`, and `repo` are never used [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:322:12 [INFO] [stderr] | [INFO] [stderr] 307 | impl SuccessResult { [INFO] [stderr] | ------------------ methods in this implementation [INFO] [stderr] ... [INFO] [stderr] 322 | pub fn assert_file_not_contains(&self, path: &str, content: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 348 | pub fn assert_fully_resolved(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 357 | pub fn assert_files_changed(&self, expected: usize) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 379 | pub fn report(&self) -> &ConvergeAllReport { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 384 | pub fn repo(&self) -> &Repository { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: fields `root` and `repo` are never read [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:399:5 [INFO] [stderr] | [INFO] [stderr] 397 | pub struct EscalationResult { [INFO] [stderr] | ---------------- fields in this struct [INFO] [stderr] 398 | _dir: TempDir, [INFO] [stderr] 399 | root: PathBuf, [INFO] [stderr] | ^^^^ [INFO] [stderr] 400 | report: ConvergeAllReport, [INFO] [stderr] 401 | repo: Repository, [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods `report` and `file_content` are never used [INFO] [stderr] --> crates/writ-core/tests/convergence_scenarios/mod.rs:419:12 [INFO] [stderr] | [INFO] [stderr] 404 | impl EscalationResult { [INFO] [stderr] | --------------------- methods in this implementation [INFO] [stderr] ... [INFO] [stderr] 419 | pub fn report(&self) -> &ConvergeAllReport { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 424 | pub fn file_content(&self, path: &str) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `writ-core` (lib test) generated 17 warnings (6 duplicates) (run `cargo fix --lib -p writ-core --tests` to apply 4 suggestions) [INFO] [stderr] warning: `writ-core` (test "scenario_tests") generated 7 warnings [INFO] [stderr] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stderr] --> crates/writ-py/src/lib.rs:1477:19 [INFO] [stderr] | [INFO] [stderr] 1477 | d.to_object(py) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stderr] --> crates/writ-py/src/lib.rs:1485:17 [INFO] [stderr] | [INFO] [stderr] 1485 | Ok(dict.to_object(py)) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated method `pyo3::ToPyObject::to_object`: `ToPyObject` is going to be replaced by `IntoPyObject`. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information. [INFO] [stderr] --> crates/writ-py/src/lib.rs:1507:25 [INFO] [stderr] | [INFO] [stderr] 1507 | Ok(dict.to_object(py)) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `strategy` [INFO] [stderr] --> crates/writ-cli/src/main.rs:4897:5 [INFO] [stderr] | [INFO] [stderr] 4897 | strategy: &str, [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `proposal` [INFO] [stderr] --> crates/writ-cli/src/main.rs:4953:9 [INFO] [stderr] | [INFO] [stderr] 4953 | let proposal = repo.reject_proposal(proposal_id)?; [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proposal` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `strategy` [INFO] [stderr] --> crates/writ-cli/src/main.rs:4967:35 [INFO] [stderr] | [INFO] [stderr] 4967 | fn cmd_finish_auto(cwd: &PathBuf, strategy: &str) -> Result<(), Box> { [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_strategy` [INFO] [stderr] [INFO] [stderr] warning: field `profile` is never read [INFO] [stderr] --> crates/writ-cli/src/init.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 20 | pub struct InitOptions { [INFO] [stderr] | ----------- field in this struct [INFO] [stderr] ... [INFO] [stderr] 40 | pub profile: String, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `InitOptions` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: fields `global_config`, `enable_git`, `project_name`, and `scan` are never read [INFO] [stderr] --> crates/writ-cli/src/init.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 49 | pub struct InitPlan { [INFO] [stderr] | -------- fields in this struct [INFO] [stderr] 50 | pub global_config: Option, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] 51 | pub project_config: ProjectConfig, [INFO] [stderr] 52 | pub enable_git: bool, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 56 | pub project_name: String, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] 57 | pub scan: EnvironmentScan, [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `InitPlan` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: `writ-py` (lib test) generated 3 warnings [INFO] [stderr] warning: `writ-cli` (bin "writ" test) generated 5 warnings (run `cargo fix --bin "writ" -p writ-cli --tests` to apply 3 suggestions) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.47s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/writ-d5850de755b0be2c) [INFO] [stdout] [INFO] [stdout] running 20 tests [INFO] [stdout] test tests::test_common_prefix_empty_list ... ok [INFO] [stdout] test watch_ui::tests::test_format_duration_seconds ... ok [INFO] [stdout] test tests::test_common_prefix_same_directory ... ok [INFO] [stdout] test tests::test_common_prefix_partial_directory_match ... ok [INFO] [stdout] test watch_ui::tests::test_format_duration_hours ... ok [INFO] [stdout] test tests::test_group_specs_cross_directory_spec_gets_own_group ... ok [INFO] [stdout] test tests::test_group_specs_empty_file_scope_goes_to_misc ... ok [INFO] [stdout] test watch_ui::tests::test_format_duration_minutes ... ok [INFO] [stdout] test tests::test_common_prefix_mixed_depth ... ok [INFO] [stdout] test watch_ui::tests::test_render_seal_detected_event ... ok [INFO] [stdout] test watch_ui::tests::test_watch_summary_default ... ok [INFO] [stdout] test tests::test_group_specs_all_same_area ... ok [INFO] [stdout] test watch_ui::tests::test_render_convergence_completed_event ... ok [INFO] [stdout] test tests::test_common_prefix_root_files ... ok [INFO] [stdout] test tests::test_common_prefix_nested_match ... ok [INFO] [stdout] test tests::test_common_prefix_no_overlap ... ok [INFO] [stdout] test watch_ui::tests::test_format_duration_zero ... ok [INFO] [stdout] test watch_ui::tests::test_render_conflict_detected_event ... ok [INFO] [stdout] test tests::test_group_specs_by_directory ... ok [INFO] [stdout] test tests::test_common_prefix_single_file ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/writ_core-058973df6d5f548a) [INFO] [stdout] [INFO] [stdout] running 1995 tests [INFO] [stdout] test agent::tests::test_agent_status_default ... ok [INFO] [stdout] test agent::tests::test_agent_status_serialization_roundtrip ... ok [INFO] [stdout] test agent::tests::test_canonicalize_empty_stays_empty ... ok [INFO] [stdout] test agent::tests::test_canonicalize_normalizes_double_slashes ... ok [INFO] [stdout] test agent::tests::test_canonicalize_rejects_absolute_unix ... ok [INFO] [stdout] test agent::tests::test_canonicalize_rejects_traversal ... ok [INFO] [stdout] test agent::tests::test_canonicalize_single_file ... ok [INFO] [stdout] test agent::tests::test_canonicalize_strips_dot_slash ... ok [INFO] [stdout] test agent::tests::test_canonicalize_normal_path ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_directory_prefix ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_directory_without_trailing_slash ... ok [INFO] [stdout] test agent::tests::test_canonicalize_strips_trailing_slash ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_empty_constraints ... ok [INFO] [stdout] test agent::tests::test_canonicalize_rejects_absolute_windows ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_exact_match ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_multiple_constraints ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_normalizes_dot_slash ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_wildcard ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_both_full ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_restricted ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_untrusted ... ok [INFO] [stdout] test agent::tests::test_trust_level_default ... ok [INFO] [stdout] test agent::tests::test_registered_agent_json_roundtrip ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_untrusted_overrides_restricted ... ok [INFO] [stdout] test agent::tests::test_trust_level_serde_values ... ok [INFO] [stdout] test agent::tests::test_registered_agent_revoked_roundtrip ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_mixed_full_standard ... ok [INFO] [stdout] test agent::tests::test_trust_level_serialization_roundtrip ... ok [INFO] [stdout] test config::tests::test_auto_mode_config_defaults ... ok [INFO] [stdout] test config::tests::test_frameworks_config_only_set_fields_serialized ... ok [INFO] [stdout] test agent::tests::test_trust_level_from_str_loose ... ok [INFO] [stdout] test config::tests::test_global_config_default ... ok [INFO] [stdout] test config::tests::test_global_config_no_auto_section ... ok [INFO] [stdout] test config::tests::test_frameworks_config_with_extras ... ok [INFO] [stdout] test config::tests::test_auto_mode_config_roundtrip_toml ... ok [INFO] [stdout] test config::tests::test_global_config_output_format_accessor ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_glob_star ... ok [INFO] [stdout] test config::tests::test_global_config_partial_toml ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_normalizes_double_slash ... ok [INFO] [stdout] test config::tests::test_global_config_workflow_section ... ok [INFO] [stdout] test config::tests::test_global_config_empty_toml_parses ... ok [INFO] [stdout] test config::tests::test_global_config_roundtrip_toml ... ok [INFO] [stdout] test config::tests::test_project_config_git_section ... ok [INFO] [stdout] test config::tests::test_project_config_default ... ok [INFO] [stdout] test config::tests::test_project_config_output_format_accessor ... ok [INFO] [stdout] test config::tests::test_project_config_security_default_false ... ok [INFO] [stdout] test config::tests::test_resolve_commit_mode_falls_to_default ... ok [INFO] [stdout] test config::tests::test_resolve_commit_mode_project_over_global ... ok [INFO] [stdout] test config::tests::test_resolve_cli_wins ... ok [INFO] [stdout] test config::tests::test_resolve_commit_mode_cli_wins ... ok [INFO] [stdout] test config::tests::test_project_config_roundtrip_toml ... ok [INFO] [stdout] test config::tests::test_resolve_custom_default ... ok [INFO] [stdout] test config::tests::test_resolve_commit_mode_rejects_invalid ... ok [INFO] [stdout] test config::tests::test_resolve_commit_strategy_cli_wins ... ok [INFO] [stdout] test config::tests::test_resolve_commit_strategy_falls_to_default ... ok [INFO] [stdout] test config::tests::test_resolve_commit_strategy_rejects_invalid ... ok [INFO] [stdout] test config::tests::test_migration_creates_config_toml ... ok [INFO] [stdout] test config::tests::test_resolve_full_chain_cli_wins_everything ... ok [INFO] [stdout] test config::tests::test_resolve_global_over_default ... ok [INFO] [stdout] test config::tests::test_resolve_falls_to_default ... ok [INFO] [stdout] test config::tests::test_resolve_stale_timeout_falls_to_default ... ok [INFO] [stdout] test config::tests::test_project_config_load_corrupt_toml ... ok [INFO] [stdout] test config::tests::test_migration_no_format_leaves_output_none ... ok [INFO] [stdout] test config::tests::test_resolve_stale_timeout_project_over_global ... ok [INFO] [stdout] test config::tests::test_resolve_project_over_global ... ok [INFO] [stdout] test config::tests::test_resolve_stale_timeout_zero_from_project ... ok [INFO] [stdout] test config::tests::test_migration_maps_enforce_scope_to_security ... ok [INFO] [stdout] test config::tests::test_project_config_load_missing ... ok [INFO] [stdout] test config::tests::test_project_config_migrate_from_settings ... ok [INFO] [stdout] test config::tests::test_project_config_save_and_load ... ok [INFO] [stdout] test config::tests::test_migration_preserves_old_settings_json ... ok [INFO] [stdout] test config::tests::test_project_config_prefers_toml_over_settings_json ... ok [INFO] [stdout] test agent::tests::test_trust_adjustment_both_standard ... ok [INFO] [stdout] test config::tests::test_resolve_watch_config_defaults ... ok [INFO] [stdout] test config::tests::test_resolve_watch_config_project_over_global ... ok [INFO] [stdout] test config::tests::test_resolve_watch_config_global_over_default ... ok [INFO] [stdout] test config::tests::test_resolve_watch_config_rejects_invalid ... ok [INFO] [stdout] test config::tests::test_valid_commit_modes ... ok [INFO] [stdout] test config::tests::test_valid_commit_strategies ... ok [INFO] [stdout] test agent::tests::test_is_in_scope_rejects_traversal ... ok [INFO] [stdout] test config::tests::test_watch_config_omitted_from_toml_when_none ... ok [INFO] [stdout] test config::tests::test_watch_config_defaults ... ok [INFO] [stdout] test config::tests::test_watch_config_in_global_config_toml ... ok [INFO] [stdout] test config::tests::test_watch_config_validation_max_retries_zero ... ok [INFO] [stdout] test config::tests::test_workspace_root_none_falls_to_default ... ok [INFO] [stdout] test config::tests::test_watch_config_validation_absolute_log_path ... ok [INFO] [stdout] test config::tests::test_watch_config_validation_valid ... ok [INFO] [stdout] test config::tests::test_workflow_config_save_and_load ... ok [INFO] [stdout] test config::tests::test_workspace_root_custom ... ok [INFO] [stdout] test config::tests::test_workspace_root_default ... ok [INFO] [stdout] test context::tests::dep_status_from_complete_spec ... ok [INFO] [stdout] test context::tests::dep_status_from_pending_spec ... ok [INFO] [stdout] test context::tests::dep_status_not_found ... ok [INFO] [stdout] test context::tests::diff_summary_empty_diff ... ok [INFO] [stdout] test config::tests::test_workspace_settings_toml_roundtrip ... ok [INFO] [stdout] test context::tests::dep_status_from_blocked_spec ... ok [INFO] [stdout] test context::tests::diff_summary_maps_diff_output ... ok [INFO] [stdout] test config::tests::test_workspace_settings_omitted_from_toml_when_none ... ok [INFO] [stdout] test config::tests::test_watch_config_partial_fields_use_defaults ... ok [INFO] [stdout] test config::tests::test_workflow_config_partial_fields ... ok [INFO] [stdout] test context::tests::risk_adds_contested_files_above_five ... ok [INFO] [stdout] test config::tests::test_workspace_root_save_and_load ... ok [INFO] [stdout] test context::tests::risk_compounds_multiple_signals ... ok [INFO] [stdout] test config::tests::test_workflow_config_defaults ... ok [INFO] [stdout] test config::tests::test_watch_config_validation_interval_zero ... ok [INFO] [stdout] test context::tests::risk_high_with_five_agent_file_contention ... ok [INFO] [stdout] test context::tests::dep_status_from_in_progress_spec ... ok [INFO] [stdout] test context::tests::risk_high_with_four_plus_diverged_branches ... ok [INFO] [stdout] test config::tests::test_workflow_config_roundtrip_toml ... ok [INFO] [stdout] test config::tests::test_watch_config_toml_roundtrip ... ok [INFO] [stdout] test config::tests::test_workflow_config_stale_timeout_zero_disables ... ok [INFO] [stdout] test config::tests::test_watch_config_save_and_load ... ok [INFO] [stdout] test context::tests::risk_high_with_many_scope_violations ... ok [INFO] [stdout] test context::tests::risk_level_thresholds ... ok [INFO] [stdout] test context::tests::risk_medium_with_three_agent_file_contention ... ok [INFO] [stdout] test context::tests::risk_medium_with_three_diverged_branches ... ok [INFO] [stdout] test context::tests::risk_scores_scope_violations ... ok [INFO] [stdout] test context::tests::risk_low_when_no_signals ... ok [INFO] [stdout] test context::tests::risk_medium_with_one_diverged_branch ... ok [INFO] [stdout] test context::tests::risk_score_capped_at_100 ... ok [INFO] [stdout] test context::tests::seal_summary_captures_agent_and_summary ... ok [INFO] [stdout] test context::tests::seal_summary_counts_files_changed ... ok [INFO] [stdout] test context::tests::seal_summary_formats_complete_status ... ok [INFO] [stdout] test context::tests::seal_summary_formats_in_progress_status ... ok [INFO] [stdout] test context::tests::seal_summary_formats_blocked_status ... ok [INFO] [stdout] test context::tests::seal_summary_includes_changed_paths ... ok [INFO] [stdout] test context::tests::seal_summary_includes_spec_id_when_present ... ok [INFO] [stdout] test context::tests::seal_summary_omits_verification_when_default ... ok [INFO] [stdout] test context::tests::seal_summary_skips_empty_changed_paths_in_json ... ok [INFO] [stdout] test context::tests::seal_summary_truncates_id_to_12_chars ... ok [INFO] [stdout] test context::tests::verification_summary_preserves_all_fields ... ok [INFO] [stdout] test context::tests::verification_summary_returns_none_for_all_defaults ... ok [INFO] [stdout] test context::tests::verification_summary_returns_some_when_linted ... ok [INFO] [stdout] test context::tests::verification_summary_skips_none_fields_in_json ... ok [INFO] [stdout] test context::tests::verification_summary_returns_some_with_tests_passed ... ok [INFO] [stdout] test context::tests::working_state_summary_categorizes_changes ... ok [INFO] [stdout] test context::tests::working_state_summary_clean ... ok [INFO] [stdout] test context::tests::working_state_summary_skips_empty_lists_in_json ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_no_imports_or_definitions ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_parse_structure_empty_source ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_parse_structure_simple ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_parse_structure_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::generic::tests::test_semantic_equivalence_exact_only ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_comments_parsed ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_const_block ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_empty_source ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_extract_definitions ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_extract_imports ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_import_metadata_populated ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_method_receiver ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_multiline_definition_spans ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_parse_structure_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_parse_structure_definitions ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_parse_structure_grouped_import ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_parse_structure_imports ... ok [INFO] [stdout] test convergence::analyzers::go::tests::test_semantic_equivalence ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_comments_parsed ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_empty_source ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_export_default_class ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_extract_definitions ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_extract_imports ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_multiline_definition_spans ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_no_ts_specific_syntax ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_parse_structure_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_parse_structure_definitions ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_parse_structure_imports ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_semantic_equivalence ... ok [INFO] [stdout] test convergence::analyzers::javascript::tests::test_var_declaration ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_class_with_methods ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_comments_parsed_correctly ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_empty_source ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_extract_definitions_non_overlapping ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_import_metadata_populated ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_multiple_decorators ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_ordering_matters_for_python ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_parse_async_def ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_parse_class_with_decorator ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_parse_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_parse_imports ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_parse_simple_script ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_semantic_equivalence_real_difference ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_semantic_equivalence_whitespace_differences ... ok [INFO] [stdout] test convergence::analyzers::python::tests::test_star_import ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_async_fn ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_attributes_attached_to_definition ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_comments_parsed ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_const_and_static ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_empty_source ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_extract_definitions ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_extract_imports ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_import_metadata_populated ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_mod_declaration_is_import ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_mod_with_body_is_definition ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_multiline_definition_spans ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_parse_structure_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_parse_structure_definitions ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_parse_structure_imports ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_type_alias ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_cjs ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_go ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_javascript ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_jsx ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_mjs ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_pyi ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_python ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_rust ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_tsx ... ok [INFO] [stdout] test convergence::analyzers::rust_lang::tests::test_semantic_equivalence ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_typescript ... ok [INFO] [stdout] test convergence::analyzers::tests::test_analyzer_dispatch_unknown_falls_back_to_generic ... ok [INFO] [stdout] test convergence::analyzers::tests::test_ordering_matters_defaults ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_decorator_attached_to_class ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_empty_source ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_export_star_is_import ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_extract_definitions ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_extract_imports ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_import_metadata_populated ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_jsdoc_comment ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_multiline_definition_spans ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_name ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_parse_structure_covers_all_lines ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_parse_structure_definitions ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_parse_structure_imports ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_require_as_import ... ok [INFO] [stdout] test convergence::analyzers::typescript::tests::test_semantic_equivalence ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_both_inserted_mixed ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_definition_only_scope_returns_none ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_empty_imports_returns_none ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_mixed_region_splits_imports_from_body ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_non_mixed_returns_none ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_preserves_conflict_type ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_recomputes_body_scope ... ok [INFO] [stdout] test convergence::decompose::tests::test_decompose_whitespace_between_imports_stays_with_imports ... ok [INFO] [stdout] test convergence::decompose::tests::test_partition_all_imports ... ok [INFO] [stdout] test convergence::decompose::tests::test_partition_empty_input ... ok [INFO] [stdout] test convergence::decompose::tests::test_partition_no_imports ... ok [INFO] [stdout] test convergence::decompose::tests::test_partition_separates_imports_from_defs ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_deletion ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_empty_base ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_insertion ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_no_changes ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_replacement ... ok [INFO] [stdout] test convergence::diff3::tests::test_action_table_trailing_insert ... ok [INFO] [stdout] test convergence::diff3::tests::test_all_three_empty ... ok [INFO] [stdout] test convergence::diff3::tests::test_all_three_identical ... ok [INFO] [stdout] test convergence::diff3::tests::test_both_delete_same_line ... ok [INFO] [stdout] test convergence::diff3::tests::test_both_insert_different_before_same_line ... ok [INFO] [stdout] test convergence::diff3::tests::test_both_insert_same_content ... ok [INFO] [stdout] test convergence::diff3::tests::test_conflict_region_has_correct_base_start ... ok [INFO] [stdout] test convergence::diff3::tests::test_delete_vs_replace_is_conflict ... ok [INFO] [stdout] test convergence::diff3::tests::test_empty_base ... ok [INFO] [stdout] test convergence::diff3::tests::test_empty_left_yields_right ... ok [INFO] [stdout] test convergence::diff3::tests::test_empty_right_yields_left ... ok [INFO] [stdout] test convergence::diff3::tests::test_identical_left_and_right ... ok [INFO] [stdout] test convergence::diff3::tests::test_left_deletes_right_keeps ... ok [INFO] [stdout] test convergence::diff3::tests::test_left_inserts_right_unchanged ... ok [INFO] [stdout] test convergence::diff3::tests::test_left_unchanged_returns_right ... ok [INFO] [stdout] test convergence::diff3::tests::test_multiple_conflict_regions ... ok [INFO] [stdout] test convergence::diff3::tests::test_no_trailing_newline_preserved ... ok [INFO] [stdout] test convergence::diff3::tests::test_non_overlapping_changes ... ok [INFO] [stdout] test convergence::diff3::tests::test_rebuild_multiple_resolutions ... ok [INFO] [stdout] test convergence::diff3::tests::test_rebuild_with_single_resolution ... ok [INFO] [stdout] test convergence::diff3::tests::test_right_unchanged_returns_left ... ok [INFO] [stdout] test convergence::diff3::tests::test_same_region_different_changes ... ok [INFO] [stdout] test convergence::diff3::tests::test_single_line_conflict ... ok [INFO] [stdout] test convergence::diff3::tests::test_single_line_no_newline ... ok [INFO] [stdout] test convergence::diff3::tests::test_trailing_additions_conflict ... ok [INFO] [stdout] test convergence::diff3::tests::test_trailing_newline_preserved ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_additive_composition_both_add ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_confidence_scales_with_additions ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_deduplicates_shared_additions ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_empty_base_does_not_match ... ok [INFO] [stdout] test convergence::diff3::tests::test_large_non_overlapping ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_extension_recognized_as_additive ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_extension_with_new_definitions ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_extension_only_gets_bonus ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_is_preserved_different_module_fails ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_is_preserved_extension ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_is_preserved_removal_fails ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_import_removal_still_fails ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_merge_import_line_python ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_returns_none_when_base_missing_from_side ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_rust_import_removal_fails ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_rust_use_extension_additive ... ok [INFO] [stdout] test convergence::patterns::additive::tests::test_ts_import_extension_additive ... ok [INFO] [stdout] test convergence::patterns::definitions::tests::test_compose_non_overlapping_classes ... ok [INFO] [stdout] test convergence::patterns::definitions::tests::test_name_collision_returns_none ... ok [INFO] [stdout] test convergence::patterns::definitions::tests::test_confidence_scales_with_definition_count ... ok [INFO] [stdout] test convergence::patterns::definitions::tests::test_no_definitions_does_not_match ... ok [INFO] [stdout] test convergence::patterns::eof_append::tests::test_base_modified_returns_none ... ok [INFO] [stdout] test convergence::patterns::eof_append::tests::test_both_append ... ok [INFO] [stdout] test convergence::patterns::eof_append::tests::test_confidence_scales_with_appended_lines ... ok [INFO] [stdout] test convergence::patterns::eof_append::tests::test_empty_base_does_not_match ... ok [INFO] [stdout] test convergence::patterns::eof_append::tests::test_left_only_append ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_lang_fallback_go ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_lang_fallback_python ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_lang_fallback_rust ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_lang_fallback_ts ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_lang_from_metadata ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_name_conflicts_found ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_import_is_preserved_module_mismatch ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_import_is_preserved_name_removed ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_import_is_preserved_python_extension ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_import_is_preserved_rust ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_detect_name_conflicts_none ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_merge_same_module_python ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_merge_same_module_rust ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_merge_same_module_ts ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_go_fallback ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_go_with_metadata ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_python_fallback ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_python_with_metadata ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_rust_fallback ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_rust_with_metadata ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_ts_fallback ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_python_alias_extraction ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_go_grouped ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_parse_import_ts_with_metadata ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_python ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_rust ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_rust_pub ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_ts ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_ts_double_quotes ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_ts_type_import ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_conflicting_imports_lowers_confidence ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_deduplicates_identical_imports ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_does_not_match_mixed_content ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_go_import_dedup ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_rust_conflict_detection ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_rust_use_dedup ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_ts_named_import_dedup ... ok [INFO] [stdout] test convergence::patterns::imports::tests::test_union_disjoint_imports ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_confidence_scales_with_diff_size ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_equal_sets_not_superset ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_has_warning ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_left_superset ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_neither_superset ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_right_superset ... ok [INFO] [stdout] test convergence::patterns::superset::tests::test_superset_below_auto_resolve ... ok [INFO] [stdout] test convergence::patterns::tests::test_delete_vs_modify_always_skipped ... ok [INFO] [stdout] test convergence::patterns::tests::test_highest_confidence_wins ... ok [INFO] [stdout] test convergence::patterns::tests::test_import_accumulation_resolves ... ok [INFO] [stdout] test convergence::patterns::tests::test_registry_creation ... ok [INFO] [stdout] test convergence::patterns::definitions::tests::test_compose_functions_and_classes ... ok [INFO] [stdout] test convergence::phase1::tests::test_base_span_reflects_conflict_position ... ok [INFO] [stdout] test convergence::phase1::tests::test_both_modified_returns_conflicts ... ok [INFO] [stdout] test convergence::patterns::tests::test_non_overlapping_definitions_resolves ... ok [INFO] [stdout] test convergence::phase1::tests::test_clean_merge_returns_clean ... ok [INFO] [stdout] test convergence::phase1::tests::test_empty_base_both_insert ... ok [INFO] [stdout] test convergence::phase1::tests::test_generic_analyzer_used_for_unknown_extension ... ok [INFO] [stdout] test convergence::phase1::tests::test_multiple_conflict_regions ... ok [INFO] [stdout] test convergence::phase1::tests::test_one_side_changed_returns_clean ... ok [INFO] [stdout] test convergence::phase2::tests::test_all_empty_is_clean ... ok [INFO] [stdout] test convergence::phase1::tests::test_structural_units_populated_for_python ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_both_deleted ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_both_inserted ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_both_modified ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_clean_identical_changes ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_delete_vs_modify_left_deleted ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_delete_vs_modify_right_deleted ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_left_only ... ok [INFO] [stdout] test convergence::phase2::tests::test_classify_right_only ... ok [INFO] [stdout] test convergence::phase2::tests::test_intra_function_scope ... ok [INFO] [stdout] test convergence::phase2::tests::test_run_empty_diff ... ok [INFO] [stdout] test convergence::phase2::tests::test_run_produces_phase2_result ... ok [INFO] [stdout] test convergence::phase2::tests::test_semantic_equivalence_used ... ok [INFO] [stdout] test convergence::phase2::tests::test_structural_info_definition_scope ... ok [INFO] [stdout] test convergence::phase2::tests::test_structural_info_import_scope ... ok [INFO] [stdout] test convergence::phase2::tests::test_structural_info_mixed_scope ... ok [INFO] [stdout] test convergence::phase2::tests::test_structural_info_name_overlap ... ok [INFO] [stdout] test convergence::phase2::tests::test_structural_info_no_name_overlap ... ok [INFO] [stdout] test convergence::phase4::tests::test_delete_confirmation_both_reference ... ok [INFO] [stdout] test convergence::phase4::tests::test_delete_confirmation_deleter_spec_owns ... ok [INFO] [stdout] test convergence::phase4::tests::test_delete_confirmation_modifier_spec_owns ... ok [INFO] [stdout] test convergence::phase4::tests::test_delete_confirmation_neither_reference ... ok [INFO] [stdout] test convergence::phase4::tests::test_delete_confirmation_only_on_delete_vs_modify ... ok [INFO] [stdout] test convergence::phase4::tests::test_file_in_scope_directory_prefix ... ok [INFO] [stdout] test convergence::phase4::tests::test_file_in_scope_empty_scope ... ok [INFO] [stdout] test convergence::phase4::tests::test_file_in_scope_exact_match ... ok [INFO] [stdout] test convergence::phase4::tests::test_intent_compatibility_confirms_suggestion ... ok [INFO] [stdout] test convergence::phase4::tests::test_scope_authority_neither_in_scope ... ok [INFO] [stdout] test convergence::phase4::tests::test_intent_compatibility_conflicting_summaries ... ok [INFO] [stdout] test convergence::phase4::tests::test_intent_compatibility_no_suggestion ... ok [INFO] [stdout] test convergence::phase4::tests::test_scope_authority_right_in_scope ... ok [INFO] [stdout] test convergence::phase4::tests::test_intents_compatible ... ok [INFO] [stdout] test convergence::phase4::tests::test_intents_conflict_negation ... ok [INFO] [stdout] test convergence::phase4::tests::test_resolve_returns_none_when_no_rules_match ... ok [INFO] [stdout] test convergence::phase4::tests::test_spec_does_not_reference_unrelated_file ... ok [INFO] [stdout] test convergence::phase4::tests::test_resolve_tries_rules_in_order ... ok [INFO] [stdout] test convergence::phase4::tests::test_scope_authority_both_in_scope ... ok [INFO] [stdout] test convergence::phase4::tests::test_scope_authority_glob_matching ... ok [INFO] [stdout] test convergence::phase4::tests::test_spec_references_file_by_name ... ok [INFO] [stdout] test convergence::phase4::tests::test_spec_references_file_by_stem ... ok [INFO] [stdout] test convergence::phase4::tests::test_spec_references_file_in_seal_summary ... ok [INFO] [stdout] test convergence::phase4::tests::test_truncate_ascii ... ok [INFO] [stdout] test convergence::phase4::tests::test_truncate_multibyte_utf8 ... ok [INFO] [stdout] test convergence::diff3::tests::test_rebuild_preserves_clean_regions ... ok [INFO] [stdout] test convergence::patterns::import_utils::tests::test_reconstruct_go_single ... ok [INFO] [stdout] test convergence::phase5::tests::test_build_prompt_includes_all_sections ... ok [INFO] [stdout] test convergence::phase5::tests::test_build_prompt_includes_suggestion ... ok [INFO] [stdout] test convergence::phase5::tests::test_parse_empty_returns_none ... ok [INFO] [stdout] test convergence::phase5::tests::test_parse_incompatible_returns_none ... ok [INFO] [stdout] test convergence::phase5::tests::test_parse_strips_markdown_fences ... ok [INFO] [stdout] test convergence::phase5::tests::test_parse_valid_response ... ok [INFO] [stdout] test convergence::phase5::tests::test_sanity_check_detects_missing_names ... ok [INFO] [stdout] test convergence::phase5::tests::test_sanity_check_penalizes_content_loss ... ok [INFO] [stdout] test convergence::phase5::tests::test_sanity_check_rewards_complete_merge ... ok [INFO] [stdout] test convergence::phase5::tests::test_structured_resolver_calls_backend ... ok [INFO] [stdout] test convergence::phase5::tests::test_structured_resolver_rejects_incompatible ... ok [INFO] [stdout] test convergence::phase5::tests::test_structured_resolver_returns_none_on_backend_failure ... ok [INFO] [stdout] test convergence::phase5::tests::test_structured_resolver_skips_clean_conflicts ... ok [INFO] [stdout] test convergence::phase6::tests::test_balanced_delimiters_pass ... ok [INFO] [stdout] test convergence::phase6::tests::test_conflict_markers_detected ... ok [INFO] [stdout] test convergence::phase6::tests::test_clean_python_passes_reparse ... ok [INFO] [stdout] test convergence::phase4::tests::test_scope_authority_left_in_scope ... ok [INFO] [stdout] test convergence::phase6::tests::test_conflict_markers_in_middle_of_file ... ok [INFO] [stdout] test convergence::phase6::tests::test_delimiters_in_strings_ignored ... ok [INFO] [stdout] test convergence::phase6::tests::test_empty_txt_file_passes ... ok [INFO] [stdout] test convergence::phase6::tests::test_duplicate_class_fails ... ok [INFO] [stdout] test convergence::phase6::tests::test_duplicate_function_fails ... ok [INFO] [stdout] test convergence::phase6::tests::test_no_conflict_markers_passes ... ok [INFO] [stdout] test convergence::phase6::tests::test_unbalanced_delimiters_skip_generic ... ok [INFO] [stdout] test convergence::phase6::tests::test_unique_imports_pass ... ok [INFO] [stdout] test convergence::phase6::tests::test_full_verification_clean_python ... ok [INFO] [stdout] test convergence::phase6::tests::test_different_named_definitions_pass ... ok [INFO] [stdout] test convergence::phase6::tests::test_unbalanced_brace_fails ... ok [INFO] [stdout] test convergence::phase6::tests::test_whitespace_only_py_file_fails ... ok [INFO] [stdout] test convergence::phase6::tests::test_empty_py_file_fails ... ok [INFO] [stdout] test convergence::phase6::tests::test_warnings_accumulate_across_checks ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_full_full_python_imports_auto_resolve ... ok [INFO] [stdout] test convergence::phase6::tests::test_generic_file_skips_unknown_check ... ok [INFO] [stdout] test convergence::phase6::tests::test_multiple_issues_first_failure_wins ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_full_full_rust_use_statements_auto_resolve ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_trust_adjustment_is_symmetric ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_restricted_typescript_imports_escalate ... ok [INFO] [stdout] test convergence::phase6::tests::test_low_coverage_warns ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_mixed_standard_full_same_as_full_standard ... ok [INFO] [stdout] test convergence::phase6::tests::test_duplicate_imports_warns ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_standard_standard_still_auto_resolves_high_confidence ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_standard_standard_confidence_capped_in_resolutions ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_restricted_restricted_escalates ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_mixed_full_standard_demotes_to_escalation ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_no_trust_context_resolves_normally ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_full_full_typescript_imports_resolve ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_untrusted_both_sides_always_escalates ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_untrusted_full_always_escalates ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_untrusted_standard_always_escalates ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_rust_function_conflict ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_identical_content_no_conflict ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_escalation ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_with_verification_disabled ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_config_determinism ... ok [INFO] [stdout] test convergence::pipeline::tests::test_decomposed_method_is_reported ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase4_enabled_but_no_spec_context_is_noop ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase5_skipped_when_disabled ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase4_enabled_with_spec_context_no_side_effects_on_clean_merge ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase5_enabled_with_noop_backend_is_inert ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase4_skipped_when_disabled ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase6_disabled_skips_verification ... ok [INFO] [stdout] test convergence::pipeline::tests::test_phase6_enabled_runs_verification ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_auto_resolved_region_outcome ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_merged_content_byte_identical ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_disjoint_import_merge ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_both_modified_no_pattern_escalates ... ok [INFO] [stdout] test convergence::pipeline::tests::test_both_phase4_and_phase5_disabled_escalates ... ok [INFO] [stdout] test convergence::pipeline::tests::test_decomposed_flask_app_resolves ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_typescript_import_merge ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_clean_merge_no_conflicts ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_delete_vs_modify_always_escalates ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_go_import_merge ... ok [INFO] [stdout] test convergence::pipeline::tests::test_all_phases_disabled_still_runs_phases_1_through_3 ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_config_defaults ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_disjoint_imports_auto_resolved ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_identical_changes_clean ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_cap_applied_after_pattern_evaluation ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_full_full_no_cap ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_non_overlapping_definitions_auto_resolved ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_region_outcome_uses_types_rs_format ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_timings_populated ... ok [INFO] [stdout] test convergence::pipeline::reproducibility_tests::test_reproducible_one_side_only_change ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_uses_phase1_module ... ok [INFO] [stdout] test convergence::pipeline::tests::test_pipeline_verification_runs_on_resolved ... ok [INFO] [stdout] test convergence::pipeline::mixed_trust_convergence_tests::test_restricted_full_escalates ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_mixed_caps_at_075 ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_none_context_is_passthrough ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_standard_standard_caps_at_090 ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_untrusted_always_drops_to_nomatch ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_untrusted_escalates_normally_resolvable ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_hardened_verifier_failure_skips_traceability ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_failure_path_escalation_structure ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_both_sides_add ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_deduplicates_shared_additions ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_passes_on_auto_resolved_merge ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_failure_causes_escalation ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_report_in_output_with_verification ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_none_on_clean_phase1_merge ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_deterministic_ordering ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_none_when_no_merged_content ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_none_when_phase6_disabled ... ok [INFO] [stdout] test convergence::pipeline::traceability_pipeline_tests::test_traceability_report_present_on_auto_resolved_imports ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_no_additions_returns_none ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_one_side_deletes_base ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_via_resolve_conflict_regions ... ok [INFO] [stdout] test convergence::tests::test_classify_both_modified ... ok [INFO] [stdout] test convergence::tests::test_both_inserted_superset_avoids_duplication ... ok [INFO] [stdout] test convergence::tests::test_classify_delete_vs_modify_left ... ok [INFO] [stdout] test convergence::tests::test_classify_delete_vs_modify_right ... ok [INFO] [stdout] test convergence::tests::test_classify_trailing_replacement_is_both_modified ... ok [INFO] [stdout] test convergence::tests::test_both_agents_append_to_file_uses_concatenation ... ok [INFO] [stdout] test convergence::tests::test_consolidate_rust_derives_unit ... ok [INFO] [stdout] test convergence::tests::test_both_inserted_non_superset_still_concatenates ... ok [INFO] [stdout] test convergence::tests::test_classify_both_inserted ... ok [INFO] [stdout] test convergence::pipeline::tests::test_trust_restricted_caps_at_060 ... ok [INFO] [stdout] test convergence::tests::test_additive_composition_via_resolve_direct ... ok [INFO] [stdout] test convergence::tests::test_contains_word_empty_needle ... ok [INFO] [stdout] test convergence::tests::test_contains_word_rejects_suffix_substring ... ok [INFO] [stdout] test convergence::tests::test_contains_word_respects_underscore_boundary ... ok [INFO] [stdout] test convergence::tests::test_dedup_imports_non_python ... ok [INFO] [stdout] test convergence::tests::test_contains_word_start_and_end_of_string ... ok [INFO] [stdout] test convergence::tests::test_dedup_imports_star_duplicate ... ok [INFO] [stdout] test convergence::tests::test_default_strategy_is_escalate ... ok [INFO] [stdout] test convergence::tests::test_detect_import_language ... ok [INFO] [stdout] test convergence::tests::test_contains_word_rejects_mid_word_substring ... ok [INFO] [stdout] test convergence::tests::test_css_bracket_preservation ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_definitions_scales ... ok [INFO] [stdout] test convergence::tests::test_contains_word_matches_with_punctuation_boundary ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_eof_append_scales ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_bounds ... ok [INFO] [stdout] test convergence::tests::test_contains_word_exact_match ... ok [INFO] [stdout] test convergence::tests::test_contains_word_rejects_prefix_substring ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_superset_never_auto_resolves ... ok [INFO] [stdout] test convergence::tests::test_extract_go_imports ... ok [INFO] [stdout] test convergence::tests::test_fix_python_formatting_two_blank_lines_before_class ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_import_accumulation_base ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_default ... ok [INFO] [stdout] test convergence::tests::test_fix_python_formatting_normalizes_excess_blanks ... ok [INFO] [stdout] test convergence::tests::test_dynamic_confidence_import_accumulation_penalized ... ok [INFO] [stdout] test convergence::tests::test_go_import_block_merge ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_named ... ok [INFO] [stdout] test convergence::tests::test_fix_python_formatting_indented_def_untouched ... ok [INFO] [stdout] test convergence::tests::test_go_import_grouped_sorting ... ok [INFO] [stdout] test convergence::tests::test_fix_python_formatting_two_blank_lines_before_def ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_multiline ... ok [INFO] [stdout] test convergence::tests::test_dedup_imports_exact_duplicate ... ok [INFO] [stdout] test convergence::tests::test_dedup_imports_python_from_consolidation ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_mixed_default_and_named ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_namespace ... ok [INFO] [stdout] test convergence::tests::test_is_go_stdlib ... ok [INFO] [stdout] test convergence::tests::test_join_multiline_imports ... ok [INFO] [stdout] test convergence::tests::test_merge_js_imports_consolidation ... ok [INFO] [stdout] test convergence::tests::test_merge_order_disjoint_before_overlapping ... ok [INFO] [stdout] test convergence::tests::test_merge_order_empty_candidates ... ok [INFO] [stdout] test convergence::tests::test_merge_order_disjoint_specs_tiebreak_by_seal_count ... ok [INFO] [stdout] test convergence::tests::test_merge_order_cascading_accumulation ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_require ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_side_effect ... ok [INFO] [stdout] test convergence::tests::test_import_accumulation_js_type_imports ... ok [INFO] [stdout] test convergence::tests::test_import_dedup_same_source ... ok [INFO] [stdout] test convergence::tests::test_merge_order_cascading_changes_pick ... ok [INFO] [stdout] test convergence::tests::test_merge_order_tiebreak_deterministic_by_spec_id ... ok [INFO] [stdout] test convergence::tests::test_import_region_multiline_detection ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_default_plus_named ... ok [INFO] [stdout] test convergence::tests::test_merge_order_empty_modified_files ... ok [INFO] [stdout] test convergence::tests::test_n_agent_four_imports_chained ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_namespace ... ok [INFO] [stdout] test convergence::tests::test_merge_order_least_overlap_first ... ok [INFO] [stdout] test convergence::tests::test_merge_order_seal_count_tiebreak_over_spec_id ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_default ... ok [INFO] [stdout] test convergence::tests::test_merge_order_single_candidate ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_named ... ok [INFO] [stdout] test convergence::tests::test_n_agent_three_way_chained ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_side_effect ... ok [INFO] [stdout] test convergence::tests::test_prune_drops_entire_unused_from_import ... ok [INFO] [stdout] test convergence::tests::test_post_merge_cleanup_full_pipeline ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_type ... ok [INFO] [stdout] test convergence::tests::test_parse_python_import_bare ... ok [INFO] [stdout] test convergence::tests::test_parse_js_import_reexport ... ok [INFO] [stdout] test convergence::tests::test_go_import_dedup ... ok [INFO] [stdout] test convergence::tests::test_parse_python_import_from ... ok [INFO] [stdout] test convergence::tests::test_post_merge_cleanup_no_imports_passthrough ... ok [INFO] [stdout] test convergence::tests::test_go_single_import_merge ... ok [INFO] [stdout] test convergence::tests::test_parse_python_import_parenthesized ... ok [INFO] [stdout] test convergence::tests::test_prune_unused_imports ... ok [INFO] [stdout] test convergence::tests::test_parse_python_import_star ... ok [INFO] [stdout] test convergence::tests::test_prune_unused_imports_removes_unreferenced ... ok [INFO] [stdout] test convergence::tests::test_prune_unused_imports_word_boundary ... ok [INFO] [stdout] test convergence::tests::test_prune_unused_keeps_bare_imports ... ok [INFO] [stdout] test convergence::tests::test_prune_unused_keeps_star_imports ... ok [INFO] [stdout] test convergence::tests::test_python_bare_import_preserved ... ok [INFO] [stdout] test convergence::tests::test_python_future_import_first ... ok [INFO] [stdout] test convergence::tests::test_python_import_consolidation_same_module ... ok [INFO] [stdout] test convergence::tests::test_python_import_dedup_identical ... ok [INFO] [stdout] test convergence::tests::test_python_import_consolidation_multiple_names ... ok [INFO] [stdout] test convergence::tests::test_python_import_ordering_blank_lines_between_groups ... ok [INFO] [stdout] test convergence::tests::test_python_import_group_classification ... ok [INFO] [stdout] test convergence::tests::test_resolve_superset_ordered ... ok [INFO] [stdout] test convergence::tests::test_resolve_delete_vs_modify_escalates ... ok [INFO] [stdout] test convergence::tests::test_python_star_import_preserved ... ok [INFO] [stdout] test convergence::tests::test_rust_derive_with_other_attributes ... ok [INFO] [stdout] test convergence::tests::test_resolve_import_accumulation_python ... ok [INFO] [stdout] test convergence::tests::test_resolve_import_accumulation_rust ... ok [INFO] [stdout] test convergence::tests::test_resolve_import_accumulation_js ... ok [INFO] [stdout] test convergence::tests::test_python_import_ordering_pep8 ... ok [INFO] [stdout] test convergence::tests::test_python_import_smart_merge_integration ... ok [INFO] [stdout] test convergence::tests::test_resolve_both_inserted_commutativity ... ok [INFO] [stdout] test convergence::tests::test_resolve_both_inserted_concatenates ... ok [INFO] [stdout] test convergence::tests::test_smart_merge_fully_resolves ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_add_lines ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_both_identical_from_empty ... ok [INFO] [stdout] test convergence::tests::test_smart_merge_confidence_scoring ... ok [INFO] [stdout] test convergence::tests::test_resolve_decorator_preservation ... ok [INFO] [stdout] test convergence::tests::test_smart_merge_tr13_regression ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_delete_vs_modify ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_identical_change ... ok [INFO] [stdout] test convergence::tests::test_smart_merge_partial_resolution ... ok [INFO] [stdout] test convergence::tests::test_rust_derive_accumulation ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_no_overlap ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_only_left_changed ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_only_right_changed ... ok [INFO] [stdout] test convergence::tests::test_tr21_definition_composition ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_empty_base ... ok [INFO] [stdout] test convergence::tests::test_tr21_superset_containment ... ok [INFO] [stdout] test convergence::tests::test_tr21_rust_use_merge ... ok [INFO] [stdout] test convergence::tests::test_tr21_stress_many_imports ... ok [INFO] [stdout] test convergence::tests::test_tr21_go_import_merge ... ok [INFO] [stdout] test convergence::tests::test_tr21_typescript_import_merge ... ok [INFO] [stdout] test convergence::tests::test_tr21_mixed_imports_and_definitions ... ok [INFO] [stdout] test convergence::tests::test_tr21_python_from_import_extension ... ok [INFO] [stdout] test convergence::tests::test_tr21_python_import_merge ... ok [INFO] [stdout] test convergence::traceability::tests::test_block_comments_not_trivial_for_python ... ok [INFO] [stdout] test convergence::traceability::tests::test_block_comments_not_trivial_for_unknown ... ok [INFO] [stdout] test convergence::tests::test_rust_multiline_use_import_region ... ok [INFO] [stdout] test convergence::tests::test_tr21_eof_append ... ok [INFO] [stdout] test convergence::traceability::tests::test_levenshtein_empty ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_conflict ... ok [INFO] [stdout] test convergence::tests::test_three_way_merge_multi_region_conflict ... ok [INFO] [stdout] test convergence::traceability::tests::test_both_tier1_and_tier2_failures ... ok [INFO] [stdout] test convergence::traceability::tests::test_clean_merge_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_composed_function_from_both_sides ... ok [INFO] [stdout] test convergence::traceability::tests::test_generic_file_type_clean_merge_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_levenshtein_classic_case ... ok [INFO] [stdout] test convergence::traceability::tests::test_levenshtein_identical ... ok [INFO] [stdout] test convergence::traceability::tests::test_not_trivial_go_logic ... ok [INFO] [stdout] test convergence::traceability::tests::test_empty_merged_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_merged_imports_from_both_sides ... ok [INFO] [stdout] test convergence::traceability::tests::test_non_ascii_traceable_content_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_generic_file_type_tier2_still_works ... ok [INFO] [stdout] test convergence::traceability::tests::test_import_reordering_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_normalize_line_tabs_and_mixed ... ok [INFO] [stdout] test convergence::traceability::tests::test_non_ascii_content_does_not_panic ... ok [INFO] [stdout] test convergence::traceability::tests::test_not_trivial_python_logic ... ok [INFO] [stdout] test convergence::traceability::tests::test_not_trivial_real_code ... ok [INFO] [stdout] test convergence::traceability::tests::test_not_trivial_rust_logic ... ok [INFO] [stdout] test convergence::traceability::tests::test_novel_line_tier2_fail ... ok [INFO] [stdout] test convergence::traceability::tests::test_novel_function_tier1_fail ... ok [INFO] [stdout] test convergence::traceability::tests::test_not_trivial_typescript_logic ... ok [INFO] [stdout] test convergence::traceability::tests::test_reordered_definitions_pass ... ok [INFO] [stdout] test convergence::traceability::tests::test_novel_unit_serialization_roundtrip ... ok [INFO] [stdout] test convergence::traceability::tests::test_novel_class_tier1_fail ... ok [INFO] [stdout] test convergence::traceability::tests::test_similarity_completely_different ... ok [INFO] [stdout] test convergence::traceability::tests::test_report_full_json_roundtrip ... ok [INFO] [stdout] test convergence::traceability::tests::test_similarity_empty ... ok [INFO] [stdout] test convergence::traceability::tests::test_normalize_line_collapses_internal_whitespace ... ok [INFO] [stdout] test convergence::traceability::tests::test_normalize_line_empty ... ok [INFO] [stdout] test convergence::traceability::tests::test_similar_line_above_threshold_passes ... ok [INFO] [stdout] test convergence::traceability::tests::test_similarity_minor_edit_above_threshold ... ok [INFO] [stdout] test convergence::traceability::tests::test_similarity_exact_match ... ok [INFO] [stdout] test convergence::traceability::tests::test_levenshtein_single_substitution ... ok [INFO] [stdout] test convergence::traceability::tests::test_normalize_line_strips_whitespace ... ok [INFO] [stdout] test convergence::traceability::tests::test_summary_is_pass_message_on_success ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_braces ... ok [INFO] [stdout] test convergence::traceability::tests::test_similarity_normalized_match ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_ellipsis ... ok [INFO] [stdout] test convergence::traceability::tests::test_traceability_verdict_serialization ... ok [INFO] [stdout] test convergence::traceability::tests::test_traceability_report_serialization_roundtrip ... ok [INFO] [stdout] test convergence::traceability::tests::test_threshold_zero_strict ... ok [INFO] [stdout] test convergence::traceability::tests::test_summary_is_actionable_on_fail ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_block_comments_js_ts ... ok [INFO] [stdout] test convergence::traceability::tests::test_threshold_one_lenient ... ok [INFO] [stdout] test convergence::traceability::tests::test_summary_truncation_more_than_5_untraced ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_block_comments_go ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_block_comments_rust ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_else_brace_patterns ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_rust_comments ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_rust_keywords ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_typescript_comments ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_single_char ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_blank_lines ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_go_comments ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_lines_excluded ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_go_keywords ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_python_comments ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_python_keywords ... ok [INFO] [stdout] test convergence::types::tests::test_convergence_seal_record_config_hash_deterministic ... ok [INFO] [stdout] test convergence::types::tests::test_convergence_seal_record_construction ... ok [INFO] [stdout] test convergence::types::tests::test_convergence_seal_record_has_all_sprint_doc_fields ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_keywords ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_generic_fallback_no_comments ... ok [INFO] [stdout] test convergence::types::tests::test_definition_names_extraction ... ok [INFO] [stdout] test convergence::types::tests::test_confidence_thresholds_defaults ... ok [INFO] [stdout] test convergence::types::tests::test_mixed_region_is_not_import_only ... ok [INFO] [stdout] test convergence::traceability::tests::test_trivial_typescript_keywords ... ok [INFO] [stdout] test convergence::types::tests::test_convergence_seal_record_serialization_roundtrip ... ok [INFO] [stdout] test convergence::types::tests::test_region_resolution_status_variants ... ok [INFO] [stdout] test convergence::types::tests::test_resolution_proposal_serialization ... ok [INFO] [stdout] test convergence::types::tests::test_structural_conflict_region_base_is_empty ... ok [INFO] [stdout] test convergence::types::tests::test_structural_unit_new ... ok [INFO] [stdout] test convergence::types::tests::test_escalation_record_construction ... ok [INFO] [stdout] test convergence::traceability::tests::test_whitespace_difference_passes ... ok [INFO] [stdout] test convergence::types::tests::test_import_only_region ... ok [INFO] [stdout] test convergence::types::tests::test_phase1_result_serialization ... ok [INFO] [stdout] test convergence::types::tests::test_pipeline_file_result_construction ... ok [INFO] [stdout] test convergence::traceability::tests::test_untraced_line_serialization_roundtrip ... ok [INFO] [stdout] test convergence::types::tests::test_conflict_type_requires_review ... ok [INFO] [stdout] test convergence::types::tests::test_convergence_seal_record_traceability_passed_false ... ok [INFO] [stdout] test crypto::tests::test_canonical_id_does_not_affect_output ... ok [INFO] [stdout] test crypto::tests::test_canonical_bytes_excludes_derived_fields ... ok [INFO] [stdout] test crypto::tests::test_canonical_field_order_is_deterministic ... ok [INFO] [stdout] test crypto::tests::test_canonical_empty_summary ... ok [INFO] [stdout] test crypto::tests::test_canonical_every_content_field_matters ... ok [INFO] [stdout] test crypto::tests::test_canonical_golden_value_regression ... ok [INFO] [stdout] test crypto::tests::test_canonical_null_bytes_in_path ... ok [INFO] [stdout] test crypto::tests::test_canonical_no_parent ... ok [INFO] [stdout] test crypto::tests::test_canonical_no_spec_id ... ok [INFO] [stdout] test crypto::tests::test_canonical_bytes_deterministic ... ok [INFO] [stdout] test crypto::tests::test_canonical_bytes_includes_parent_seal_hash ... ok [INFO] [stdout] test crypto::tests::test_canonical_output_is_valid_json ... ok [INFO] [stdout] test crypto::tests::test_canonical_special_chars_in_summary ... ok [INFO] [stdout] test crypto::tests::test_canonical_derived_fields_do_not_affect_output ... ok [INFO] [stdout] test crypto::tests::test_canonical_empty_changes ... ok [INFO] [stdout] test crypto::tests::test_canonical_roundtrip_hash_stability ... ok [INFO] [stdout] test crypto::tests::test_canonical_unicode_rtl ... ok [INFO] [stdout] test crypto::tests::test_chain_hash_changes_with_content ... ok [INFO] [stdout] test crypto::tests::test_canonical_unicode_cjk ... ok [INFO] [stdout] test crypto::tests::test_canonical_many_warnings ... ok [INFO] [stdout] test crypto::tests::test_canonical_verification_edge_cases ... ok [INFO] [stdout] test crypto::tests::test_chain_hash_changes_with_parent ... ok [INFO] [stdout] test crypto::tests::test_canonical_unicode_combining_chars ... ok [INFO] [stdout] test crypto::tests::test_canonical_unicode_emoji ... ok [INFO] [stdout] test crypto::tests::test_chain_hash_first_seal ... ok [INFO] [stdout] test crypto::tests::test_chain_hash_length ... ok [INFO] [stdout] test crypto::tests::test_content_hash_is_blake3 ... ok [INFO] [stdout] test crypto::tests::test_generate_keypair ... ok [INFO] [stdout] test crypto::tests::test_signing_key_hex_roundtrip ... ok [INFO] [stdout] test crypto::tests::test_tampered_seal_breaks_chain ... ok [INFO] [stdout] test crypto::tests::test_chain_hash_with_parent ... ok [INFO] [stdout] test crypto::tests::test_verify_rejects_malformed_signature ... ok [INFO] [stdout] test crypto::tests::test_canonical_many_changes ... ok [INFO] [stdout] test crypto::tests::test_content_hash_changes_on_different_content ... ok [INFO] [stdout] test crypto::tests::test_invalid_key_hex ... ok [INFO] [stdout] test crypto::tests::test_content_hash_deterministic ... ok [INFO] [stdout] test diff::tests::test_empty_to_content ... ok [INFO] [stdout] test diff::tests::test_identical_content ... ok [INFO] [stdout] test crypto::tests::test_verify_rejects_truncated_signature ... ok [INFO] [stdout] test diff::tests::test_binary_detection ... ok [INFO] [stdout] test diff::tests::test_content_to_empty ... ok [INFO] [stdout] test diff::tests::test_modification ... ok [INFO] [stdout] test crypto::tests::test_verifying_key_hex_roundtrip ... ok [INFO] [stdout] test diff::tests::test_single_add ... ok [INFO] [stdout] test diff::tests::test_single_remove ... ok [INFO] [stdout] test env_scan::tests::test_detect_user_name_returns_something ... ok [INFO] [stdout] test env_scan::tests::test_extract_toml_string_empty_value ... ok [INFO] [stdout] test env_scan::tests::test_extract_toml_string_value ... ok [INFO] [stdout] test env_scan::tests::test_extract_toml_string_with_spaces_around_equals ... ok [INFO] [stdout] test env_scan::tests::test_global_config_path_resolves ... ok [INFO] [stdout] test env_scan::tests::test_project_name_source_display ... ok [INFO] [stdout] test env_scan::tests::test_scan_all_framework_files_present ... ok [INFO] [stdout] test env_scan::tests::test_scan_both_legacy_and_toml_present ... ok [INFO] [stdout] test env_scan::tests::test_git_display_no_git ... ok [INFO] [stdout] test crypto::tests::test_verify_rejects_wrong_key ... ok [INFO] [stdout] test env_scan::tests::test_scan_cargo_toml_without_package_section ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_agents_md ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_claude_md ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_claude_dir ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_existing_writ ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_legacy_settings ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_codex_dir ... ok [INFO] [stdout] test diff::tests::test_linear_diff_identical_large_file ... ok [INFO] [stdout] test env_scan::tests::test_scan_empty_directory ... ok [INFO] [stdout] test env_scan::tests::test_scan_detects_toml_config ... ok [INFO] [stdout] test env_scan::tests::test_scan_frameworks_vec_populated ... ok [INFO] [stdout] test env_scan::tests::test_scan_no_frameworks_detected_empty ... ok [INFO] [stdout] test env_scan::tests::test_scan_package_json_missing_name ... ok [INFO] [stdout] test env_scan::tests::test_scan_malformed_package_json ... ok [INFO] [stdout] test crypto::tests::test_signature_hex_roundtrip ... ok [INFO] [stdout] test env_scan::tests::test_scan_path_is_set ... ok [INFO] [stdout] test diff::tests::test_large_file_uses_linear_fallback ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_from_cargo_toml ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_from_pyproject_toml ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_from_directory ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_priority_package_json_over_pyproject ... ok [INFO] [stdout] test env_scan::tests::test_user_name_source_serializes ... ok [INFO] [stdout] test env_scan::tests::test_scan_serializes_to_json ... ok [INFO] [stdout] test crypto::tests::test_sign_and_verify ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_from_package_json ... ok [INFO] [stdout] test env_scan::tests::test_scan_project_name_priority_cargo_over_package_json ... ok [INFO] [stdout] test env_scan::tests::test_scan_writ_initialized_but_no_legacy_no_toml ... ok [INFO] [stdout] test format::tests::benchmark_full_context_token_savings ... ok [INFO] [stdout] test diff::tests::test_linear_diff_complete_replacement ... ok [INFO] [stdout] test crypto::tests::test_canonical_stress_repeated_serialization ... ok [INFO] [stdout] test crypto::tests::test_three_seal_chain_integrity ... ok [INFO] [stdout] test format::tests::test_all_format_names_are_valid ... ok [INFO] [stdout] test format::tests::benchmark_seal_log_token_savings ... ok [INFO] [stdout] test crypto::tests::test_verify_rejects_tampered_content ... ok [INFO] [stdout] test format::tests::benchmark_spec_list_token_savings ... ok [INFO] [stdout] test format::tests::test_format_names_constant ... ok [INFO] [stdout] test format::tests::test_formatter_for_case_sensitive ... ok [INFO] [stdout] test format::tests::test_formatter_for_empty_string ... ok [INFO] [stdout] test format::tests::test_formatter_for_known ... ok [INFO] [stdout] test format::tests::test_formatter_for_project_json_ignores_name ... ok [INFO] [stdout] test format::tests::test_all_three_formatters_produce_output ... ok [INFO] [stdout] test format::tests::test_formatter_for_project_without_name ... ok [INFO] [stdout] test format::tests::test_formatter_for_project_passes_name_to_toon ... ok [INFO] [stdout] test format::tests::test_formatter_names_match_factory_key ... ok [INFO] [stdout] test format::tests::test_is_valid_format ... ok [INFO] [stdout] test format::tests::test_is_valid_format_rejects_old_names ... ok [INFO] [stdout] test format::tests::test_json_and_compact_identical_data ... ok [INFO] [stdout] test format::tests::test_json_compact_format_seal_log_empty ... ok [INFO] [stdout] test format::tests::test_json_compact_formatter_name ... ok [INFO] [stdout] test format::tests::test_json_compact_no_indentation ... ok [INFO] [stdout] test format::tests::test_all_format_names_have_formatters ... ok [INFO] [stdout] test format::tests::test_formatter_for_toon ... ok [INFO] [stdout] test format::tests::test_formatter_for_unknown ... ok [INFO] [stdout] test format::tests::test_json_format_spec_list_empty ... ok [INFO] [stdout] test format::tests::test_json_formatter_name ... ok [INFO] [stdout] test format::tests::test_json_format_seal_log_empty ... ok [INFO] [stdout] test format::tests::test_toon_contains_all_spec_ids ... ok [INFO] [stdout] test format::tests::test_json_pretty_has_indentation ... ok [INFO] [stdout] test format::tests::test_toon_empty_array_produces_header ... ok [INFO] [stdout] test format::tests::test_toon_default_impl ... ok [INFO] [stdout] test format::tests::test_toon_empty_seal_log_has_header ... ok [INFO] [stdout] test format::tests::test_toon_default_project_unknown ... ok [INFO] [stdout] test format::tests::test_toon_format_spec_list_empty ... ok [INFO] [stdout] test format::tests::test_toon_formatter_name ... ok [INFO] [stdout] test format::tests::test_toon_formatter_with_project ... ok [INFO] [stdout] test format::tests::test_toon_header_comment ... ok [INFO] [stdout] test format::tests::test_toon_header_contains_timestamp ... ok [INFO] [stdout] test format::tests::test_toon_named_project_in_header ... ok [INFO] [stdout] test format::tests::test_toon_encodes_specs ... ok [INFO] [stdout] test crypto::tests::test_canonical_max_length_summary ... ok [INFO] [stdout] test format::tests::test_toon_output_is_smaller_than_json ... ok [INFO] [stdout] test format::tests::test_toon_format_seal_log_empty ... ok [INFO] [stdout] test format::tests::test_toon_single_spec_uses_header_format ... ok [INFO] [stdout] test format::tests::test_toon_spec_with_comma_in_description ... ok [INFO] [stdout] test format::tests::test_toon_spec_with_unicode ... ok [INFO] [stdout] test format::tests::test_toon_spec_with_empty_description ... ok [INFO] [stdout] test format::tests::test_toon_50_specs_still_smaller_than_json ... ok [INFO] [stdout] test gc::tests::test_audit_log_limit ... ok [INFO] [stdout] test gc::tests::test_config_json_roundtrip ... ok [INFO] [stdout] test gc::tests::test_clean_events_no_file_ok ... ok [INFO] [stdout] test gc::tests::test_clean_events_keeps_recent ... ok [INFO] [stdout] test gc::tests::test_clean_events_preserves_critical ... ok [INFO] [stdout] test gc::tests::test_config_load_missing_file_returns_default ... ok [INFO] [stdout] test gc::tests::test_executor_blocks_active_spec_cleanup ... ok [INFO] [stdout] test gc::tests::test_executor_blocks_critical_event_cleanup ... ok [INFO] [stdout] test gc::tests::test_config_save_and_load ... ok [INFO] [stdout] test gc::tests::test_default_config_has_sensible_values ... ok [INFO] [stdout] test gc::tests::test_executor_counts_info_events_cleaned ... ok [INFO] [stdout] test gc::tests::test_executor_counts_warning_events_cleaned ... ok [INFO] [stdout] test gc::tests::test_empty_prefix_dir_cleaned_after_prune ... ok [INFO] [stdout] test gc::tests::test_empty_repo_no_orphans ... ok [INFO] [stdout] test gc::tests::test_executor_prunes_orphan_files ... ok [INFO] [stdout] test gc::tests::test_executor_reports_bytes_freed_in_audit ... ok [INFO] [stdout] test gc::tests::test_executor_does_not_prune_referenced ... ok [INFO] [stdout] test gc::tests::test_executor_mixed_severity_cleans_non_critical_only ... ok [INFO] [stdout] test gc::tests::test_executor_writes_audit_record ... ok [INFO] [stdout] test gc::tests::test_executor_cleans_spec_creates_tombstone ... ok [INFO] [stdout] test gc::tests::test_executor_empty_plan ... ok [INFO] [stdout] test gc::tests::test_executor_transitions_spec ... ok [INFO] [stdout] test gc::tests::test_executor_writes_tombstones_for_pruned ... ok [INFO] [stdout] test gc::tests::test_find_uncompressed_detects_legacy ... ok [INFO] [stdout] test gc::tests::test_find_uncompressed_skips_compressed ... ok [INFO] [stdout] test gc::tests::test_find_uncompressed_skips_explicit_raw ... ok [INFO] [stdout] test gc::tests::test_from_profile_unknown_returns_error ... ok [INFO] [stdout] test gc::tests::test_flagged_seal_objects_not_orphaned ... ok [INFO] [stdout] test gc::tests::test_load_all_seals_reads_from_disk ... ok [INFO] [stdout] test gc::tests::test_load_all_seals_empty_dir ... ok [INFO] [stdout] test gc::tests::test_multiple_gc_runs_append_audit ... ok [INFO] [stdout] test gc::tests::test_multiple_specs_all_contribute ... ok [INFO] [stdout] test gc::tests::test_executor_skips_unknown_target_state ... ok [INFO] [stdout] test gc::tests::test_new_hash_included_in_referenced ... ok [INFO] [stdout] test gc::tests::test_objects_dir_missing_returns_empty ... ok [INFO] [stdout] test gc::tests::test_no_orphans_when_all_referenced ... ok [INFO] [stdout] test gc::tests::test_orphan_has_correct_size ... ok [INFO] [stdout] test gc::tests::test_plan_active_spec_no_cleanup ... ok [INFO] [stdout] test gc::tests::test_incompressible_gets_raw_prefix ... ok [INFO] [stdout] test gc::tests::test_orphan_detected ... ok [INFO] [stdout] test gc::tests::test_plan_completed_spec_past_retention_cleaned ... ok [INFO] [stdout] test gc::tests::test_plan_completed_spec_within_retention_not_cleaned ... ok [INFO] [stdout] test gc::tests::test_plan_critical_events_within_retention_not_flagged ... ok [INFO] [stdout] test gc::tests::test_old_hash_included_in_referenced ... ok [INFO] [stdout] test gc::tests::test_plan_empty_repo ... ok [INFO] [stdout] test gc::tests::test_plan_includes_prune_objects_when_orphans_exist ... ok [INFO] [stdout] test gc::tests::test_plan_is_serializable ... ok [INFO] [stdout] test gc::tests::test_plan_old_info_events_flagged ... ok [INFO] [stdout] test gc::tests::test_plan_mixed_severity_generates_per_severity_actions ... ok [INFO] [stdout] test format::tests::benchmark_summary_report ... ok [INFO] [stdout] test gc::tests::test_plan_summary_counts ... ok [INFO] [stdout] test gc::tests::test_profiles_differ_meaningfully ... ok [INFO] [stdout] test gc::tests::test_profiles_have_valid_allocations ... ok [INFO] [stdout] test gc::tests::test_plan_cancelled_spec_past_grace_cleaned ... ok [INFO] [stdout] test gc::tests::test_plan_summary_total_actions_counts_event_actions_individually ... ok [INFO] [stdout] test gc::tests::test_storage_config_all_profiles_use_zstd ... ok [INFO] [stdout] test gc::tests::test_storage_config_backward_compat_missing_field ... ok [INFO] [stdout] test gc::tests::test_plan_warning_within_retention_not_flagged ... ok [INFO] [stdout] test gc::tests::test_storage_config_default_level_3 ... ok [INFO] [stdout] test gc::tests::test_storage_config_json_roundtrip ... ok [INFO] [stdout] test gc::tests::test_storage_config_per_profile_levels ... ok [INFO] [stdout] test gc::tests::test_storage_config_from_profile_names ... ok [INFO] [stdout] test gc::tests::test_storage_report_categorizes_security ... ok [INFO] [stdout] test gc::tests::test_storage_report_empty_dir ... ok [INFO] [stdout] test gc::tests::test_storage_report_unlimited_budget ... ok [INFO] [stdout] test gc::tests::test_storage_report_usage_pct ... ok [INFO] [stdout] test gc::tests::test_tombstone_roundtrip ... ok [INFO] [stdout] test gc::tests::test_tree_hash_included_in_referenced ... ok [INFO] [stdout] test gc::tests::test_storage_report_categorizes_seals ... ok [INFO] [stdout] test gc::tests::test_plan_no_prune_when_no_orphans ... ok [INFO] [stdout] test git_ops::tests::test_open_not_a_repo ... ok [INFO] [stdout] test gc::tests::test_staleness_safety_object_becomes_referenced ... ok [INFO] [stdout] test gc::tests::test_plan_stale_active_spec_transitions ... ok [INFO] [stdout] test gc::tests::test_recompression_rewrites_legacy ... ok [INFO] [stdout] test git_ops::tests::test_open_valid_repo ... ok [INFO] [stdout] test hash::tests::test_hash_deterministic ... ok [INFO] [stdout] test hash::tests::test_hash_different_inputs ... ok [INFO] [stdout] test hash::tests::test_hash_length ... ok [INFO] [stdout] test git_ops::tests::test_root_returns_path ... ok [INFO] [stdout] test hooks::tests::test_agents_md_has_restore_warning ... ok [INFO] [stdout] test hooks::tests::test_agent_instructions_has_restore_warning ... ok [INFO] [stdout] test hooks::tests::test_agents_md_section_has_round_trip_commands ... ok [INFO] [stdout] test hooks::tests::test_agents_md_section_has_spec_done_workflow ... ok [INFO] [stdout] test hooks::tests::test_agents_md_section_is_focused ... ok [INFO] [stdout] test hooks::tests::test_agents_md_section_prohibits_git_and_finish ... ok [INFO] [stdout] test hooks::tests::test_agents_md_section_has_mandatory_language ... ok [INFO] [stdout] test hooks::tests::test_append_gitignore_appends_to_existing ... ok [INFO] [stdout] test git_ops::tests::test_current_branch ... ok [INFO] [stdout] test hooks::tests::test_append_gitignore_creates_new ... ok [INFO] [stdout] test hooks::tests::test_claude_md_has_git_commit_prohibition ... ok [INFO] [stdout] test git_ops::tests::test_checkout_or_create_branch ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_guidelines_section ... ok [INFO] [stdout] test hooks::tests::test_append_gitignore_idempotent ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_mandatory_commands ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_mandatory_language ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_round_trip_commands ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_spec_done_workflow ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_prohibits_git_and_finish ... ok [INFO] [stdout] test hooks::tests::test_claude_md_section_has_writ_finish_prohibition ... ok [INFO] [stdout] test hooks::tests::test_detect_codex_with_agents_md ... ok [INFO] [stdout] test hooks::tests::test_detect_claude_code_with_claude_md ... ok [INFO] [stdout] test hooks::tests::test_detect_nothing ... ok [INFO] [stdout] test hooks::tests::test_append_gitignore_handles_no_trailing_newline ... ok [INFO] [stdout] test git_ops::tests::test_stage_all ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_hook_creates_both_events ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_instructions_creates ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_hook_preserves_other_hooks ... ok [INFO] [stdout] test git_ops::tests::test_stage_and_commit ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_instructions_idempotent ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_instructions_merges_existing ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_hook_merges_existing ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_permissions_creates_settings ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_permissions_idempotent ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_permissions_merges_existing ... ok [INFO] [stdout] test hooks::tests::test_ensure_claude_hook_idempotent ... ok [INFO] [stdout] test hooks::tests::test_claudemd_prepends_to_existing ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_adds_both_hooks ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_adds_instruction ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_adds_permissions ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_creates_files_with_markers ... ok [INFO] [stdout] test hooks::tests::test_hook_codex_creates_agents_md_with_markers ... ok [INFO] [stdout] test hooks::tests::test_hook_codex_idempotent ... ok [INFO] [stdout] test hooks::tests::test_hook_codex_appends_with_markers ... ok [INFO] [stdout] test hooks::tests::test_hook_generic_creates_instructions ... ok [INFO] [stdout] test hooks::tests::test_hook_generic_skips_without_writ_dir ... ok [INFO] [stdout] test hooks::tests::test_hook_generic_idempotent ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_appends_to_existing_with_markers ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_idempotent ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_upgrades_legacy_heading ... ok [INFO] [stdout] test hooks::tests::test_hook_claude_code_reinit_updates_in_place ... ok [INFO] [stdout] test hooks::tests::test_init_generates_both_slash_commands_and_skills ... ok [INFO] [stdout] test hooks::tests::test_init_skill_count_matches_template_count ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_hook_noop_when_missing ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_hook_preserves_other ... ok [INFO] [stdout] test hooks::tests::test_init_skill_directories_have_correct_structure ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_instructions_noop_when_missing ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_instructions_preserves_other ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_instructions_removes ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_permissions_noop_when_missing ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_permissions_preserves_other ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_permissions_removes_entry ... ok [INFO] [stdout] test hooks::tests::test_reinit_updates_stale_skill_content ... ok [INFO] [stdout] test hooks::tests::test_init_with_existing_skills_no_corruption ... ok [INFO] [stdout] test hooks::tests::test_remove_claude_hook_removes_both_events ... ok [INFO] [stdout] test hooks::tests::test_remove_gitignore_entry ... ok [INFO] [stdout] test hooks::tests::test_remove_gitignore_catches_no_trailing_slash ... ok [INFO] [stdout] test hooks::tests::test_remove_gitignore_noop_when_not_present ... ok [INFO] [stdout] test hooks::tests::test_remove_writ_section_at_end ... ok [INFO] [stdout] test hooks::tests::test_remove_writ_section_does_not_match_writing ... ok [INFO] [stdout] test hooks::tests::test_remove_writ_section_matches_writ_version_control ... ok [INFO] [stdout] test hooks::tests::test_remove_marked_section ... ok [INFO] [stdout] test hooks::tests::test_remove_writ_section_middle ... ok [INFO] [stdout] test hooks::tests::test_remove_writ_section_only_content ... ok [INFO] [stdout] test hooks::tests::test_replace_marked_section ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_handles_legacy_heading ... ok [INFO] [stdout] test hooks::tests::test_remove_gitignore_entry_preserves_other_content ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_legacy_preserves_user_content ... ok [INFO] [stdout] test hooks::tests::test_install_hooks_creates_generic_and_gitignore ... ok [INFO] [stdout] test hooks::tests::test_init_skills_idempotent ... ok [INFO] [stdout] test hooks::tests::test_remove_marked_section_only_content ... ok [INFO] [stdout] test hooks::tests::test_unhook_codex_preserves_existing_content ... ok [INFO] [stdout] test hooks::tests::test_unhook_codex_removes_marker_based ... ok [INFO] [stdout] test hooks::tests::test_unhook_generic_removes_instructions ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_removes_marker_based ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_removes_permissions ... ok [INFO] [stdout] test hooks::tests::test_uninstall_hooks_noop_when_nothing_installed ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_preserves_existing_content ... ok [INFO] [stdout] test hooks::tests::test_wrap_with_markers ... ok [INFO] [stdout] test ignore::tests::test_always_ignored_with_custom ... ok [INFO] [stdout] test ignore::tests::test_create_writignore_deduplicates ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_removes_instruction ... ok [INFO] [stdout] test hooks::tests::test_unhook_claude_code_removes_hooks ... ok [INFO] [stdout] test ignore::tests::test_create_writignore_skips_existing ... ok [INFO] [stdout] test ignore::tests::test_create_writignore_has_header ... ok [INFO] [stdout] test ignore::tests::test_create_writignore_no_gitignore ... ok [INFO] [stdout] test ignore::tests::test_create_writignore_with_gitignore ... ok [INFO] [stdout] test ignore::tests::test_glob_match_question ... ok [INFO] [stdout] test ignore::tests::test_glob_match_star ... ok [INFO] [stdout] test ignore::tests::test_load_fallback_to_defaults ... ok [INFO] [stdout] test ignore::tests::test_parse_blank_and_comments ... ok [INFO] [stdout] test ignore::tests::test_parse_dir_names ... ok [INFO] [stdout] test ignore::tests::test_parse_glob_patterns ... ok [INFO] [stdout] test index::tests::test_empty_index ... ok [INFO] [stdout] test index::tests::test_remove ... ok [INFO] [stdout] test index::tests::test_save_and_load ... ok [INFO] [stdout] test ignore::tests::test_defaults_include_always_ignored ... ok [INFO] [stdout] test ignore::tests::test_glob_match_exact ... ok [INFO] [stdout] test keystore::tests::test_encrypted_key_permissions_0600 ... ok [INFO] [stdout] test keystore::tests::test_encrypted_key_not_plaintext ... ok [INFO] [stdout] test keystore::tests::test_ensure_master_key_idempotent ... ok [INFO] [stdout] test keystore::tests::test_ensure_master_key_creates_file ... ok [INFO] [stdout] test keystore::tests::test_has_agent ... ok [INFO] [stdout] test keystore::tests::test_list_agents ... ok [INFO] [stdout] test keystore::tests::test_multiple_agents_independent_keys ... ok [INFO] [stdout] test keystore::tests::test_path_traversal_in_agent_id_rejected ... ok [INFO] [stdout] test keystore::tests::test_master_key_permissions_0600 ... ok [INFO] [stdout] test hooks::tests::test_uninit_removes_both_slash_commands_and_skills ... ok [INFO] [stdout] test index::tests::test_upsert_and_lookup ... ok [INFO] [stdout] test keystore::tests::test_remove_nonexistent_agent ... ok [INFO] [stdout] test keystore::tests::test_public_key_not_restricted ... ok [INFO] [stdout] test keystore::tests::test_store_and_load_agent_key ... ok [INFO] [stdout] test keystore::tests::test_store_duplicate_agent_rejected ... ok [INFO] [stdout] test keystore::tests::test_valid_agent_ids ... ok [INFO] [stdout] test hooks::tests::test_uninit_preserves_non_writ_skills ... ok [INFO] [stdout] test hooks::tests::test_uninstall_hooks_removes_all ... ok [INFO] [stdout] test keystore::tests::test_wrong_master_key_fails_decrypt ... ok [INFO] [stdout] test keystore::tests::test_remove_agent_keys ... ok [INFO] [stdout] test lock::tests::test_lock_acquire_release ... ok [INFO] [stdout] test keystore::tests::test_sign_verify_with_stored_keys ... ok [INFO] [stdout] test migrate::tests::test_doctor_check_count ... ok [INFO] [stdout] test migrate::tests::test_doctor_corrupt_config ... ok [INFO] [stdout] test migrate::tests::test_doctor_corrupt_index ... ok [INFO] [stdout] test migrate::tests::test_doctor_corrupt_seal ... ok [INFO] [stdout] test migrate::tests::test_created_by_preserved_across_opens ... ok [INFO] [stdout] test migrate::tests::test_doctor_future_schema_is_fail ... ok [INFO] [stdout] test migrate::tests::test_doctor_missing_directory ... ok [INFO] [stdout] test migrate::tests::test_doctor_missing_index ... ok [INFO] [stdout] test migrate::tests::test_doctor_missing_master_key ... ok [INFO] [stdout] test migrate::tests::test_doctor_corrupt_spec ... ok [INFO] [stdout] test lock::tests::test_lock_blocks_second ... ok [INFO] [stdout] test migrate::tests::test_doctor_missing_version_is_warning ... ok [INFO] [stdout] test migrate::tests::test_doctor_no_config_is_pass ... ok [INFO] [stdout] test migrate::tests::test_doctor_healthy_repo ... ok [INFO] [stdout] test lock::tests::test_lock_released_after_drop ... ok [INFO] [stdout] test migrate::tests::test_doctor_on_fresh_init ... ok [INFO] [stdout] test migrate::tests::test_load_missing_returns_none ... ok [INFO] [stdout] test migrate::tests::test_legacy_repo_opens_via_auto_migration ... ok [INFO] [stdout] test lock::tests::test_lock_timeout ... ok [INFO] [stdout] test migrate::tests::test_migrate_noop_when_current ... ok [INFO] [stdout] test migrate::tests::test_init_creates_version_toml ... ok [INFO] [stdout] test migrate::tests::test_migrate_creates_backup ... ok [INFO] [stdout] test migrate::tests::test_migrate_backup_preserves_original_content ... ok [INFO] [stdout] test migrate::tests::test_migrate_v0_to_v1_creates_dirs_and_version ... ok [INFO] [stdout] test migrate::tests::test_repo_version_default_matches_new ... ok [INFO] [stdout] test migrate::tests::test_repo_version_new_sets_current_schema ... ok [INFO] [stdout] test migrate::tests::test_open_updates_last_opened_by ... ok [INFO] [stdout] test migrate::tests::test_repo_version_toml_roundtrip ... ok [INFO] [stdout] test migrate::tests::test_migrate_unknown_step_returns_error ... ok [INFO] [stdout] test migrate::tests::test_ws2_doctor_corrupted_workspace_layout ... ok [INFO] [stdout] test migrate::tests::test_ws2_doctor_healthy_workspace ... ok [INFO] [stdout] test migrate::tests::test_migrate_idempotent ... ok [INFO] [stdout] test migrate::tests::test_ws2_doctor_missing_workspace_dir ... ok [INFO] [stdout] test migrate::tests::test_open_rejects_future_schema_version ... ok [INFO] [stdout] test migrate::tests::test_ws2_already_migrated_skips ... ok [INFO] [stdout] test migrate::tests::test_doctor_report_serialization_roundtrip ... ok [INFO] [stdout] test migrate::tests::test_ws2_missing_head_handled ... ok [INFO] [stdout] test migrate::tests::test_ws2_migrated_head_content_preserved ... ok [INFO] [stdout] test migrate::tests::test_ws2_migrated_index_content_preserved ... ok [INFO] [stdout] test migrate::tests::test_ws2_flat_layout_auto_migrates ... ok [INFO] [stdout] test object::tests::test_backward_compat_legacy_objects ... ok [INFO] [stdout] test object::tests::test_bomb_emits_security_event ... ok [INFO] [stdout] test object::tests::test_bomb_just_over_limit_fails ... ok [INFO] [stdout] test migrate::tests::test_ws2_idempotent_run_twice ... ok [INFO] [stdout] test migrate::tests::test_ws2_no_seals_fresh_repo ... ok [INFO] [stdout] test object::tests::test_compress_decompress_roundtrip ... ok [INFO] [stdout] test migrate::tests::test_ws2_missing_index_handled ... ok [INFO] [stdout] test object::tests::test_compression_disabled_stores_raw ... ok [INFO] [stdout] test object::tests::test_bomb_just_under_limit_succeeds ... ok [INFO] [stdout] test object::tests::test_compression_actually_saves_space ... ok [INFO] [stdout] test object::tests::test_compression_stats_empty_store ... ok [INFO] [stdout] test object::tests::test_compression_stats_legacy_objects_counted ... ok [INFO] [stdout] test object::tests::test_compression_stats_all_compressed ... ok [INFO] [stdout] test object::tests::test_compression_stats_serialization_roundtrip ... ok [INFO] [stdout] test object::tests::test_decompression_bomb_rejected ... ok [INFO] [stdout] test object::tests::test_compression_stats_nonexistent_dir ... ok [INFO] [stdout] test object::tests::test_compression_stats_mixed_formats ... ok [INFO] [stdout] test object::tests::test_dedup_still_works_with_compression ... ok [INFO] [stdout] test object::tests::test_empty_content_roundtrip ... ok [INFO] [stdout] test object::tests::test_exists_returns_false_for_invalid_hash ... ok [INFO] [stdout] test object::tests::test_has_magic_byte ... ok [INFO] [stdout] test object::tests::test_hash_stability_across_formats ... ok [INFO] [stdout] test object::tests::test_bomb_returns_decompression_bomb_error_variant ... ok [INFO] [stdout] test object::tests::test_exists ... ok [INFO] [stdout] test object::tests::test_is_compressed ... ok [INFO] [stdout] test migrate::tests::test_ws2_migrated_spec_heads_preserved ... ok [INFO] [stdout] test object::tests::test_legacy_raw_passthrough ... ok [INFO] [stdout] test object::tests::test_magic_raw_explicit ... ok [INFO] [stdout] test object::tests::test_magic_zstd_decompression ... ok [INFO] [stdout] test object::tests::test_integrity_check_catches_corruption ... ok [INFO] [stdout] test object::tests::test_mixed_compressed_and_raw_coexist ... ok [INFO] [stdout] test object::tests::test_retrieve_rejects_invalid_hash ... ok [INFO] [stdout] test object::tests::test_large_content_roundtrip ... ok [INFO] [stdout] test object::tests::test_retrieve_rejects_traversal_in_hash ... ok [INFO] [stdout] test object::tests::test_retrieve_nonexistent ... ok [INFO] [stdout] test object::tests::test_store_and_retrieve ... ok [INFO] [stdout] test object::tests::test_bomb_streaming_does_not_allocate_full_size ... ok [INFO] [stdout] test object::tests::test_retrieve_rejects_too_short_hash ... ok [INFO] [stdout] test object::tests::test_unknown_magic_byte_treated_as_legacy ... ok [INFO] [stdout] test object::tests::test_store_is_idempotent ... ok [INFO] [stdout] test object::tests::test_store_compresses_on_disk ... ok [INFO] [stdout] test platform::tests::test_check_daemon_no_pid_file ... ok [INFO] [stdout] test object::tests::test_with_config_compression_level ... ok [INFO] [stdout] test object::tests::test_with_config_max_size ... ok [INFO] [stdout] test object::tests::test_store_raw_and_retrieve ... ok [INFO] [stdout] test object::tests::test_different_levels_produce_valid_output ... ok [INFO] [stdout] test platform::tests::test_detect_resource_limits ... ok [INFO] [stdout] test platform::tests::test_detect_watch_backend_returns_valid_backend ... ok [INFO] [stdout] test platform::tests::test_is_process_alive_current_process ... ok [INFO] [stdout] test platform::tests::test_is_process_alive_nonexistent ... ok [INFO] [stdout] test platform::tests::test_send_signal_probe_current_process ... ok [INFO] [stdout] test platform::tests::test_send_signal_probe_nonexistent ... ok [INFO] [stdout] test platform::tests::test_stop_daemon_no_pid_file ... ok [INFO] [stdout] test platform::tests::test_watch_backend_display ... ok [INFO] [stdout] test proposal::tests::test_proposal_accept ... ok [INFO] [stdout] test proposal::tests::test_proposal_new_is_pending ... ok [INFO] [stdout] test platform::tests::test_check_daemon_stale_pid ... ok [INFO] [stdout] test proposal::tests::test_proposal_reject ... ok [INFO] [stdout] test proposal::tests::test_proposal_overlaps ... ok [INFO] [stdout] test platform::tests::test_remove_nonexistent_pid_file_is_ok ... ok [INFO] [stdout] test proposal::tests::test_proposal_supersede ... ok [INFO] [stdout] test platform::tests::test_detect_watch_environment ... ok [INFO] [stdout] test proposal::tests::test_proposal_serde_roundtrip ... ok [INFO] [stdout] test proposal::tests::test_proposal_status_serde_values ... ok [INFO] [stdout] test platform::tests::test_pid_file_roundtrip ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_empty_when_no_seals ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_excludes_deletes_from_ownership ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_json_serializable ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_has_latest_summary ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_sorted_by_most_recent ... ok [INFO] [stdout] test repo::agent_activity_tests::test_convergence_recommended_false_when_linear ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_tracks_specs ... ok [INFO] [stdout] test repo::agent_activity_tests::test_agent_activity_walks_all_heads ... ok [INFO] [stdout] test repo::agent_activity_tests::test_convergence_recommended_false_in_spec_scoped ... ok [INFO] [stdout] test repo::agent_activity_tests::test_convergence_recommended_true_when_diverged ... ok [INFO] [stdout] test repo::agent_activity_tests::test_convergence_recommended_serialized_only_when_true ... ok [INFO] [stdout] test repo::agent_activity_tests::test_diverged_branch_warning_has_recommendation ... ok [INFO] [stdout] test repo::agent_activity_tests::test_multi_agent_file_provenance ... ok [INFO] [stdout] test repo::agent_activity_tests::test_diverged_branches_detected_in_context ... ok [INFO] [stdout] test repo::agent_activity_tests::test_single_agent_owns_all_files ... ok [INFO] [stdout] test repo::agent_activity_tests::test_diverged_branches_empty_in_spec_scoped_context ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_dot_slash_normalized_for_scope ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_enforce_scope_seal_paths_rejects_out_of_scope ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_enforce_scope_true_allows_in_scope_files ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_enforce_scope_false_allows_out_of_scope_with_warning ... ok [INFO] [stdout] test repo::agent_activity_tests::test_no_diverged_branches_when_linear ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_path_traversal_rejected_by_scope_check ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_enforce_scope_true_rejects_out_of_scope ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_register_agent_id_boundary_lengths ... ok [INFO] [stdout] test repo::agent_activity_tests::test_spec_scoped_agent_activity_filters_files ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_enforce_scope_true_also_emits_security_event ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_register_auto_creates_agents_directory ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_multiple_agents_different_scopes_via_seal_paths ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_register_empty_scope_means_unrestricted ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_unicode_agent_id_rejected_at_seal ... ok [INFO] [stdout] test convergence::prop_tests::tests::diff3_never_panics ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_register_overlapping_scope_patterns ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_scope_violation_emits_security_event_regardless_of_enforce ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_unregistered_agent_bypasses_scope_enforcement ... ok [INFO] [stdout] test repo::agent_identity_tests::test_revocation_emits_security_event ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_suspended_agent_reactivated_with_scope_still_enforced ... ok [INFO] [stdout] test repo::agent_identity_tests::test_reactivated_agent_can_seal_again ... ok [INFO] [stdout] test repo::agent_identity_tests::test_revoked_agent_seal_rejected ... ok [INFO] [stdout] test repo::agent_edge_case_tests::test_update_scope_constraints_changes_enforcement ... ok [INFO] [stdout] test repo::agent_identity_tests::test_revoked_agent_seal_paths_rejected ... ok [INFO] [stdout] test repo::agent_identity_tests::test_suspended_agent_seal_rejected ... ok [INFO] [stdout] test convergence::prop_tests::tests::confidence_always_valid ... ok [INFO] [stdout] test repo::agent_identity_tests::test_seals_before_revocation_remain_valid ... ok [INFO] [stdout] test repo::agent_identity_tests::test_unregistered_agent_seal_allowed ... ok [INFO] [stdout] test repo::agent_store_tests::test_agent_in_scope_registered_with_constraints ... ok [INFO] [stdout] test repo::agent_store_tests::test_agent_in_scope_unregistered ... ok [INFO] [stdout] test repo::agent_store_tests::test_agent_trust_level_unregistered ... ok [INFO] [stdout] test repo::agent_store_tests::test_agent_trust_level_registered ... ok [INFO] [stdout] test repo::agent_store_tests::test_init_creates_agents_dir ... ok [INFO] [stdout] test repo::agent_scoped_context_tests::test_agent_scoped_contention_filtered ... ok [INFO] [stdout] test repo::agent_store_tests::test_load_agent_not_found ... ok [INFO] [stdout] test repo::agent_scoped_context_tests::test_agent_scoped_context_filters_to_agent_specs ... ok [INFO] [stdout] test repo::agent_scoped_context_tests::test_agent_scoped_context_shows_all_agent_activity ... ok [INFO] [stdout] test repo::agent_store_tests::test_list_agents ... ok [INFO] [stdout] test repo::agent_store_tests::test_load_agent_roundtrip ... ok [INFO] [stdout] test repo::agent_scoped_context_tests::test_agent_scoped_context_file_scope ... ok [INFO] [stdout] test repo::agent_scoped_context_tests::test_agent_scoped_recommended_action ... ok [INFO] [stdout] test repo::agent_store_tests::test_reactivate_revoked_fails ... ok [INFO] [stdout] test repo::agent_store_tests::test_revoke_agent ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_accepts_valid_branch_names ... ok [INFO] [stdout] test object::tests::test_large_file_store_and_retrieve ... ok [INFO] [stdout] test repo::agent_store_tests::test_suspend_and_reactivate ... ok [INFO] [stdout] test repo::agent_store_tests::test_update_agent_trust_level ... ok [INFO] [stdout] test repo::agent_store_tests::test_register_agent_duplicate_rejected ... ok [INFO] [stdout] test repo::agent_store_tests::test_register_agent_creates_file ... ok [INFO] [stdout] test repo::agent_store_tests::test_update_agent_scope ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_export_no_import ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_no_git_repo ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_export_creates_commits ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_from_old_commit_refreshes_baseline ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_creates_seal ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_rejects_invalid_branch_name ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_export_nothing_pending ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_rejects_invalid_git_ref ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_export_incremental ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_dirty_tree_doesnt_pollute_first_seal ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_export_maps_metadata ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_with_ref ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_ownership_not_polluted ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_import_stores_all_files ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_status_no_state ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_seal_preserves_git_tree_snapshot ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_status_after_import ... ok [INFO] [stdout] test repo::bridge_tests::test_first_seal_after_bridge_captures_only_agent_changes ... ok [INFO] [stdout] test repo::chain_tests::test_chain_single_seal_verifies ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_roundtrip ... ok [INFO] [stdout] test repo::bridge_tests::test_bridge_status_pending_count ... ok [INFO] [stdout] test repo::chain_tests::test_chain_parent_linkage_correct ... ok [INFO] [stdout] test repo::chain_tests::test_chain_tampered_agent_detected ... ok [INFO] [stdout] test repo::chain_tests::test_chain_tampered_content_detected ... ok [INFO] [stdout] test repo::chain_tests::test_chain_each_seal_has_crypto_fields ... ok [INFO] [stdout] test repo::chain_tests::test_chain_tampered_parent_hash_detected ... ok [INFO] [stdout] test repo::chain_tests::test_chain_tampered_timestamp_detected ... ok [INFO] [stdout] test repo::chain_tests::test_chain_with_signed_seals_verifies ... ok [INFO] [stdout] test repo::chain_tests::test_verify_chain_missing_head_seal_returns_failure ... ok [INFO] [stdout] test repo::chain_tests::test_verify_chain_missing_seal_returns_failure_not_error ... ok [INFO] [stdout] test repo::chain_tests::test_chain_three_seals_verify ... ok [INFO] [stdout] test repo::chain_tests::test_verify_chain_reopened_repo_passes ... ok [INFO] [stdout] test repo::chain_tests::test_verify_chain_partial_chain_still_verifies_loaded_seals ... ok [INFO] [stdout] test repo::chain_tests::test_chain_all_hashes_unique ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_one_seal_full_scope ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_deleted_file_not_in_ownership ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_integration_risk_low_with_single_agent ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_seal_limit_zero ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_conflicting_specs_same_files ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_one_seal_spec_scoped ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_seal_limit_exceeds_total ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_spec_scope_nonexistent_spec ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_renamed_files ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_zero_seals_full_scope ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_zero_seals_agent_scope ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_zero_seals_with_pending_changes ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_with_deleted_files ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_zero_seals_with_specs ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_session_not_complete_with_mixed_statuses ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_specs_with_dependencies ... ok [INFO] [stdout] test repo::context_head_tracking_tests::test_context_head_none_when_no_seals ... ok [INFO] [stdout] test repo::context_head_tracking_tests::test_clear_context_head ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_session_complete_all_specs_done ... ok [INFO] [stdout] test repo::context_head_tracking_tests::test_no_context_head_before_context_call ... ok [INFO] [stdout] test repo::context_stress_tests::test_import_orphan_fires_for_missing_local_module ... ok [INFO] [stdout] test repo::context_stress_tests::test_import_orphan_fires_for_missing_module ... ok [INFO] [stdout] test repo::context_head_tracking_tests::test_context_records_head ... ok [INFO] [stdout] test repo::context_stress_tests::test_import_orphan_suppressed_by_local_module ... ok [INFO] [stdout] test repo::context_stress_tests::test_import_orphan_suppressed_by_requirements_txt ... ok [INFO] [stdout] test repo::context_head_tracking_tests::test_context_records_spec_head ... ok [INFO] [stdout] test repo::context_stress_tests::test_converge_all_applied_false_when_not_clean ... ok [INFO] [stdout] test repo::context_stress_tests::test_summary_refreshed_after_convergence ... ok [INFO] [stdout] test repo::converge_all_tests::test_apply_convergence_advances_spec_head ... ok [INFO] [stdout] test repo::context_stress_tests::test_converge_all_updates_base_spec_head_when_diverged ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_apply_clears_diverged_branches ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_escalate_strategy_produces_escalation_records ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_manual_leaves_both_modified_unresolved ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_both_modified_most_recent_picks_by_timestamp ... ok [INFO] [stdout] test convergence::prop_tests::tests::pattern_never_panics ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_clean_multi_branch ... ok [INFO] [stdout] test crypto::tests::test_chain_with_100_seals_performance ... FAILED [INFO] [stdout] test repo::converge_all_tests::test_converge_all_no_diverged ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_merge_order_tracks_specs ... ok [INFO] [stdout] test repo::context_stress_tests::test_context_stress_full_workflow ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_resolution_records_have_strategy ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_most_recent_resolves_conflicts ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_most_recent_fallback_for_both_modified ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_step_results_match_order ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_report_serializable ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_three_way_leaves_conflicts_unresolved ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_v2_pipeline_resolves_python_imports ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_conflict_decisions_with_strategy ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_warnings_for_high_contention ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_consistency_checks_on_html ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_serializable ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_present_on_converge_all ... ok [INFO] [stdout] test repo::converge_all_tests::test_converge_all_with_apply ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_unresolved_conflicts_lower_score ... ok [INFO] [stdout] test repo::converge_all_tests::test_quality_report_tracks_file_decisions ... ok [INFO] [stdout] test repo::converge_all_tests::test_tr13_regression_additive_changes_preserved ... ok [INFO] [stdout] test repo::convergence_events_integration_tests::test_converge_all_emits_started_and_completed_events ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_all_updates_last_converged_at ... ok [INFO] [stdout] test repo::converge_all_tests::test_tr16_regression_three_way_chaining ... ok [INFO] [stdout] test repo::convergence_events_integration_tests::test_converge_all_populates_convergence_record ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_spec_with_no_seals_errors ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_identical_changes_clean ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_clean_non_overlapping_changes ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_report_has_all_metadata ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_full_cycle_diverge_merge_context ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_left_only_and_right_only_files ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_report_serializable ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_convergence_state_persists_timestamp ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_reduces_diverged_branch_count ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_three_specs_sequential ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_unresolved_conflict_errors ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_no_specs ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_disjoint_files ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_mixed_active_and_recently_completed ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_with_conflict_and_resolution ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_converge_then_seal_captures_merged_state ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_recently_completed_specs_included ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_convergence_key_can_sign_and_verify ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_same_content_no_conflict ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_convergence_key_unique_per_repo ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_convergence_keypair_loads ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_init_creates_convergence_keypair ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_single_spec ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_three_specs_one_shared_file ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_seal_secured_with_convergence_key ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_wrong_key_signature_rejected ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_stale_completed_specs_excluded ... ok [INFO] [stdout] test repo::convergence_keypair_tests::test_truncated_signature_rejected ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_detect_overlaps_same_file_different_content ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_quality_report_confidence_affects_score ... ok [INFO] [stdout] test repo::convergence_integration_tests::test_setup_creates_divergence ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_excludes_bridge_seals ... ok [INFO] [stdout] test format::tests::benchmark_spec_list_token_counts ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_not_in_spec_scoped_context ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_context_clean_after_apply_convergence ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_capped_at_10 ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_serializable ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_restore_updates_spec_head ... ok [INFO] [stdout] test repo::flagged_seals_tests::test_flagged_seal_store_accessible_from_repo ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_two_agents_same_file ... ok [INFO] [stdout] test repo::file_contention_tests::test_no_contention_single_agent ... ok [INFO] [stdout] test repo::file_contention_tests::test_contention_sorted_by_agent_count_desc ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_context_clean_after_converge_all ... ok [INFO] [stdout] test repo::flagged_seals_tests::test_downstream_seals_transitively_flagged ... ok [INFO] [stdout] test repo::install_tests::test_install_creates_writignore ... ok [INFO] [stdout] test repo::flagged_seals_tests::test_no_seals_in_window_produces_no_flags ... ok [INFO] [stdout] test repo::install_tests::test_install_detects_claude_code ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_file_decision_has_confidence ... ok [INFO] [stdout] test repo::flagged_seals_tests::test_revoke_without_compromise_timestamp_uses_now ... ok [INFO] [stdout] test repo::install_tests::test_install_fresh_no_git ... ok [INFO] [stdout] test repo::convergence_metadata_tests::test_quality_report_has_min_confidence ... ok [INFO] [stdout] test repo::install_tests::test_install_has_available_operations ... ok [INFO] [stdout] test repo::install_tests::test_install_has_repo_root ... ok [INFO] [stdout] test repo::install_tests::test_install_idempotent_no_git ... ok [INFO] [stdout] test repo::flagged_seals_tests::test_revoke_with_compromise_flags_seals_in_window ... ok [INFO] [stdout] test repo::install_tests::test_install_preserves_existing_writignore ... ok [INFO] [stdout] test repo::install_tests::test_install_no_frameworks ... ok [INFO] [stdout] test repo::install_tests::test_install_result_serializable ... ok [INFO] [stdout] test repo::lifecycle_tests::test_cancel_spec_from_active ... ok [INFO] [stdout] test repo::install_tests::test_install_writignore_imports_gitignore ... ok [INFO] [stdout] test repo::install_tests::test_install_detects_dirty_git ... ok [INFO] [stdout] test repo::lifecycle_tests::test_cancel_spec_from_stale ... ok [INFO] [stdout] test repo::install_tests::test_install_with_git ... ok [INFO] [stdout] test repo::lifecycle_tests::test_cancel_spec_already_cancelled_fails ... ok [INFO] [stdout] test repo::lifecycle_tests::test_complete_spec_requires_status_complete ... ok [INFO] [stdout] test repo::install_tests::test_install_idempotent_already_synced ... ok [INFO] [stdout] test repo::lifecycle_tests::test_enforce_scope_from_settings ... ok [INFO] [stdout] test repo::lifecycle_tests::test_context_includes_stale_spec_warnings ... ok [INFO] [stdout] test repo::install_tests::test_install_reimports_on_head_move ... ok [INFO] [stdout] test repo::lifecycle_tests::test_scan_stale_specs_empty_repo ... ok [INFO] [stdout] test repo::lifecycle_tests::test_open_no_settings_file ... ok [INFO] [stdout] test repo::lifecycle_tests::test_init_creates_repo_with_default_settings ... ok [INFO] [stdout] test repo::lifecycle_tests::test_context_no_stale_warnings_for_fresh_specs ... ok [INFO] [stdout] test repo::lifecycle_tests::test_illegal_transition_active_to_archived ... ok [INFO] [stdout] test repo::lifecycle_tests::test_illegal_transition_archived_to_active ... ok [INFO] [stdout] test repo::lifecycle_tests::test_open_loads_settings ... ok [INFO] [stdout] test repo::lifecycle_tests::test_scan_stale_specs_ignores_terminal_states ... ok [INFO] [stdout] test repo::lifecycle_tests::test_scan_stale_specs_identifies_stale ... ok [INFO] [stdout] test repo::lifecycle_tests::test_storage_report_on_repo ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_active_to_cancelled ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_active_to_completed ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_active_to_stale ... ok [INFO] [stdout] test repo::lifecycle_tests::test_storage_pressure_emits_event ... ok [INFO] [stdout] test repo::lifecycle_tests::test_seal_always_succeeds_regardless_of_storage_pressure ... ok [INFO] [stdout] test repo::lifecycle_tests::test_seal_updates_last_activity ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_completed_to_active_allowed ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_cancelled_to_archived ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_completed_to_archived ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_nonexistent_spec_fails ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_stale_to_cancelled ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_updates_timestamp ... ok [INFO] [stdout] test repo::log_all_tests::test_log_all_empty_repo ... ok [INFO] [stdout] test repo::lifecycle_tests::test_complete_spec_with_correct_status ... ok [INFO] [stdout] test repo::log_all_tests::test_log_all_deduplicates ... ok [INFO] [stdout] test repo::log_all_tests::test_log_all_matches_log_when_no_branches ... ok [INFO] [stdout] test repo::merge_on_seal_tests::test_seal_with_check_no_conflict ... ok [INFO] [stdout] test repo::lifecycle_tests::test_transition_stale_to_active ... ok [INFO] [stdout] test repo::merge_on_seal_tests::test_seal_with_check_detects_file_overlap ... ok [INFO] [stdout] test repo::merge_on_seal_tests::test_seal_with_check_no_expected_head ... ok [INFO] [stdout] test repo::merge_on_seal_tests::test_seal_with_check_detects_head_movement ... ok [INFO] [stdout] test repo::monitoring_event_tests::test_chain_hash_failure_emits_event ... ok [INFO] [stdout] test repo::log_all_tests::test_log_all_sorted_newest_first ... ok [INFO] [stdout] test repo::monitoring_event_tests::test_unrecognized_agent_seal_emits_event ... ok [INFO] [stdout] test repo::monitoring_event_tests::test_signature_failure_emits_event ... ok [INFO] [stdout] test repo::merge_on_seal_tests::test_seal_with_check_short_id ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_none_when_clean ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_blocking_dependency ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_finish_when_session_complete ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_seal_when_changes ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_priority_ordering ... ok [INFO] [stdout] test repo::log_all_tests::test_log_all_includes_diverged_branch_seals ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_dependency_resolved_no_block ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_converge_in_spec_scope ... ok [INFO] [stdout] test repo::recommended_action_tests::test_recommended_action_converge_when_diverged ... ok [INFO] [stdout] test repo::remote_tests::test_remote_add_and_list ... ok [INFO] [stdout] test repo::remote_tests::test_remote_init_creates_structure ... ok [INFO] [stdout] test repo::remote_tests::test_remote_add_duplicate_fails ... ok [INFO] [stdout] test repo::remote_tests::test_pull_fast_forward ... ok [INFO] [stdout] test repo::remote_tests::test_remote_init_twice_fails ... ok [INFO] [stdout] test repo::remote_tests::test_pull_objects_and_seals ... ok [INFO] [stdout] test repo::remote_tests::test_push_idempotent ... ok [INFO] [stdout] test repo::remote_tests::test_push_fast_forward ... ok [INFO] [stdout] test repo::remote_tests::test_push_pull_roundtrip ... ok [INFO] [stdout] test repo::remote_tests::test_spec_merge_status_progression ... ok [INFO] [stdout] test repo::remote_tests::test_remote_remove ... ok [INFO] [stdout] test repo::remote_tests::test_remote_remove_nonexistent ... ok [INFO] [stdout] test repo::remote_tests::test_push_diverged_fails ... ok [INFO] [stdout] test repo::remote_tests::test_push_objects_and_seals ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_absolute_path_rejected_stub ... ok [INFO] [stdout] test repo::remote_tests::test_remote_status_ahead_behind ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_agent_scope_warning_on_seal ... ok [INFO] [stdout] test repo::remote_tests::test_spec_merge_union_sealed_by ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_deeply_nested_path_in_scope ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_empty_scope_allows_all ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_directory_prefix_in_scope ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_path_traversal_dot_dot_stub ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_exact_path_in_scope_no_warning ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_symlink_outside_scope_stub ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_file_outside_scope_detected ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_scope_violation_emits_security_event ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_wildcard_scope_matches ... ok [INFO] [stdout] test repo::scope_constraint_tests::test_multiple_files_mixed_scope ... ok [INFO] [stdout] test repo::scale_tests::test_scale_100_specs ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_materialize_convergence_writes_to_disk ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_finalize_convergence_backstop ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_committed_specs_excluded_from_convergence ... ok [INFO] [stdout] test format::tests::benchmark_full_context_token_counts ... ok [INFO] [stdout] test format::tests::benchmark_git_baseline_vs_writ ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_no_bridge_seal_includes_all_specs ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_epoch_boundary_excludes_pre_bridge_specs ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_2spec_clean_merge ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_2spec_conflict_detection ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_contaminated_inputs_same_result ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_shadow_results_in_object_store ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_3spec_nway_merge ... ok [INFO] [stdout] test repo::signature_tests::test_convergence_key_rejects_agent_seal ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_single_spec_returns_clean ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_deterministic_ordering ... ok [INFO] [stdout] test repo::signature_tests::test_convergence_signing_key_signs_seals ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_escalate_auto_resolves_conflict ... ok [INFO] [stdout] test repo::signature_tests::test_seal_modified_agent_id_detected ... ok [INFO] [stdout] test repo::signature_tests::test_seal_signed_with_key_verifies ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_disjoint_files_no_merge ... ok [INFO] [stdout] test repo::signature_tests::test_seal_tampered_content_fails_signature ... ok [INFO] [stdout] test repo::seal_tree_convergence_tests::test_seal_tree_genesis_always_used_as_base ... ok [INFO] [stdout] test repo::signature_tests::test_seal_truncated_signature_fails ... ok [INFO] [stdout] test repo::signature_tests::test_unsigned_seal_reports_no_signature ... ok [INFO] [stdout] test repo::signature_tests::test_seal_wrong_key_fails_signature ... ok [INFO] [stdout] test repo::spec_head_tests::test_spec_head_none_for_unknown_spec ... ok [INFO] [stdout] test format::tests::benchmark_seal_log_token_counts ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_directory_prefix_matching ... ok [INFO] [stdout] test repo::spec_head_tests::test_seal_without_spec_uses_global_head ... ok [INFO] [stdout] test repo::spec_head_tests::test_spec_head_chains_correctly ... ok [INFO] [stdout] test repo::spec_head_tests::test_spec_scoped_head_isolation ... ok [INFO] [stdout] test repo::spec_head_tests::test_spec_log_returns_spec_chain ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_filters_working_state_by_file_scope ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_filters_seal_nudge ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_filters_pending_changes ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_file_contention_filtered_to_scope ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_diverged_still_has_progress ... ok [INFO] [stdout] test repo::scale_tests::test_scale_many_files_in_single_seal ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_infers_scope_from_seals ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_includes_diverged_branches ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_no_filter_when_no_scope_or_seals ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_integration_risk_computed_from_filtered_signals ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_scope_violations_filtered_to_spec ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_cross_file_reference_integrity_detects_broken_imports ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_cross_file_reference_integrity_passes_when_intact ... ok [INFO] [stdout] test repo::spec_scoped_context_tests::test_spec_context_shows_diverged_spec_seals ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_single_spec_returns_early ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_report_duplicate_definitions_detected ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_report_no_duplicate_definitions_passes ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_report_summary_includes_confidence ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_report_unused_imports_whole_word_not_flagged ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_report_unused_imports_word_boundary ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_score_penalizes_duplicate_imports ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_quality_score_penalizes_unused_imports ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_files_changed_populated ... ok [INFO] [stdout] test repo::summary_tests::test_summary_empty_repo ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_deduplicates_warnings ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_additive_composition_preserves_content ... ok [INFO] [stdout] test repo::summary_tests::test_summary_commit_message_format ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_includes_non_diverged_specs ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_runs_layer5_cleanup ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_converge_all_sequential_shared_file_all_preserved ... ok [INFO] [stdout] test repo::summary_tests::test_summary_files_to_stage ... ok [INFO] [stdout] test repo::summary_tests::test_summary_omits_workspace_section_when_no_convergence ... ok [INFO] [stdout] test repo::summary_tests::test_summary_excludes_bridge_seals ... ok [INFO] [stdout] test repo::summary_tests::test_summary_serializable ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_degraded_true_when_most_recent_discards_content ... ok [INFO] [stdout] test repo::sprint14_reporting_tests::test_degraded_false_when_clean_merge ... ok [INFO] [stdout] test repo::summary_tests::test_summary_includes_workspace_section_after_convergence ... ok [INFO] [stdout] test repo::tests::test_add_spec_rejects_duplicate ... ok [INFO] [stdout] test repo::summary_tests::test_summary_multi_agent_multi_spec ... ok [INFO] [stdout] test repo::summary_tests::test_summary_headline_reflects_workspace_convergence ... ok [INFO] [stdout] test repo::tests::test_cancel_spec_from_active ... ok [INFO] [stdout] test repo::tests::test_cancel_spec_rejects_terminal_states ... ok [INFO] [stdout] test repo::tests::test_cancel_spec_from_stale ... ok [INFO] [stdout] test repo::summary_tests::test_summary_single_agent_single_spec ... ok [INFO] [stdout] test repo::tests::test_complete_spec_requires_complete_status ... ok [INFO] [stdout] test repo::tests::test_complete_spec_rejects_from_cancelled ... ok [INFO] [stdout] test repo::summary_tests::test_summary_with_diverged_branches ... ok [INFO] [stdout] test repo::tests::test_complete_spec_succeeds_with_complete_status ... ok [INFO] [stdout] test repo::tests::test_apply_convergence_clean ... ok [INFO] [stdout] test repo::tests::test_apply_unresolved_conflicts ... ok [INFO] [stdout] test repo::tests::test_apply_convergence_with_resolutions ... ok [INFO] [stdout] test repo::tests::test_context_dependency_missing ... ok [INFO] [stdout] test repo::chain_tests::test_chain_100_seals_performance ... ok [INFO] [stdout] test repo::tests::test_context_dependency_status ... ok [INFO] [stdout] test repo::tests::test_context_filter_by_agent ... ok [INFO] [stdout] test repo::tests::test_context_dependency_resolved ... ok [INFO] [stdout] test repo::tests::test_concurrent_seal_safety ... ok [INFO] [stdout] test repo::tests::test_context_full_no_enrichment ... ok [INFO] [stdout] test repo::summary_tests::test_summary_preserves_all_specs_after_convergence ... ok [INFO] [stdout] test repo::tests::test_context_full_empty_repo ... ok [INFO] [stdout] test repo::tests::test_context_has_available_operations ... ok [INFO] [stdout] test repo::tests::test_context_filter_by_status ... ok [INFO] [stdout] test repo::tests::test_context_filter_combined_status_and_agent ... ok [INFO] [stdout] test repo::tests::test_context_pending_changes ... ok [INFO] [stdout] test repo::tests::test_context_full_with_seals ... ok [INFO] [stdout] test repo::tests::test_context_spec_not_found ... ok [INFO] [stdout] test repo::tests::test_context_filter_empty_returns_all ... ok [INFO] [stdout] test repo::tests::test_context_seal_summary_has_status_and_verification ... ok [INFO] [stdout] test repo::tests::test_context_seal_summary_omits_empty_verification ... ok [INFO] [stdout] test repo::tests::test_converge_spec_not_found ... ok [INFO] [stdout] test repo::tests::test_converge_no_seals ... ok [INFO] [stdout] test repo::tests::test_context_filter_with_spec_scope ... ok [INFO] [stdout] test repo::tests::test_diff_after_modification ... ok [INFO] [stdout] test repo::tests::test_diff_no_seals_yet ... ok [INFO] [stdout] test repo::tests::test_diff_after_deletion ... ok [INFO] [stdout] test repo::tests::test_context_spec_progress ... ok [INFO] [stdout] test repo::tests::test_diff_clean_working_tree ... ok [INFO] [stdout] test repo::tests::test_context_spec_scoped ... ok [INFO] [stdout] test repo::tests::test_diff_seals_nonexistent ... ok [INFO] [stdout] test repo::tests::test_init_creates_structure ... ok [INFO] [stdout] test repo::tests::test_init_twice_fails ... ok [INFO] [stdout] test repo::tests::test_converge_disjoint_files ... ok [INFO] [stdout] test repo::tests::test_diff_seal_first_seal ... ok [INFO] [stdout] test repo::tests::test_context_seal_limit ... ok [INFO] [stdout] test repo::tests::test_lifecycle_active_to_cancelled ... ok [INFO] [stdout] test repo::tests::test_get_seal_by_short_id ... ok [INFO] [stdout] test repo::tests::test_lifecycle_active_to_stale ... ok [INFO] [stdout] test repo::tests::test_converge_overlapping_clean ... ok [INFO] [stdout] test repo::tests::test_diff_seals ... ok [INFO] [stdout] test repo::tests::test_lifecycle_active_to_completed ... ok [INFO] [stdout] test repo::tests::test_converge_overlapping_conflict ... ok [INFO] [stdout] test repo::tests::test_lifecycle_nonexistent_spec_errors ... ok [INFO] [stdout] test repo::tests::test_diff_seal_with_parent ... ok [INFO] [stdout] test repo::tests::test_lifecycle_allows_completed_to_active ... ok [INFO] [stdout] test repo::tests::test_lifecycle_cancelled_to_archived ... ok [INFO] [stdout] test repo::tests::test_lifecycle_completed_to_archived ... ok [INFO] [stdout] test repo::tests::test_open_nonexistent_fails ... ok [INFO] [stdout] test repo::tests::test_lifecycle_noop_same_state_rejected ... ok [INFO] [stdout] test repo::tests::test_lifecycle_stale_to_active ... ok [INFO] [stdout] test repo::tests::test_lifecycle_rejects_active_to_archived_directly ... ok [INFO] [stdout] test repo::tests::test_log_empty ... ok [INFO] [stdout] test repo::tests::test_no_writignore_uses_defaults ... ok [INFO] [stdout] test repo::tests::test_lifecycle_rejects_cancelled_to_active ... ok [INFO] [stdout] test repo::tests::test_log_after_seals ... ok [INFO] [stdout] test repo::tests::test_lifecycle_stale_to_cancelled ... ok [INFO] [stdout] test repo::tests::test_lifecycle_rejects_archived_to_any ... ok [INFO] [stdout] test repo::tests::test_seal_accepts_valid_agent_id ... ok [INFO] [stdout] test repo::tests::test_restore_nonexistent_seal ... ok [INFO] [stdout] test repo::tests::test_resolve_seal_id_short ... ok [INFO] [stdout] test repo::tests::test_save_seal_rejects_overwrite ... ok [INFO] [stdout] test repo::tests::test_restore_deletes_files ... ok [INFO] [stdout] test repo::tests::test_restore_to_previous_seal ... ok [INFO] [stdout] test repo::tests::test_restore_creates_files ... ok [INFO] [stdout] test repo::tests::test_restore_to_current_head ... ok [INFO] [stdout] test repo::tests::test_seal_allow_empty_false_still_fails ... ok [INFO] [stdout] test repo::tests::test_seal_nothing_fails ... ok [INFO] [stdout] test repo::tests::test_seal_allow_empty ... ok [INFO] [stdout] test repo::tests::test_restore_updates_head_and_index ... ok [INFO] [stdout] test repo::tests::test_seal_integrity_after_overwrite_attempt ... ok [INFO] [stdout] test repo::tests::test_seal_holds_lock ... ok [INFO] [stdout] test repo::tests::test_seal_auto_promote_respects_blocked ... ok [INFO] [stdout] test repo::tests::test_seal_nudge_absent_when_clean ... ok [INFO] [stdout] test repo::tests::test_seal_paths_multiple_files ... ok [INFO] [stdout] test repo::tests::test_seal_nudge_present_when_dirty ... ok [INFO] [stdout] test repo::tests::test_seal_paths_directory_prefix ... ok [INFO] [stdout] test repo::tests::test_seal_allow_empty_with_spec ... ok [INFO] [stdout] test repo::tests::test_seal_paths_nothing_matching ... ok [INFO] [stdout] test repo::tests::test_seal_auto_promote_never_downgrades ... ok [INFO] [stdout] test repo::tests::test_seal_paths_allow_empty ... ok [INFO] [stdout] test repo::tests::test_seal_rejects_invalid_agent_id ... ok [INFO] [stdout] test repo::tests::test_seal_paths_interleaved_with_seal_all ... ok [INFO] [stdout] test repo::tests::test_seal_paths_selective ... ok [INFO] [stdout] test repo::tests::test_spec_backwards_compat_deserialize ... ok [INFO] [stdout] test repo::tests::test_spec_new_has_empty_enrichment_fields ... ok [INFO] [stdout] test repo::tests::test_spec_serializes_with_enrichment ... ok [INFO] [stdout] test repo::tests::test_spec_serializes_without_empty_fields ... ok [INFO] [stdout] test repo::tests::test_seal_auto_promotes_spec_status ... ok [INFO] [stdout] test repo::tests::test_seal_verification_default ... ok [INFO] [stdout] test repo::tests::test_seal_verification_in_log ... ok [INFO] [stdout] test repo::tests::test_spec_lifecycle ... ok [INFO] [stdout] test repo::tests::test_state_clean_after_init ... ok [INFO] [stdout] test repo::tests::test_seal_paths_with_spec ... ok [INFO] [stdout] test repo::tests::test_seal_summary_includes_changed_paths ... ok [INFO] [stdout] test repo::tests::test_seal_with_new_file ... ok [INFO] [stdout] test repo::tests::test_update_spec_not_found ... ok [INFO] [stdout] test repo::tests::test_update_spec_acceptance_criteria ... ok [INFO] [stdout] test repo::tests::test_update_spec_file_scope ... ok [INFO] [stdout] test repo::tests::test_update_spec_design_notes ... ok [INFO] [stdout] test repo::tests::test_update_spec_depends_on ... ok [INFO] [stdout] test repo::tests::test_update_spec_persists ... ok [INFO] [stdout] test repo::tests::test_seal_store_no_delete_path ... ok [INFO] [stdout] test repo::tests::test_summary_derives_status_from_seals ... ok [INFO] [stdout] test repo::tests::test_seal_with_verification ... ok [INFO] [stdout] test repo::tests::test_validate_path_accepts_normal ... ok [INFO] [stdout] test repo::tests::test_update_spec_unaffected_by_duplicate_guard ... ok [INFO] [stdout] test repo::tests::test_validate_path_rejects_nested_traversal ... ok [INFO] [stdout] test repo::tests::test_writignore_hides_files ... ok [INFO] [stdout] test repo::tests::test_validate_path_rejects_parent_traversal ... ok [INFO] [stdout] test repo::workspace_tests::test_active_workspace_defaults_to_main ... ok [INFO] [stdout] test repo::verify_all_chains_tests::test_verify_all_chains_empty_repo ... ok [INFO] [stdout] test repo::workspace_tests::test_assign_nonexistent_spec_errors ... ok [INFO] [stdout] test repo::tests::test_validate_path_rejects_absolute ... ok [INFO] [stdout] test repo::tests::test_update_spec_tech_stack ... ok [INFO] [stdout] test repo::tests::test_update_spec_status ... ok [INFO] [stdout] test repo::verify_all_chains_tests::test_verify_all_chains_head_only ... ok [INFO] [stdout] test repo::workspace_tests::test_assign_spec_to_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_assign_preserves_other_spec_fields ... ok [INFO] [stdout] test repo::workspace_tests::test_assign_to_nonexistent_workspace_errors ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_explicit_overrides ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_pending_spec_before_first_seal ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_zero_claimed_specs ... ok [INFO] [stdout] test repo::verify_all_chains_tests::test_verify_all_chains_with_spec_branch ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_different_agent_not_found ... ok [INFO] [stdout] test repo::workspace_tests::test_backward_compat_single_agent_no_spec ... ok [INFO] [stdout] test repo::workspace_tests::test_context_from_main_omits_task ... ok [INFO] [stdout] test repo::verify_all_chains_tests::test_verify_all_chains_multiple_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_single_claimed_spec ... ok [INFO] [stdout] test repo::workspace_tests::test_context_dependency_awareness ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_ignores_completed_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_context_cross_workspace_dependency_shown ... ok [INFO] [stdout] test repo::workspace_tests::test_auto_scope_multiple_claimed_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_context_main_workspace_shows_all_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_context_no_assigned_spec_omits_task ... ok [INFO] [stdout] test repo::workspace_tests::test_chain_subtraction_excludes_other_agents_changes ... ok [INFO] [stdout] test repo::workspace_tests::test_chain_subtraction_fallback_no_recent_seals ... ok [INFO] [stdout] test repo::workspace_tests::test_context_from_workspace_shows_task ... ok [INFO] [stdout] test repo::workspace_tests::test_context_task_appears_before_specs_in_output ... ok [INFO] [stdout] test repo::workspace_tests::test_context_task_after_spec_done_shows_complete ... ok [INFO] [stdout] test repo::workspace_tests::test_context_task_fields_correct ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_empty_list ... ok [INFO] [stdout] test repo::workspace_tests::test_chain_subtraction_keeps_same_file_different_content ... ok [INFO] [stdout] test repo::workspace_tests::test_context_workspace_scoped_filters_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_rejects_main ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_nonexistent_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_assigns_spec_to_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_dry_run_no_apply ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_creates_spec ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_no_changes_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_conflict_with_escalate ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_overlapping_clean_merge ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_custom_id_override ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_creates_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_context_no_workspace_filter_returns_full_context ... ok [INFO] [stdout] test repo::workspace_tests::test_convergence_on_same_directory_seals ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_gitignore_updated ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_result_fields_complete ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_workspace_at_project_root ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_duplicate_title_allowed_different_ids ... ok [INFO] [stdout] test repo::workspace_tests::test_converge_workspaces_non_overlapping_changes ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_gitignore_not_duplicated ... ok [INFO] [stdout] test repo::workspace_tests::test_context_workspace_scoped_filters_seals ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_suggested_prompt_already_has_period ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_copies_head ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_rejects_invalid_names ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_happy_path ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_pointer_file_content ... ok [INFO] [stdout] test repo::workspace_tests::test_create_task_suggested_prompt_capitalized ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_creates_state_directory ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_copies_index ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_main_workspace_rejected ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_rejects_path_with_writ_dir ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_rejects_duplicate_name ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_with_explicit_path ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_nonexistent_workspace_errors ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_workspace_removes_state ... ok [INFO] [stdout] test repo::workspace_tests::test_create_workspace_from_another_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_workspace_unassigns_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_workspace_keep_files ... ok [INFO] [stdout] test repo::workspace_tests::test_find_last_seal_for_spec_and_agent ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_cleanup_deletes_workspace_state ... ok [INFO] [stdout] test repo::workspace_tests::test_delete_workspace_preserves_seals ... ok [INFO] [stdout] test repo::workspace_tests::test_generate_spec_id_different_titles ... ok [INFO] [stdout] test repo::workspace_tests::test_generate_spec_id_format ... ok [INFO] [stdout] test repo::workspace_tests::test_generate_spec_id_uniqueness ... ok [INFO] [stdout] test repo::workspace_tests::test_integration_duplicate_task_id_error ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_cleanup_keep_files_preserves_dir ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_no_workspaces_converge_is_noop ... ok [INFO] [stdout] test repo::workspace_tests::test_first_seal_may_over_capture_safely ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_clean_convergence_applies_files ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_convergence_report_fields ... ok [INFO] [stdout] test repo::workspace_tests::test_open_from_dir_falls_back_to_open ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_with_workspaces_auto_converges ... ok [INFO] [stdout] test repo::workspace_tests::test_integration_two_tasks_independent ... ok [INFO] [stdout] test repo::workspace_tests::test_open_workspace_invalid_name_errors ... ok [INFO] [stdout] test repo::workspace_tests::test_integration_task_lifecycle ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_escalation_blocks_convergence ... ok [INFO] [stdout] test repo::workspace_tests::test_finish_single_workspace_trivial_convergence ... ok [INFO] [stdout] test repo::workspace_tests::test_plan_creates_hash_ids_with_slugs ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_ambiguous_slug ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_exact_id ... ok [INFO] [stdout] test repo::workspace_tests::test_plan_same_title_twice_succeeds ... ok [INFO] [stdout] test repo::workspace_tests::test_open_workspace_sets_active ... ok [INFO] [stdout] test repo::workspace_tests::test_open_from_dir_detects_workspace_pointer ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_empty_input ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_case_insensitive_slug ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_backward_compat_no_convergence_field ... ok [INFO] [stdout] test repo::workspace_tests::test_over_capture_resolves_after_first_round ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_exact_slug ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_legacy_spec_no_slug ... ok [INFO] [stdout] test repo::workspace_tests::test_reassign_changes_workspace ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_slug_prefix ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_id_prefix ... ok [INFO] [stdout] test repo::workspace_tests::test_resolve_spec_not_found ... ok [INFO] [stdout] test repo::workspace_tests::test_integration_two_tasks_seal_converge_cleanup ... ok [INFO] [stdout] test repo::workspace_tests::test_four_agents_same_directory_independent_seals ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_config_disabled ... ok [INFO] [stdout] test format::tests::benchmark_fleet_scaling ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_genesis_snapshot_at_spec_creation ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_failure_does_not_block_seal ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_deleted_file_attributed_to_deleter ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_new_file_attributed_to_creator ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_legacy_spec_without_genesis_uses_empty ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_serialization_roundtrip ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_no_convergence_without_spec ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_result_in_seal_struct ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_preserves_seal_integrity ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_tags_workspace_name ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_spec_scoped_no_changes ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_consecutive_specials_collapsed ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_leading_trailing_trimmed ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_long_title_truncated ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_mixed_case ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_spaces_to_hyphens ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_special_chars ... ok [INFO] [stdout] test repo::workspace_tests::test_slugify_unicode ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_race_two_agents_seal_simultaneously ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_without_spec_captures_full_directory ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_uses_genesis_index_for_first_seal ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_two_agents_same_file_both_captured ... ok [INFO] [stdout] test repo::workspace_tests::test_spec_auto_claim_on_first_seal ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_no_convergence_without_overlap ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_with_three_specs ... ok [INFO] [stdout] test repo::workspace_tests::test_spec_claim_already_claimed_fails ... ok [INFO] [stdout] test repo::workspace_tests::test_spec_claim_idempotent_same_agent ... ok [INFO] [stdout] test repo::workspace_tests::test_status_no_untracked_on_clean_working_dir ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_uses_last_agent_seal_as_baseline ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_with_spec_captures_only_spec_files ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_convergence_idempotent ... ok [INFO] [stdout] test repo::workspace_tests::test_seal_triggers_convergence_on_overlap ... ok [INFO] [stdout] test repo::workspace_tests::test_spec_claim_success ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_adds_workspaces_entry ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_already_present_skips ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_creates_file_if_missing ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_custom_workspace_root ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_preserves_existing_content ... ok [INFO] [stdout] test repo::workspace_tests::test_wv19_gitignore_idempotent ... ok [INFO] [stdout] test security::tests::test_append_only_multiple_flags ... ok [INFO] [stdout] test security::tests::test_audit_logger_creates_gc_directory ... ok [INFO] [stdout] test security::tests::test_audit_logger_appends_multiple ... ok [INFO] [stdout] test security::tests::test_audit_logger_no_file ... ok [INFO] [stdout] test security::tests::test_audit_logger_read_last ... ok [INFO] [stdout] test repo::workspace_tests::test_status_no_untracked_when_all_sealed ... ok [INFO] [stdout] test security::tests::test_audit_record_creation ... ok [INFO] [stdout] test security::tests::test_audit_record_json_roundtrip ... ok [INFO] [stdout] test security::tests::test_audit_record_unique_ids ... ok [INFO] [stdout] test security::tests::test_auto_creates_directory ... ok [INFO] [stdout] test security::tests::test_clean_events_no_file ... ok [INFO] [stdout] test security::tests::test_audit_logger_write_and_read ... ok [INFO] [stdout] test security::tests::test_clean_events_nothing_to_clean ... ok [INFO] [stdout] test repo::workspace_tests::test_ws18_single_workspace_list ... ok [INFO] [stdout] test security::tests::test_clean_events_preserves_critical_within_retention ... ok [INFO] [stdout] test security::tests::test_clean_events_idempotent ... ok [INFO] [stdout] test security::tests::test_clean_events_removes_old_info ... ok [INFO] [stdout] test security::tests::test_concurrent_writes_no_corruption ... ok [INFO] [stdout] test security::tests::test_clean_events_preserves_warnings_within_retention ... ok [INFO] [stdout] test security::tests::test_custom_retention_config ... ok [INFO] [stdout] test security::tests::test_emit_and_read_events ... ok [INFO] [stdout] test security::tests::test_emit_agent_revoked_convenience ... ok [INFO] [stdout] test security::tests::test_emit_authentication_failure ... ok [INFO] [stdout] test security::tests::test_emit_chain_hash_failure ... ok [INFO] [stdout] test repo::workspace_tests::test_ws18_multiple_workspaces_listed ... ok [INFO] [stdout] test security::tests::test_emit_convergence_completed_event ... ok [INFO] [stdout] test repo::workspace_tests::test_unassign_spec_from_workspace ... ok [INFO] [stdout] test security::tests::test_critical_event_long_retention ... ok [INFO] [stdout] test repo::workspace_tests::test_status_detects_untracked_file_changes ... ok [INFO] [stdout] test security::tests::test_flag_reason_serde_roundtrip ... ok [INFO] [stdout] test security::tests::test_event_json_roundtrip ... ok [INFO] [stdout] test security::tests::test_emit_convergence_escalation_event ... ok [INFO] [stdout] test security::tests::test_flagged_seal_json_roundtrip ... ok [INFO] [stdout] test security::tests::test_emit_convergence_degraded_event ... ok [INFO] [stdout] test security::tests::test_emit_convergence_started_event ... ok [INFO] [stdout] test security::tests::test_emit_unrecognized_agent ... ok [INFO] [stdout] test security::tests::test_gc_trigger_serde ... ok [INFO] [stdout] test security::tests::test_emit_scope_violation_convenience ... ok [INFO] [stdout] test repo::workspace_tests::test_workspace_config_records_ancestor ... ok [INFO] [stdout] test security::tests::test_flagged_seal_store_empty ... ok [INFO] [stdout] test repo::workspace_tests::test_ws18_workspace_spec_counts_accurate ... ok [INFO] [stdout] test security::tests::test_retention_config_defaults ... ok [INFO] [stdout] test security::tests::test_retention_config_serde_roundtrip ... ok [INFO] [stdout] test security::tests::test_flag_seal_and_load ... ok [INFO] [stdout] test settings::tests::test_backward_compat_new_field ... ok [INFO] [stdout] test settings::tests::test_default_settings ... ok [INFO] [stdout] test settings::tests::test_empty_convergence_not_serialized ... ok [INFO] [stdout] test settings::tests::test_get_set_bool_key ... ok [INFO] [stdout] test settings::tests::test_get_set_float_key ... ok [INFO] [stdout] test settings::tests::test_get_set_string_key ... ok [INFO] [stdout] test settings::tests::test_get_unset_key_returns_none ... ok [INFO] [stdout] test settings::tests::test_is_valid_key ... ok [INFO] [stdout] test settings::tests::test_keys_schema_completeness ... ok [INFO] [stdout] test security::tests::test_read_events_no_file ... ok [INFO] [stdout] test security::tests::test_multiple_events_appended ... ok [INFO] [stdout] test security::tests::test_warning_event_within_default_retention ... ok [INFO] [stdout] test security::tests::test_info_event_past_default_retention ... ok [INFO] [stdout] test security::tests::test_retention_empty_events_file ... ok [INFO] [stdout] test security::tests::test_severity_filter ... ok [INFO] [stdout] test security::tests::test_flagged_ids_returns_set ... ok [INFO] [stdout] test repo::workspace_tests::test_two_workspaces_exist_simultaneously ... ok [INFO] [stdout] test settings::tests::test_save_and_load_roundtrip ... ok [INFO] [stdout] test settings::tests::test_corrupt_settings_json_falls_back_to_defaults ... ok [INFO] [stdout] test settings::tests::test_load_missing_file ... ok [INFO] [stdout] test repo::workspace_tests::test_workspace_independent_head_and_index ... ok [INFO] [stdout] test settings::tests::test_set_confidence_out_of_range ... ok [INFO] [stdout] test settings::tests::test_set_invalid_bool ... ok [INFO] [stdout] test settings::tests::test_set_invalid_format ... ok [INFO] [stdout] test settings::tests::test_unknown_key_error ... ok [INFO] [stdout] test skills::tests::test_all_names_start_with_writ ... ok [INFO] [stdout] test settings::tests::test_unset_resets_to_none ... ok [INFO] [stdout] test skills::tests::test_all_skills_have_name_in_frontmatter ... ok [INFO] [stdout] test skills::tests::test_all_templates_have_content ... ok [INFO] [stdout] test skills::tests::test_all_skills_have_yaml_frontmatter ... ok [INFO] [stdout] test settings::tests::test_strategy_validates_v2_names ... ok [INFO] [stdout] test skills::tests::test_no_invalid_frontmatter_fields ... ok [INFO] [stdout] test skills::tests::test_auto_invoke_count ... ok [INFO] [stdout] test settings::tests::test_set_invalid_strategy ... ok [INFO] [stdout] test skills::tests::test_template_count ... ok [INFO] [stdout] test skills::tests::test_template_names_unique ... ok [INFO] [stdout] test skills::tests::test_tier1_skills_auto_invoke_by_default ... ok [INFO] [stdout] test skills::tests::test_tier1_skills_have_supporting_files ... ok [INFO] [stdout] test slash_commands::tests::test_all_templates_have_content ... ok [INFO] [stdout] test slash_commands::tests::test_all_templates_start_with_writ ... ok [INFO] [stdout] test slash_commands::tests::test_context_template_mentions_toon ... ok [INFO] [stdout] test slash_commands::tests::test_context_template_says_run_first ... ok [INFO] [stdout] test slash_commands::tests::test_diff_template_has_correct_flags ... ok [INFO] [stdout] test slash_commands::tests::test_finish_template_warns_agents ... ok [INFO] [stdout] test skills::tests::test_remove_noop_when_no_skills ... ok [INFO] [stdout] test slash_commands::tests::test_generate_creates_all_files ... ok [INFO] [stdout] test slash_commands::tests::test_generate_idempotent ... ok [INFO] [stdout] test slash_commands::tests::test_remove_noop_when_no_commands_dir ... ok [INFO] [stdout] test skills::tests::test_remove_cleans_writ_skills ... ok [INFO] [stdout] test skills::tests::test_skill_md_starts_with_frontmatter ... ok [INFO] [stdout] test slash_commands::tests::test_seal_template_has_spec_flag ... ok [INFO] [stdout] test slash_commands::tests::test_seal_template_references_spec_done ... ok [INFO] [stdout] test skills::tests::test_all_supporting_files_have_generated_header ... ok [INFO] [stdout] test skills::tests::test_generate_idempotent ... ok [INFO] [stdout] test skills::tests::test_generate_creates_directories ... ok [INFO] [stdout] test skills::tests::test_generate_updates_changed_content ... ok [INFO] [stdout] test slash_commands::tests::test_spec_add_template_has_required_flags ... ok [INFO] [stdout] test slash_commands::tests::test_spec_done_template_mentions_finish ... ok [INFO] [stdout] test slash_commands::tests::test_workspace_create_template ... ok [INFO] [stdout] test slash_commands::tests::test_workspace_status_template ... ok [INFO] [stdout] test spec::tests::test_backward_compat_missing_lifecycle_state ... ok [INFO] [stdout] test slash_commands::tests::test_template_count ... ok [INFO] [stdout] test slash_commands::tests::test_workspace_list_template ... ok [INFO] [stdout] test spec::tests::test_backward_compat_missing_commit_fields ... ok [INFO] [stdout] test spec::tests::test_commit_state_default_is_uncommitted ... ok [INFO] [stdout] test slash_commands::tests::test_template_names_unique ... ok [INFO] [stdout] test spec::tests::test_is_committable_false_when_not_complete ... ok [INFO] [stdout] test spec::tests::test_legacy_spec_without_workspace_deserializes_to_none ... ok [INFO] [stdout] test spec::tests::test_is_committable_false_when_already_committed ... ok [INFO] [stdout] test spec::tests::test_lifecycle_state_default_is_active ... ok [INFO] [stdout] test spec::tests::test_lifecycle_state_serde_values ... ok [INFO] [stdout] test spec::tests::test_mark_pushed ... ok [INFO] [stdout] test spec::tests::test_new_spec_has_no_workspace ... ok [INFO] [stdout] test spec::tests::test_new_spec_has_uncommitted_state ... ok [INFO] [stdout] test spec::tests::test_reopen_clears_commit_state ... ok [INFO] [stdout] test spec::tests::test_is_committable_complete_and_uncommitted ... ok [INFO] [stdout] test spec::tests::test_roundtrip_with_commit_fields ... ok [INFO] [stdout] test spec::tests::test_lifecycle_state_serialization_roundtrip ... ok [INFO] [stdout] test spec::tests::test_mark_committed ... ok [INFO] [stdout] test spec::tests::test_spec_new_has_active_lifecycle ... ok [INFO] [stdout] test spec::tests::test_commit_state_serde_values ... ok [INFO] [stdout] test spec::tests::test_spec_status_from_str ... ok [INFO] [stdout] test spec::tests::test_spec_workspace_none_not_serialized ... ok [INFO] [stdout] test skills::tests::test_generate_supporting_files ... ok [INFO] [stdout] test state::tests::brief_shows_mixed_counts ... ok [INFO] [stdout] test spec::tests::test_spec_workspace_serialization_roundtrip ... ok [INFO] [stdout] test state::tests::brief_shows_new_count ... ok [INFO] [stdout] test state::tests::brief_omits_zero_categories ... ok [INFO] [stdout] test state::tests::brief_returns_clean_for_empty_changes ... ok [INFO] [stdout] test state::tests::compute_state_clean_empty_repo ... ok [INFO] [stdout] test state::tests::compute_state_detects_deleted_file ... ok [INFO] [stdout] test state::tests::compute_state_detects_modified_file ... ok [INFO] [stdout] test state::tests::compute_state_clean_when_files_match_index ... ok [INFO] [stdout] test state::tests::compute_state_detects_new_file ... ok [INFO] [stdout] test state::tests::compute_state_detects_multiple_new_files ... ok [INFO] [stdout] test slash_commands::tests::test_generate_updates_changed_content ... ok [INFO] [stdout] test state::tests::compute_state_handles_nested_directories ... ok [INFO] [stdout] test state::tests::compute_state_ignores_git_directory ... ok [INFO] [stdout] test skills::tests::test_supporting_files_idempotent ... ok [INFO] [stdout] test state::tests::compute_state_ignores_writ_directory ... ok [INFO] [stdout] test state::tests::compute_state_respects_custom_dir_ignore ... ok [INFO] [stdout] test state::tests::compute_state_mixed_new_modified_deleted ... ok [INFO] [stdout] test state::tests::file_status_serializes_to_lowercase ... ok [INFO] [stdout] test skills::tests::test_remove_preserves_non_writ_skills ... ok [INFO] [stdout] test state::tests::is_clean_returns_true_when_no_changes ... ok [INFO] [stdout] test status::tests::test_spec_brief_serializes ... ok [INFO] [stdout] test status::tests::test_spec_brief_with_summary ... ok [INFO] [stdout] test status::tests::test_status_output_serializes ... ok [INFO] [stdout] test status::tests::test_status_roundtrip ... ok [INFO] [stdout] test state::tests::compute_state_respects_custom_file_ignore_patterns ... ok [INFO] [stdout] test state::tests::tracked_count_includes_deleted_files ... ok [INFO] [stdout] test state::tests::modified_file_hash_reflects_new_content ... ok [INFO] [stdout] test state::tests::compute_state_unchanged_file_not_in_changes ... ok [INFO] [stdout] test state::tests::new_file_hash_matches_content ... ok [INFO] [stdout] test state::tests::is_clean_returns_false_when_changes_exist ... ok [INFO] [stdout] test state::tests::tracked_count_reflects_index_size ... ok [INFO] [stdout] test state::tests::compute_state_output_is_sorted ... ok [INFO] [stdout] test slash_commands::tests::test_remove_preserves_non_writ_files ... ok [INFO] [stdout] test watch::tests::test_conflict_record_persistence ... ok [INFO] [stdout] test slash_commands::tests::test_remove_removes_all_writ_files ... ok [INFO] [stdout] test watch::tests::test_watch_stop_signal ... ok [INFO] [stdout] test workspace::tests::test_consecutive_hyphens_rejected ... ok [INFO] [stdout] test workspace::tests::test_empty_name_rejected ... ok [INFO] [stdout] test workspace::tests::test_leading_trailing_hyphen_rejected ... ok [INFO] [stdout] test workspace::tests::test_special_chars_rejected ... ok [INFO] [stdout] test workspace::tests::test_uppercase_rejected ... ok [INFO] [stdout] test workspace::tests::test_valid_workspace_names ... ok [INFO] [stdout] test workspace::tests::test_workspace_config_serialization ... ok [INFO] [stdout] test workspace::tests::test_workspace_pointer_roundtrip ... ok [INFO] [stdout] test watch::tests::test_watch_detects_new_seal ... ok [INFO] [stdout] test watch::tests::test_watch_respects_auto_converge_false ... ok [INFO] [stdout] test watch::tests::test_watch_no_overlap_no_convergence ... ok [INFO] [stdout] test watch::tests::test_watch_auto_converge_on_overlap ... ok [INFO] [stdout] test watch::tests::test_watch_conflict_recorded ... ok [INFO] [stdout] test watch::tests::test_watch_retroactive_scan_on_first_cycle ... ok [INFO] [stdout] test watch::tests::test_watch_retroactive_scan_on_first_cycle ... ok [INFO] [stdout] test watch::tests::test_watch_summary ... ok [INFO] [stdout] test watch::tests::test_watch_re_converges_on_new_seal_from_participant ... ok [INFO] [stdout] test watch::tests::test_watch_detects_overlap ... ok [INFO] [stdout] test format::tests::benchmark_token_summary_report ... ok [INFO] [stdout] test repo::scale_tests::test_scale_context_with_many_seals ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_500_seals_all_scopes has been running for over 60 seconds [INFO] [stdout] test repo::scale_tests::test_scale_500_seals_linear_chain ... ok [INFO] [stdout] test repo::scale_tests::test_scale_parallel_specs has been running for over 60 seconds [INFO] [stdout] test repo::scale_tests::test_scale_parallel_specs ... ok [INFO] [stdout] test repo::context_edge_case_tests::test_context_500_seals_all_scopes ... ok [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- crypto::tests::test_chain_with_100_seals_performance stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'crypto::tests::test_chain_with_100_seals_performance' (791) panicked at crates/writ-core/src/crypto.rs:594:9: [INFO] [stdout] 100-seal chain creation + verification took 5.450952752s [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x5c76a9e9dd8a - std[128c3efe2914e152]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x5c76a9e9dd8a - std[128c3efe2914e152]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x5c76a9e9dd8a - std[128c3efe2914e152]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x5c76a9e9dd8a - <::print::DisplayBacktrace as core[6771d259883166e6]::fmt::Display>::fmt [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x5c76a9eb60fa - ::fmt [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x5c76a9eb60fa - core[6771d259883166e6]::fmt::write [INFO] [stdout] 6: 0x5c76a9ea32b2 - std[128c3efe2914e152]::io::default_write_fmt::> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/io/mod.rs:621:11 [INFO] [stdout] 7: 0x5c76a9ea32b2 - as std[128c3efe2914e152]::io::Write>::write_fmt [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/io/mod.rs:1976:13 [INFO] [stdout] 8: 0x5c76a9e783df - ::print [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x5c76a9e783df - std[128c3efe2914e152]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x5c76a9e93e69 - std[128c3efe2914e152]::panicking::default_hook [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x5c76a9b6c17c - core[6771d259883166e6]::ops::function::Fn<(&'a std[128c3efe2914e152]::panic::PanicHookInfo<'b>,), Output = ()> + core[6771d259883166e6]::marker::Sync + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::Fn<(&std[128c3efe2914e152]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2263:9 [INFO] [stdout] 12: 0x5c76a9b6c17c - test[b137923399915ecf]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x5c76a9e940e2 - core[6771d259883166e6]::ops::function::Fn<(&'a std[128c3efe2914e152]::panic::PanicHookInfo<'b>,), Output = ()> + core[6771d259883166e6]::marker::Sync + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::Fn<(&std[128c3efe2914e152]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2263:9 [INFO] [stdout] 14: 0x5c76a9e940e2 - std[128c3efe2914e152]::panicking::panic_with_hook [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x5c76a9e78498 - std[128c3efe2914e152]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x5c76a9e6ce29 - std[128c3efe2914e152]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x5c76a9e793ed - __rustc[752cc74e29381ccc]::rust_begin_unwind [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x5c76a9eb693c - core[6771d259883166e6]::panicking::panic_fmt [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x5c76a8d981ef - writ_core::crypto::tests::test_chain_with_100_seals_performance::h8e7990e1ea816caa [INFO] [stdout] at /opt/rustwide/workdir/crates/writ-core/src/crypto.rs:594:9 [INFO] [stdout] 20: 0x5c76a8d98867 - writ_core::crypto::tests::test_chain_with_100_seals_performance::{{closure}}::h00e96f7e3ec1bb6d [INFO] [stdout] at /opt/rustwide/workdir/crates/writ-core/src/crypto.rs:568:47 [INFO] [stdout] 21: 0x5c76a8e032b6 - core::ops::function::FnOnce::call_once::hf88e6e30f7c15a93 [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 22: 0x5c76a9b6027b - core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 23: 0x5c76a9b6027b - test[b137923399915ecf]::__rust_begin_short_backtrace::, fn() -> core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:663:18 [INFO] [stdout] 24: 0x5c76a9b6cc4b - test[b137923399915ecf]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:686:74 [INFO] [stdout] 25: 0x5c76a9b6cc4b - as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 26: 0x5c76a9b6cc4b - std[128c3efe2914e152]::panicking::catch_unwind::do_call::, core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:581:40 [INFO] [stdout] 27: 0x5c76a9b6cc4b - std[128c3efe2914e152]::panicking::catch_unwind::, core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:544:19 [INFO] [stdout] 28: 0x5c76a9b6cc4b - std[128c3efe2914e152]::panic::catch_unwind::, core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panic.rs:359:14 [INFO] [stdout] 29: 0x5c76a9b6cc4b - test[b137923399915ecf]::run_test_in_process [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:686:27 [INFO] [stdout] 30: 0x5c76a9b6cc4b - test[b137923399915ecf]::run_test::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:607:43 [INFO] [stdout] 31: 0x5c76a9b670a4 - test[b137923399915ecf]::run_test::{closure#1} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:637:41 [INFO] [stdout] 32: 0x5c76a9b670a4 - std[128c3efe2914e152]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 33: 0x5c76a9b6f852 - std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 34: 0x5c76a9b6f852 - ::{closure#1}::{closure#0}> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 35: 0x5c76a9b6f852 - std[128c3efe2914e152]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:581:40 [INFO] [stdout] 36: 0x5c76a9b6f852 - std[128c3efe2914e152]::panicking::catch_unwind::<(), core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:544:19 [INFO] [stdout] 37: 0x5c76a9b6f852 - std[128c3efe2914e152]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panic.rs:359:14 [INFO] [stdout] 38: 0x5c76a9b6f852 - std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 39: 0x5c76a9b6f852 - ::{closure#1} as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 40: 0x5c76a9e9cdbf - + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2249:9 [INFO] [stdout] 41: 0x5c76a9e9cdbf - ::new::thread_start [INFO] [stdout] at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 42: 0x709182defaa4 - [INFO] [stdout] 43: 0x709182e7ca64 - clone [INFO] [stdout] 44: 0x0 - [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] crypto::tests::test_chain_with_100_seals_performance [INFO] [stdout] [INFO] [stdout] test result: FAILED. 1994 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 79.46s [INFO] [stdout] [INFO] [stderr] error: test failed, to rerun pass `-p writ-core --lib` [INFO] running `Command { std: "docker" "inspect" "72772de368b5fccd041b4c9cd7342df6dd439bd072ce55c282444c9c60fb67e4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "72772de368b5fccd041b4c9cd7342df6dd439bd072ce55c282444c9c60fb67e4", kill_on_drop: false }` [INFO] [stdout] 72772de368b5fccd041b4c9cd7342df6dd439bd072ce55c282444c9c60fb67e4