[INFO] cloning repository https://github.com/emilhals/chess-trainer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/emilhals/chess-trainer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Femilhals%2Fchess-trainer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Femilhals%2Fchess-trainer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] eec8dbf004531173c9e172cc7ca08c2bad44ae16
[INFO] checking emilhals/chess-trainer against 3154cc1a3e6424e44f438a95007d043ed5ceaaf6 for pr-133502-30
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Femilhals%2Fchess-trainer" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/emilhals/chess-trainer
[INFO] finished tweaking git repo https://github.com/emilhals/chess-trainer
[INFO] tweaked toml for git repo https://github.com/emilhals/chess-trainer written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/emilhals/chess-trainer on toolchain 3154cc1a3e6424e44f438a95007d043ed5ceaaf6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/emilhals/chess-trainer 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" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d
[INFO] running `Command { std: "docker" "start" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d", 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" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d", 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" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking bitflags v2.13.1
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]     Checking either v1.17.0
[INFO] [stderr]     Checking hashbrown v0.17.1
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling instability v0.3.13
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]     Checking unicode-segmentation v1.13.3
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking critical-section v1.2.0
[INFO] [stderr]     Checking addr2line v0.25.1
[INFO] [stderr]     Checking mio v1.2.2
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking object v0.37.3
[INFO] [stderr]     Checking num_threads v0.1.7
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking time-core v0.1.9
[INFO] [stderr]     Checking deranged v0.5.8
[INFO] [stderr]     Checking num-conv v0.2.2
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking line-clipping v0.3.8
[INFO] [stderr]    Compiling eyre v0.6.14
[INFO] [stderr]    Compiling color-spantrace v0.3.0
[INFO] [stderr]     Checking toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking serde_spanned v1.1.1
[INFO] [stderr]     Checking toml_writer v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking indenter v0.3.4
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]     Checking chacha20 v0.10.2
[INFO] [stderr]     Checking btoi v0.5.0
[INFO] [stderr]     Checking lru v0.18.2
[INFO] [stderr]     Checking uuid v1.24.0
[INFO] [stderr]     Checking toml v1.1.4+spec-1.1.0
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]     Checking sysinfo v0.38.4
[INFO] [stderr]     Checking console v0.15.11
[INFO] [stderr]     Checking compact_str v0.9.1
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]     Checking vte v0.14.1
[INFO] [stderr]     Checking shakmaty v0.30.1
[INFO] [stderr]     Checking rand v0.10.2
[INFO] [stderr]     Checking strip-ansi-escapes v0.2.1
[INFO] [stderr]     Checking tracing-error v0.2.1
[INFO] [stderr]     Checking unicode-truncate v2.0.1
[INFO] [stderr]     Checking time v0.3.55
[INFO] [stderr]    Compiling darling_core v0.24.0
[INFO] [stderr]     Checking backtrace v0.3.76
[INFO] [stderr]    Compiling darling_core v0.21.3
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]     Checking better-panic v0.3.0
[INFO] [stderr]     Checking color-eyre v0.6.5
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]     Checking derive_more v2.1.1
[INFO] [stderr]     Checking crossterm v0.29.0
[INFO] [stderr]     Checking kasuari v0.4.12
[INFO] [stderr]     Checking strum v0.28.0
[INFO] [stderr]     Checking ratatui-core v0.1.2
[INFO] [stderr]    Compiling darling_macro v0.21.3
[INFO] [stderr]    Compiling darling v0.21.3
[INFO] [stderr]    Compiling derive_setters v0.1.9
[INFO] [stderr]    Compiling darling_macro v0.24.0
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]    Compiling darling v0.24.0
[INFO] [stderr]     Checking ratatui-widgets v0.3.2
[INFO] [stderr]     Checking ratatui-crossterm v0.1.2
[INFO] [stderr]     Checking human-panic v2.0.8
[INFO] [stderr]     Checking ratatui-macros v0.7.2
[INFO] [stderr]     Checking ratatui v0.30.2
[INFO] [stderr]     Checking chess-trainer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0583]: file not found for module `player`
[INFO] [stdout]  --> src/app/mod.rs:3:1
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub mod player;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: to create the module `player`, create file "src/app/player.rs" or "src/app/player/mod.rs"
[INFO] [stdout]   = note: if there is a `mod player` elsewhere in the crate already, import it with `use crate::...` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0583]: file not found for module `player`
[INFO] [stdout]  --> src/app/mod.rs:3:1
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub mod player;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: to create the module `player`, create file "src/app/player.rs" or "src/app/player/mod.rs"
[INFO] [stdout]   = note: if there is a `mod player` elsewhere in the crate already, import it with `use crate::...` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved imports `crate::constants::BLACK_PLAYER_UNICODE`, `crate::constants::WHITE_PLAYER_UNICODE`, `crate::ui::footer::render_footer`
[INFO] [stdout]   --> src/ui/menu/main_menu.rs:12:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |     constants::{BLACK_PLAYER_UNICODE, LOGO, WHITE_PLAYER_UNICODE},
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^        ^^^^^^^^^^^^^^^^^^^^ no `WHITE_PLAYER_UNICODE` in `constants`
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 no `BLACK_PLAYER_UNICODE` in `constants`
[INFO] [stdout] ...
[INFO] [stdout] 15 |     ui::footer::render_footer,
[INFO] [stdout]    |     ^^^^^^^^^^^^-------------
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 no `render_footer` in `ui::footer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved imports `crate::constants::BLACK_PLAYER_UNICODE`, `crate::constants::WHITE_PLAYER_UNICODE`, `crate::ui::footer::render_footer`
[INFO] [stdout]   --> src/ui/menu/main_menu.rs:12:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |     constants::{BLACK_PLAYER_UNICODE, LOGO, WHITE_PLAYER_UNICODE},
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^        ^^^^^^^^^^^^^^^^^^^^ no `WHITE_PLAYER_UNICODE` in `constants`
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 no `BLACK_PLAYER_UNICODE` in `constants`
[INFO] [stdout] ...
[INFO] [stdout] 15 |     ui::footer::render_footer,
[INFO] [stdout]    |     ^^^^^^^^^^^^-------------
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 no `render_footer` in `ui::footer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:33:45
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let old_streak = self.trainer.state.current_streak;
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `wrong_moves` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:34:50
[INFO] [stdout]    |
[INFO] [stdout] 34 |         let old_wrong_moves = self.trainer.state.wrong_moves;
[INFO] [stdout]    |                                                  ^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:33:45
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let old_streak = self.trainer.state.current_streak;
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `wrong_moves` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:34:50
[INFO] [stdout]    |
[INFO] [stdout] 34 |         let old_wrong_moves = self.trainer.state.wrong_moves;
[INFO] [stdout]    |                                                  ^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/app/mod.rs:36:22
[INFO] [stdout]    |
[INFO] [stdout] 36 |         self.trainer.next_line(&self.player_data);
[INFO] [stdout]    |                      ^^^^^^^^^ ----------------- unexpected argument
[INFO] [stdout]    |
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/trainer/mod.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn next_line(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]    |
[INFO] [stdout] 36 -         self.trainer.next_line(&self.player_data);
[INFO] [stdout] 36 +         self.trainer.next_line();
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:42:31
[INFO] [stdout]    |
[INFO] [stdout] 42 |         if self.trainer.state.current_streak > old_streak {
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:44:71
[INFO] [stdout]    |
[INFO] [stdout] 44 |                 .set_highest_streak(&opening_name, self.trainer.state.current_streak as u32);
[INFO] [stdout]    |                                                                       ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 0 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/app/mod.rs:36:22
[INFO] [stdout]    |
[INFO] [stdout] 36 |         self.trainer.next_line(&self.player_data);
[INFO] [stdout]    |                      ^^^^^^^^^ ----------------- unexpected argument
[INFO] [stdout]    |
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/trainer/mod.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn next_line(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] help: remove the extra argument
[INFO] [stdout]    |
[INFO] [stdout] 36 -         self.trainer.next_line(&self.player_data);
[INFO] [stdout] 36 +         self.trainer.next_line();
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:42:31
[INFO] [stdout]    |
[INFO] [stdout] 42 |         if self.trainer.state.current_streak > old_streak {
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:44:71
[INFO] [stdout]    |
[INFO] [stdout] 44 |                 .set_highest_streak(&opening_name, self.trainer.state.current_streak as u32);
[INFO] [stdout]    |                                                                       ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0369]: binary operation `==` cannot be applied to type `TrainerMode`
[INFO] [stdout]   --> src/app/mod.rs:47:50
[INFO] [stdout]    |
[INFO] [stdout] 47 |         if self.trainer.state.mode.selected_mode == TrainerMode::Learn && old_wrong_moves == 0 {
[INFO] [stdout]    |            ------------------------------------- ^^ ------------------ TrainerMode
[INFO] [stdout]    |            |
[INFO] [stdout]    |            TrainerMode
[INFO] [stdout]    |
[INFO] [stdout] note: an implementation of `PartialEq` might be missing for `TrainerMode`
[INFO] [stdout]   --> src/state/trainer_state.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum TrainerMode {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^ must implement `PartialEq`
[INFO] [stdout] help: consider annotating `TrainerMode` with `#[derive(PartialEq)]`
[INFO] [stdout]   --> src/state/trainer_state.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 + #[derive(PartialEq)]
[INFO] [stdout]  8 | pub enum TrainerMode {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0369]: binary operation `==` cannot be applied to type `TrainerMode`
[INFO] [stdout]   --> src/app/mod.rs:47:50
[INFO] [stdout]    |
[INFO] [stdout] 47 |         if self.trainer.state.mode.selected_mode == TrainerMode::Learn && old_wrong_moves == 0 {
[INFO] [stdout]    |            ------------------------------------- ^^ ------------------ TrainerMode
[INFO] [stdout]    |            |
[INFO] [stdout]    |            TrainerMode
[INFO] [stdout]    |
[INFO] [stdout] note: an implementation of `PartialEq` might be missing for `TrainerMode`
[INFO] [stdout]   --> src/state/trainer_state.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum TrainerMode {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^ must implement `PartialEq`
[INFO] [stdout] help: consider annotating `TrainerMode` with `#[derive(PartialEq)]`
[INFO] [stdout]   --> src/state/trainer_state.rs:7:1
[INFO] [stdout]    |
[INFO] [stdout]  7 + #[derive(PartialEq)]
[INFO] [stdout]  8 | pub enum TrainerMode {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `next_line_at` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:82:56
[INFO] [stdout]    |
[INFO] [stdout] 82 |         if let Some(next_line_at) = self.trainer.state.next_line_at {
[INFO] [stdout]    |                                                        ^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `next_line_at` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:82:56
[INFO] [stdout]    |
[INFO] [stdout] 82 |         if let Some(next_line_at) = self.trainer.state.next_line_at {
[INFO] [stdout]    |                                                        ^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `next_line_at` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:84:36
[INFO] [stdout]    |
[INFO] [stdout] 84 |                 self.trainer.state.next_line_at = None;
[INFO] [stdout]    |                                    ^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `next_line_at` on type `TrainerState`
[INFO] [stdout]   --> src/app/mod.rs:84:36
[INFO] [stdout]    |
[INFO] [stdout] 84 |                 self.trainer.state.next_line_at = None;
[INFO] [stdout]    |                                    ^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/trainer/ui/render.rs:23:83
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let streak_paragraph = Paragraph::new(format!("Streak: {}", trainer.state.current_streak));
[INFO] [stdout]    |                                                                                   ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `current_streak` on type `TrainerState`
[INFO] [stdout]   --> src/trainer/ui/render.rs:23:83
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let streak_paragraph = Paragraph::new(format!("Streak: {}", trainer.state.current_streak));
[INFO] [stdout]    |                                                                                   ^^^^^^^^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `mode`, `current_opening_name`, `current_line_index`, `current_move_index`, `current_instruction_index` ... and 7 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/trainer/ui/render.rs:77:53
[INFO] [stdout]     |
[INFO] [stdout]  77 |         let formatted_title = Openings::format_name(title.to_string());
[INFO] [stdout]     |                               --------------------- ^^^^^^^^^^^^^^^^^ expected `&str`, found `String`
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]    --> src/trainer/openings.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn format_name(name: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^ ----------
[INFO] [stdout] help: try removing the method call
[INFO] [stdout]     |
[INFO] [stdout]  77 -         let formatted_title = Openings::format_name(title.to_string());
[INFO] [stdout]  77 +         let formatted_title = Openings::format_name(title);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/trainer/ui/render.rs:77:53
[INFO] [stdout]     |
[INFO] [stdout]  77 |         let formatted_title = Openings::format_name(title.to_string());
[INFO] [stdout]     |                               --------------------- ^^^^^^^^^^^^^^^^^ expected `&str`, found `String`
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]    --> src/trainer/openings.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn format_name(name: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^ ----------
[INFO] [stdout] help: try removing the method call
[INFO] [stdout]     |
[INFO] [stdout]  77 -         let formatted_title = Openings::format_name(title.to_string());
[INFO] [stdout]  77 +         let formatted_title = Openings::format_name(title);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_openings` found for struct `openings::Openings` in the current scope
[INFO] [stdout]   --> src/ui/menu/main_menu.rs:50:41
[INFO] [stdout]    |
[INFO] [stdout] 50 |     let openings = app.trainer.openings.get_openings();
[INFO] [stdout]    |                                         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/trainer/openings.rs:53:1
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct Openings(HashMap<String, Opening>);
[INFO] [stdout]    | ------------------- method `get_openings` not found for this struct
[INFO] [stdout]    |
[INFO] [stdout] help: there is a method `get_opening` with a similar name, but with different arguments
[INFO] [stdout]   --> src/trainer/openings.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub fn get_opening(&self, opening_name: &str) -> Option<&Opening> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `player` on type `Opening`
[INFO] [stdout]    --> src/ui/menu/main_menu.rs:144:40
[INFO] [stdout]     |
[INFO] [stdout] 144 |     let player_color = match opening.1.player.as_str() {
[INFO] [stdout]     |                                        ^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available field is: `lines`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_openings` found for struct `openings::Openings` in the current scope
[INFO] [stdout]   --> src/ui/menu/main_menu.rs:50:41
[INFO] [stdout]    |
[INFO] [stdout] 50 |     let openings = app.trainer.openings.get_openings();
[INFO] [stdout]    |                                         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/trainer/openings.rs:53:1
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct Openings(HashMap<String, Opening>);
[INFO] [stdout]    | ------------------- method `get_openings` not found for this struct
[INFO] [stdout]    |
[INFO] [stdout] help: there is a method `get_opening` with a similar name, but with different arguments
[INFO] [stdout]   --> src/trainer/openings.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub fn get_opening(&self, opening_name: &str) -> Option<&Opening> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `player` on type `Opening`
[INFO] [stdout]    --> src/ui/menu/main_menu.rs:144:40
[INFO] [stdout]     |
[INFO] [stdout] 144 |     let player_color = match opening.1.player.as_str() {
[INFO] [stdout]     |                                        ^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available field is: `lines`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/main.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut app = App::new(trainer);
[INFO] [stdout]    |                   ^^^^^^^^--------- argument #2 is missing
[INFO] [stdout]    |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]   --> src/app/mod.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(trainer: Trainer, player_data: PlayerData) -> Self {
[INFO] [stdout]    |            ^^^                   -----------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut app = App::new(trainer, /* player_data */);
[INFO] [stdout]    |                                   +++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/main.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut app = App::new(trainer);
[INFO] [stdout]    |                   ^^^^^^^^--------- argument #2 is missing
[INFO] [stdout]    |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]   --> src/app/mod.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(trainer: Trainer, player_data: PlayerData) -> Self {
[INFO] [stdout]    |            ^^^                   -----------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut app = App::new(trainer, /* player_data */);
[INFO] [stdout]    |                                   +++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/trainer/board.rs:81:21
[INFO] [stdout]    |
[INFO] [stdout] 81 |                 Err(e) => {
[INFO] [stdout]    |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/trainer/board.rs:81:21
[INFO] [stdout]    |
[INFO] [stdout] 81 |                 Err(e) => {
[INFO] [stdout]    |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `role_from`
[INFO] [stdout]   --> src/trainer/moves.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 |         let Some(role_from) = self.board.get_role_at_square(&from) else {
[INFO] [stdout]    |                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_role_from`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `role_to`
[INFO] [stdout]   --> src/trainer/moves.rs:17:13
[INFO] [stdout]    |
[INFO] [stdout] 17 |         let role_to = self.board.get_role_at_square(&to);
[INFO] [stdout]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_role_to`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `executed_move`
[INFO] [stdout]   --> src/trainer/moves.rs:66:18
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let Some(executed_move) = self
[INFO] [stdout]    |                  ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_executed_move`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `role_from`
[INFO] [stdout]   --> src/trainer/moves.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 |         let Some(role_from) = self.board.get_role_at_square(&from) else {
[INFO] [stdout]    |                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_role_from`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `role_to`
[INFO] [stdout]   --> src/trainer/moves.rs:17:13
[INFO] [stdout]    |
[INFO] [stdout] 17 |         let role_to = self.board.get_role_at_square(&to);
[INFO] [stdout]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_role_to`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `executed_move`
[INFO] [stdout]   --> src/trainer/moves.rs:66:18
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let Some(executed_move) = self
[INFO] [stdout]    |                  ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_executed_move`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0369, E0432, E0583, E0599, E0609.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0369, E0432, E0583, E0599, E0609.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `chess-trainer` (bin "chess-trainer" test) due to 15 previous errors; 4 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `chess-trainer` (bin "chess-trainer") due to 15 previous errors; 4 warnings emitted
[INFO] [stderr] warning: unused dependency `human-panic`
[INFO] [stderr]  --> Cargo.toml:5:1
[INFO] [stderr]   |
[INFO] [stderr] 5 | human-panic = "2.0.8"
[INFO] [stderr]   | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `human-panic`
[INFO] [stderr] warning: `chess-trainer` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "inspect" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d", kill_on_drop: false }`
[INFO] [stdout] ed0d9024c423b088781cdd77db70ae71cc53c9a6d1188e1df22710e9a3bef30d
