[INFO] cloning repository https://github.com/xshi6074-cmd/wonderful_helper
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/xshi6074-cmd/wonderful_helper" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxshi6074-cmd%2Fwonderful_helper", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxshi6074-cmd%2Fwonderful_helper'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b565b6260066f5cad81415bbeb731413fb8ce4ac
[INFO] testing xshi6074-cmd/wonderful_helper against 1.99.0-beta.8 for beta-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxshi6074-cmd%2Fwonderful_helper" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/xshi6074-cmd/wonderful_helper
[INFO] finished tweaking git repo https://github.com/xshi6074-cmd/wonderful_helper
[INFO] tweaked toml for git repo https://github.com/xshi6074-cmd/wonderful_helper written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/xshi6074-cmd/wonderful_helper on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/xshi6074-cmd/wonderful_helper 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" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded pulldown-cmark-escape v0.11.0
[INFO] [stderr]   Downloaded cssparser-macros v0.7.0
[INFO] [stderr]   Downloaded fallible-streaming-iterator v0.1.9
[INFO] [stderr]   Downloaded cpufeatures v0.3.1
[INFO] [stderr]   Downloaded new_debug_unreachable v1.0.6
[INFO] [stderr]   Downloaded string_cache_codegen v0.6.1
[INFO] [stderr]   Downloaded phf_codegen v0.13.1
[INFO] [stderr]   Downloaded grep-matcher v0.1.9
[INFO] [stderr]   Downloaded flagset v0.4.7
[INFO] [stderr]   Downloaded dtoa-short v0.3.5
[INFO] [stderr]   Downloaded precomputed-hash v0.1.1
[INFO] [stderr]   Downloaded smallvec v1.16.0
[INFO] [stderr]   Downloaded crossbeam-deque v0.8.7
[INFO] [stderr]   Downloaded winnow v0.7.15
[INFO] [stderr]   Downloaded web_atoms v0.2.6
[INFO] [stderr]   Downloaded fallible-iterator v0.3.0
[INFO] [stderr]   Downloaded encoding_rs_io v0.1.8
[INFO] [stderr]   Downloaded http-body-util v0.1.5
[INFO] [stderr]   Downloaded globset v0.4.20
[INFO] [stderr]   Downloaded markup5ever_rcdom v0.38.0+unofficial
[INFO] [stderr]   Downloaded markup5ever v0.38.0
[INFO] [stderr]   Downloaded servo_arc v0.4.3
[INFO] [stderr]   Downloaded string_cache v0.9.0
[INFO] [stderr]   Downloaded markup5ever v0.39.0
[INFO] [stderr]   Downloaded grep-regex v0.1.14
[INFO] [stderr]   Downloaded dtoa v1.0.11
[INFO] [stderr]   Downloaded tokio-rustls v0.26.5
[INFO] [stderr]   Downloaded chacha20 v0.10.2
[INFO] [stderr]   Downloaded tendril v0.5.1
[INFO] [stderr]   Downloaded wasm-streams v0.4.2
[INFO] [stderr]   Downloaded tokio-tungstenite v0.29.0
[INFO] [stderr]   Downloaded grep-searcher v0.1.17
[INFO] [stderr]   Downloaded xml5ever v0.38.0
[INFO] [stderr]   Downloaded html-escape v0.2.15
[INFO] [stderr]   Downloaded toml v0.9.12+spec-1.1.0
[INFO] [stderr]   Downloaded tinyvec v1.13.2
[INFO] [stderr]   Downloaded crossbeam-epoch v0.9.20
[INFO] [stderr]   Downloaded cssparser v0.37.0
[INFO] [stderr]   Downloaded dom_smoothie v0.18.0
[INFO] [stderr]   Downloaded tungstenite v0.29.0
[INFO] [stderr]   Downloaded ignore v0.4.33
[INFO] [stderr]   Downloaded html5ever v0.38.0
[INFO] [stderr]   Downloaded rustls-webpki v0.103.15
[INFO] [stderr]   Downloaded html5ever v0.39.0
[INFO] [stderr]   Downloaded selectors v0.38.0
[INFO] [stderr]   Downloaded cc v1.4.4
[INFO] [stderr]   Downloaded dom_query v0.28.0
[INFO] [stderr]   Downloaded indexmap v2.14.1
[INFO] [stderr]   Downloaded mio v1.2.3
[INFO] [stderr]   Downloaded nom v8.0.0
[INFO] [stderr]   Downloaded pulldown-cmark v0.13.4
[INFO] [stderr]   Downloaded rusqlite v0.37.0
[INFO] [stderr]   Downloaded hyper v1.11.1
[INFO] [stderr]   Downloaded h2 v0.4.19
[INFO] [stderr]   Downloaded quinn-proto v0.11.17
[INFO] [stderr]   Downloaded htmd v0.5.5
[INFO] [stderr]   Downloaded bstr v1.13.1
[INFO] [stderr]   Downloaded gjson v0.8.1
[INFO] [stderr]   Downloaded libsqlite3-sys v0.35.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658
[INFO] running `Command { std: "docker" "start" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v3.0.4
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling smallvec v1.16.0
[INFO] [stderr]    Compiling log v0.4.34
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling fastrand v2.5.0
[INFO] [stderr]    Compiling phf_shared v0.13.1
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling bytes v1.12.1
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling find-msvc-tools v0.1.11
[INFO] [stderr]    Compiling phf_generator v0.13.1
[INFO] [stderr]    Compiling cc v1.4.4
[INFO] [stderr]    Compiling phf_codegen v0.13.1
[INFO] [stderr]    Compiling new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling string_cache_codegen v0.6.1
[INFO] [stderr]    Compiling http v1.5.0
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling web_atoms v0.2.6
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling mio v1.2.3
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tendril v0.5.1
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling http-body v1.1.0
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling zerocopy v0.8.56
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling indexmap v2.14.1
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling phf_macros v0.13.1
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling phf v0.13.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling rustls v0.23.43
[INFO] [stderr]    Compiling dtoa v1.0.11
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling cssparser-macros v0.7.0
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling selectors v0.38.0
[INFO] [stderr]    Compiling string_cache v0.9.0
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.20
[INFO] [stderr]    Compiling icu_provider v2.3.1
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling ipnet v2.12.1
[INFO] [stderr]    Compiling pkg-config v0.3.34
[INFO] [stderr]    Compiling markup5ever v0.38.0
[INFO] [stderr]    Compiling markup5ever v0.39.0
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling sha1 v0.10.7
[INFO] [stderr]    Compiling libsqlite3-sys v0.35.0
[INFO] [stderr]    Compiling cssparser v0.37.0
[INFO] [stderr]    Compiling rand v0.9.5
[INFO] [stderr]    Compiling http-body-util v0.1.5
[INFO] [stderr]    Compiling servo_arc v0.4.3
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling bstr v1.13.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling crossbeam-deque v0.8.7
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling data-encoding v2.11.1
[INFO] [stderr]    Compiling rustc-hash v2.1.3
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling tungstenite v0.29.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling html5ever v0.39.0
[INFO] [stderr]    Compiling xml5ever v0.38.0
[INFO] [stderr]    Compiling html5ever v0.38.0
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling nom v8.0.0
[INFO] [stderr]    Compiling grep-matcher v0.1.9
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling pulldown-cmark v0.13.4
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling markup5ever_rcdom v0.38.0+unofficial
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling tokio-tungstenite v0.29.0
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]    Compiling encoding_rs_io v0.1.8
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling globset v0.4.20
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]    Compiling memmap2 v0.9.11
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling pulldown-cmark-escape v0.11.0
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling html-escape v0.2.15
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling flagset v0.4.7
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling matchit v0.8.4
[INFO] [stderr]    Compiling dom_query v0.28.0
[INFO] [stderr]    Compiling gjson v0.8.1
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling grep-searcher v0.1.17
[INFO] [stderr]    Compiling toml v0.9.12+spec-1.1.0
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling ignore v0.4.33
[INFO] [stderr]    Compiling uuid v1.26.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling htmd v0.5.5
[INFO] [stderr]    Compiling dom_smoothie v0.18.0
[INFO] [stderr]    Compiling grep-regex v0.1.14
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling rusqlite v0.37.0
[INFO] [stderr]    Compiling premortem v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 28s
[INFO] running `Command { std: "docker" "inspect" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling tokio-tungstenite v0.29.0
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling premortem v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 36s
[INFO] running `Command { std: "docker" "inspect" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.47s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/premortem-dfcfce136754a841)
[INFO] [stdout] 
[INFO] [stdout] running 29 tests
[INFO] [stdout] test actions::tests::note_ops_parse_and_are_not_graph_ops ... ok
[INFO] [stdout] test actions::tests::missing_ops_array_is_an_error_not_an_empty_batch ... ok
[INFO] [stdout] test caps::tests::forced_tool_falls_back_by_shape_not_by_giving_up ... ok
[INFO] [stdout] test actions::tests::graph_ops_parse_from_the_shape_the_schema_advertises ... ok
[INFO] [stdout] test actions::tests::one_broken_op_does_not_kill_the_batch_but_is_reported ... ok
[INFO] [stdout] test caps::tests::report_leads_with_the_requirement ... ok
[INFO] [stdout] test caps::tests::every_preset_seeds_a_usable_caps ... ok
[INFO] [stdout] test caps::tests::max_tokens_field_and_stream_usage ... ok
[INFO] [stdout] test caps::tests::temperature_clamped_then_dropped ... ok
[INFO] [stdout] test server::serve_args_tests::double_click_opens_browser_on_default_port ... ok
[INFO] [stdout] test server::serve_args_tests::flag_can_sit_anywhere_and_env_also_disables ... ok
[INFO] [stdout] test caps::tests::glm_53_cannot_disable_thinking ... ok
[INFO] [stdout] test render::tests::labels_cannot_inject_mermaid_and_unknown_visual_values_only_warn ... ok
[INFO] [stdout] test markdown::tests::markdown_cannot_create_executable_links ... ok
[INFO] [stdout] test render::tests::payload_maps_duplicate_labels_groups_and_explicit_edges_by_marker ... ok
[INFO] [stdout] test caps::tests::thinking_is_off_only_where_tools_must_be_forced ... ok
[INFO] [stdout] test caps::tests::unknown_error_stops_the_ladder ... ok
[INFO] [stdout] test server::tests::answers_render_in_live_and_restored_history ... ok
[INFO] [stdout] test server::tests::memory_paths_reject_traversal_and_windows_streams ... ok
[INFO] [stdout] test server::tests::a_broken_section_does_not_veto_independent_ones ... ok
[INFO] [stdout] test web::extraction_tests::extracts_main_dom_preserves_markdown_and_absolutizes_links ... ok
[INFO] [stdout] test web::extraction_tests::respects_declared_non_utf8_charset ... ok
[INFO] [stdout] test server::tests::a_parked_session_is_reclaimed_not_opened_twice ... ok
[INFO] [stdout] test server::tests::out_of_turn_cost_reaches_the_ledger ... ok
[INFO] [stdout] test server::tests::invalid_open_preserves_live_core ... ok
[INFO] [stdout] test server::tests::saving_first_key_starts_a_session_and_drafts_are_readable ... ok
[INFO] [stdout] test server::tests::distill_checks_case_dependencies_against_the_selected_playbook_diff ... ok
[INFO] [stdout] test server::tests::settings_restart_rebuilds_tools_and_preserves_session_history ... ok
[INFO] [stdout] test server::tests::roots_put_only_touches_roots ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.33s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/live.rs (/opt/rustwide/target/debug/deps/live-0550943fd64f79f3)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/premortem-bfc6d44b3b70536a)
[INFO] [stderr]      Running unittests src/bin/serve.rs (/opt/rustwide/target/debug/deps/serve-2c9bfc3f46cd60ee)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/chain_scenarios.rs (/opt/rustwide/target/debug/deps/chain_scenarios-4ea50b3d45180bed)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test original_chain_scenarios ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- original_chain_scenarios stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'original_chain_scenarios' (2896) panicked at tests/chain_scenarios.rs:12:5:
[INFO] [stdout] chain scenarios failed:
[INFO] [stdout] Premortem 链路测试 —— 主时间线版
[INFO] [stdout] ════════════════════════════════════════════════════════════════
[INFO] [stdout] 
[INFO] [stdout] ─── S01 · 正常一轮：时间线形状 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 事件序列正确：["said", "turn_open", "judged", "cost", "cost", "wrote", "turn_close"]
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S02 · 场景选定后真的灌进 prompt ───
[INFO] [stdout]       ✓ 回答段带场景标题
[INFO] [stdout]       ✓ 回答段带 guidance 正文
[INFO] [stdout]       ✓ 判断段不含 guidance（两段式省的就是这个）
[INFO] [stdout]       ✓ 判断段含完整对话
[INFO] [stdout]       ✓ ★ 判断段使用独立任务提示词，不混入主助手交付职责
[INFO] [stdout]       ✓ 回答段使用新版主助手提示词
[INFO] [stdout] 
[INFO] [stdout] ─── S03 · 工具的小生命周期：发出→返回，corr 连得上 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 两条返回都落盘了
[INFO] [stdout]       ✓ 返回的 corr 指回发起它的那条 Called
[INFO] [stdout]       ✓ TaskId 分到具体调用：[1, 2]
[INFO] [stdout]       ✓ 没有未闭合的调用
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S04 · 插话被吸收，且插话本身先落盘 ───
[INFO] [stdout]       ✓ 插话落盘确认后才 ack（must-flush）
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 插话进了后续 prompt
[INFO] [stdout]       ✓ ★ 只有运行中补的那一句算插话，触发本轮的首句不算
[INFO] [stdout]       ✓ 实际只吸收了 1 条插话
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S05 · 打断：两段式反馈 + 半截正文落盘 ───
[INFO] [stdout]       ✓ Stopping 先到（不等子任务收敛）
[INFO] [stdout]       ✓ TurnClosed 随后到
[INFO] [stdout]       ✓ 标记为 aborted
[INFO] [stdout]       ✓ 半截正文落成 Wrote{interrupted}
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S06 · 工具未返回就被打断 ⇒ 记 Aborted，组装后仍配对 ───
[INFO] [stdout]       ✓ Called 发出即落盘
[INFO] [stdout]       ✓ 收敛完成
[INFO] [stdout]       ✓ 补上了闭合事件
[INFO] [stdout]       ✓ 没有遗留的未闭合调用
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S07 · turn 内仲裁：撞上用户改动就丢，时间线只记生效的 ───
[INFO] [stdout]       ✓ apply 后才产生事件，且有 ack
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 被丢的那条没进事件的 ops
[INFO] [stdout]       ✓ 没撞车的那条正常生效
[INFO] [stdout]       ✓ 被丢的路径记在 dropped 里（审计）
[INFO] [stdout]       ✓ 被丢的改动回喂给了模型（写在动作工具的返回里）
[INFO] [stdout]       ✓ 最终值是用户的
[INFO] [stdout]       ✓ origin 是 User
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout]       ✓ I7 恢复后 [用户设定] 标记不丢
[INFO] [stdout] 
[INFO] [stdout] ─── S08 · 轮外编辑不进仲裁集：模型下一轮可以改 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 轮外编辑不触发仲裁，模型的改动生效
[INFO] [stdout]       ✓ 没有 op 被丢
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S09 · 提问是持久实体，回答连得回去 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 提问在 open_questions 里挂着
[INFO] [stdout]       ✓ 选项也在
[INFO] [stdout]       ✓ 回答开了新一轮
[INFO] [stdout]       ✓ 回答之后提问不再挂着
[INFO] [stdout]       ✓ 回答的 corr 指回提问
[INFO] [stdout]       ✓ 组装 prompt 时写明了这是对提问的回答
[INFO] [stdout]       ✓ 扫时间线也认为没有未答提问
[INFO] [stdout]       ✓ ★ ask_user 在产生 Asked 之前拒绝重复选项
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S10 · 同 client_id 重发被去重 ───
[INFO] [stdout]       ✓ 第二次被丢弃
[INFO] [stdout]       ✓ 只跑了一轮
[INFO] [stdout]       ✓ 去重计数 = 1
[INFO] [stdout]       ✓ 时间线上只有一条
[INFO] [stdout] 
[INFO] [stdout] ─── S11 · 折叠：区间落成事件，原文不删 ───
[INFO] [stdout]       ✓ 触发了折叠（3 次）
[INFO] [stdout]       ✓ 被折叠区间的原文仍在时间线上
[INFO] [stdout]       ✓ 组装时注入了摘要
[INFO] [stdout]       ✓ 折叠区间里确实有对话
[INFO] [stdout]       ✓ ★ 被折叠的原文不再出现在 prompt 里（摘要是代替，不是追加）
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I8 折叠区间的原文仍在时间线上
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S12 · 优雅退出后重开：状态与对话都在 ───
[INFO] [stdout]       ✓ 第一段产生了 13 条事件
[INFO] [stdout]       ✓ 启动即恢复（不是可选分支）
[INFO] [stdout]       ✓ ★ 用户选的场景跨重启还在
[INFO] [stdout]       ✓ 推断图恢复了
[INFO] [stdout]       ✓ ★ 用户填的字段恢复后仍是 [用户设定]
[INFO] [stdout]       ✓ ★ 来源也没丢
[INFO] [stdout]       ✓ 接着跑第二轮
[INFO] [stdout]       ✓ ★ 上一次会话的对话进了 prompt
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout]       ✓ I7 恢复后 [用户设定] 标记不丢
[INFO] [stdout] 
[INFO] [stdout] ─── S13 · 被 kill 之后重开：补 Aborted、标 crashed、输入不丢 ───
[INFO] [stdout]       ✓ ★ 已 ack 的用户输入活下来了（I2）
[INFO] [stdout]       ✓ 盘上留下了一个未闭合的调用
[INFO] [stdout]       ✓ 盘上留下了一个开了没关的轮次
[INFO] [stdout]       ✓ 启动时报出了上次异常退出
[INFO] [stdout]       ✓ ★ 未闭合调用被补上了 Aborted
[INFO] [stdout]       ✓ ★ 崩掉的轮次被补上了 TurnClosed
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ 恢复后能继续跑（turn 编号接着上次）
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S14 · 落盘失败：降级提示，对话继续，恢复后重试成功 ───
[INFO] [stdout]       ✓ ★ 落盘失败不影响这一轮跑完
[INFO] [stdout]       ✓ 发出了降级提示（不是弹窗打扰）
[INFO] [stdout]       ✓ 第二轮照常
[INFO] [stdout]       ✓ 恢复正常后清除降级
[INFO] [stdout]       ✓ ★ 攒着的事件一条没丢，全部补写（盘 14 / 内存 14）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout] 
[INFO] [stdout] ─── S15 · R5 分叉：原会话一条不动，新分支带着分叉点之前的历史 ───
[INFO] [stdout]       ✓ 分叉前有 3 个字段
[INFO] [stdout]       ✓ 分叉成功：Ok(SessionId("ca477ca707a9"))
[INFO] [stdout]       ✗ 推了 Forked
[INFO] [stdout]       ✓ ★ 原会话不受影响，字段还是 3 个
[INFO] [stdout]       ✓ ★ 原会话时间线一条没少
[INFO] [stdout]       ✓ ★ 新分支只带到分叉点：2 个字段
[INFO] [stdout]       ✓ 第三轮的推断不在分支里
[INFO] [stdout]       ✓ 快照里带着自己的 session id
[INFO] [stdout]       ✓ ★ 触发那一轮的用户输入留在分支上（它是这一轮的输入，不是上一轮的产物）
[INFO] [stdout]       ✓ ★ 但 t3 本身（判定 / 回答 / 推断）一条都不在分支里
[INFO] [stdout]       ✓ 分支上能继续跑，轮号接着分叉点
[INFO] [stdout]       ✓ ★ 分支一开口就有分叉点之前的完整上下文
[INFO] [stdout]       ✓ t3 推断出的字段不在分支的推断图里
[INFO] [stdout]       ✓ 分支自己的新事件盖的是分支的章
[INFO] [stdout]       ✓ ★ 链上带着父会话的事件，事件自描述得出它是谁的
[INFO] [stdout]       ✓ 会话表里记了 parent 与 forked_at
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout] 
[INFO] [stdout] ─── S16 · 持久层每轮重读：改了文件下一轮生效 ───
[INFO] [stdout]       ✓ prompts.toml 被 bootstrap 出来了
[INFO] [stdout]       ✓ playbook.toml 也在
[INFO] [stdout]       ✓ 第一轮还没有新内容
[INFO] [stdout]       ✓ ★ 改了 project.md，下一轮 prompt 就是新的（不用重启）
[INFO] [stdout]       ✓ ★ 改坏了要像界面报错一样报出来（不是只 eprintln）
[INFO] [stdout] 
[INFO] [stdout] ─── S17 · 换场景：下一轮真的注入新场景的材料 ───
[INFO] [stdout]       ✓ 第一轮没有 trace_code 的 guidance
[INFO] [stdout]       ✓ ★ 换了场景之后新场景的 guidance 真的灌进去了（不只是换标签）
[INFO] [stdout]       ✓ 换场景被记了一次（场景描述准不准的反馈）
[INFO] [stdout]       ✓ 换场景是时间线上的事件，不是 workspace 里的字段
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S18 · 判断段失败：降级继续，留明账，不打扰用户 ───
[INFO] [stdout]       ✓ ★ 判断段挂了，这一轮照样跑完
[INFO] [stdout]       ✓ 留了明账
[INFO] [stdout]       ✓ 降级为 none 场景
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S19 · 对抗性 mock：未知场景 / 重复 call_id / 只吐工具不吐正文 ───
[INFO] [stdout]       ✓ ★ 没有 panic，跑完了
[INFO] [stdout]       ✓ 未知场景回退到 none
[INFO] [stdout]       ✓ 不存在的工具作为结果返回给模型（不抛异常）
[INFO] [stdout]       ✓ 重复 call_id 也被闭合了
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S20 · 工具失败/超时：一律回给模型，不中断 turn 不问用户 ───
[INFO] [stdout]       ✓ ★ 工具失败与超时都没有中断这一轮
[INFO] [stdout]       ✓ 长任务期间有心跳
[INFO] [stdout]       ✓ 失败作为结果返回
[INFO] [stdout]       ✓ 超时作为结果返回
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stderr] error: test failed, to rerun pass `--test chain_scenarios`
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S21 · 待落定/搁置走同一条 op 通道，享受同一套仲裁 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 用户加的没被静默盖掉：["用户加的问题"]
[INFO] [stdout]       ✓ 没撞车的那个正常生效
[INFO] [stdout]       ✓ 撞车的那条被记为丢弃
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S22 · checkpoint 只是加速：删光也能重放出同一份 ───
[INFO] [stdout]       ✓ 打了 checkpoint
[INFO] [stdout]       ✓ ★ I1 重放到 checkpoint 的位置 ≡ checkpoint 本身
[INFO] [stdout]       ✓ 新库里没有 checkpoint
[INFO] [stdout]       ✓ ★ 从 0 全量重放也得到同一份 workspace（checkpoint 纯属加速）
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S23 · 两个 Store 实现喂同一串事件，物化结果必须一样 ───
[INFO] [stdout]       ✓ ★ SqliteStore 与 MemStore 物化结果一致
[INFO] [stdout]       ✓ 事件条数一致
[INFO] [stdout]       ✓ 组装出的消息条数一致
[INFO] [stdout] 
[INFO] [stdout] ─── S24 · 组装：状态与观测事件不进 prompt，对话事件全进 ───
[INFO] [stdout]       ✓ 只有对话与工具往返进 prompt：["User", "Assistant", "Tool", "Assistant"]
[INFO] [stdout]       ✓ ★ 推断与用户编辑本身不进 prompt（它们是 metadata，组装时现拼）
[INFO] [stdout]       ✓ 推断改动在时间线上（作为 metadata 动态拼，不作为消息）
[INFO] [stdout]       ✓ 用户编辑在时间线上
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S25 · ★ 模型刚写下的推断，同一轮的下一次回答调用就看得见 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 判断段跑在最前面，那时还没有这条推断
[INFO] [stdout]       ✓ 第一次回答调用也没有 —— 它正是产出这条 op 的那次
[INFO] [stdout]       ✓ ★ 动作工具写进 workspace 的推断，同一轮下一次回答就看得见
[INFO] [stdout]       ✓ 本轮新写的字段被标出来了（field.seq > turn_start）
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S26 · ★ 插话与被丢弃的改动，也都从视图走，不靠 turn 自己攒 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 插话经视图进了回答段（turn 不再自己拼局部副本）
[INFO] [stdout]       ✓ ★ 被丢弃的改动的回喂也在
[INFO] [stdout]       ✓ ★ 推断图里是用户的值
[INFO] [stdout]       ✓ 模型那条确实没生效
[INFO] [stdout]       ✓ 仲裁记了一次丢弃
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S27 · ★ 模型建图：别名铸成真 id，图与明细都进 prompt ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 两个节点一条边落地了
[INFO] [stdout]       ✓ ★ 别名全部铸成了真 id
[INFO] [stdout]       ✓ id 形如 n<seq>_<i>，自带溯源
[INFO] [stdout]       ✓ ★ 边的两端指向真节点（批内别名也解析了）
[INFO] [stdout]       ✓ ★ 图外推断挂到了真节点上
[INFO] [stdout]       ✓ 回答段 prompt 里有 mermaid
[INFO] [stdout]       ✓ 两个节点的标签都在
[INFO] [stdout]       ✓ ★ loss 用了 loss 的形状（词表来自持久层，不是写死的）
[INFO] [stdout]       ✓ ★ 没标来源的节点画成虚线 —— 盲区要看得见
[INFO] [stdout]       ✓ ★ 挂在节点上的图外推断跟着节点走
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S28 · ★ 漏洞 1：用户断开一条线，模型换个 edge id 也加不回来 ───
[INFO] [stdout]       ✓ 第一轮建出图
[INFO] [stdout]       ✓ 两个节点一条边
[INFO] [stdout]       ✓ 第二轮跑完
[INFO] [stdout]       ✓ ★ 断了就是断了 —— 换 id 绕不过有序端点对这个键
[INFO] [stdout]       ✓ 两个节点没被牵连
[INFO] [stdout]       ✓ 被丢的那条记进了 dropped（模型下一轮看得到）
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S29 · ★ 漏洞 2：用户删掉一个节点，模型换 id 新建同名的也复活不了 ───
[INFO] [stdout]       ✓ 第一轮建出图
[INFO] [stdout]       ✓ 第二轮跑完
[INFO] [stdout]       ✓ ★ 删掉的节点没被同名新建复活（撞的是归一化标签键）
[INFO] [stdout]       ✓ 只剩另一个节点
[INFO] [stdout]       ✓ 记进了 dropped
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S30 · ★ 幽灵 id 拦在门外；删节点连带收掉它的边 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 只有走别名建的两个落地了
[INFO] [stdout]       ✓ ★ 端点不存在的边没落地
[INFO] [stdout]       ✓ ★ 幽灵 id 没造出孤儿节点
[INFO] [stdout]       ✓ ★ 删掉一端，边跟着收掉（I9 不靠自觉）
[INFO] [stdout]       ✓ 三条坏 op 都记进了 dropped
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S31 · ★ 两种画法并存：程序画的图与模型自己画的图 ───
[INFO] [stdout]       ✓ 第一轮
[INFO] [stdout]       ✓ 第一轮 prompt 里是程序渲染的那份
[INFO] [stdout]       ✓ 第二轮
[INFO] [stdout]       ✓ ★ 切到 Sketch 后 prompt 里是模型自己写的源码
[INFO] [stdout]       ✓ 结构化那份这一轮不进 prompt
[INFO] [stdout]       ✓ ★ prompt 里说清了这张图放弃了结构化编辑
[INFO] [stdout]       ✓ ★ 结构化那份没被销毁，两种画法同时存在
[INFO] [stdout]       ✓ 用户随时切得回来
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S32 · ★ 模型配置：默认 → config.json → 环境变量，且来源查得到 ───
[INFO] [stdout]       ✓ 什么都没有时用内置默认
[INFO] [stdout]       ✓ ★ 回答段默认输出上限是 64K，不拿截断省预算
[INFO] [stdout]       ✓ ★ 子任务默认输出上限也是 64K
[INFO] [stdout]       ✓ 干净启动没有告警
[INFO] [stdout]       ✓ config.json 覆盖默认
[INFO] [stdout]       ✓ describe 标出来源是 config.json
[INFO] [stdout]       ✓ ★ 环境变量优先级最高
[INFO] [stdout]       ✓ 数值型的也能覆盖
[INFO] [stdout]       ✓ 没被碰的角色不受影响
[INFO] [stdout]       ✓ ★ describe 说得清哪个值被 env 盖了
[INFO] [stdout]       ✓ 环境变量写错了会报警，不是静默用默认
[INFO] [stdout]       ✓ ★ provider 引用不存在会报警 —— 否则症状是「模型没反应」，查不到这里
[INFO] [stdout]       ✓ ★ 配置文件坏了回退默认，不是起不来
[INFO] [stdout]       ✓ 而且报出来了
[INFO] [stdout] 
[INFO] [stdout] ─── S33 · ★ 密钥单独存：不进 config.json、不进日志、环境变量优先 ───
[INFO] [stdout]       ✓ ★ config.json 里没有密钥（靠没这个字段，不靠脱敏）
[INFO] [stdout]       ✓ ★ secrets.json 被自动写进 .gitignore
[INFO] [stdout]       ✓ 密钥读得回来
[INFO] [stdout]       ✓ 没有环境变量时用文件里的
[INFO] [stdout]       ✓ ★ 环境变量盖过文件（CI 不用改文件）
[INFO] [stdout]       ✓ ★ describe 一个密钥字符都不印
[INFO] [stdout]       ✓ 但说得清「有没有」和从哪来
[INFO] [stdout]       ✓ 缺密钥点得出来是哪个 provider
[INFO] [stdout]       ✓ 填空字符串等于删掉
[INFO] [stdout] 
[INFO] [stdout] ─── S34 · ★ 路径闸门：越界 / 软链接 / 受保护的名字，一律拒 ───
[INFO] [stdout]       ✓ 授权目录内正常放行
[INFO] [stdout]       ✓ ★ .. 逃逸被拒
[INFO] [stdout]       ✓ ★ 目录外的绝对路径被拒
[INFO] [stdout]       ✓ ★ 受保护的名字被拒
[INFO] [stdout]       ✓ ★ 指向目录外的软链接被拒（这条只有 canonicalize 挡得住）
[INFO] [stdout]       ✓ ★ 拒绝有计数 —— 一直涨说明模型在反复撞白名单
[INFO] [stdout] 
[INFO] [stdout] ─── S35 · ★ 网址闸门：协议 / 内网 / 白名单，别被相似域名骗了 ───
[INFO] [stdout]       ✓ 白名单域名放行
[INFO] [stdout]       ✓ 子域名放行
[INFO] [stdout]       ✓ ★ 后缀匹配卡在点上，evilarxiv.org 骗不过去
[INFO] [stdout]       ✓ 不在白名单里的被拒
[INFO] [stdout]       ✓ ★ 回环地址被拒（SSRF）
[INFO] [stdout]       ✓ ★ 内网段被拒
[INFO] [stdout]       ✓ ★ 云元数据地址被拒
[INFO] [stdout]       ✓ ★ localhost 被拒
[INFO] [stdout]       ✓ ★ 不带点的内网主机名被拒
[INFO] [stdout]       ✓ ★ 非 http 协议被拒
[INFO] [stdout]       ✓ ★ user@host 这种绕过写法被拒
[INFO] [stdout]       ✓ 总开关关掉后一律不放行
[INFO] [stdout] 
[INFO] [stdout] ─── S36 · ★ 上下文安全：大文件 / 长行 / 海量匹配都不会撑爆一轮 ───
[INFO] [stdout]       ✓ 先说清总共多少行
[INFO] [stdout]       ✓ ★ 超上限会截断
[INFO] [stdout]       ✓ ★ 截断时给了续读的 offset —— 只说「已截断」模型会卡住
[INFO] [stdout]       ✓ ★ 返回值有上限，不会把 2000 行灌进 prompt
[INFO] [stdout]       ✓ ★ 按 offset 续读能拿到后面的内容
[INFO] [stdout]       ✓ ★ 单行过长也截断（压缩过的代码一行能几百 KB）
[INFO] [stdout]       ✓ ★ 横向截断不能靠 offset 续读，不再给错误方向
[INFO] [stdout]       ✓ 页脚报原文事实，不把行号渲染算进字节
[INFO] [stdout]       ✓ ★ 海量匹配只给前 N 条并说明
[INFO] [stdout]       ✓ 检索结果同样有上限
[INFO] [stdout]       ✓ 越界的 offset 报错
[INFO] [stdout]       ✓ 而且告诉模型一共多少行
[INFO] [stdout]       ✓ ★ fs_find 返回相对 roots[0] 的可回喂路径
[INFO] [stdout]       ✓ ★ fs_grep 也返回同一基准的路径
[INFO] [stdout]       ✓ 搜索结果可原样喂回 fs_read
[INFO] [stdout]       ✓ ★ 截断有计数（截断率高说明上限设小了或模型在乱用）
[INFO] [stdout]       ✓ 调用有计数
[INFO] [stdout] 
[INFO] [stdout] ─── S37 · ★ 抓取先落盘再返回摘要 —— 页面大小不决定上下文用量 ───
[INFO] [stdout]       ✓ 抓取成功
[INFO] [stdout]       ✓ 返回值里有标题
[INFO] [stdout]       ✓ 说清了全文有多大
[INFO] [stdout]       ✓ ★ 全文没有直接灌进返回值
[INFO] [stdout]       ✓ ★ 给了落盘路径
[INFO] [stdout]       ✓ ★ 告诉模型怎么接着看
[INFO] [stdout]       ✓ workspace 里确实多了一个文件
[INFO] [stdout]       ✓ ★ 全文在 workspace 里，按需读得到
[INFO] [stdout]       ✓ ★ 抓回来的东西也能 grep
[INFO] [stdout]       ✓ ★ 抓内网地址被闸门拦住
[INFO] [stdout]       ✓ 拒绝计入指标
[INFO] [stdout] 
[INFO] [stdout] ─── S38 · ★ 端到端：模型在一轮里抓网页，产物落盘、结果进时间线 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 工具返回落进了时间线
[INFO] [stdout]       ✓ ★ 时间线上记的是摘要 + 路径，不是全文
[INFO] [stdout]       ✓ ★ 全文没有进对话历史
[INFO] [stdout]       ✓ ★ 产物真的落在 workspace 里
[INFO] [stdout]       · 工具链：调用 1 · 拒绝 0 · 截断 1 · 回灌 1646 字节 · 落盘 1 个 · 网络失败 0
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S39 · ★ config.json 改一行，工具的行为跟着变（配置不是装饰） ───
[INFO] [stdout]       ✓ 策略从文件读回来了
[INFO] [stdout]       ✓ 改成允许的域名能抓
[INFO] [stdout]       ✓ ★ 默认允许的 arxiv 现在抓不了 —— 文件真的管住了闸门
[INFO] [stdout]       ✓ ★ 拒绝时告诉模型去哪儿改
[INFO] [stdout]       ✓ ★ 默认抓取后端是进程内 Rust 实现
[INFO] [stdout]       ✓ ★ 只提供基础 fetch，不注册 search
[INFO] [stdout]       ✓ ★ 旧 SearXNG 配置会安全降级，不会尝试连接外部服务
[INFO] [stdout]       ✓ ★ 旧 Firecrawl 配置也降级到内置 fetch，不再要求密钥
[INFO] [stdout]       ✓ 总开关关掉时连后端都不建
[INFO] [stdout] 
[INFO] [stdout] ─── S40 · ★ 真实 API 的消息映射与 SSE 解析（离线测，不联网） ───
[INFO] [stdout]       ✓ system 段并成一段（Anthropic 是顶层字段）
[INFO] [stdout]       ✓ system 不留在 messages 里
[INFO] [stdout]       ✓ 第一条是 user
[INFO] [stdout]       ✓ ★ user/assistant 严格交替 —— 不合并的话 Anthropic 直接 400
[INFO] [stdout]       ✓ ★ 连着两条工具返回被合进同一条 user 消息
[INFO] [stdout]       ✓ assistant 的正文是 text 块
[INFO] [stdout]       ✓ 两个工具调用都成了 tool_use 块
[INFO] [stdout]       ✓ OpenAI 侧一一对应（它允许连续同角色）
[INFO] [stdout]       ✓ ★ OpenAI 的 arguments 是字符串不是对象 —— 发成对象会被拒
[INFO] [stdout]       ✓ 工具返回带回了 tool_call_id
[INFO] [stdout]       ✓ ★ 旧时间线里的空 assistant 在重放时被滤掉，会话可恢复
[INFO] [stdout]       ✓ 正文分片按序拼起来
[INFO] [stdout]       ✓ 工具调用解出来了
[INFO] [stdout]       ✓ 工具名对
[INFO] [stdout]       ✓ ★ 分片到达的参数 JSON 拼完整了才解析 —— 这是流式最容易错的一处
[INFO] [stdout]       ✓ 输入 token 从 message_start 拿到
[INFO] [stdout]       ✓ ★ 输出 token 从 message_delta 拿到（不然账全靠估）
[INFO] [stdout]       ✓ 没开缓存时命中数是 0
[INFO] [stdout]       ✓ ★ Anthropic 输入 = input + 缓存读 + 缓存写（只取 input_tokens 会少算 20 倍）
[INFO] [stdout]       ✓ ★ 命中只算缓存读，缓存写（含嵌套的 cache_creation 对象）不算命中
[INFO] [stdout]       ✓ OpenAI 侧也解出一个调用
[INFO] [stdout]       ✓ ★ 分片到达的工具名也要拼（web_ + fetch）
[INFO] [stdout]       ✓ 参数拼完整了
[INFO] [stdout]       ✓ usage 从末尾那块拿到
[INFO] [stdout]       ✓ [DONE] 不该被当成错误
[INFO] [stdout]       ✓ ★ OpenAI/智谱：缓存命中 60 == 60（miss 不算、同义字段不重复加、不超过输入）
[INFO] [stdout]       ✓ ★ DeepSeek：缓存命中 60 == 60（miss 不算、同义字段不重复加、不超过输入）
[INFO] [stdout]       ✓ ★ Kimi：缓存命中 60 == 60（miss 不算、同义字段不重复加、不超过输入）
[INFO] [stdout]       ✓ ★ 没有缓存字段：缓存命中 0 == 0（miss 不算、同义字段不重复加、不超过输入）
[INFO] [stdout]       ✓ ★ 离谱的命中数：缓存命中 100 == 100（miss 不算、同义字段不重复加、不超过输入）
[INFO] [stdout]       ✓ ★ 参数拼不完整时给空对象，让工具去报「缺少参数」
[INFO] [stdout]       ✓ ★ fs_read 报了准确的参数 schema
[INFO] [stdout]       ✓ 必填项标出来了
[INFO] [stdout]       ✓ 每个工具都有 schema
[INFO] [stdout]       ✓ 注册表自己的名字当然都认得
[INFO] [stdout]       ✓ ★ Anthropic 侧用 any，不点名
[INFO] [stdout]       ✓ ★ OpenAI 兼容侧用 required，不点名
[INFO] [stdout]       ✓ 候选只有一个工具，所以 any/required 等价于点名
[INFO] [stdout]       ✓ ★ 下一档改成点名
[INFO] [stdout]       ✓ 再下一档才不发 tool_choice
[INFO] [stdout]       ✓ ★ 到底了要说没招，不是无限重试
[INFO] [stdout]       ✓ ★ record_graph 的 schema 列出了 op 的取值，不是个空对象
[INFO] [stdout]       ✓ ★ record_note 的 schema 列出了 op 的取值，不是个空对象
[INFO] [stdout]       ✓ ★ node schema 必填 id，与 serde 一致
[INFO] [stdout]       ✓ ★ edge schema 必填 id，与 serde 一致
[INFO] [stdout]       ✓ ★ drop schema 必填 id，与 serde 一致
[INFO] [stdout]       ✓ ★ render schema 必填 key，与 serde 一致
[INFO] [stdout]       ✓ ★ sketch schema 必填 lang，与 serde 一致
[INFO] [stdout]       ✓ ★ sketch schema 必填 src，与 serde 一致
[INFO] [stdout]       ✓ ★ view schema 必填 to，与 serde 一致
[INFO] [stdout]       ✓ ★ 模型工具 schema 不再把 source=user 当合法输出教给模型
[INFO] [stdout] 
[INFO] [stdout] ─── S41 · ★ 判断段一轮只跑一次 —— 工具往返多少次都不再重判场景 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 判断段只被调用了 1 次
[INFO] [stdout]       ✓ 回答段调了 4 次（三次工具往返 + 收尾）
[INFO] [stdout]       · 本轮：judge 调用 1 · answer 调用 4 · loops 4 · tools_run 3 · inferred_ops 1 · scene need_ablation
[INFO] [stdout]       ✓ 四圈回答循环
[INFO] [stdout]       ✓ 场景是判断段那一次定下的，全程没变
[INFO] [stdout]       ✓ ★ 时间线上只有一条 judged
[INFO] [stdout]       ✓ ★ 每次 answer 调用都记 Cost，工具往返不再漏账
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S42 · ★ 推断由回答段的动作工具写，同一批里别名互通 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ 两个节点一条边落地了
[INFO] [stdout]       ✓ 别名全部铸成了真 id
[INFO] [stdout]       ✓ ★ record_note 的 anchor 指到了同一批 record_graph 刚建的节点（一批一个别名作用域）
[INFO] [stdout]       ✓ 待落定清单也写进去了
[INFO] [stdout]       ✓ ★ source 按 schema 里写的形状收下来了
[INFO] [stdout]       ✓ ★ 两个动作各自有准确回执
[INFO] [stdout]       ✓ 写完的图立刻回到 prompt 里
[INFO] [stdout]       · 本轮：inferred_ops 5 · dropped_ops 0 · tools_run 2 · tools_failed 0
[INFO] [stdout]       ✓ 5 条 op 都记在指标里
[INFO] [stdout]       ✓ ★ 动作调用也算进 tools_run —— 否则指标上永远是 0
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S43 · ★ 场景与 mode 里写的工具名，注册表里必须真的有 ───
[INFO] [stdout]       ✓ ★ 内置场景 × 两个 mode，工具名全部认得（对不上的：[]）
[INFO] [stdout]       ✓ record_graph 在注册表里
[INFO] [stdout]       ✓ record_note 在注册表里
[INFO] [stdout]       ✓ ask_user 在注册表里
[INFO] [stdout]       ✓ fs_read 在注册表里
[INFO] [stdout]       ✓ fs_grep 在注册表里
[INFO] [stdout]       ✓ fs_find 在注册表里
[INFO] [stdout]       ✓ repo_tree 在注册表里
[INFO] [stdout]       ✓ ★ 认不出的名字进 missing，不是静默丢弃
[INFO] [stdout]       ✓ 没配联网时 web_search 缺席但不报错
[INFO] [stdout]       ✓ ★ 两个 mode 都只有按址 fetch，不暴露 search
[INFO] [stdout]       ✓ ★ 同一个工具在两个 mode 下的说明不同
[INFO] [stdout]       ✓ 行动 mode 的说明要求图能直接交下去
[INFO] [stdout]       ✓ ★ ask_user 注册出去的 schema 与 2—4 项、去重约束一致
[INFO] [stdout]       ✓ 两个 mode 的 system 段也不同
[INFO] [stdout] 
[INFO] [stdout] ─── S44 · ★ 一键蒸馏：分节草稿 → 预览 → 一键写回，坏 TOML 当场拦住 ───
[INFO] [stdout]       ✓ 切出 4 节（实际 4）
[INFO] [stdout]       ✓ 叙述文件是整份替换
[INFO] [stdout]       ✓ ★ 场景库按 id 合并，不覆盖未列出的场景
[INFO] [stdout]       ✓ 第一个合法标题之前的东西丢掉
[INFO] [stdout]       ✓ project.md 校验通过
[INFO] [stdout]       ✓ knowledge.md 校验通过
[INFO] [stdout]       ✓ playbook.toml 校验通过
[INFO] [stdout]       ✓ cases/seed-drift.md 校验通过
[INFO] [stdout]       ✓ 四个文件都写了
[INFO] [stdout]       ✓ ★ 写回之后持久层还读得动（合并没把 TOML 弄坏）
[INFO] [stdout]       ✓ ★ 新场景真的进了场景库
[INFO] [stdout]       ✓ 原有场景一条没丢
[INFO] [stdout]       ✓ project.md 换成了新的
[INFO] [stdout]       ✓ ★ 新案例读得出来
[INFO] [stdout]       ✓ ★ 同 ID diff 是替换，不会追加出重复场景
[INFO] [stdout]       ✓ 同 ID 场景内容已更新
[INFO] [stdout]       ✓ 场景 diff 不能顺手改 default_tools
[INFO] [stdout]       ✓ ★ 案例引用不存在的场景会在写回前被拦住
[INFO] [stdout]       ✓ ★ 非法场景 diff 被拦住
[INFO] [stdout]       ✓ ★ 缺 frontmatter 的案例也被拦住（否则它只是静默读不出来）
[INFO] [stdout]       ✓ 非持久层文件不是合法目标
[INFO] [stdout]       ✓ 路径穿越不是合法目标
[INFO] [stdout] 
[INFO] [stdout] ─── S45 · ★ 场景是多选：几份 guidance 一起进 prompt，工具与案例取并集 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 第一个场景的 guidance 进了 prompt
[INFO] [stdout]       ✓ ★ 第二个场景的 guidance 也进了
[INFO] [stdout]       ✓ 两条各自成段，不是糊成一段
[INFO] [stdout]       ✓ ★ 案例取并集
[INFO] [stdout]       ✓ 多场景回答段正常运行
[INFO] [stdout]       · 本轮场景：trace_code + cost_budget
[INFO] [stdout]       ✓ 指标里记的是两个
[INFO] [stdout]       ✓ 时间线上也是两个
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S46 · ★ 多场景的边界：上限、去重、认不出的丢掉、老时间线读得回来 ───
[INFO] [stdout]       ✓ 认不出的单独回报，不混进结果
[INFO] [stdout]       ✓ 去重且保留影响顺序：["cost_budget", "trace_code"]
[INFO] [stdout]       ✓ ★ 两个场景的工具取并集
[INFO] [stdout]       ✓ 并集里没有重复项
[INFO] [stdout]       ✓ 内置场景够多，这条才有意义
[INFO] [stdout]       ✓ ★ 有上限 —— 什么都强调等于什么都没强调
[INFO] [stdout]       ✓ ★ 单个字符串收成一元数组（否则改完所有历史会话都读不回来）
[INFO] [stdout]       ✓ 同上
[INFO] [stdout]       ✓ ★ 删掉的阶段事件仍然反序列化得了（老库能开）
[INFO] [stdout] 
[INFO] [stdout] ─── S47 · ★ 动作修复：跨批别名、真实丢弃原因、模型不能冒充用户来源 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 上一批节点别名在本轮下一批仍能建边
[INFO] [stdout]       ✓ ★ 模型输出 source=user 的整条 op 被丢弃
[INFO] [stdout]       ✓ ★ 含括号的边标签放进引号，mermaid 可解析
[INFO] [stdout]       ✓ resolve 丢弃回喂真实原因
[INFO] [stdout]       ✓ ★ 无效路径不会再被模型误读成 kind=flow，并给出可执行修法
[INFO] [stdout]       ✓ ★ 没有 edited 事件时绝不谎称用户刚改过
[INFO] [stdout]       ✓ 模型冒充用户来源得到明确修法
[INFO] [stdout]       ✓ ★ 时间线把无效引用与用户冲突分开记录
[INFO] [stdout]       ✓ 整批零生效时工具 outcome=failed，不再一边说没生效一边报 ok
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ─── S48 · ★ thinking 耗尽正文时不写空 assistant，后续历史仍可用 ───
[INFO] [stdout]       ✓ 一轮跑完
[INFO] [stdout]       ✓ ★ 空正文不落 Wrote，不会映射成空 assistant 污染历史
[INFO] [stdout]       ✓ 本轮失败留有可诊断记录
[INFO] [stdout]       ✓ reasoning 花掉的 completion 仍完整记账
[INFO] [stdout]       ✓ I1 重放 ≡ 运行时 workspace
[INFO] [stdout]       ✓ I3 tool_calls 全部配对（组装后）
[INFO] [stdout]       ✓ I4 seq 严格递增无空洞
[INFO] [stdout]       ✓ I5 账本可从事件重建
[INFO] [stdout]       ✓ I9 图上没有悬边
[INFO] [stdout]       ✓ I9 parent 链无环且深度合法
[INFO] [stdout]       ✓ I10 同一张图渲染两次逐字节相同
[INFO] [stdout]       ✓ I10 每个节点都出现在渲染结果里（渲染不吞节点）
[INFO] [stdout]       ✓ I11 时间线上没有未解析的别名
[INFO] [stdout] 
[INFO] [stdout] ════════════════════════════════════════════════════════════════
[INFO] [stdout] 46 个场景 · 678 条断言：677 通过，1 失败
[INFO] [stdout] 
[INFO] [stdout] [writer] 落盘失败第 1 次（1 条待写）: 注入的故障: append
[INFO] [stdout] [writer] 落盘失败第 2 次（7 条待写）: 注入的故障: append
[INFO] [stdout] [writer] 落盘失败第 3 次（7 条待写）: 注入的故障: append
[INFO] [stdout] [writer] 落盘失败第 4 次（8 条待写）: 注入的故障: append
[INFO] [stdout] 
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x637bfbd49681 - std[70759c8f55707aa4]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x637bfbd49681 - std[70759c8f55707aa4]::backtrace_rs::backtrace::trace_unsynchronized::<std[70759c8f55707aa4]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x637bfbd49681 - std[70759c8f55707aa4]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x637bfbd49681 - <<std[70759c8f55707aa4]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[df12db4294e9bfd3]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x637bfbd5d85a - <core[df12db4294e9bfd3]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x637bfbd5d85a - core[df12db4294e9bfd3]::fmt::write
[INFO] [stdout]    6:     0x637bfbd4db1c - core[df12db4294e9bfd3]::io::write::default_write_fmt::<alloc[2182bb758b4b3781]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/io/write.rs:402:11
[INFO] [stdout]    7:     0x637bfbd4db1c - <alloc[2182bb758b4b3781]::vec::Vec<u8> as core[df12db4294e9bfd3]::io::write::Write>::write_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/io/write.rs:335:13
[INFO] [stdout]    8:     0x637bfbd25c76 - <std[70759c8f55707aa4]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x637bfbd25c76 - std[70759c8f55707aa4]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x637bfbd41de9 - std[70759c8f55707aa4]::panicking::default_hook
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x637bfbcde270 - <alloc[2182bb758b4b3781]::boxed::Box<dyn for<'a, 'b> core[df12db4294e9bfd3]::ops::function::Fn<(&'a std[70759c8f55707aa4]::panic::PanicHookInfo<'b>,), Output = ()> + core[df12db4294e9bfd3]::marker::Send + core[df12db4294e9bfd3]::marker::Sync> as core[df12db4294e9bfd3]::ops::function::Fn<(&std[70759c8f55707aa4]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2334:9
[INFO] [stdout]   12:     0x637bfbcde270 - test[9d35eded1c95d3be]::test_main_inner::<test[9d35eded1c95d3be]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:155:21
[INFO] [stdout]   13:     0x637bfbd41fa2 - <alloc[2182bb758b4b3781]::boxed::Box<dyn for<'a, 'b> core[df12db4294e9bfd3]::ops::function::Fn<(&'a std[70759c8f55707aa4]::panic::PanicHookInfo<'b>,), Output = ()> + core[df12db4294e9bfd3]::marker::Send + core[df12db4294e9bfd3]::marker::Sync> as core[df12db4294e9bfd3]::ops::function::Fn<(&std[70759c8f55707aa4]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2334:9
[INFO] [stdout]   14:     0x637bfbd41fa2 - std[70759c8f55707aa4]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:823:13
[INFO] [stdout]   15:     0x637bfbd25d22 - std[70759c8f55707aa4]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:688:13
[INFO] [stdout]   16:     0x637bfbd1eaa9 - std[70759c8f55707aa4]::sys::backtrace::__rust_end_short_backtrace::<std[70759c8f55707aa4]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x637bfbd2691d - __rustc[8fa7c3cbc660c2b3]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:679:5
[INFO] [stdout]   18:     0x637bfbd5df8c - core[df12db4294e9bfd3]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x637bfbccc06d - chain_scenarios[b7d923af0355ff92]::original_chain_scenarios
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/chain_scenarios.rs:12:5
[INFO] [stdout]   20:     0x637bfbccb907 - chain_scenarios[b7d923af0355ff92]::original_chain_scenarios::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/chain_scenarios.rs:7:30
[INFO] [stdout]   21:     0x637bfbcd11e6 - <chain_scenarios[b7d923af0355ff92]::original_chain_scenarios::{closure#0} as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   22:     0x637bfbcd155b - <fn() -> core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x637bfbcd155b - test[9d35eded1c95d3be]::__rust_begin_short_backtrace::<core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>, fn() -> core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:733:18
[INFO] [stdout]   24:     0x637bfbcdebc5 - test[9d35eded1c95d3be]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:756:74
[INFO] [stdout]   25:     0x637bfbcdebc5 - <core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   26:     0x637bfbcdebc5 - std[70759c8f55707aa4]::panicking::catch_unwind::do_call::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>, core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:576:43
[INFO] [stdout]   27:     0x637bfbcdebc5 - std[70759c8f55707aa4]::panicking::catch_unwind::<core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>, core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:544:19
[INFO] [stdout]   28:     0x637bfbcdebc5 - std[70759c8f55707aa4]::panic::catch_unwind::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>, core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panic.rs:359:14
[INFO] [stdout]   29:     0x637bfbcdebc5 - test[9d35eded1c95d3be]::run_test_in_process
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:756:27
[INFO] [stdout]   30:     0x637bfbcdebc5 - test[9d35eded1c95d3be]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:677:43
[INFO] [stdout]   31:     0x637bfbcd8484 - test[9d35eded1c95d3be]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:707:41
[INFO] [stdout]   32:     0x637bfbcd8484 - std[70759c8f55707aa4]::sys::backtrace::__rust_begin_short_backtrace::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   33:     0x637bfbce1d22 - std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   34:     0x637bfbce1d22 - <core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   35:     0x637bfbce1d22 - std[70759c8f55707aa4]::panicking::catch_unwind::do_call::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:576:43
[INFO] [stdout]   36:     0x637bfbce1d22 - std[70759c8f55707aa4]::panicking::catch_unwind::<(), core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:544:19
[INFO] [stdout]   37:     0x637bfbce1d22 - std[70759c8f55707aa4]::panic::catch_unwind::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panic.rs:359:14
[INFO] [stdout]   38:     0x637bfbce1d22 - std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   39:     0x637bfbce1d22 - <std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1} as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   40:     0x637bfbd48f59 - <alloc[2182bb758b4b3781]::boxed::Box<dyn core[df12db4294e9bfd3]::ops::function::FnOnce<(), Output = ()> + core[df12db4294e9bfd3]::marker::Send> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2320:9
[INFO] [stdout]   41:     0x637bfbd48f59 - <std[70759c8f55707aa4]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/thread/unix.rs:123:17
[INFO] [stdout]   42:     0x756b21d0bdfa - <unknown>
[INFO] [stdout]   43:     0x756b21d9f3d4 - clone
[INFO] [stdout]   44:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     original_chain_scenarios
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.49s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658", kill_on_drop: false }`
[INFO] [stdout] b5e9d4a25372fa9cdfa7b844a94611d0f6c686e7ce5a725e2940aa2c1888d658
