[INFO] fetching crate hotmeal 1.1.0... [INFO] testing hotmeal-1.1.0 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-1 [INFO] extracting crate hotmeal 1.1.0 into /workspace/builds/worker-1-tc1/source [INFO] started tweaking crates.io crate hotmeal 1.1.0 [INFO] removed 0 missing examples [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate hotmeal 1.1.0 [INFO] tweaked toml for crates.io crate hotmeal 1.1.0 written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate hotmeal 1.1.0 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate hotmeal 1.1.0 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" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded markup5ever v0.38.0 [INFO] [stderr] Downloaded color-backtrace v0.7.2 [INFO] [stderr] Downloaded string_cache_codegen v0.6.1 [INFO] [stderr] Downloaded string_cache v0.9.0 [INFO] [stderr] Downloaded web_atoms v0.2.3 [INFO] [stderr] Downloaded facet-testhelpers-macros v0.44.1 [INFO] [stderr] Downloaded indextree-macros v0.1.3 [INFO] [stderr] Downloaded escape8259 v0.5.3 [INFO] [stderr] Downloaded facet-dessert v0.44.1 [INFO] [stderr] Downloaded indextree v4.7.4 [INFO] [stderr] Downloaded facet-path v0.44.1 [INFO] [stderr] Downloaded cinereus v1.1.0 [INFO] [stderr] Downloaded datatest-stable v0.3.3 [INFO] [stderr] Downloaded divan v0.1.21 [INFO] [stderr] Downloaded facet-macros-impl v0.44.1 [INFO] [stderr] Downloaded facet-json v0.44.1 [INFO] [stderr] Downloaded facet-solver v0.44.1 [INFO] [stderr] Downloaded facet v0.44.1 [INFO] [stderr] Downloaded html5ever v0.38.0 [INFO] [stderr] Downloaded facet-format v0.44.1 [INFO] [stderr] Downloaded facet-core v0.44.1 [INFO] [stderr] Downloaded facet-reflect v0.44.1 [INFO] [stderr] Downloaded libtest-mimic v0.8.1 [INFO] [stderr] Downloaded facet-macro-parse v0.44.1 [INFO] [stderr] Downloaded facet-macro-types v0.44.1 [INFO] [stderr] Downloaded rapidhash v1.4.0 [INFO] [stderr] Downloaded condtype v1.3.0 [INFO] [stderr] Downloaded divan-macros v0.1.21 [INFO] [stderr] Downloaded facet-error v0.44.1 [INFO] [stderr] Downloaded facet-macros v0.44.1 [INFO] [stderr] Downloaded btparse v0.2.0 [INFO] [stderr] Downloaded facet-testhelpers v0.44.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 1af668dc4aab0c13444353c775e50db2e4843aae477dc335d7fc47f164239f1d [INFO] running `Command { std: "docker" "start" "-a" "1af668dc4aab0c13444353c775e50db2e4843aae477dc335d7fc47f164239f1d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1af668dc4aab0c13444353c775e50db2e4843aae477dc335d7fc47f164239f1d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1af668dc4aab0c13444353c775e50db2e4843aae477dc335d7fc47f164239f1d", kill_on_drop: false }` [INFO] [stdout] 1af668dc4aab0c13444353c775e50db2e4843aae477dc335d7fc47f164239f1d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 57b8a00e9f8a88e2bc9812fb10bef0e6665c82277134b0ed0eade9e4079f7e79 [INFO] running `Command { std: "docker" "start" "-a" "57b8a00e9f8a88e2bc9812fb10bef0e6665c82277134b0ed0eade9e4079f7e79", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling siphasher v1.0.1 [INFO] [stderr] Compiling new_debug_unreachable v1.0.6 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling mutants v0.0.3 [INFO] [stderr] Compiling rustc-hash v2.1.1 [INFO] [stderr] Compiling rustversion v1.0.22 [INFO] [stderr] Compiling facet-core v0.44.1 [INFO] [stderr] Compiling ryu v1.0.22 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling precomputed-hash v0.1.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling facet v0.44.1 [INFO] [stderr] Compiling impls v1.0.3 [INFO] [stderr] Compiling tendril v0.5.0 [INFO] [stderr] Compiling const-fnv1a-hash v1.1.0 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling rapidhash v1.4.0 [INFO] [stderr] Compiling phf_shared v0.13.1 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling itertools v0.14.0 [INFO] [stderr] Compiling phf_generator v0.13.1 [INFO] [stderr] Compiling phf v0.13.1 [INFO] [stderr] Compiling phf_codegen v0.13.1 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling string_cache v0.9.0 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling compact_str v0.9.0 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling unsynn v0.3.0 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling string_cache_codegen v0.6.1 [INFO] [stderr] Compiling web_atoms v0.2.3 [INFO] [stderr] Compiling facet-macro-types v0.44.1 [INFO] [stderr] Compiling facet-macro-parse v0.44.1 [INFO] [stderr] Compiling facet-macros-impl v0.44.1 [INFO] [stderr] Compiling markup5ever v0.38.0 [INFO] [stderr] Compiling html5ever v0.38.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling indextree-macros v0.1.3 [INFO] [stderr] Compiling indextree v4.7.4 [INFO] [stderr] Compiling facet-macros v0.44.1 [INFO] [stderr] Compiling cinereus v1.1.0 [INFO] [stderr] Compiling facet-error v0.44.1 [INFO] [stderr] Compiling hotmeal v1.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.10s [INFO] running `Command { std: "docker" "inspect" "57b8a00e9f8a88e2bc9812fb10bef0e6665c82277134b0ed0eade9e4079f7e79", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "57b8a00e9f8a88e2bc9812fb10bef0e6665c82277134b0ed0eade9e4079f7e79", kill_on_drop: false }` [INFO] [stdout] 57b8a00e9f8a88e2bc9812fb10bef0e6665c82277134b0ed0eade9e4079f7e79 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c7f4075941d05c21f0ca44682e6868642ebb8495b9fa6eedc9756e8af9b5a4a0 [INFO] running `Command { std: "docker" "start" "-a" "c7f4075941d05c21f0ca44682e6868642ebb8495b9fa6eedc9756e8af9b5a4a0", kill_on_drop: false }` [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling facet-core v0.44.1 [INFO] [stderr] Compiling regex-syntax v0.8.8 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling bitflags v2.11.0 [INFO] [stderr] Compiling anstream v0.6.21 [INFO] [stderr] Compiling facet-macros-impl v0.44.1 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling smallvec v2.0.0-alpha.12 [INFO] [stderr] Compiling clap_derive v4.5.49 [INFO] [stderr] Compiling gimli v0.32.3 [INFO] [stderr] Compiling miniz_oxide v0.8.9 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling camino v1.2.2 [INFO] [stderr] Compiling rustc-demangle v0.1.27 [INFO] [stderr] Compiling escape8259 v0.5.3 [INFO] [stderr] Compiling btparse v0.2.0 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling divan-macros v0.1.21 [INFO] [stderr] Compiling facet-testhelpers-macros v0.44.1 [INFO] [stderr] Compiling condtype v1.3.0 [INFO] [stderr] Compiling regex-lite v0.1.8 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling terminal_size v0.4.3 [INFO] [stderr] Compiling clap_builder v4.5.54 [INFO] [stderr] Compiling regex-automata v0.4.13 [INFO] [stderr] Compiling addr2line v0.25.1 [INFO] [stderr] Compiling facet-path v0.44.1 [INFO] [stderr] Compiling clap v4.5.54 [INFO] [stderr] Compiling libtest-mimic v0.8.1 [INFO] [stderr] Compiling divan v0.1.21 [INFO] [stderr] Compiling backtrace v0.3.76 [INFO] [stderr] Compiling color-backtrace v0.7.2 [INFO] [stderr] Compiling facet-testhelpers v0.44.1 [INFO] [stderr] Compiling facet-macros v0.44.1 [INFO] [stderr] Compiling facet v0.44.1 [INFO] [stderr] Compiling facet-error v0.44.1 [INFO] [stderr] Compiling hotmeal v1.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling fancy-regex v0.14.0 [INFO] [stderr] Compiling facet-reflect v0.44.1 [INFO] [stderr] Compiling datatest-stable v0.3.3 [INFO] [stderr] Compiling facet-dessert v0.44.1 [INFO] [stderr] Compiling facet-solver v0.44.1 [INFO] [stderr] Compiling facet-format v0.44.1 [INFO] [stderr] Compiling facet-json v0.44.1 [INFO] [stdout] warning: unused variable: `result` [INFO] [stdout] --> tests/test_debug_fuzzer_bug.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | let result = doc.apply_patches(patches); [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: unused variable: `html_end` [INFO] [stdout] --> src/dom.rs:1882:13 [INFO] [stdout] | [INFO] [stdout] 1882 | let html_end = html_start + html.len(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_html_end` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `stem_end` [INFO] [stdout] --> src/dom.rs:1898:17 [INFO] [stdout] | [INFO] [stdout] 1898 | let stem_end = stem_start + stem_str.len(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_stem_end` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/dom.rs:2182:14 [INFO] [stdout] | [INFO] [stdout] 2182 | for (i, child_id) in children.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `node` [INFO] [stdout] --> src/dom.rs:2183:17 [INFO] [stdout] | [INFO] [stdout] 2183 | let node = doc.get(*child_id); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_node` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `elem` [INFO] [stdout] --> src/dom.rs:2472:38 [INFO] [stdout] | [INFO] [stdout] 2472 | if let NodeKind::Element(elem) = &noscript_data.kind { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_elem` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/dom.rs:2480:18 [INFO] [stdout] | [INFO] [stdout] 2480 | for (i, child_id) in noscript_children.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `child` [INFO] [stdout] --> src/dom.rs:2481:21 [INFO] [stdout] | [INFO] [stdout] 2481 | let child = doc.get(*child_id); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_child` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 28.48s [INFO] running `Command { std: "docker" "inspect" "c7f4075941d05c21f0ca44682e6868642ebb8495b9fa6eedc9756e8af9b5a4a0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c7f4075941d05c21f0ca44682e6868642ebb8495b9fa6eedc9756e8af9b5a4a0", kill_on_drop: false }` [INFO] [stdout] c7f4075941d05c21f0ca44682e6868642ebb8495b9fa6eedc9756e8af9b5a4a0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 0d76518a4c0453703a9ea6f548af1be6713c7af3c3d8791b10c9985381c5b4e9 [INFO] running `Command { std: "docker" "start" "-a" "0d76518a4c0453703a9ea6f548af1be6713c7af3c3d8791b10c9985381c5b4e9", kill_on_drop: false }` [INFO] [stderr] warning: unused variable: `html_end` [INFO] [stderr] --> src/dom.rs:1882:13 [INFO] [stderr] | [INFO] [stderr] 1882 | let html_end = html_start + html.len(); [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_html_end` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `stem_end` [INFO] [stderr] --> src/dom.rs:1898:17 [INFO] [stderr] | [INFO] [stderr] 1898 | let stem_end = stem_start + stem_str.len(); [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_stem_end` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/dom.rs:2182:14 [INFO] [stderr] | [INFO] [stderr] 2182 | for (i, child_id) in children.iter().enumerate() { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `node` [INFO] [stderr] --> src/dom.rs:2183:17 [INFO] [stderr] | [INFO] [stderr] 2183 | let node = doc.get(*child_id); [INFO] [stderr] | ^^^^ help: if this is intentional, prefix it with an underscore: `_node` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `elem` [INFO] [stderr] --> src/dom.rs:2472:38 [INFO] [stderr] | [INFO] [stderr] 2472 | if let NodeKind::Element(elem) = &noscript_data.kind { [INFO] [stderr] | ^^^^ help: if this is intentional, prefix it with an underscore: `_elem` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/dom.rs:2480:18 [INFO] [stderr] | [INFO] [stderr] 2480 | for (i, child_id) in noscript_children.iter().enumerate() { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `child` [INFO] [stderr] --> src/dom.rs:2481:21 [INFO] [stderr] | [INFO] [stderr] 2481 | let child = doc.get(*child_id); [INFO] [stderr] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_child` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `result` [INFO] [stderr] --> tests/test_debug_fuzzer_bug.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | let result = doc.apply_patches(patches); [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: `hotmeal` (lib test) generated 7 warnings (run `cargo fix --lib -p hotmeal --tests` to apply 7 suggestions) [INFO] [stderr] warning: `hotmeal` (test "test_debug_fuzzer_bug") generated 1 warning (run `cargo fix --test "test_debug_fuzzer_bug" -p hotmeal` to apply 1 suggestion) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.16s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/hotmeal-8fa91ab01fd49bd4) [INFO] [stdout] [INFO] [stdout] running 79 tests [INFO] [stdout] test diff::tests::test_adoption_agency_block_in_formatting ... ignored, fixed in fork, but not in upstream [INFO] [stdout]  0.000s DEBUG matching pairs: 2 [INFO] [stdout]  0.003s DEBUG arena_dom cinereus diff complete ops_count=4 matched_pairs=2 [INFO] [stdout]  0.003s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n2]
[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.003s DEBUG Processing operation op=SetText(a:3 → b:6 text=New content) [INFO] [stdout]  0.003s DEBUG Processing operation op=Insert(b:5
@0 under b:4) [INFO] [stdout]  0.003s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.003s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.003s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout] test diff::tests::test_foster_parent_content_in_tbody ... ok [INFO] [stdout] test diff::tests::test_foster_parent_element_in_table ... ok [INFO] [stdout] test diff::tests::test_build_tree_simple ... ok [INFO] [stdout] test diff::tests::test_foster_parent_content_in_tr ... ok [INFO] [stdout] test diff::tests::test_foster_parent_nested_tables ... ok [INFO] [stdout]  0.001s DEBUG matching pairs: 1 [INFO] [stdout]  0.004s DEBUG arena_dom cinereus diff complete ops_count=1 matched_pairs=1 [INFO] [stdout]  0.004s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n2] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.004s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.004s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('span' type=inline), Html) [INFO] [stdout]  0.004s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[0, 0] [INFO] [stdout]  0.004s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5] TEXT: "" [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.004s DEBUG Patches: [ [INFO] [stdout] Remove @[0, 0], [INFO] [stdout] ] [INFO] [stdout]  0.004s DEBUG Applying patch: Remove @[0, 0] [INFO] [stdout]  0.001s DEBUG matching pairs: 2 [INFO] [stdout]  0.004s DEBUG arena_dom cinereus diff complete ops_count=4 matched_pairs=2 [INFO] [stdout]  0.004s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n2]
[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.004s DEBUG Processing operation op=SetText(a:3 → b:6 text=new) [INFO] [stdout]  0.004s DEBUG Processing operation op=Insert(b:5
@0 under b:4) [INFO] [stdout]  0.004s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.004s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.004s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.004s DEBUG Parent children after Insert children=[(0, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html))] [INFO] [stdout]  0.004s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.004s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.004s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.004s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.004s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.004s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.004s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.005s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.005s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.005s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.005s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.005s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.005s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.005s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.005s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.005s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n9] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.003s DEBUG Parent children after Insert children=[(0, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html))] [INFO] [stdout]  0.005s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.005s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.005s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.005s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.005s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.005s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.005s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.005s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.005s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.005s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.005s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.005s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.005s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.005s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.005s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.005s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
[INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n6]
[INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n9] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.005s DEBUG Patches: [ [INFO] [stdout] SetText "New content" @[0, 0, 0], [INFO] [stdout] Insert
@[0, 0] →slot1, [INFO] [stdout] Move [1, 0] → [0, 0, 0], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.005s DEBUG Applying patch: SetText "New content" @[0, 0, 0] [INFO] [stdout]  0.005s DEBUG Applying patch: Insert
@[0, 0] →slot1 [INFO] [stdout]  0.005s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.005s DEBUG insert_at: detaching child
at pos 0 to slot1 [INFO] [stdout]  0.005s DEBUG insert_at_position:
under at pos 0 (has 0 children) [INFO] [stdout]  0.005s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] [INFO] [stdout]  0.005s DEBUG insert_at: path=[0, 0, 0] parent=
pos=0 [INFO] [stdout]  0.005s DEBUG insert_at_position: text("New conten") under
at pos 0 (has 0 children) [INFO] [stdout]  0.005s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.006s DEBUG matching pairs: 3 [INFO] [stdout]  0.006s DEBUG arena_dom cinereus diff complete ops_count=8 matched_pairs=3 [INFO] [stdout]  0.006s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n2] [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n4] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.006s DEBUG Processing operation op=SetText(a:3 → b:5 text=text3) [INFO] [stdout]  0.006s DEBUG Processing operation op=SetText(a:5 → b:7 text=text4) [INFO] [stdout]  0.006s DEBUG Processing operation op=Insert(b:6 @1 under b:4) [INFO] [stdout]  0.006s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.006s DEBUG detached node to slot node=NodeId { index1: 4, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.006s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=Some(1) [INFO] [stdout]  0.006s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (2, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html))] [INFO] [stdout]  0.006s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n2] [INFO] [stdout] [n9] [INFO] [stdout] [n9] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n4] [INFO] [stdout] [INFO] [stdout]  0.006s DEBUG Processing operation op=Move(a:3 → b:5 @0 under b:4) [INFO] [stdout]  0.006s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.006s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.006s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[0, 0, 0] [INFO] [stdout]  0.006s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) [INFO] [stdout]  0.006s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (2, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html))] [INFO] [stdout]  0.006s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.006s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=3 [INFO] [stdout]  0.006s DEBUG Move: found occupant at target position occupant=NodeId { index1: 2, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.006s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.006s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.006s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 2, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.006s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) to=NodeRef(NodePath([0, 0])) detach_to_slot=Some(2) [INFO] [stdout]  0.006s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n9] [INFO] [stdout] [n9] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.006s DEBUG Processing operation op=Move(a:5 → b:7 @0 under b:6) [INFO] [stdout]  0.006s DEBUG Move: starting node_a=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 6, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.007s DEBUG Move: computing from reference for node node_a=NodeId { index1: 5, stamp: NodeStamp(0) } [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.007s DEBUG Move: computed from reference node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.007s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.007s DEBUG move_to_position: checking ancestry node=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.007s DEBUG Move: checking target position node=NodeId { index1: 5, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.007s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.007s DEBUG Generated Move patch node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.007s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n9] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.007s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[2] [INFO] [stdout]  0.007s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n9] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.007s DEBUG matching pairs: 2 [INFO] [stdout]  0.007s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.007s DEBUG arena_dom cinereus diff complete ops_count=5 matched_pairs=2 [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.007s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n9] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Processing operation op=Delete(a:6) [INFO] [stdout]  0.007s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n2] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Delete operation node_a=NodeId { index1: 6, stamp: NodeStamp(0) } _node_kind=Element(Atom('img' type=inline), Html) [INFO] [stdout]  0.007s DEBUG Processing operation op=SetText(a:3 → b:5 text=new_text) [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[0, 2] [INFO] [stdout]  0.007s DEBUG Processing operation op=Insert(b:6 @1 under b:4) [INFO] [stdout]  0.007s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.007s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "text1" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "text2" [INFO] [stdout] [n9] [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.007s DEBUG Patches: [ [INFO] [stdout] SetText "text3" @[0, 0, 0], [INFO] [stdout] SetText "text4" @[0, 1, 0], [INFO] [stdout] Insert @[0, 1] →slot1, [INFO] [stdout] Move [0, 0, 0] → [0, 0] →slot2, [INFO] [stdout] Move [1, 0] → [0, 1, 0], [INFO] [stdout] Remove @[2], [INFO] [stdout] Remove @[1], [INFO] [stdout] Remove @[0, 2], [INFO] [stdout] ] [INFO] [stdout]  0.007s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n2] [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Processing operation op=Insert(b:7 #text @0 under b:6) [INFO] [stdout]  0.007s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.007s DEBUG Parent children after Insert children=[(0, NodeId { index1: 7, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.007s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n2] [INFO] [stdout] [n6] [INFO] [stdout] [n7] TEXT: "updated" [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Processing operation op=Move(a:3 → b:5 @0 under b:4) [INFO] [stdout]  0.007s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.007s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.001s DEBUG matching pairs: 3 [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[0, 0, 0] [INFO] [stdout]  0.007s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) [INFO] [stdout]  0.007s DEBUG arena_dom cinereus diff complete ops_count=2 matched_pairs=3 [INFO] [stdout]  0.007s DEBUG Applying patch: SetText "text3" @[0, 0, 0] [INFO] [stdout]  0.007s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.007s DEBUG Applying patch: SetText "text4" @[0, 1, 0] [INFO] [stdout]  0.007s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.007s DEBUG Applying patch: Insert @[0, 1] →slot1 [INFO] [stdout]  0.007s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.007s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.007s DEBUG insert_at: detaching child at pos 1 to slot1 [INFO] [stdout]  0.007s DEBUG Move: found occupant at target position occupant=NodeId { index1: 2, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.007s DEBUG insert_at_position: under at pos 1 (has 2 children) [INFO] [stdout]  0.007s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.007s DEBUG Applying patch: Move [0, 0, 0] → [0, 0] →slot2 [INFO] [stdout]  0.007s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.007s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.007s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "Content" [INFO] [stdout] [n2]
[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 2, stamp: NodeStamp(0) } slot=1 [INFO] [stdout]  0.007s DEBUG insert_at: detaching child at pos 0 to slot2 [INFO] [stdout]  0.007s DEBUG Processing operation op=Insert(b:7

@1 under b:4) [INFO] [stdout]  0.007s DEBUG insert_at_position: text("text3") under at pos 0 (has 2 children) [INFO] [stdout]  0.007s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) to=NodeRef(NodePath([0, 0])) detach_to_slot=Some(1) [INFO] [stdout]  0.007s DEBUG Applying patch: Move [1, 0] → [0, 1, 0] [INFO] [stdout]  0.007s DEBUG insert_at: path=[0, 1, 0] parent= pos=0 [INFO] [stdout]  0.007s DEBUG insert_at_position: text("text4") under at pos 0 (has 0 children) [INFO] [stdout]  0.007s DEBUG Applying patch: Remove @[2] [INFO] [stdout]  0.007s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n6] [INFO] [stdout] [n7] TEXT: "updated" [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.007s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.007s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.007s DEBUG Applying patch: Remove @[0, 2] [INFO] [stdout]  0.007s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.007s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (1, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.007s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.007s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "old" [INFO] [stdout] [n6] [INFO] [stdout] [n7] TEXT: "updated" [INFO] [stdout] [n6] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.007s DEBUG Patches: [ [INFO] [stdout] SetText "new_text" @[0, 0, 0], [INFO] [stdout] Insert @[0, 1], [INFO] [stdout] Insert text "updated" @[0, 1, 0], [INFO] [stdout] Move [0, 0, 0] → [0, 0] →slot1, [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.008s DEBUG Result: text3text4 [INFO] [stdout]  0.008s DEBUG Expected: text3text4 [INFO] [stdout] test diff::tests::test_foster_parent_preserves_order ... ok [INFO] [stdout]  0.008s DEBUG Applying patch: SetText "new_text" @[0, 0, 0] [INFO] [stdout]  0.008s DEBUG Applying patch: Insert @[0, 1] [INFO] [stdout] test diff::tests::test_foster_parent_text_in_table ... ok [INFO] [stdout]  0.008s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.008s DEBUG insert_at_position: under at pos 1 (has 1 children) [INFO] [stdout]  0.008s DEBUG Applying patch: Insert text "updated" @[0, 1, 0] [INFO] [stdout]  0.008s DEBUG insert_at: path=[0, 1, 0] parent= pos=0 [INFO] [stdout]  0.008s DEBUG insert_at_position: text("updated") under at pos 0 (has 0 children) [INFO] [stdout]  0.008s DEBUG Applying patch: Move [0, 0, 0] → [0, 0] →slot1 [INFO] [stdout]  0.008s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.008s DEBUG insert_at: detaching child at pos 0 to slot1 [INFO] [stdout]  0.008s DEBUG insert_at_position: text("new_text") under at pos 0 (has 1 children) [INFO] [stdout]  0.008s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.008s DEBUG Result: new_textupdated [INFO] [stdout]  0.008s DEBUG Expected: new_textupdated [INFO] [stdout]  0.008s DEBUG Original bytes: [228, 184, 173, 230, 150, 135, 10] [INFO] [stdout]  0.008s DEBUG JSON: "中文\n" [INFO] [stdout]  0.009s DEBUG Roundtrip bytes: [228, 184, 173, 230, 150, 135, 10] [INFO] [stdout]  0.007s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

[INFO] [stdout] [n3] TEXT: "Content" [INFO] [stdout] [n2]
[INFO] [stdout] [n6]

[INFO] [stdout] [n6]

[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.009s DEBUG Processing operation op=Insert(b:8 #text @0 under b:7) [INFO] [stdout]  0.008s DEBUG Old HTML parsed: Document { [INFO] [stdout] arena: Arena { [INFO] [stdout] nodes: [ [INFO] [stdout] Node { [INFO] [stdout] parent: None, [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Document, [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 1, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 3, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('html' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('head' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 3, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('body' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 6, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 7, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('em' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 7, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Text( [INFO] [stdout] " ", [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 6, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('v<' type=inline), [INFO] [stdout] attrs: [ [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('<<' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('v<' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('em' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ], [INFO] [stdout] first_free_slot: None, [INFO] [stdout] last_free_slot: None, [INFO] [stdout] }, [INFO] [stdout] root: NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] errors: [ [INFO] [stdout] "Saw < in state BeforeAttributeName", [INFO] [stdout] "Saw < in state AttributeName", [INFO] [stdout] "Saw < in state AttributeName", [INFO] [stdout] "Saw e in state SelfClosingStartTag", [INFO] [stdout] "Unexpected open tag at end of body", [INFO] [stdout] ], [INFO] [stdout] doctype: Some( [INFO] [stdout] "html", [INFO] [stdout] ), [INFO] [stdout] } [INFO] [stdout]  0.009s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.009s DEBUG Parent children after Insert children=[(0, NodeId { index1: 7, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.009s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
[INFO] [stdout] [n3] TEXT: "Content" [INFO] [stdout] [n2]
[INFO] [stdout] [n6]

[INFO] [stdout] [n7] TEXT: "New paragraph" [INFO] [stdout] [n6]

[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.009s DEBUG Patches: [ [INFO] [stdout] Insert

@[0, 1], [INFO] [stdout] Insert text "New paragraph" @[0, 1, 0], [INFO] [stdout] ] [INFO] [stdout]  0.009s DEBUG New HTML parsed: Document { [INFO] [stdout] arena: Arena { [INFO] [stdout] nodes: [ [INFO] [stdout] Node { [INFO] [stdout] parent: None, [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Document, [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 1, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 3, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('html' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('head' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 3, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('body' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 4, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 6, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 7, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('li' type=inline), [INFO] [stdout] attrs: [], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 7, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Text( [INFO] [stdout] "a< ", [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 5, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 6, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 8, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] last_child: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 8, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('v<' type=inline), [INFO] [stdout] attrs: [ [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('<<<' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('li' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] Node { [INFO] [stdout] parent: Some( [INFO] [stdout] NodeId { [INFO] [stdout] index1: 7, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] previous_sibling: None, [INFO] [stdout] next_sibling: None, [INFO] [stdout] first_child: None, [INFO] [stdout] last_child: None, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] data: Data( [INFO] [stdout] NodeData { [INFO] [stdout] kind: Element( [INFO] [stdout] ElementData { [INFO] [stdout] tag: Atom('img' type=inline), [INFO] [stdout] attrs: [ [INFO] [stdout] ( [INFO] [stdout] QualName { [INFO] [stdout] prefix: None, [INFO] [stdout] ns: Atom('' type=static), [INFO] [stdout] local: Atom('src' type=inline), [INFO] [stdout] }, [INFO] [stdout] "", [INFO] [stdout] ), [INFO] [stdout] ], [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] ns: Html, [INFO] [stdout] }, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] ], [INFO] [stdout] first_free_slot: None, [INFO] [stdout] last_free_slot: None, [INFO] [stdout] }, [INFO] [stdout] root: NodeId { [INFO] [stdout] index1: 2, [INFO] [stdout] stamp: NodeStamp( [INFO] [stdout] 0, [INFO] [stdout] ), [INFO] [stdout] }, [INFO] [stdout] errors: [ [INFO] [stdout] "Saw in state TagOpen", [INFO] [stdout] "Saw < in state BeforeAttributeName", [INFO] [stdout] "Saw < in state AttributeName", [INFO] [stdout] "Saw < in state AttributeName", [INFO] [stdout] "Saw l in state SelfClosingStartTag", [INFO] [stdout] "Unexpected open tag at end of body", [INFO] [stdout] ], [INFO] [stdout] doctype: Some( [INFO] [stdout] "html", [INFO] [stdout] ), [INFO] [stdout] } [INFO] [stdout]  0.009s DEBUG matching pairs: 8 [INFO] [stdout]  0.009s DEBUG arena_dom cinereus diff complete ops_count=19 matched_pairs=8 [INFO] [stdout]  0.010s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

[INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
[INFO] [stdout] [n12]
[INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
[INFO] [stdout] [n11]
[INFO] [stdout] [n2]
[INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:5 @0 under b:4) [INFO] [stdout]  0.010s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.010s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
[INFO] [stdout] [n12]
[INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
[INFO] [stdout] [n11]
[INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:7 @1 under b:4) [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 19, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG matching pairs: 2 [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
[INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
[INFO] [stdout] [n12]
[INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
[INFO] [stdout] [n11]
[INFO] [stdout] [n2]
[INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:9 @2 under b:4) [INFO] [stdout]  0.010s DEBUG arena_dom cinereus diff complete ops_count=7 matched_pairs=2 [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=2 detach_to_slot=None [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 19, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=SetText(a:3 → b:6 text=a< ) [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:5
  • @0 under b:4) [INFO] [stdout]  0.010s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.010s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
    [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
    [INFO] [stdout] [n12]
    [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
    [INFO] [stdout] [n11]
    [INFO] [stdout] [n2]
    [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:11 @3 under b:4) [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=3 detach_to_slot=None [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 19, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (3, NodeId { index1: 21, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
  • [INFO] [stdout] [n7]
  • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:7 @1 under b:5) [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 7, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.010s DEBUG Parent children after Insert children=[(0, NodeId { index1: 10, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('v<' type=inline), Html))] [INFO] [stdout]  0.010s DEBUG matching pairs: 10 [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n21] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
    [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
    [INFO] [stdout] [n12]
    [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
    [INFO] [stdout] [n11]
    [INFO] [stdout] [n2]
    [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG Processing operation op=Insert(b:12 #text @0 under b:11) [INFO] [stdout]  0.010s DEBUG arena_dom cinereus diff complete ops_count=26 matched_pairs=10 [INFO] [stdout] test diff::tests::test_diff_remove_all_children ... ok [INFO] [stdout]  0.011s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
    [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

    [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

    [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
    • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
    • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
    • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
    • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
    • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
    • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
    [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n2]
    [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.011s DEBUG Processing operation op=SetText(a:8 → b:15 text=item) [INFO] [stdout]  0.011s DEBUG Processing operation op=SetText(a:12 → b:16 text= [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] ) [INFO] [stdout]  0.011s DEBUG Processing operation op=Insert(b:5
    @0 under b:4) [INFO] [stdout]  0.011s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.011s DEBUG matching pairs: 3 [INFO] [stdout]  0.011s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.011s DEBUG arena_dom cinereus diff complete ops_count=14 matched_pairs=3 [INFO] [stdout]  0.011s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.011s DEBUG Parent children after Insert children=[(0, NodeId { index1: 25, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html))] [INFO] [stdout]  0.011s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

    [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

    [INFO] [stdout] [n5]
    [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n5]
    [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
    [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
    [INFO] [stdout] [n7]
    [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.010s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
  • [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [n9] [INFO] [stdout] [n9] [INFO] [stdout] [n7]
  • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.011s DEBUG Processing operation op=Insert(b:8 @0 under b:7) [INFO] [stdout]  0.011s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 9, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.011s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
    [INFO] [stdout] [n25]
    [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
    [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

    [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

    [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
    • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
    • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
    • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
    • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
    • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
    • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
    [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n2]
    [INFO] [stdout] [INFO] [stdout]  0.011s DEBUG Parent children after Insert children=[(0, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html))] [INFO] [stdout]  0.011s DEBUG Processing operation op=Insert(b:10
      @3 under b:5) [INFO] [stdout]  0.011s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [n9] [INFO] [stdout] [n11] [INFO] [stdout] [n11] [INFO] [stdout] [n9] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.011s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 25, stamp: NodeStamp(0) } position=3 detach_to_slot=None [INFO] [stdout]  0.011s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.011s DEBUG Parent children after Insert children=[(0, NodeId { index1: 28, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 30, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 27, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html))] [INFO] [stdout]  0.011s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 7, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.011s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.011s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.011s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.011s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 10, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('v<' type=inline), Html))] [INFO] [stdout]  0.011s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 7, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.011s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.011s DEBUG Move: found occupant at target position occupant=NodeId { index1: 10, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.011s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.011s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n27]
      [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.011s DEBUG detached node to slot node=NodeId { index1: 10, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.011s DEBUG Processing operation op=Insert(b:12
    • @1 under b:10) [INFO] [stdout]  0.011s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 10, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.011s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=Some(2) [INFO] [stdout]  0.012s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 27, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.012s DEBUG Parent children after Insert children=[(0, NodeId { index1: 32, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 31, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.012s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n9] [INFO] [stdout] [n11] [INFO] [stdout] [n11] [INFO] [stdout] [n9] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2] [INFO] [stdout] Slot 2: [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.012s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('v<' type=inline), Html) [INFO] [stdout]  0.012s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.012s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n9] [INFO] [stdout] [n11] [INFO] [stdout] [n11] [INFO] [stdout] [n9] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] Slot 2: [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.012s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n31]
      • [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('em' type=inline), Html) [INFO] [stdout]  0.012s DEBUG Processing operation op=Insert(b:14 @1 under b:12) [INFO] [stdout]  0.012s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.012s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 31, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.012s DEBUG Parent children after Insert children=[(0, NodeId { index1: 34, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 33, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.012s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n3] TEXT: " " [INFO] [stdout] [n9] [INFO] [stdout] [n11] [INFO] [stdout] [n11] [INFO] [stdout] [n9] [INFO] [stdout] [n7]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n10] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Patches: [ [INFO] [stdout] SetText "a< " @[0, 0, 0], [INFO] [stdout] Insert
    • @[0, 0] →slot1, [INFO] [stdout] Insert @[0, 0, 1] (2 attrs), [INFO] [stdout] Insert @[0, 0, 1, 0] (1 attrs), [INFO] [stdout] Move [1, 0] → [0, 0, 0] →slot2, [INFO] [stdout] Remove @[1, 1], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.012s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n31]
      • [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Processing operation op=Move(a:22 → b:17 @4 under b:5) [INFO] [stdout]  0.012s DEBUG Move: starting node_a=NodeId { index1: 22, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } new_position=4 [INFO] [stdout]  0.012s DEBUG Move: computing from reference for node node_a=NodeId { index1: 22, stamp: NodeStamp(0) } [INFO] [stdout]  0.012s DEBUG get_node_ref: computed path node=NodeId { index1: 22, stamp: NodeStamp(0) } path=[1, 4] [INFO] [stdout]  0.012s DEBUG Move: computed from reference node_a=NodeId { index1: 22, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4])) [INFO] [stdout]  0.012s DEBUG Applying patch: SetText "a< " @[0, 0, 0] [INFO] [stdout]  0.012s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 28, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 30, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 27, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html))] [INFO] [stdout]  0.012s DEBUG Applying patch: Insert
    • @[0, 0] →slot1 [INFO] [stdout]  0.012s DEBUG move_to_position: checking ancestry node=NodeId { index1: 22, stamp: NodeStamp(0) } new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.012s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.012s DEBUG Move: checking target position node=NodeId { index1: 22, stamp: NodeStamp(0) } position=4 children_count=4 [INFO] [stdout]  0.012s DEBUG insert_at: detaching child at pos 0 to slot1 [INFO] [stdout]  0.012s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.012s DEBUG insert_at_position:
    • under at pos 0 (has 0 children) [INFO] [stdout]  0.012s DEBUG Applying patch: Insert @[0, 0, 1] (2 attrs) [INFO] [stdout]  0.012s DEBUG Generated Move patch node_a=NodeId { index1: 22, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4])) to=NodeRef(NodePath([0, 0, 4])) detach_to_slot=None [INFO] [stdout]  0.012s DEBUG insert_at: path=[0, 0, 1] parent=
    • pos=1 [INFO] [stdout]  0.012s DEBUG insert_at_position: under
    • at pos 1 (has 0 children) [INFO] [stdout]  0.012s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.012s DEBUG Applying patch: Insert @[0, 0, 1, 0] (1 attrs) [INFO] [stdout]  0.012s DEBUG insert_at: path=[0, 0, 1, 0] parent= pos=0 [INFO] [stdout]  0.012s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.012s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] →slot2 [INFO] [stdout]  0.012s DEBUG insert_at: path=[0, 0, 0] parent=
    • pos=0 [INFO] [stdout]  0.012s DEBUG insert_at: detaching child text("") at pos 0 to slot2 [INFO] [stdout]  0.012s DEBUG insert_at_position: text("a< ") under
    • at pos 0 (has 1 children) [INFO] [stdout]  0.012s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.012s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.012s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n31]
      • [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.012s DEBUG Processing operation op=Move(a:18 → b:11 @0 under b:10) [INFO] [stdout]  0.012s DEBUG Move: starting node_a=NodeId { index1: 18, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 10, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 27, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.012s DEBUG Move: computing from reference for node node_a=NodeId { index1: 18, stamp: NodeStamp(0) } [INFO] [stdout]  0.012s DEBUG get_node_ref: computed path node=NodeId { index1: 18, stamp: NodeStamp(0) } path=[1, 3, 4] [INFO] [stdout]  0.012s DEBUG Move: computed from reference node_a=NodeId { index1: 18, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 4])) [INFO] [stdout]  0.012s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 32, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 31, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.012s DEBUG move_to_position: checking ancestry node=NodeId { index1: 18, stamp: NodeStamp(0) } new_parent=NodeId { index1: 27, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.012s DEBUG Move: checking target position node=NodeId { index1: 18, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.012s DEBUG Move: found occupant at target position occupant=NodeId { index1: 32, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.012s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.012s DEBUG detached node to slot node=NodeId { index1: 32, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.012s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 32, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.012s DEBUG Generated Move patch node_a=NodeId { index1: 18, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 4])) to=NodeRef(NodePath([0, 0, 3, 0])) detach_to_slot=Some(2) [INFO] [stdout]  0.012s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG Processing operation op=Move(a:10 → b:13 @0 under b:12) [INFO] [stdout]  0.013s DEBUG Move: starting node_a=NodeId { index1: 10, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 12, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 31, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.013s DEBUG Move: computing from reference for node node_a=NodeId { index1: 10, stamp: NodeStamp(0) } [INFO] [stdout]  0.013s DEBUG get_node_ref: computed path node=NodeId { index1: 10, stamp: NodeStamp(0) } path=[1, 3, 1, 0] [INFO] [stdout]  0.012s DEBUG Processing operation op=SetText(a:3 → b:6 text=d ) [INFO] [stdout]  0.013s DEBUG Move: computed from reference node_a=NodeId { index1: 10, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1, 0])) [INFO] [stdout]  0.013s DEBUG Processing operation op=SetText(a:6 → b:8 text=d<<<&<) [INFO] [stdout]  0.013s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 34, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 33, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG Processing operation op=Insert(b:5 @0 under b:4) [INFO] [stdout]  0.013s DEBUG move_to_position: checking ancestry node=NodeId { index1: 10, stamp: NodeStamp(0) } new_parent=NodeId { index1: 31, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.013s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.013s DEBUG Move: checking target position node=NodeId { index1: 10, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.013s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.013s DEBUG Move: found occupant at target position occupant=NodeId { index1: 34, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.013s DEBUG created new slot slot_num=3 [INFO] [stdout]  0.013s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.013s DEBUG detached node to slot node=NodeId { index1: 34, stamp: NodeStamp(0) } slot_num=3 [INFO] [stdout]  0.013s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 34, stamp: NodeStamp(0) } slot=3 [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html)), (1, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (2, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('span' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG Generated Move patch node_a=NodeId { index1: 10, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1, 0])) to=NodeRef(NodePath([0, 0, 3, 1, 0])) detach_to_slot=Some(3) [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n5]
      [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n5]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n7]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

      [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

      [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG Processing operation op=Insert(b:7
    • @2 under b:4) [INFO] [stdout]  0.013s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.013s DEBUG detached node to slot node=NodeId { index1: 7, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.013s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=2 detach_to_slot=Some(2) [INFO] [stdout]  0.010s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 21, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html)), (1, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (2, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 22, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.013s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG Processing operation op=Move(a:6 → b:9 @2 under b:5) [INFO] [stdout]  0.013s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } new_position=2 [INFO] [stdout]  0.013s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n5]
      [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n5]
      [INFO] [stdout] [n15]
    • [INFO] [stdout] [n15]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

      [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

      [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n7]
      [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 2] [INFO] [stdout]  0.013s DEBUG Processing operation op=Insert(b:9 @1 under b:7) [INFO] [stdout]  0.013s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) [INFO] [stdout]  0.013s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 28, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 30, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 27, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html)), (4, NodeId { index1: 22, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 15, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.013s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.013s DEBUG Processing operation op=Insert(b:13
      @4 under b:4) [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 18, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('a"d' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=2 children_count=5 [INFO] [stdout]  0.013s DEBUG Move: found occupant at target position occupant=NodeId { index1: 30, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.013s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=4 detach_to_slot=None [INFO] [stdout]  0.013s DEBUG created new slot slot_num=4 [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 19, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (3, NodeId { index1: 21, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (4, NodeId { index1: 23, stamp: NodeStamp(0) }, Element(Atom('article' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG detached node to slot node=NodeId { index1: 30, stamp: NodeStamp(0) } slot_num=4 [INFO] [stdout]  0.013s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 30, stamp: NodeStamp(0) } slot=4 [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) to=NodeRef(NodePath([0, 0, 2])) detach_to_slot=Some(4) [INFO] [stdout]  0.013s DEBUG Processing operation op=Insert(b:18

      @2 under b:13) [INFO] [stdout]  0.013s DEBUG Result:
    • a<
    • [INFO] [stdout]  0.013s DEBUG Expected:
    • a<
    • [INFO] [stdout]  0.013s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 23, stamp: NodeStamp(0) } position=2 detach_to_slot=None [INFO] [stdout]  0.013s DEBUG Parent children after Insert children=[(0, NodeId { index1: 25, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 24, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html))] [INFO] [stdout] test diff::tests::test_diff_text_change ... ok [INFO] [stdout]  0.013s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n24]

      [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:4 → b:7 @1 under b:5) [INFO] [stdout]  0.014s DEBUG Processing operation op=Insert(b:19 #text @0 under b:18) [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 4, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 24, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.014s DEBUG Parent children after Insert children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.014s DEBUG Move: computed from reference node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1])) [INFO] [stdout]  0.014s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 28, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 6, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 27, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html)), (4, NodeId { index1: 22, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.014s DEBUG move_to_position: checking ancestry node=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.014s DEBUG Move: checking target position node=NodeId { index1: 4, stamp: NodeStamp(0) } position=1 children_count=5 [INFO] [stdout]  0.014s DEBUG Move: found occupant at target position occupant=NodeId { index1: 29, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.014s DEBUG created new slot slot_num=5 [INFO] [stdout]  0.014s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:9 → b:16 @1 under b:13) [INFO] [stdout]  0.014s DEBUG detached node to slot node=NodeId { index1: 29, stamp: NodeStamp(0) } slot_num=5 [INFO] [stdout]  0.014s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 29, stamp: NodeStamp(0) } slot=5 [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 13, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 23, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 9, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG Generated Move patch node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1])) to=NodeRef(NodePath([0, 0, 1])) detach_to_slot=Some(5) [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 9, stamp: NodeStamp(0) } path=[1, 3] [INFO] [stdout]  0.014s DEBUG Move: computed from reference node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3])) [INFO] [stdout]  0.014s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 25, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 24, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html))] [INFO] [stdout]  0.014s DEBUG move_to_position: checking ancestry node=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent=NodeId { index1: 23, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.014s DEBUG Move: checking target position node=NodeId { index1: 9, stamp: NodeStamp(0) } position=1 children_count=3 [INFO] [stdout]  0.014s DEBUG Move: found occupant at target position occupant=NodeId { index1: 26, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.014s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.014s DEBUG detached node to slot node=NodeId { index1: 26, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.014s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 26, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.014s DEBUG Generated Move patch node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3])) to=NodeRef(NodePath([0, 4, 1])) detach_to_slot=Some(2) [INFO] [stdout]  0.014s DEBUG matching pairs: 2 [INFO] [stdout]  0.014s DEBUG arena_dom cinereus diff complete ops_count=1 matched_pairs=2 [INFO] [stdout]  0.014s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
      [INFO] [stdout] [n2]
      [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=UpdateProps(a:2 class: → bar) [INFO] [stdout]  0.014s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:7 → b:14 @0 under b:13) [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 7, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 13, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 23, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 7, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[1, 2] [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.014s DEBUG Move: computed from reference node_a=NodeId { index1: 7, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) [INFO] [stdout]  0.014s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.014s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 25, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 24, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html))] [INFO] [stdout]  0.013s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n5]
      [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n5]
      [INFO] [stdout] [n15]
    • [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

      [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

      [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n7]
      [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG move_to_position: checking ancestry node=NodeId { index1: 7, stamp: NodeStamp(0) } new_parent=NodeId { index1: 23, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.014s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 28, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 4, stamp: NodeStamp(0) }, Element(Atom('h3' type=inline), Html)), (2, NodeId { index1: 6, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 27, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html)), (4, NodeId { index1: 22, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.014s DEBUG Move: checking target position node=NodeId { index1: 7, stamp: NodeStamp(0) } position=0 children_count=3 [INFO] [stdout]  0.014s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 25, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.014s DEBUG Move: found occupant at target position occupant=NodeId { index1: 25, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.014s DEBUG created new slot slot_num=3 [INFO] [stdout]  0.014s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=5 [INFO] [stdout]  0.014s DEBUG detached node to slot node=NodeId { index1: 25, stamp: NodeStamp(0) } slot_num=3 [INFO] [stdout]  0.014s DEBUG Move: found occupant at target position occupant=NodeId { index1: 28, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.014s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 25, stamp: NodeStamp(0) } slot=3 [INFO] [stdout]  0.014s DEBUG created new slot slot_num=6 [INFO] [stdout]  0.014s DEBUG Generated Move patch node_a=NodeId { index1: 7, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) to=NodeRef(NodePath([0, 4, 0])) detach_to_slot=Some(3) [INFO] [stdout]  0.014s DEBUG detached node to slot node=NodeId { index1: 28, stamp: NodeStamp(0) } slot_num=6 [INFO] [stdout]  0.014s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 28, stamp: NodeStamp(0) } slot=6 [INFO] [stdout]  0.014s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=Some(6) [INFO] [stdout]  0.014s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:4 → b:6 @0 under b:5) [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 17, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 4, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 0, 0] [INFO] [stdout]  0.014s DEBUG Move: computed from reference node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0, 0])) [INFO] [stdout]  0.014s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.014s DEBUG move_to_position: checking ancestry node=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent=NodeId { index1: 17, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.014s DEBUG Move: checking target position node=NodeId { index1: 4, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.014s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.014s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Generated Move patch node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:8 → b:15 @0 under b:14) [INFO] [stdout]  0.014s DEBUG Move: starting node_a=NodeId { index1: 8, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 14, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 33, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.014s DEBUG Move: computing from reference for node node_a=NodeId { index1: 8, stamp: NodeStamp(0) } [INFO] [stdout]  0.014s DEBUG get_node_ref: computed path node=NodeId { index1: 8, stamp: NodeStamp(0) } path=[1, 3, 0] [INFO] [stdout]  0.015s DEBUG Move: computed from reference node_a=NodeId { index1: 8, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 0])) [INFO] [stdout]  0.015s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.015s DEBUG move_to_position: checking ancestry node=NodeId { index1: 8, stamp: NodeStamp(0) } new_parent=NodeId { index1: 33, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.015s DEBUG Move: checking target position node=NodeId { index1: 8, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.015s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.014s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Move(a:6 → b:8 @0 under b:7) [INFO] [stdout]  0.015s DEBUG Generated Move patch node_a=NodeId { index1: 8, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 0])) to=NodeRef(NodePath([0, 0, 3, 1, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.015s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 19, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.015s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 1, 0] [INFO] [stdout]  0.015s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1, 0])) [INFO] [stdout]  0.015s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.015s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 19, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.015s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.015s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.015s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.015s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Move(a:12 → b:16 @2 under b:10) [INFO] [stdout]  0.015s DEBUG Move: starting node_a=NodeId { index1: 12, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 10, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 27, stamp: NodeStamp(0) } new_position=2 [INFO] [stdout]  0.015s DEBUG Move: computing from reference for node node_a=NodeId { index1: 12, stamp: NodeStamp(0) } [INFO] [stdout]  0.015s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Move(a:14 → b:10 @0 under b:9) [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 12, stamp: NodeStamp(0) } path=[1, 3, 1, 1, 0] [INFO] [stdout]  0.015s DEBUG Move: starting node_a=NodeId { index1: 14, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 9, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 20, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.015s DEBUG Move: computed from reference node_a=NodeId { index1: 12, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1, 1, 0])) [INFO] [stdout]  0.015s DEBUG Move: computing from reference for node node_a=NodeId { index1: 14, stamp: NodeStamp(0) } [INFO] [stdout]  0.015s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 18, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 31, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 14, stamp: NodeStamp(0) } path=[1, 4, 0, 0, 0] [INFO] [stdout]  0.015s DEBUG move_to_position: checking ancestry node=NodeId { index1: 12, stamp: NodeStamp(0) } new_parent=NodeId { index1: 27, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.015s DEBUG Move: computed from reference node_a=NodeId { index1: 14, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4, 0, 0, 0])) [INFO] [stdout]  0.015s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.015s DEBUG Move: checking target position node=NodeId { index1: 12, stamp: NodeStamp(0) } position=2 children_count=2 [INFO] [stdout]  0.015s DEBUG move_to_position: checking ancestry node=NodeId { index1: 14, stamp: NodeStamp(0) } new_parent=NodeId { index1: 20, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.015s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.015s DEBUG Move: checking target position node=NodeId { index1: 14, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.015s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.015s DEBUG Generated Move patch node_a=NodeId { index1: 12, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1, 1, 0])) to=NodeRef(NodePath([0, 0, 3, 2])) detach_to_slot=None [INFO] [stdout]  0.015s DEBUG Generated Move patch node_a=NodeId { index1: 14, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4, 0, 0, 0])) to=NodeRef(NodePath([0, 2, 0])) detach_to_slot=None [INFO] [stdout]  0.015s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n3] [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Delete(a:3) [INFO] [stdout]  0.015s DEBUG Delete operation node_a=NodeId { index1: 3, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.015s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n47] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.015s DEBUG Processing operation op=Delete(a:11) [INFO] [stdout]  0.015s DEBUG Delete operation node_a=NodeId { index1: 11, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 11, stamp: NodeStamp(0) } path=[1, 3, 1, 1] [INFO] [stdout] test diff::tests::test_foster_parent_whitespace ... ok [INFO] [stdout] test diff::tests::test_arena_dom_diff ... ok [INFO] [stdout]  0.015s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout] test diff::tests::test_diff_actual_fuzzer_crash ... ok [INFO] [stdout]  0.015s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout] test diff::tests::test_diff_complex_fuzzer_case ... ok [INFO] [stdout] test diff::tests::test_facet_json_unicode_escape_bug ... ok [INFO] [stdout] test diff::tests::test_arena_dom_diff_add_element ... ok [INFO] [stdout] test diff::tests::test_foster_parent_multiple_items ... ok [INFO] [stdout]  0.015s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n13] [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n13] [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.015s DEBUG Processing operation op=Delete(a:13) [INFO] [stdout]  0.015s DEBUG Delete operation node_a=NodeId { index1: 13, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.015s DEBUG get_node_ref: computed path node=NodeId { index1: 13, stamp: NodeStamp(0) } path=[1, 4, 0, 0] [INFO] [stdout] test diff::tests::test_foster_parent_spec_example ... ok [INFO] [stdout] test diff::tests::test_fuzzer_em_li_navigate_text ... ok [INFO] [stdout] test diff::tests::test_diff_attr_change ... ok [INFO] [stdout]  0.015s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n12]
      [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n12]
      [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.016s DEBUG Processing operation op=Delete(a:12) [INFO] [stdout]  0.016s DEBUG Delete operation node_a=NodeId { index1: 12, stamp: NodeStamp(0) } _node_kind=Element(Atom('article' type=inline), Html) [INFO] [stdout]  0.016s DEBUG get_node_ref: computed path node=NodeId { index1: 12, stamp: NodeStamp(0) } path=[1, 4, 0] [INFO] [stdout]  0.015s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n9]
      • [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n48] TEXT: "" [INFO] [stdout] [n9]
      • [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.016s DEBUG Processing operation op=Delete(a:9) [INFO] [stdout]  0.016s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n38] TEXT: "" [INFO] [stdout] [n11]
      [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.016s DEBUG Processing operation op=Delete(a:11) [INFO] [stdout]  0.016s DEBUG Delete operation node_a=NodeId { index1: 11, stamp: NodeStamp(0) } _node_kind=Element(Atom('article' type=inline), Html) [INFO] [stdout]  0.016s DEBUG get_node_ref: computed path node=NodeId { index1: 11, stamp: NodeStamp(0) } path=[1, 4] [INFO] [stdout]  0.016s DEBUG Delete operation node_a=NodeId { index1: 9, stamp: NodeStamp(0) } _node_kind=Element(Atom('li' type=inline), Html) [INFO] [stdout]  0.016s DEBUG get_node_ref: computed path node=NodeId { index1: 9, stamp: NodeStamp(0) } path=[1, 3, 1] [INFO] [stdout]  0.016s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n39] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.016s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.016s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('article' type=inline), Html) [INFO] [stdout]  0.016s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.016s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n17] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n17] [INFO] [stdout] [n19] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n19] [INFO] [stdout] [n20] [INFO] [stdout] [n14] TEXT: "<" [INFO] [stdout] [n20] [INFO] [stdout] [n21] [INFO] [stdout] [n22] TEXT: "<" [INFO] [stdout] [n21] [INFO] [stdout] [n23]
      [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n24]

      [INFO] [stdout] [n27] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n24]

      [INFO] [stdout] [n23]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.014s DEBUG Processing operation op=Move(a:3 → b:6 @1 under b:4) [INFO] [stdout]  0.016s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n13] TEXT: "\n " [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:13) [INFO] [stdout]  0.017s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.017s DEBUG Patches: [ [INFO] [stdout] Insert @[0, 0] →slot1, [INFO] [stdout] Insert @[0, 1], [INFO] [stdout] Insert @[0, 2], [INFO] [stdout] Insert @[0, 3], [INFO] [stdout] Insert text "<" @[0, 3, 0], [INFO] [stdout] Insert
      @[0, 4], [INFO] [stdout] Insert

      @[0, 4, 2], [INFO] [stdout] Insert text "<<<<<<<<<<<<<" @[0, 4, 2, 0], [INFO] [stdout] Move [1, 3] → [0, 4, 1] →slot2, [INFO] [stdout] Move [1, 2] → [0, 4, 0] →slot3, [INFO] [stdout] Move [1, 0, 0] → [0, 0, 0], [INFO] [stdout] Move [1, 1, 0] → [0, 1, 0], [INFO] [stdout] Move [1, 4, 0, 0, 0] → [0, 2, 0], [INFO] [stdout] Remove @[1, 0], [INFO] [stdout] Remove @[1, 1], [INFO] [stdout] Remove @[1, 4, 0, 0], [INFO] [stdout] Remove @[1, 4, 0], [INFO] [stdout] Remove @[1, 4], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.017s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 13, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.017s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.017s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html)), (1, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (2, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('li' type=inline), Html))] [INFO] [stdout]  0.017s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.017s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=1 children_count=3 [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 13, stamp: NodeStamp(0) } path=[1, 3, 2] [INFO] [stdout]  0.017s DEBUG Move: found occupant at target position occupant=NodeId { index1: 5, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.017s DEBUG created new slot slot_num=3 [INFO] [stdout]  0.017s DEBUG detached node to slot node=NodeId { index1: 5, stamp: NodeStamp(0) } slot_num=3 [INFO] [stdout]  0.017s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 5, stamp: NodeStamp(0) } slot=3 [INFO] [stdout]  0.017s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 1])) detach_to_slot=Some(3) [INFO] [stdout]  0.017s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
    • [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

      [INFO] [stdout] [n19] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

      [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n7]
      [INFO] [stdout] Slot 3: [INFO] [stdout] [n5]
      [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n5]
      [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Move(a:6 → b:8 @0 under b:7) [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n14]
      • [INFO] [stdout] [n15] TEXT: "Feature two with " [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 15, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:15) [INFO] [stdout]  0.017s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 15, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[3, 0] [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 15, stamp: NodeStamp(0) } path=[1, 3, 3, 0] [INFO] [stdout]  0.017s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([3, 0])) [INFO] [stdout]  0.017s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 18, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 17, stamp: NodeStamp(0) }, Element(Atom('a"d' type=inline), Html))] [INFO] [stdout]  0.017s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 15, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.017s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.017s DEBUG Move: found occupant at target position occupant=NodeId { index1: 18, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.017s DEBUG created new slot slot_num=4 [INFO] [stdout]  0.017s DEBUG detached node to slot node=NodeId { index1: 18, stamp: NodeStamp(0) } slot_num=4 [INFO] [stdout]  0.017s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 18, stamp: NodeStamp(0) } slot=4 [INFO] [stdout]  0.017s DEBUG matching pairs: 2 [INFO] [stdout]  0.017s DEBUG arena_dom cinereus diff complete ops_count=9 matched_pairs=2 [INFO] [stdout]  0.017s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([3, 0])) to=NodeRef(NodePath([0, 2, 0])) detach_to_slot=Some(4) [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
      [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

      [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

      [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
        [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
      • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
      • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
      [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
      [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
      [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
        [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n14]
      • [INFO] [stdout] [n51] TEXT: "" [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "emphasis" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
      • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
      • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
      [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
      [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:17) [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 17, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 17, stamp: NodeStamp(0) } path=[1, 3, 3, 1, 0] [INFO] [stdout]  0.017s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
        [INFO] [stdout] [n3]
          [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n5]
            [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n5]
          [INFO] [stdout] [n3]
        [INFO] [stdout] [n2]
      [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=UpdateProps(a:4 src: → aaa) [INFO] [stdout]  0.017s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
    • [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
    • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

      [INFO] [stdout] [n19] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n2]

      [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
      [INFO] [stdout] [n7]
      [INFO] [stdout] Slot 3: [INFO] [stdout] [n5]
      [INFO] [stdout] [n21] TEXT: "" [INFO] [stdout] [n5]
      [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Insert(b:5
        @0 under b:4) [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('span' type=inline), Html) [INFO] [stdout]  0.017s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.017s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.017s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.016s DEBUG matching pairs: 3 [INFO] [stdout]  0.017s DEBUG Parent children after Insert children=[(0, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html))] [INFO] [stdout]  0.017s DEBUG arena_dom cinereus diff complete ops_count=9 matched_pairs=3 [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
        [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

        [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

        [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
          [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
        • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
        • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
        [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
        [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
          [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n14]
        • [INFO] [stdout] [n51] TEXT: "" [INFO] [stdout] [n16] [INFO] [stdout] [n52] TEXT: "" [INFO] [stdout] [n16] [INFO] [stdout] [n14]
        • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
        • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
        • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
        [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
        [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:16) [INFO] [stdout]  0.017s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
          [INFO] [stdout] [n9]
        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
          [INFO] [stdout] [n3]
            [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n5]
              [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n5]
            [INFO] [stdout] [n3]
          [INFO] [stdout] [n2]
        [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 16, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.017s DEBUG Processing operation op=Insert(b:6
          @0 under b:5) [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
        • [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
        • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

          [INFO] [stdout] [n19] TEXT: "" [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]

          [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
          [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
          [INFO] [stdout] [n7]
          [INFO] [stdout] Slot 3: [INFO] [stdout] [n5]
          [INFO] [stdout] [n21] TEXT: "" [INFO] [stdout] [n5]
          [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 16, stamp: NodeStamp(0) } path=[1, 3, 3, 1] [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.017s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 9, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('p' type=inline), Html) [INFO] [stdout]  0.017s DEBUG Parent children after Insert children=[(0, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html))] [INFO] [stdout]  0.017s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n2] [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n4] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.017s DEBUG Processing operation op=SetText(a:3 → b:5 text=n) [INFO] [stdout]  0.017s DEBUG Processing operation op=SetText(a:5 → b:7 text=aaa) [INFO] [stdout]  0.017s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
            [INFO] [stdout] [n11]
              [INFO] [stdout] [n11]
            [INFO] [stdout] [n9]
          [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
            [INFO] [stdout] [n3]
              [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n5]
                [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n5]
              [INFO] [stdout] [n3]
            [INFO] [stdout] [n2]
          [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG Processing operation op=Insert(b:6 @1 under b:4) [INFO] [stdout]  0.017s DEBUG Processing operation op=Insert(b:7
            @1 under b:5) [INFO] [stdout]  0.017s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.017s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 9, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.017s DEBUG detached node to slot node=NodeId { index1: 4, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.017s DEBUG Parent children after Insert children=[(0, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html)), (1, NodeId { index1: 12, stamp: NodeStamp(0) }, Element(Atom('ul' type=inline), Html))] [INFO] [stdout]  0.017s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=Some(1) [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
          • [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
          • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
            [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
            [INFO] [stdout] [n7]
            [INFO] [stdout] Slot 3: [INFO] [stdout] [n5]
            [INFO] [stdout] [n21] TEXT: "" [INFO] [stdout] [n5]
            [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG matching pairs: 2 [INFO] [stdout]  0.017s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.017s DEBUG arena_dom cinereus diff complete ops_count=6 matched_pairs=2 [INFO] [stdout]  0.017s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.017s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
              [INFO] [stdout] [n11]
                [INFO] [stdout] [n11]
              [INFO] [stdout] [n12]
                [INFO] [stdout] [n12]
              [INFO] [stdout] [n9]
            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
              [INFO] [stdout] [n3]
                [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n5]
                  [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n5]
                [INFO] [stdout] [n3]
              [INFO] [stdout] [n2]
            [INFO] [stdout] [INFO] [stdout]  0.017s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

            [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
              [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
            • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
            • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
            [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
            [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
              [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n14]
            • [INFO] [stdout] [n51] TEXT: "" [INFO] [stdout] [n53] TEXT: "" [INFO] [stdout] [n14]
            • [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
            • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
            • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
            [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Move(a:4 → b:8 @0 under b:7) [INFO] [stdout]  0.017s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[3] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:14) [INFO] [stdout]  0.018s DEBUG Move: starting node_a=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 12, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 14, stamp: NodeStamp(0) } _node_kind=Element(Atom('li' type=inline), Html) [INFO] [stdout]  0.018s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
              [INFO] [stdout] [n2]
            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Move: computing from reference for node node_a=NodeId { index1: 4, stamp: NodeStamp(0) } [INFO] [stdout]  0.018s DEBUG Processing operation op=UpdateProps(a:2 start: → 93) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 14, stamp: NodeStamp(0) } path=[1, 3, 3] [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 0, 0] [INFO] [stdout]  0.018s DEBUG Processing operation op=Insert(b:5
              @0 under b:4) [INFO] [stdout]  0.018s DEBUG Move: computed from reference node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0, 0])) [INFO] [stdout]  0.018s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.018s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.018s DEBUG move_to_position: checking ancestry node=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent=NodeId { index1: 12, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
            1. [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
            2. [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "Unclosed span" [INFO] [stdout] [n9]
              [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
              [INFO] [stdout] [n7]
              [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:8) [INFO] [stdout]  0.018s DEBUG Move: checking target position node=NodeId { index1: 4, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.018s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 8, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.018s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.018s DEBUG Parent children after Insert children=[(0, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 8, stamp: NodeStamp(0) } path=[2, 0] [INFO] [stdout]  0.018s DEBUG Generated Move patch node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0, 0])) to=NodeRef(NodePath([0, 0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.018s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5]
                [INFO] [stdout] [n5]
              [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                [INFO] [stdout] [n2]
              [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Insert(b:7
                @2 under b:4) [INFO] [stdout]  0.018s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=2 detach_to_slot=None [INFO] [stdout]  0.018s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
                  [INFO] [stdout] [n11]
                    [INFO] [stdout] [n11]
                  [INFO] [stdout] [n12]
                    [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n12]
                  [INFO] [stdout] [n9]
                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                  [INFO] [stdout] [n3]
                    [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n5]
                      [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n5]
                    [INFO] [stdout] [n3]
                  [INFO] [stdout] [n2]
                [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                  [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
                  [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n54] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
                • [INFO] [stdout] [n20] TEXT: "Feature three" [INFO] [stdout] [n19]
                • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
                [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
                [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:6) [INFO] [stdout]  0.018s DEBUG Parent children after Insert children=[(0, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html)), (1, NodeId { index1: 8, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
              1. [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
              2. [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n9]
                [INFO] [stdout] [n10] TEXT: "Block in span" [INFO] [stdout] [n9]
                [INFO] [stdout] [n7]
                [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:20) [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 6, stamp: NodeStamp(0) } _node_kind=Element(Atom('img' type=inline), Html) [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:10) [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 20, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 0, 1, 0] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 10, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.018s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5]
                  [INFO] [stdout] [n5]
                [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n7]
                  [INFO] [stdout] [n7]
                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                  [INFO] [stdout] [n2]
                [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 20, stamp: NodeStamp(0) } path=[1, 3, 5, 0] [INFO] [stdout]  0.018s DEBUG Processing operation op=Insert(b:8
                  @0 under b:7) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 10, stamp: NodeStamp(0) } path=[2, 1, 0] [INFO] [stdout]  0.018s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 7, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
                    [INFO] [stdout] [n11]
                      [INFO] [stdout] [n11]
                    [INFO] [stdout] [n12]
                      [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n12]
                    [INFO] [stdout] [n9]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                    [INFO] [stdout] [n3]
                      [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n5]
                        [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n5]
                      [INFO] [stdout] [n3]
                    [INFO] [stdout] [n2]
                  [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Parent children after Insert children=[(0, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('ul' type=inline), Html) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 0, 1] [INFO] [stdout]  0.018s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5]
                    [INFO] [stdout] [n5]
                  [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n7]
                    [INFO] [stdout] [n9]
                      [INFO] [stdout] [n9]
                    [INFO] [stdout] [n7]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                    [INFO] [stdout] [n2]
                  [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Insert(b:9 @0 under b:8) [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
                1. [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
                2. [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n9]
                  [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n9]
                  [INFO] [stdout] [n7]
                  [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:9) [INFO] [stdout]  0.018s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 9, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
                    [INFO] [stdout] [n11]
                      [INFO] [stdout] [n11]
                    [INFO] [stdout] [n12]
                      [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n12]
                    [INFO] [stdout] [n9]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                    [INFO] [stdout] [n3]
                      [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [n3]
                    [INFO] [stdout] [n2]
                  [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 9, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.018s DEBUG Parent children after Insert children=[(0, NodeId { index1: 10, stamp: NodeStamp(0) }, Element(Atom('a' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:3) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 9, stamp: NodeStamp(0) } path=[2, 1] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 3, stamp: NodeStamp(0) } _node_kind=Element(Atom('ul' type=inline), Html) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                  [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                  [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                  [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                    [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                  • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                  • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                  [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                  [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
                    [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n54] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n19]
                  • [INFO] [stdout] [n55] TEXT: "" [INFO] [stdout] [n19]
                  • [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
                  [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
                  [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:19) [INFO] [stdout]  0.018s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5]
                    [INFO] [stdout] [n5]
                  [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n7]
                    [INFO] [stdout] [n9]
                      [INFO] [stdout] [n10] [INFO] [stdout] [n10] [INFO] [stdout] [n9]
                    [INFO] [stdout] [n7]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                    [INFO] [stdout] [n2]
                  [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Processing operation op=Move(a:2 → b:6 @1 under b:4) [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 19, stamp: NodeStamp(0) } _node_kind=Element(Atom('li' type=inline), Html) [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
                    [INFO] [stdout] [n11]
                      [INFO] [stdout] [n11]
                    [INFO] [stdout] [n12]
                      [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n12]
                    [INFO] [stdout] [n9]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                    [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n2]
                  [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Move: starting node_a=NodeId { index1: 2, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 19, stamp: NodeStamp(0) } path=[1, 3, 5] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.018s DEBUG Move: computing from reference for node node_a=NodeId { index1: 2, stamp: NodeStamp(0) } [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
                3. [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
                4. [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [n7] [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('ul' type=inline), Html) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:7) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.018s DEBUG Move: computed from reference node_a=NodeId { index1: 2, stamp: NodeStamp(0) } from=NodeRef(NodePath([1])) [INFO] [stdout]  0.018s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 10, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (2, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 7, stamp: NodeStamp(0) } _node_kind=Element(Atom('span' type=inline), Html) [INFO] [stdout]  0.018s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html)), (1, NodeId { index1: 8, stamp: NodeStamp(0) }, Text), (2, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('ol' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[2] [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]
                    [INFO] [stdout] [n11]
                      [INFO] [stdout] [n11]
                    [INFO] [stdout] [n12]
                      [INFO] [stdout] [n4] [INFO] [stdout] [n4] [INFO] [stdout] [n12]
                    [INFO] [stdout] [n9]
                  [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n17] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG move_to_position: checking ancestry node=NodeId { index1: 2, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.018s DEBUG Move: checking target position node=NodeId { index1: 2, stamp: NodeStamp(0) } position=1 children_count=3 [INFO] [stdout]  0.018s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n2] [INFO] [stdout] [n10] [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n4] [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Move: found occupant at target position occupant=NodeId { index1: 8, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.018s DEBUG Patches: [ [INFO] [stdout] UpdateProps @[0, 0, 0, 0] (1 changes), [INFO] [stdout] Insert
                    @[0, 0] (1 attrs) →slot1, [INFO] [stdout] Insert
                      @[0, 0, 0] (1 attrs), [INFO] [stdout] Insert
                        @[0, 0, 1] (1 attrs), [INFO] [stdout] Move [1, 0, 0] → [0, 0, 1, 0], [INFO] [stdout] Remove @[1, 0, 1, 0], [INFO] [stdout] Remove @[1, 0, 1], [INFO] [stdout] Remove @[1, 0], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.018s DEBUG Processing operation op=Move(a:3 → b:5 @0 under b:4) [INFO] [stdout]  0.018s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n3] TEXT: "Unclosed paragraph" [INFO] [stdout] [n15]
                      • [INFO] [stdout] [n6] TEXT: "Inside P which browsers will auto-close" [INFO] [stdout] [n17] [INFO] [stdout] [n17] [INFO] [stdout] [n15]
                      • [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n24] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n25] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG detached node to slot node=NodeId { index1: 8, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.018s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.018s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 8, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                        [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                        [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                        [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                          [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                        • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                        • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                        [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                        [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
                          [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n54] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n56] TEXT: "" [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n7]
                        [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
                        [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.018s DEBUG Processing operation op=Delete(a:21) [INFO] [stdout]  0.018s DEBUG Generated Move patch node_a=NodeId { index1: 2, stamp: NodeStamp(0) } from=NodeRef(NodePath([1])) to=NodeRef(NodePath([0, 1])) detach_to_slot=Some(2) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[0, 0, 0] [INFO] [stdout]  0.018s DEBUG Delete operation node_a=NodeId { index1: 21, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.018s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) [INFO] [stdout]  0.018s DEBUG get_node_ref: computed path node=NodeId { index1: 21, stamp: NodeStamp(0) } path=[1, 3, 6] [INFO] [stdout]  0.018s DEBUG Patches: [ [INFO] [stdout] SetText "d " @[0, 0, 0], [INFO] [stdout] SetText "d<<<&<" @[0, 1, 0], [INFO] [stdout] Insert @[0, 0] (2 attrs) →slot1, [INFO] [stdout] Insert
                      • @[0, 2] →slot2, [INFO] [stdout] Insert @[0, 2, 1] (2 attrs), [INFO] [stdout] Move [1, 0] → [0, 1] →slot3, [INFO] [stdout] Move [3, 0] → [0, 2, 0] →slot4, [INFO] [stdout] Remove @[1, 1], [INFO] [stdout] Remove @[1], [INFO] [stdout] Remove @[3], [INFO] [stdout] Remove @[2, 0], [INFO] [stdout] Remove @[2, 1, 0], [INFO] [stdout] Remove @[2, 1], [INFO] [stdout] Remove @[2], [INFO] [stdout] ] [INFO] [stdout]  0.018s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (1, NodeId { index1: 10, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (2, NodeId { index1: 7, stamp: NodeStamp(0) }, Element(Atom('img' type=inline), Html))] [INFO] [stdout]  0.018s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n5]
                          [INFO] [stdout] [n5]
                        [INFO] [stdout] [n2]
                          [INFO] [stdout] [n2]
                        [INFO] [stdout] [n7]
                          [INFO] [stdout] [n9]
                            [INFO] [stdout] [n10] [INFO] [stdout] [n10] [INFO] [stdout] [n9]
                          [INFO] [stdout] [n7]
                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.018s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.018s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=3 [INFO] [stdout]  0.019s DEBUG Move: found occupant at target position occupant=NodeId { index1: 2, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.019s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.019s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.019s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 2, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.019s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([0, 0, 0])) to=NodeRef(NodePath([0, 0])) detach_to_slot=Some(2) [INFO] [stdout]  0.019s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n2] [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.019s DEBUG Processing operation op=Move(a:5 → b:7 @0 under b:6) [INFO] [stdout]  0.019s DEBUG matching pairs: 2 [INFO] [stdout]  0.018s DEBUG Patches: [ [INFO] [stdout] UpdateProps @[0, 0] (1 changes), [INFO] [stdout] Insert
                          @[0, 0] (1 attrs) →slot1, [INFO] [stdout] Insert
                            @[0, 2] (1 attrs), [INFO] [stdout] Insert
                              @[0, 2, 0] (1 attrs), [INFO] [stdout] Insert @[0, 2, 0, 0] (1 attrs), [INFO] [stdout] Move [1] → [0, 1] →slot2, [INFO] [stdout] ] [INFO] [stdout]  0.021s DEBUG Applying patch: UpdateProps @[0, 0] (1 changes) [INFO] [stdout]  0.021s DEBUG UpdateProps: rebuilding attrs old_count=1 changes_count=1 [INFO] [stdout]  0.021s DEBUG UpdateProps: processing attr start value=Some("93") [INFO] [stdout]  0.021s DEBUG UpdateProps: final attrs_count=1 [INFO] [stdout]  0.021s DEBUG Applying patch: Insert
                                @[0, 0] (1 attrs) →slot1 [INFO] [stdout]  0.022s DEBUG matching pairs: 3 [INFO] [stdout]  0.022s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.022s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=3 [INFO] [stdout]  0.022s DEBUG insert_at: detaching child
                                  at pos 0 to slot1 [INFO] [stdout]  0.022s DEBUG insert_at_position:
                                    under at pos 0 (has 0 children) [INFO] [stdout]  0.022s DEBUG Applying patch: Insert
                                      @[0, 2] (1 attrs) [INFO] [stdout]  0.022s DEBUG insert_at: path=[0, 2] parent= pos=2 [INFO] [stdout]  0.022s DEBUG insert_at_position:
                                        under at pos 2 (has 1 children) [INFO] [stdout]  0.022s DEBUG Filled gap at position 1 with empty text node [INFO] [stdout]  0.022s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                        [INFO] [stdout] [n3]

                                        [INFO] [stdout] [n4] TEXT: "chart 1" [INFO] [stdout] [n3]

                                        [INFO] [stdout] [n2]
                                        [INFO] [stdout] [n5]
                                        [INFO] [stdout] [n6]

                                        [INFO] [stdout] [n7] TEXT: "chart 2" [INFO] [stdout] [n6]

                                        [INFO] [stdout] [n5]
                                        [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.022s DEBUG Applying patch: Insert
                                          @[0, 2, 0] (1 attrs) [INFO] [stdout]  0.022s DEBUG insert_at: path=[0, 2, 0] parent=
                                            pos=0 [INFO] [stdout]  0.022s DEBUG insert_at_position:
                                              under
                                                at pos 0 (has 0 children) [INFO] [stdout]  0.022s DEBUG Applying patch: Insert @[0, 2, 0, 0] (1 attrs) [INFO] [stdout]  0.022s DEBUG insert_at: path=[0, 2, 0, 0] parent=
                                                  pos=0 [INFO] [stdout]  0.022s DEBUG insert_at_position: under
                                                    at pos 0 (has 0 children) [INFO] [stdout]  0.022s DEBUG Applying patch: Move [1] → [0, 1] →slot2 [INFO] [stdout] test diff::tests::test_opaque_multiple_siblings ... ok [INFO] [stdout]  0.022s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.022s DEBUG insert_at: detaching child text("") at pos 1 to slot2 [INFO] [stdout]  0.023s DEBUG insert_at_position:
                                                      under at pos 1 (has 2 children) [INFO] [stdout]  0.023s DEBUG matching pairs: 3 [INFO] [stdout]  0.023s DEBUG arena_dom cinereus diff complete ops_count=4 matched_pairs=3 [INFO] [stdout]  0.023s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                      [INFO] [stdout] [n3]

                                                      [INFO] [stdout] [n4] TEXT: "old chart" [INFO] [stdout] [n3]

                                                      [INFO] [stdout] [n2]
                                                      [INFO] [stdout] [n5]

                                                      [INFO] [stdout] [n6] TEXT: "before text" [INFO] [stdout] [n5]

                                                      [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.023s DEBUG Processing operation op=SetText(a:6 → b:9 text=after text) [INFO] [stdout]  0.023s DEBUG Processing operation op=Insert(b:8

                                                      @1 under b:4) [INFO] [stdout]  0.023s DEBUG Result:

                                                          [INFO] [stdout]  0.018s DEBUG Applying patch: SetText "d " @[0, 0, 0] [INFO] [stdout]  0.018s DEBUG matching pairs: 3 [INFO] [stdout]  0.023s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=3 [INFO] [stdout]  0.023s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                          [INFO] [stdout] [n3]

                                                          [INFO] [stdout] [n4] TEXT: "same" [INFO] [stdout] [n3]

                                                          [INFO] [stdout] [n2]
                                                          [INFO] [stdout] [n5]
                                                          [INFO] [stdout] [n6]

                                                          [INFO] [stdout] [n7] TEXT: "old" [INFO] [stdout] [n6]

                                                          [INFO] [stdout] [n5]
                                                          [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.019s DEBUG matching pairs: 9 [INFO] [stdout]  0.019s DEBUG Move: starting node_a=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 6, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 10, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.019s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.023s DEBUG arena_dom cinereus diff complete ops_count=25 matched_pairs=9 [INFO] [stdout]  0.018s DEBUG Applying patch: UpdateProps @[0, 0, 0, 0] (1 changes) [INFO] [stdout]  0.023s DEBUG UpdateProps: rebuilding attrs old_count=2 changes_count=1 [INFO] [stdout]  0.023s DEBUG UpdateProps: processing attr src value=Some("aaa") [INFO] [stdout]  0.023s DEBUG UpdateProps: final attrs_count=1 [INFO] [stdout]  0.023s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                          [INFO] [stdout] [n3]

                                                          [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                          [INFO] [stdout] [n2]
                                                          [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.023s DEBUG Applying patch: Insert
                                                            @[0, 0] (1 attrs) →slot1 [INFO] [stdout]  0.023s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.023s DEBUG insert_at: detaching child
                                                              at pos 0 to slot1 [INFO] [stdout]  0.023s DEBUG insert_at_position:
                                                                under at pos 0 (has 0 children) [INFO] [stdout]  0.023s DEBUG Applying patch: Insert
                                                                  @[0, 0, 0] (1 attrs) [INFO] [stdout]  0.023s DEBUG insert_at: path=[0, 0, 0] parent=
                                                                    pos=0 [INFO] [stdout]  0.023s DEBUG insert_at_position:
                                                                      under
                                                                        at pos 0 (has 0 children) [INFO] [stdout]  0.023s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                        [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                        [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                        [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                        [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                        [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n16]

                                                                        [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                        [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n2]
                                                                        [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG Applying patch: Insert
                                                                          @[0, 0, 1] (1 attrs) [INFO] [stdout]  0.024s DEBUG Processing operation op=SetText(a:3 → b:6 text= [INFO] [stdout] [INFO] [stdout] ) [INFO] [stdout]  0.024s DEBUG insert_at: path=[0, 0, 1] parent=
                                                                            pos=1 [INFO] [stdout]  0.024s DEBUG Processing operation op=SetText(a:5 → b:11 text= and content) [INFO] [stdout]  0.024s DEBUG insert_at_position:
                                                                              under
                                                                                at pos 1 (has 1 children) [INFO] [stdout]  0.024s DEBUG Processing operation op=SetText(a:6 → b:14 text=Second paragraph with a .) [INFO] [stdout]  0.024s DEBUG Applying patch: Move [1, 0, 0] → [0, 0, 1, 0] [INFO] [stdout]  0.024s DEBUG Processing operation op=Insert(b:5
                                                                                @0 under b:4) [INFO] [stdout]  0.024s DEBUG Move: computing from reference for node node_a=NodeId { index1: 5, stamp: NodeStamp(0) } [INFO] [stdout]  0.024s DEBUG insert_at: path=[0, 0, 1, 0] parent=
                                                                                  pos=0 [INFO] [stdout]  0.024s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.024s DEBUG insert_at_position: under
                                                                                    at pos 0 (has 0 children) [INFO] [stdout]  0.024s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.024s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.024s DEBUG Move: computed from reference node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.024s DEBUG Applying patch: Remove @[1, 0, 1, 0] [INFO] [stdout]  0.024s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.024s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.024s DEBUG Applying patch: Remove @[1, 0, 1] [INFO] [stdout]  0.024s DEBUG move_to_position: checking ancestry node=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent=NodeId { index1: 10, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.024s DEBUG Parent children after Insert children=[(0, NodeId { index1: 24, stamp: NodeStamp(0) }, Element(Atom('article' type=inline), Html))] [INFO] [stdout]  0.024s DEBUG Applying patch: Remove @[1, 0] [INFO] [stdout]  0.024s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.024s DEBUG Move: checking target position node=NodeId { index1: 5, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.024s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.024s DEBUG Generated Move patch node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.024s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                    [INFO] [stdout] [n24]
                                                                                    [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                    [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                    [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                    [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                    [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                    [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n16]

                                                                                    [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                    [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                    [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG Processing operation op=Insert(b:7

                                                                                    @1 under b:5) [INFO] [stdout]  0.024s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 24, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.024s DEBUG Parent children after Insert children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.024s DEBUG Result:

                                                                                      [INFO] [stdout]  0.024s DEBUG Expected:
                                                                                        [INFO] [stdout]  0.021s DEBUG matching pairs: 2 [INFO] [stdout]  0.024s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.024s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                        [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                        [INFO] [stdout] [n26]

                                                                                        [INFO] [stdout] [n24]
                                                                                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                        [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                        [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                        [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                        [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n16]

                                                                                        [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                        [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG Processing operation op=Insert(b:13

                                                                                        @3 under b:5) [INFO] [stdout]  0.024s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 24, stamp: NodeStamp(0) } position=3 detach_to_slot=None [INFO] [stdout]  0.024s DEBUG Parent children after Insert children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (2, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 28, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.024s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

                                                                                        [INFO] [stdout] [n3]
                                                                                        [INFO] [stdout] [n4]
                                                                                          [INFO] [stdout] [n5]
                                                                                        • [INFO] [stdout] [n6] TEXT: "item 1" [INFO] [stdout] [n5]
                                                                                        • [INFO] [stdout] [n7]
                                                                                        • [INFO] [stdout] [n8] TEXT: "item 2" [INFO] [stdout] [n7]
                                                                                        • [INFO] [stdout] [n4]
                                                                                        [INFO] [stdout] [n3]
                                                                                        [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.023s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.024s DEBUG detached node to slot node=NodeId { index1: 5, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.024s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=Some(1) [INFO] [stdout]  0.024s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                        [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                        [INFO] [stdout] [n26]

                                                                                        [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n28]

                                                                                        [INFO] [stdout] [n28]

                                                                                        [INFO] [stdout] [n24]
                                                                                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                        [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                        [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                        [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                        [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n16]

                                                                                        [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                        [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.024s DEBUG Processing operation op=Move(a:21 → b:15 @4 under b:5) [INFO] [stdout]  0.024s DEBUG Move: starting node_a=NodeId { index1: 21, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } new_position=4 [INFO] [stdout]  0.024s DEBUG Move: computing from reference for node node_a=NodeId { index1: 21, stamp: NodeStamp(0) } [INFO] [stdout]  0.024s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [n3]

                                                                                        [INFO] [stdout] [n4] TEXT: "old chart" [INFO] [stdout] [n3]

                                                                                        [INFO] [stdout] [n2]
                                                                                        [INFO] [stdout] [n9]

                                                                                        [INFO] [stdout] [n9]

                                                                                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n5]

                                                                                        [INFO] [stdout] [n6] TEXT: "before text" [INFO] [stdout] [n5]

                                                                                        [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG get_node_ref: computed path node=NodeId { index1: 21, stamp: NodeStamp(0) } path=[1, 6] [INFO] [stdout]  0.024s DEBUG Processing operation op=Move(a:6 → b:9 @0 under b:8) [INFO] [stdout]  0.024s DEBUG Move: computed from reference node_a=NodeId { index1: 21, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 6])) [INFO] [stdout]  0.024s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 8, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.023s DEBUG Expected:
                                                                                            [INFO] [stdout]  0.024s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.024s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.024s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.024s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.024s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout] test diff::tests::test_opaque_only_one_changed ... ok [INFO] [stdout]  0.024s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.024s DEBUG matching pairs: 2 [INFO] [stdout]  0.024s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.024s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.024s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.024s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n2] [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.020s DEBUG matching pairs: 2 [INFO] [stdout]  0.024s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.024s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.024s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.024s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old chart" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n9]

                                                                                            [INFO] [stdout] [n6] TEXT: "before text" [INFO] [stdout] [n9]

                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n5]

                                                                                            [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n5]

                                                                                            [INFO] [stdout] [INFO] [stdout]  0.024s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[2] [INFO] [stdout]  0.024s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.025s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('p' type=inline), Html) [INFO] [stdout]  0.025s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.025s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]
                                                                                            [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "old text" [INFO] [stdout] [n4] [INFO] [stdout] [n3]
                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old chart" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n9]

                                                                                            [INFO] [stdout] [n6] TEXT: "before text" [INFO] [stdout] [n9]

                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 0] →slot1 [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.025s DEBUG insert_at: detaching child
                                                                                            at pos 0 to slot1 [INFO] [stdout]  0.025s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n6] [INFO] [stdout] [n6] [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.025s DEBUG Processing operation op=Delete(a:6) [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 1] [INFO] [stdout]  0.025s DEBUG Delete operation node_a=NodeId { index1: 6, stamp: NodeStamp(0) } _node_kind=Element(Atom('jva' type=inline), Html) [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.025s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.025s DEBUG insert_at_position: under at pos 1 (has 1 children) [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 2] [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 2] parent= pos=2 [INFO] [stdout]  0.025s DEBUG insert_at_position: under at pos 2 (has 2 children) [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 3] [INFO] [stdout]  0.025s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4] [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] Slot 2: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 3] parent= pos=3 [INFO] [stdout]  0.025s DEBUG Applying patch: OpaqueChanged @[0, 0] "
                                                                                            new textextra [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.025s DEBUG Applying patch: SetText "after text" @[0, 1, 0] [INFO] [stdout]  0.025s DEBUG Applying patch: Insert

                                                                                            @[0, 1] →slot1 [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.025s DEBUG insert_at: detaching child

                                                                                            at pos 1 to slot1 [INFO] [stdout]  0.025s DEBUG insert_at_position:

                                                                                            under at pos 1 (has 1 children) [INFO] [stdout]  0.025s DEBUG Applying patch: Move [1, 0] → [0, 1, 0] [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 1, 0] parent=

                                                                                            pos=0 [INFO] [stdout]  0.025s DEBUG insert_at_position: text("after text") under

                                                                                            at pos 0 (has 0 children) [INFO] [stdout]  0.025s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.025s DEBUG Applying patch: OpaqueChanged @[0, 0] "

                                                                                            new

                                                                                            " [INFO] [stdout]  0.025s DEBUG Applying patch: OpaqueChanged @[0, 0] "

                                                                                            new chart

                                                                                            " [INFO] [stdout]  0.025s DEBUG Applying patch: SetText "d<<<&<" @[0, 1, 0] [INFO] [stdout]  0.025s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 0] (2 attrs) →slot1 [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.025s DEBUG insert_at: detaching child

                                                                                            at pos 0 to slot1 [INFO] [stdout]  0.025s DEBUG insert_at_position: under at pos 0 (has 2 children) [INFO] [stdout]  0.025s DEBUG insert_at_position: under at pos 3 (has 3 children) [INFO] [stdout]  0.025s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n10] [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n17] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG Applying patch: Insert

                                                                                          1. @[0, 2] →slot2 [INFO] [stdout]  0.025s DEBUG Processing operation op=Delete(a:7) [INFO] [stdout]  0.025s DEBUG Applying patch: Insert text "<" @[0, 3, 0] [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 2] parent= pos=2 [INFO] [stdout]  0.025s DEBUG Delete operation node_a=NodeId { index1: 7, stamp: NodeStamp(0) } _node_kind=Element(Atom('img' type=inline), Html) [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 3, 0] parent= pos=0 [INFO] [stdout]  0.025s DEBUG insert_at: detaching child at pos 2 to slot2 [INFO] [stdout]  0.025s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[0, 2] [INFO] [stdout]  0.024s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (2, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 28, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.025s DEBUG insert_at_position:
                                                                                          2. under at pos 2 (has 2 children) [INFO] [stdout]  0.025s DEBUG Applying patch: Insert @[0, 2, 1] (2 attrs) [INFO] [stdout]  0.025s DEBUG insert_at: path=[0, 2, 1] parent=
                                                                                          3. pos=1 [INFO] [stdout]  0.025s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n3] TEXT: "n<&nhnnz\"\"\"\" v" [INFO] [stdout] [n10] [INFO] [stdout] [n5] TEXT: "< bit" [INFO] [stdout] [n10] [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n17] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.025s DEBUG insert_at_position: under
                                                                                          4. at pos 1 (has 0 children) [INFO] [stdout]  0.025s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.025s DEBUG Applying patch: Move [1, 0] → [0, 1] →slot3 [INFO] [stdout] test diff::tests::test_opaque_changed_emits_opaque_changed ...  0.025s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout] ok [INFO] [stdout]  0.025s DEBUG Patches: [ [INFO] [stdout] SetText "n" @[0, 0, 0], [INFO] [stdout] SetText "aaa" @[0, 1, 0], [INFO] [stdout] Insert @[0, 1] →slot1, [INFO] [stdout] Move [0, 0, 0] → [0, 0] →slot2, [INFO] [stdout] Move [1, 0] → [0, 1, 0], [INFO] [stdout] Remove @[2], [INFO] [stdout] Remove @[1, 1], [INFO] [stdout] Remove @[1], [INFO] [stdout] Remove @[0, 2], [INFO] [stdout] ] [INFO] [stdout]  0.026s DEBUG insert_at: detaching child
                                                                                            at pos 1 to slot3 [INFO] [stdout]  0.026s DEBUG insert_at_position: text("d ") under at pos 1 (has 2 children) [INFO] [stdout]  0.026s DEBUG Applying patch: Move [3, 0] → [0, 2, 0] →slot4 [INFO] [stdout]  0.026s DEBUG insert_at: path=[0, 2, 0] parent=
                                                                                          5. pos=0 [INFO] [stdout]  0.025s DEBUG move_to_position: checking ancestry node=NodeId { index1: 21, stamp: NodeStamp(0) } new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.026s DEBUG insert_at: detaching child text("") at pos 0 to slot4 [INFO] [stdout]  0.026s DEBUG insert_at_position: text("d<<<&<") under
                                                                                          6. at pos 0 (has 1 children) [INFO] [stdout]  0.026s DEBUG Move: checking target position node=NodeId { index1: 21, stamp: NodeStamp(0) } position=4 children_count=4 [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.026s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[3] [INFO] [stdout]  0.026s DEBUG Generated Move patch node_a=NodeId { index1: 21, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 6])) to=NodeRef(NodePath([0, 0, 4])) detach_to_slot=None [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[2, 0] [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[2, 1, 0] [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[2, 1] [INFO] [stdout]  0.026s DEBUG Applying patch: Remove @[2] [INFO] [stdout]  0.026s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.026s DEBUG Processing operation op=Move(a:15 → b:12 @2 under b:5) [INFO] [stdout]  0.026s DEBUG Move: starting node_a=NodeId { index1: 15, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } new_position=2 [INFO] [stdout]  0.026s DEBUG Move: computing from reference for node node_a=NodeId { index1: 15, stamp: NodeStamp(0) } [INFO] [stdout]  0.026s DEBUG get_node_ref: computed path node=NodeId { index1: 15, stamp: NodeStamp(0) } path=[1, 4] [INFO] [stdout]  0.026s DEBUG Move: computed from reference node_a=NodeId { index1: 15, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4])) [INFO] [stdout]  0.026s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (2, NodeId { index1: 29, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 28, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (4, NodeId { index1: 21, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.026s DEBUG matching pairs: 8 [INFO] [stdout]  0.026s DEBUG move_to_position: checking ancestry node=NodeId { index1: 15, stamp: NodeStamp(0) } new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.026s DEBUG arena_dom cinereus diff complete ops_count=15 matched_pairs=8 [INFO] [stdout]  0.026s DEBUG Move: checking target position node=NodeId { index1: 15, stamp: NodeStamp(0) } position=2 children_count=5 [INFO] [stdout]  0.026s DEBUG Move: found occupant at target position occupant=NodeId { index1: 29, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.026s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.026s DEBUG detached node to slot node=NodeId { index1: 29, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.026s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 29, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.026s DEBUG matching pairs: 2 [INFO] [stdout]  0.026s DEBUG Generated Move patch node_a=NodeId { index1: 15, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 4])) to=NodeRef(NodePath([0, 0, 2])) detach_to_slot=Some(2) [INFO] [stdout]  0.026s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.026s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.026s DEBUG Processing operation op=Insert(b:5 @0 under b:4) [INFO] [stdout]  0.026s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.026s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "hello" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.026s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.026s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.026s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.026s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.026s DEBUG Processing operation op=Move(a:9 → b:9 @1 under b:7) [INFO] [stdout]  0.026s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.026s DEBUG Move: starting node_a=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.026s DEBUG Processing operation op=Insert(b:7 @1 under b:4) [INFO] [stdout]  0.026s DEBUG Move: computing from reference for node node_a=NodeId { index1: 9, stamp: NodeStamp(0) } [INFO] [stdout]  0.026s DEBUG get_node_ref: computed path node=NodeId { index1: 9, stamp: NodeStamp(0) } path=[1, 3, 1] [INFO] [stdout]  0.026s DEBUG Move: computed from reference node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1])) [INFO] [stdout]  0.026s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout] test diff::tests::test_fuzzer_nested_ul_remove ... ok [INFO] [stdout]  0.026s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout] test diff::tests::test_opaque_deeply_nested_content ... ok [INFO] [stdout] test diff::tests::test_fuzzer_nested_ol_patch_order ... ok [INFO] [stdout]  0.026s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout] test diff::tests::test_opaque_roundtrip_deeply_nested ... ok [INFO] [stdout] test diff::tests::test_opaque_roundtrip_rust_applier ... ok [INFO] [stdout]  0.026s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout] test diff::tests::test_opaque_roundtrip_with_sibling_changes ... ok [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:9 @2 under b:4) [INFO] [stdout] test diff::tests::test_opaque_unchanged_no_patches ... ok [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=2 detach_to_slot=None [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 16, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n16] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG Applying patch: SetText "n" @[0, 0, 0] [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:10 #text @0 under b:9) [INFO] [stdout]  0.027s DEBUG Applying patch: SetText "aaa" @[0, 1, 0] [INFO] [stdout]  0.027s DEBUG Applying patch: Insert @[0, 1] →slot1 [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 16, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.027s DEBUG insert_at: detaching child at pos 1 to slot1 [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 17, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.027s DEBUG insert_at_position: under at pos 1 (has 2 children) [INFO] [stdout]  0.027s DEBUG matching pairs: 2 [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG arena_dom cinereus diff complete ops_count=0 matched_pairs=2 [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:11 @3 under b:4) [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=3 detach_to_slot=None [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 16, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (3, NodeId { index1: 18, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.027s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]
                                                                                            [INFO] [stdout]         [n4] TEXT: "graph TD; A-->B;"
                                                                                            [INFO] [stdout]       [n3] 
                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG matching pairs: 3 [INFO] [stdout]  0.027s DEBUG arena_dom cinereus diff complete ops_count=4 matched_pairs=3 [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:12 #text @0 under b:11) [INFO] [stdout] test diff::tests::test_opaque_structural_replacement ... ok [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 18, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 19, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.027s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "before" [INFO] [stdout] [n5] [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG Processing operation op=SetText(a:6 → b:9 text=after) [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:8 @1 under b:4) [INFO] [stdout]  0.026s DEBUG move_to_position: checking ancestry node=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.027s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.027s DEBUG detached node to slot node=NodeId { index1: 5, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.027s DEBUG Move: checking target position node=NodeId { index1: 9, stamp: NodeStamp(0) } position=1 children_count=0 [INFO] [stdout]  0.027s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=Some(1) [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('span' type=inline), Html))] [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:18

                                                                                            @2 under b:13) [INFO] [stdout]  0.027s DEBUG Generated Move patch node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 1])) to=NodeRef(NodePath([0, 0, 1, 1])) detach_to_slot=None [INFO] [stdout]  0.027s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n9] [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "before" [INFO] [stdout] [n5] [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.027s DEBUG Processing operation op=Move(a:6 → b:9 @0 under b:8) [INFO] [stdout]  0.027s DEBUG detached node to slot node=NodeId { index1: 7, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.027s DEBUG Applying patch: Insert
                                                                                            @[0, 4] [INFO] [stdout]  0.027s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 8, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.027s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 4] parent= pos=4 [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 2, stamp: NodeStamp(0) } position=2 detach_to_slot=Some(2) [INFO] [stdout]  0.027s DEBUG insert_at_position:
                                                                                            under at pos 4 (has 4 children) [INFO] [stdout]  0.027s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.027s DEBUG Applying patch: Move [0, 0, 0] → [0, 0] →slot2 [INFO] [stdout]  0.027s DEBUG Applying patch: Insert

                                                                                            @[0, 4, 2] [INFO] [stdout]  0.027s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 3, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html)), (3, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.027s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 4, 2] parent=
                                                                                            pos=2 [INFO] [stdout]  0.027s DEBUG insert_at_position:

                                                                                            under
                                                                                            at pos 2 (has 0 children) [INFO] [stdout]  0.027s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.027s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.027s DEBUG insert_at: detaching child at pos 0 to slot2 [INFO] [stdout]  0.027s DEBUG Filled gap at position 1 with empty text node [INFO] [stdout]  0.027s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.027s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.027s DEBUG insert_at_position: text("n") under at pos 0 (has 2 children) [INFO] [stdout]  0.027s DEBUG Applying patch: Insert text "<<<<<<<<<<<<<" @[0, 4, 2, 0] [INFO] [stdout]  0.027s DEBUG Processing operation op=Move(a:8 → b:8 @0 under b:7) [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 4, 2, 0] parent=

                                                                                            pos=0 [INFO] [stdout]  0.027s DEBUG Applying patch: Move [1, 0] → [0, 1, 0] [INFO] [stdout]  0.027s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.027s DEBUG Move: starting node_a=NodeId { index1: 8, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.027s DEBUG insert_at_position: text("<<<<<<<<<<") under

                                                                                            at pos 0 (has 0 children) [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 1, 0] parent= pos=0 [INFO] [stdout]  0.027s DEBUG Move: computing from reference for node node_a=NodeId { index1: 8, stamp: NodeStamp(0) } [INFO] [stdout]  0.027s DEBUG Applying patch: Move [1, 3] → [0, 4, 1] →slot2 [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG get_node_ref: computed path node=NodeId { index1: 8, stamp: NodeStamp(0) } path=[1, 3, 0] [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 4, 1] parent=
                                                                                            pos=1 [INFO] [stdout]  0.027s DEBUG insert_at: detaching child text("") at pos 1 to slot2 [INFO] [stdout]  0.027s DEBUG Move: computed from reference node_a=NodeId { index1: 8, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 0])) [INFO] [stdout]  0.027s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n9] [INFO] [stdout] [n6] TEXT: "before" [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n5] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG insert_at_position: under
                                                                                            at pos 1 (has 2 children) [INFO] [stdout]  0.027s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.027s DEBUG Processing operation op=Insert(b:19 #text @0 under b:18) [INFO] [stdout]  0.027s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 34, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.027s DEBUG Applying patch: Move [1, 2] → [0, 4, 0] →slot3 [INFO] [stdout]  0.027s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('span' type=inline), Html) [INFO] [stdout]  0.027s DEBUG move_to_position: checking ancestry node=NodeId { index1: 8, stamp: NodeStamp(0) } new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 4, 0] parent=
                                                                                            pos=0 [INFO] [stdout]  0.027s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.027s DEBUG insert_at: detaching child text("") at pos 0 to slot3 [INFO] [stdout]  0.027s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 20, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.027s DEBUG Move: checking target position node=NodeId { index1: 8, stamp: NodeStamp(0) } position=0 children_count=2 [INFO] [stdout]  0.027s DEBUG insert_at_position: under
                                                                                            at pos 0 (has 2 children) [INFO] [stdout]  0.027s DEBUG Parent children after Insert children=[(0, NodeId { index1: 22, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.027s DEBUG Move: found occupant at target position occupant=NodeId { index1: 34, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.027s DEBUG Applying patch: Move [1, 0, 0] → [0, 0, 0] [INFO] [stdout]  0.027s DEBUG created new slot slot_num=3 [INFO] [stdout]  0.027s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n4] TEXT: "old" [INFO] [stdout] [n3]

                                                                                            [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n9] [INFO] [stdout] [n6] TEXT: "before" [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.027s DEBUG insert_at: path=[0, 0, 0] parent= pos=0 [INFO] [stdout]  0.027s DEBUG insert_at_position: text("aaa") under at pos 0 (has 0 children) [INFO] [stdout]  0.028s DEBUG detached node to slot node=NodeId { index1: 34, stamp: NodeStamp(0) } slot_num=3 [INFO] [stdout]  0.028s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.028s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 34, stamp: NodeStamp(0) } slot=3 [INFO] [stdout]  0.028s DEBUG Applying patch: Move [1, 1, 0] → [0, 1, 0] [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[2] [INFO] [stdout]  0.028s DEBUG insert_at: path=[0, 1, 0] parent= pos=0 [INFO] [stdout]  0.028s DEBUG Generated Move patch node_a=NodeId { index1: 8, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3, 0])) to=NodeRef(NodePath([0, 0, 1, 0])) detach_to_slot=Some(3) [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.028s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.028s DEBUG Applying patch: Move [1, 4, 0, 0, 0] → [0, 2, 0] [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[0, 2] [INFO] [stdout]  0.027s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [INFO] [stdout]  0.028s DEBUG insert_at: path=[0, 2, 0] parent= pos=0 [INFO] [stdout] test diff::tests::test_opaque_with_normal_siblings ... ok [INFO] [stdout]  0.028s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.028s DEBUG Processing operation op=Move(a:9 → b:16 @1 under b:13) [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 0] [INFO] [stdout]  0.028s DEBUG Move: starting node_a=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 13, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 2, stamp: NodeStamp(0) } new_position=1 [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.028s DEBUG Move: computing from reference for node node_a=NodeId { index1: 9, stamp: NodeStamp(0) } [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 4, 0, 0] [INFO] [stdout]  0.028s DEBUG get_node_ref: computed path node=NodeId { index1: 9, stamp: NodeStamp(0) } path=[1, 3] [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 4, 0] [INFO] [stdout]  0.028s DEBUG Move: computed from reference node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3])) [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1, 4] [INFO] [stdout]  0.028s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.028s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 3, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 5, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html)), (3, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.028s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.028s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.028s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.028s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.028s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.028s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.028s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 27, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 26, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (2, NodeId { index1: 15, stamp: NodeStamp(0) }, Text), (3, NodeId { index1: 28, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html)), (4, NodeId { index1: 21, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.028s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 24, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.028s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=5 [INFO] [stdout]  0.028s DEBUG Move: found occupant at target position occupant=NodeId { index1: 27, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.028s DEBUG created new slot slot_num=4 [INFO] [stdout]  0.028s DEBUG detached node to slot node=NodeId { index1: 27, stamp: NodeStamp(0) } slot_num=4 [INFO] [stdout]  0.028s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 27, stamp: NodeStamp(0) } slot=4 [INFO] [stdout]  0.028s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=Some(4) [INFO] [stdout]  0.028s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout] test diff::tests::test_string_ascii_only_multiple_newlines ... ok [INFO] [stdout]  0.028s DEBUG Processing operation op=Move(a:5 → b:11 @2 under b:7) [INFO] [stdout]  0.028s DEBUG Move: starting node_a=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } new_position=2 [INFO] [stdout]  0.028s DEBUG Move: computing from reference for node node_a=NodeId { index1: 5, stamp: NodeStamp(0) } [INFO] [stdout]  0.028s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 1, 0] [INFO] [stdout]  0.028s DEBUG Result: <<<<
                                                                                            <<

                                                                                            <<<<<<<<<<<<<

                                                                                            [INFO] [stdout]  0.028s DEBUG Move: computed from reference node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1, 0])) [INFO] [stdout]  0.028s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 8, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.028s DEBUG Expected: <<<<
                                                                                            <<

                                                                                            <<<<<<<<<<<<<

                                                                                            [INFO] [stdout]  0.028s DEBUG move_to_position: checking ancestry node=NodeId { index1: 5, stamp: NodeStamp(0) } new_parent=NodeId { index1: 26, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.028s DEBUG Move: checking target position node=NodeId { index1: 5, stamp: NodeStamp(0) } position=2 children_count=2 [INFO] [stdout]  0.028s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.028s DEBUG Generated Move patch node_a=NodeId { index1: 5, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 1, 0])) to=NodeRef(NodePath([0, 0, 1, 2])) detach_to_slot=None [INFO] [stdout]  0.028s DEBUG Result: naaa [INFO] [stdout]  0.028s DEBUG Expected: naaa [INFO] [stdout]  0.028s DEBUG matching pairs: 2 [INFO] [stdout]  0.028s DEBUG arena_dom cinereus diff complete ops_count=7 matched_pairs=2 [INFO] [stdout]  0.028s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.029s DEBUG Processing operation op=SetText(a:3 → b:6 text= [INFO] [stdout] 中文App Title [INFO] [stdout] ) [INFO] [stdout]  0.029s DEBUG Processing operation op=Insert(b:5 @0 under b:4) [INFO] [stdout]  0.028s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n39] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.029s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.029s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.029s DEBUG Processing operation op=Move(a:6 → b:14 @0 under b:13) [INFO] [stdout]  0.029s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.029s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 13, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 28, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.029s DEBUG Parent children after Insert children=[(0, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('my-header' type=dynamic), Html))] [INFO] [stdout]  0.029s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.029s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 2] [INFO] [stdout]  0.030s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) [INFO] [stdout]  0.030s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.030s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 28, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.029s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.030s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.030s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.030s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.030s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.030s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) to=NodeRef(NodePath([0, 0, 3, 0])) detach_to_slot=None [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.030s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.030s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.030s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.030s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.030s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.030s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.030s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Title" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n39] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('h1' type=inline), Html) [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 1, 0] [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('h1' type=inline), Html) [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n11] TEXT: " and " [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:6) [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:11) [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 6, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 11, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 2] [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 11, stamp: NodeStamp(0) } path=[1, 3, 2] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2] [INFO] [stdout] [n11] TEXT: "" [INFO] [stdout] [n13] TEXT: "" [INFO] [stdout] [n14] TEXT: "" [INFO] [stdout] [n2] [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('my-header' type=dynamic), Html) [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.028s DEBUG move_to_position: checking ancestry node=NodeId { index1: 9, stamp: NodeStamp(0) } new_parent=NodeId { index1: 2, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n12] [INFO] [stdout] [n13] TEXT: "italic" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG Move: checking target position node=NodeId { index1: 9, stamp: NodeStamp(0) } position=1 children_count=4 [INFO] [stdout]  0.030s DEBUG Processing operation op=Delete(a:13) [INFO] [stdout]  0.030s DEBUG Move: found occupant at target position occupant=NodeId { index1: 5, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.030s DEBUG Delete operation node_a=NodeId { index1: 13, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.030s DEBUG created new slot slot_num=3 [INFO] [stdout]  0.030s DEBUG get_node_ref: computed path node=NodeId { index1: 13, stamp: NodeStamp(0) } path=[1, 3, 3, 0] [INFO] [stdout]  0.030s DEBUG detached node to slot node=NodeId { index1: 5, stamp: NodeStamp(0) } slot_num=3 [INFO] [stdout]  0.030s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 5, stamp: NodeStamp(0) } slot=3 [INFO] [stdout]  0.030s DEBUG Generated Move patch node_a=NodeId { index1: 9, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 3])) to=NodeRef(NodePath([1, 1])) detach_to_slot=Some(3) [INFO] [stdout]  0.030s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                            [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                            [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                            [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n12] [INFO] [stdout] [n43] TEXT: "" [INFO] [stdout] [n12] [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                            [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                            [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout] test diff::tests::test_fuzzer_article_code_move ...  0.029s DEBUG matching pairs: 3 [INFO] [stdout] ok [INFO] [stdout]  0.031s DEBUG arena_dom cinereus diff complete ops_count=2 matched_pairs=3 [INFO] [stdout] test diff::tests::test_fuzzer_special_chars ... ok [INFO] [stdout]  0.031s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "First" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout] test dom::tests::test_bogus_comment_variations ...  0.031s DEBUG Processing operation op=Insert(b:7

                                                                                            @1 under b:4) [INFO] [stdout] ok [INFO] [stdout]  0.031s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.031s DEBUG Parent children after Insert children=[(0, NodeId { index1: 2, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html)), (1, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.031s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

                                                                                            [INFO] [stdout] [n3] TEXT: "First" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n6]

                                                                                            [INFO] [stdout] [n6]

                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG Processing operation op=Insert(b:8 #text @0 under b:7) [INFO] [stdout]  0.031s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.031s DEBUG Parent children after Insert children=[(0, NodeId { index1: 7, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.031s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "First" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n6]

                                                                                            [INFO] [stdout] [n7] TEXT: "Second" [INFO] [stdout] [n6]

                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG Applying patch: Insert

                                                                                            @[0, 1] [INFO] [stdout]  0.031s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.031s DEBUG insert_at_position:

                                                                                            under at pos 1 (has 1 children) [INFO] [stdout]  0.031s DEBUG Applying patch: Insert text "Second" @[0, 1, 0] [INFO] [stdout]  0.031s DEBUG insert_at: path=[0, 1, 0] parent=

                                                                                            pos=0 [INFO] [stdout]  0.029s DEBUG matching pairs: 2 [INFO] [stdout]  0.031s DEBUG insert_at_position: text("Second") under

                                                                                            at pos 0 (has 0 children) [INFO] [stdout]  0.031s DEBUG arena_dom cinereus diff complete ops_count=4 matched_pairs=2 [INFO] [stdout]  0.029s DEBUG matching pairs: 3 [INFO] [stdout]  0.030s DEBUG Processing operation op=Move(a:7 → b:14 @0 under b:13) [INFO] [stdout]  0.031s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

                                                                                            [INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG arena_dom cinereus diff complete ops_count=1 matched_pairs=3 [INFO] [stdout]  0.031s DEBUG Processing operation op=SetText(a:3 → b:6 text=New content) [INFO] [stdout]  0.031s DEBUG Processing operation op=Insert(b:5
                                                                                            @0 under b:4) [INFO] [stdout]  0.018s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                                                                                              [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                                                                                            [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]
                                                                                              [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n54] TEXT: "" [INFO] [stdout] [n36] TEXT: "" [INFO] [stdout] [n56] TEXT: "" [INFO] [stdout] [n57] TEXT: "" [INFO] [stdout] [n7]
                                                                                            [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.031s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "Content" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG Processing operation op=Delete(a:7) [INFO] [stdout]  0.031s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.031s DEBUG Processing operation op=UpdateProps(a:2 class: → highlight) [INFO] [stdout]  0.031s DEBUG Delete operation node_a=NodeId { index1: 7, stamp: NodeStamp(0) } _node_kind=Element(Atom('ul' type=inline), Html) [INFO] [stdout]  0.031s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.031s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[1, 3] [INFO] [stdout]  0.031s DEBUG Parent children after Insert children=[(0, NodeId { index1: 6, stamp: NodeStamp(0) }, Element(Atom('div' type=inline), Html))] [INFO] [stdout]  0.031s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.031s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.031s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.031s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.031s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.031s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.031s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.031s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                                                                                              [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                                                                                            [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n58] TEXT: "" [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.032s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 6, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.032s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.032s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.032s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.032s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.032s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.032s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.032s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [n8] TEXT: "" [INFO] [stdout] [n2]
                                                                                            [INFO] [stdout] [INFO] [stdout]  0.032s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.032s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.032s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n5] TEXT: "Features" [INFO] [stdout] [n4]

                                                                                            [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n27]
                                                                                              [INFO] [stdout] [n18] TEXT: "\n " [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n10] TEXT: "Feature one with " [INFO] [stdout] [n33] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n33] [INFO] [stdout] [n31]
                                                                                            • [INFO] [stdout] [n12] TEXT: "code" [INFO] [stdout] [n27]
                                                                                            [INFO] [stdout] [n22] TEXT: "\n " [INFO] [stdout] [n25]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n59] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n32] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] Slot 5: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 6: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.032s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.032s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n3] TEXT: "Old content" [INFO] [stdout] [n6]
                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n9] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.032s DEBUG Patches: [ [INFO] [stdout] SetText "item" @[0, 0, 3, 0], [INFO] [stdout] SetText "\n\n\n " @[0, 0, 3, 1, 1, 0], [INFO] [stdout] Insert
                                                                                            @[0, 0] (1 attrs) →slot1, [INFO] [stdout] Insert
                                                                                              @[0, 0, 3], [INFO] [stdout] Insert
                                                                                            • @[0, 0, 3, 1], [INFO] [stdout] Insert @[0, 0, 3, 1, 1], [INFO] [stdout] Move [1, 4] → [0, 0, 4], [INFO] [stdout] Move [1, 3, 4] → [0, 0, 3, 0] →slot2, [INFO] [stdout] Move [1, 3, 1, 0] → [0, 0, 3, 1, 0] →slot3, [INFO] [stdout] Move [1, 2] → [0, 0, 2] →slot4, [INFO] [stdout] Move [1, 1] → [0, 0, 1] →slot5, [INFO] [stdout] Move [1, 0] → [0, 0, 0] →slot6, [INFO] [stdout] Move [1, 3, 0] → [0, 0, 3, 1, 1, 0], [INFO] [stdout] Move [1, 3, 1, 1, 0] → [0, 0, 3, 2], [INFO] [stdout] Remove @[1, 3, 1, 1], [INFO] [stdout] Remove @[1, 3, 1], [INFO] [stdout] Remove @[1, 3, 2], [INFO] [stdout] Remove @[1, 3, 3, 0], [INFO] [stdout] Remove @[1, 3, 3, 1, 0], [INFO] [stdout] Remove @[1, 3, 3, 1], [INFO] [stdout] Remove @[1, 3, 3], [INFO] [stdout] Remove @[1, 3, 5, 0], [INFO] [stdout] Remove @[1, 3, 5], [INFO] [stdout] Remove @[1, 3, 6], [INFO] [stdout] Remove @[1, 3], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.032s DEBUG Patch 0: SetText "item" @[0, 0, 3, 0] [INFO] [stdout]  0.032s DEBUG Patch 1: SetText "\n\n\n " @[0, 0, 3, 1, 1, 0] [INFO] [stdout]  0.032s DEBUG Patch 2: Insert
                                                                                              @[0, 0] (1 attrs) →slot1 [INFO] [stdout]  0.032s DEBUG Patch 3: Insert
                                                                                                @[0, 0, 3] [INFO] [stdout]  0.032s DEBUG Patch 4: Insert
                                                                                              • @[0, 0, 3, 1] [INFO] [stdout]  0.032s DEBUG Patch 5: Insert @[0, 0, 3, 1, 1] [INFO] [stdout]  0.032s DEBUG Patch 6: Move [1, 4] → [0, 0, 4] [INFO] [stdout]  0.032s DEBUG Patch 7: Move [1, 3, 4] → [0, 0, 3, 0] →slot2 [INFO] [stdout]  0.032s DEBUG Patch 8: Move [1, 3, 1, 0] → [0, 0, 3, 1, 0] →slot3 [INFO] [stdout]  0.032s DEBUG Applying patch: SetText "New content" @[0, 0, 0] [INFO] [stdout]  0.032s DEBUG Patch 9: Move [1, 2] → [0, 0, 2] →slot4 [INFO] [stdout]  0.032s DEBUG Patch 10: Move [1, 1] → [0, 0, 1] →slot5 [INFO] [stdout]  0.032s DEBUG Applying patch: Insert
                                                                                                @[0, 0] →slot1 [INFO] [stdout]  0.032s DEBUG Patch 11: Move [1, 0] → [0, 0, 0] →slot6 [INFO] [stdout]  0.032s DEBUG Patch 12: Move [1, 3, 0] → [0, 0, 3, 1, 1, 0] [INFO] [stdout]  0.032s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.032s DEBUG Patch 13: Move [1, 3, 1, 1, 0] → [0, 0, 3, 2] [INFO] [stdout]  0.032s DEBUG insert_at: detaching child
                                                                                                at pos 0 to slot1 [INFO] [stdout]  0.032s DEBUG Patch 14: Remove @[1, 3, 1, 1] [INFO] [stdout]  0.032s DEBUG Patch 15: Remove @[1, 3, 1] [INFO] [stdout]  0.032s DEBUG insert_at_position:
                                                                                                under at pos 0 (has 0 children) [INFO] [stdout]  0.032s DEBUG Patch 16: Remove @[1, 3, 2] [INFO] [stdout]  0.032s DEBUG Patch 17: Remove @[1, 3, 3, 0] [INFO] [stdout]  0.032s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] [INFO] [stdout]  0.032s DEBUG Patch 18: Remove @[1, 3, 3, 1, 0] [INFO] [stdout]  0.032s DEBUG Patch 19: Remove @[1, 3, 3, 1] [INFO] [stdout]  0.032s DEBUG insert_at: path=[0, 0, 0] parent=
                                                                                                pos=0 [INFO] [stdout]  0.032s DEBUG Patch 20: Remove @[1, 3, 3] [INFO] [stdout]  0.032s DEBUG Patch 21: Remove @[1, 3, 5, 0] [INFO] [stdout]  0.032s DEBUG insert_at_position: text("New conten") under
                                                                                                at pos 0 (has 0 children) [INFO] [stdout]  0.032s DEBUG Patch 22: Remove @[1, 3, 5] [INFO] [stdout]  0.032s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.032s DEBUG Patch 23: Remove @[1, 3, 6] [INFO] [stdout]  0.032s DEBUG Patch 24: Remove @[1, 3] [INFO] [stdout]  0.032s DEBUG Patch 25: Remove @[1] [INFO] [stdout]  0.032s DEBUG Move: starting node_a=NodeId { index1: 7, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 13, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 2, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.032s DEBUG Move: computing from reference for node node_a=NodeId { index1: 7, stamp: NodeStamp(0) } [INFO] [stdout]  0.032s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[2] [INFO] [stdout]  0.032s DEBUG Move: computed from reference node_a=NodeId { index1: 7, stamp: NodeStamp(0) } from=NodeRef(NodePath([2])) [INFO] [stdout]  0.032s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 3, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 20, stamp: NodeStamp(0) }, Element(Atom('h2' type=inline), Html)), (3, NodeId { index1: 23, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.032s DEBUG move_to_position: checking ancestry node=NodeId { index1: 7, stamp: NodeStamp(0) } new_parent=NodeId { index1: 2, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.032s DEBUG Move: checking target position node=NodeId { index1: 7, stamp: NodeStamp(0) } position=0 children_count=4 [INFO] [stdout]  0.032s DEBUG Move: found occupant at target position occupant=NodeId { index1: 3, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.032s DEBUG created new slot slot_num=4 [INFO] [stdout]  0.032s DEBUG detached node to slot node=NodeId { index1: 3, stamp: NodeStamp(0) } slot_num=4 [INFO] [stdout]  0.032s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 3, stamp: NodeStamp(0) } slot=4 [INFO] [stdout]  0.032s DEBUG Generated Move patch node_a=NodeId { index1: 7, stamp: NodeStamp(0) } from=NodeRef(NodePath([2])) to=NodeRef(NodePath([1, 0])) detach_to_slot=Some(4) [INFO] [stdout]  0.032s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] Slot 4: [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [INFO] [stdout]  0.032s DEBUG Processing operation op=Move(a:2 → b:13 @4 under b:4) [INFO] [stdout]  0.032s DEBUG Applying patch: SetText "item" @[0, 0, 3, 0] [INFO] [stdout]  0.032s DEBUG Move: starting node_a=NodeId { index1: 2, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 4, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } new_position=4 [INFO] [stdout]  0.032s DEBUG Move: computing from reference for node node_a=NodeId { index1: 2, stamp: NodeStamp(0) } [INFO] [stdout]  0.032s DEBUG Applying patch: SetText "\n\n\n " @[0, 0, 3, 1, 1, 0] [INFO] [stdout]  0.032s DEBUG Result: tttd
                                                                                              • d<<<&<
                                                                                              • [INFO] [stdout]  0.032s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.032s DEBUG Applying patch: Insert
                                                                                                @[0, 0] (1 attrs) →slot1 [INFO] [stdout]  0.032s DEBUG Expected: tttd
                                                                                              • d<<<&<
                                                                                              • [INFO] [stdout]  0.032s DEBUG Move: computed from reference node_a=NodeId { index1: 2, stamp: NodeStamp(0) } from=NodeRef(NodePath([1])) [INFO] [stdout]  0.032s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.032s DEBUG insert_at: detaching child
                                                                                                at pos 0 to slot1 [INFO] [stdout]  0.032s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (1, NodeId { index1: 15, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (2, NodeId { index1: 16, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html)), (3, NodeId { index1: 18, stamp: NodeStamp(0) }, Element(Atom('code' type=inline), Html))] [INFO] [stdout]  0.032s DEBUG insert_at_position:
                                                                                                under at pos 0 (has 0 children) [INFO] [stdout]  0.032s DEBUG move_to_position: checking ancestry node=NodeId { index1: 2, stamp: NodeStamp(0) } new_parent=NodeId { index1: 1, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.032s DEBUG Applying patch: Insert
                                                                                                  @[0, 0, 3] [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3] parent=
                                                                                                  pos=3 [INFO] [stdout]  0.033s DEBUG Move: checking target position node=NodeId { index1: 2, stamp: NodeStamp(0) } position=4 children_count=4 [INFO] [stdout]  0.033s DEBUG insert_at_position:
                                                                                                    under
                                                                                                    at pos 3 (has 0 children) [INFO] [stdout]  0.033s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.033s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.033s DEBUG Filled gap at position 1 with empty text node [INFO] [stdout]  0.033s DEBUG Generated Move patch node_a=NodeId { index1: 2, stamp: NodeStamp(0) } from=NodeRef(NodePath([1])) to=NodeRef(NodePath([0, 4])) detach_to_slot=None [INFO] [stdout]  0.033s DEBUG Filled gap at position 2 with empty text node [INFO] [stdout]  0.033s DEBUG Applying patch: Insert
                                                                                                  • @[0, 0, 3, 1] [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 1] parent=
                                                                                                      pos=1 [INFO] [stdout]  0.033s DEBUG insert_at_position:
                                                                                                    • under
                                                                                                        at pos 1 (has 0 children) [INFO] [stdout]  0.033s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.033s DEBUG Applying patch: Insert @[0, 0, 3, 1, 1] [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 1, 1] parent=
                                                                                                      • pos=1 [INFO] [stdout]  0.033s DEBUG insert_at_position: under
                                                                                                      • at pos 1 (has 0 children) [INFO] [stdout]  0.033s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.033s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n2]
                                                                                                        [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                        [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                        [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                        [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] Slot 4: [INFO] [stdout] [n3] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n3] [INFO] [stdout] [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 4] → [0, 0, 4] [INFO] [stdout]  0.033s DEBUG Processing operation op=Move(a:4 → b:6 @0 under b:5) [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 4] parent=
                                                                                                        pos=4 [INFO] [stdout]  0.033s DEBUG insert_at_position: text("\n ") under
                                                                                                        at pos 4 (has 4 children) [INFO] [stdout]  0.033s DEBUG Move: starting node_a=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 13, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 3, 4] → [0, 0, 3, 0] →slot2 [INFO] [stdout]  0.033s DEBUG Move: computing from reference for node node_a=NodeId { index1: 4, stamp: NodeStamp(0) } [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 0] parent=
                                                                                                          pos=0 [INFO] [stdout]  0.033s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[4, 0] [INFO] [stdout]  0.033s DEBUG insert_at: detaching child text("") at pos 0 to slot2 [INFO] [stdout]  0.033s DEBUG Move: computed from reference node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([4, 0])) [INFO] [stdout]  0.033s DEBUG insert_at_position: text("\n ") under
                                                                                                            at pos 0 (has 1 children) [INFO] [stdout]  0.033s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 3, 1, 0] → [0, 0, 3, 1, 0] →slot3 [INFO] [stdout]  0.033s DEBUG move_to_position: checking ancestry node=NodeId { index1: 4, stamp: NodeStamp(0) } new_parent=NodeId { index1: 13, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 1, 0] parent=
                                                                                                          • pos=0 [INFO] [stdout]  0.033s DEBUG Move: checking target position node=NodeId { index1: 4, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.033s DEBUG insert_at: detaching child text("") at pos 0 to slot3 [INFO] [stdout]  0.033s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.033s DEBUG insert_at_position: text("Feature on") under
                                                                                                          • at pos 0 (has 1 children) [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 2] → [0, 0, 2] →slot4 [INFO] [stdout]  0.033s DEBUG Generated Move patch node_a=NodeId { index1: 4, stamp: NodeStamp(0) } from=NodeRef(NodePath([4, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=None [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 2] parent=
                                                                                                            pos=2 [INFO] [stdout]  0.033s DEBUG insert_at: detaching child text("") at pos 2 to slot4 [INFO] [stdout]  0.033s DEBUG insert_at_position: text("\n ") under
                                                                                                            at pos 2 (has 4 children) [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 1] → [0, 0, 1] →slot5 [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 1] parent=
                                                                                                            pos=1 [INFO] [stdout]  0.033s DEBUG insert_at: detaching child text("") at pos 1 to slot5 [INFO] [stdout]  0.033s DEBUG insert_at_position:

                                                                                                            under
                                                                                                            at pos 1 (has 4 children) [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] →slot6 [INFO] [stdout]  0.033s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n2]
                                                                                                            [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                            [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                            [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                            [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n5] [INFO] [stdout] Slot 4: [INFO] [stdout] [n3] [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n3] [INFO] [stdout] [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 0] parent=
                                                                                                            pos=0 [INFO] [stdout]  0.033s DEBUG Processing operation op=Move(a:6 → b:8 @0 under b:7) [INFO] [stdout]  0.033s DEBUG insert_at: detaching child text("") at pos 0 to slot6 [INFO] [stdout]  0.033s DEBUG insert_at_position: text("\n ") under
                                                                                                            at pos 0 (has 4 children) [INFO] [stdout]  0.033s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 7, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 15, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 3, 0] → [0, 0, 3, 1, 1, 0] [INFO] [stdout]  0.033s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 1, 1, 0] parent= pos=0 [INFO] [stdout]  0.033s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[3, 0] [INFO] [stdout]  0.033s DEBUG insert_at_position: text("item") under at pos 0 (has 0 children) [INFO] [stdout]  0.033s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([3, 0])) [INFO] [stdout]  0.033s DEBUG Applying patch: Move [1, 3, 1, 1, 0] → [0, 0, 3, 2] [INFO] [stdout]  0.033s DEBUG Parent children BEFORE Move children=[] [INFO] [stdout]  0.033s DEBUG insert_at: path=[0, 0, 3, 2] parent=
                                                                                                              pos=2 [INFO] [stdout]  0.033s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 15, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.033s DEBUG insert_at_position: text("\n\n\n ") under
                                                                                                                at pos 2 (has 2 children) [INFO] [stdout]  0.033s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=0 children_count=0 [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 1, 1] [INFO] [stdout]  0.033s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 1] [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 2] [INFO] [stdout]  0.033s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([3, 0])) to=NodeRef(NodePath([0, 1, 0])) detach_to_slot=None [INFO] [stdout]  0.033s DEBUG Processing operation op=Delete(a:12) [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 3, 0] [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 3, 1, 0] [INFO] [stdout]  0.033s DEBUG Delete operation node_a=NodeId { index1: 12, stamp: NodeStamp(0) } _node_kind=Element(Atom('em' type=inline), Html) [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 3, 1] [INFO] [stdout]  0.033s DEBUG get_node_ref: computed path node=NodeId { index1: 12, stamp: NodeStamp(0) } path=[1, 3, 3] [INFO] [stdout] test dom::tests::test_bogus_comment_parsing ...  0.033s DEBUG Applying patch: Remove @[1, 3, 3] [INFO] [stdout] ok [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 5, 0] [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 5] [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3, 6] [INFO] [stdout] test dom::tests::test_dt_dd_outside_dl ... ok [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1, 3] [INFO] [stdout]  0.033s DEBUG Applying patch: Remove @[1] [INFO] [stdout] test dom::tests::test_foster_parented_text_merging ... ok [INFO] [stdout] test dom::tests::test_apply_patches_insert_element ... ok [INFO] [stdout] test dom::tests::test_apply_patches_roundtrip ... ok [INFO] [stdout]  0.033s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                                                [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n14] TEXT: " text." [INFO] [stdout] [n7]

                                                                                                                [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout] test diff::tests::test_fuzzer_img_li_roundtrip ...  0.033s DEBUG Processing operation op=Delete(a:14) [INFO] [stdout] ok [INFO] [stdout]  0.033s DEBUG Delete operation node_a=NodeId { index1: 14, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.033s DEBUG get_node_ref: computed path node=NodeId { index1: 14, stamp: NodeStamp(0) } path=[1, 3, 4] [INFO] [stdout] test diff::tests::test_patch_serialization ... ok [INFO] [stdout] test diff::tests::test_fuzz_seed_27_template_4 ... ok [INFO] [stdout] test dom::tests::test_gt_not_escaped_in_text_nodes ... ok [INFO] [stdout]  0.033s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n7]

                                                                                                                [INFO] [stdout] [n35] TEXT: "" [INFO] [stdout] [n33] TEXT: "" [INFO] [stdout] [n42] TEXT: "" [INFO] [stdout] [n44] TEXT: "" [INFO] [stdout] [n45] TEXT: "" [INFO] [stdout] [n7]

                                                                                                                [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG Processing operation op=Delete(a:7) [INFO] [stdout]  0.034s DEBUG Delete operation node_a=NodeId { index1: 7, stamp: NodeStamp(0) } _node_kind=Element(Atom('p' type=inline), Html) [INFO] [stdout]  0.034s DEBUG get_node_ref: computed path node=NodeId { index1: 7, stamp: NodeStamp(0) } path=[1, 3] [INFO] [stdout]  0.030s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9] [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n9] [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n17] TEXT: "Second paragraph with a " [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG Processing operation op=Delete(a:17) [INFO] [stdout]  0.034s DEBUG Delete operation node_a=NodeId { index1: 17, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.034s DEBUG get_node_ref: computed path node=NodeId { index1: 17, stamp: NodeStamp(0) } path=[1, 5, 0] [INFO] [stdout]  0.034s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n47] TEXT: "" [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "link" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG Processing operation op=Delete(a:19) [INFO] [stdout]  0.034s DEBUG Delete operation node_a=NodeId { index1: 19, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.034s DEBUG get_node_ref: computed path node=NodeId { index1: 19, stamp: NodeStamp(0) } path=[1, 5, 1, 0] [INFO] [stdout]  0.034s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n47] TEXT: "" [INFO] [stdout] [n18] [INFO] [stdout] [n48] TEXT: "" [INFO] [stdout] [n18] [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG Processing operation op=Delete(a:18) [INFO] [stdout]  0.034s DEBUG Delete operation node_a=NodeId { index1: 18, stamp: NodeStamp(0) } _node_kind=Element(Atom('a' type=inline), Html) [INFO] [stdout]  0.034s DEBUG get_node_ref: computed path node=NodeId { index1: 18, stamp: NodeStamp(0) } path=[1, 5, 1] [INFO] [stdout]  0.034s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n47] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n20] TEXT: "." [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.034s DEBUG Processing operation op=Delete(a:20) [INFO] [stdout]  0.034s DEBUG Delete operation node_a=NodeId { index1: 20, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.034s DEBUG get_node_ref: computed path node=NodeId { index1: 20, stamp: NodeStamp(0) } path=[1, 5, 2] [INFO] [stdout]  0.034s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n47] TEXT: "" [INFO] [stdout] [n49] TEXT: "" [INFO] [stdout] [n50] TEXT: "" [INFO] [stdout] [n16]

                                                                                                                [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.035s DEBUG Processing operation op=Delete(a:16) [INFO] [stdout]  0.035s DEBUG Delete operation node_a=NodeId { index1: 16, stamp: NodeStamp(0) } _node_kind=Element(Atom('p' type=inline), Html) [INFO] [stdout]  0.035s DEBUG get_node_ref: computed path node=NodeId { index1: 16, stamp: NodeStamp(0) } path=[1, 5] [INFO] [stdout]  0.035s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n37] TEXT: "" [INFO] [stdout] [n41] TEXT: "" [INFO] [stdout] [n40] TEXT: "" [INFO] [stdout] [n46] TEXT: "" [INFO] [stdout] [n31] TEXT: "" [INFO] [stdout] [n51] TEXT: "" [INFO] [stdout] [n30] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.035s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.035s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('article' type=inline), Html) [INFO] [stdout]  0.035s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.035s DEBUG Applying patch: SetText "\n 中文App Title\n " @[0, 0, 0] [INFO] [stdout]  0.035s DEBUG Applying patch: Insert @[0, 0] →slot1 [INFO] [stdout]  0.035s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.035s DEBUG insert_at: detaching child at pos 0 to slot1 [INFO] [stdout]  0.035s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.035s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] [INFO] [stdout]  0.035s DEBUG insert_at: path=[0, 0, 0] parent= pos=0 [INFO] [stdout]  0.035s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n3] TEXT: "\n " [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n8] TEXT: "First paragraph with " [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "bold" [INFO] [stdout] [n9] [INFO] [stdout] [n5] TEXT: "Article Title" [INFO] [stdout] [n26]

                                                                                                                [INFO] [stdout] [n15] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n28]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n " [INFO] [stdout] [n24]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n52] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 3: [INFO] [stdout] [n34] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.035s DEBUG insert_at_position: text("\n 中文A") under at pos 0 (has 0 children) [INFO] [stdout]  0.035s DEBUG Applying patch: Remove @[1, 1, 0] [INFO] [stdout]  0.035s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.035s DEBUG Applying patch: Remove @[1, 2] [INFO] [stdout]  0.035s DEBUG Applying patch: Remove @[1] [INFO] [stdout]  0.035s DEBUG Patches: [ [INFO] [stdout] SetText "\n\n " @[0, 0, 0], [INFO] [stdout] SetText " and content" @[0, 0, 1, 0], [INFO] [stdout] SetText "Second paragraph wit" @[0, 0, 2], [INFO] [stdout] Insert
                                                                                                                @[0, 0] →slot1, [INFO] [stdout] Insert

                                                                                                                @[0, 0, 1], [INFO] [stdout] Insert

                                                                                                                @[0, 0, 3] (1 attrs), [INFO] [stdout] Move [1, 6] → [0, 0, 4], [INFO] [stdout] Move [1, 4] → [0, 0, 2] →slot2, [INFO] [stdout] Move [1, 3, 1] → [0, 0, 1, 1], [INFO] [stdout] Move [1, 3, 0] → [0, 0, 1, 0] →slot3, [INFO] [stdout] Move [1, 0] → [0, 0, 0] →slot4, [INFO] [stdout] Move [1, 1, 0] → [0, 0, 1, 2], [INFO] [stdout] Move [1, 2] → [0, 0, 3, 0], [INFO] [stdout] Remove @[1, 1], [INFO] [stdout] Remove @[1, 3, 2], [INFO] [stdout] Remove @[1, 3, 3, 0], [INFO] [stdout] Remove @[1, 3, 3], [INFO] [stdout] Remove @[1, 3, 4], [INFO] [stdout] Remove @[1, 3], [INFO] [stdout] Remove @[1, 5, 0], [INFO] [stdout] Remove @[1, 5, 1, 0], [INFO] [stdout] Remove @[1, 5, 1], [INFO] [stdout] Remove @[1, 5, 2], [INFO] [stdout] Remove @[1, 5], [INFO] [stdout] Remove @[1], [INFO] [stdout] ] [INFO] [stdout]  0.035s DEBUG Patch 0: SetText "\n\n " @[0, 0, 0] [INFO] [stdout]  0.035s DEBUG Patch 1: SetText " and content" @[0, 0, 1, 0] [INFO] [stdout]  0.035s DEBUG Patch 2: SetText "Second paragraph wit" @[0, 0, 2] [INFO] [stdout]  0.035s DEBUG Patch 3: Insert

                                                                                                                @[0, 0] →slot1 [INFO] [stdout]  0.035s DEBUG Patch 4: Insert

                                                                                                                @[0, 0, 1] [INFO] [stdout]  0.035s DEBUG Patch 5: Insert

                                                                                                                @[0, 0, 3] (1 attrs) [INFO] [stdout]  0.035s DEBUG Patch 6: Move [1, 6] → [0, 0, 4] [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout]  0.035s DEBUG Patch 7: Move [1, 4] → [0, 0, 2] →slot2 [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout]  0.035s DEBUG Patch 8: Move [1, 3, 1] → [0, 0, 1, 1] [INFO] [stdout] test dom::tests::test_noscript_placement_in_head ... ok [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout]  0.035s DEBUG Patch 9: Move [1, 3, 0] → [0, 0, 1, 0] →slot3 [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout]  0.035s DEBUG Patch 10: Move [1, 0] → [0, 0, 0] →slot4 [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout] test dom::tests::test_has_doctype_prefix ... ok [INFO] [stdout]  0.035s DEBUG Patch 11: Move [1, 1, 0] → [0, 0, 1, 2] [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout]  0.035s DEBUG Patch 12: Move [1, 2] → [0, 0, 3, 0] [INFO] [stdout]  0.035s DEBUG -> Move FROM slot 1 [INFO] [stdout] test dom::tests::test_normal_text_still_escaped ... ok [INFO] [stdout]  0.035s DEBUG Patch 13: Remove @[1, 1] [INFO] [stdout]  0.035s DEBUG Patch 14: Remove @[1, 3, 2] [INFO] [stdout]  0.035s DEBUG Patch 15: Remove @[1, 3, 3, 0] [INFO] [stdout]  0.035s DEBUG Patch 16: Remove @[1, 3, 3] [INFO] [stdout]  0.035s DEBUG Patch 17: Remove @[1, 3, 4] [INFO] [stdout]  0.035s DEBUG Patch 18: Remove @[1, 3] [INFO] [stdout]  0.035s DEBUG Patch 19: Remove @[1, 5, 0] [INFO] [stdout]  0.035s DEBUG Patch 20: Remove @[1, 5, 1, 0] [INFO] [stdout]  0.035s DEBUG Patch 21: Remove @[1, 5, 1] [INFO] [stdout]  0.035s DEBUG Patch 22: Remove @[1, 5, 2] [INFO] [stdout]  0.035s DEBUG Patch 23: Remove @[1, 5] [INFO] [stdout]  0.035s DEBUG Patch 24: Remove @[1] [INFO] [stdout]  0.033s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] Slot 4: [INFO] [stdout] [n3] [INFO] [stdout] [n26] TEXT: "" [INFO] [stdout] [n3] [INFO] [stdout] [INFO] [stdout]  0.035s DEBUG Processing operation op=Delete(a:3) [INFO] [stdout]  0.035s DEBUG Delete operation node_a=NodeId { index1: 3, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.035s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[4] [INFO] [stdout]  0.035s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n5] [INFO] [stdout] [n27] TEXT: "" [INFO] [stdout] [n5] [INFO] [stdout] Slot 4: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout] test dom::tests::test_incomplete_tag_at_eof ... ok [INFO] [stdout]  0.036s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.036s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Element(Atom('code' type=inline), Html) [INFO] [stdout]  0.036s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[3] [INFO] [stdout]  0.036s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n13] [INFO] [stdout] [n4] TEXT: "<" [INFO] [stdout] [n13] [INFO] [stdout] [n15] [INFO] [stdout] [n6] TEXT: "<" [INFO] [stdout] [n15] [INFO] [stdout] [n16] [INFO] [stdout] [n17] TEXT: "<" [INFO] [stdout] [n16] [INFO] [stdout] [n18] [INFO] [stdout] [n19] TEXT: "<" [INFO] [stdout] [n18] [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "<" [INFO] [stdout] [n7] [INFO] [stdout] [n9] [INFO] [stdout] [n10] TEXT: "<" [INFO] [stdout] [n9] [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n22] TEXT: "<<<<<<<<<<<<<" [INFO] [stdout] [n20]

                                                                                                                [INFO] [stdout] [n23] TEXT: "" [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] Slot 2: [INFO] [stdout] Slot 3: [INFO] [stdout] [n29] TEXT: "" [INFO] [stdout] Slot 4: [INFO] [stdout] [n28] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.036s DEBUG Patches: [ [INFO] [stdout] Insert @[0, 0] →slot1, [INFO] [stdout] Insert @[0, 1], [INFO] [stdout] Insert @[0, 2], [INFO] [stdout] Insert text "<" @[0, 2, 0], [INFO] [stdout] Insert @[0, 3], [INFO] [stdout] Insert text "<" @[0, 3, 0], [INFO] [stdout] Insert

                                                                                                                @[1, 2] →slot2, [INFO] [stdout] Insert text "<<<<<<<<<<<<<" @[1, 2, 0], [INFO] [stdout] Move [1, 3] → [1, 1] →slot3, [INFO] [stdout] Move [2] → [1, 0] →slot4, [INFO] [stdout] Move [1] → [0, 4], [INFO] [stdout] Move [4, 0] → [0, 0, 0], [INFO] [stdout] Move [3, 0] → [0, 1, 0], [INFO] [stdout] Remove @[4], [INFO] [stdout] Remove @[3], [INFO] [stdout] ] [INFO] [stdout]  0.036s DEBUG === Initial === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n3]
                                                                                                                [INFO] [stdout] [n4]
                                                                                                                [INFO] [stdout] [n4]
                                                                                                                [INFO] [stdout] [n3]
                                                                                                                [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.036s DEBUG move_to_position: checking ancestry node=NodeId { index1: 2, stamp: NodeStamp(0) } new_parent=NodeId { index1: 3, stamp: NodeStamp(0) } is_ancestor=true [INFO] [stdout]  0.036s DEBUG replace_with_placeholder: replacing node node=NodeId { index1: 2, stamp: NodeStamp(0) } node_kind=
                                                                                                                [INFO] [stdout]  0.036s DEBUG replace_with_placeholder: moving children to placeholder children_count=1 [INFO] [stdout]  0.036s DEBUG replace_with_placeholder: done placeholder=NodeId { index1: 7, stamp: NodeStamp(0) } [INFO] [stdout] test diff::tests::test_patch_json_roundtrip_with_unicode ... ok [INFO] [stdout]  0.036s DEBUG Move: checking target position node=NodeId { index1: 2, stamp: NodeStamp(0) } position=0 children_count=1 [INFO] [stdout]  0.036s DEBUG Move: found occupant at target position occupant=NodeId { index1: 4, stamp: NodeStamp(0) } _occupant_kind=Element(Atom('div' type=inline), Html) [INFO] [stdout]  0.036s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.036s DEBUG detached node to slot node=NodeId { index1: 4, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.036s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 4, stamp: NodeStamp(0) } slot=1 [INFO] [stdout]  0.036s DEBUG === After move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n7] TEXT: "" [INFO] [stdout] [n3]
                                                                                                                [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n2]
                                                                                                                [INFO] [stdout] [n3]
                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n4]
                                                                                                                [INFO] [stdout] [n4]
                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.037s DEBUG Path to div_a after move path=[0, 0, 0, 0] [INFO] [stdout]  0.036s DEBUG Applying patch: Insert @[0, 0] →slot1 [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.037s DEBUG insert_at: detaching child
                                                                                                                at pos 0 to slot1 [INFO] [stdout]  0.037s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert @[0, 1] [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 1] parent= pos=1 [INFO] [stdout]  0.037s DEBUG insert_at_position: under at pos 1 (has 1 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert @[0, 2] [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 2] parent= pos=2 [INFO] [stdout]  0.037s DEBUG insert_at_position: under at pos 2 (has 2 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert text "<" @[0, 2, 0] [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 2, 0] parent= pos=0 [INFO] [stdout]  0.037s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert @[0, 3] [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 3] parent= pos=3 [INFO] [stdout]  0.037s DEBUG insert_at_position: under at pos 3 (has 3 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert text "<" @[0, 3, 0] [INFO] [stdout]  0.037s DEBUG insert_at: path=[0, 3, 0] parent= pos=0 [INFO] [stdout]  0.037s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert

                                                                                                                @[1, 2] →slot2 [INFO] [stdout]  0.037s DEBUG insert_at: path=[1, 2] parent=
                                                                                                                pos=2 [INFO] [stdout]  0.037s DEBUG insert_at: detaching child at pos 2 to slot2 [INFO] [stdout]  0.037s DEBUG insert_at_position:

                                                                                                                under
                                                                                                                at pos 2 (has 3 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Insert text "<<<<<<<<<<<<<" @[1, 2, 0] [INFO] [stdout]  0.037s DEBUG insert_at: path=[1, 2, 0] parent=

                                                                                                                pos=0 [INFO] [stdout]  0.037s DEBUG insert_at_position: text("<<<<<<<<<<") under

                                                                                                                at pos 0 (has 0 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Move [1, 3] → [1, 1] →slot3 [INFO] [stdout]  0.037s DEBUG insert_at: path=[1, 1] parent=
                                                                                                                pos=1 [INFO] [stdout]  0.037s DEBUG insert_at: detaching child at pos 1 to slot3 [INFO] [stdout]  0.037s DEBUG insert_at_position: under
                                                                                                                at pos 1 (has 3 children) [INFO] [stdout]  0.037s DEBUG Applying patch: Move [2] → [1, 0] →slot4 [INFO] [stdout]  0.037s DEBUG insert_at: path=[1, 0] parent=
                                                                                                                pos=0 [INFO] [stdout]  0.037s DEBUG insert_at: detaching child at pos 0 to slot4 [INFO] [stdout]  0.037s DEBUG insert_at_position: under
                                                                                                                at pos 0 (has 3 children) [INFO] [stdout]  0.038s DEBUG Applying patch: Move [1] → [0, 4] [INFO] [stdout]  0.038s DEBUG insert_at: path=[0, 4] parent= pos=4 [INFO] [stdout]  0.038s DEBUG insert_at_position:
                                                                                                                under at pos 4 (has 4 children) [INFO] [stdout]  0.038s DEBUG Applying patch: Move [4, 0] → [0, 0, 0] [INFO] [stdout]  0.038s DEBUG insert_at: path=[0, 0, 0] parent= pos=0 [INFO] [stdout]  0.038s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.038s DEBUG Applying patch: Move [3, 0] → [0, 1, 0] [INFO] [stdout]  0.038s DEBUG insert_at: path=[0, 1, 0] parent= pos=0 [INFO] [stdout]  0.038s DEBUG insert_at_position: text("<") under at pos 0 (has 0 children) [INFO] [stdout]  0.038s DEBUG Applying patch: Remove @[4] [INFO] [stdout]  0.038s DEBUG Applying patch: Remove @[3] [INFO] [stdout]  0.038s DEBUG Result: <<<<
                                                                                                                <<

                                                                                                                <<<<<<<<<<<<<

                                                                                                                [INFO] [stdout]  0.038s DEBUG Expected: <<<<
                                                                                                                <<

                                                                                                                <<<<<<<<<<<<<

                                                                                                                [INFO] [stdout]  0.039s DEBUG matching pairs: 3 [INFO] [stdout]  0.039s DEBUG arena_dom cinereus diff complete ops_count=9 matched_pairs=3 [INFO] [stdout]  0.039s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] [INFO] [stdout]  0.039s DEBUG Processing operation op=Insert(b:5

                                                                                                                @0 under b:4) [INFO] [stdout]  0.039s DEBUG created new slot slot_num=1 [INFO] [stdout]  0.039s DEBUG detached node to slot node=NodeId { index1: 2, stamp: NodeStamp(0) } slot_num=1 [INFO] [stdout]  0.039s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 1, stamp: NodeStamp(0) } position=0 detach_to_slot=Some(1) [INFO] [stdout]  0.039s DEBUG Parent children after Insert children=[(0, NodeId { index1: 9, stamp: NodeStamp(0) }, Element(Atom('p' type=inline), Html))] [INFO] [stdout]  0.039s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.039s DEBUG Processing operation op=Insert(b:7 @1 under b:5) [INFO] [stdout]  0.039s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 9, stamp: NodeStamp(0) } position=1 detach_to_slot=None [INFO] [stdout]  0.039s DEBUG Parent children after Insert children=[(0, NodeId { index1: 12, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.039s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n11] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.039s DEBUG Processing operation op=Insert(b:8 @0 under b:7) [INFO] [stdout]  0.039s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 11, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.039s DEBUG Parent children after Insert children=[(0, NodeId { index1: 13, stamp: NodeStamp(0) }, Element(Atom('svg' type=inline), Svg))] [INFO] [stdout]  0.039s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.039s DEBUG Processing operation op=Insert(b:9 @0 under b:8) [INFO] [stdout]  0.039s DEBUG After Insert - checking parent state shadow_parent=NodeId { index1: 13, stamp: NodeStamp(0) } position=0 detach_to_slot=None [INFO] [stdout]  0.039s DEBUG Parent children after Insert children=[(0, NodeId { index1: 14, stamp: NodeStamp(0) }, Element(Atom('circle' type=inline), Svg))] [INFO] [stdout]  0.039s DEBUG === After Insert === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.039s DEBUG Processing operation op=Move(a:6 → b:10 @2 under b:5) [INFO] [stdout]  0.039s DEBUG Move: starting node_a=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=2 [INFO] [stdout]  0.039s DEBUG Move: computing from reference for node node_a=NodeId { index1: 6, stamp: NodeStamp(0) } [INFO] [stdout]  0.039s DEBUG get_node_ref: computed path node=NodeId { index1: 6, stamp: NodeStamp(0) } path=[1, 2] [INFO] [stdout]  0.039s DEBUG Move: computed from reference node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) [INFO] [stdout]  0.039s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 12, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html))] [INFO] [stdout]  0.039s DEBUG move_to_position: checking ancestry node=NodeId { index1: 6, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.039s DEBUG Move: checking target position node=NodeId { index1: 6, stamp: NodeStamp(0) } position=2 children_count=2 [INFO] [stdout]  0.039s DEBUG Move: appending (no occupant) [INFO] [stdout]  0.039s DEBUG Generated Move patch node_a=NodeId { index1: 6, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 2])) to=NodeRef(NodePath([0, 0, 2])) detach_to_slot=None [INFO] [stdout]  0.039s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [INFO] [stdout]  0.040s DEBUG Processing operation op=Move(a:3 → b:6 @0 under b:5) [INFO] [stdout]  0.040s DEBUG Move: starting node_a=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent_b=NodeId { index1: 5, stamp: NodeStamp(0) } shadow_new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } new_position=0 [INFO] [stdout]  0.040s DEBUG Move: computing from reference for node node_a=NodeId { index1: 3, stamp: NodeStamp(0) } [INFO] [stdout]  0.040s DEBUG get_node_ref: computed path node=NodeId { index1: 3, stamp: NodeStamp(0) } path=[1, 0] [INFO] [stdout]  0.040s DEBUG Move: computed from reference node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) [INFO] [stdout]  0.040s DEBUG Parent children BEFORE Move children=[(0, NodeId { index1: 12, stamp: NodeStamp(0) }, Text), (1, NodeId { index1: 11, stamp: NodeStamp(0) }, Element(Atom('strong' type=inline), Html)), (2, NodeId { index1: 6, stamp: NodeStamp(0) }, Text)] [INFO] [stdout]  0.040s DEBUG move_to_position: checking ancestry node=NodeId { index1: 3, stamp: NodeStamp(0) } new_parent=NodeId { index1: 9, stamp: NodeStamp(0) } is_ancestor=false [INFO] [stdout]  0.040s DEBUG Move: checking target position node=NodeId { index1: 3, stamp: NodeStamp(0) } position=0 children_count=3 [INFO] [stdout]  0.040s DEBUG Move: found occupant at target position occupant=NodeId { index1: 12, stamp: NodeStamp(0) } _occupant_kind=Text [INFO] [stdout]  0.040s DEBUG created new slot slot_num=2 [INFO] [stdout]  0.040s DEBUG detached node to slot node=NodeId { index1: 12, stamp: NodeStamp(0) } slot_num=2 [INFO] [stdout]  0.040s DEBUG Move: detached occupant to slot occupant=NodeId { index1: 12, stamp: NodeStamp(0) } slot=2 [INFO] [stdout]  0.040s DEBUG Generated Move patch node_a=NodeId { index1: 3, stamp: NodeStamp(0) } from=NodeRef(NodePath([1, 0])) to=NodeRef(NodePath([0, 0, 0])) detach_to_slot=Some(2) [INFO] [stdout]  0.040s DEBUG === After Move === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n5] TEXT: "bold" [INFO] [stdout] [n4] [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.040s DEBUG Processing operation op=Delete(a:5) [INFO] [stdout]  0.040s DEBUG Delete operation node_a=NodeId { index1: 5, stamp: NodeStamp(0) } _node_kind=Text [INFO] [stdout]  0.040s DEBUG get_node_ref: computed path node=NodeId { index1: 5, stamp: NodeStamp(0) } path=[1, 1, 0] [INFO] [stdout]  0.040s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n18] TEXT: "" [INFO] [stdout] [n4] [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.040s DEBUG Processing operation op=Delete(a:4) [INFO] [stdout]  0.040s DEBUG Delete operation node_a=NodeId { index1: 4, stamp: NodeStamp(0) } _node_kind=Element(Atom('strong' type=inline), Html) [INFO] [stdout]  0.040s DEBUG get_node_ref: computed path node=NodeId { index1: 4, stamp: NodeStamp(0) } path=[1, 1] [INFO] [stdout]  0.040s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] [n16] TEXT: "" [INFO] [stdout] [n19] TEXT: "" [INFO] [stdout] [n15] TEXT: "" [INFO] [stdout] [n2]

                                                                                                                [INFO] [stdout] Slot 2: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.040s DEBUG Processing operation op=Delete(a:2) [INFO] [stdout]  0.040s DEBUG Delete operation node_a=NodeId { index1: 2, stamp: NodeStamp(0) } _node_kind=Element(Atom('p' type=inline), Html) [INFO] [stdout]  0.040s DEBUG get_node_ref: computed path node=NodeId { index1: 2, stamp: NodeStamp(0) } path=[1] [INFO] [stdout]  0.040s DEBUG === After Delete === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n3] TEXT: "Text with " [INFO] [stdout] [n11] [INFO] [stdout] [n13] [INFO] [stdout] [n14] [INFO] [stdout] [n14] [INFO] [stdout] [n13] [INFO] [stdout] [n11] [INFO] [stdout] [n6] TEXT: " word." [INFO] [stdout] [n9]

                                                                                                                [INFO] [stdout] [n1] [INFO] [stdout] Slot 1: [INFO] [stdout] [n20] TEXT: "" [INFO] [stdout] Slot 2: [INFO] [stdout] [n12] TEXT: "" [INFO] [stdout] [INFO] [stdout]  0.040s DEBUG Applying patch: Insert

                                                                                                                @[0, 0] →slot1 [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0] parent= pos=0 [INFO] [stdout]  0.040s DEBUG insert_at: detaching child

                                                                                                                at pos 0 to slot1 [INFO] [stdout]  0.040s DEBUG insert_at_position:

                                                                                                                under at pos 0 (has 0 children) [INFO] [stdout]  0.040s DEBUG Applying patch: Insert @[0, 0, 1] [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0, 1] parent=

                                                                                                                pos=1 [INFO] [stdout]  0.040s DEBUG insert_at_position: under

                                                                                                                at pos 1 (has 0 children) [INFO] [stdout]  0.040s DEBUG Filled gap at position 0 with empty text node [INFO] [stdout]  0.040s DEBUG Applying patch: Insert @[0, 0, 1, 0] (2 attrs) [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0, 1, 0] parent= pos=0 [INFO] [stdout]  0.040s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.040s DEBUG Applying patch: Insert @[0, 0, 1, 0, 0] [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0, 1, 0, 0] parent= pos=0 [INFO] [stdout]  0.040s DEBUG insert_at_position: under at pos 0 (has 0 children) [INFO] [stdout]  0.040s DEBUG Applying patch: Move [1, 2] → [0, 0, 2] [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0, 2] parent=

                                                                                                                pos=2 [INFO] [stdout]  0.040s DEBUG insert_at_position: text(" word.") under

                                                                                                                at pos 2 (has 2 children) [INFO] [stdout]  0.040s DEBUG Applying patch: Move [1, 0] → [0, 0, 0] →slot2 [INFO] [stdout]  0.040s DEBUG insert_at: path=[0, 0, 0] parent=

                                                                                                                pos=0 [INFO] [stdout]  0.040s DEBUG insert_at: detaching child text("") at pos 0 to slot2 [INFO] [stdout]  0.041s DEBUG insert_at_position: text("Text with ") under

                                                                                                                at pos 0 (has 2 children) [INFO] [stdout]  0.041s DEBUG Applying patch: Remove @[1, 1, 0] [INFO] [stdout]  0.041s DEBUG Applying patch: Remove @[1, 1] [INFO] [stdout]  0.041s DEBUG Applying patch: Remove @[1] [INFO] [stdout] test diff::tests::test_fuzz_seed_0_template_0 ... ok [INFO] [stdout] test dom::tests::test_math_fragment_parsing ... ok [INFO] [stdout] test dom::tests::test_leading_whitespace_in_body_content ... ok [INFO] [stdout] test dom::tests::test_parse_comment ... ok [INFO] [stdout] test dom::tests::test_parse_body_fragment_structure ... ok [INFO] [stdout] test dom::tests::test_malformed_close_tag_with_slash ... ok [INFO] [stdout] test diff::tests::test_move_parent_under_child_no_cycle ... ok [INFO] [stdout] test dom::tests::test_parse_doctype ... ok [INFO] [stdout] test dom::tests::test_noscript_rawtext_vs_browser ... ok [INFO] [stdout] test dom::tests::test_noscript_with_malformed_tag ... ok [INFO] [stdout] test dom::tests::test_math_with_li_fragment_parsing ... ok [INFO] [stdout] test dom::tests::test_dt_dd_nested_s ... ok [INFO] [stdout] test diff::tests::test_fuzzer_slot_contains_text ... ok [INFO] [stdout] test diff::tests::test_svg_inside_strong ... ok [INFO] [stdout] test dom::tests::test_parse_simple_html ... ok [INFO] [stdout] test dom::tests::test_dt_dd_with_custom_tag ... ok [INFO] [stdout] test dom::tests::test_parser_mismatch_li_u_svg ... ignored, fixed in fork, but not in upstream [INFO] [stdout] test dom::tests::test_to_html ... ok [INFO] [stdout] test dom::tests::test_parse_with_attributes ... ok [INFO] [stdout] test dom::tests::test_parser_lf_cr_attribute_handling ... ok [INFO] [stdout] test dom::tests::test_to_html_with_attributes ... ok [INFO] [stdout] test dom::tests::test_parser_stray_body_tags_merge_attrs ... ok [INFO] [stdout] test dom::tests::test_to_html_escaping ... ok [INFO] [stdout] test dom::tests::test_style_content_not_escaped ... ok [INFO] [stdout] test dom::tests::test_to_html_void_elements ... ok [INFO] [stdout] test dom::tests::test_zero_copy_parsing ... ok [INFO] [stdout] test dom::tests::test_script_content_not_escaped ... ok [INFO] [stdout] test dom::tests::test_parse_nested_elements ... ok [INFO] [stdout]  0.453s DEBUG matching pairs: 3896 [INFO] [stdout]  0.453s DEBUG arena_dom cinereus diff complete ops_count=1 matched_pairs=3896 [INFO] [stdout]  0.463s DEBUG === Initial shadow tree === [INFO] [stdout] Slot 0: [INFO] [stdout] [n1] [INFO] [stdout] [n2] TEXT: "\n" [INFO] [stdout] [n3]

                                                                                                                [INFO] [stdout] [n4] TEXT: "\n" [INFO] [stdout] [n5]
                                                                                                                [INFO] [stdout] [n6] TEXT: "\n " [INFO] [stdout] [n7] [INFO] [stdout] [n7] [INFO] [stdout] [n8] TEXT: "\n " [INFO] [stdout] [n9]
                                                                                                                [INFO] [stdout] [n10] TEXT: "\n " [INFO] [stdout] [n11]
                                                                                                                [INFO] [stdout] [n11]
                                                                                                                [INFO] [stdout] [n12] TEXT: "\n\n \n " [INFO] [stdout] [n13]
                                                                                                                [INFO] [stdout] [n14] TEXT: "\n " [INFO] [stdout] [n15]
                                                                                                                [INFO] [stdout] [n15]
                                                                                                                [INFO] [stdout] [n16] TEXT: "\n\n \n \n\n " [INFO] [stdout] [n17]
                                                                                                                [INFO] [stdout] [n18] TEXT: "\n\n \n \n \n\n \n \n\n " [INFO] [stdout] [n19]

                                                                                                                [INFO] [stdout] [n20] TEXT: "\n Face cams: the missing guide\n " [INFO] [stdout] [n19]

                                                                                                                [INFO] [stdout] [n21] TEXT: "\n\n \n\n \n \n\n \n \n " [INFO] [stdout] [n22]
                                                                                                                [INFO] [stdout] [n23] TEXT: "\n \n " [INFO] [stdout] [n24] [INFO] [stdout] [n25] TEXT: "Mar 02, 2024" [INFO] [stdout] [n24] [INFO] [stdout] [n26] TEXT: "\n \n \n\n " [INFO] [stdout] [n27] [INFO] [stdout] [n28] TEXT: "\n " [INFO] [stdout] [n29] [INFO] [stdout] [n30] [INFO] [stdout] [n30] [INFO] [stdout] [n31] [INFO] [stdout] [n31] [INFO] [stdout] [n29] [INFO] [stdout] [n32] TEXT: "\n\n " [INFO] [stdout] [n33] [INFO] [stdout] [n34] TEXT: "\n \n \n \n 1 hour 11 min\n \n " [INFO] [stdout] [n33] [INFO] [stdout] [n35] TEXT: "\n " [INFO] [stdout] [n27] [INFO] [stdout] [n36] TEXT: "\n \n " [INFO] [stdout] [n37] [INFO] [stdout] [n38] TEXT: "\n \n \n " [INFO] [stdout] [n39] [INFO] [stdout] [n40] [INFO] [stdout] [n41] TEXT: "#meta" [INFO] [stdout] [n40] [INFO] [stdout] [n39] [INFO] [stdout] [n42] TEXT: "\n \n \n " [INFO] [stdout] [n43] [INFO] [stdout] [n44] TEXT: "·" [INFO] [stdout] [n43] [INFO] [stdout] [n45] TEXT: "\n \n \n \n " [INFO] [stdout] [n46] [INFO] [stdout] [n47] [INFO] [stdout] [n48] TEXT: "#production" [INFO] [stdout] [n47] [INFO] [stdout] [n46] [INFO] [stdout] [n49] TEXT: "\n \n \n \n " [INFO] [stdout] [n37] [INFO] [stdout] [n50] TEXT: "\n " [INFO] [stdout] [n51] [INFO] [stdout] [n52] TEXT: "\n \n \n\n \n \n\n \n" [INFO] [stdout] [n51] [INFO] [stdout] [n53] TEXT: "\n " [INFO] [stdout] [n22]
                                                                                                                [INFO] [stdout] [n54] TEXT: " \n \n\n \n \n" [INFO] [stdout] [n55]

                                                                                                                [INFO] [stdout] [n56] TEXT: "\n Thanks to my sponsors:\n " [INFO] [stdout] [n57] [INFO] [stdout] [n58] TEXT: "\n \n Adam Lassek, Thehbadger, Andy Gocke, Dominik Wagner, James Rhodes, Peter Shih, Zalán Bálint Lévai, Cole Kurkowski, Geoff Cant, Tomas Sedovic, Radu Matei, Ian McLinden, James Brown, psentee, Manuel Hutter, Malik Bougacha, Austin Traver, Marcus Griep, Guy Waldman, Kevin Murphy\n and " [INFO] [stdout] [n59] [INFO] [stdout] [n60] [INFO] [stdout] [n61] TEXT: "262" [INFO] [stdout] [n60] [INFO] [stdout] [n62] TEXT: " more" [INFO] [stdout] [n59] [INFO] [stdout] [n63] TEXT: "\n \n " [INFO] [stdout] [n57] [INFO] [stdout] [n64] TEXT: "\n " [INFO] [stdout] [n65] [INFO] [stdout] [n66] TEXT: "Adam Lassek, Thehbadger, Andy Gocke, Dominik Wagner, James Rhodes, Peter Shih, Zalán Bálint Lévai, Cole Kurkowski, Geoff Cant, Tomas Sedovic, Radu Matei, Ian McLinden, James Brown, psentee, Manuel Hutter, Malik Bougacha, Austin Traver, Marcus Griep, Guy Waldman, Kevin Murphy, Diego Roig, Berkus Decker, Elendol, Christopher Valerio, Angelo, Yuriy Taraday, Pete Bevin, ShikChen, Lawrence Bethlenfalvy, Xavier Groleau, Ben Wishovich, Marco Carmosino, Alan O'Donnell, Anna M, Ronen Ulanovsky, Romain Ruetschi, Vinay Mehta, Geoffroy Couprie, L0r3m1p5um, Mark, eliferrous, Max Heaton, Gorazd Brumen, Brooke Tilley, Boris Dolgov, qrpth, Kyle Lacy, budrick, Toon Willems, Sawyer Knoblich, Romain Kelifa, callym, Luis, Guilherme Neubaner, playest, Dragoon, Morgan Rosenkranz, Olivia Crain, Simon Menke, Ross Williams, compwhizii, pinkhatbeard, Mark Old, David Smith, Chris Thackrey, Beat Scherrer, Tom Forbes, Cole Tobin, Taneli Kaivola, Michael Alyn Miller, Brian L. Troutwine, Egor Ternovoi, Björn Marschollek, Sean Bryant, Jonathan Adams, Nicolas Riebesel, Michał Zalewski, Olly Swanson, Laine Taffin Altman, Josh Triplett, Timothée Gerber, Jimmy Hartzell, Senyo Simpson, Adam Gutglick, Chris Walker, Victor Song, Chris Biscardi, Andy F, Antoine Boegli, Ben Mitchell, Luke Konopka, Lucille Blumire, Sung Jeon, zed, Jan-Stefan Janetzky, Xirvik Servers, Enrico Zschemisch, Zac Harrold, Matt Heise, Matěj Volf, messense, Christoph Grabo, milan, Sam Leonard, Alex Rudy, David Cornu, Raine Godmaire, Yann Schwartz, Paige Ruten, Braidon Whatley, Jack Duvall, Paul Marques Mota, you got maiL, Dylan Anthony, Jake Demarest-Mays, Guillaume E, Urs Metz, The0x539, Zachary Thomas, Colin VanDervoort, Mathew Haji, xales, Zaki, Eugene Bulkin, Max von Forell, old.woman.josiah, Matthias Zepper, Luke Yue, Noel, Yufan Lou, Carson Page, Tabitha, notryanb, Benjamin Röjder Delnavaz, Max Bruckner, Geoffrey Thomas, Vladimir, Daniel Silverstone, Menno Finlay-Smits, Olivier Peyrusse, Mario Fleischhacker, Philipp Hatt, Tobias Bahls, Nicholas, std__mpa, villem, Corey Alexander, clement, Marie Janssen, Hadrien G., Santiago Lema, Mark Tomlin, DaVince, Kamran Khan, Steven Pham, Aiden Scandella, Mikkel Rasmussen, Dimitri Merejkowsky, Antoine PESTEL-ROPARS, Scott Steele, Dom, Justy, traxys, Paul Horn, René Ribaud, 0lach, Pete LeVasseur, Tyler Bloom, John VanEnk, Scott Sanderson, Justin Ossevoort, Isak Sunde Singh, Matt Campbell, avborhanian, Matt Jackson, Horváth-Lázár Péter, anichno, Jelle Besseling, Matthew T, Henrik Tudborg, Michael, Marc-Andre Giroux, Nicolas Coulange, Aleksandre Khokhiashvili, Torben Clasen, AdrianEddy, Joshua Roesslein, Mattia Valzelli, belzael, Michal Hošna, Mike English, Justin Smith, Alex Krantz, Felix Weis, Borys Minaiev, Matt Jadczak, Zeeger Lubsen, Daniel Wagner-Hall, Alexandra Østermark, Ripta Pasay, Arjen Laarhoven, Marty Penner, Romet Tagobert, Philipp Angerer, dataphract, Jörn Huxhorn, Lena Schönburg, Marcus Griep, Stephan Buys, Kai Kaufman, Marcin Kołodziej, jalciné, Chris Emery, Daniel Strittmatter, Em Sharnoff, Antoine Rouaze, bbutkovic, Julian Schmid, Hamilton Chapman, Tanner Muro, Reto Trappitsch, Yves, David White, C J Silverio, Gioele Pannetto, Vincent Mutolo, Mason Ginter, Bob Ippolito, Seth, ofrighil, Mateusz Wykurz, hgranthorner, Wyatt Herkamp, Tiziano Santoro, James Leitch, Zoran Zaric, Walther, ZacJW, Ryan, Sylvie Nightshade, Twan Walpot, Michał Bartoszkiewicz, Nyefan, jatescher, Blake Johnson, Valentin Mariette, Ronen Cohen, Miguel Raz Guzmán Macedo, Ives van Hoorne, Chris, David Barsky, Johnathan Pagnutti, Jesse Luehrs, Chris Sims, SeniorMars, me, Luuk, Christian Bourjau, Integer 32, LLC, Richard Stephens, Richard Pringle, Dirkjan Ochtman, prairiewolf, genny, Makoto Nakashima, Elnath, Zachary Myers, Brandon Piña, WeblWabl, Niels Abildgaard, Andrew Henshaw, Mathias Brossard, Astrid, Raphaël Thériault, Dave Minter, Samit Basu, Jim, Julien Roncaglia, Neil Blakey-Milner, Jean-David Gadina, Lyssieth, Ahmad Alhashemi" [INFO] [stdout] [n65] [INFO] [stdout] [n67] TEXT: "\n\n \n" [INFO] [stdout] [n55]

                                                                                                                [INFO] [stdout] [n68] TEXT: "\n\n" [INFO] [stdout] [n69] [INFO] [stdout] [n71] TEXT: "\n\n \n\n " [INFO] [stdout] [n72]
                                                                                                                [INFO] [stdout] [n72]
                                                                                                                [INFO] [stdout] [n73] TEXT: "\n\n \n \n\n\n\n \n\n \n\n \n\n " [INFO] [stdout] [n74]

                                                                                                                [INFO] [stdout] [n75] TEXT: "I try to avoid doing “meta” / “behind the scenes” stuff, because I usually feel\nlike it has to be “earned”. How many YouTube channels are channels about making\nYouTube videos? Too many." [INFO] [stdout] [n74]

                                                                                                                [INFO] [stdout] [n76] TEXT: "\n\n" [INFO] [stdout] [n77]

                                                                                                                [INFO] [stdout] [n78] TEXT: "Regardless, because I’ve had the opportunity to make my own mistakes now for a\nfew years (I started " [INFO] [stdout] [n79] [INFO] [stdout] [n80] TEXT: "doing the video thing" [INFO] [stdout] [n79] [INFO] [stdout] [n81] TEXT: " in earnest in 2019), and because I’ve recently made a few leaps\nin quality-of-life re: shooting and editing video, I thought I’d publish a few\nnotes, if only for reference for my future self." [INFO] [stdout] [n77]

                                                                                                                [INFO] [stdout] [n82] TEXT: "\n\n" [INFO] [stdout] [n83] [INFO] [stdout] [n84]

                                                                                                                [INFO] [stdout] [n85] TEXT: "Where to buy stuff?" [INFO] [stdout] [n84]

                                                                                                                [INFO] [stdout] [n83]
                                                                                                                [INFO] [stdout] [n86] TEXT: "\n" [INFO] [stdout] [n87]

                                                                                                                [INFO] [stdout] [n88] TEXT: "There’s no affiliate links in this entire article: it all links to the\nmanufacturers’ websites or Wikipedia." [INFO] [stdout] [n87]

                                                                                                                [INFO] [stdout] [n89] TEXT: "\n\n" [INFO] [stdout] [n90]

                                                                                                                [INFO] [stdout] [n91] TEXT: "Amazon is as evil as they come, but they have a " [INFO] [stdout] [n92] [INFO] [stdout] [n93] TEXT: "great" [INFO] [stdout] [n92] [INFO] [stdout] [n94] TEXT: " “no questions asked”\nreturn policy." [INFO] [stdout] [n90]

                                                                                                                [INFO] [stdout] [n95] TEXT: "\n\n" [INFO] [stdout] [n96]

                                                                                                                [INFO] [stdout] [n97] TEXT: "However, whenever I can, I try to buy from elsewhere. For audio stuff, that’s\noften " [INFO] [stdout] [n98] [INFO] [stdout] [n99] TEXT: "Thomann" [INFO] [stdout] [n98] [INFO] [stdout] [n100] TEXT: " (they have a separate\nwebsite for the Americas). For visual stuff, that’s often " [INFO] [stdout] [n101] [INFO] [stdout] [n102] TEXT: "Miss\nNumerique" [INFO] [stdout] [n101] [INFO] [stdout] [n103] TEXT: ", but that’s just for France." [INFO] [stdout] [n96]

                                                                                                                [INFO] [stdout] [n104] TEXT: "\n\n" [INFO] [stdout] [n105]

                                                                                                                [INFO] [stdout] [n106] TEXT: "You can find a list of local resellers on the manufacturers’ websites:\nsometimes, the slight inconvenience of going off-Amazon pays off in terms of,\nwell, the knowledge you’re supporting a smaller outlet, but also a higher\nquality of service, advice, etc." [INFO] [stdout] [n105]

                                                                                                                [INFO] [stdout] [n107] TEXT: "\n\n" [INFO] [stdout] [n108]

                                                                                                                [INFO] [stdout] [n109] TEXT: "I bought one thing off of eBay and had a really negative experience, but that’s\njust me. There " [INFO] [stdout] [n110] [INFO] [stdout] [n111] TEXT: "are" [INFO] [stdout] [n110] [INFO] [stdout] [n112] TEXT: " things worth the money on AliExpress and similar Chinese\nwebsites, but you won’t find them unless you explicitly know what to look for:\nthe good stuff looks exactly like the bad stuff." [INFO] [stdout] [n108]

                                                                                                                [INFO] [stdout] [n113] TEXT: "\n\n" [INFO] [stdout] [n114]

                                                                                                                [INFO] [stdout] [n115] TEXT: "For example, I grabbed these 2160p@30 HDMI capture sticks for 22.41EUR, and\nthey " [INFO] [stdout] [n116] [INFO] [stdout] [n117] TEXT: "work" [INFO] [stdout] [n116] [INFO] [stdout] [n118] TEXT: " (they’re USB video class, no drivers needed):" [INFO] [stdout] [n114]

                                                                                                                [INFO] [stdout] [n119] TEXT: "\n\n" [INFO] [stdout] [n120]

                                                                                                                [INFO] [stdout] [n121] [INFO] [stdout] [n122] [INFO] [stdout] [n122] [INFO] [stdout] [n123] [INFO] [stdout] [n123] [INFO] [stdout] [n124] [INFO] [stdout] [n124] [INFO] [stdout] [n125] [INFO] [stdout] [n125] [INFO] [stdout] [n126] [INFO] [stdout] [n126] [INFO] [stdout] [n127] [INFO] [stdout] [n127] [INFO] [stdout] [n128] [INFO] [stdout] [n128] [INFO] [stdout] [n129] [INFO] [stdout] [n129] [INFO] [stdout] [n130] [INFO] [stdout] [n130] [INFO] [stdout] [n131] [INFO] [stdout] [n131] [INFO] [stdout] [n121] [INFO] [stdout] [n120]

                                                                                                                [INFO] [stdout] [n132] TEXT: "\n\n" [INFO] [stdout] [n133] [INFO] [stdout] [n134]

                                                                                                                [INFO] [stdout] [n135] TEXT: "About the money thing" [INFO] [stdout] [n134]

                                                                                                                [INFO] [stdout] [n133]
                                                                                                                [INFO] [stdout] [n136] TEXT: "\n" [INFO] [stdout] [n137]

                                                                                                                [INFO] [stdout] [n138] TEXT: "AV (audio/video) is an expensive hobby." [INFO] [stdout] [n137]

                                                                                                                [INFO] [stdout] [n139] TEXT: "\n\n" [INFO] [stdout] [n140]

                                                                                                                [INFO] [stdout] [n141] TEXT: "Expect your “price sensitivities” to evolve over time. I think I’ve wasted more\nmoney trying to " [INFO] [stdout] [n142] [INFO] [stdout] [n143] TEXT: "save" [INFO] [stdout] [n142] [INFO] [stdout] [n144] TEXT: " money by getting the cheap, not-fit-for-purpose\nentry-level stuff, rather than just getting something that works." [INFO] [stdout] [n140]

                                                                                                                [INFO] [stdout] [n145] TEXT: "\n\n" [INFO] [stdout] [n146]

                                                                                                                [INFO] [stdout] [n147] TEXT: "But when I started out, I didn’t know what worked!" [INFO] [stdout] [n146]

                                                                                                                [INFO] [stdout] [n148] TEXT: "\n\n" [INFO] [stdout] [n149]

                                                                                                                [INFO] [stdout] [n150] TEXT: "So that’s what I’m here to tell you." [INFO] [stdout] [n149]

                                                                                                                [INFO] [stdout] [n151] TEXT: "\n\n" [INFO] [stdout] [n152]

                                                                                                                [INFO] [stdout] [n153] TEXT: "You obviously shouldn’t follow my “current rig” blindly: I’ve assembled it over\nyears, and video stuff is my passion project. I do other work on the side to\nfund it. It’s easier to stomach the end-of-year accounting if you think of it\nthat way." [INFO] [stdout] [n152]

                                                                                                                [INFO] [stdout] [n154] TEXT: "\n\n" [INFO] [stdout] [n155] [INFO] [stdout] [n156]

                                                                                                                [INFO] [stdout] [n157] TEXT: "What I’m going for" [INFO] [stdout] [n156]

                                                                                                                [INFO] [stdout] [n155]
                                                                                                                [INFO] [stdout] [n158] TEXT: "\n" [INFO] [stdout] [n159]

                                                                                                                [INFO] [stdout] [n160] TEXT: "It doesn’t really matter if you’re doing shorter, more frequent videos, that\ncover current event, new releases etc., if you’re going for longer essays, or\nsomething in the middle: you want to keep your workflow as simple as possible." [INFO] [stdout] [n159]

                                                                                                                [INFO] [stdout] [n161] TEXT: "\n\n" [INFO] [stdout] [n162]

                                                                                                                [INFO] [stdout] [n163] TEXT: "If you’re recording for YouTube, chances are, you’re doing everything yourself.\nIt’s not a big production where other people prepare your stuff, you’ll have to\ndo the research, write the script, edit the script, set up the camera, the\nlighting, the mic, do your own wardrobe and make-up (for me that mostly means\nputting on a shirt and doing my best at wrangling facial hair), then later do\ncolor grading, edit, do sound design, title design, etc. etc." [INFO] [stdout] [n162]

                                                                                                                [INFO] [stdout] [n164] TEXT: "\n\n" [INFO] [stdout] [n165]

                                                                                                                [INFO] [stdout] [n166] TEXT: "Making a YouTube video isn’t one job, it’s 15 jobs." [INFO] [stdout] [n165]

                                                                                                                [INFO] [stdout] [n167] TEXT: "\n\n" [INFO] [stdout] [n168]

                                                                                                                [INFO] [stdout] [n169] TEXT: "So unless you have the budget to hire 15 people, you want to keep things as\nstreamlined as possible, and sometimes that means spending money on hardware or\nsoftware that will, in the long run, save you a lot of time. Or simply prevent\nyou from getting so frustrated with the whole thing that you give it up\nentirely." [INFO] [stdout] [n168]

                                                                                                                [INFO] [stdout] [n170] TEXT: "\n\n" [INFO] [stdout] [n171]

                                                                                                                [INFO] [stdout] [n172] TEXT: "So, for example, let’s say you get a nice DSLR or mirrorless camera (the kind of\ncamera you think of if I say “Canon” or “Nikon”? Think wedding photographer),\nmost of those will let you record video directly to an SD card." [INFO] [stdout] [n171]

                                                                                                                [INFO] [stdout] [n173] TEXT: "\n\n" [INFO] [stdout] [n174]

                                                                                                                [INFO] [stdout] [n175] TEXT: "SD cards have fairly good capacity these days: you can get 512 GB ones in the\n100-150EUR price range. Of course, you’ll need to ensure it’s fast enough to\nsupport the bit rate your camera is outputting." [INFO] [stdout] [n174]

                                                                                                                [INFO] [stdout] [n176] TEXT: "\n\n" [INFO] [stdout] [n177]

                                                                                                                [INFO] [stdout] [n178] [INFO] [stdout] [n179] [INFO] [stdout] [n179] [INFO] [stdout] [n180] [INFO] [stdout] [n180] [INFO] [stdout] [n181] [INFO] [stdout] [n181] [INFO] [stdout] [n182] [INFO] [stdout] [n182] [INFO] [stdout] [n183] [INFO] [stdout] [n183] [INFO] [stdout] [n184] [INFO] [stdout] [n184] [INFO] [stdout] [n185] [INFO] [stdout] [n185] [INFO] [stdout] [n186] [INFO] [stdout] [n186] [INFO] [stdout] [n187] [INFO] [stdout] [n187] [INFO] [stdout] [n188] [INFO] [stdout] [n188] [INFO] [stdout] [n178] [INFO] [stdout] [n177]

                                                                                                                [INFO] [stdout] [n189] TEXT: "\n\n" [INFO] [stdout] [n190]

                                                                                                                [INFO] [stdout] [n191] TEXT: "And that can totally work! Get yourself a tripod, and I mean a " [INFO] [stdout] [n192] [INFO] [stdout] [n193] TEXT: "good" [INFO] [stdout] [n192] [INFO] [stdout] [n194] TEXT: " tripod: as\na rule of thumb, never cheap out on stuff that could kill expensive stuff, so no\ncheap tripods, no cheap mic arms, no cheap battery packs, etc." [INFO] [stdout] [n190]

                                                                                                                [INFO] [stdout] [n195] TEXT: "\n\n" [INFO] [stdout] [n196]

                                                                                                                [INFO] [stdout] [n197] TEXT: "Get yourself a tripod, put the camera on there, and you’re good to go!" [INFO] [stdout] [n196]

                                                                                                                [INFO] [stdout] [n198] TEXT: "\n\n" [INFO] [stdout] [n199]

                                                                                                                [INFO] [stdout] [n200] [INFO] [stdout] [n201] [INFO] [stdout] [n201] [INFO] [stdout] [n202] [INFO] [stdout] [n202] [INFO] [stdout] [n203] [INFO] [stdout] [n203] [INFO] [stdout] [n204] [INFO] [stdout] [n204] [INFO] [stdout] [n205] [INFO] [stdout] [n205] [INFO] [stdout] [n206] [INFO] [stdout] [n206] [INFO] [stdout] [n207] [INFO] [stdout] [n207] [INFO] [stdout] [n208] [INFO] [stdout] [n208] [INFO] [stdout] [n209] [INFO] [stdout] [n209] [INFO] [stdout] [n210] [INFO] [stdout] [n210] [INFO] [stdout] [n200] [INFO] [stdout] [n199]

                                                                                                                [INFO] [stdout] [n211] TEXT: "\n\n" [INFO] [stdout] [n212]

                                                                                                                [INFO] [stdout] [n213] TEXT: "Several downsides are immediately apparent with that approach though: for\nstarters, due to some tax rules in some countries (possibly the US?) some\ncameras stop recording after 30 minutes. (If they didn’t, they’d be taxed\ndifferently and cost a " [INFO] [stdout] [n214] [INFO] [stdout] [n215] TEXT: "lot" [INFO] [stdout] [n214] [INFO] [stdout] [n216] TEXT: " more on import. Sorry I can’t be bothered to\nlook it up right now, I’m info-dumping)." [INFO] [stdout] [n212]

                                                                                                                [INFO] [stdout] [n217] TEXT: "\n\n" [INFO] [stdout] [n218]

                                                                                                                [INFO] [stdout] [n219] TEXT: "Ignoring that, the mic is crap. The mic on any given camera exists solely to let\nyou know your audio encoder is working, or, " [INFO] [stdout] [n220] [INFO] [stdout] [n221] TEXT: "I guess" [INFO] [stdout] [n220] [INFO] [stdout] [n222] TEXT: ", for AV sync (but a good\nold-fashioned clap is better. “Auto align audio” functionality in editing\nsoftware never worked for me)." [INFO] [stdout] [n218]

                                                                                                                [INFO] [stdout] [n223] TEXT: "\n\n" [INFO] [stdout] [n224]

                                                                                                                [INFO] [stdout] [n225] TEXT: "But that’s somewhat solvable. You can grab a " [INFO] [stdout] [n226] [INFO] [stdout] [n227] TEXT: "RODE\nVideoMic" [INFO] [stdout] [n226] [INFO] [stdout] [n228] TEXT: " (~280EUR), now\nyour mic isn’t as bad, problem solved." [INFO] [stdout] [n224]

                                                                                                                [INFO] [stdout] [n229] TEXT: "\n\n" [INFO] [stdout] [n230]

                                                                                                                [INFO] [stdout] [n231] [INFO] [stdout] [n232] [INFO] [stdout] [n232] [INFO] [stdout] [n233] [INFO] [stdout] [n233] [INFO] [stdout] [n234] [INFO] [stdout] [n234] [INFO] [stdout] [n235] [INFO] [stdout] [n235] [INFO] [stdout] [n236] [INFO] [stdout] [n236] [INFO] [stdout] [n237] [INFO] [stdout] [n237] [INFO] [stdout] [n238] [INFO] [stdout] [n238] [INFO] [stdout] [n239] [INFO] [stdout] [n239] [INFO] [stdout] [n240] [INFO] [stdout] [n240] [INFO] [stdout] [n241] [INFO] [stdout] [n241] [INFO] [stdout] [n231] [INFO] [stdout] [n230]

                                                                                                                [INFO] [stdout] [n242] TEXT: "\n\n" [INFO] [stdout] [n243]

                                                                                                                [INFO] [stdout] [n244] [INFO] [stdout] [n245] [INFO] [stdout] [n245] [INFO] [stdout] [n246] [INFO] [stdout] [n246] [INFO] [stdout] [n247] [INFO] [stdout] [n247] [INFO] [stdout] [n248] [INFO] [stdout] [n248] [INFO] [stdout] [n249] [INFO] [stdout] [n249] [INFO] [stdout] [n250] [INFO] [stdout] [n250] [INFO] [stdout] [n251] [INFO] [stdout] [n251] [INFO] [stdout] [n252] [INFO] [stdout] [n252] [INFO] [stdout] [n253] [INFO] [stdout] [n253] [INFO] [stdout] [n254] [INFO] [stdout] [n254] [INFO] [stdout] [n244] [INFO] [stdout] [n243]

                                                                                                                [INFO] [stdout] [n255] TEXT: "\n\n" [INFO] [stdout] [n256]

                                                                                                                [INFO] [stdout] [n257] TEXT: "Although… now your mic is powered. So not only do you have to remember to\nactually hit record on your camera before “acting”, you also have to remember\nto turn on your mic." [INFO] [stdout] [n256]

                                                                                                                [INFO] [stdout] [n258] TEXT: "\n\n" [INFO] [stdout] [n259]

                                                                                                                [INFO] [stdout] [n260] TEXT: "And you might be thinking “Amos, I’m not stupid, I can remember two things”. But\nthat’s two of many things that mean redoing a shoot." [INFO] [stdout] [n259]

                                                                                                                [INFO] [stdout] [n261] TEXT: "\n\n" [INFO] [stdout] [n262]

                                                                                                                [INFO] [stdout] [n263] TEXT: "Some cameras have a screen that rotates around, so you can see it from the side\nkind of, but unless you buy a separate monitor, you have no way to check you’re\nactually in frame." [INFO] [stdout] [n262]

                                                                                                                [INFO] [stdout] [n264] TEXT: "\n\n" [INFO] [stdout] [n265]

                                                                                                                [INFO] [stdout] [n266] TEXT: "If you’re doing green screen, and you’re slightly off center, it’s not a huge\nissue: if your keying is good enough, you can just re-center yourself\n(emotionally, too)." [INFO] [stdout] [n265]

                                                                                                                [INFO] [stdout] [n267] TEXT: "\n\n" [INFO] [stdout] [n268]

                                                                                                                [INFO] [stdout] [n269] TEXT: "But yeah, here’s a list of reasons I’ve had to reshoot over the past few years:" [INFO] [stdout] [n268]

                                                                                                                [INFO] [stdout] [n270] TEXT: "\n\n" [INFO] [stdout] [n271]
                                                                                                                  [INFO] [stdout] [n272]
                                                                                                                • [INFO] [stdout] [n273] TEXT: "The camera wasn’t on" [INFO] [stdout] [n272]
                                                                                                                • [INFO] [stdout] [n274] TEXT: "\n" [INFO] [stdout] [n275]
                                                                                                                • [INFO] [stdout] [n276] TEXT: "The external mic wasn’t on" [INFO] [stdout] [n275]
                                                                                                                • [INFO] [stdout] [n277] TEXT: "\n" [INFO] [stdout] [n278]
                                                                                                                • [INFO] [stdout] [n279] TEXT: "The external mic was on, but wasn’t being recorded properly" [INFO] [stdout] [n278]
                                                                                                                • [INFO] [stdout] [n280] TEXT: "\n" [INFO] [stdout] [n281]
                                                                                                                • [INFO] [stdout] [n282] TEXT: "The SD card ran out of space (classic!) so the back half of the recording dropped" [INFO] [stdout] [n281]
                                                                                                                • [INFO] [stdout] [n283] TEXT: "\n" [INFO] [stdout] [n284]
                                                                                                                • [INFO] [stdout] [n285] TEXT: "The recording stopped for some other miraculous reason" [INFO] [stdout] [n284]
                                                                                                                • [INFO] [stdout] [n286] TEXT: "\n" [INFO] [stdout] [n287]
                                                                                                                • [INFO] [stdout] [n288] TEXT: "The camera ran out of battery" [INFO] [stdout] [n287]
                                                                                                                • [INFO] [stdout] [n289] TEXT: "\n" [INFO] [stdout] [n290]
                                                                                                                • [INFO] [stdout] [n291] TEXT: "The mic ran out of battery" [INFO] [stdout] [n290]
                                                                                                                • [INFO] [stdout] [n292] TEXT: "\n" [INFO] [stdout] [n293]
                                                                                                                • [INFO] [stdout] [n294] TEXT: "The mic " [INFO] [stdout] [n295] [INFO] [stdout] [n296] TEXT: "receiver" [INFO] [stdout] [n295] [INFO] [stdout] [n297] TEXT: " ran out of battery" [INFO] [stdout] [n293]
                                                                                                                • [INFO] [stdout] [n298] TEXT: "\n" [INFO] [stdout] [n299]
                                                                                                                • [INFO] [stdout] [n300] TEXT: "The audio clipped (more on that latter)" [INFO] [stdout] [n299]
                                                                                                                • [INFO] [stdout] [n301] TEXT: "\n" [INFO] [stdout] [n302]
                                                                                                                • [INFO] [stdout] [n303] TEXT: "I was off frame" [INFO] [stdout] [n302]
                                                                                                                • [INFO] [stdout] [n304] TEXT: "\n" [INFO] [stdout] [n305]
                                                                                                                • [INFO] [stdout] [n306] TEXT: "There was something wrong with my appearance, on a “can’t take your eyes off\nof it” level. Whatever your thoughts on the final product, consider that the\ntakes I threw away were " [INFO] [stdout] [n307] [INFO] [stdout] [n308] TEXT: "worse" [INFO] [stdout] [n307] [INFO] [stdout] [n309] TEXT: "." [INFO] [stdout] [n305]
                                                                                                                • [INFO] [stdout] [n310] TEXT: "\n" [INFO] [stdout] [n311]
                                                                                                                • [INFO] [stdout] [n312] TEXT: "The tablet I use as teleprompter ran out of battery" [INFO] [stdout] [n311]
                                                                                                                • [INFO] [stdout] [n313] TEXT: "\n" [INFO] [stdout] [n314]
                                                                                                                • [INFO] [stdout] [n315] TEXT: "Construction started in the streets" [INFO] [stdout] [n314]
                                                                                                                • [INFO] [stdout] [n316] TEXT: "\n" [INFO] [stdout] [n317]
                                                                                                                • [INFO] [stdout] [n318] TEXT: "Someone is home early" [INFO] [stdout] [n317]
                                                                                                                • [INFO] [stdout] [n319] TEXT: "\n" [INFO] [stdout] [n320]
                                                                                                                • [INFO] [stdout] [n321] TEXT: "Someone will be home late (so I have to cook)" [INFO] [stdout] [n320]
                                                                                                                • [INFO] [stdout] [n322] TEXT: "\n" [INFO] [stdout] [n323]
                                                                                                                • [INFO] [stdout] [n324] TEXT: "A cat is feeling particularly vocal" [INFO] [stdout] [n323]
                                                                                                                • [INFO] [stdout] [n325] TEXT: "\n" [INFO] [stdout] [n326]
                                                                                                                • [INFO] [stdout] [n327] TEXT: "In the middle of shooting, something I said out loud sounded odd, so I took a minute to Google it, and it turns out the second half of the script is based\non a factual error I made during research." [INFO] [stdout] [n326]
                                                                                                                • [INFO] [stdout] [n328] TEXT: "\n" [INFO] [stdout] [n329]
                                                                                                                • [INFO] [stdout] [n330] TEXT: "There’s flickering (more on that later)" [INFO] [stdout] [n329]
                                                                                                                • [INFO] [stdout] [n331] TEXT: "\n" [INFO] [stdout] [n332]
                                                                                                                • [INFO] [stdout] [n333] TEXT: "There’s a background noise (fans, etc.) I didn’t notice and that I " [INFO] [stdout] [n334] [INFO] [stdout] [n335] TEXT: "could" [INFO] [stdout] [n334] [INFO] [stdout] [n336] TEXT: "\nremove, at great cost to the quality of the voice take." [INFO] [stdout] [n332]
                                                                                                                • [INFO] [stdout] [n337] TEXT: "\n" [INFO] [stdout] [n271]
                                                                                                                [INFO] [stdout] [n338] TEXT: "\n" [INFO] [stdout] [n339]

                                                                                                                [INFO] [stdout] [n340] TEXT: "I could go on." [INFO] [stdout] [n339]

                                                                                                                [INFO] [stdout] [n341] TEXT: "\n\n" [INFO] [stdout] [n342]

                                                                                                                [INFO] [stdout] [n343] TEXT: "The name of the game is simple: we’re trying to eliminate " [INFO] [stdout] [n344] [INFO] [stdout] [n345] TEXT: "entire classes of\nproblems" [INFO] [stdout] [n344] [INFO] [stdout] [n346] TEXT: "." [INFO] [stdout] [n342]

                                                                                                                [INFO] [stdout] [n347] TEXT: "\n\n" [INFO] [stdout] [n348]

                                                                                                                [INFO] [stdout] [n349] TEXT: "Batteries run out? Use power adapters. Your camera only takes batteries? No it\ndoesn’t: dummy batteries exist." [INFO] [stdout] [n348]

                                                                                                                [INFO] [stdout] [n350] TEXT: "\n\n" [INFO] [stdout] [n351]

                                                                                                                [INFO] [stdout] [n352] [INFO] [stdout] [n353] [INFO] [stdout] [n353] [INFO] [stdout] [n354] [INFO] [stdout] [n354] [INFO] [stdout] [n355] [INFO] [stdout] [n355] [INFO] [stdout] [n356] [INFO] [stdout] [n356] [INFO] [stdout] [n357] [INFO] [stdout] [n357] [INFO] [stdout] [n358] [INFO] [stdout] [n358] [INFO] [stdout] [n359] [INFO] [stdout] [n359] [INFO] [stdout] [n360] [INFO] [stdout] [n360] [INFO] [stdout] [n361] [INFO] [stdout] [n361] [INFO] [stdout] [n362] [INFO] [stdout] [n362] [INFO] [stdout] [n352] [INFO] [stdout] [n351]

                                                                                                                [INFO] [stdout] [n363] TEXT: "\n\n" [INFO] [stdout] [n364]

                                                                                                                [INFO] [stdout] [n365] TEXT: "They’re battery-shaped blocks with a cable coming out, that goes into a power\nsupply. Just don’t forget to turn off your camera when you’re done." [INFO] [stdout] [n364]

                                                                                                                [INFO] [stdout] [n366] TEXT: "\n\n" [INFO] [stdout] [n367] [INFO] [stdout] [n368]

                                                                                                                [INFO] [stdout] [n369] TEXT: "Microphones & mic arms" [INFO] [stdout] [n368]

                                                                                                                [INFO] [stdout] [n367]
                                                                                                                [INFO] [stdout] [n370] TEXT: "\n" [INFO] [stdout] [n371]

                                                                                                                [INFO] [stdout] [n372] TEXT: "Some shotgun mics like the " [INFO] [stdout] [n373] [INFO] [stdout] [n374] TEXT: "RODE\nNTG4+" [INFO] [stdout] [n373] [INFO] [stdout] [n375] TEXT: ", (~250EUR) (no I’m not\nsponsored by RODE I just dig their stuff) can be powered both by battery (for\nnomad use) or USB-C cable: that’s ideal!" [INFO] [stdout] [n371]

                                                                                                                [INFO] [stdout] [n376] TEXT: "\n\n" [INFO] [stdout] [n377]

                                                                                                                [INFO] [stdout] [n378] [INFO] [stdout] [n379] [INFO] [stdout] [n379] [INFO] [stdout] [n380] [INFO] [stdout] [n380] [INFO] [stdout] [n381] [INFO] [stdout] [n381] [INFO] [stdout] [n382] [INFO] [stdout] [n382] [INFO] [stdout] [n383] [INFO] [stdout] [n383] [INFO] [stdout] [n384] [INFO] [stdout] [n384] [INFO] [stdout] [n385] [INFO] [stdout] [n385] [INFO] [stdout] [n386] [INFO] [stdout] [n386] [INFO] [stdout] [n387] [INFO] [stdout] [n387] [INFO] [stdout] [n388] [INFO] [stdout] [n388] [INFO] [stdout] [n378] [INFO] [stdout] [n377]

                                                                                                                [INFO] [stdout] [n389] TEXT: "\n\n" [INFO] [stdout] [n390]

                                                                                                                [INFO] [stdout] [n391] TEXT: "Some lavalier wireless transmitter/receiver packs like the " [INFO] [stdout] [n392] [INFO] [stdout] [n393] TEXT: "RODE Wireless GO\nII" [INFO] [stdout] [n392] [INFO] [stdout] [n394] TEXT: " are " [INFO] [stdout] [n395] [INFO] [stdout] [n396] TEXT: "very good" [INFO] [stdout] [n395] [INFO] [stdout] [n397] TEXT: "\nwith reporting battery levels, and last hundreds of hours: just charge them\nbefore a shoot, if you run out of batteries, you probably need to recharge\nas a human, too." [INFO] [stdout] [n390]

                                                                                                                [INFO] [stdout] [n398] TEXT: "\n\n" [INFO] [stdout] [n399]

                                                                                                                [INFO] [stdout] [n400] [INFO] [stdout] [n401] [INFO] [stdout] [n401] [INFO] [stdout] [n402] [INFO] [stdout] [n402] [INFO] [stdout] [n403] [INFO] [stdout] [n403] [INFO] [stdout] [n404] [INFO] [stdout] [n404] [INFO] [stdout] [n405] [INFO] [stdout] [n405] [INFO] [stdout] [n406] [INFO] [stdout] [n406] [INFO] [stdout] [n407] [INFO] [stdout] [n407] [INFO] [stdout] [n408] [INFO] [stdout] [n408] [INFO] [stdout] [n409] [INFO] [stdout] [n409] [INFO] [stdout] [n410] [INFO] [stdout] [n410] [INFO] [stdout] [n400] [INFO] [stdout] [n399]

                                                                                                                [INFO] [stdout] [n411] TEXT: "\n\n" [INFO] [stdout] [n412]

                                                                                                                [INFO] [stdout] [n413] TEXT: "(Also, they have backup recordings on the transmitter if the connection drops\nout. I would trust those with my life.)" [INFO] [stdout] [n412]

                                                                                                                [INFO] [stdout] [n414] TEXT: "\n\n" [INFO] [stdout] [n415]

                                                                                                                [INFO] [stdout] [n416] TEXT: "But more to the point: if you’re doing a face cam (the topic of this article\nafter all), why are you even looking at all that? Lav mics are great for the\noutdoors, or noisy environments where you need to get as close as possible to\nthe chest to isolate individual voices from the overall noise (here’s a " [INFO] [stdout] [n417] [INFO] [stdout] [n418] TEXT: "guide\non how to mic up someone btw" [INFO] [stdout] [n417] [INFO] [stdout] [n419] TEXT: "),\nbut pointless if you’re sitting in your home office or garage." [INFO] [stdout] [n415]

                                                                                                                [INFO] [stdout] [n420] TEXT: "\n\n" [INFO] [stdout] [n421]

                                                                                                                [INFO] [stdout] [n422] TEXT: "Similarly, shotgun mics let you aim at a specific area, but they work best in\noutdoor/large spaces: a small room will have tons of reflections unless you\ntreat it properly, which " [INFO] [stdout] [n423] [INFO] [stdout] [n424] TEXT: "will" [INFO] [stdout] [n423] [INFO] [stdout] [n425] TEXT: " make your budget big and round in record time\n(unless you go DIY, I won’t talk about that part much as it’s the one I explored\nthe least)." [INFO] [stdout] [n421]

                                                                                                                [INFO] [stdout] [n426] TEXT: "\n\n" [INFO] [stdout] [n427]

                                                                                                                [INFO] [stdout] [n428] TEXT: "Using the “right kind of hardware” will make a big difference than moving across\nprice ranges, and that is, of course, a lesson I learned after buying the\nmid-range thing for every " [INFO] [stdout] [n429] [INFO] [stdout] [n430] TEXT: "wrong" [INFO] [stdout] [n429] [INFO] [stdout] [n431] TEXT: " kind of hardware." [INFO] [stdout] [n427]

                                                                                                                [INFO] [stdout] [n432] TEXT: "\n\n" [INFO] [stdout] [n433]

                                                                                                                [INFO] [stdout] [n434] TEXT: "For example, I recorded my early videos with a " [INFO] [stdout] [n435] [INFO] [stdout] [n436] TEXT: "RODE\nNT1-A" [INFO] [stdout] [n435] [INFO] [stdout] [n437] TEXT: " (~200EUR). Decent\nmic to slap in a homemade mic booth, but " [INFO] [stdout] [n438] [INFO] [stdout] [n439] TEXT: "terrible" [INFO] [stdout] [n438] [INFO] [stdout] [n440] TEXT: " when your entire room is\nmostly naked hard surfaces (walls, floor, ceiling, desks, screens, etc.). It\n" [INFO] [stdout] [n441] [INFO] [stdout] [n442] TEXT: "will" [INFO] [stdout] [n441] [INFO] [stdout] [n443] TEXT: " capture all the reflections, and let me tell you, that’s a hard one to\nfix in post. There’s de-reverb plug-ins (iZotope RX10 has one) but they\nabsolutely murder the recording." [INFO] [stdout] [n433]

                                                                                                                [INFO] [stdout] [n444] TEXT: "\n\n" [INFO] [stdout] [n445]

                                                                                                                [INFO] [stdout] [n446] TEXT: "Remember: “garbage in, garbage out”. It’s much easier to " [INFO] [stdout] [n447] [INFO] [stdout] [n448] TEXT: "not" [INFO] [stdout] [n447] [INFO] [stdout] [n449] TEXT: " record crap in\nthe first place, than to fix it later." [INFO] [stdout] [n445]

                                                                                                                [INFO] [stdout] [n450] TEXT: "\n\n" [INFO] [stdout] [n451]

                                                                                                                [INFO] [stdout] [n452] TEXT: "I eventually graduated to a " [INFO] [stdout] [n453] [INFO] [stdout] [n454] TEXT: "RODE\nPodMic" [INFO] [stdout] [n453] [INFO] [stdout] [n455] TEXT: " (~100EUR), still with\nXLR to a USB audio interface, half the price but with a “tight cardioid polar\npattern offering superior room noise rejection”. What does this mean? It means\nyou can get away with those naked flat surfaces a lot easier. Should you still\nslap a couch in the room where you record? Probably! YouTubers are not doing\nit for the aesthetic." [INFO] [stdout] [n451]

                                                                                                                [INFO] [stdout] [n456] TEXT: "\n\n" [INFO] [stdout] [n457]

                                                                                                                [INFO] [stdout] [n458] [INFO] [stdout] [n459] [INFO] [stdout] [n459] [INFO] [stdout] [n460] [INFO] [stdout] [n460] [INFO] [stdout] [n461] [INFO] [stdout] [n461] [INFO] [stdout] [n462] [INFO] [stdout] [n462] [INFO] [stdout] [n463] [INFO] [stdout] [n463] [INFO] [stdout] [n464] [INFO] [stdout] [n464] [INFO] [stdout] [n465] [INFO] [stdout] [n465] [INFO] [stdout] [n466] [INFO] [stdout] [n466] [INFO] [stdout] [n467] [INFO] [stdout] [n467] [INFO] [stdout] [n468] [INFO] [stdout] [n468] [INFO] [stdout] [n458] [INFO] [stdout] [n457]

                                                                                                                [INFO] [stdout] [n469] TEXT: "\n\n" [INFO] [stdout] [n470]

                                                                                                                [INFO] [stdout] [n471] TEXT: "I still wasn’t happy with the sound quality I had with the PodMic, and I ended\nup making myself crazy over EQ (equalizer) settings in post, so I finally broke\ndown and got " [INFO] [stdout] [n472] [INFO] [stdout] [n473] TEXT: "the" [INFO] [stdout] [n472] [INFO] [stdout] [n474] TEXT: " YouTuber mic, the " [INFO] [stdout] [n475] [INFO] [stdout] [n476] TEXT: "Shure\nSM7B" [INFO] [stdout] [n475] [INFO] [stdout] [n477] TEXT: "\n(~400EUR), along with a FetHead (which adds “clean gain”), and I used it with\nthe quality USB audio interface I already had." [INFO] [stdout] [n470]

                                                                                                                [INFO] [stdout] [n478] TEXT: "\n\n" [INFO] [stdout] [n479]

                                                                                                                [INFO] [stdout] [n480] [INFO] [stdout] [n481] [INFO] [stdout] [n481] [INFO] [stdout] [n482] [INFO] [stdout] [n482] [INFO] [stdout] [n483] [INFO] [stdout] [n483] [INFO] [stdout] [n484] [INFO] [stdout] [n484] [INFO] [stdout] [n485] [INFO] [stdout] [n485] [INFO] [stdout] [n486] [INFO] [stdout] [n486] [INFO] [stdout] [n487] [INFO] [stdout] [n487] [INFO] [stdout] [n488] [INFO] [stdout] [n488] [INFO] [stdout] [n489] [INFO] [stdout] [n489] [INFO] [stdout] [n490] [INFO] [stdout] [n490] [INFO] [stdout] [n480] [INFO] [stdout] [n479]

                                                                                                                [INFO] [stdout] [n491] TEXT: "\n\n" [INFO] [stdout] [n492]

                                                                                                                [INFO] [stdout] [n493] TEXT: "And you know what? It sounds " [INFO] [stdout] [n494] [INFO] [stdout] [n495] TEXT: "perfect" [INFO] [stdout] [n494] [INFO] [stdout] [n496] TEXT: " out of the box. It’s 4x as expensive as\nthe PodMic, without counting the rest of the audio pipeline you need to make it\nsound proper, but… for the rest of my face-cam-in-home-office life, I will\nnever have to worry about equalizing ever again." [INFO] [stdout] [n492]

                                                                                                                [INFO] [stdout] [n497] TEXT: "\n\n" [INFO] [stdout] [n498]

                                                                                                                [INFO] [stdout] [n499] TEXT: "So, again, it’s not " [INFO] [stdout] [n500] [INFO] [stdout] [n501] TEXT: "just" [INFO] [stdout] [n500] [INFO] [stdout] [n502] TEXT: " a trend that “those stupid YouTubers” follow: and I’m\nsure some folks are using theirs “incorrectly”. It’s just a really solid mic,\nand folks in the trade talk to one another and kinda ended up standardizing on\nit." [INFO] [stdout] [n498]

                                                                                                                [INFO] [stdout] [n503] TEXT: "\n\n" [INFO] [stdout] [n504]

                                                                                                                [INFO] [stdout] [n505] TEXT: "As far as mic arms go, after having a cheap knock-off break " [INFO] [stdout] [n506] [INFO] [stdout] [n507] TEXT: "while I was on\nvacation" [INFO] [stdout] [n506] [INFO] [stdout] [n508] TEXT: ", I went for the " [INFO] [stdout] [n509] [INFO] [stdout] [n510] TEXT: "Rode\nPSA1" [INFO] [stdout] [n509] [INFO] [stdout] [n511] TEXT: " (~90EUR) and haven’t\nlooked back. It clamps on your desk, I had to move it around a bunch of times to\nkeep it off-frame, no issue at all (the metal handle you have to turn is a bit\nharsh on me poor fingers, but ah well)." [INFO] [stdout] [n504]

                                                                                                                [INFO] [stdout] [n512] TEXT: "\n\n" [INFO] [stdout] [n513]

                                                                                                                [INFO] [stdout] [n514] [INFO] [stdout] [n515] [INFO] [stdout] [n515] [INFO] [stdout] [n516] [INFO] [stdout] [n516] [INFO] [stdout] [n517] [INFO] [stdout] [n517] [INFO] [stdout] [n518] [INFO] [stdout] [n518] [INFO] [stdout] [n519] [INFO] [stdout] [n519] [INFO] [stdout] [n520] [INFO] [stdout] [n520] [INFO] [stdout] [n521] [INFO] [stdout] [n521] [INFO] [stdout] [n522] [INFO] [stdout] [n522] [INFO] [stdout] [n523] [INFO] [stdout] [n523] [INFO] [stdout] [n524] [INFO] [stdout] [n524] [INFO] [stdout] [n514] [INFO] [stdout] [n513]

                                                                                                                [INFO] [stdout] [n525] TEXT: "\n\n" [INFO] [stdout] [n526] [INFO] [stdout] [n527]

                                                                                                                [INFO] [stdout] [n528] TEXT: "Audio interfaces & 32-bit floating-point" [INFO] [stdout] [n527]

                                                                                                                [INFO] [stdout] [n526]
                                                                                                                [INFO] [stdout] [n529] TEXT: "\n" [INFO] [stdout] [n530]

                                                                                                                [INFO] [stdout] [n531] TEXT: "If you’re used to microphones in the “voice call” context, you’re using to 3.5mm\njack (aka mini-jack), or bluetooth." [INFO] [stdout] [n530]

                                                                                                                [INFO] [stdout] [n532] TEXT: "\n\n" [INFO] [stdout] [n533]

                                                                                                                [INFO] [stdout] [n534] TEXT: "None of that here. We’re talking either USB directly, or XLR." [INFO] [stdout] [n533]

                                                                                                                [INFO] [stdout] [n535] TEXT: "\n\n" [INFO] [stdout] [n536]

                                                                                                                [INFO] [stdout] [n537] TEXT: "A mic having a built-in USB interface " [INFO] [stdout] [n538] [INFO] [stdout] [n539] TEXT: "could" [INFO] [stdout] [n538] [INFO] [stdout] [n540] TEXT: " be a sign that it’s cheap (in a\nbad way), I’m thinking at Blue Yeti-style mics for example, but these days\nthere’s excellent all-in-one packages, like the " [INFO] [stdout] [n541] [INFO] [stdout] [n542] TEXT: "Rode\nNT1-5" [INFO] [stdout] [n541] [INFO] [stdout] [n543] TEXT: ",\nthat offer XLR (for when it’s one of many mics going into a mixer) " [INFO] [stdout] [n544] [INFO] [stdout] [n545] TEXT: "and" [INFO] [stdout] [n544] [INFO] [stdout] [n546] TEXT: " USB,\nwith a “world-first 32-bit float digital output”." [INFO] [stdout] [n536]

                                                                                                                [INFO] [stdout] [n547] TEXT: "\n\n" [INFO] [stdout] [n548]

                                                                                                                [INFO] [stdout] [n549] TEXT: "What does that mean? That means you never have to worry about clipping ever\nagain." [INFO] [stdout] [n548]

                                                                                                                [INFO] [stdout] [n550] TEXT: "\n\n" [INFO] [stdout] [n551]

                                                                                                                [INFO] [stdout] [n552] TEXT: "When recording audio, you can adjust the “gain” of your mic. If you set it too\nlow, you’ll have to amplify in post, and you’ll amplify any background noise\ncoming from the entire system with it." [INFO] [stdout] [n551]

                                                                                                                [INFO] [stdout] [n553] TEXT: "\n\n" [INFO] [stdout] [n554]

                                                                                                                [INFO] [stdout] [n555] TEXT: "Also, if it’s only using, say, 10% of the amplitude available, then you’re only\nusing 10% of the precision available. For 16-bit integer sampling, instead of\n65K different values, that’s 6K values." [INFO] [stdout] [n554]

                                                                                                                [INFO] [stdout] [n556] TEXT: "\n\n" [INFO] [stdout] [n557]

                                                                                                                [INFO] [stdout] [n558] TEXT: "But if you set the gain " [INFO] [stdout] [n559] [INFO] [stdout] [n560] TEXT: "too high" [INFO] [stdout] [n559] [INFO] [stdout] [n561] TEXT: ", that’s not good either. It only takes one\nplosive (“p”/“b” sounds etc.) or a little enthusiasm to exceed the range of\nvalues it can represent: the amplitude is " [INFO] [stdout] [n562] [INFO] [stdout] [n563] TEXT: "more" [INFO] [stdout] [n562] [INFO] [stdout] [n564] TEXT: " than 65536 (or 2**24 for\n24-bit, etc.) and.. since there’s no way to represent that, it’s “clamped” at\nthe max value, and what should be a nice wave peak is a flat edge instead." [INFO] [stdout] [n557]

                                                                                                                [INFO] [stdout] [n565] TEXT: "\n\n" [INFO] [stdout] [n566]

                                                                                                                [INFO] [stdout] [n567] [INFO] [stdout] [n568] [INFO] [stdout] [n568] [INFO] [stdout] [n569] [INFO] [stdout] [n569] [INFO] [stdout] [n570] [INFO] [stdout] [n570] [INFO] [stdout] [n571] [INFO] [stdout] [n571] [INFO] [stdout] [n572] [INFO] [stdout] [n572] [INFO] [stdout] [n573] [INFO] [stdout] [n573] [INFO] [stdout] [n574] [INFO] [stdout] [n574] [INFO] [stdout] [n575] [INFO] [stdout] [n575] [INFO] [stdout] [n576] [INFO] [stdout] [n576] [INFO] [stdout] [n577] [INFO] [stdout] [n577] [INFO] [stdout] [n567] [INFO] [stdout] [n566]

                                                                                                                [INFO] [stdout] [n578] TEXT: "\n\n" [INFO] [stdout] [n579]

                                                                                                                [INFO] [stdout] [n580] TEXT: "That’s called “clipping”." [INFO] [stdout] [n579]

                                                                                                                [INFO] [stdout] [n581] TEXT: "\n\n" [INFO] [stdout] [n582]

                                                                                                                [INFO] [stdout] [n583] TEXT: "You can’t recover from that. Once that happens in recording, the take is ruined." [INFO] [stdout] [n582]

                                                                                                                [INFO] [stdout] [n584] TEXT: "\n\n" [INFO] [stdout] [n585]

                                                                                                                [INFO] [stdout] [n586] TEXT: "This is why professionals will often have backups: some productions will mic\npeople up with " [INFO] [stdout] [n587] [INFO] [stdout] [n588] TEXT: "two" [INFO] [stdout] [n587] [INFO] [stdout] [n589] TEXT: " lavs, in case one fails." [INFO] [stdout] [n585]

                                                                                                                [INFO] [stdout] [n590] TEXT: "\n\n" [INFO] [stdout] [n591]

                                                                                                                [INFO] [stdout] [n592] TEXT: "Similarly, the " [INFO] [stdout] [n593] [INFO] [stdout] [n594] TEXT: "RODE Wireless GO\nII" [INFO] [stdout] [n593] [INFO] [stdout] [n595] TEXT: " allow recording\nstereo files, where the second channel is the exact same mic, but with\n-8/-12/-20dB gain." [INFO] [stdout] [n591]

                                                                                                                [INFO] [stdout] [n596] TEXT: "\n\n" [INFO] [stdout] [n597]

                                                                                                                [INFO] [stdout] [n598] TEXT: "That way, even if the first channel clips, for that portion of the audio, you\ncan salvage the take by using the second channel. Precision will suffer, but\nit’s much better than the alternative." [INFO] [stdout] [n597]

                                                                                                                [INFO] [stdout] [n599] TEXT: "\n\n" [INFO] [stdout] [n600]

                                                                                                                [INFO] [stdout] [n601] TEXT: "Floating-point sample formats have been around for as long as we’ve been able to\nafford them (we did 8-bit PCM back in the days! I know, I’m the oldest\n33-year-old you know), but mostly as an intermediate representation, as far as I\ncan tell?" [INFO] [stdout] [n600]

                                                                                                                [INFO] [stdout] [n602] TEXT: "\n\n" [INFO] [stdout] [n603]

                                                                                                                [INFO] [stdout] [n604] TEXT: "When producing a track, sometimes plug-ins can make the waveform a bit larger\nthan expected, and sometimes it’s easier to just “scale it back down” to a\nreasonable amplitude before exporting, than to go mess with plug-in settings\nseveral stages earlier in the pipeline." [INFO] [stdout] [n603]

                                                                                                                [INFO] [stdout] [n605] TEXT: "\n\n" [INFO] [stdout] [n606]

                                                                                                                [INFO] [stdout] [n607] TEXT: "However, " [INFO] [stdout] [n608] [INFO] [stdout] [n609] TEXT: "recording" [INFO] [stdout] [n608] [INFO] [stdout] [n610] TEXT: " in 32-bit floating-point audio is relatively new, at least\nas far as “plugging a USB thing into your computer” goes. There’s been portable\nfloat32 recorders for a while, and I’m sure the real pros have their own product\nlines." [INFO] [stdout] [n606]

                                                                                                                [INFO] [stdout] [n611] TEXT: "\n\n" [INFO] [stdout] [n612]

                                                                                                                [INFO] [stdout] [n613] TEXT: "What this means for a mic like the NT1-5, is that " [INFO] [stdout] [n614] [INFO] [stdout] [n615] TEXT: "you cannot mess up your gain\nsetting" [INFO] [stdout] [n614] [INFO] [stdout] [n616] TEXT: ". You can set it to whatever feels good, and if you got it slightly\nwrong in either direction, no big deal." [INFO] [stdout] [n612]

                                                                                                                [INFO] [stdout] [n617] TEXT: "\n\n" [INFO] [stdout] [n618]

                                                                                                                [INFO] [stdout] [n619] TEXT: "An IEEE-754 32-bit floating point has " [INFO] [stdout] [n620] [INFO] [stdout] [n621] TEXT: "a 23-bit\nsignificand" [INFO] [stdout] [n620] [INFO] [stdout] [n622] TEXT: " (which you, like me, may have\nknown as “mantissa”), which is the long way of saying that it’s " [INFO] [stdout] [n623] [INFO] [stdout] [n624] TEXT: "almost as good" [INFO] [stdout] [n623] [INFO] [stdout] [n625] TEXT: "\nas 24-bit integer samples (unless the exponent goes to the extremes, which would\nmake neighbor values very distant), and much better than 16-bit integer samples\nat any rate." [INFO] [stdout] [n618]

                                                                                                                [INFO] [stdout] [n626] TEXT: "\n\n" [INFO] [stdout] [n627]

                                                                                                                [INFO] [stdout] [n628] TEXT: "It also takes up more space, but the storage space for your " [INFO] [stdout] [n629] [INFO] [stdout] [n630] TEXT: "audio tracks" [INFO] [stdout] [n629] [INFO] [stdout] [n631] TEXT: " is\nreally not a concern when you get into video." [INFO] [stdout] [n627]

                                                                                                                [INFO] [stdout] [n632] TEXT: "\n\n" [INFO] [stdout] [n633]

                                                                                                                [INFO] [stdout] [n634] TEXT: "The first USB audio interface I bought specifically for video-making was the\n" [INFO] [stdout] [n635] [INFO] [stdout] [n636] TEXT: "Focusrite Scarlett 2i2 4th Gen" [INFO] [stdout] [n635] [INFO] [stdout] [n637] TEXT: ",\nbecause it’s small, pretty, and also, famously, just good." [INFO] [stdout] [n633]

                                                                                                                [INFO] [stdout] [n638] TEXT: "\n\n" [INFO] [stdout] [n639]

                                                                                                                [INFO] [stdout] [n640] [INFO] [stdout] [n641] [INFO] [stdout] [n641] [INFO] [stdout] [n642] [INFO] [stdout] [n642] [INFO] [stdout] [n643] [INFO] [stdout] [n643] [INFO] [stdout] [n644] [INFO] [stdout] [n644] [INFO] [stdout] [n645] [INFO] [stdout] [n645] [INFO] [stdout] [n646] [INFO] [stdout] [n646] [INFO] [stdout] [n647] [INFO] [stdout] [n647] [INFO] [stdout] [n648] [INFO] [stdout] [n648] [INFO] [stdout] [n649] [INFO] [stdout] [n649] [INFO] [stdout] [n650] [INFO] [stdout] [n650] [INFO] [stdout] [n640] [INFO] [stdout] [n639]

                                                                                                                [INFO] [stdout] [n651] TEXT: "\n\n" [INFO] [stdout] [n652]
                                                                                                                [INFO] [stdout] [n653] TEXT: "\n" [INFO] [stdout] [n654]
                                                                                                                [INFO] [stdout] [n655] TEXT: "\n " [INFO] [stdout] [n656] [INFO] [stdout] [n657] [INFO] [stdout] [n657] [INFO] [stdout] [n658] [INFO] [stdout] [n658] [INFO] [stdout] [n659] [INFO] [stdout] [n659] [INFO] [stdout] [n660] [INFO] [stdout] [n660] [INFO] [stdout] [n661] [INFO] [stdout] [n661] [INFO] [stdout] [n662] [INFO] [stdout] [n662] [INFO] [stdout] [n663] [INFO] [stdout] [n663] [INFO] [stdout] [n664] [INFO] [stdout] [n664] [INFO] [stdout] [n665] [INFO] [stdout] [n665] [INFO] [stdout] [n666] [INFO] [stdout] [n666] [INFO] [stdout] [n656] [INFO] [stdout] [n667] TEXT: "\n" [INFO] [stdout] [n654]
                                                                                                                [INFO] [stdout] [n668] TEXT: "\n" [INFO] [stdout] [n669]
                                                                                                                [INFO] [stdout] [n670] TEXT: "\n" [INFO] [stdout] [n671]

                                                                                                                [INFO] [stdout] [n672] TEXT: "At this point you may wonder: were those past purchases mostly vibes-based?" [INFO] [stdout] [n671]

                                                                                                                [INFO] [stdout] [n673] TEXT: "\n\n" [INFO] [stdout] [n674]

                                                                                                                [INFO] [stdout] [n675] TEXT: "Well, yeah! It’s all trial and error. You can spend days and nights reading\nreviews, you’ll always find reasons " [INFO] [stdout] [n676] [INFO] [stdout] [n677] TEXT: "not" [INFO] [stdout] [n676] [INFO] [stdout] [n678] TEXT: " to buy something. In the end, I\nusually went with someone’s recommendation, which makes me feel better about writing this article." [INFO] [stdout] [n674]

                                                                                                                [INFO] [stdout] [n679] TEXT: "\n\n" [INFO] [stdout] [n669]
                                                                                                                [INFO] [stdout] [n680] TEXT: "\n" [INFO] [stdout] [n652]
                                                                                                                [INFO] [stdout] [n681]

                                                                                                                [INFO] [stdout] [n682] TEXT: "I recently migrated from the Scarlett to a " [INFO] [stdout] [n683] [INFO] [stdout] [n684] TEXT: "Zoom\nUAC-232" [INFO] [stdout] [n683] [INFO] [stdout] [n685] TEXT: "\nspecifically for 32-bit float support, for " [INFO] [stdout] [n686] [INFO] [stdout] [n687] TEXT: "any" [INFO] [stdout] [n686] [INFO] [stdout] [n688] TEXT: " mic that outputs XLR." [INFO] [stdout] [n681]

                                                                                                                [INFO] [stdout] [n689] TEXT: "\n\n" [INFO] [stdout] [n690]

                                                                                                                [INFO] [stdout] [n691] [INFO] [stdout] [n692] [INFO] [stdout] [n692] [INFO] [stdout] [n693] [INFO] [stdout] [n693] [INFO] [stdout] [n694] [INFO] [stdout] [n694] [INFO] [stdout] [n695] [INFO] [stdout] [n695] [INFO] [stdout] [n696] [INFO] [stdout] [n696] [INFO] [stdout] [n697] [INFO] [stdout] [n697] [INFO] [stdout] [n698] [INFO] [stdout] [n698] [INFO] [stdout] [n699] [INFO] [stdout] [n699] [INFO] [stdout] [n700] [INFO] [stdout] [n700] [INFO] [stdout] [n701] [INFO] [stdout] [n701] [INFO] [stdout] [n691] [INFO] [stdout] [n690]

                                                                                                                [INFO] [stdout] [n702] TEXT: "\n\n" [INFO] [stdout] [n703]

                                                                                                                [INFO] [stdout] [n704] TEXT: "The way it works is actually really neat! They “simply” have two ADC\n(analog-digital converters) set to two different input gains, and they switch\ndynamically between the two to get the best low-floor-noise/no-clipping\ncompromise." [INFO] [stdout] [n703]

                                                                                                                [INFO] [stdout] [n705] TEXT: "\n\n" [INFO] [stdout] [n706]

                                                                                                                [INFO] [stdout] [n707] TEXT: "The " [INFO] [stdout] [n708] [INFO] [stdout] [n709] TEXT: "Zoom UAC-232 manual" [INFO] [stdout] [n708] [INFO] [stdout] [n710] TEXT: " goes into\ndetails, should you be curious." [INFO] [stdout] [n706]

                                                                                                                [INFO] [stdout] [n711] TEXT: "\n\n" [INFO] [stdout] [n712]

                                                                                                                [INFO] [stdout] [n713] TEXT: "Note that after buying one of these, you still have to set up all the software\nproperly, otherwise you’re " [INFO] [stdout] [n714] [INFO] [stdout] [n715] TEXT: "still" [INFO] [stdout] [n714] [INFO] [stdout] [n716] TEXT: " not safe from clipping. More on that later." [INFO] [stdout] [n712]

                                                                                                                [INFO] [stdout] [n717] TEXT: "\n\n" [INFO] [stdout] [n718]

                                                                                                                [INFO] [stdout] [n719] TEXT: "As far as “portable setups” go, I got a " [INFO] [stdout] [n720] [INFO] [stdout] [n721] TEXT: "Zoom H4N Pro\nBlack" [INFO] [stdout] [n720] [INFO] [stdout] [n722] TEXT: "\na while ago: I liked the versatility, very good built-in XY microphones, you can plug your lav mic in there, or use one or two of the XLR inputs." [INFO] [stdout] [n718]

                                                                                                                [INFO] [stdout] [n723] TEXT: "\n\n" [INFO] [stdout] [n724]

                                                                                                                [INFO] [stdout] [n725] [INFO] [stdout] [n726] [INFO] [stdout] [n726] [INFO] [stdout] [n727] [INFO] [stdout] [n727] [INFO] [stdout] [n728] [INFO] [stdout] [n728] [INFO] [stdout] [n729] [INFO] [stdout] [n729] [INFO] [stdout] [n730] [INFO] [stdout] [n730] [INFO] [stdout] [n731] [INFO] [stdout] [n731] [INFO] [stdout] [n732] [INFO] [stdout] [n732] [INFO] [stdout] [n733] [INFO] [stdout] [n733] [INFO] [stdout] [n734] [INFO] [stdout] [n734] [INFO] [stdout] [n735] [INFO] [stdout] [n735] [INFO] [stdout] [n725] [INFO] [stdout] [n724]

                                                                                                                [INFO] [stdout] [n736] TEXT: "\n\n" [INFO] [stdout] [n737]

                                                                                                                [INFO] [stdout] [n738] TEXT: "But in practice I use it very little. I can imagine it being very useful for\ninterviewing on-the-go if you don’t have something like the RODE Wireless Go,\nand to record live music sessions and sound effects." [INFO] [stdout] [n737]

                                                                                                                [INFO] [stdout] [n739] TEXT: "\n\n" [INFO] [stdout] [n740]

                                                                                                                [INFO] [stdout] [n741] TEXT: "For usage in a “home office to shoot a face cam” setting though, it’s not what\nyou want. It takes a " [INFO] [stdout] [n742] [INFO] [stdout] [n743] TEXT: "long" [INFO] [stdout] [n742] [INFO] [stdout] [n744] TEXT: " time to boot up, and it’s " [INFO] [stdout] [n745] [INFO] [stdout] [n746] TEXT: "another" [INFO] [stdout] [n745] [INFO] [stdout] [n747] TEXT: " SD card and set\nof batteries to worry about." [INFO] [stdout] [n740]

                                                                                                                [INFO] [stdout] [n748] TEXT: "\n\n" [INFO] [stdout] [n749]

                                                                                                                [INFO] [stdout] [n750] TEXT: "You can use it as a USB audio interface, but at that point you’re tethered, just\nget a regular desktop one. I bought a power cable for it off of Amazon, but I’m\nhonestly too scared to try it, so even with rechargeable AA batteries, it’s a\nhassle to use." [INFO] [stdout] [n749]

                                                                                                                [INFO] [stdout] [n751] TEXT: "\n\n" [INFO] [stdout] [n752]

                                                                                                                [INFO] [stdout] [n753] [INFO] [stdout] [n754] [INFO] [stdout] [n754] [INFO] [stdout] [n755] [INFO] [stdout] [n755] [INFO] [stdout] [n756] [INFO] [stdout] [n756] [INFO] [stdout] [n757] [INFO] [stdout] [n757] [INFO] [stdout] [n758] [INFO] [stdout] [n758] [INFO] [stdout] [n759] [INFO] [stdout] [n759] [INFO] [stdout] [n760] [INFO] [stdout] [n760] [INFO] [stdout] [n761] [INFO] [stdout] [n761] [INFO] [stdout] [n762] [INFO] [stdout] [n762] [INFO] [stdout] [n763] [INFO] [stdout] [n763] [INFO] [stdout] [n753] [INFO] [stdout] [n752]

                                                                                                                [INFO] [stdout] [n764] TEXT: "\n\n" [INFO] [stdout] [n765]

                                                                                                                [INFO] [stdout] [n766] TEXT: "Going around with the H4N’s XY mics and studio headphones plugged in will never\nget old for me though: it’s like listening to the world with a different pair of\nears." [INFO] [stdout] [n765]

                                                                                                                [INFO] [stdout] [n767] TEXT: "\n\n" [INFO] [stdout] [n768]

                                                                                                                [INFO] [stdout] [n769] TEXT: "Re: audio processing, I bought " [INFO] [stdout] [n770] [INFO] [stdout] [n771] TEXT: "iZotope’s RX 10\nStandard" [INFO] [stdout] [n770] [INFO] [stdout] [n772] TEXT: " (439EUR now, I bought it\nwhen it was 33% off in 2022) and use their “Mouth de-click” and “De-plosive”\nplug-ins whenever needed." [INFO] [stdout] [n768]

                                                                                                                [INFO] [stdout] [n773] TEXT: "\n\n" [INFO] [stdout] [n774]

                                                                                                                [INFO] [stdout] [n775] TEXT: "The latter isn’t strictly needed if you take care of mic placement and/or make\njudicious use of a pop filter, but it will save the occasional sound explosion." [INFO] [stdout] [n774]

                                                                                                                [INFO] [stdout] [n776] TEXT: "\n\n" [INFO] [stdout] [n777]

                                                                                                                [INFO] [stdout] [n778] TEXT: "The “Mouth de-click” plug-in is amazing, though. It’s worth the price of the\nentire bundle. Dry mouth is a hard problem to fix: sometimes, no amount of apple\njuice will do, and although I haven’t smoked in 10 months now, however much that\nhas improved my mouth noises has been ruined by a " [INFO] [stdout] [n779] [INFO] [stdout] [n780] TEXT: "second" [INFO] [stdout] [n779] [INFO] [stdout] [n781] TEXT: " 18-month round of\northodontics." [INFO] [stdout] [n777]

                                                                                                                [INFO] [stdout] [n782] TEXT: "\n\n" [INFO] [stdout] [n783]

                                                                                                                [INFO] [stdout] [n784] TEXT: "So. The sound processing will continue until oral health improves." [INFO] [stdout] [n783]

                                                                                                                [INFO] [stdout] [n785] TEXT: "\n\n" [INFO] [stdout] [n786] [INFO] [stdout] [n787]

                                                                                                                [INFO] [stdout] [n788] TEXT: "Studio headphones" [INFO] [stdout] [n787]

                                                                                                                [INFO] [stdout] [n786]
                                                                                                                [INFO] [stdout] [n789] TEXT: "\n" [INFO] [stdout] [n790]

                                                                                                                [INFO] [stdout] [n791] TEXT: "I have the " [INFO] [stdout] [n792] [INFO] [stdout] [n793] TEXT: "250-ohm beyerdynamic DT 770 PRO" [INFO] [stdout] [n792] [INFO] [stdout] [n794] TEXT: ", and I like them." [INFO] [stdout] [n790]

                                                                                                                [INFO] [stdout] [n795] TEXT: "\n\n" [INFO] [stdout] [n796]

                                                                                                                [INFO] [stdout] [n797] [INFO] [stdout] [n798] [INFO] [stdout] [n798] [INFO] [stdout] [n799] [INFO] [stdout] [n799] [INFO] [stdout] [n800] [INFO] [stdout] [n800] [INFO] [stdout] [n801] [INFO] [stdout] [n801] [INFO] [stdout] [n802] [INFO] [stdout] [n802] [INFO] [stdout] [n803] [INFO] [stdout] [n803] [INFO] [stdout] [n804] [INFO] [stdout] [n804] [INFO] [stdout] [n805] [INFO] [stdout] [n805] [INFO] [stdout] [n806] [INFO] [stdout] [n806] [INFO] [stdout] [n807] [INFO] [stdout] [n807] [INFO] [stdout] [n797] [INFO] [stdout] [n796]

                                                                                                                [INFO] [stdout] [n808] TEXT: "\n\n" [INFO] [stdout] [n809]

                                                                                                                [INFO] [stdout] [n810] TEXT: "They’re neutral (important for mixing), comfortable enough to wear for long\nperiods of time (also important), and they came highly recommended by friends\nwho are better at mixing than I am, so that’s enough for me!" [INFO] [stdout] [n809]

                                                                                                                [INFO] [stdout] [n811] TEXT: "\n\n" [INFO] [stdout] [n812]

                                                                                                                [INFO] [stdout] [n813] TEXT: "Before that, I had the classic (vintage?) " [INFO] [stdout] [n814] [INFO] [stdout] [n815] TEXT: "Sennheiser HD-25\n1-II" [INFO] [stdout] [n814] [INFO] [stdout] [n816] TEXT: "." [INFO] [stdout] [n812]

                                                                                                                [INFO] [stdout] [n817] TEXT: "\n\n" [INFO] [stdout] [n818]

                                                                                                                [INFO] [stdout] [n819] [INFO] [stdout] [n820] [INFO] [stdout] [n820] [INFO] [stdout] [n821] [INFO] [stdout] [n821] [INFO] [stdout] [n822] [INFO] [stdout] [n822] [INFO] [stdout] [n823] [INFO] [stdout] [n823] [INFO] [stdout] [n824] [INFO] [stdout] [n824] [INFO] [stdout] [n825] [INFO] [stdout] [n825] [INFO] [stdout] [n826] [INFO] [stdout] [n826] [INFO] [stdout] [n827] [INFO] [stdout] [n827] [INFO] [stdout] [n828] [INFO] [stdout] [n828] [INFO] [stdout] [n829] [INFO] [stdout] [n829] [INFO] [stdout] [n819] [INFO] [stdout] [n818]

                                                                                                                [INFO] [stdout] [n830] TEXT: "\n\n" [INFO] [stdout] [n831]

                                                                                                                [INFO] [stdout] [n832] TEXT: "You could do worse than the HD-25, and I like that almost everything is\nreplaceable (I did replace the ear pads after many years of loyal service), but\nI wouldn’t buy them today unless I was on a very tight budget." [INFO] [stdout] [n831]

                                                                                                                [INFO] [stdout] [n833] TEXT: "\n\n" [INFO] [stdout] [n834]

                                                                                                                [INFO] [stdout] [n835] TEXT: "Before that, I made the mistake of mixing with some Logitech computer speakers:\nthose are not studio speakers, they are extremely biased, what sounds good to\nyou will not sound good to others (and of course, it depends a lot on how the\nroom is set up)." [INFO] [stdout] [n834]

                                                                                                                [INFO] [stdout] [n836] TEXT: "\n\n" [INFO] [stdout] [n837]

                                                                                                                [INFO] [stdout] [n838] TEXT: "In the past, I also mixed with some Sony wireless headphones (WH-1000XM3).\nDon’t. With Bluetooth, some editing software will compensate the delay\n(~200-400ms due to buffering), but only " [INFO] [stdout] [n839] [INFO] [stdout] [n840] TEXT: "some" [INFO] [stdout] [n839] [INFO] [stdout] [n841] TEXT: " time." [INFO] [stdout] [n837]

                                                                                                                [INFO] [stdout] [n842] TEXT: "\n\n" [INFO] [stdout] [n843]

                                                                                                                [INFO] [stdout] [n844] [INFO] [stdout] [n845] [INFO] [stdout] [n845] [INFO] [stdout] [n846] [INFO] [stdout] [n846] [INFO] [stdout] [n847] [INFO] [stdout] [n847] [INFO] [stdout] [n848] [INFO] [stdout] [n848] [INFO] [stdout] [n849] [INFO] [stdout] [n849] [INFO] [stdout] [n850] [INFO] [stdout] [n850] [INFO] [stdout] [n851] [INFO] [stdout] [n851] [INFO] [stdout] [n852] [INFO] [stdout] [n852] [INFO] [stdout] [n853] [INFO] [stdout] [n853] [INFO] [stdout] [n854] [INFO] [stdout] [n854] [INFO] [stdout] [n844] [INFO] [stdout] [n843]

                                                                                                                [INFO] [stdout] [n855] TEXT: "\n\n" [INFO] [stdout] [n856]

                                                                                                                [INFO] [stdout] [n857] TEXT: "I went as far as uploading and publishing a video, and only noticing during the\npremiere (that I watched from a phone or a TV) that the audio and video were out\nof sync." [INFO] [stdout] [n856]

                                                                                                                [INFO] [stdout] [n858] TEXT: "\n\n" [INFO] [stdout] [n859]

                                                                                                                [INFO] [stdout] [n860] TEXT: "The WH-1000XMY family can also be used “plugged”, with mini-jack, but even then,\nthey’re really biased, which isn’t surprised: they’re not " [INFO] [stdout] [n861] [INFO] [stdout] [n862] TEXT: "trying" [INFO] [stdout] [n861] [INFO] [stdout] [n863] TEXT: " to be studio\nheadphones. Their noise-cancelling feature makes taking the subway bearable, but\nthey’re not suitable for mixing work." [INFO] [stdout] [n859]

                                                                                                                [INFO] [stdout] [n864] TEXT: "\n\n" [INFO] [stdout] [n865] [INFO] [stdout] [n866]

                                                                                                                [INFO] [stdout] [n867] TEXT: "Cameras" [INFO] [stdout] [n866]

                                                                                                                [INFO] [stdout] [n865]
                                                                                                                [INFO] [stdout] [n868] TEXT: "\n" [INFO] [stdout] [n869]

                                                                                                                [INFO] [stdout] [n870] TEXT: "When I started out, I had a DSLR lying around: a " [INFO] [stdout] [n871] [INFO] [stdout] [n872] TEXT: "Canon\nEOS-550D" [INFO] [stdout] [n871] [INFO] [stdout] [n873] TEXT: ", which was already old\nat that time (it came out in 2010!)" [INFO] [stdout] [n869]

                                                                                                                [INFO] [stdout] [n874] TEXT: "\n\n" [INFO] [stdout] [n875]

                                                                                                                [INFO] [stdout] [n876] [INFO] [stdout] [n877] [INFO] [stdout] [n877] [INFO] [stdout] [n878] [INFO] [stdout] [n878] [INFO] [stdout] [n879] [INFO] [stdout] [n879] [INFO] [stdout] [n880] [INFO] [stdout] [n880] [INFO] [stdout] [n881] [INFO] [stdout] [n881] [INFO] [stdout] [n882] [INFO] [stdout] [n882] [INFO] [stdout] [n883] [INFO] [stdout] [n883] [INFO] [stdout] [n884] [INFO] [stdout] [n884] [INFO] [stdout] [n885] [INFO] [stdout] [n885] [INFO] [stdout] [n886] [INFO] [stdout] [n886] [INFO] [stdout] [n876] [INFO] [stdout] [n875]

                                                                                                                [INFO] [stdout] [n887] TEXT: "\n\n" [INFO] [stdout] [n888]

                                                                                                                [INFO] [stdout] [n889] [INFO] [stdout] [n890] [INFO] [stdout] [n890] [INFO] [stdout] [n891] [INFO] [stdout] [n891] [INFO] [stdout] [n892] [INFO] [stdout] [n892] [INFO] [stdout] [n893] [INFO] [stdout] [n893] [INFO] [stdout] [n894] [INFO] [stdout] [n894] [INFO] [stdout] [n895] [INFO] [stdout] [n895] [INFO] [stdout] [n896] [INFO] [stdout] [n896] [INFO] [stdout] [n897] [INFO] [stdout] [n897] [INFO] [stdout] [n898] [INFO] [stdout] [n898] [INFO] [stdout] [n899] [INFO] [stdout] [n899] [INFO] [stdout] [n889] [INFO] [stdout] [n888]

                                                                                                                [INFO] [stdout] [n900] TEXT: "\n\n" [INFO] [stdout] [n901]

                                                                                                                [INFO] [stdout] [n902] TEXT: "Although it could record at 1080p@30 (1920x1080 at 30 frames per second) direct\nto SD card, I rapidly looked into switching to a workflow where the camera was\njust a “sensor”, and didn’t take care of any audio processing, video\ncompression, or storage." [INFO] [stdout] [n901]

                                                                                                                [INFO] [stdout] [n903] TEXT: "\n\n" [INFO] [stdout] [n904]

                                                                                                                [INFO] [stdout] [n905] TEXT: "Since I had started out with livestreaming on Twitch, I would’ve loved to just\nset everything up in " [INFO] [stdout] [n906] [INFO] [stdout] [n907] TEXT: "OBS Studio" [INFO] [stdout] [n906] [INFO] [stdout] [n908] TEXT: ", which, for all its\nshortcomings, is still the least worst recording software I’ve used." [INFO] [stdout] [n904]

                                                                                                                [INFO] [stdout] [n909] TEXT: "\n\n" [INFO] [stdout] [n910]

                                                                                                                [INFO] [stdout] [n911] [INFO] [stdout] [n912] [INFO] [stdout] [n912] [INFO] [stdout] [n913] [INFO] [stdout] [n913] [INFO] [stdout] [n914] [INFO] [stdout] [n914] [INFO] [stdout] [n915] [INFO] [stdout] [n915] [INFO] [stdout] [n916] [INFO] [stdout] [n916] [INFO] [stdout] [n917] [INFO] [stdout] [n917] [INFO] [stdout] [n918] [INFO] [stdout] [n918] [INFO] [stdout] [n919] [INFO] [stdout] [n919] [INFO] [stdout] [n920] [INFO] [stdout] [n920] [INFO] [stdout] [n921] [INFO] [stdout] [n921] [INFO] [stdout] [n911] [INFO] [stdout] [n910]

                                                                                                                [INFO] [stdout] [n922] TEXT: "\n\n" [INFO] [stdout] [n923]

                                                                                                                [INFO] [stdout] [n924] TEXT: "So, naturally, I looked into webcams. I thought, maybe I just had shitty webcams\nall this time? Laptop webcams are crap, that’s a given: even the ones on\nMacBook Pro laptops are frankly insulting. And if you pay less than 50EUR for a\nUSB camera well, you get what you " [INFO] [stdout] [n925] [INFO] [stdout] [n926] TEXT: "didn’t" [INFO] [stdout] [n925] [INFO] [stdout] [n927] TEXT: " pay for." [INFO] [stdout] [n923]

                                                                                                                [INFO] [stdout] [n928] TEXT: "\n\n" [INFO] [stdout] [n929]

                                                                                                                [INFO] [stdout] [n930] TEXT: "But it turns out, even if you throw 200EUR at a " [INFO] [stdout] [n931] [INFO] [stdout] [n932] TEXT: "Logitech\nBRIO" [INFO] [stdout] [n931] [INFO] [stdout] [n933] TEXT: "\nfor example, that touts “4K” and “HDR” support, it’s still pretty bad!" [INFO] [stdout] [n929]

                                                                                                                [INFO] [stdout] [n934] TEXT: "\n\n" [INFO] [stdout] [n935]

                                                                                                                [INFO] [stdout] [n936] [INFO] [stdout] [n937] [INFO] [stdout] [n937] [INFO] [stdout] [n938] [INFO] [stdout] [n938] [INFO] [stdout] [n939] [INFO] [stdout] [n939] [INFO] [stdout] [n940] [INFO] [stdout] [n940] [INFO] [stdout] [n941] [INFO] [stdout] [n941] [INFO] [stdout] [n942] [INFO] [stdout] [n942] [INFO] [stdout] [n943] [INFO] [stdout] [n943] [INFO] [stdout] [n944] [INFO] [stdout] [n944] [INFO] [stdout] [n945] [INFO] [stdout] [n945] [INFO] [stdout] [n946] [INFO] [stdout] [n946] [INFO] [stdout] [n936] [INFO] [stdout] [n935]

                                                                                                                [INFO] [stdout] [n947] TEXT: "\n\n" [INFO] [stdout] [n948]

                                                                                                                [INFO] [stdout] [n949] TEXT: "Sure, because it has such a tiny lens and sensor, you’re never going to get the\nnice depth of field effect you could get on a “real” camera, but at some point,\nI realized the limiting factor was simply the video format / USB connection." [INFO] [stdout] [n948]

                                                                                                                [INFO] [stdout] [n950] TEXT: "\n\n" [INFO] [stdout] [n951]

                                                                                                                [INFO] [stdout] [n952] TEXT: "I was wondering how it was able to transfer 4K images at 30FPS over USB 2.0. I\nwill surely come to regret this back-of-the-envelope calculation, but: it seems\nUSB 2.0 has an effective throughput of around 35 MB/s. Assuming RGBX8888 (8 bit\nper red/green/blue channel, the fourth value is just zero, for alignment’s\nsake), " [INFO] [stdout] [n953] [INFO] [stdout] [n954] TEXT: "one" [INFO] [stdout] [n953] [INFO] [stdout] [n955] TEXT: " 3840x2160 image is around 32 MB." [INFO] [stdout] [n951]

                                                                                                                [INFO] [stdout] [n956] TEXT: "\n\n" [INFO] [stdout] [n957]

                                                                                                                [INFO] [stdout] [n958] TEXT: "You can fit one of them per second, but certainly not 30. And I checked, it’s\nnot like the camera unlocks different output formats when plugged on a USB\n3.0-capable port." [INFO] [stdout] [n957]

                                                                                                                [INFO] [stdout] [n959] TEXT: "\n\n" [INFO] [stdout] [n960]

                                                                                                                [INFO] [stdout] [n961] TEXT: "So, what do they do? H.264? Well, they " [INFO] [stdout] [n962] [INFO] [stdout] [n963] TEXT: "used\nto" [INFO] [stdout] [n962] [INFO] [stdout] [n964] TEXT: ",\nas part of a partnership with Skype, so you could do 1080p video calls on your\nshitty $300 laptop." [INFO] [stdout] [n960]

                                                                                                                [INFO] [stdout] [n965] TEXT: "\n\n" [INFO] [stdout] [n966]

                                                                                                                [INFO] [stdout] [n967] TEXT: "But they no longer do, and now if you add a Logitech Brio as an input to OBS,\nyou’ll see the video format is… MJPEG!" [INFO] [stdout] [n966]

                                                                                                                [INFO] [stdout] [n968] TEXT: "\n\n" [INFO] [stdout] [n969]

                                                                                                                [INFO] [stdout] [n970] TEXT: "I’ve included some comparative webcam footage in " [INFO] [stdout] [n971] [INFO] [stdout] [n972] TEXT: "This is a video about\nvideo" [INFO] [stdout] [n971] [INFO] [stdout] [n973] TEXT: ", and you can see that, even with the\npricey one, the JPEG artifacts are just… bad. Which I guess you wouldn’t\nnotice on your 8th Zoom call of the day, but in this house, we’re making " [INFO] [stdout] [n974] [INFO] [stdout] [n975] TEXT: "art" [INFO] [stdout] [n974] [INFO] [stdout] [n976] TEXT: "." [INFO] [stdout] [n969]

                                                                                                                [INFO] [stdout] [n977] TEXT: "\n\n" [INFO] [stdout] [n978]

                                                                                                                [INFO] [stdout] [n979] [INFO] [stdout] [n980] [INFO] [stdout] [n980] [INFO] [stdout] [n981] [INFO] [stdout] [n981] [INFO] [stdout] [n982] [INFO] [stdout] [n982] [INFO] [stdout] [n983] [INFO] [stdout] [n983] [INFO] [stdout] [n984] [INFO] [stdout] [n984] [INFO] [stdout] [n985] [INFO] [stdout] [n985] [INFO] [stdout] [n986] [INFO] [stdout] [n986] [INFO] [stdout] [n987] [INFO] [stdout] [n987] [INFO] [stdout] [n988] [INFO] [stdout] [n988] [INFO] [stdout] [n989] [INFO] [stdout] [n989] [INFO] [stdout] [n979] [INFO] [stdout] [n978]

                                                                                                                [INFO] [stdout] [n990] TEXT: "\n\n" [INFO] [stdout] [n991]

                                                                                                                [INFO] [stdout] [n992] TEXT: "So, alright, proper camera it is. I got the " [INFO] [stdout] [n993] [INFO] [stdout] [n994] TEXT: "Panasonic Lumix\nGH5M" [INFO] [stdout] [n993] [INFO] [stdout] [n995] TEXT: " (1300 EUR at the time)." [INFO] [stdout] [n991]

                                                                                                                [INFO] [stdout] [n996] TEXT: "\n\n" [INFO] [stdout] [n997]

                                                                                                                [INFO] [stdout] [n998] TEXT: "My criteria was: I want 4K60 support (3840x2160 at 60 frames per second), and I\nwant “clean HDMI output”." [INFO] [stdout] [n997]

                                                                                                                [INFO] [stdout] [n999] TEXT: "\n\n" [INFO] [stdout] [n1000]

                                                                                                                [INFO] [stdout] [n1001] TEXT: "Why clean HDMI output? Because I’m only using the camera for its.. well, its\nlens, sensor and image processing pipeline, but then I don’t want to mess with\npopping SD cards in and out, painstakingly copying files to the computer, etc." [INFO] [stdout] [n1000]

                                                                                                                [INFO] [stdout] [n1002] TEXT: "\n\n" [INFO] [stdout] [n1003]

                                                                                                                [INFO] [stdout] [n1004] TEXT: "Some cameras have a “webcam mode” over USB, but it has the same limitations as\nUSB webcams: the max resolution and frame rate are a far cry from what the\ncamera is capable of." [INFO] [stdout] [n1003]

                                                                                                                [INFO] [stdout] [n1005] TEXT: "\n\n" [INFO] [stdout] [n1006] [INFO] [stdout] [n1007]

                                                                                                                [INFO] [stdout] [n1008] TEXT: "HDMI capture cards" [INFO] [stdout] [n1007]

                                                                                                                [INFO] [stdout] [n1006]
                                                                                                                [INFO] [stdout] [n1009] TEXT: "\n" [INFO] [stdout] [n1010]

                                                                                                                [INFO] [stdout] [n1011] TEXT: "Since I wanted 4K60, I let myself be swayed by Elgato’s siren song. They " [INFO] [stdout] [n1012] [INFO] [stdout] [n1013] TEXT: "do" [INFO] [stdout] [n1012] [INFO] [stdout] [n1014] TEXT: "\nmake some good stuff, we’ll come back to that. And honestly, the " [INFO] [stdout] [n1015] [INFO] [stdout] [n1016] TEXT: "Elgato 4K60\nPro MK.2" [INFO] [stdout] [n1015] [INFO] [stdout] [n1017] TEXT: " (~250EUR) card\nlooks great, and when it works, it works as advertised." [INFO] [stdout] [n1010]

                                                                                                                [INFO] [stdout] [n1018] TEXT: "\n\n" [INFO] [stdout] [n1019]

                                                                                                                [INFO] [stdout] [n1020] [INFO] [stdout] [n1021] [INFO] [stdout] [n1021] [INFO] [stdout] [n1022] [INFO] [stdout] [n1022] [INFO] [stdout] [n1023] [INFO] [stdout] [n1023] [INFO] [stdout] [n1024] [INFO] [stdout] [n1024] [INFO] [stdout] [n1025] [INFO] [stdout] [n1025] [INFO] [stdout] [n1026] [INFO] [stdout] [n1026] [INFO] [stdout] [n1027] [INFO] [stdout] [n1027] [INFO] [stdout] [n1028] [INFO] [stdout] [n1028] [INFO] [stdout] [n1029] [INFO] [stdout] [n1029] [INFO] [stdout] [n1030] [INFO] [stdout] [n1030] [INFO] [stdout] [n1020] [INFO] [stdout] [n1019]

                                                                                                                [INFO] [stdout] [n1031] TEXT: "\n\n" [INFO] [stdout] [n1032]

                                                                                                                [INFO] [stdout] [n1033] TEXT: "It needs a PCI-e 4x lane: after my graphics card, I only have one of those left,\nso I can’t set up a second capture card on there. It has one HDMI in and one\nHDMI out: I’ve never used the latter." [INFO] [stdout] [n1032]

                                                                                                                [INFO] [stdout] [n1034] TEXT: "\n\n" [INFO] [stdout] [n1035]

                                                                                                                [INFO] [stdout] [n1036] [INFO] [stdout] [n1037] [INFO] [stdout] [n1037] [INFO] [stdout] [n1038] [INFO] [stdout] [n1038] [INFO] [stdout] [n1039] [INFO] [stdout] [n1039] [INFO] [stdout] [n1040] [INFO] [stdout] [n1040] [INFO] [stdout] [n1041] [INFO] [stdout] [n1041] [INFO] [stdout] [n1042] [INFO] [stdout] [n1042] [INFO] [stdout] [n1043] [INFO] [stdout] [n1043] [INFO] [stdout] [n1044] [INFO] [stdout] [n1044] [INFO] [stdout] [n1045] [INFO] [stdout] [n1045] [INFO] [stdout] [n1046] [INFO] [stdout] [n1046] [INFO] [stdout] [n1036] [INFO] [stdout] [n1035]

                                                                                                                [INFO] [stdout] [n1047] TEXT: "\n\n" [INFO] [stdout] [n1048]

                                                                                                                [INFO] [stdout] [n1049] TEXT: "I’ve had multiple “no signal” problems that were usually solved by turning\nvarious parts of my setup on and off again, or going off to make coffee. Not\ngreat, but, once it started working, it didn’t stop working." [INFO] [stdout] [n1048]

                                                                                                                [INFO] [stdout] [n1050] TEXT: "\n\n" [INFO] [stdout] [n1051]

                                                                                                                [INFO] [stdout] [n1052] TEXT: "The one thing that made it " [INFO] [stdout] [n1053] [INFO] [stdout] [n1054] TEXT: "really annoying" [INFO] [stdout] [n1053] [INFO] [stdout] [n1055] TEXT: " to use the Elgato 4K60 Pro MK.2 for\nme was that I couldn’t quite use it in OBS for full-resolution recording. It\njust kept dropping frames for some reason?" [INFO] [stdout] [n1051]

                                                                                                                [INFO] [stdout] [n1056] TEXT: "\n\n" [INFO] [stdout] [n1057]

                                                                                                                [INFO] [stdout] [n1058] TEXT: "It had been a while since I tried, so I thought maybe I was holding it wrong,\nbut checking the comments on " [INFO] [stdout] [n1059] [INFO] [stdout] [n1060] TEXT: "one of their\nguides" [INFO] [stdout] [n1059] [INFO] [stdout] [n1061] TEXT: " reassured me that it’s\nstill a problem for people today." [INFO] [stdout] [n1057]

                                                                                                                [INFO] [stdout] [n1062] TEXT: "\n\n" [INFO] [stdout] [n1063]

                                                                                                                [INFO] [stdout] [n1064] TEXT: "So, for the past few years, I’ve been using their own recording tool, the\n" [INFO] [stdout] [n1065] [INFO] [stdout] [n1066] TEXT: "Elgato 4K Capture Utility" [INFO] [stdout] [n1065] [INFO] [stdout] [n1067] TEXT: "." [INFO] [stdout] [n1063]

                                                                                                                [INFO] [stdout] [n1068] TEXT: "\n\n" [INFO] [stdout] [n1069]

                                                                                                                [INFO] [stdout] [n1070] [INFO] [stdout] [n1071] [INFO] [stdout] [n1071] [INFO] [stdout] [n1072] [INFO] [stdout] [n1072] [INFO] [stdout] [n1073] [INFO] [stdout] [n1073] [INFO] [stdout] [n1074] [INFO] [stdout] [n1074] [INFO] [stdout] [n1075] [INFO] [stdout] [n1075] [INFO] [stdout] [n1076] [INFO] [stdout] [n1076] [INFO] [stdout] [n1077] [INFO] [stdout] [n1077] [INFO] [stdout] [n1078] [INFO] [stdout] [n1078] [INFO] [stdout] [n1079] [INFO] [stdout] [n1079] [INFO] [stdout] [n1080] [INFO] [stdout] [n1080] [INFO] [stdout] [n1070] [INFO] [stdout] [n1069]

                                                                                                                [INFO] [stdout] [n1081] TEXT: "\n\n" [INFO] [stdout] [n1082]

                                                                                                                [INFO] [stdout] [n1083] TEXT: "I was happy enough with the quality, after cranking the bit rate all the way up\nto 140 Mbps (it doesn’t go any higher). Why such a high bit rate?" [INFO] [stdout] [n1082]

                                                                                                                [INFO] [stdout] [n1084] TEXT: "\n\n" [INFO] [stdout] [n1085]

                                                                                                                [INFO] [stdout] [n1086] [INFO] [stdout] [n1087] [INFO] [stdout] [n1087] [INFO] [stdout] [n1088] [INFO] [stdout] [n1088] [INFO] [stdout] [n1089] [INFO] [stdout] [n1089] [INFO] [stdout] [n1090] [INFO] [stdout] [n1090] [INFO] [stdout] [n1091] [INFO] [stdout] [n1091] [INFO] [stdout] [n1092] [INFO] [stdout] [n1092] [INFO] [stdout] [n1093] [INFO] [stdout] [n1093] [INFO] [stdout] [n1094] [INFO] [stdout] [n1094] [INFO] [stdout] [n1095] [INFO] [stdout] [n1095] [INFO] [stdout] [n1096] [INFO] [stdout] [n1096] [INFO] [stdout] [n1086] [INFO] [stdout] [n1085]

                                                                                                                [INFO] [stdout] [n1097] TEXT: "\n\n" [INFO] [stdout] [n1098]

                                                                                                                [INFO] [stdout] [n1099] TEXT: "Because when you’re doing green screen, and you’re not lighting your scene\nproperly (in real life), the green tones end up being lit unevenly " [INFO] [stdout] [n1100] [INFO] [stdout] [n1101] TEXT: "and" [INFO] [stdout] [n1100] [INFO] [stdout] [n1102] TEXT: " falling\nin the sort of “darker ranges” that get bit-crushed when encoding to H.264." [INFO] [stdout] [n1098]

                                                                                                                [INFO] [stdout] [n1103] TEXT: "\n\n" [INFO] [stdout] [n1104]

                                                                                                                [INFO] [stdout] [n1105] TEXT: "Video codecs are like image codecs with motion smarts added on top: they try to\nspend their bits wisely, where human eyes and minds will notice them. We don’t\nusually pay attention to the darker parts of a scene, the shadows, and so it\nsimply has “fewer shades” there, resulting in banding-like artifacts that are\nnoticeable when you look closely or post-process the image." [INFO] [stdout] [n1104]

                                                                                                                [INFO] [stdout] [n1106] TEXT: "\n\n" [INFO] [stdout] [n1107]

                                                                                                                [INFO] [stdout] [n1108] TEXT: "Much like for audio, it’s often desirable to capture in higher fidelity than\nyour final render target: I did try recording in 10-bit to have a little more to\nwork with, but nothing could save me from having to buy some proper freaking\nlights." [INFO] [stdout] [n1107]

                                                                                                                [INFO] [stdout] [n1109] TEXT: "\n\n" [INFO] [stdout] [n1110]

                                                                                                                [INFO] [stdout] [n1111] TEXT: "Plus, 10-bit color comes with its own pantry full of worm-cans. 10-bit is often\ninterchangeably with “HDR”, except it’s very far from being that simple. There’s\nalso 12-bit, some 10-bit displays are " [INFO] [stdout] [n1112] [INFO] [stdout] [n1113] TEXT: "actually" [INFO] [stdout] [n1112] [INFO] [stdout] [n1114] TEXT: " 8-bit but “changing values\nrapidly”, “HDR 400” is a lie but “DisplayHDR 400” isn’t, “HDR 10/10+” are\nconfusing, Dolby Vision is fully proprietary…" [INFO] [stdout] [n1110]

                                                                                                                [INFO] [stdout] [n1115] TEXT: "\n\n" [INFO] [stdout] [n1116]

                                                                                                                [INFO] [stdout] [n1117] TEXT: "“HDR” is the reason I bought an iPhone in the first place! (And then a proper\nTV). I researched it a bunch and started writing a whole script, even tried\nreleasing a couple videos with it (like " [INFO] [stdout] [n1118] [INFO] [stdout] [n1119] TEXT: "this health\nupdate" [INFO] [stdout] [n1118] [INFO] [stdout] [n1120] TEXT: "). But as the rabbit hold\ngot deeper, I… well, you haven’t seen any of it yet. But it’s on the back of\nmy mind." [INFO] [stdout] [n1116]

                                                                                                                [INFO] [stdout] [n1121] TEXT: "\n\n" [INFO] [stdout] [n1122]

                                                                                                                [INFO] [stdout] [n1123] TEXT: "Notably, one thing about HDR is that it’s not " [INFO] [stdout] [n1124] [INFO] [stdout] [n1125] TEXT: "just" [INFO] [stdout] [n1124] [INFO] [stdout] [n1126] TEXT: " about having “more shades\nof colors”. Even in 8-bit, once you’re going through formats like H.264 (AVC for\nthe pedants), chances are you’re doing " [INFO] [stdout] [n1127] [INFO] [stdout] [n1128] TEXT: "chroma\nsubsampling" [INFO] [stdout] [n1127] [INFO] [stdout] [n1129] TEXT: " anyway." [INFO] [stdout] [n1122]

                                                                                                                [INFO] [stdout] [n1130] TEXT: "\n\n" [INFO] [stdout] [n1131]

                                                                                                                [INFO] [stdout] [n1132] TEXT: "Only 4:4:4 (e.g. I444) is “non-subsampled”, and " [INFO] [stdout] [n1133] [INFO] [stdout] [n1134] TEXT: "nobody" [INFO] [stdout] [n1133] [INFO] [stdout] [n1135] TEXT: " does that. You can\ntechnically tell OBS to do that, and it might be a good idea when recording\nscreen capture, but once you upload it to YouTube, it " [INFO] [stdout] [n1136] [INFO] [stdout] [n1137] TEXT: "will" [INFO] [stdout] [n1136] [INFO] [stdout] [n1138] TEXT: " be served as\nYUV420P, which is 4:2:0, where you have a luminance (“grayscale”) sample for\nevery pixel, but only one chrominance (“color”) sample per every " [INFO] [stdout] [n1139] [INFO] [stdout] [n1140] TEXT: "four" [INFO] [stdout] [n1139] [INFO] [stdout] [n1141] TEXT: " pixels." [INFO] [stdout] [n1131]

                                                                                                                [INFO] [stdout] [n1142] TEXT: "\n\n" [INFO] [stdout] [n1143]

                                                                                                                [INFO] [stdout] [n1144] [INFO] [stdout] [n1144] [INFO] [stdout] [n1143]

                                                                                                                [INFO] [stdout] [n1145] TEXT: "\n\n" [INFO] [stdout] [n1146]

                                                                                                                [INFO] [stdout] [n1147] TEXT: "(Image credit: " [INFO] [stdout] [n1148] [INFO] [stdout] [n1149] TEXT: "Stevo-88 on Wikimedia commons" [INFO] [stdout] [n1148] [INFO] [stdout] [n1150] TEXT: ")" [INFO] [stdout] [n1146]

                                                                                                                [INFO] [stdout] [n1151] TEXT: "\n\n" [INFO] [stdout] [n1152]

                                                                                                                [INFO] [stdout] [n1153] TEXT: "Back when I did a survey of HTML5 video support in web browsers (not documented\nanywhere, sadly), I " [INFO] [stdout] [n1154] [INFO] [stdout] [n1155] TEXT: "think" [INFO] [stdout] [n1154] [INFO] [stdout] [n1156] TEXT: " only Firefox on Windows 10 was able to play back\n4:4:4 video properly." [INFO] [stdout] [n1152]

                                                                                                                [INFO] [stdout] [n1157] TEXT: "\n\n" [INFO] [stdout] [n1158]

                                                                                                                [INFO] [stdout] [n1159] TEXT: "It’s just one of those things you can’t unlearn to see: just like how different\nthe blacks look on an OLED screen vs an affordable LED one." [INFO] [stdout] [n1158]

                                                                                                                [INFO] [stdout] [n1160] TEXT: "\n\n" [INFO] [stdout] [n1161]

                                                                                                                [INFO] [stdout] [n1162] TEXT: "Anyway, I gave up on HDR fairly quick because, as I said, it’s not " [INFO] [stdout] [n1163] [INFO] [stdout] [n1164] TEXT: "just" [INFO] [stdout] [n1163] [INFO] [stdout] [n1165] TEXT: " more\nshades, it’s also different colorspaces (" [INFO] [stdout] [n1166] [INFO] [stdout] [n1167] TEXT: "Rec.2020" [INFO] [stdout] [n1166] [INFO] [stdout] [n1168] TEXT: " vs " [INFO] [stdout] [n1169] [INFO] [stdout] [n1170] TEXT: "Rec.709" [INFO] [stdout] [n1169] [INFO] [stdout] [n1171] TEXT: " for HD SDR content,\nand let’s not talk about SD content)." [INFO] [stdout] [n1161]

                                                                                                                [INFO] [stdout] [n1172] TEXT: "\n\n" [INFO] [stdout] [n1173]
                                                                                                                [INFO] [stdout] [n1174] TEXT: "\n" [INFO] [stdout] [n1175]
                                                                                                                [INFO] [stdout] [n1176] TEXT: "\n" [INFO] [stdout] [n1177] [INFO] [stdout] [n1178] [INFO] [stdout] [n1178] [INFO] [stdout] [n1179] [INFO] [stdout] [n1179] [INFO] [stdout] [n1180] [INFO] [stdout] [n1180] [INFO] [stdout] [n1181] [INFO] [stdout] [n1181] [INFO] [stdout] [n1182] [INFO] [stdout] [n1182] [INFO] [stdout] [n1183] [INFO] [stdout] [n1183] [INFO] [stdout] [n1184] [INFO] [stdout] [n1184] [INFO] [stdout] [n1185] [INFO] [stdout] [n1185] [INFO] [stdout] [n1186] [INFO] [stdout] [n1186] [INFO] [stdout] [n1187] [INFO] [stdout] [n1187] [INFO] [stdout] [n1177] [INFO] [stdout] [n1188] TEXT: "\nCool Bear's hot tip\n" [INFO] [stdout] [n1175]
                                                                                                                [INFO] [stdout] [n1189] TEXT: "\n" [INFO] [stdout] [n1190]

                                                                                                                [INFO] [stdout] [n1191] TEXT: "In this context:" [INFO] [stdout] [n1190]

                                                                                                                [INFO] [stdout] [n1192] TEXT: "\n\n" [INFO] [stdout] [n1193]
                                                                                                                  [INFO] [stdout] [n1194]
                                                                                                                • [INFO] [stdout] [n1195] TEXT: "HD = “high definition”" [INFO] [stdout] [n1194]
                                                                                                                • [INFO] [stdout] [n1196] TEXT: "\n" [INFO] [stdout] [n1197]
                                                                                                                • [INFO] [stdout] [n1198] TEXT: "SD = “standard definition”" [INFO] [stdout] [n1197]
                                                                                                                • [INFO] [stdout] [n1199] TEXT: "\n" [INFO] [stdout] [n1200]
                                                                                                                • [INFO] [stdout] [n1201] TEXT: "HDR = “high dynamic range”" [INFO] [stdout] [n1200]
                                                                                                                • [INFO] [stdout] [n1202] TEXT: "\n" [INFO] [stdout] [n1203]
                                                                                                                • [INFO] [stdout] [n1204] TEXT: "SDR = “standard dynamic range”" [INFO] [stdout] [n1203]
                                                                                                                • [INFO] [stdout] [n1205] TEXT: "\n" [INFO] [stdout] [n1193]
                                                                                                                [INFO] [stdout] [n1206] TEXT: "\n" [INFO] [stdout] [n1173]
                                                                                                                [INFO] [stdout] [n1207]

                                                                                                                [INFO] [stdout] [n1208] TEXT: "And it’s also different brightness standards: the brightest white on a properly\ncalibrated HDR400 display isn’t “whatever I guess”, it’s 400 nits. On other,\nbetter displays, it’s 1000 nits." [INFO] [stdout] [n1207]

                                                                                                                [INFO] [stdout] [n1209] TEXT: "\n\n" [INFO] [stdout] [n1210]

                                                                                                                [INFO] [stdout] [n1211] TEXT: "My editing software shows me values of up to 4000 nits for Dolby Vision\n“Mastering displays”, and therein lies the problem: if you want to master HDR\nvideo, you need a display that costs an absolutely revolting amount of money." [INFO] [stdout] [n1210]

                                                                                                                [INFO] [stdout] [n1212] TEXT: "\n\n" [INFO] [stdout] [n1213]

                                                                                                                [INFO] [stdout] [n1214] TEXT: "Even if you do everything right, ideally you’d do a " [INFO] [stdout] [n1215] [INFO] [stdout] [n1216] TEXT: "separate" [INFO] [stdout] [n1215] [INFO] [stdout] [n1217] TEXT: " master for SDR\n(since most people do " [INFO] [stdout] [n1218] [INFO] [stdout] [n1219] TEXT: "not" [INFO] [stdout] [n1218] [INFO] [stdout] [n1220] TEXT: " have a good HDR display, or an HDR display at all,\nI try not to think of everyone watching on a shitty Dell Laptop), but YouTube\ndoesn’t let you do that. It barely achieves HDR playback anywhere, and certainly\nnot with consistent results, as others have " [INFO] [stdout] [n1221] [INFO] [stdout] [n1222] TEXT: "documented extensively before me" [INFO] [stdout] [n1221] [INFO] [stdout] [n1223] TEXT: "." [INFO] [stdout] [n1213]

                                                                                                                [INFO] [stdout] [n1224] TEXT: "\n\n" [INFO] [stdout] [n1225]

                                                                                                                [INFO] [stdout] [n1226] TEXT: "I might go back to 10-bit at some point, but only as a capture format: my target\nwill be SDR for the foreseeable future, unless the landscape changes significantly. The reason I " [INFO] [stdout] [n1227] [INFO] [stdout] [n1228] TEXT: "haven’t" [INFO] [stdout] [n1227] [INFO] [stdout] [n1229] TEXT: " been using 10-bit as a capture format\nis because… my Elgato capture card simply refused to work when I set my camera\nto 10-bit output! How fun." [INFO] [stdout] [n1225]

                                                                                                                [INFO] [stdout] [n1230] TEXT: "\n\n" [INFO] [stdout] [n1231]

                                                                                                                [INFO] [stdout] [n1232] TEXT: "Since I’m always thinking of how portable my whole setup is, just in case I\nfinally find a way to make my “travelling interviewer” dream job work, I started\nchecking out portable recording devices, and eventually got an " [INFO] [stdout] [n1233] [INFO] [stdout] [n1234] TEXT: "Atomos Ninja V" [INFO] [stdout] [n1233] [INFO] [stdout] [n1235] TEXT: " (~600EUR)." [INFO] [stdout] [n1231]

                                                                                                                [INFO] [stdout] [n1236] TEXT: "\n\n" [INFO] [stdout] [n1237]

                                                                                                                [INFO] [stdout] [n1238] [INFO] [stdout] [n1239] [INFO] [stdout] [n1239] [INFO] [stdout] [n1240] [INFO] [stdout] [n1240] [INFO] [stdout] [n1241] [INFO] [stdout] [n1241] [INFO] [stdout] [n1242] [INFO] [stdout] [n1242] [INFO] [stdout] [n1243] [INFO] [stdout] [n1243] [INFO] [stdout] [n1244] [INFO] [stdout] [n1244] [INFO] [stdout] [n1245] [INFO] [stdout] [n1245] [INFO] [stdout] [n1246] [INFO] [stdout] [n1246] [INFO] [stdout] [n1247] [INFO] [stdout] [n1247] [INFO] [stdout] [n1248] [INFO] [stdout] [n1248] [INFO] [stdout] [n1238] [INFO] [stdout] [n1237]

                                                                                                                [INFO] [stdout] [n1249] TEXT: "\n\n" [INFO] [stdout] [n1250]

                                                                                                                [INFO] [stdout] [n1251] TEXT: "Is this half the price of the camera? Yes. Is it worth it? Not for me, as it\nturns out: that thing gets CRAZY HOT and not only is the fan noise a no-go in a\ntight indoor environment, you have to hold the buttons 4 seconds to turn it off,\nand it " [INFO] [stdout] [n1252] [INFO] [stdout] [n1253] TEXT: "physically hurt my fingers" [INFO] [stdout] [n1252] [INFO] [stdout] [n1254] TEXT: " to do so after a recording session, since\nthe whole thing was just boiling at that point." [INFO] [stdout] [n1250]

                                                                                                                [INFO] [stdout] [n1255] TEXT: "\n\n" [INFO] [stdout] [n1256]

                                                                                                                [INFO] [stdout] [n1257] [INFO] [stdout] [n1258] [INFO] [stdout] [n1258] [INFO] [stdout] [n1259] [INFO] [stdout] [n1259] [INFO] [stdout] [n1260] [INFO] [stdout] [n1260] [INFO] [stdout] [n1261] [INFO] [stdout] [n1261] [INFO] [stdout] [n1262] [INFO] [stdout] [n1262] [INFO] [stdout] [n1263] [INFO] [stdout] [n1263] [INFO] [stdout] [n1264] [INFO] [stdout] [n1264] [INFO] [stdout] [n1265] [INFO] [stdout] [n1265] [INFO] [stdout] [n1266] [INFO] [stdout] [n1266] [INFO] [stdout] [n1267] [INFO] [stdout] [n1267] [INFO] [stdout] [n1257] [INFO] [stdout] [n1256]

                                                                                                                [INFO] [stdout] [n1268] TEXT: "\n\n" [INFO] [stdout] [n1269]

                                                                                                                [INFO] [stdout] [n1270] TEXT: "But damn, what a cool piece of tech. The display does 1000-nit HDR, it’s full of\nneat features like showing overexposed areas, audio monitors (multiple inputs,\ntoo), there’s expansion packs to cast over Wi-Fi, it does many codecs (ProRes,\nDNxHR, H.264, H.265, etc. — some you have to pay once to unlock), and my\nfavorite feature is that it doesn’t shoot to SD cards." [INFO] [stdout] [n1269]

                                                                                                                [INFO] [stdout] [n1271] TEXT: "\n\n" [INFO] [stdout] [n1272]

                                                                                                                [INFO] [stdout] [n1273] TEXT: "Ohhhh no." [INFO] [stdout] [n1272]

                                                                                                                [INFO] [stdout] [n1274] TEXT: "\n\n" [INFO] [stdout] [n1275]

                                                                                                                [INFO] [stdout] [n1276] TEXT: "It shoots straight to SATA 2.5“ SSDs." [INFO] [stdout] [n1275]

                                                                                                                [INFO] [stdout] [n1277] TEXT: "\n\n" [INFO] [stdout] [n1278]

                                                                                                                [INFO] [stdout] [n1279] [INFO] [stdout] [n1280] [INFO] [stdout] [n1280] [INFO] [stdout] [n1281] [INFO] [stdout] [n1281] [INFO] [stdout] [n1282] [INFO] [stdout] [n1282] [INFO] [stdout] [n1283] [INFO] [stdout] [n1283] [INFO] [stdout] [n1284] [INFO] [stdout] [n1284] [INFO] [stdout] [n1285] [INFO] [stdout] [n1285] [INFO] [stdout] [n1286] [INFO] [stdout] [n1286] [INFO] [stdout] [n1287] [INFO] [stdout] [n1287] [INFO] [stdout] [n1288] [INFO] [stdout] [n1288] [INFO] [stdout] [n1289] [INFO] [stdout] [n1289] [INFO] [stdout] [n1279] [INFO] [stdout] [n1278]

                                                                                                                [INFO] [stdout] [n1290] TEXT: "\n\n" [INFO] [stdout] [n1291]

                                                                                                                [INFO] [stdout] [n1292] TEXT: "You buy plastic caddies, that you mount SSDs into, and then you can just slide\nthem in and out of the monitor. It’s… really fun!" [INFO] [stdout] [n1291]

                                                                                                                [INFO] [stdout] [n1293] TEXT: "\n\n" [INFO] [stdout] [n1294]

                                                                                                                [INFO] [stdout] [n1295] [INFO] [stdout] [n1296] [INFO] [stdout] [n1296] [INFO] [stdout] [n1297] [INFO] [stdout] [n1297] [INFO] [stdout] [n1298] [INFO] [stdout] [n1298] [INFO] [stdout] [n1299] [INFO] [stdout] [n1299] [INFO] [stdout] [n1300] [INFO] [stdout] [n1300] [INFO] [stdout] [n1301] [INFO] [stdout] [n1301] [INFO] [stdout] [n1302] [INFO] [stdout] [n1302] [INFO] [stdout] [n1303] [INFO] [stdout] [n1303] [INFO] [stdout] [n1304] [INFO] [stdout] [n1304] [INFO] [stdout] [n1305] [INFO] [stdout] [n1305] [INFO] [stdout] [n1295] [INFO] [stdout] [n1294]

                                                                                                                [INFO] [stdout] [n1306] TEXT: "\n\n" [INFO] [stdout] [n1307]

                                                                                                                [INFO] [stdout] [n1308] TEXT: "Much like cameras have requirements for SD cards, the Atomos Ninja V does too\nfor storage. In fact, there’s a " [INFO] [stdout] [n1309] [INFO] [stdout] [n1310] TEXT: "specific" [INFO] [stdout] [n1309] [INFO] [stdout] [n1311] TEXT: " list of SSDs it’ll work with. I had\nto wait a month for my “professional-grade” 960 GB SSD." [INFO] [stdout] [n1307]

                                                                                                                [INFO] [stdout] [n1312] TEXT: "\n\n" [INFO] [stdout] [n1313]

                                                                                                                [INFO] [stdout] [n1314] TEXT: "You can even mount it on a cold shoe (this means on top of your camera, sliding\nit into a slot made for this: “hot shoes” have electronic connections, to\ntrigger flashes, external mics, etc. “cold shoes” are there just to physically\nhold stuff up), and I loved that!" [INFO] [stdout] [n1313]

                                                                                                                [INFO] [stdout] [n1315] TEXT: "\n\n" [INFO] [stdout] [n1316]

                                                                                                                [INFO] [stdout] [n1317] TEXT: "Having a high quality 10-inch display to see if your shot actually looks good\nwhen you’re shooting solo is great. But I couldn’t use it in conjunction with my\nteleprompter, which goes all " [WARN] too many lines in the log, truncating it