[INFO] fetching crate ito-domain 0.1.33...
[INFO] documenting ito-domain-0.1.33 against da3f5c31e5535b3dc210067de660a45784ae1e9c for pr-162169
[INFO] extracting crate ito-domain 0.1.33 into /workspace/builds/worker-3-tc2/source
[INFO] started tweaking crates.io crate ito-domain 0.1.33
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate ito-domain 0.1.33
[INFO] tweaked toml for crates.io crate ito-domain 0.1.33 written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate ito-domain 0.1.33 on toolchain da3f5c31e5535b3dc210067de660a45784ae1e9c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate ito-domain 0.1.33 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" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95
[INFO] running `Command { std: "docker" "start" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95" "/opt/rustwide/cargo-home/bin/cargo" "+da3f5c31e5535b3dc210067de660a45784ae1e9c" "doc" "--frozen" "--no-deps" "--document-private-items" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling zerocopy v0.8.54
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling cc v1.2.67
[INFO] [stderr]     Checking object v0.37.3
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]     Checking once_cell v1.21.4
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]     Checking rustc-demangle v0.1.28
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]     Checking unicode-linebreak v0.1.5
[INFO] [stderr]     Checking is_ci v1.2.0
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]     Checking textwrap v0.16.2
[INFO] [stderr]     Checking supports-color v3.0.2
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking terminal_size v0.4.4
[INFO] [stderr]     Checking supports-unicode v3.0.0
[INFO] [stderr]     Checking supports-hyperlinks v3.2.0
[INFO] [stderr]    Compiling libsqlite3-sys v0.28.0
[INFO] [stderr]     Checking regex-syntax v0.8.11
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking fallible-streaming-iterator v0.1.9
[INFO] [stderr]     Checking fallible-iterator v0.3.0
[INFO] [stderr]     Checking serde_json v1.0.150
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking uuid v1.23.5
[INFO] [stderr]    Compiling miette-derive v7.6.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]     Checking regex-automata v0.4.15
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]     Checking backtrace v0.3.76
[INFO] [stderr]     Checking backtrace-ext v0.2.1
[INFO] [stderr]     Checking miette v7.6.0
[INFO] [stderr]     Checking regex v1.13.0
[INFO] [stderr]     Checking ito-common v0.1.33
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking hashlink v0.9.1
[INFO] [stderr]     Checking rusqlite v0.31.0
[INFO] [stderr]  Documenting ito-domain v0.1.33 (/opt/rustwide/workdir)
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/compute.rs:30:1
[INFO] [stdout]     |
[INFO] [stdout]  30 | / pub fn compute_ready_and_blocked(
[INFO] [stdout]  31 | |     parsed: &TasksParseResult,
[INFO] [stdout]  32 | | ) -> (Vec<TaskItem>, Vec<(TaskItem, Vec<String>)>) {
[INFO] [stdout]  33 | |     let tasks = &parsed.tasks;
[INFO] [stdout] ...   |
[INFO] [stdout] 162 | |     (ready, blocked)
[INFO] [stdout] 163 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Compute ready vs blocked tasks for a parsed tracking file.`
[INFO] [stdout]     = help: ends near `Compute ready tasks and blocked tasks (with reasons) from a parsed tasks file.`
[INFO] [stdout]     = note: `#[deny(rustdoc::unportable_markdown)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/compute.rs:30:1
[INFO] [stdout]     |
[INFO] [stdout]  30 | / pub fn compute_ready_and_blocked(
[INFO] [stdout]  31 | |     parsed: &TasksParseResult,
[INFO] [stdout]  32 | | ) -> (Vec<TaskItem>, Vec<(TaskItem, Vec<String>)>) {
[INFO] [stdout]  33 | |     let tasks = &parsed.tasks;
[INFO] [stdout] ...   |
[INFO] [stdout] 162 | |     (ready, blocked)
[INFO] [stdout] 163 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Compute ready tasks and blocked tasks (with reasons) from a parsed tasks file.`
[INFO] [stdout]     = help: ends near `Compute ready tasks and blocked tasks (with reasons) from a parsed tasks file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:26:1
[INFO] [stdout]    |
[INFO] [stdout] 26 | / pub struct TaskInitResult {
[INFO] [stdout] 27 | |     /// Change identifier the init applied to.
[INFO] [stdout] 28 | |     pub change_id: String,
[INFO] [stdout] 29 | |     /// Tracking path when filesystem-backed.
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     pub revision: Option<String>,
[INFO] [stdout] 35 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Task mutation result types and port.`
[INFO] [stdout]    = help: ends near `Outcome of initializing task tracking.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:26:1
[INFO] [stdout]    |
[INFO] [stdout] 26 | / pub struct TaskInitResult {
[INFO] [stdout] 27 | |     /// Change identifier the init applied to.
[INFO] [stdout] 28 | |     pub change_id: String,
[INFO] [stdout] 29 | |     /// Tracking path when filesystem-backed.
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     pub revision: Option<String>,
[INFO] [stdout] 35 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Outcome of initializing task tracking.`
[INFO] [stdout]    = help: ends near `Outcome of initializing task tracking.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:39:1
[INFO] [stdout]    |
[INFO] [stdout] 39 | / pub enum TaskMutationError {
[INFO] [stdout] 40 | |     /// Filesystem or transport failure.
[INFO] [stdout] 41 | |     #[error("I/O failure while {context}: {source}")]
[INFO] [stdout] 42 | |     Io {
[INFO] [stdout] ...  |
[INFO] [stdout] 60 | |     Other(String),
[INFO] [stdout] 61 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Task mutation result types and port.`
[INFO] [stdout]    = help: ends near `Error type for task mutation ports.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:39:1
[INFO] [stdout]    |
[INFO] [stdout] 39 | / pub enum TaskMutationError {
[INFO] [stdout] 40 | |     /// Filesystem or transport failure.
[INFO] [stdout] 41 | |     #[error("I/O failure while {context}: {source}")]
[INFO] [stdout] 42 | |     Io {
[INFO] [stdout] ...  |
[INFO] [stdout] 60 | |     Other(String),
[INFO] [stdout] 61 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Error type for task mutation ports.`
[INFO] [stdout]    = help: ends near `Error type for task mutation ports.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct TaskMutationResult {
[INFO] [stdout] 16 | |     /// Change identifier the mutation applied to.
[INFO] [stdout] 17 | |     pub change_id: String,
[INFO] [stdout] 18 | |     /// Updated task item.
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     pub revision: Option<String>,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Task mutation result types and port.`
[INFO] [stdout]    = help: ends near `Outcome of a task mutation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | / pub struct TaskMutationResult {
[INFO] [stdout] 16 | |     /// Change identifier the mutation applied to.
[INFO] [stdout] 17 | |     pub change_id: String,
[INFO] [stdout] 18 | |     /// Updated task item.
[INFO] [stdout] ...  |
[INFO] [stdout] 21 | |     pub revision: Option<String>,
[INFO] [stdout] 22 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Outcome of a task mutation.`
[INFO] [stdout]    = help: ends near `Outcome of a task mutation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/mutations.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout]  89 | / pub trait TaskMutationService: Send + Sync {
[INFO] [stdout]  90 | |     /// Load raw task tracking markdown, if available.
[INFO] [stdout]  91 | |     fn load_tasks_markdown(&self, change_id: &str) -> TaskMutationServiceResult<Option<String>>;
[INFO] [stdout]  92 | |     /// Initialize a tracking file or remote artifact for a change.
[INFO] [stdout] ...   |
[INFO] [stdout] 126 | |     ) -> TaskMutationServiceResult<TaskMutationResult>;
[INFO] [stdout] 127 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Task mutation result types and port.`
[INFO] [stdout]     = help: ends near `Port for task mutations and raw markdown access.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/mutations.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout]  89 | / pub trait TaskMutationService: Send + Sync {
[INFO] [stdout]  90 | |     /// Load raw task tracking markdown, if available.
[INFO] [stdout]  91 | |     fn load_tasks_markdown(&self, change_id: &str) -> TaskMutationServiceResult<Option<String>>;
[INFO] [stdout]  92 | |     /// Initialize a tracking file or remote artifact for a change.
[INFO] [stdout] ...   |
[INFO] [stdout] 126 | |     ) -> TaskMutationServiceResult<TaskMutationResult>;
[INFO] [stdout] 127 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Port for task mutations and raw markdown access.`
[INFO] [stdout]     = help: ends near `Port for task mutations and raw markdown access.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub type TaskMutationServiceResult<T> = Result<T, TaskMutationError>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Task mutation result types and port.`
[INFO] [stdout]    = help: ends near `Result alias for task mutation operations.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/mutations.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub type TaskMutationServiceResult<T> = Result<T, TaskMutationError>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Result alias for task mutation operations.`
[INFO] [stdout]    = help: ends near `Result alias for task mutation operations.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:300:1
[INFO] [stdout]     |
[INFO] [stdout] 300 | / pub fn detect_tasks_format(contents: &str) -> TasksFormat {
[INFO] [stdout] 301 | |     let enhanced_heading = &*ENHANCED_HEADING_RE;
[INFO] [stdout] 302 | |     if enhanced_heading.is_match(contents) {
[INFO] [stdout] 303 | |         return TasksFormat::Enhanced;
[INFO] [stdout] ...   |
[INFO] [stdout] 309 | |     TasksFormat::Checkbox
[INFO] [stdout] 310 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Detect whether a `tasks.md` file is enhanced or checkbox format.`
[INFO] [stdout]     = help: ends near `Detects whether task tracking contents use the enhanced wave-based format or the legacy checkbox format.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:300:1
[INFO] [stdout]     |
[INFO] [stdout] 300 | / pub fn detect_tasks_format(contents: &str) -> TasksFormat {
[INFO] [stdout] 301 | |     let enhanced_heading = &*ENHANCED_HEADING_RE;
[INFO] [stdout] 302 | |     if enhanced_heading.is_match(contents) {
[INFO] [stdout] 303 | |         return TasksFormat::Enhanced;
[INFO] [stdout] ...   |
[INFO] [stdout] 309 | |     TasksFormat::Checkbox
[INFO] [stdout] 310 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Detects whether task tracking contents use the enhanced wave-based format or the legacy checkbox format.`
[INFO] [stdout]     = help: ends near `Detects whether task tracking contents use the enhanced wave-based format or the legacy checkbox format.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:278:1
[INFO] [stdout]     |
[INFO] [stdout] 278 | / pub fn enhanced_tasks_template(change_id: &str, now: DateTime<Local>) -> String {
[INFO] [stdout] 279 | |     let date = now.format("%Y-%m-%d").to_string();
[INFO] [stdout] 280 | |     format!(
[INFO] [stdout] 281 | |         "# Tasks for: {change_id}\n\n## Execution Notes\n\n- **Tool**: Any (OpenCode, Codex, Claude Code)\n- **Mode**: Sequential...
[INFO] [stdout] 282 | |     )
[INFO] [stdout] 283 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Generate the enhanced `tasks.md` template for a change.`
[INFO] [stdout]     = help: ends near `Builds a default enhanced-format `tasks.md` template for a given change.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:278:1
[INFO] [stdout]     |
[INFO] [stdout] 278 | / pub fn enhanced_tasks_template(change_id: &str, now: DateTime<Local>) -> String {
[INFO] [stdout] 279 | |     let date = now.format("%Y-%m-%d").to_string();
[INFO] [stdout] 280 | |     format!(
[INFO] [stdout] 281 | |         "# Tasks for: {change_id}\n\n## Execution Notes\n\n- **Tool**: Any (OpenCode, Codex, Claude Code)\n- **Mode**: Sequential...
[INFO] [stdout] 282 | |     )
[INFO] [stdout] 283 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Builds a default enhanced-format `tasks.md` template for a given change.`
[INFO] [stdout]     = help: ends near `Builds a default enhanced-format `tasks.md` template for a given change.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1061:1
[INFO] [stdout]      |
[INFO] [stdout] 1061 | / pub fn is_safe_tracking_filename(tracking_file: &str) -> bool {
[INFO] [stdout] 1062 | |     let tracking_file = tracking_file.trim();
[INFO] [stdout] 1063 | |     if tracking_file.is_empty() {
[INFO] [stdout] 1064 | |         return false;
[INFO] [stdout] ...    |
[INFO] [stdout] 1081 | |     true
[INFO] [stdout] 1082 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Returns true when a tracking filename is safe as a single path segment.`
[INFO] [stdout]      = help: ends near `Return `true` when `tracking_file` is safe as a single filename.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1061:1
[INFO] [stdout]      |
[INFO] [stdout] 1061 | / pub fn is_safe_tracking_filename(tracking_file: &str) -> bool {
[INFO] [stdout] 1062 | |     let tracking_file = tracking_file.trim();
[INFO] [stdout] 1063 | |     if tracking_file.is_empty() {
[INFO] [stdout] 1064 | |         return false;
[INFO] [stdout] ...    |
[INFO] [stdout] 1081 | |     true
[INFO] [stdout] 1082 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Return `true` when `tracking_file` is safe as a single filename.`
[INFO] [stdout]      = help: ends near `Return `true` when `tracking_file` is safe as a single filename.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:313:1
[INFO] [stdout]     |
[INFO] [stdout] 313 | / pub fn parse_tasks_tracking_file(contents: &str) -> TasksParseResult {
[INFO] [stdout] 314 | |     match detect_tasks_format(contents) {
[INFO] [stdout] 315 | |         TasksFormat::Enhanced => parse_enhanced_tasks(contents),
[INFO] [stdout] 316 | |         TasksFormat::Checkbox => parse_checkbox_tasks(contents),
[INFO] [stdout] 317 | |     }
[INFO] [stdout] 318 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Parse task tracking markdown into a normalized representation.`
[INFO] [stdout]     = help: ends near `Parse a `tasks.md` tracking file into a normalized representation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:313:1
[INFO] [stdout]     |
[INFO] [stdout] 313 | / pub fn parse_tasks_tracking_file(contents: &str) -> TasksParseResult {
[INFO] [stdout] 314 | |     match detect_tasks_format(contents) {
[INFO] [stdout] 315 | |         TasksFormat::Enhanced => parse_enhanced_tasks(contents),
[INFO] [stdout] 316 | |         TasksFormat::Checkbox => parse_checkbox_tasks(contents),
[INFO] [stdout] 317 | |     }
[INFO] [stdout] 318 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Parse a `tasks.md` tracking file into a normalized representation.`
[INFO] [stdout]     = help: ends near `Parse a `tasks.md` tracking file into a normalized representation.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1019:1
[INFO] [stdout]      |
[INFO] [stdout] 1019 | / pub fn tasks_path(ito_path: &Path, change_id: &str) -> PathBuf {
[INFO] [stdout] 1020 | |     let Some(path) = tasks_path_checked(ito_path, change_id) else {
[INFO] [stdout] 1021 | |         return ito_path
[INFO] [stdout] 1022 | |             .join("changes")
[INFO] [stdout] ...    |
[INFO] [stdout] 1026 | |     path
[INFO] [stdout] 1027 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Build a tasks path with fallback behavior for invalid ids.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/tasks.md`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1019:1
[INFO] [stdout]      |
[INFO] [stdout] 1019 | / pub fn tasks_path(ito_path: &Path, change_id: &str) -> PathBuf {
[INFO] [stdout] 1020 | |     let Some(path) = tasks_path_checked(ito_path, change_id) else {
[INFO] [stdout] 1021 | |         return ito_path
[INFO] [stdout] 1022 | |             .join("changes")
[INFO] [stdout] ...    |
[INFO] [stdout] 1026 | |     path
[INFO] [stdout] 1027 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Path to `{ito_path}/changes/{change_id}/tasks.md`.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/tasks.md`.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1034:1
[INFO] [stdout]      |
[INFO] [stdout] 1034 | / pub fn tasks_path_checked(ito_path: &Path, change_id: &str) -> Option<PathBuf> {
[INFO] [stdout] 1035 | |     if !is_safe_change_id_segment(change_id) {
[INFO] [stdout] 1036 | |         return None;
[INFO] [stdout] ...    |
[INFO] [stdout] 1039 | |     Some(ito_path.join("changes").join(change_id).join("tasks.md"))
[INFO] [stdout] 1040 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Build a tasks path only when the change id is a safe path segment.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/tasks.md` when `change_id` is safe.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1034:1
[INFO] [stdout]      |
[INFO] [stdout] 1034 | / pub fn tasks_path_checked(ito_path: &Path, change_id: &str) -> Option<PathBuf> {
[INFO] [stdout] 1035 | |     if !is_safe_change_id_segment(change_id) {
[INFO] [stdout] 1036 | |         return None;
[INFO] [stdout] ...    |
[INFO] [stdout] 1039 | |     Some(ito_path.join("changes").join(change_id).join("tasks.md"))
[INFO] [stdout] 1040 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Path to `{ito_path}/changes/{change_id}/tasks.md` when `change_id` is safe.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/tasks.md` when `change_id` is safe.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1085:1
[INFO] [stdout]      |
[INFO] [stdout] 1085 | / pub fn tracking_path_checked(
[INFO] [stdout] 1086 | |     ito_path: &Path,
[INFO] [stdout] 1087 | |     change_id: &str,
[INFO] [stdout] 1088 | |     tracking_file: &str,
[INFO] [stdout] ...    |
[INFO] [stdout] 1096 | |     Some(ito_path.join("changes").join(change_id).join(tracking_file))
[INFO] [stdout] 1097 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Build a tracking file path when change id + filename are safe.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/{tracking_file}` when both inputs are safe.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]     --> src/tasks/parse.rs:1085:1
[INFO] [stdout]      |
[INFO] [stdout] 1085 | / pub fn tracking_path_checked(
[INFO] [stdout] 1086 | |     ito_path: &Path,
[INFO] [stdout] 1087 | |     change_id: &str,
[INFO] [stdout] 1088 | |     tracking_file: &str,
[INFO] [stdout] ...    |
[INFO] [stdout] 1096 | |     Some(ito_path.join("changes").join(change_id).join(tracking_file))
[INFO] [stdout] 1097 | | }
[INFO] [stdout]      | |_^
[INFO] [stdout]      |
[INFO] [stdout]      = help: the way this is parsed might change in the future
[INFO] [stdout]      = help: starts near `Path to `{ito_path}/changes/{change_id}/{tracking_file}` when both inputs are safe.`
[INFO] [stdout]      = help: ends near `Path to `{ito_path}/changes/{change_id}/{tracking_file}` when both inputs are safe.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/repository.rs:13:1
[INFO] [stdout]    |
[INFO] [stdout] 13 | / pub trait TaskRepository {
[INFO] [stdout] 14 | |     /// Load all tasks for a change.
[INFO] [stdout] 15 | |     ///
[INFO] [stdout] 16 | |     /// Returns the full parse result including diagnostics.
[INFO] [stdout] ...  |
[INFO] [stdout] 46 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Repository port for loading and querying task data.`
[INFO] [stdout]    = help: ends near `Port for accessing task data.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/repository.rs:13:1
[INFO] [stdout]    |
[INFO] [stdout] 13 | / pub trait TaskRepository {
[INFO] [stdout] 14 | |     /// Load all tasks for a change.
[INFO] [stdout] 15 | |     ///
[INFO] [stdout] 16 | |     /// Returns the full parse result including diagnostics.
[INFO] [stdout] ...  |
[INFO] [stdout] 46 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Port for accessing task data.`
[INFO] [stdout]    = help: ends near `Port for accessing task data.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/update.rs:41:1
[INFO] [stdout]     |
[INFO] [stdout]  41 | / pub fn update_checkbox_task_status(
[INFO] [stdout]  42 | |     contents: &str,
[INFO] [stdout]  43 | |     task_id: &str,
[INFO] [stdout]  44 | |     new_status: TaskStatus,
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |     Ok(out)
[INFO] [stdout] 117 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Update checkbox-format task status markers.`
[INFO] [stdout]     = help: ends near `Update the status marker of a checkbox-formatted task in the given file contents.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/update.rs:41:1
[INFO] [stdout]     |
[INFO] [stdout]  41 | / pub fn update_checkbox_task_status(
[INFO] [stdout]  42 | |     contents: &str,
[INFO] [stdout]  43 | |     task_id: &str,
[INFO] [stdout]  44 | |     new_status: TaskStatus,
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |     Ok(out)
[INFO] [stdout] 117 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Update the status marker of a checkbox-formatted task in the given file contents.`
[INFO] [stdout]     = help: ends near `Update the status marker of a checkbox-formatted task in the given file contents.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/update.rs:137:1
[INFO] [stdout]     |
[INFO] [stdout] 137 | / pub fn update_enhanced_task_status(
[INFO] [stdout] 138 | |     contents: &str,
[INFO] [stdout] 139 | |     task_id: &str,
[INFO] [stdout] 140 | |     new_status: TaskStatus,
[INFO] [stdout] ...   |
[INFO] [stdout] 221 | |     out
[INFO] [stdout] 222 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Update enhanced-format task status and metadata.`
[INFO] [stdout]     = help: ends near `Update the status and "Updated At" metadata of an enhanced-format task block.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/update.rs:137:1
[INFO] [stdout]     |
[INFO] [stdout] 137 | / pub fn update_enhanced_task_status(
[INFO] [stdout] 138 | |     contents: &str,
[INFO] [stdout] 139 | |     task_id: &str,
[INFO] [stdout] 140 | |     new_status: TaskStatus,
[INFO] [stdout] ...   |
[INFO] [stdout] 221 | |     out
[INFO] [stdout] 222 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Update the status and "Updated At" metadata of an enhanced-format task block.`
[INFO] [stdout]     = help: ends near `Update the status and "Updated At" metadata of an enhanced-format task block.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:228:1
[INFO] [stdout]     |
[INFO] [stdout] 228 | / pub struct TasksParseResult {
[INFO] [stdout] 229 | |     /// Detected file format.
[INFO] [stdout] 230 | |     pub format: TasksFormat,
[INFO] [stdout] 231 | |     /// Parsed tasks in source order.
[INFO] [stdout] ...   |
[INFO] [stdout] 238 | |     pub progress: ProgressInfo,
[INFO] [stdout] 239 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Parsed task tracking result.`
[INFO] [stdout]     = help: ends near `Output of parsing a `tasks.md` file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:228:1
[INFO] [stdout]     |
[INFO] [stdout] 228 | / pub struct TasksParseResult {
[INFO] [stdout] 229 | |     /// Detected file format.
[INFO] [stdout] 230 | |     pub format: TasksFormat,
[INFO] [stdout] 231 | |     /// Parsed tasks in source order.
[INFO] [stdout] ...   |
[INFO] [stdout] 238 | |     pub progress: ProgressInfo,
[INFO] [stdout] 239 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Output of parsing a `tasks.md` file.`
[INFO] [stdout]     = help: ends near `Output of parsing a `tasks.md` file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:215:1
[INFO] [stdout]     |
[INFO] [stdout] 215 | / pub struct WaveInfo {
[INFO] [stdout] 216 | |     /// Wave number.
[INFO] [stdout] 217 | |     pub wave: u32,
[INFO] [stdout] 218 | |     /// Other waves that must be complete before this wave is unlocked.
[INFO] [stdout] ...   |
[INFO] [stdout] 223 | |     pub depends_on_line_index: Option<usize>,
[INFO] [stdout] 224 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Parsed wave metadata from enhanced format.`
[INFO] [stdout]     = help: ends near `Wave metadata parsed from enhanced tasks files.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:215:1
[INFO] [stdout]     |
[INFO] [stdout] 215 | / pub struct WaveInfo {
[INFO] [stdout] 216 | |     /// Wave number.
[INFO] [stdout] 217 | |     pub wave: u32,
[INFO] [stdout] 218 | |     /// Other waves that must be complete before this wave is unlocked.
[INFO] [stdout] ...   |
[INFO] [stdout] 223 | |     pub depends_on_line_index: Option<usize>,
[INFO] [stdout] 224 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Wave metadata parsed from enhanced tasks files.`
[INFO] [stdout]     = help: ends near `Wave metadata parsed from enhanced tasks files.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:138:1
[INFO] [stdout]     |
[INFO] [stdout] 138 | / pub enum DiagnosticLevel {
[INFO] [stdout] 139 | |     /// The file is malformed and results may be incomplete.
[INFO] [stdout] 140 | |     Error,
[INFO] [stdout] 141 | |     /// The file is parseable but contains suspicious content.
[INFO] [stdout] 142 | |     Warning,
[INFO] [stdout] 143 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Common task domain types.`
[INFO] [stdout]     = help: ends near `Diagnostic severity.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:138:1
[INFO] [stdout]     |
[INFO] [stdout] 138 | / pub enum DiagnosticLevel {
[INFO] [stdout] 139 | |     /// The file is malformed and results may be incomplete.
[INFO] [stdout] 140 | |     Error,
[INFO] [stdout] 141 | |     /// The file is parseable but contains suspicious content.
[INFO] [stdout] 142 | |     Warning,
[INFO] [stdout] 143 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Diagnostic severity.`
[INFO] [stdout]     = help: ends near `Diagnostic severity.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:198:1
[INFO] [stdout]     |
[INFO] [stdout] 198 | / pub struct ProgressInfo {
[INFO] [stdout] 199 | |     /// Total tasks.
[INFO] [stdout] 200 | |     pub total: usize,
[INFO] [stdout] 201 | |     /// Completed tasks.
[INFO] [stdout] ...   |
[INFO] [stdout] 210 | |     pub remaining: usize,
[INFO] [stdout] 211 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Common task domain types.`
[INFO] [stdout]     = help: ends near `Summary counts computed from the parsed tasks.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:198:1
[INFO] [stdout]     |
[INFO] [stdout] 198 | / pub struct ProgressInfo {
[INFO] [stdout] 199 | |     /// Total tasks.
[INFO] [stdout] 200 | |     pub total: usize,
[INFO] [stdout] 201 | |     /// Completed tasks.
[INFO] [stdout] ...   |
[INFO] [stdout] 210 | |     pub remaining: usize,
[INFO] [stdout] 211 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Summary counts computed from the parsed tasks.`
[INFO] [stdout]     = help: ends near `Summary counts computed from the parsed tasks.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:125:1
[INFO] [stdout]     |
[INFO] [stdout] 125 | / pub struct TaskDiagnostic {
[INFO] [stdout] 126 | |     /// Severity level.
[INFO] [stdout] 127 | |     pub level: DiagnosticLevel,
[INFO] [stdout] 128 | |     /// Human-readable message.
[INFO] [stdout] ...   |
[INFO] [stdout] 133 | |     pub line: Option<usize>,
[INFO] [stdout] 134 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Common task domain types.`
[INFO] [stdout]     = help: ends near `A parse-time diagnostic emitted while reading a tasks file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:125:1
[INFO] [stdout]     |
[INFO] [stdout] 125 | / pub struct TaskDiagnostic {
[INFO] [stdout] 126 | |     /// Severity level.
[INFO] [stdout] 127 | |     pub level: DiagnosticLevel,
[INFO] [stdout] 128 | |     /// Human-readable message.
[INFO] [stdout] ...   |
[INFO] [stdout] 133 | |     pub line: Option<usize>,
[INFO] [stdout] 134 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `A parse-time diagnostic emitted while reading a tasks file.`
[INFO] [stdout]     = help: ends near `A parse-time diagnostic emitted while reading a tasks file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:157:1
[INFO] [stdout]     |
[INFO] [stdout] 157 | / pub struct TaskItem {
[INFO] [stdout] 158 | |     /// Task identifier (e.g. `1.1`).
[INFO] [stdout] 159 | |     pub id: String,
[INFO] [stdout] 160 | |     /// Task title/name.
[INFO] [stdout] ...   |
[INFO] [stdout] 183 | |     pub requirements: Vec<String>,
[INFO] [stdout] 184 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Common task domain types.`
[INFO] [stdout]     = help: ends near `A normalized task entry parsed from a tasks tracking file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:157:1
[INFO] [stdout]     |
[INFO] [stdout] 157 | / pub struct TaskItem {
[INFO] [stdout] 158 | |     /// Task identifier (e.g. `1.1`).
[INFO] [stdout] 159 | |     pub id: String,
[INFO] [stdout] 160 | |     /// Task title/name.
[INFO] [stdout] ...   |
[INFO] [stdout] 183 | |     pub requirements: Vec<String>,
[INFO] [stdout] 184 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `A normalized task entry parsed from a tasks tracking file.`
[INFO] [stdout]     = help: ends near `A normalized task entry parsed from a tasks tracking file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:188:1
[INFO] [stdout]     |
[INFO] [stdout] 188 | / pub enum TaskKind {
[INFO] [stdout] 189 | |     #[default]
[INFO] [stdout] 190 | |     /// A runnable task.
[INFO] [stdout] 191 | |     Normal,
[INFO] [stdout] 192 | |     /// A checkpoint that requires explicit approval.
[INFO] [stdout] 193 | |     Checkpoint,
[INFO] [stdout] 194 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Common task domain types.`
[INFO] [stdout]     = help: ends near `Task classification.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]    --> src/tasks/parse.rs:188:1
[INFO] [stdout]     |
[INFO] [stdout] 188 | / pub enum TaskKind {
[INFO] [stdout] 189 | |     #[default]
[INFO] [stdout] 190 | |     /// A runnable task.
[INFO] [stdout] 191 | |     Normal,
[INFO] [stdout] 192 | |     /// A checkpoint that requires explicit approval.
[INFO] [stdout] 193 | |     Checkpoint,
[INFO] [stdout] 194 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = help: the way this is parsed might change in the future
[INFO] [stdout]     = help: starts near `Task classification.`
[INFO] [stdout]     = help: ends near `Task classification.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/parse.rs:79:1
[INFO] [stdout]    |
[INFO] [stdout] 79 | / pub enum TaskStatus {
[INFO] [stdout] 80 | |     /// Not started.
[INFO] [stdout] 81 | |     Pending,
[INFO] [stdout] 82 | |     /// Currently being worked.
[INFO] [stdout] ...  |
[INFO] [stdout] 87 | |     Shelved,
[INFO] [stdout] 88 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Common task domain types.`
[INFO] [stdout]    = help: ends near `Status values supported by Ito task tracking.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/parse.rs:79:1
[INFO] [stdout]    |
[INFO] [stdout] 79 | / pub enum TaskStatus {
[INFO] [stdout] 80 | |     /// Not started.
[INFO] [stdout] 81 | |     Pending,
[INFO] [stdout] 82 | |     /// Currently being worked.
[INFO] [stdout] ...  |
[INFO] [stdout] 87 | |     Shelved,
[INFO] [stdout] 88 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Status values supported by Ito task tracking.`
[INFO] [stdout]    = help: ends near `Status values supported by Ito task tracking.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/parse.rs:70:1
[INFO] [stdout]    |
[INFO] [stdout] 70 | / pub enum TasksFormat {
[INFO] [stdout] 71 | |     /// Enhanced wave-based format.
[INFO] [stdout] 72 | |     Enhanced,
[INFO] [stdout] 73 | |     /// Legacy checkbox list format.
[INFO] [stdout] 74 | |     Checkbox,
[INFO] [stdout] 75 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `Common task domain types.`
[INFO] [stdout]    = help: ends near `The detected format of a `tasks.md` file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: markdown element starts on one item and ends on another
[INFO] [stdout]   --> src/tasks/parse.rs:70:1
[INFO] [stdout]    |
[INFO] [stdout] 70 | / pub enum TasksFormat {
[INFO] [stdout] 71 | |     /// Enhanced wave-based format.
[INFO] [stdout] 72 | |     Enhanced,
[INFO] [stdout] 73 | |     /// Legacy checkbox list format.
[INFO] [stdout] 74 | |     Checkbox,
[INFO] [stdout] 75 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: the way this is parsed might change in the future
[INFO] [stdout]    = help: starts near `The detected format of a `tasks.md` file.`
[INFO] [stdout]    = help: ends near `The detected format of a `tasks.md` file.`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not document `ito-domain`
[INFO] running `Command { std: "docker" "inspect" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95", kill_on_drop: false }`
[INFO] [stdout] 5d1b154f0b03566942a8c309284b5a24d4f300e9223a65be97660c8730cabf95
