CI: SUCCESS subplot

Table of Contents

Run log

Plan, inside VM without network

plan: Executor starts
After 0.00 seconds at 2026-03-09 11:31:44ZProgram: ambient-execute-plan
Version: 0.13.1@52633e5
plan: Runnable plan
After 0.00 seconds at 2026-03-09 11:31:44Z
steps:
- action: mkdir
  pathname: /ci
- action: mkdir
  pathname: /ci/artifacts
- action: tar_extract
  archive: /dev/vdc
  directory: /ci/src
- action: tar_extract
  archive: /dev/vdf
  directory: /ci/deps
- action: tar_extract
  archive: /dev/vde
  directory: /ci/cache
- action: shell
  shell: ln -sf /ci /workspace
- action: shell
  shell: git config --global user.name 'Ambient CI'
- action: shell
  shell: git config --global user.email ambient@example.com
- action: cargo_fmt
- action: cargo_clippy
- action: shell
  shell: |
    make OFFLINE="--offline"
    cp -a doc/* /ci/artifacts/.

    # Clean up after tests and documentation building.
    git reset --hard
    git clean -fdx
    git status --ignored
- action: custom
  name: dch
  args:
    debemail: liw@liw.fi
    debfullname: Lars Wirzenius
- action: deb
  packages: .
- action: shell
  shell: |
    find /ci/artifacts
- action: tar_create
  archive: /dev/vde
  directory: /ci/cache
- action: tar_create
  archive: /dev/vdd
  directory: /ci/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /ci
source_dir: /ci/src
deps_dir: /ci/deps
cache_dir: /ci/cache
artifacts_dir: /ci/artifacts
plan: Successful action mkdir: /ci
After 0.02 seconds at 2026-03-09 11:31:44Z
  • plan: Start action mkdir: /ci
    After 0.00 seconds at 2026-03-09 11:31:44Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
  • plan: Action succeeded mkdir: /ci
    After 0.00 seconds at 2026-03-09 11:31:44Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
plan: Successful action mkdir: /ci/artifacts
After 0.03 seconds at 2026-03-09 11:31:44Z
  • plan: Start action mkdir: /ci/artifacts
    After 0.00 seconds at 2026-03-09 11:31:44Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
  • plan: Action succeeded mkdir: /ci/artifacts
    After 0.00 seconds at 2026-03-09 11:31:44Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
plan: Successful action tar_extract
After 0.03 seconds at 2026-03-09 11:31:44Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-09 11:31:44Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-09 11:31:44Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
plan: Successful action tar_extract
After 0.06 seconds at 2026-03-09 11:31:44Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-09 11:31:44Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-09 11:31:46Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
plan: Successful action tar_extract
After 1.43 seconds at 2026-03-09 11:31:46Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-09 11:31:46Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-09 11:31:51Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action shell: ln -sf /ci /workspace
After 7.02 seconds at 2026-03-09 11:31:51Z
  • plan: Start action shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-09 11:31:51Z
    • bash
    • -c
    • set -xeuo pipefail ln -sf /ci /workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Exit code: 0
    Stderr:
    + ln -sf /ci /workspace
    
  • plan: Action succeeded shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
plan: Successful action shell: git config --global user.name 'Ambient CI'
After 7.04 seconds at 2026-03-09 11:31:51Z
  • plan: Start action shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-09 11:31:51Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.name 'Ambient CI'
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Exit code: 0
    Stderr:
    + git config --global user.name 'Ambient CI'
    
  • plan: Action succeeded shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
plan: Successful action shell: git config --global user.email ambient@example.com
After 7.05 seconds at 2026-03-09 11:31:51Z
  • plan: Start action shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-09 11:31:51Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.email ambient@example.com
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Exit code: 0
    Stderr:
    + git config --global user.email ambient@example.com
    
  • plan: Action succeeded shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-03-09 11:31:51Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
plan: Successful action cargo_fmt
After 7.07 seconds at 2026-03-09 11:31:51Z
  • plan: Start action cargo_fmt
    After 0.00 seconds at 2026-03-09 11:31:51Z
    CargoFmt(
        CargoFmt,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:51Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    cargo 1.94.0 (85eff7c80 2026-01-15)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • cargo
    • fmt
    • --check
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
  • plan: Action succeeded cargo_fmt
    After 0.00 seconds at 2026-03-09 11:31:52Z
    CargoFmt(
        CargoFmt,
    )
plan: Successful action cargo_clippy
After 7.51 seconds at 2026-03-09 11:31:52Z
  • plan: Start action cargo_clippy
    After 0.00 seconds at 2026-03-09 11:31:52Z
    CargoClippy(
        CargoClippy,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    cargo 1.94.0 (85eff7c80 2026-01-15)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:52Z
    Exit code: 0
    Stdout:
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-09 11:31:52Z
    • cargo
    • clippy
    • --offline
    • --locked
    • --workspace
    • --all-targets
    • --no-deps
    • --
    • --deny
    • warnings
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:31:57Z
    Exit code: 0
    Stderr:
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
       Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
        Checking subplot-bin v0.14.0 (/ci/src/bin)
        Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.80s
    
  • plan: Action succeeded cargo_clippy
    After 0.00 seconds at 2026-03-09 11:31:57Z
    CargoClippy(
        CargoClippy,
    )
plan: Successful action shell: make OFFLINE="--offline" cp -a doc/* /ci/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
After 12.60 seconds at 2026-03-09 11:31:57Z
  • plan: Start action shell: make OFFLINE="--offline" cp -a doc/* /ci/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
    After 0.00 seconds at 2026-03-09 11:31:57Z
    Shell(
        Shell {
            shell: "make OFFLINE=\"--offline\"\ncp -a doc/* /ci/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-09 11:31:57Z
    • bash
    • -c
    • set -xeuo pipefail make OFFLINE="--offline" cp -a doc/* /ci/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:32:35Z
    Exit code: 0
    Stdout:
    which cargo
    /root/.cargo/bin/cargo
    which dot
    /usr/bin/dot
    which plantuml
    /usr/bin/plantuml
    which python3
    /usr/bin/python3
    which rustc
    /root/.cargo/bin/rustc
    which rustfmt
    /root/.cargo/bin/rustfmt
    which tidy
    /usr/bin/tidy
    if which shellcheck; then shellcheck *.sh; fi
    /usr/bin/shellcheck
    if cargo clippy --version; then \
        cargo clippy --locked --offline --workspace --all-targets -- -Dwarnings && \
    	cd examples/seq && cargo clippy --workspace --all-targets -- -Dwarnings; \
    fi
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    rm -rf "/ci/src/inst"
    cargo install --target x86_64-unknown-linux-musl --locked --offline --path=bin --root="/ci/src/inst" --debug
    mv "/ci/src/inst"/bin/* "/ci/src/inst"
    rm -rf "/ci/src/inst"/.crate*  "/ci/src/inst"/bin
    cd share/python/template && python3 context_tests.py
    cd share/python/template && python3 encoding_tests.py
    env SUBPLOT_DIR="/ci/src/inst" cargo test --target x86_64-unknown-linux-musl --workspace -- 
    
    running 108 tests
    test bindings::test_binding::creates_new ... ok
    test bindings::test_binding::does_not_match_with_wrong_kind ... ok
    test bindings::test_binding::case_sensitive_mismatch ... ok
    test bindings::test_binding::does_not_match_with_wrong_text ... ok
    test bindings::test_binding::match_with_fixed_pattern ... ok
    test bindings::test_binding::equal ... ok
    test bindings::test_binding::not_equal ... ok
    test bindings::test_bindings::add_from_yaml_notices_multiple_keywords ... ok
    test bindings::test_bindings::adds_binding ... ok
    test bindings::test_binding::match_with_regex ... ok
    test bindings::test_bindings::does_not_find_match_for_unmatching_kind ... ok
    test bindings::test_bindings::does_not_find_match_for_unmatching_pattern ... ok
    test bindings::test_bindings::finds_match_for_fixed_string_pattern ... ok
    test bindings::test_bindings::finds_match_for_regexp_pattern ... ok
    test bindings::test_bindings::has_no_bindings_initially ... ok
    test bindings::test_bindings::two_matching_bindings ... ok
    test bindings::test_bindings::adds_from_yaml ... ok
    test bindings::test_bindings::typemap_must_match_pattern ... ok
    test bindings::test_regex_from_simple_pattern::returns_boring_pattern_as_is ... ok
    test bindings::test_regex_from_simple_pattern::returns_empty_string_as_is ... ok
    test bindings::test_regex_from_simple_pattern::kindless_simple_pattern ... ok
    test bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace ... ok
    test bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace_before_capture ... ok
    test bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace ... ok
    test bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace_before_capture ... ok
    test bindings::test_regex_from_simple_pattern::returns_pattern_with_regexp_chars_escaped ... ok
    test bindings::test_regex_from_simple_pattern::simple_int_pattern ... ok
    test bindings::test_regex_from_simple_pattern::simple_number_pattern ... ok
    test bindings::test_regex_from_simple_pattern::simple_text_pattern ... ok
    test bindings::test_regex_from_simple_pattern::simple_word_pattern ... ok
    test bindings::test_regex_from_simple_pattern::typemap_and_pattern_kind_must_match ... ok
    test bindings::test_regex_from_simple_pattern::typemap_checked_on_pattern_parse_and_default_agrees ... ok
    test bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_default ... ok
    test bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_explicit ... ok
    test bindings::test_regex_from_simple_pattern::typemap_used_when_kind_not_present ... ok
    test blockattr::test::empty_braces ... ok
    test blockattr::test::empty_string ... ok
    test blockattr::test::just_word ... ok
    test blockattr::test::open_brace_without_close ... ok
    test blockattr::test::parse_one_dotted_word ... ok
    test blockattr::test::parse_one_id ... ok
    test blockattr::test::parse_one_kv ... ok
    test blockattr::test::parse_one_kv_with_double_quotes ... ok
    test blockattr::test::parse_one_kv_with_single_quotes ... ok
    test blockattr::test::parse_one_word ... ok
    test blockattr::test::two_ids ... ok
    test blockattr::test::two_words ... ok
    test codegen::test::verify_commentsafe_filter ... ok
    test codegen::test::verify_name_slugification ... ok
    test html::test_tag::can_self_close ... ok
    test html::test_tag::cannot_self_close ... ok
    test matches::test::returns_text ... ok
    test matches::test::returns_uncaptured ... ok
    test matches::test_partial_steps::different_captured_texts_dont_match ... ok
    test matches::test_partial_steps::different_uncaptured_texts_dont_match ... ok
    test matches::test_partial_steps::differently_captured_texts_dont_match ... ok
    test matches::test_partial_steps::differently_named_captured_texts_dont_match ... ok
    test matches::test_partial_steps::identical_captured_texts_match ... ok
    test matches::test_partial_steps::identical_uncaptured_texts_match ... ok
    test md::test::finds_block_classes ... ok
    test md::test::finds_embedded_files ... ok
    test md::test::finds_images ... ok
    test md::test::finds_no_blocks_in_empty_doc ... ok
    test md::test::finds_no_classes_when_no_blocks_have_them ... ok
    test md::test::finds_no_embedded_files_in_empty_doc ... ok
    test md::test::finds_no_images_in_empty_doc ... ok
    test md::test::finds_no_scenarios_in_empty_doc ... ok
    test md::test::finds_scenarios ... ok
    test md::test::loads_empty_doc ... ok
    test md::test::parses_auto_as_auto ... ok
    test md::test::parses_empty_as_error ... ok
    test md::test::parses_garbage_as_error ... ok
    test md::test::parses_no_as_no ... ok
    test md::test::parses_no_auto_newline_as_auto ... ok
    test md::test::parses_yes_as_yes ... ok
    test md::test_extract::returns_error_if_scenario_has_no_title ... ok
    test md::test_extract::returns_nothing_if_there_is_no_scenario ... ok
    test md::test_extract::returns_parent_section_with_scenario_snippet ... ok
    test md::test_extract::returns_scenario_if_there_is_one ... ok
    test md::test_extract::skips_scenarioless_deeper_headings ... ok
    test md::test_extract::skips_scenarioless_parent_heading ... ok
    test md::test_extract::skips_scenarioless_section_in_favour_of_same_level ... ok
    test metadata::test::full_meta ... ok
    test scenarios::filtertest::exclude_slow ... ok
    test scenarios::filtertest::exclude_unimportant_slow ... ok
    test scenarios::filtertest::include_all ... ok
    test scenarios::filtertest::include_fast ... ok
    test scenarios::filtertest::include_none ... ok
    test scenarios::test::adds_step ... ok
    test scenarios::test::has_no_steps_initially ... ok
    test scenarios::test::has_title ... ok
    test steps::test::fails_to_parse_and ... ok
    test steps::test::parses_and ... ok
    test steps::test::parses_given ... ok
    test steps::test::parses_given_with_extra_spaces ... ok
    test steps::test::parses_then ... ok
    test steps::test::parses_when ... ok
    test steps::test_steps_parser::empty_string ... ok
    test steps::test_steps_parser::preserve_nonascii_whitespace ... ok
    test steps::test_steps_parser::simple ... ok
    test steps::test_steps_parser::two_simple ... ok
    test templatespec::test::new_from_yaml ... ok
    test toc::test_numberer::numbering ... ok
    test toc::test_slugs::short_and_simple ... ok
    test toc::test_slugs::unique_for_identical_simple_headings ... ok
    test toc::test_toc::iterate ... ok
    test toc::test_toc::uses_given_slug ... ok
    test bindings::test_regex_from_simple_pattern::simple_uint_pattern ... ok
    
    test result: ok. 108 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s
    
    
    running 1 test
    test bindings_microbenchmark ... ok
    
    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.28s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 4 tests
    test more_than_one_number ... ok
    test no_arguments ... ok
    test not_a_number ... ok
    test one_number ... ok
    
    test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 7 tests
    test create_on_disk_files_from_embedded_files ... ok
    test directories ... ok
    test file_and_directory_removal ... ok
    test file_equality ... ok
    test file_metadata ... ok
    test file_modification_time ... ok
    test file_contents ... ok
    
    test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
    
    
    running 21 tests
    test check_stderr_doesn_t_contain_sub_string ... ok
    test check_stderr_doesn_t_match_regular_expressions ... ok
    test check_stderr_is_exactly_as_wanted ... ok
    test check_stderr_is_not_exactly_something ... ok
    test check_stderr_using_sub_string_search ... ok
    test check_stderr_using_regular_expressions ... ok
    test check_stdout_doesn_t_contain_sub_string ... ok
    test check_stdout_doesn_t_match_regular_expression ... ok
    test check_stdout_is_exactly_as_wanted ... ok
    test check_stdout_is_not_exactly_something ... ok
    test check_stdout_using_regular_expressions ... ok
    test check_stdout_using_sub_string_search ... ok
    test check_we_can_prepend_to__path ... ok
    test execution_in_a_sub_directory_does_not_affect_home ... ok
    test failed_execution ... ok
    test failed_execution_in_a_sub_directory ... ok
    test stdin_comes_from_a_named_file ... ok
    test stdin_contains_exactly ... ok
    test setting_and_clearing_of_environment_variables ... ok
    test successful_execution_in_a_sub_directory ... ok
    test successful_execution ... ok
    
    test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
    
    
    running 28 tests
    test capture_using_regular_expressions ... ok
    test all_the_keywords ... ok
    test capture_using_simple_patterns ... ok
    test cleanup_functions_get_called_on_failure__python_ ... ok
    test code_generator_gives_an_error_if_input_document_lacks_title ... ok
    test cleanup_functions_gets_called_on_success__python_ ... ok
    test examples_are_not_files ... ok
    test empty_lines_in_scenarios ... ok
    test files_not_in_current_working_directory ... ok
    test lowest_level_heading_is_name_of_scenario ... ok
    test missing_functions_file ... ok
    test misuse_of_continuation_keywords ... ok
    test next_heading_at_higher_level_starts_new_scenario ... ok
    test no_scenarios_means_codegen_fails ... ok
    test no_template_means_you_can_docgen_but_not_codegen ... ok
    test next_heading_at_same_level_starts_new_scenario ... ok
    test recall_values_for_use_in_later_steps ... ok
    test running_only_chosen_scenarios_with_python ... ok
    test simple_patterns_with_regex_metacharacters__allowed_case ... ok
    test simple_patterns_with_regex_metacharacters__forbidden_case ... ok
    test set_environment_variables_in_generated_test_programs ... ok
    test steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok
    test steps_which_do_not_match_bindings_do_not_work ... ok
    test steps_which_match_more_than_one_binding_do_not_work ... ok
    test smoke_test ... ok
    test subheadings_don_t_start_new_scenario ... ok
    test subplot_accepts_title_and_headings_with_inline_markup ... ok
    test temporary_files_in_scenarios_in_python ... ok
    
    test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.02s
    
    
    running 4 tests
    test pikchr ... ok
    test dot ... ok
    test roadmap ... ok
    test plantuml ... ok
    
    test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.61s
    
    
    running 28 tests
    test attempt_to_use_definition_list ... ok
    test bad__add_newline__value ... ok
    test class_name_validation ... ok
    test date_given_in_metadata ... ok
    test date_given_on_command_line ... ok
    test document_generator_gives_an_error_if_input_document_lacks_title ... ok
    test dot ... ok
    test css_urls ... ok
    test embedded_css ... ok
    test examples_may_be_unused ... ok
    test extract_embedded_file ... ok
    test fail_if_embedded_file_isn_t_used ... ok
    test fail_if_two_filenames_only_differ_in_case ... ok
    test empty_lines_in_scenarios ... ok
    test indented_scenario_steps_are_not_allowed ... ok
    test files_not_in_current_working_directory ... ok
    test missing_bindings_file ... ok
    test multiple_markdown_files ... ok
    test no_date_anywhere ... ok
    test no_template_means_you_can_docgen_but_not_codegen ... ok
    test pikchr ... ok
    test named_code_blocks_must_have_an_appropriate_class ... ok
    test roadmap ... ok
    test scenario_before_the_first_heading ... ok
    test smoke_test ... ok
    test subplot_accepts_title_and_headings_with_inline_markup ... ok
    test title_markup ... ok
    test plantuml ... ok
    
    test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.84s
    
    
    running 1 test
    test extract_embedded_files ... ok
    
    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 5 tests
    test duplicate_scenario_titles ... ok
    test extracting_metadata_from_a_document ... ok
    test list_embedded_files ... ok
    test scenario_titles ... ok
    test files_not_in_current_working_directory ... ok
    
    test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
    
    
    running 64 tests
    test attempt_to_use_definition_list ... ok
    test bad__add_newline__value ... ok
    test capture_using_regular_expressions ... ok
    test all_the_keywords ... ok
    test class_name_validation ... ok
    test capture_using_simple_patterns ... ok
    test cleanup_functions_get_called_on_failure__python_ ... ok
    test code_generator_gives_an_error_if_input_document_lacks_title ... ok
    test css_urls ... ok
    test cleanup_functions_gets_called_on_success__python_ ... ok
    test date_given_on_command_line ... ok
    test date_given_in_metadata ... ok
    test document_generator_gives_an_error_if_input_document_lacks_title ... ok
    test dot ... ok
    test duplicate_scenario_titles ... ok
    test embedded_css ... ok
    test examples_are_not_files ... ok
    test examples_may_be_unused ... ok
    test extract_embedded_file ... ok
    test extract_embedded_file__automatically_add_missing_newline ... ok
    test extract_embedded_file__by_default_add_missing_newline ... ok
    test extract_embedded_file__by_default_do_not_add_a_second_newline ... ok
    test extract_embedded_file__do_not_add_missing_newline ... ok
    test extract_embedded_file__do_not_automatically_add_second_newline ... ok
    test extract_embedded_file__explicitly_add_missing_newline ... ok
    test extract_embedded_file__explicitly_add_second_newline ... ok
    test extract_embedded_files ... ok
    test extracting_metadata_from_a_document ... ok
    test fail_if_embedded_file_isn_t_used ... ok
    test fail_if_the_same_filename_is_used_twice ... ok
    test fail_if_two_filenames_only_differ_in_case ... ok
    test empty_lines_in_scenarios ... ok
    test indented_scenario_steps_are_not_allowed ... ok
    test list_embedded_files ... ok
    test files_not_in_current_working_directory ... ok
    test missing_bindings_file ... ok
    test lowest_level_heading_is_name_of_scenario ... ok
    test misuse_of_continuation_keywords ... ok
    test missing_functions_file ... ok
    test multiple_markdown_files ... ok
    test named_code_blocks_must_have_an_appropriate_class ... ok
    test next_heading_at_higher_level_starts_new_scenario ... ok
    test no_date_anywhere ... ok
    test no_scenarios_means_codegen_fails ... ok
    test no_template_means_you_can_docgen_but_not_codegen ... ok
    test pikchr ... ok
    test next_heading_at_same_level_starts_new_scenario ... ok
    test recall_values_for_use_in_later_steps ... ok
    test roadmap ... ok
    test running_only_chosen_scenarios_with_python ... ok
    test scenario_before_the_first_heading ... ok
    test scenario_titles ... ok
    test set_environment_variables_in_generated_test_programs ... ok
    test simple_patterns_with_regex_metacharacters__allowed_case ... ok
    test simple_patterns_with_regex_metacharacters__forbidden_case ... ok
    test smoke_test ... ok
    test plantuml ... ok
    test steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok
    test steps_which_do_not_match_bindings_do_not_work ... ok
    test steps_which_match_more_than_one_binding_do_not_work ... ok
    test subheadings_don_t_start_new_scenario ... ok
    test subplot_accepts_title_and_headings_with_inline_markup ... ok
    test title_markup ... ok
    test temporary_files_in_scenarios_in_python ... ok
    
    test result: ok. 64 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.70s
    
    
    running 3 tests
    test embedded_files ... ok
    test data_directory ... ok
    test fundamentals ... ok
    
    test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 6 tests
    test src/bindings.rs - bindings::BindingImpl::cleanup (line 163) ... ignored
    test src/bindings.rs - bindings::BindingImpl::function (line 151) ... ignored
    test src/bindings.rs - bindings::BindingImpl::new (line 137) ... ignored
    test src/diagrams.rs - diagrams::DotMarkup (line 149) ... ok
    test src/diagrams.rs - diagrams::PikchrMarkup (line 116) ... ok
    test src/diagrams.rs - diagrams::PlantumlMarkup (line 198) ... ok
    
    test result: ok. 3 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 2.61s
    
    
    running 73 tests
    test subplotlib/src/file.rs - file::SubplotDataFile (line 20) ... ok
    test subplotlib/src/file.rs - file::SubplotDataFile::data (line 120) ... ok
    test subplotlib/src/file.rs - file::SubplotDataFile::name (line 105) ... ok
    test subplotlib/src/prelude.rs - prelude (line 6) ... ok
    test subplotlib/src/prelude.rs - prelude::step (line 100) ... ok
    test subplotlib/src/file.rs - file::SubplotDataFile::new (line 76) ... ok
    test subplotlib/src/prelude.rs - prelude::step (line 73) ... ok
    test subplotlib/src/prelude.rs - prelude::throws (line 26) ... ok
    test subplotlib/src/prelude.rs - prelude::throws (line 39) ... ok
    test subplotlib/src/scenario.rs - scenario::Scenario (line 305) ... ok
    test subplotlib/src/step.rs - step::ScenarioStep (line 24) ... ok
    test subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space::call (line 160) ... ignored
    test subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space_megabytes::call (line 171) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::_create_from_embedded_with_other_name_executable::call (line 129) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded::call (line 93) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded_with_other_name::call (line 111) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded::call (line 56) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded_with_other_name::call (line 70) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_text::call (line 220) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_do_not_match::call (line 469) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_match::call (line 443) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_contains::call (line 341) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_do_not_match::call (line 417) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_does_not_exist::call (line 296) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_doesnt_contain::call (line 357) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_exists::call (line 276) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_match::call (line 390) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_matches_regex::call (line 374) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::has_different_metadata::call (line 544) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::has_remembered_metadata::call (line 505) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::make_directory::call (line 609) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_ancient::call (line 593) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_recent::call (line 577) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::only_these_exist::call (line 322) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_does_not_exist::call (line 659) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_exists::call (line 642) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_empty::call (line 678) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_not_empty::call (line 696) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::remember_metadata::call (line 231) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_directory::call (line 619) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_empty_directory::call (line 630) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_file::call (line 181) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::touch::call (line 255) ... ignored
    test subplotlib/src/steplibrary/files.rs - steplibrary::files::touch_with_timestamp::call (line 193) ... ignored
    test subplotlib/src/steplibrary.rs - steplibrary (line 10) ... ok
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is::call (line 403) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_nonzero::call (line 442) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_not::call (line 419) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_zero::call (line 431) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_script::call (line 227) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_srcdir_path::call (line 241) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run::call (line 254) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run_in::call (line 271) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::set_environment_variable::call (line 677) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_contains::call (line 594) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_contain::call (line 607) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_match_regex::call (line 663) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_is::call (line 542) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_isnt::call (line 555) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_matches_regex::call (line 649) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_from_file::call (line 480) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_is::call (line 502) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_contains::call (line 568) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_contain::call (line 581) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_match_regex::call (line 635) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_is::call (line 516) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_isnt::call (line 529) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_matches_regex::call (line 621) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run::call (line 285) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run_in::call (line 298) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::unset_environment_variable::call (line 691) ... ignored
    test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::Runcmd::join_paths (line 155) ... ok
    test subplotlib/src/utils.rs - utils::base64_decode (line 9) ... ok
    
    test result: ok. 14 passed; 0 failed; 59 ignored; 0 measured; 0 filtered out; finished in 2.35s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    /ci/src/inst/subplot --resources /ci/src/share codegen subplot.subplot -o test.py --template python
    rm -f test.log
    python3 test.py --log test.log --env SUBPLOT_DIR=/ci/src/inst 
    srcdir /ci/src
    datadir /tmp/tmpl7x41vub
    scenario: Bad "add-newline" value
      step 1: given an installed subplot
      step 2: given file add-newline.subplot
      step 3: given file add-newline.md
      step 4: when I try to run subplot docgen add-newline.subplot -o /dev/null
      step 5: then command fails
      step 6: then stderr contains "ERROR add-newline.md:1:1: value of add-newline attribute is not understood: xyzzy"
      cleanup 1: given an installed subplot
    scenario: Next heading at higher level starts new scenario
      step 1: given file higherisnewscenario.subplot
      step 2: given file higherisnewscenario.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run higherisnewscenario.subplot -o test.py
      step 7: then scenario "heading 1.1.1" was run
      step 8: then scenario "heading 1.2" was run
      step 9: then command is successful
      cleanup 5: given an installed subplot
    scenario: Steps which match more than one binding do not work
      step 1: given file twobindings.subplot
      step 2: given file twobindings.md
      step 3: given file twobindings.yaml
      step 4: given file a_function.py
      step 5: given an installed subplot
      step 6: when I try to run subplot codegen --run twobindings.subplot -o test.py
      step 7: then command fails
      step 8: then stderr contains "xyzzy"
      step 9: then stderr contains "plugh"
      cleanup 5: given an installed subplot
    scenario: Scenario before the first heading
      step 1: given an installed subplot
      step 2: given file scenario-before-heading.subplot
      step 3: given file scenario-before-heading.md
      step 4: when I try to run subplot docgen scenario-before-heading.subplot -o /dev/null
      step 5: then command fails
      step 6: then stderr contains "ERROR scenario-before-heading.md:1:1: first scenario is before first heading"
      cleanup 1: given an installed subplot
    scenario: Subplot accepts title and headings with inline markup
      step 1: given file fancytitle.subplot
      step 2: given file fancytitle.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I try to run subplot docgen fancytitle.subplot -o foo.md
      step 7: then command is successful
      step 8: when I try to run subplot codegen fancytitle.subplot -o foo.md
      step 9: then command is successful
      cleanup 5: given an installed subplot
    scenario: No scenarios means codegen fails
      step 1: given file noscenarios.subplot
      step 2: given file noscenarios.md
      step 3: given an installed subplot
      step 4: when I try to run subplot codegen noscenarios.subplot -o test.py
      step 5: then command fails
      step 6: then stderr contains "no scenarios were found"
      cleanup 3: given an installed subplot
    scenario: Lowest level heading is name of scenario
      step 1: given file scenarioislowest.subplot
      step 2: given file scenarioislowest.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run scenarioislowest.subplot -o test.py
      step 7: then scenario "heading 1.1.1" was run
      step 8: then command is successful
      cleanup 5: given an installed subplot
    scenario: Set environment variables in generated test programs
      step 1: given file env.subplot
      step 2: given file env.md
      step 3: given file env.yaml
      step 4: given file env.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen env.subplot -o test.py
      step 7: when I try to run python3 test.py
      step 8: then command fails
      step 9: when I try to run python3 test.py --env FOO=foo
      step 10: then command fails
      step 11: when I try to run python3 test.py --env FOO=bar
      step 12: then command is successful
      cleanup 5: given an installed subplot
    scenario: Extract embedded file, automatically add missing newline
      step 1: given file auto-without-newline.txt
      step 2: then auto-without-newline.txt ends in one newline
    scenario: Title markup
      step 1: given file title-markup.subplot
      step 2: given file title-markup.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen title-markup.subplot -o foo.html
      step 5: then file foo.html exists
      cleanup 3: given an installed subplot
    scenario: Recall values for use in later steps
      step 1: given file values.subplot
      step 2: given file values.md
      step 3: given file values.yaml
      step 4: given file values.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen values.subplot -o test.py
      step 7: when I run python3 test.py
      step 8: then command is successful
      cleanup 5: given an installed subplot
    scenario: Temporary files in scenarios in Python
      step 1: given file tmpdir.subplot
      step 2: given file tmpdir.md
      step 3: given file tmpdir.yaml
      step 4: given file tmpdir.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run tmpdir.subplot -o test.py
      step 7: then command is successful
      step 8: then scenario "TMPDIR" was run
      step 9: then step "then TMPDIR is set" was run
      cleanup 5: given an installed subplot
    scenario: Fail if embedded file isn't used
      step 1: given file unusedfile.subplot
      step 2: given file unusedfile.md
      step 3: given an installed subplot
      step 4: when I try to run subplot docgen --merciful unusedfile.subplot -o unusedfile.html
      step 5: then command is successful
      step 6: then file unusedfile.html exists
      step 7: then stderr contains "thisisnotused.txt"
      cleanup 3: given an installed subplot
    scenario: Capture using simple patterns
      step 1: given file simplepattern.subplot
      step 2: given file simplepattern.md
      step 3: given file simplepattern.yaml
      step 4: given file capture.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run simplepattern.subplot -o test.py
      step 7: then scenario "Simple pattern" was run
      step 8: then step "given I am Tomjon" was run
      step 9: then stdout contains "function got argument name as Tomjon"
      step 10: then command is successful
      cleanup 5: given an installed subplot
    scenario: Extracting metadata from a document
      step 1: given file images.subplot
      step 2: given file images.md
      step 3: given file b.yaml
      step 4: given file other.yaml
      step 5: given file f.py
      step 6: given file other.py
      step 7: given file expected.json
      step 8: given an installed subplot
      step 9: when I run subplot metadata images.subplot
      step 10: then stdout contains "source: images.md"
      step 11: then stdout contains "source: b.yaml"
      step 12: then stdout contains "source: other.yaml"
      step 13: then stdout contains "source: f.py"
      step 14: then stdout contains "source: other.py"
      step 15: then stdout contains "source: image.gif"
      step 16: then stdout contains "bindings: b.yaml"
      step 17: then stdout contains "bindings: other.yaml"
      step 18: then stdout contains "functions[python]: f.py"
      step 19: when I run subplot metadata images.subplot -o json
      step 20: then JSON output matches expected.json
      cleanup 8: given an installed subplot
    scenario: Extract embedded file, by default add missing newline
      step 1: given file default-without-newline.txt
      step 2: then default-without-newline.txt ends in one newline
    scenario: Steps which do not match bindings do not work
      step 1: given file nobinding.subplot
      step 2: given file nobinding.md
      step 3: given file badbindings.yaml
      step 4: given an installed subplot
      step 5: when I try to run subplot codegen --run nobinding.subplot -o test.py
      step 6: then command fails
      cleanup 4: given an installed subplot
    scenario: Date given on command line
      step 1: given file dateless.subplot
      step 2: given file dateless.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen dateless.subplot -o dateoption.html --date=FANCYDATE
      step 5: then file dateoption.html exists
      step 6: then file dateoption.html contains "<title>The Fabulous Title</title>"
      step 7: then file dateoption.html contains "Alfred Pennyworth"
      step 8: then file dateoption.html contains "Geoffrey Butler"
      step 9: then file dateoption.html contains "FANCYDATE"
      cleanup 3: given an installed subplot
    scenario: Multiple markdown files
      step 1: given file multimd.subplot
      step 2: given file md1.md
      step 3: given file md2.md
      step 4: given an installed subplot
      step 5: when I run subplot docgen multimd.subplot -o multimd.html
      step 6: when I run cat multimd.html
      step 7: then file multimd.html exists
      step 8: then file multimd.html contains "<title>The Fabulous Title</title>"
      step 9: then file multimd.html contains "First markdown file."
      step 10: then file multimd.html contains "Second markdown file."
      cleanup 4: given an installed subplot
    scenario: Fail if the same filename is used twice
      step 1: given file onefiletwice.md
      step 2: given an installed subplot
      step 3: when I try to run subplot docgen onefiletwice.md -o onefiletwice.html
      step 4: then command fails
      step 5: then file onefiletwice.html does not exist
      cleanup 2: given an installed subplot
    scenario: Misuse of continuation keywords
      step 1: given file continuationmisuse.subplot
      step 2: given file continuationmisuse.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I try to run subplot codegen --run continuationmisuse.subplot -o test.py
      step 7: then command fails
      cleanup 5: given an installed subplot
    scenario: List embedded files
      step 1: given file two-embedded.subplot
      step 2: given file two-embedded.md
      step 3: given an installed subplot
      step 4: when I run subplot metadata --merciful two-embedded.subplot
      step 5: then stdout contains "foo.txt"
      step 6: then stdout contains "bar.yaml"
      cleanup 3: given an installed subplot
    scenario: No date anywhere
      step 1: given file dateless.subplot
      step 2: given file dateless.md
      step 3: given file dateless.md has modification time 2020-02-26 07:53:17
      step 4: given an installed subplot
      step 5: when I run subplot docgen dateless.subplot -o mtime.html
      step 6: then file mtime.html exists
      step 7: then file mtime.html contains "<title>The Fabulous Title</title>"
      step 8: then file mtime.html contains "Alfred Pennyworth"
      step 9: then file mtime.html contains "Geoffrey Butler"
      step 10: then file mtime.html contains "2020-02-26 07:53"
      cleanup 4: given an installed subplot
    scenario: Empty lines in scenarios
      step 1: given file emptylines.subplot
      step 2: given file emptylines.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot docgen emptylines.subplot -o emptylines.html
      step 7: then file emptylines.html exists
      step 8: when I run subplot codegen --run emptylines.subplot -o test.py
      step 9: then scenario "Simple" was run
      step 10: then step "given precondition foo" was run
      step 11: then step "when I do bar" was run
      step 12: then step "then bar was done" was run
      step 13: then command is successful
      cleanup 5: given an installed subplot
    scenario: Named code blocks must have an appropriate class
      step 1: given file named-code-blocks-appropriate.subplot
      step 2: given file named-code-blocks-appropriate.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I try to run subplot docgen named-code-blocks-appropriate.subplot -o foo.html
      step 6: then command fails
      step 7: then stderr contains "#example-1 at named-code-blocks-appropriate.md:7:1"
      step 8: then stderr doesn't contain "example-2"
      step 9: then stderr doesn't contain "example-3"
      cleanup 4: given an installed subplot
    scenario: Simple patterns with regex metacharacters: allowed case
      step 1: given file confusedbutok.subplot
      step 2: given file confusedbutok.md
      step 3: given file confusedbutok.yaml
      step 4: given file capture.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run confusedbutok.subplot -o test.py
      step 7: then command is successful
      cleanup 5: given an installed subplot
    scenario: Class name validation
      step 1: given file unknown-class-name.subplot
      step 2: given file unknown-class-name.md
      step 3: given file known-class-name.subplot
      step 4: given file known-class-name.md
      step 5: given file b.yaml
      step 6: given an installed subplot
      step 7: when I try to run subplot docgen unknown-class-name.subplot -o unknown-class-name.html
      step 8: then command fails
      step 9: then file unknown-class-name.html does not exist
      step 10: then stderr contains "Unknown classes found in the document: foobar"
      step 11: when I run subplot docgen known-class-name.subplot -o known-class-name.html
      step 12: then file known-class-name.html exists
      cleanup 6: given an installed subplot
    scenario: Smoke test
      step 1: given file simple.subplot
      step 2: given file simple.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot docgen simple.subplot -o simple.html
      step 7: then file simple.html exists
      step 8: when I run subplot codegen --run simple.subplot -o test.py
      step 9: then scenario "Simple" was run
      step 10: then step "given precondition foo" was run
      step 11: then step "when I do bar" was run
      step 12: then step "then bar was done" was run
      step 13: then command is successful
      cleanup 5: given an installed subplot
    scenario: Examples may be unused
      step 1: given file unusedexample.subplot
      step 2: given file unusedexample.md
      step 3: given an installed subplot
      step 4: when I try to run subplot docgen --merciful unusedexample.subplot -o unusedexample.html
      step 5: then command is successful
      step 6: then file unusedexample.html exists
      step 7: then stderr doesn't contain "thisisnotused.txt"
      cleanup 3: given an installed subplot
    scenario: Capture using regular expressions
      step 1: given file regex.subplot
      step 2: given file regex.md
      step 3: given file regex.yaml
      step 4: given file capture.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run regex.subplot -o test.py
      step 7: then scenario "Regex" was run
      step 8: then step "given I am Tomjon" was run
      step 9: then stdout contains "function got argument name as Tomjon"
      step 10: then command is successful
      cleanup 5: given an installed subplot
    scenario: Extract embedded file, explicitly add second newline
      step 1: given file add-has-newline.txt
      step 2: then add-has-newline.txt ends in two newlines
    scenario: No template means you can docgen but not codegen
      step 1: given file notemplate.subplot
      step 2: given file notemplate.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen notemplate.subplot -o notemplate.html
      step 5: then file notemplate.html exists
      step 6: when I try to run subplot codegen notemplate.subplot -o test.py
      step 7: then command fails
      step 8: then stderr contains "document has no template"
      cleanup 3: given an installed subplot
    scenario: Examples are not files
      step 1: given file examplesnotfiles.subplot
      step 2: given file examplesnotfiles.md
      step 3: given an installed subplot
      step 4: when I try to run subplot codegen examplesnotfiles.subplot -t python -o examplesnotfiles.html
      step 5: then command fails
      step 6: then file examplesnotfiles.html does not exist
      step 7: then stderr contains "thisisanexample.txt"
      cleanup 3: given an installed subplot
    scenario: Extract embedded files
      step 1: given file embedded-file.subplot
      step 2: given file embedded-file.md
      step 3: given file expected.txt
      step 4: given an installed subplot
      step 5: when I run subplot extract --merciful embedded-file.subplot foo.txt -d .
      step 6: then files foo.txt and expected.txt match
      cleanup 4: given an installed subplot
    scenario: Extract embedded file
      step 1: given file embedded.subplot
      step 2: given file embedded.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen --merciful embedded.subplot -o foo.html
      step 5: then file foo.html exists
      step 6: then file foo.html matches regex /embedded\\.txt/
      cleanup 3: given an installed subplot
    scenario: Extract embedded file, do not add missing newline
      step 1: given file no-adding-without-newline.txt
      step 2: then no-adding-without-newline.txt does not end in a newline
    scenario: Duplicate scenario titles
      step 1: given file duplicate-scenario-titles.subplot
      step 2: given file duplicate-scenario-titles.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I try to run subplot metadata duplicate-scenario-titles.subplot
      step 7: then command fails
      step 8: then stderr contains "duplicate"
      cleanup 5: given an installed subplot
    scenario: Extract embedded file, explicitly add missing newline
      step 1: given file add-without-newline.txt
      step 2: then add-without-newline.txt ends in one newline
    scenario: CSS URLs
      step 1: given file css-urls.subplot
      step 2: given file css-urls.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I run subplot docgen css-urls.subplot -o foo.html
      step 6: then file foo.html contains "https://example.com/flushing.css"
      cleanup 4: given an installed subplot
    scenario: Embedded CSS
      step 1: given file embedded-css.subplot
      step 2: given file embedded-css.md
      step 3: given file embedded-css.css
      step 4: given file b.yaml
      step 5: given an installed subplot
      step 6: when I run subplot docgen embedded-css.subplot -o foo.html
      step 7: then file foo.html contains "silly: property;"
      cleanup 5: given an installed subplot
    scenario: Pikchr
      step 1: given file pikchr.subplot
      step 2: given file pikchr.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen pikchr.subplot -o pikchr.html
      step 5: then file pikchr.html matches regex /src="data:image/svg\\+xml;base64,/
      cleanup 3: given an installed subplot
    scenario: Fail if two filenames only differ in case
      step 1: given file casediff.md
      step 2: given an installed subplot
      step 3: when I try to run subplot docgen casediff.md -o casediff.html
      step 4: then command fails
      step 5: then file casediff.html does not exist
      cleanup 2: given an installed subplot
    scenario: Files not in current working directory
      step 1: given file x/simple.subplot from simple.subplot
      step 2: given file x/simple.md from simple.md
      step 3: given file x/b.yaml from b.yaml
      step 4: given file x/f.py from f.py
      step 5: given an installed subplot
      step 6: when I run subplot metadata x/simple.subplot
      step 7: then command is successful
      step 8: when I run subplot codegen x/simple.subplot -o test.py
      step 9: then file test.py exists
      step 10: when I run subplot docgen x/simple.subplot -o simple.html
      step 11: then file simple.html exists
      cleanup 5: given an installed subplot
    scenario: Roadmap
      step 1: given file roadmap.subplot
      step 2: given file roadmap.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I run subplot docgen roadmap.subplot -o roadmap.html
      step 6: then file roadmap.html matches regex /src="data:image/svg\\+xml;base64,/
      cleanup 4: given an installed subplot
    scenario: Running only chosen scenarios with Python
      step 1: given file twoscenarios-python.subplot
      step 2: given file twoscenarios-python.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen twoscenarios-python.subplot -o test.py
      step 7: when I run python3 test.py on
      step 8: then scenario "One" was run
      step 9: then scenario "Two" was not run
      step 10: then command is successful
      cleanup 5: given an installed subplot
    scenario: Extract embedded file, by default do not add a second newline
      step 1: given file default-has-newline.txt
      step 2: then default-has-newline.txt ends in one newline
    scenario: Indented scenario steps are not allowed
      step 1: given file indented-step.subplot
      step 2: given file indented-step.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I try to run subplot docgen indented-step.subplot -o foo.html
      step 6: then command fails
      step 7: then stderr contains "indented"
      cleanup 4: given an installed subplot
    scenario: Subheadings don't start new scenario
      step 1: given file subisnotnewscenario.subplot
      step 2: given file subisnotnewscenario.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run subisnotnewscenario.subplot -o test.py
      step 7: then scenario "heading 1.1a" was run
      step 8: then command is successful
      cleanup 5: given an installed subplot
    scenario: All the keywords
      step 1: given file allkeywords.subplot
      step 2: given file allkeywords.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run allkeywords.subplot -o test.py
      step 7: then scenario "All keywords" was run
      step 8: then step "given precondition foo" was run
      step 9: then step "when I do bar" was run
      step 10: then step "then bar was done" was run
      step 11: then command is successful
      cleanup 5: given an installed subplot
    scenario: Steps which do not case-sensitively match sensitive bindings do not work
      step 1: given file casemismatch.subplot
      step 2: given file casemismatch.md
      step 3: given file badbindings.yaml
      step 4: given an installed subplot
      step 5: when I try to run subplot codegen --run casemismatch.subplot -o test.py
      step 6: then command fails
      cleanup 4: given an installed subplot
    scenario: Extract embedded file, do not automatically add second newline
      step 1: given file auto-has-newline.txt
      step 2: then auto-has-newline.txt ends in one newline
    scenario: Missing functions file
      step 1: given file missing-functions.subplot
      step 2: given file missing-functions.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I try to run subplot codegen --run missing-functions.subplot -o foo.py
      step 6: then command fails
      step 7: then stderr contains "could not be found"
      step 8: then stderr contains "missing-functions.py"
      cleanup 4: given an installed subplot
    scenario: Cleanup functions get called on failure (Python)
      step 1: given file cleanup-fail-python.subplot
      step 2: given file cleanup-fail-python.md
      step 3: given file cleanup.yaml
      step 4: given file cleanup.py
      step 5: given an installed subplot
      step 6: when I try to run subplot codegen --run cleanup-fail-python.subplot -o test.py
      step 7: then scenario "Cleanup" was run
      step 8: then step "given foo" was run, and then step "given bar"
      step 9: then cleanup for "given bar" was run, and then for "given foo"
      step 10: then cleanup for "given failure" was not run
      step 11: then command fails
      cleanup 5: given an installed subplot
    scenario: Missing bindings file
      step 1: given file missing-binding.subplot
      step 2: given file missing-binding.md
      step 3: given an installed subplot
      step 4: when I try to run subplot docgen missing-binding.subplot -o foo.html
      step 5: then command fails
      step 6: then stderr contains "could not be found"
      step 7: then stderr contains "missing-binding.yaml"
      cleanup 3: given an installed subplot
    scenario: Dot
      step 1: given file dot.subplot
      step 2: given file dot.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I run subplot docgen dot.subplot -o dot.html
      step 6: then file dot.html matches regex /src="data:image/svg\\+xml;base64,/
      cleanup 4: given an installed subplot
    scenario: Next heading at same level starts new scenario
      step 1: given file samelevelisnewscenario.subplot
      step 2: given file samelevelisnewscenario.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run samelevelisnewscenario.subplot -o test.py
      step 7: then scenario "heading 1.1.1" was run
      step 8: then scenario "heading 1.1.2" was run
      step 9: then command is successful
      cleanup 5: given an installed subplot
    scenario: Document generator gives an error if input document lacks title
      step 1: given file notitle.subplot
      step 2: given file notitle.md
      step 3: given an installed subplot
      step 4: when I try to run subplot docgen notitle.subplot -o foo.md
      step 5: then command fails
      cleanup 3: given an installed subplot
    scenario: Simple patterns with regex metacharacters: forbidden case
      step 1: given file confusedpattern.subplot
      step 2: given file confusedpattern.md
      step 3: given file confusedpattern.yaml
      step 4: given file capture.py
      step 5: given an installed subplot
      step 6: when I try to run subplot codegen --run confusedpattern.subplot -o test.py
      step 7: then command fails
      step 8: then stderr contains "simple pattern contains regex"
      cleanup 5: given an installed subplot
    scenario: Attempt to use definition list
      step 1: given an installed subplot
      step 2: given file dl.subplot
      step 3: given file dl.md
      step 4: when I try to run subplot docgen dl.subplot -o /dev/null
      step 5: then command fails
      step 6: then stderr contains "ERROR dl.md:3:1: attempt to use definition lists in Markdown"
      cleanup 1: given an installed subplot
    scenario: Scenario titles
      step 1: given file scenario-titles.subplot
      step 2: given file scenario-titles.md
      step 3: given file b.yaml
      step 4: given file f.py
      step 5: given an installed subplot
      step 6: when I run subplot metadata scenario-titles.subplot
      step 7: then stdout contains "My fun scenario title"
      cleanup 5: given an installed subplot
    scenario: Code generator gives an error if input document lacks title
      step 1: given file notitle.subplot
      step 2: given file notitle.md
      step 3: given an installed subplot
      step 4: when I try to run subplot codegen --run notitle.subplot -o test.py
      step 5: then command fails
      cleanup 3: given an installed subplot
    scenario: Date given in metadata
      step 1: given file metadate.subplot
      step 2: given file metadate.md
      step 3: given an installed subplot
      step 4: when I run subplot docgen metadate.subplot -o metadate.html
      step 5: when I run cat metadate.html
      step 6: then file metadate.html exists
      step 7: then file metadate.html contains "<title>The Fabulous Title</title>"
      step 8: then file metadate.html contains "Alfred Pennyworth"
      step 9: then file metadate.html contains "Geoffrey Butler"
      step 10: then file metadate.html contains "WIP"
      cleanup 3: given an installed subplot
    scenario: Cleanup functions gets called on success (Python)
      step 1: given file cleanup-success-python.subplot
      step 2: given file cleanup-success-python.md
      step 3: given file cleanup.yaml
      step 4: given file cleanup.py
      step 5: given an installed subplot
      step 6: when I run subplot codegen --run cleanup-success-python.subplot -o test.py
      step 7: then scenario "Cleanup" was run
      step 8: then step "given foo" was run, and then step "given bar"
      step 9: then cleanup for "given bar" was run, and then for "given foo"
      step 10: then command is successful
      cleanup 5: given an installed subplot
    scenario: PlantUML
      step 1: given file plantuml.subplot
      step 2: given file plantuml.md
      step 3: given file b.yaml
      step 4: given an installed subplot
      step 5: when I run subplot docgen plantuml.subplot -o plantuml.html
      step 6: then file plantuml.html matches regex /src="data:image/svg\\+xml;base64,/
      cleanup 4: given an installed subplot
    OK, all scenarios finished successfully
    cd examples/muck && /ci/src/inst/subplot --resources /ci/src/share codegen muck.subplot --run --output test.py
    srcdir /ci/src/examples/muck
    datadir /tmp/tmpb7vyidpa
    scenario: Restarting Muck
      step 1: given a fresh Muck server
      step 2: given I am Tomjon, with super capability
      step 3: when I do POST /res with {"foo": "bar"}
      step 4: then header Muck-Id is ID
      step 5: then header Muck-Revision is REV1
      step 6: when I restart Muck
      step 7: when I do GET /res with Muck-Id: {ID}
      step 8: then response code is 200
      step 9: then header Muck-Revision matches {REV1}
      step 10: then body matches {"foo": "bar"}
    scenario: Basic object handling
      step 1: given a fresh Muck server
      step 2: given I am Tomjon
      step 3: when I do POST /res with {"foo": "bar"}
      step 4: then response code is 201
      step 5: then header Muck-Id is ID
      step 6: then header Muck-Revision is REV1
      step 7: when I do GET /res with Muck-Id: {ID}
      step 8: then response code is 200
      step 9: then header Muck-Revision matches {REV1}
      step 10: then body matches {"foo": "bar"}
      step 11: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
      step 12: then response code is 200
      step 13: then header Muck-Revision is {REV2}
      step 14: then revisions {REV1} and {REV2} are different
      step 15: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
      step 16: then response code is 409
      step 17: when I do GET /res with Muck-Id: {ID}
      step 18: then response code is 200
      step 19: then header Muck-Revision matches {REV2}
      step 20: then body matches {"foo": "yo"}
      step 21: when I do DELETE /res with Muck-Id: {ID}
      step 22: then response code is 200
      step 23: when I do GET /res with Muck-Id: {ID}
      step 24: then response code is 404
    scenario: Updating someone else's data
      step 1: given a fresh Muck server
      step 2: given I am Tomjon
      step 3: when I do POST /res with {"foo": "bar"}
      step 4: then header Muck-Id is ID
      step 5: then header Muck-Revision is REV1
      step 6: given I am Verence
      step 7: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
      step 8: then response code is 404
    scenario: Deleting someone else's data
      step 1: given a fresh Muck server
      step 2: given I am Tomjon
      step 3: when I do POST /res with {"foo": "bar"}
      step 4: then header Muck-Id is ID
      step 5: then header Muck-Revision is REV1
      step 6: given I am Verence
      step 7: when I do DELETE /res with Muck-Id: {ID}
      step 8: then response code is 404
    scenario: Accessing someone else's data
      step 1: given a fresh Muck server
      step 2: given I am Tomjon
      step 3: when I do POST /res with {"foo": "bar"}
      step 4: then header Muck-Id is ID
      step 5: then header Muck-Revision is REV1
      step 6: when I do GET /res with Muck-Id: {ID}
      step 7: then response code is 200
      step 8: then header Muck-Revision matches {REV1}
      step 9: then body matches {"foo": "bar"}
      step 10: given I am Verence
      step 11: when I do GET /res with Muck-Id: {ID}
      step 12: then response code is 404
    OK, all scenarios finished successfully
    if [ "--offline" = "" ] ; then \
    	cd examples/website && \
    	/ci/src/inst/subplot --resources /ci/src/share codegen website.subplot --run --output test.py; \
    fi
    cd examples/seq && cargo test -- 
    
    running 4 tests
    test no_arguments ... ok
    test more_than_one_number ... ok
    test not_a_number ... ok
    test one_number ... ok
    
    test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    /ci/src/inst/subplot --resources /ci/src/share docgen subplot.subplot -o subplot.html
    /ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/files.subplot -o tests/subplots/common/files.html
    /ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/runcmd.subplot -o tests/subplots/common/runcmd.html
    cd examples/muck && /ci/src/inst/subplot --resources /ci/src/share/subplot docgen muck.subplot -o muck.html
    cd examples/website && /ci/src/inst/subplot --resources /ci/src/share docgen website.subplot -o website.html
    cd examples/seq && /ci/src/inst/subplot --resources /ci/src/share docgen seq.subplot -o seq.html
    /ci/src/inst/subplot --resources /ci/src/share libdocgen lib/runcmd.yaml --output /ci/src/inst/runcmd.md
    if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/runcmd"  --output /ci/src/inst/runcmd.html /ci/src/inst/runcmd.md; fi
    /ci/src/inst/subplot --resources /ci/src/share libdocgen lib/files.yaml --output /ci/src/inst/files.md
    if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/files"  --output /ci/src/inst/files.html /ci/src/inst/files.md; fi
    /ci/src/inst/subplot --resources /ci/src/share libdocgen python/lib/daemon.yaml --output /ci/src/inst/daemon.md
    if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/daemon"  --output /ci/src/inst/daemon.html /ci/src/inst/daemon.md; fi
    /ci/src/inst/subplot --resources /ci/src/share docgen book/user-guide.subplot --output book/user-guide.html
    mkdir -p doc/libdocs
    for x in subplot.html tests/subplots/common/*.html examples/*/*.html book/*.html; do if [ -e "$x" ]; then mv "$x" doc; fi; done
    for x in /ci/src/inst/*.html; do if [ -e "$x" ]; then mv "$x" doc/libdocs/; fi; done
    HEAD is now at cfebfc9 Merge branch 'fix-ci' into 'main'
    Removing doc/
    Removing examples/muck/test.py
    Removing inst/
    Removing share/python/template/__pycache__/
    Removing test.log
    Removing test.py
    HEAD detached at cfebfc9
    nothing to commit, working tree clean
    
    Stderr:
    + make OFFLINE=--offline
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
       Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
        Checking subplot-bin v0.14.0 (/ci/src/bin)
        Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.04s
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s
      Installing subplot-bin v0.14.0 (/ci/src/bin)
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplot-bin v0.14.0 (/ci/src/bin)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.88s
      Installing /ci/src/inst/bin/subplot
       Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)
    warning: be sure to add `/ci/src/inst/bin` to your PATH to be able to run the installed binaries
    ............................
    ----------------------------------------------------------------------
    Ran 28 tests in 0.001s
    
    OK
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
       Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
       Compiling subplot-bin v0.14.0 (/ci/src/bin)
       Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)
        Finished `test` profile [unoptimized + debuginfo] target(s) in 8.87s
         Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-4eb51c1e86149cc7)
         Running tests/bindings-ubm.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/bindings_ubm-d956fe63499e364b)
         Running unittests src/subplot.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-6e2d40b85612c9de)
         Running tests/seq.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/seq-8f189b8969864ac7)
         Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-4fef6eb454a800fb)
         Running tests/files.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/files-46b83a9fe1a10943)
         Running tests/runcmd.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/runcmd-89549dd3dbb5a7dc)
         Running tests/subplot-codegen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_codegen-60013b2c5f6419cd)
         Running tests/subplot-diagrams.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_diagrams-93cb505d641ffc94)
         Running tests/subplot-docgen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_docgen-a4cfeaf1354d946c)
         Running tests/subplot-extract.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_extract-27a75e023100fade)
         Running tests/subplot-metadata.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_metadata-eb5c74dfad67504e)
         Running tests/subplot-others.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_others-1ce247a5de7a973c)
         Running tests/subplotlib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-2d3b35de1a9808f6)
         Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/subplotlib_derive-9fc045209741d6bd)
       Doc-tests subplot
       Doc-tests subplotlib
       Doc-tests subplotlib_derive
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
       Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
       Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)
        Finished `test` profile [unoptimized + debuginfo] target(s) in 1.37s
         Running tests/seq.rs (/ci/cache/cargo-target/debug/deps/seq-73545bb4a9dac185)
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
     INFO Starting Subplot
     INFO Subplot finished successfully
    + cp -a doc/files.html doc/libdocs doc/muck.html doc/runcmd.html doc/seq.html doc/subplot.html doc/user-guide.html doc/website.html /ci/artifacts/.
    + git reset --hard
    + git clean -fdx
    + git status --ignored
    
  • plan: Action succeeded shell: make OFFLINE="--offline" cp -a doc/* /ci/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
    After 0.00 seconds at 2026-03-09 11:32:35Z
    Shell(
        Shell {
            shell: "make OFFLINE=\"--offline\"\ncp -a doc/* /ci/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n",
        },
    )
plan: Successful action custom: dch
After 50.98 seconds at 2026-03-09 11:32:35Z
  • plan: Start action custom: dch
    After 0.00 seconds at 2026-03-09 11:32:35Z
    Custom(
        Custom {
            name: "dch",
            args: {
                "debemail": String("liw@liw.fi"),
                "debfullname": String("Lars Wirzenius"),
            },
        },
    )
  • plan: Start action custom: dch
    After 0.00 seconds at 2026-03-09 11:32:35Z
    Custom {
        name: "dch",
        args: {
            "debfullname": String("Lars Wirzenius"),
            "debemail": String("liw@liw.fi"),
        },
    }
  • plan: Custom action output
    After 0.00 seconds at 2026-03-09 11:32:36Z
    Stdout:
    HEAD is now at cfebfc9 Merge branch 'fix-ci' into 'main'
    
    Stderr:
    + export 'DEBEMAIL="liw@liw.fi"'
    + DEBEMAIL='"liw@liw.fi"'
    + export 'DEBFULLNAME="Lars Wirzenius"'
    + DEBFULLNAME='"Lars Wirzenius"'
    + export CARGO_TARGET_DIR=/workspace/cache
    + CARGO_TARGET_DIR=/workspace/cache
    + export CARGO_HOME=/workspace/deps
    + CARGO_HOME=/workspace/deps
    + export HOME=/root
    + HOME=/root
    + export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    + PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    + git reset --hard
    + git clean -fdx
    ++ sed 's/-[^-]*$//'
    ++ dpkg-parsechangelog -SVersion
    + V=0.14.0
    ++ date -u +%Y%m%dT%H%M%S
    + T=20260309T113235
    + version=0.14.0.ci20260309T113235-1
    + dch -v 0.14.0.ci20260309T113235-1 'CI build under Ambient.'
    + dch -r ''
    
  • plan: Action succeeded custom: dch
    After 0.00 seconds at 2026-03-09 11:32:36Z
    Custom(
        Custom {
            name: "dch",
            args: {
                "debemail": String("liw@liw.fi"),
                "debfullname": String("Lars Wirzenius"),
            },
        },
    )
plan: Successful action deb
After 51.18 seconds at 2026-03-09 11:32:36Z
  • plan: Start action deb
    After 0.00 seconds at 2026-03-09 11:32:36Z
    Deb(
        Deb {
            packages: Some(
                ".",
            ),
        },
    )
  • plan: Start program /bin/bash
    After 0.00 seconds at 2026-03-09 11:32:36Z
    • /bin/bash
    • -c
    • #!/usr/bin/env bash set -xeuo pipefail echo "PATH at start: $PATH" export PATH="/root/.cargo/bin:$PATH" export CARGO_HOME=/ci/deps export DEBEMAIL=liw@liw.fi export DEBFULLNAME="Lars Wirzenius" /bin/env command -v cargo command -v rustc cargo --version rustc --version # Get name and version of source package. name="$(dpkg-parsechangelog -SSource)" version="$(dpkg-parsechangelog -SVersion)" # Get upstream version: everything before the last dash. uv="$(echo "$version" | sed 's/-[^-]*$//')" # Files that will be created. arch="$(dpkg --print-architecture)" orig="../${name}_${uv}.orig.tar.xz" deb="../${name}_${version}_${arch}.deb" changes="../${name}_${version}_${arch}.changes" # Create "upstream tarball". git archive HEAD | xz >"$orig" # Build package. dpkg-buildpackage -us -uc # Dump some information to make it easier to visually verify # everything looks OK. Also, test the package with the lintian tool. ls -l .. for x in ../*.deb; do dpkg -c "$x"; done # FIXME: disabled while this prevents radicle-native-ci deb from being built. # lintian -i --allow-root --fail-on warning ../*.changes # Move files to artifacts directory. mv ../*_* /ci/artifacts/.
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:32:52Z
    Exit code: 0
    Stdout:
    PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    DEBFULLNAME=Lars Wirzenius
    CARGO_TARGET_DIR=/ci/cache/cargo-target
    PWD=/ci/src
    SYSTEMD_EXEC_PID=261
    HOME=/root
    LANG=C.UTF-8
    CARGO_HOME=/ci/deps
    DEBEMAIL=liw@liw.fi
    INVOCATION_ID=8621859f16274d9f881d554d152446d7
    SHLVL=2
    JOURNAL_STREAM=8:12963
    PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    OLDPWD=/
    _=/bin/env
    /root/.cargo/bin/cargo
    /root/.cargo/bin/rustc
    cargo 1.94.0 (85eff7c80 2026-01-15)
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    dpkg-buildpackage: info: source package subplot
    dpkg-buildpackage: info: source version 0.14.0.ci20260309T113235-1
    dpkg-buildpackage: info: source distribution unstable
    dpkg-buildpackage: info: source changed by "Lars Wirzenius" <"liw@liw.fi">
    dpkg-buildpackage: info: host architecture amd64
    dh clean
       dh_auto_clean
       dh_clean
    dpkg-source: info: using source format '3.0 (quilt)'
    dpkg-source: info: building subplot using existing ./subplot_0.14.0.ci20260309T113235.orig.tar.xz
    dpkg-source: info: building subplot in subplot_0.14.0.ci20260309T113235-1.debian.tar.xz
    dpkg-source: info: building subplot in subplot_0.14.0.ci20260309T113235-1.dsc
    dh build
       dh_update_autotools_config
       dh_autoreconf
       dh_auto_configure
       debian/rules override_dh_auto_build
    make[1]: Entering directory '/ci/src'
    true
    make[1]: Leaving directory '/ci/src'
       debian/rules override_dh_auto_test
    make[1]: Entering directory '/ci/src'
    echo disabled
    disabled
    make[1]: Leaving directory '/ci/src'
       create-stamp debian/debhelper-build-stamp
    dh binary
       dh_testroot
       dh_prep
       debian/rules override_dh_auto_install
    make[1]: Entering directory '/ci/src'
    cargo install --path=bin --root=debian/subplot --offline --locked --target x86_64-unknown-linux-musl
    rm -f debian/subplot/.crates.toml
    rm -f debian/subplot/.crates2.json
    dh_lintian
    make[1]: Leaving directory '/ci/src'
       dh_install
       dh_installdocs
       dh_installchangelogs
       dh_lintian
       dh_perl
       dh_link
       dh_strip_nondeterminism
       dh_compress
       dh_fixperms
       dh_missing
       dh_strip
       dh_makeshlibs
       dh_shlibdeps
       dh_installdeb
       dh_gencontrol
       dh_md5sums
       dh_builddeb
    dpkg-deb: building package 'subplot' in '../subplot_0.14.0.ci20260309T113235-1_amd64.deb'.
    dpkg-deb: building package 'subplot-dbgsym' in '../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb'.
    dpkg-genchanges: info: including full source code in upload
    dpkg-buildpackage: info: full upload (original source is included)
    total 2300
    drwxr-xr-x  3 root root    4096 Mar  9 11:32 artifacts
    drwxr-xr-x  3 root root    4096 Mar  9 06:42 cache
    drwxr-xr-x  3 root root    4096 Mar  9 11:31 deps
    drwxr-xr-x 15 root root    4096 Mar  9 11:32 src
    -rw-r--r--  1 root root  239388 Mar  9 11:32 subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb
    -rw-r--r--  1 root root    2440 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1.debian.tar.xz
    -rw-r--r--  1 root root    1018 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1.dsc
    -rw-r--r--  1 root root   10199 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo
    -rw-r--r--  1 root root    2392 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.changes
    -rw-r--r--  1 root root 1920024 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.deb
    -rw-r--r--  1 root root  148912 Mar  9 11:32 subplot_0.14.0.ci20260309T113235.orig.tar.xz
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/.build-id/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/.build-id/88/
    -rw-r--r-- root/root   1455704 2026-03-09 11:32 ./usr/lib/debug/.build-id/88/1135dd1827d23c73bde0b00e1afd235bc57f27.debug
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/
    lrwxrwxrwx root/root         0 2026-03-09 11:32 ./usr/share/doc/subplot-dbgsym -> subplot
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./bin/
    -rwxr-xr-x root/root   7184184 2026-03-09 11:32 ./bin/subplot
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/subplot/
    -rw-r--r-- root/root      3623 2026-03-09 11:31 ./usr/share/doc/subplot/README.md
    -rw-r--r-- root/root       672 2026-03-09 11:32 ./usr/share/doc/subplot/changelog.Debian.gz
    -rw-r--r-- root/root      1394 2026-03-09 11:31 ./usr/share/doc/subplot/copyright
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/lintian/
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/lintian/overrides/
    -rw-r--r-- root/root       103 2026-03-09 11:31 ./usr/share/lintian/overrides/subplot
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/subplot/
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/common/
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/common/lib/
    -rw-r--r-- root/root     10532 2026-03-09 11:31 ./usr/share/subplot/common/lib/files.yaml
    -rw-r--r-- root/root      8784 2026-03-09 11:31 ./usr/share/subplot/common/lib/runcmd.yaml
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/python/
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/python/lib/
    -rw-r--r-- root/root     10415 2026-03-09 11:31 ./usr/share/subplot/python/lib/daemon.py
    -rw-r--r-- root/root      4434 2026-03-09 11:31 ./usr/share/subplot/python/lib/daemon.yaml
    -rw-r--r-- root/root      8048 2026-03-09 11:31 ./usr/share/subplot/python/lib/files.py
    -rw-r--r-- root/root      8657 2026-03-09 11:31 ./usr/share/subplot/python/lib/runcmd.py
    drwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/subplot/python/template/
    -rw-r--r-- root/root      1275 2026-03-09 11:31 ./usr/share/subplot/python/template/asserts.py
    -rw-r--r-- root/root      2457 2026-03-09 11:31 ./usr/share/subplot/python/template/context.py
    -rw-r--r-- root/root      4611 2026-03-09 11:31 ./usr/share/subplot/python/template/context_tests.py
    -rw-r--r-- root/root       201 2026-03-09 11:31 ./usr/share/subplot/python/template/encoding.py
    -rw-r--r-- root/root       474 2026-03-09 11:31 ./usr/share/subplot/python/template/encoding_tests.py
    -rw-r--r-- root/root       412 2026-03-09 11:31 ./usr/share/subplot/python/template/files.py
    -rw-r--r-- root/root      4821 2026-03-09 11:31 ./usr/share/subplot/python/template/main.py
    -rw-r--r-- root/root      2785 2026-03-09 11:31 ./usr/share/subplot/python/template/scenarios.py
    -rw-r--r-- root/root      2565 2026-03-09 11:31 ./usr/share/subplot/python/template/template.py.tera
    -rw-r--r-- root/root       137 2026-03-09 11:31 ./usr/share/subplot/python/template/template.yaml
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/lib/
    -rw-r--r-- root/root       788 2026-03-09 11:31 ./usr/share/subplot/rust/lib/datadir.yaml
    drwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/template/
    -rw-r--r-- root/root      1449 2026-03-09 11:31 ./usr/share/subplot/rust/template/macros.rs.tera
    -rw-r--r-- root/root      1213 2026-03-09 11:31 ./usr/share/subplot/rust/template/template.rs.tera
    -rw-r--r-- root/root        71 2026-03-09 11:31 ./usr/share/subplot/rust/template/template.yaml
    -rw-r--r-- root/root      2103 2026-03-09 11:31 ./usr/share/subplot/subplot.css
    
    Stderr:
    + echo 'PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
    + export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    + PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    + export CARGO_HOME=/ci/deps
    + CARGO_HOME=/ci/deps
    + export DEBEMAIL=liw@liw.fi
    + DEBEMAIL=liw@liw.fi
    + export 'DEBFULLNAME=Lars Wirzenius'
    + DEBFULLNAME='Lars Wirzenius'
    + /bin/env
    + command -v cargo
    + command -v rustc
    + cargo --version
    + rustc --version
    ++ dpkg-parsechangelog -SSource
    + name=subplot
    ++ dpkg-parsechangelog -SVersion
    + version=0.14.0.ci20260309T113235-1
    ++ echo 0.14.0.ci20260309T113235-1
    ++ sed 's/-[^-]*$//'
    + uv=0.14.0.ci20260309T113235
    ++ dpkg --print-architecture
    + arch=amd64
    + orig=../subplot_0.14.0.ci20260309T113235.orig.tar.xz
    + deb=../subplot_0.14.0.ci20260309T113235-1_amd64.deb
    + changes=../subplot_0.14.0.ci20260309T113235-1_amd64.changes
    + git archive HEAD
    + xz
    + dpkg-buildpackage -us -uc
     dpkg-source --before-build .
     debian/rules clean
     dpkg-source -b .
     debian/rules build
     debian/rules binary
      Installing subplot-bin v0.14.0 (/ci/src/bin)
       Compiling subplot v0.14.0 (/ci/src)
       Compiling subplot-bin v0.14.0 (/ci/src/bin)
        Finished `release` profile [optimized] target(s) in 11.34s
      Installing /ci/src/debian/subplot/bin/subplot
       Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)
    warning: be sure to add `/ci/src/debian/subplot/bin` to your PATH to be able to run the installed binaries
    dh_installchangelogs: warning: Could not parse timestamp '15 April 2022 15:00:00 +0100'. debian/changelog will not be trimmed.
    dh_installchangelogs: warning: debian/changelog could not be trimmed. The full changelog will be installed.
    dpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols
    dpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined
    dpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined
    dpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined
    dpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined
     dpkg-genbuildinfo -O../subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo
     dpkg-genchanges -O../subplot_0.14.0.ci20260309T113235-1_amd64.changes
     dpkg-source --after-build .
    + ls -l ..
    + for x in ../*.deb
    + dpkg -c ../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb
    + for x in ../*.deb
    + dpkg -c ../subplot_0.14.0.ci20260309T113235-1_amd64.deb
    + mv ../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb ../subplot_0.14.0.ci20260309T113235-1.debian.tar.xz ../subplot_0.14.0.ci20260309T113235-1.dsc ../subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo ../subplot_0.14.0.ci20260309T113235-1_amd64.changes ../subplot_0.14.0.ci20260309T113235-1_amd64.deb ../subplot_0.14.0.ci20260309T113235.orig.tar.xz /ci/artifacts/.
    
  • plan: Action succeeded deb
    After 0.00 seconds at 2026-03-09 11:32:52Z
    Deb(
        Deb {
            packages: Some(
                ".",
            ),
        },
    )
plan: Successful action shell: find /ci/artifacts
After 67.24 seconds at 2026-03-09 11:32:52Z
  • plan: Start action shell: find /ci/artifacts
    After 0.00 seconds at 2026-03-09 11:32:52Z
    Shell(
        Shell {
            shell: "find /ci/artifacts\n",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-09 11:32:52Z
    • bash
    • -c
    • set -xeuo pipefail find /ci/artifacts
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-09 11:32:52Z
    Exit code: 0
    Stdout:
    /ci/artifacts
    /ci/artifacts/muck.html
    /ci/artifacts/runcmd.html
    /ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.deb
    /ci/artifacts/files.html
    /ci/artifacts/subplot_0.14.0.ci20260309T113235-1.debian.tar.xz
    /ci/artifacts/website.html
    /ci/artifacts/seq.html
    /ci/artifacts/user-guide.html
    /ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo
    /ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.changes
    /ci/artifacts/subplot_0.14.0.ci20260309T113235-1.dsc
    /ci/artifacts/libdocs
    /ci/artifacts/libdocs/daemon.html
    /ci/artifacts/libdocs/runcmd.html
    /ci/artifacts/libdocs/files.html
    /ci/artifacts/subplot.html
    /ci/artifacts/subplot_0.14.0.ci20260309T113235.orig.tar.xz
    /ci/artifacts/subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb
    
    Stderr:
    + find /ci/artifacts
    
  • plan: Action succeeded shell: find /ci/artifacts
    After 0.00 seconds at 2026-03-09 11:32:52Z
    Shell(
        Shell {
            shell: "find /ci/artifacts\n",
        },
    )
plan: Successful action tar_create
After 67.29 seconds at 2026-03-09 11:32:52Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-03-09 11:32:52Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-03-09 11:32:56Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action tar_create
After 71.31 seconds at 2026-03-09 11:32:56Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-03-09 11:32:56Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-03-09 11:32:56Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
plan: Plan succeeded
After 71.32 seconds at 2026-03-09 11:32:56ZHopefully all is good.

Raw log messages for Ambient troubleshooting

Raw log messages

These raw log messages are meant to help Ambient developers figure out problems. You can ignore them.

  1. {
      "type": "executor_starts",
      "name": "ambient-execute-plan",
      "version": "0.13.1@52633e5",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 910586757
      },
      "log_source": "Plan"
    }
  2. {
      "type": "runnable_plan",
      "steps": [
        {
          "action": "mkdir",
          "pathname": "/ci"
        },
        {
          "action": "mkdir",
          "pathname": "/ci/artifacts"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdc",
          "directory": "/ci/src"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdf",
          "directory": "/ci/deps"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "shell",
          "shell": "ln -sf /ci /workspace"
        },
        {
          "action": "shell",
          "shell": "git config --global user.name 'Ambient CI'"
        },
        {
          "action": "shell",
          "shell": "git config --global user.email ambient@example.com"
        },
        {
          "action": "cargo_fmt"
        },
        {
          "action": "cargo_clippy"
        },
        {
          "action": "shell",
          "shell": "make OFFLINE=\"--offline\"\ncp -a doc/* /ci/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n"
        },
        {
          "action": "custom",
          "name": "dch",
          "args": {
            "debemail": "liw@liw.fi",
            "debfullname": "Lars Wirzenius"
          }
        },
        {
          "action": "deb",
          "packages": "."
        },
        {
          "action": "shell",
          "shell": "find /ci/artifacts\n"
        },
        {
          "action": "tar_create",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "tar_create",
          "archive": "/dev/vdd",
          "directory": "/ci/artifacts"
        }
      ],
      "executor_drive": "/dev/vdb",
      "source_drive": "/dev/vdc",
      "artifact_drive": "/dev/vdd",
      "cache_drive": "/dev/vde",
      "deps_drive": "/dev/vdf",
      "workspace_dir": "/ci",
      "source_dir": "/ci/src",
      "deps_dir": "/ci/deps",
      "cache_dir": "/ci/cache",
      "artifacts_dir": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 913794166
      },
      "log_source": "Plan"
    }
  3. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 933387488
      },
      "log_source": "Plan"
    }
  4. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 937332240
      },
      "log_source": "Plan"
    }
  5. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 939903051
      },
      "log_source": "Plan"
    }
  6. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 942268387
      },
      "log_source": "Plan"
    }
  7. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 944979790
      },
      "log_source": "Plan"
    }
  8. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 971555856
      },
      "log_source": "Plan"
    }
  9. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1773055904,
        "nanos_since_epoch": 974187378
      },
      "log_source": "Plan"
    }
  10. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1773055906,
        "nanos_since_epoch": 340721664
      },
      "log_source": "Plan"
    }
  11. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773055906,
        "nanos_since_epoch": 340758028
      },
      "log_source": "Plan"
    }
  12. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 928811780
      },
      "log_source": "Plan"
    }
  13. {
      "type": "execute_action",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 931499617
      },
      "log_source": "Plan"
    }
  14. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            108,
            110,
            32,
            45,
            115,
            102,
            32,
            47,
            99,
            105,
            32,
            47,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 933891294
      },
      "log_source": "Plan"
    }
  15. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ ln -sf /ci /workspace\n",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 941114848
      },
      "log_source": "Plan"
    }
  16. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 943725954
      },
      "log_source": "Plan"
    }
  17. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 946133931
      },
      "log_source": "Plan"
    }
  18. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            110,
            97,
            109,
            101,
            32,
            39,
            65,
            109,
            98,
            105,
            101,
            110,
            116,
            32,
            67,
            73,
            39,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 948805573
      },
      "log_source": "Plan"
    }
  19. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.name 'Ambient CI'\n",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 959110908
      },
      "log_source": "Plan"
    }
  20. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 962014186
      },
      "log_source": "Plan"
    }
  21. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 964689195
      },
      "log_source": "Plan"
    }
  22. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            101,
            109,
            97,
            105,
            108,
            32,
            97,
            109,
            98,
            105,
            101,
            110,
            116,
            64,
            101,
            120,
            97,
            109,
            112,
            108,
            101,
            46,
            99,
            111,
            109,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 967463886
      },
      "log_source": "Plan"
    }
  23. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.email ambient@example.com\n",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 975569777
      },
      "log_source": "Plan"
    }
  24. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 978590752
      },
      "log_source": "Plan"
    }
  25. {
      "type": "execute_action",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 981391114
      },
      "log_source": "Plan"
    }
  26. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055911,
        "nanos_since_epoch": 983384527
      },
      "log_source": "Plan"
    }
  27. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 39040735
      },
      "log_source": "Plan"
    }
  28. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 41839734
      },
      "log_source": "Plan"
    }
  29. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 148249829
      },
      "log_source": "Plan"
    }
  30. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 148289227
      },
      "log_source": "Plan"
    }
  31. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 194751435
      },
      "log_source": "Plan"
    }
  32. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            102,
            109,
            116
          ]
        },
        {
          "Unix": [
            45,
            45,
            99,
            104,
            101,
            99,
            107
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 197577529
      },
      "log_source": "Plan"
    }
  33. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 423000470
      },
      "log_source": "Plan"
    }
  34. {
      "type": "action_succeeded",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 423032014
      },
      "log_source": "Plan"
    }
  35. {
      "type": "execute_action",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 423037669
      },
      "log_source": "Plan"
    }
  36. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 423045386
      },
      "log_source": "Plan"
    }
  37. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 466296991
      },
      "log_source": "Plan"
    }
  38. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 469061777
      },
      "log_source": "Plan"
    }
  39. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 549743510
      },
      "log_source": "Plan"
    }
  40. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 552491876
      },
      "log_source": "Plan"
    }
  41. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 594076363
      },
      "log_source": "Plan"
    }
  42. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            97,
            108,
            108,
            45,
            116,
            97,
            114,
            103,
            101,
            116,
            115
          ]
        },
        {
          "Unix": [
            45,
            45,
            110,
            111,
            45,
            100,
            101,
            112,
            115
          ]
        },
        {
          "Unix": [
            45,
            45
          ]
        },
        {
          "Unix": [
            45,
            45,
            100,
            101,
            110,
            121
          ]
        },
        {
          "Unix": [
            119,
            97,
            114,
            110,
            105,
            110,
            103,
            115
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055912,
        "nanos_since_epoch": 594119693
      },
      "log_source": "Plan"
    }
  43. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)\n   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)\n    Checking subplot-bin v0.14.0 (/ci/src/bin)\n    Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.80s\n",
      "timestamp": {
        "secs_since_epoch": 1773055917,
        "nanos_since_epoch": 501925684
      },
      "log_source": "Plan"
    }
  44. {
      "type": "action_succeeded",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1773055917,
        "nanos_since_epoch": 508947116
      },
      "log_source": "Plan"
    }
  45. {
      "type": "execute_action",
      "action": "shell",
      "shell": "make OFFLINE=\"--offline\"\ncp -a doc/* /ci/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n",
      "timestamp": {
        "secs_since_epoch": 1773055917,
        "nanos_since_epoch": 511038945
      },
      "log_source": "Plan"
    }
  46. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            109,
            97,
            107,
            101,
            32,
            79,
            70,
            70,
            76,
            73,
            78,
            69,
            61,
            34,
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101,
            34,
            10,
            99,
            112,
            32,
            45,
            97,
            32,
            100,
            111,
            99,
            47,
            42,
            32,
            47,
            99,
            105,
            47,
            97,
            114,
            116,
            105,
            102,
            97,
            99,
            116,
            115,
            47,
            46,
            10,
            10,
            35,
            32,
            67,
            108,
            101,
            97,
            110,
            32,
            117,
            112,
            32,
            97,
            102,
            116,
            101,
            114,
            32,
            116,
            101,
            115,
            116,
            115,
            32,
            97,
            110,
            100,
            32,
            100,
            111,
            99,
            117,
            109,
            101,
            110,
            116,
            97,
            116,
            105,
            111,
            110,
            32,
            98,
            117,
            105,
            108,
            100,
            105,
            110,
            103,
            46,
            10,
            103,
            105,
            116,
            32,
            114,
            101,
            115,
            101,
            116,
            32,
            45,
            45,
            104,
            97,
            114,
            100,
            10,
            103,
            105,
            116,
            32,
            99,
            108,
            101,
            97,
            110,
            32,
            45,
            102,
            100,
            120,
            10,
            103,
            105,
            116,
            32,
            115,
            116,
            97,
            116,
            117,
            115,
            32,
            45,
            45,
            105,
            103,
            110,
            111,
            114,
            101,
            100,
            10,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055917,
        "nanos_since_epoch": 515412479
      },
      "log_source": "Plan"
    }
  47. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "which cargo\n/root/.cargo/bin/cargo\nwhich dot\n/usr/bin/dot\nwhich plantuml\n/usr/bin/plantuml\nwhich python3\n/usr/bin/python3\nwhich rustc\n/root/.cargo/bin/rustc\nwhich rustfmt\n/root/.cargo/bin/rustfmt\nwhich tidy\n/usr/bin/tidy\nif which shellcheck; then shellcheck *.sh; fi\n/usr/bin/shellcheck\nif cargo clippy --version; then \\\n    cargo clippy --locked --offline --workspace --all-targets -- -Dwarnings && \\\n\tcd examples/seq && cargo clippy --workspace --all-targets -- -Dwarnings; \\\nfi\nclippy 0.1.94 (4a4ef493e3 2026-03-02)\nrm -rf \"/ci/src/inst\"\ncargo install --target x86_64-unknown-linux-musl --locked --offline --path=bin --root=\"/ci/src/inst\" --debug\nmv \"/ci/src/inst\"/bin/* \"/ci/src/inst\"\nrm -rf \"/ci/src/inst\"/.crate*  \"/ci/src/inst\"/bin\ncd share/python/template && python3 context_tests.py\ncd share/python/template && python3 encoding_tests.py\nenv SUBPLOT_DIR=\"/ci/src/inst\" cargo test --target x86_64-unknown-linux-musl --workspace -- \n\nrunning 108 tests\ntest bindings::test_binding::creates_new ... ok\ntest bindings::test_binding::does_not_match_with_wrong_kind ... ok\ntest bindings::test_binding::case_sensitive_mismatch ... ok\ntest bindings::test_binding::does_not_match_with_wrong_text ... ok\ntest bindings::test_binding::match_with_fixed_pattern ... ok\ntest bindings::test_binding::equal ... ok\ntest bindings::test_binding::not_equal ... ok\ntest bindings::test_bindings::add_from_yaml_notices_multiple_keywords ... ok\ntest bindings::test_bindings::adds_binding ... ok\ntest bindings::test_binding::match_with_regex ... ok\ntest bindings::test_bindings::does_not_find_match_for_unmatching_kind ... ok\ntest bindings::test_bindings::does_not_find_match_for_unmatching_pattern ... ok\ntest bindings::test_bindings::finds_match_for_fixed_string_pattern ... ok\ntest bindings::test_bindings::finds_match_for_regexp_pattern ... ok\ntest bindings::test_bindings::has_no_bindings_initially ... ok\ntest bindings::test_bindings::two_matching_bindings ... ok\ntest bindings::test_bindings::adds_from_yaml ... ok\ntest bindings::test_bindings::typemap_must_match_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::returns_boring_pattern_as_is ... ok\ntest bindings::test_regex_from_simple_pattern::returns_empty_string_as_is ... ok\ntest bindings::test_regex_from_simple_pattern::kindless_simple_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace ... ok\ntest bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace_before_capture ... ok\ntest bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace ... ok\ntest bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace_before_capture ... ok\ntest bindings::test_regex_from_simple_pattern::returns_pattern_with_regexp_chars_escaped ... ok\ntest bindings::test_regex_from_simple_pattern::simple_int_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::simple_number_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::simple_text_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::simple_word_pattern ... ok\ntest bindings::test_regex_from_simple_pattern::typemap_and_pattern_kind_must_match ... ok\ntest bindings::test_regex_from_simple_pattern::typemap_checked_on_pattern_parse_and_default_agrees ... ok\ntest bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_default ... ok\ntest bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_explicit ... ok\ntest bindings::test_regex_from_simple_pattern::typemap_used_when_kind_not_present ... ok\ntest blockattr::test::empty_braces ... ok\ntest blockattr::test::empty_string ... ok\ntest blockattr::test::just_word ... ok\ntest blockattr::test::open_brace_without_close ... ok\ntest blockattr::test::parse_one_dotted_word ... ok\ntest blockattr::test::parse_one_id ... ok\ntest blockattr::test::parse_one_kv ... ok\ntest blockattr::test::parse_one_kv_with_double_quotes ... ok\ntest blockattr::test::parse_one_kv_with_single_quotes ... ok\ntest blockattr::test::parse_one_word ... ok\ntest blockattr::test::two_ids ... ok\ntest blockattr::test::two_words ... ok\ntest codegen::test::verify_commentsafe_filter ... ok\ntest codegen::test::verify_name_slugification ... ok\ntest html::test_tag::can_self_close ... ok\ntest html::test_tag::cannot_self_close ... ok\ntest matches::test::returns_text ... ok\ntest matches::test::returns_uncaptured ... ok\ntest matches::test_partial_steps::different_captured_texts_dont_match ... ok\ntest matches::test_partial_steps::different_uncaptured_texts_dont_match ... ok\ntest matches::test_partial_steps::differently_captured_texts_dont_match ... ok\ntest matches::test_partial_steps::differently_named_captured_texts_dont_match ... ok\ntest matches::test_partial_steps::identical_captured_texts_match ... ok\ntest matches::test_partial_steps::identical_uncaptured_texts_match ... ok\ntest md::test::finds_block_classes ... ok\ntest md::test::finds_embedded_files ... ok\ntest md::test::finds_images ... ok\ntest md::test::finds_no_blocks_in_empty_doc ... ok\ntest md::test::finds_no_classes_when_no_blocks_have_them ... ok\ntest md::test::finds_no_embedded_files_in_empty_doc ... ok\ntest md::test::finds_no_images_in_empty_doc ... ok\ntest md::test::finds_no_scenarios_in_empty_doc ... ok\ntest md::test::finds_scenarios ... ok\ntest md::test::loads_empty_doc ... ok\ntest md::test::parses_auto_as_auto ... ok\ntest md::test::parses_empty_as_error ... ok\ntest md::test::parses_garbage_as_error ... ok\ntest md::test::parses_no_as_no ... ok\ntest md::test::parses_no_auto_newline_as_auto ... ok\ntest md::test::parses_yes_as_yes ... ok\ntest md::test_extract::returns_error_if_scenario_has_no_title ... ok\ntest md::test_extract::returns_nothing_if_there_is_no_scenario ... ok\ntest md::test_extract::returns_parent_section_with_scenario_snippet ... ok\ntest md::test_extract::returns_scenario_if_there_is_one ... ok\ntest md::test_extract::skips_scenarioless_deeper_headings ... ok\ntest md::test_extract::skips_scenarioless_parent_heading ... ok\ntest md::test_extract::skips_scenarioless_section_in_favour_of_same_level ... ok\ntest metadata::test::full_meta ... ok\ntest scenarios::filtertest::exclude_slow ... ok\ntest scenarios::filtertest::exclude_unimportant_slow ... ok\ntest scenarios::filtertest::include_all ... ok\ntest scenarios::filtertest::include_fast ... ok\ntest scenarios::filtertest::include_none ... ok\ntest scenarios::test::adds_step ... ok\ntest scenarios::test::has_no_steps_initially ... ok\ntest scenarios::test::has_title ... ok\ntest steps::test::fails_to_parse_and ... ok\ntest steps::test::parses_and ... ok\ntest steps::test::parses_given ... ok\ntest steps::test::parses_given_with_extra_spaces ... ok\ntest steps::test::parses_then ... ok\ntest steps::test::parses_when ... ok\ntest steps::test_steps_parser::empty_string ... ok\ntest steps::test_steps_parser::preserve_nonascii_whitespace ... ok\ntest steps::test_steps_parser::simple ... ok\ntest steps::test_steps_parser::two_simple ... ok\ntest templatespec::test::new_from_yaml ... ok\ntest toc::test_numberer::numbering ... ok\ntest toc::test_slugs::short_and_simple ... ok\ntest toc::test_slugs::unique_for_identical_simple_headings ... ok\ntest toc::test_toc::iterate ... ok\ntest toc::test_toc::uses_given_slug ... ok\ntest bindings::test_regex_from_simple_pattern::simple_uint_pattern ... ok\n\ntest result: ok. 108 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s\n\n\nrunning 1 test\ntest bindings_microbenchmark ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.28s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 4 tests\ntest more_than_one_number ... ok\ntest no_arguments ... ok\ntest not_a_number ... ok\ntest one_number ... ok\n\ntest result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 7 tests\ntest create_on_disk_files_from_embedded_files ... ok\ntest directories ... ok\ntest file_and_directory_removal ... ok\ntest file_equality ... ok\ntest file_metadata ... ok\ntest file_modification_time ... ok\ntest file_contents ... ok\n\ntest result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s\n\n\nrunning 21 tests\ntest check_stderr_doesn_t_contain_sub_string ... ok\ntest check_stderr_doesn_t_match_regular_expressions ... ok\ntest check_stderr_is_exactly_as_wanted ... ok\ntest check_stderr_is_not_exactly_something ... ok\ntest check_stderr_using_sub_string_search ... ok\ntest check_stderr_using_regular_expressions ... ok\ntest check_stdout_doesn_t_contain_sub_string ... ok\ntest check_stdout_doesn_t_match_regular_expression ... ok\ntest check_stdout_is_exactly_as_wanted ... ok\ntest check_stdout_is_not_exactly_something ... ok\ntest check_stdout_using_regular_expressions ... ok\ntest check_stdout_using_sub_string_search ... ok\ntest check_we_can_prepend_to__path ... ok\ntest execution_in_a_sub_directory_does_not_affect_home ... ok\ntest failed_execution ... ok\ntest failed_execution_in_a_sub_directory ... ok\ntest stdin_comes_from_a_named_file ... ok\ntest stdin_contains_exactly ... ok\ntest setting_and_clearing_of_environment_variables ... ok\ntest successful_execution_in_a_sub_directory ... ok\ntest successful_execution ... ok\n\ntest result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s\n\n\nrunning 28 tests\ntest capture_using_regular_expressions ... ok\ntest all_the_keywords ... ok\ntest capture_using_simple_patterns ... ok\ntest cleanup_functions_get_called_on_failure__python_ ... ok\ntest code_generator_gives_an_error_if_input_document_lacks_title ... ok\ntest cleanup_functions_gets_called_on_success__python_ ... ok\ntest examples_are_not_files ... ok\ntest empty_lines_in_scenarios ... ok\ntest files_not_in_current_working_directory ... ok\ntest lowest_level_heading_is_name_of_scenario ... ok\ntest missing_functions_file ... ok\ntest misuse_of_continuation_keywords ... ok\ntest next_heading_at_higher_level_starts_new_scenario ... ok\ntest no_scenarios_means_codegen_fails ... ok\ntest no_template_means_you_can_docgen_but_not_codegen ... ok\ntest next_heading_at_same_level_starts_new_scenario ... ok\ntest recall_values_for_use_in_later_steps ... ok\ntest running_only_chosen_scenarios_with_python ... ok\ntest simple_patterns_with_regex_metacharacters__allowed_case ... ok\ntest simple_patterns_with_regex_metacharacters__forbidden_case ... ok\ntest set_environment_variables_in_generated_test_programs ... ok\ntest steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok\ntest steps_which_do_not_match_bindings_do_not_work ... ok\ntest steps_which_match_more_than_one_binding_do_not_work ... ok\ntest smoke_test ... ok\ntest subheadings_don_t_start_new_scenario ... ok\ntest subplot_accepts_title_and_headings_with_inline_markup ... ok\ntest temporary_files_in_scenarios_in_python ... ok\n\ntest result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.02s\n\n\nrunning 4 tests\ntest pikchr ... ok\ntest dot ... ok\ntest roadmap ... ok\ntest plantuml ... ok\n\ntest result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.61s\n\n\nrunning 28 tests\ntest attempt_to_use_definition_list ... ok\ntest bad__add_newline__value ... ok\ntest class_name_validation ... ok\ntest date_given_in_metadata ... ok\ntest date_given_on_command_line ... ok\ntest document_generator_gives_an_error_if_input_document_lacks_title ... ok\ntest dot ... ok\ntest css_urls ... ok\ntest embedded_css ... ok\ntest examples_may_be_unused ... ok\ntest extract_embedded_file ... ok\ntest fail_if_embedded_file_isn_t_used ... ok\ntest fail_if_two_filenames_only_differ_in_case ... ok\ntest empty_lines_in_scenarios ... ok\ntest indented_scenario_steps_are_not_allowed ... ok\ntest files_not_in_current_working_directory ... ok\ntest missing_bindings_file ... ok\ntest multiple_markdown_files ... ok\ntest no_date_anywhere ... ok\ntest no_template_means_you_can_docgen_but_not_codegen ... ok\ntest pikchr ... ok\ntest named_code_blocks_must_have_an_appropriate_class ... ok\ntest roadmap ... ok\ntest scenario_before_the_first_heading ... ok\ntest smoke_test ... ok\ntest subplot_accepts_title_and_headings_with_inline_markup ... ok\ntest title_markup ... ok\ntest plantuml ... ok\n\ntest result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.84s\n\n\nrunning 1 test\ntest extract_embedded_files ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 5 tests\ntest duplicate_scenario_titles ... ok\ntest extracting_metadata_from_a_document ... ok\ntest list_embedded_files ... ok\ntest scenario_titles ... ok\ntest files_not_in_current_working_directory ... ok\n\ntest result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s\n\n\nrunning 64 tests\ntest attempt_to_use_definition_list ... ok\ntest bad__add_newline__value ... ok\ntest capture_using_regular_expressions ... ok\ntest all_the_keywords ... ok\ntest class_name_validation ... ok\ntest capture_using_simple_patterns ... ok\ntest cleanup_functions_get_called_on_failure__python_ ... ok\ntest code_generator_gives_an_error_if_input_document_lacks_title ... ok\ntest css_urls ... ok\ntest cleanup_functions_gets_called_on_success__python_ ... ok\ntest date_given_on_command_line ... ok\ntest date_given_in_metadata ... ok\ntest document_generator_gives_an_error_if_input_document_lacks_title ... ok\ntest dot ... ok\ntest duplicate_scenario_titles ... ok\ntest embedded_css ... ok\ntest examples_are_not_files ... ok\ntest examples_may_be_unused ... ok\ntest extract_embedded_file ... ok\ntest extract_embedded_file__automatically_add_missing_newline ... ok\ntest extract_embedded_file__by_default_add_missing_newline ... ok\ntest extract_embedded_file__by_default_do_not_add_a_second_newline ... ok\ntest extract_embedded_file__do_not_add_missing_newline ... ok\ntest extract_embedded_file__do_not_automatically_add_second_newline ... ok\ntest extract_embedded_file__explicitly_add_missing_newline ... ok\ntest extract_embedded_file__explicitly_add_second_newline ... ok\ntest extract_embedded_files ... ok\ntest extracting_metadata_from_a_document ... ok\ntest fail_if_embedded_file_isn_t_used ... ok\ntest fail_if_the_same_filename_is_used_twice ... ok\ntest fail_if_two_filenames_only_differ_in_case ... ok\ntest empty_lines_in_scenarios ... ok\ntest indented_scenario_steps_are_not_allowed ... ok\ntest list_embedded_files ... ok\ntest files_not_in_current_working_directory ... ok\ntest missing_bindings_file ... ok\ntest lowest_level_heading_is_name_of_scenario ... ok\ntest misuse_of_continuation_keywords ... ok\ntest missing_functions_file ... ok\ntest multiple_markdown_files ... ok\ntest named_code_blocks_must_have_an_appropriate_class ... ok\ntest next_heading_at_higher_level_starts_new_scenario ... ok\ntest no_date_anywhere ... ok\ntest no_scenarios_means_codegen_fails ... ok\ntest no_template_means_you_can_docgen_but_not_codegen ... ok\ntest pikchr ... ok\ntest next_heading_at_same_level_starts_new_scenario ... ok\ntest recall_values_for_use_in_later_steps ... ok\ntest roadmap ... ok\ntest running_only_chosen_scenarios_with_python ... ok\ntest scenario_before_the_first_heading ... ok\ntest scenario_titles ... ok\ntest set_environment_variables_in_generated_test_programs ... ok\ntest simple_patterns_with_regex_metacharacters__allowed_case ... ok\ntest simple_patterns_with_regex_metacharacters__forbidden_case ... ok\ntest smoke_test ... ok\ntest plantuml ... ok\ntest steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok\ntest steps_which_do_not_match_bindings_do_not_work ... ok\ntest steps_which_match_more_than_one_binding_do_not_work ... ok\ntest subheadings_don_t_start_new_scenario ... ok\ntest subplot_accepts_title_and_headings_with_inline_markup ... ok\ntest title_markup ... ok\ntest temporary_files_in_scenarios_in_python ... ok\n\ntest result: ok. 64 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.70s\n\n\nrunning 3 tests\ntest embedded_files ... ok\ntest data_directory ... ok\ntest fundamentals ... ok\n\ntest result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 6 tests\ntest src/bindings.rs - bindings::BindingImpl::cleanup (line 163) ... ignored\ntest src/bindings.rs - bindings::BindingImpl::function (line 151) ... ignored\ntest src/bindings.rs - bindings::BindingImpl::new (line 137) ... ignored\ntest src/diagrams.rs - diagrams::DotMarkup (line 149) ... ok\ntest src/diagrams.rs - diagrams::PikchrMarkup (line 116) ... ok\ntest src/diagrams.rs - diagrams::PlantumlMarkup (line 198) ... ok\n\ntest result: ok. 3 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 2.61s\n\n\nrunning 73 tests\ntest subplotlib/src/file.rs - file::SubplotDataFile (line 20) ... ok\ntest subplotlib/src/file.rs - file::SubplotDataFile::data (line 120) ... ok\ntest subplotlib/src/file.rs - file::SubplotDataFile::name (line 105) ... ok\ntest subplotlib/src/prelude.rs - prelude (line 6) ... ok\ntest subplotlib/src/prelude.rs - prelude::step (line 100) ... ok\ntest subplotlib/src/file.rs - file::SubplotDataFile::new (line 76) ... ok\ntest subplotlib/src/prelude.rs - prelude::step (line 73) ... ok\ntest subplotlib/src/prelude.rs - prelude::throws (line 26) ... ok\ntest subplotlib/src/prelude.rs - prelude::throws (line 39) ... ok\ntest subplotlib/src/scenario.rs - scenario::Scenario (line 305) ... ok\ntest subplotlib/src/step.rs - step::ScenarioStep (line 24) ... ok\ntest subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space::call (line 160) ... ignored\ntest subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space_megabytes::call (line 171) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::_create_from_embedded_with_other_name_executable::call (line 129) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded::call (line 93) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded_with_other_name::call (line 111) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded::call (line 56) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded_with_other_name::call (line 70) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_text::call (line 220) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_do_not_match::call (line 469) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_match::call (line 443) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_contains::call (line 341) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_do_not_match::call (line 417) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_does_not_exist::call (line 296) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_doesnt_contain::call (line 357) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_exists::call (line 276) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_match::call (line 390) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::file_matches_regex::call (line 374) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::has_different_metadata::call (line 544) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::has_remembered_metadata::call (line 505) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::make_directory::call (line 609) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_ancient::call (line 593) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_recent::call (line 577) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::only_these_exist::call (line 322) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::path_does_not_exist::call (line 659) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::path_exists::call (line 642) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_empty::call (line 678) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_not_empty::call (line 696) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::remember_metadata::call (line 231) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_directory::call (line 619) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_empty_directory::call (line 630) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_file::call (line 181) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::touch::call (line 255) ... ignored\ntest subplotlib/src/steplibrary/files.rs - steplibrary::files::touch_with_timestamp::call (line 193) ... ignored\ntest subplotlib/src/steplibrary.rs - steplibrary (line 10) ... ok\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is::call (line 403) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_nonzero::call (line 442) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_not::call (line 419) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_zero::call (line 431) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_script::call (line 227) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_srcdir_path::call (line 241) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run::call (line 254) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run_in::call (line 271) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::set_environment_variable::call (line 677) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_contains::call (line 594) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_contain::call (line 607) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_match_regex::call (line 663) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_is::call (line 542) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_isnt::call (line 555) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_matches_regex::call (line 649) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_from_file::call (line 480) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_is::call (line 502) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_contains::call (line 568) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_contain::call (line 581) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_match_regex::call (line 635) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_is::call (line 516) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_isnt::call (line 529) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_matches_regex::call (line 621) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run::call (line 285) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run_in::call (line 298) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::unset_environment_variable::call (line 691) ... ignored\ntest subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::Runcmd::join_paths (line 155) ... ok\ntest subplotlib/src/utils.rs - utils::base64_decode (line 9) ... ok\n\ntest result: ok. 14 passed; 0 failed; 59 ignored; 0 measured; 0 filtered out; finished in 2.35s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n/ci/src/inst/subplot --resources /ci/src/share codegen subplot.subplot -o test.py --template python\nrm -f test.log\npython3 test.py --log test.log --env SUBPLOT_DIR=/ci/src/inst \nsrcdir /ci/src\ndatadir /tmp/tmpl7x41vub\nscenario: Bad \"add-newline\" value\n  step 1: given an installed subplot\n  step 2: given file add-newline.subplot\n  step 3: given file add-newline.md\n  step 4: when I try to run subplot docgen add-newline.subplot -o /dev/null\n  step 5: then command fails\n  step 6: then stderr contains \"ERROR add-newline.md:1:1: value of add-newline attribute is not understood: xyzzy\"\n  cleanup 1: given an installed subplot\nscenario: Next heading at higher level starts new scenario\n  step 1: given file higherisnewscenario.subplot\n  step 2: given file higherisnewscenario.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run higherisnewscenario.subplot -o test.py\n  step 7: then scenario \"heading 1.1.1\" was run\n  step 8: then scenario \"heading 1.2\" was run\n  step 9: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Steps which match more than one binding do not work\n  step 1: given file twobindings.subplot\n  step 2: given file twobindings.md\n  step 3: given file twobindings.yaml\n  step 4: given file a_function.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot codegen --run twobindings.subplot -o test.py\n  step 7: then command fails\n  step 8: then stderr contains \"xyzzy\"\n  step 9: then stderr contains \"plugh\"\n  cleanup 5: given an installed subplot\nscenario: Scenario before the first heading\n  step 1: given an installed subplot\n  step 2: given file scenario-before-heading.subplot\n  step 3: given file scenario-before-heading.md\n  step 4: when I try to run subplot docgen scenario-before-heading.subplot -o /dev/null\n  step 5: then command fails\n  step 6: then stderr contains \"ERROR scenario-before-heading.md:1:1: first scenario is before first heading\"\n  cleanup 1: given an installed subplot\nscenario: Subplot accepts title and headings with inline markup\n  step 1: given file fancytitle.subplot\n  step 2: given file fancytitle.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot docgen fancytitle.subplot -o foo.md\n  step 7: then command is successful\n  step 8: when I try to run subplot codegen fancytitle.subplot -o foo.md\n  step 9: then command is successful\n  cleanup 5: given an installed subplot\nscenario: No scenarios means codegen fails\n  step 1: given file noscenarios.subplot\n  step 2: given file noscenarios.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot codegen noscenarios.subplot -o test.py\n  step 5: then command fails\n  step 6: then stderr contains \"no scenarios were found\"\n  cleanup 3: given an installed subplot\nscenario: Lowest level heading is name of scenario\n  step 1: given file scenarioislowest.subplot\n  step 2: given file scenarioislowest.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run scenarioislowest.subplot -o test.py\n  step 7: then scenario \"heading 1.1.1\" was run\n  step 8: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Set environment variables in generated test programs\n  step 1: given file env.subplot\n  step 2: given file env.md\n  step 3: given file env.yaml\n  step 4: given file env.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen env.subplot -o test.py\n  step 7: when I try to run python3 test.py\n  step 8: then command fails\n  step 9: when I try to run python3 test.py --env FOO=foo\n  step 10: then command fails\n  step 11: when I try to run python3 test.py --env FOO=bar\n  step 12: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Extract embedded file, automatically add missing newline\n  step 1: given file auto-without-newline.txt\n  step 2: then auto-without-newline.txt ends in one newline\nscenario: Title markup\n  step 1: given file title-markup.subplot\n  step 2: given file title-markup.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen title-markup.subplot -o foo.html\n  step 5: then file foo.html exists\n  cleanup 3: given an installed subplot\nscenario: Recall values for use in later steps\n  step 1: given file values.subplot\n  step 2: given file values.md\n  step 3: given file values.yaml\n  step 4: given file values.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen values.subplot -o test.py\n  step 7: when I run python3 test.py\n  step 8: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Temporary files in scenarios in Python\n  step 1: given file tmpdir.subplot\n  step 2: given file tmpdir.md\n  step 3: given file tmpdir.yaml\n  step 4: given file tmpdir.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run tmpdir.subplot -o test.py\n  step 7: then command is successful\n  step 8: then scenario \"TMPDIR\" was run\n  step 9: then step \"then TMPDIR is set\" was run\n  cleanup 5: given an installed subplot\nscenario: Fail if embedded file isn't used\n  step 1: given file unusedfile.subplot\n  step 2: given file unusedfile.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot docgen --merciful unusedfile.subplot -o unusedfile.html\n  step 5: then command is successful\n  step 6: then file unusedfile.html exists\n  step 7: then stderr contains \"thisisnotused.txt\"\n  cleanup 3: given an installed subplot\nscenario: Capture using simple patterns\n  step 1: given file simplepattern.subplot\n  step 2: given file simplepattern.md\n  step 3: given file simplepattern.yaml\n  step 4: given file capture.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run simplepattern.subplot -o test.py\n  step 7: then scenario \"Simple pattern\" was run\n  step 8: then step \"given I am Tomjon\" was run\n  step 9: then stdout contains \"function got argument name as Tomjon\"\n  step 10: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Extracting metadata from a document\n  step 1: given file images.subplot\n  step 2: given file images.md\n  step 3: given file b.yaml\n  step 4: given file other.yaml\n  step 5: given file f.py\n  step 6: given file other.py\n  step 7: given file expected.json\n  step 8: given an installed subplot\n  step 9: when I run subplot metadata images.subplot\n  step 10: then stdout contains \"source: images.md\"\n  step 11: then stdout contains \"source: b.yaml\"\n  step 12: then stdout contains \"source: other.yaml\"\n  step 13: then stdout contains \"source: f.py\"\n  step 14: then stdout contains \"source: other.py\"\n  step 15: then stdout contains \"source: image.gif\"\n  step 16: then stdout contains \"bindings: b.yaml\"\n  step 17: then stdout contains \"bindings: other.yaml\"\n  step 18: then stdout contains \"functions[python]: f.py\"\n  step 19: when I run subplot metadata images.subplot -o json\n  step 20: then JSON output matches expected.json\n  cleanup 8: given an installed subplot\nscenario: Extract embedded file, by default add missing newline\n  step 1: given file default-without-newline.txt\n  step 2: then default-without-newline.txt ends in one newline\nscenario: Steps which do not match bindings do not work\n  step 1: given file nobinding.subplot\n  step 2: given file nobinding.md\n  step 3: given file badbindings.yaml\n  step 4: given an installed subplot\n  step 5: when I try to run subplot codegen --run nobinding.subplot -o test.py\n  step 6: then command fails\n  cleanup 4: given an installed subplot\nscenario: Date given on command line\n  step 1: given file dateless.subplot\n  step 2: given file dateless.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen dateless.subplot -o dateoption.html --date=FANCYDATE\n  step 5: then file dateoption.html exists\n  step 6: then file dateoption.html contains \"<title>The Fabulous Title</title>\"\n  step 7: then file dateoption.html contains \"Alfred Pennyworth\"\n  step 8: then file dateoption.html contains \"Geoffrey Butler\"\n  step 9: then file dateoption.html contains \"FANCYDATE\"\n  cleanup 3: given an installed subplot\nscenario: Multiple markdown files\n  step 1: given file multimd.subplot\n  step 2: given file md1.md\n  step 3: given file md2.md\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen multimd.subplot -o multimd.html\n  step 6: when I run cat multimd.html\n  step 7: then file multimd.html exists\n  step 8: then file multimd.html contains \"<title>The Fabulous Title</title>\"\n  step 9: then file multimd.html contains \"First markdown file.\"\n  step 10: then file multimd.html contains \"Second markdown file.\"\n  cleanup 4: given an installed subplot\nscenario: Fail if the same filename is used twice\n  step 1: given file onefiletwice.md\n  step 2: given an installed subplot\n  step 3: when I try to run subplot docgen onefiletwice.md -o onefiletwice.html\n  step 4: then command fails\n  step 5: then file onefiletwice.html does not exist\n  cleanup 2: given an installed subplot\nscenario: Misuse of continuation keywords\n  step 1: given file continuationmisuse.subplot\n  step 2: given file continuationmisuse.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot codegen --run continuationmisuse.subplot -o test.py\n  step 7: then command fails\n  cleanup 5: given an installed subplot\nscenario: List embedded files\n  step 1: given file two-embedded.subplot\n  step 2: given file two-embedded.md\n  step 3: given an installed subplot\n  step 4: when I run subplot metadata --merciful two-embedded.subplot\n  step 5: then stdout contains \"foo.txt\"\n  step 6: then stdout contains \"bar.yaml\"\n  cleanup 3: given an installed subplot\nscenario: No date anywhere\n  step 1: given file dateless.subplot\n  step 2: given file dateless.md\n  step 3: given file dateless.md has modification time 2020-02-26 07:53:17\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen dateless.subplot -o mtime.html\n  step 6: then file mtime.html exists\n  step 7: then file mtime.html contains \"<title>The Fabulous Title</title>\"\n  step 8: then file mtime.html contains \"Alfred Pennyworth\"\n  step 9: then file mtime.html contains \"Geoffrey Butler\"\n  step 10: then file mtime.html contains \"2020-02-26 07:53\"\n  cleanup 4: given an installed subplot\nscenario: Empty lines in scenarios\n  step 1: given file emptylines.subplot\n  step 2: given file emptylines.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot docgen emptylines.subplot -o emptylines.html\n  step 7: then file emptylines.html exists\n  step 8: when I run subplot codegen --run emptylines.subplot -o test.py\n  step 9: then scenario \"Simple\" was run\n  step 10: then step \"given precondition foo\" was run\n  step 11: then step \"when I do bar\" was run\n  step 12: then step \"then bar was done\" was run\n  step 13: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Named code blocks must have an appropriate class\n  step 1: given file named-code-blocks-appropriate.subplot\n  step 2: given file named-code-blocks-appropriate.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I try to run subplot docgen named-code-blocks-appropriate.subplot -o foo.html\n  step 6: then command fails\n  step 7: then stderr contains \"#example-1 at named-code-blocks-appropriate.md:7:1\"\n  step 8: then stderr doesn't contain \"example-2\"\n  step 9: then stderr doesn't contain \"example-3\"\n  cleanup 4: given an installed subplot\nscenario: Simple patterns with regex metacharacters: allowed case\n  step 1: given file confusedbutok.subplot\n  step 2: given file confusedbutok.md\n  step 3: given file confusedbutok.yaml\n  step 4: given file capture.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run confusedbutok.subplot -o test.py\n  step 7: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Class name validation\n  step 1: given file unknown-class-name.subplot\n  step 2: given file unknown-class-name.md\n  step 3: given file known-class-name.subplot\n  step 4: given file known-class-name.md\n  step 5: given file b.yaml\n  step 6: given an installed subplot\n  step 7: when I try to run subplot docgen unknown-class-name.subplot -o unknown-class-name.html\n  step 8: then command fails\n  step 9: then file unknown-class-name.html does not exist\n  step 10: then stderr contains \"Unknown classes found in the document: foobar\"\n  step 11: when I run subplot docgen known-class-name.subplot -o known-class-name.html\n  step 12: then file known-class-name.html exists\n  cleanup 6: given an installed subplot\nscenario: Smoke test\n  step 1: given file simple.subplot\n  step 2: given file simple.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot docgen simple.subplot -o simple.html\n  step 7: then file simple.html exists\n  step 8: when I run subplot codegen --run simple.subplot -o test.py\n  step 9: then scenario \"Simple\" was run\n  step 10: then step \"given precondition foo\" was run\n  step 11: then step \"when I do bar\" was run\n  step 12: then step \"then bar was done\" was run\n  step 13: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Examples may be unused\n  step 1: given file unusedexample.subplot\n  step 2: given file unusedexample.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot docgen --merciful unusedexample.subplot -o unusedexample.html\n  step 5: then command is successful\n  step 6: then file unusedexample.html exists\n  step 7: then stderr doesn't contain \"thisisnotused.txt\"\n  cleanup 3: given an installed subplot\nscenario: Capture using regular expressions\n  step 1: given file regex.subplot\n  step 2: given file regex.md\n  step 3: given file regex.yaml\n  step 4: given file capture.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run regex.subplot -o test.py\n  step 7: then scenario \"Regex\" was run\n  step 8: then step \"given I am Tomjon\" was run\n  step 9: then stdout contains \"function got argument name as Tomjon\"\n  step 10: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Extract embedded file, explicitly add second newline\n  step 1: given file add-has-newline.txt\n  step 2: then add-has-newline.txt ends in two newlines\nscenario: No template means you can docgen but not codegen\n  step 1: given file notemplate.subplot\n  step 2: given file notemplate.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen notemplate.subplot -o notemplate.html\n  step 5: then file notemplate.html exists\n  step 6: when I try to run subplot codegen notemplate.subplot -o test.py\n  step 7: then command fails\n  step 8: then stderr contains \"document has no template\"\n  cleanup 3: given an installed subplot\nscenario: Examples are not files\n  step 1: given file examplesnotfiles.subplot\n  step 2: given file examplesnotfiles.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot codegen examplesnotfiles.subplot -t python -o examplesnotfiles.html\n  step 5: then command fails\n  step 6: then file examplesnotfiles.html does not exist\n  step 7: then stderr contains \"thisisanexample.txt\"\n  cleanup 3: given an installed subplot\nscenario: Extract embedded files\n  step 1: given file embedded-file.subplot\n  step 2: given file embedded-file.md\n  step 3: given file expected.txt\n  step 4: given an installed subplot\n  step 5: when I run subplot extract --merciful embedded-file.subplot foo.txt -d .\n  step 6: then files foo.txt and expected.txt match\n  cleanup 4: given an installed subplot\nscenario: Extract embedded file\n  step 1: given file embedded.subplot\n  step 2: given file embedded.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen --merciful embedded.subplot -o foo.html\n  step 5: then file foo.html exists\n  step 6: then file foo.html matches regex /embedded\\\\.txt/\n  cleanup 3: given an installed subplot\nscenario: Extract embedded file, do not add missing newline\n  step 1: given file no-adding-without-newline.txt\n  step 2: then no-adding-without-newline.txt does not end in a newline\nscenario: Duplicate scenario titles\n  step 1: given file duplicate-scenario-titles.subplot\n  step 2: given file duplicate-scenario-titles.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot metadata duplicate-scenario-titles.subplot\n  step 7: then command fails\n  step 8: then stderr contains \"duplicate\"\n  cleanup 5: given an installed subplot\nscenario: Extract embedded file, explicitly add missing newline\n  step 1: given file add-without-newline.txt\n  step 2: then add-without-newline.txt ends in one newline\nscenario: CSS URLs\n  step 1: given file css-urls.subplot\n  step 2: given file css-urls.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen css-urls.subplot -o foo.html\n  step 6: then file foo.html contains \"https://example.com/flushing.css\"\n  cleanup 4: given an installed subplot\nscenario: Embedded CSS\n  step 1: given file embedded-css.subplot\n  step 2: given file embedded-css.md\n  step 3: given file embedded-css.css\n  step 4: given file b.yaml\n  step 5: given an installed subplot\n  step 6: when I run subplot docgen embedded-css.subplot -o foo.html\n  step 7: then file foo.html contains \"silly: property;\"\n  cleanup 5: given an installed subplot\nscenario: Pikchr\n  step 1: given file pikchr.subplot\n  step 2: given file pikchr.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen pikchr.subplot -o pikchr.html\n  step 5: then file pikchr.html matches regex /src=\"data:image/svg\\\\+xml;base64,/\n  cleanup 3: given an installed subplot\nscenario: Fail if two filenames only differ in case\n  step 1: given file casediff.md\n  step 2: given an installed subplot\n  step 3: when I try to run subplot docgen casediff.md -o casediff.html\n  step 4: then command fails\n  step 5: then file casediff.html does not exist\n  cleanup 2: given an installed subplot\nscenario: Files not in current working directory\n  step 1: given file x/simple.subplot from simple.subplot\n  step 2: given file x/simple.md from simple.md\n  step 3: given file x/b.yaml from b.yaml\n  step 4: given file x/f.py from f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot metadata x/simple.subplot\n  step 7: then command is successful\n  step 8: when I run subplot codegen x/simple.subplot -o test.py\n  step 9: then file test.py exists\n  step 10: when I run subplot docgen x/simple.subplot -o simple.html\n  step 11: then file simple.html exists\n  cleanup 5: given an installed subplot\nscenario: Roadmap\n  step 1: given file roadmap.subplot\n  step 2: given file roadmap.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen roadmap.subplot -o roadmap.html\n  step 6: then file roadmap.html matches regex /src=\"data:image/svg\\\\+xml;base64,/\n  cleanup 4: given an installed subplot\nscenario: Running only chosen scenarios with Python\n  step 1: given file twoscenarios-python.subplot\n  step 2: given file twoscenarios-python.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen twoscenarios-python.subplot -o test.py\n  step 7: when I run python3 test.py on\n  step 8: then scenario \"One\" was run\n  step 9: then scenario \"Two\" was not run\n  step 10: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Extract embedded file, by default do not add a second newline\n  step 1: given file default-has-newline.txt\n  step 2: then default-has-newline.txt ends in one newline\nscenario: Indented scenario steps are not allowed\n  step 1: given file indented-step.subplot\n  step 2: given file indented-step.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I try to run subplot docgen indented-step.subplot -o foo.html\n  step 6: then command fails\n  step 7: then stderr contains \"indented\"\n  cleanup 4: given an installed subplot\nscenario: Subheadings don't start new scenario\n  step 1: given file subisnotnewscenario.subplot\n  step 2: given file subisnotnewscenario.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run subisnotnewscenario.subplot -o test.py\n  step 7: then scenario \"heading 1.1a\" was run\n  step 8: then command is successful\n  cleanup 5: given an installed subplot\nscenario: All the keywords\n  step 1: given file allkeywords.subplot\n  step 2: given file allkeywords.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run allkeywords.subplot -o test.py\n  step 7: then scenario \"All keywords\" was run\n  step 8: then step \"given precondition foo\" was run\n  step 9: then step \"when I do bar\" was run\n  step 10: then step \"then bar was done\" was run\n  step 11: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Steps which do not case-sensitively match sensitive bindings do not work\n  step 1: given file casemismatch.subplot\n  step 2: given file casemismatch.md\n  step 3: given file badbindings.yaml\n  step 4: given an installed subplot\n  step 5: when I try to run subplot codegen --run casemismatch.subplot -o test.py\n  step 6: then command fails\n  cleanup 4: given an installed subplot\nscenario: Extract embedded file, do not automatically add second newline\n  step 1: given file auto-has-newline.txt\n  step 2: then auto-has-newline.txt ends in one newline\nscenario: Missing functions file\n  step 1: given file missing-functions.subplot\n  step 2: given file missing-functions.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I try to run subplot codegen --run missing-functions.subplot -o foo.py\n  step 6: then command fails\n  step 7: then stderr contains \"could not be found\"\n  step 8: then stderr contains \"missing-functions.py\"\n  cleanup 4: given an installed subplot\nscenario: Cleanup functions get called on failure (Python)\n  step 1: given file cleanup-fail-python.subplot\n  step 2: given file cleanup-fail-python.md\n  step 3: given file cleanup.yaml\n  step 4: given file cleanup.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot codegen --run cleanup-fail-python.subplot -o test.py\n  step 7: then scenario \"Cleanup\" was run\n  step 8: then step \"given foo\" was run, and then step \"given bar\"\n  step 9: then cleanup for \"given bar\" was run, and then for \"given foo\"\n  step 10: then cleanup for \"given failure\" was not run\n  step 11: then command fails\n  cleanup 5: given an installed subplot\nscenario: Missing bindings file\n  step 1: given file missing-binding.subplot\n  step 2: given file missing-binding.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot docgen missing-binding.subplot -o foo.html\n  step 5: then command fails\n  step 6: then stderr contains \"could not be found\"\n  step 7: then stderr contains \"missing-binding.yaml\"\n  cleanup 3: given an installed subplot\nscenario: Dot\n  step 1: given file dot.subplot\n  step 2: given file dot.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen dot.subplot -o dot.html\n  step 6: then file dot.html matches regex /src=\"data:image/svg\\\\+xml;base64,/\n  cleanup 4: given an installed subplot\nscenario: Next heading at same level starts new scenario\n  step 1: given file samelevelisnewscenario.subplot\n  step 2: given file samelevelisnewscenario.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run samelevelisnewscenario.subplot -o test.py\n  step 7: then scenario \"heading 1.1.1\" was run\n  step 8: then scenario \"heading 1.1.2\" was run\n  step 9: then command is successful\n  cleanup 5: given an installed subplot\nscenario: Document generator gives an error if input document lacks title\n  step 1: given file notitle.subplot\n  step 2: given file notitle.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot docgen notitle.subplot -o foo.md\n  step 5: then command fails\n  cleanup 3: given an installed subplot\nscenario: Simple patterns with regex metacharacters: forbidden case\n  step 1: given file confusedpattern.subplot\n  step 2: given file confusedpattern.md\n  step 3: given file confusedpattern.yaml\n  step 4: given file capture.py\n  step 5: given an installed subplot\n  step 6: when I try to run subplot codegen --run confusedpattern.subplot -o test.py\n  step 7: then command fails\n  step 8: then stderr contains \"simple pattern contains regex\"\n  cleanup 5: given an installed subplot\nscenario: Attempt to use definition list\n  step 1: given an installed subplot\n  step 2: given file dl.subplot\n  step 3: given file dl.md\n  step 4: when I try to run subplot docgen dl.subplot -o /dev/null\n  step 5: then command fails\n  step 6: then stderr contains \"ERROR dl.md:3:1: attempt to use definition lists in Markdown\"\n  cleanup 1: given an installed subplot\nscenario: Scenario titles\n  step 1: given file scenario-titles.subplot\n  step 2: given file scenario-titles.md\n  step 3: given file b.yaml\n  step 4: given file f.py\n  step 5: given an installed subplot\n  step 6: when I run subplot metadata scenario-titles.subplot\n  step 7: then stdout contains \"My fun scenario title\"\n  cleanup 5: given an installed subplot\nscenario: Code generator gives an error if input document lacks title\n  step 1: given file notitle.subplot\n  step 2: given file notitle.md\n  step 3: given an installed subplot\n  step 4: when I try to run subplot codegen --run notitle.subplot -o test.py\n  step 5: then command fails\n  cleanup 3: given an installed subplot\nscenario: Date given in metadata\n  step 1: given file metadate.subplot\n  step 2: given file metadate.md\n  step 3: given an installed subplot\n  step 4: when I run subplot docgen metadate.subplot -o metadate.html\n  step 5: when I run cat metadate.html\n  step 6: then file metadate.html exists\n  step 7: then file metadate.html contains \"<title>The Fabulous Title</title>\"\n  step 8: then file metadate.html contains \"Alfred Pennyworth\"\n  step 9: then file metadate.html contains \"Geoffrey Butler\"\n  step 10: then file metadate.html contains \"WIP\"\n  cleanup 3: given an installed subplot\nscenario: Cleanup functions gets called on success (Python)\n  step 1: given file cleanup-success-python.subplot\n  step 2: given file cleanup-success-python.md\n  step 3: given file cleanup.yaml\n  step 4: given file cleanup.py\n  step 5: given an installed subplot\n  step 6: when I run subplot codegen --run cleanup-success-python.subplot -o test.py\n  step 7: then scenario \"Cleanup\" was run\n  step 8: then step \"given foo\" was run, and then step \"given bar\"\n  step 9: then cleanup for \"given bar\" was run, and then for \"given foo\"\n  step 10: then command is successful\n  cleanup 5: given an installed subplot\nscenario: PlantUML\n  step 1: given file plantuml.subplot\n  step 2: given file plantuml.md\n  step 3: given file b.yaml\n  step 4: given an installed subplot\n  step 5: when I run subplot docgen plantuml.subplot -o plantuml.html\n  step 6: then file plantuml.html matches regex /src=\"data:image/svg\\\\+xml;base64,/\n  cleanup 4: given an installed subplot\nOK, all scenarios finished successfully\ncd examples/muck && /ci/src/inst/subplot --resources /ci/src/share codegen muck.subplot --run --output test.py\nsrcdir /ci/src/examples/muck\ndatadir /tmp/tmpb7vyidpa\nscenario: Restarting Muck\n  step 1: given a fresh Muck server\n  step 2: given I am Tomjon, with super capability\n  step 3: when I do POST /res with {\"foo\": \"bar\"}\n  step 4: then header Muck-Id is ID\n  step 5: then header Muck-Revision is REV1\n  step 6: when I restart Muck\n  step 7: when I do GET /res with Muck-Id: {ID}\n  step 8: then response code is 200\n  step 9: then header Muck-Revision matches {REV1}\n  step 10: then body matches {\"foo\": \"bar\"}\nscenario: Basic object handling\n  step 1: given a fresh Muck server\n  step 2: given I am Tomjon\n  step 3: when I do POST /res with {\"foo\": \"bar\"}\n  step 4: then response code is 201\n  step 5: then header Muck-Id is ID\n  step 6: then header Muck-Revision is REV1\n  step 7: when I do GET /res with Muck-Id: {ID}\n  step 8: then response code is 200\n  step 9: then header Muck-Revision matches {REV1}\n  step 10: then body matches {\"foo\": \"bar\"}\n  step 11: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {\"foo\":\"yo\"}\n  step 12: then response code is 200\n  step 13: then header Muck-Revision is {REV2}\n  step 14: then revisions {REV1} and {REV2} are different\n  step 15: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {\"foo\":\"yo\"}\n  step 16: then response code is 409\n  step 17: when I do GET /res with Muck-Id: {ID}\n  step 18: then response code is 200\n  step 19: then header Muck-Revision matches {REV2}\n  step 20: then body matches {\"foo\": \"yo\"}\n  step 21: when I do DELETE /res with Muck-Id: {ID}\n  step 22: then response code is 200\n  step 23: when I do GET /res with Muck-Id: {ID}\n  step 24: then response code is 404\nscenario: Updating someone else's data\n  step 1: given a fresh Muck server\n  step 2: given I am Tomjon\n  step 3: when I do POST /res with {\"foo\": \"bar\"}\n  step 4: then header Muck-Id is ID\n  step 5: then header Muck-Revision is REV1\n  step 6: given I am Verence\n  step 7: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {\"foo\":\"yo\"}\n  step 8: then response code is 404\nscenario: Deleting someone else's data\n  step 1: given a fresh Muck server\n  step 2: given I am Tomjon\n  step 3: when I do POST /res with {\"foo\": \"bar\"}\n  step 4: then header Muck-Id is ID\n  step 5: then header Muck-Revision is REV1\n  step 6: given I am Verence\n  step 7: when I do DELETE /res with Muck-Id: {ID}\n  step 8: then response code is 404\nscenario: Accessing someone else's data\n  step 1: given a fresh Muck server\n  step 2: given I am Tomjon\n  step 3: when I do POST /res with {\"foo\": \"bar\"}\n  step 4: then header Muck-Id is ID\n  step 5: then header Muck-Revision is REV1\n  step 6: when I do GET /res with Muck-Id: {ID}\n  step 7: then response code is 200\n  step 8: then header Muck-Revision matches {REV1}\n  step 9: then body matches {\"foo\": \"bar\"}\n  step 10: given I am Verence\n  step 11: when I do GET /res with Muck-Id: {ID}\n  step 12: then response code is 404\nOK, all scenarios finished successfully\nif [ \"--offline\" = \"\" ] ; then \\\n\tcd examples/website && \\\n\t/ci/src/inst/subplot --resources /ci/src/share codegen website.subplot --run --output test.py; \\\nfi\ncd examples/seq && cargo test -- \n\nrunning 4 tests\ntest no_arguments ... ok\ntest more_than_one_number ... ok\ntest not_a_number ... ok\ntest one_number ... ok\n\ntest result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n/ci/src/inst/subplot --resources /ci/src/share docgen subplot.subplot -o subplot.html\n/ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/files.subplot -o tests/subplots/common/files.html\n/ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/runcmd.subplot -o tests/subplots/common/runcmd.html\ncd examples/muck && /ci/src/inst/subplot --resources /ci/src/share/subplot docgen muck.subplot -o muck.html\ncd examples/website && /ci/src/inst/subplot --resources /ci/src/share docgen website.subplot -o website.html\ncd examples/seq && /ci/src/inst/subplot --resources /ci/src/share docgen seq.subplot -o seq.html\n/ci/src/inst/subplot --resources /ci/src/share libdocgen lib/runcmd.yaml --output /ci/src/inst/runcmd.md\nif which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata \"title=lib/runcmd\"  --output /ci/src/inst/runcmd.html /ci/src/inst/runcmd.md; fi\n/ci/src/inst/subplot --resources /ci/src/share libdocgen lib/files.yaml --output /ci/src/inst/files.md\nif which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata \"title=lib/files\"  --output /ci/src/inst/files.html /ci/src/inst/files.md; fi\n/ci/src/inst/subplot --resources /ci/src/share libdocgen python/lib/daemon.yaml --output /ci/src/inst/daemon.md\nif which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata \"title=lib/daemon\"  --output /ci/src/inst/daemon.html /ci/src/inst/daemon.md; fi\n/ci/src/inst/subplot --resources /ci/src/share docgen book/user-guide.subplot --output book/user-guide.html\nmkdir -p doc/libdocs\nfor x in subplot.html tests/subplots/common/*.html examples/*/*.html book/*.html; do if [ -e \"$x\" ]; then mv \"$x\" doc; fi; done\nfor x in /ci/src/inst/*.html; do if [ -e \"$x\" ]; then mv \"$x\" doc/libdocs/; fi; done\nHEAD is now at cfebfc9 Merge branch 'fix-ci' into 'main'\nRemoving doc/\nRemoving examples/muck/test.py\nRemoving inst/\nRemoving share/python/template/__pycache__/\nRemoving test.log\nRemoving test.py\nHEAD detached at cfebfc9\nnothing to commit, working tree clean\n",
      "stderr": "+ make OFFLINE=--offline\n   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)\n   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)\n    Checking subplot-bin v0.14.0 (/ci/src/bin)\n    Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.04s\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s\n  Installing subplot-bin v0.14.0 (/ci/src/bin)\n   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplot-bin v0.14.0 (/ci/src/bin)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.88s\n  Installing /ci/src/inst/bin/subplot\n   Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)\nwarning: be sure to add `/ci/src/inst/bin` to your PATH to be able to run the installed binaries\n............................\n----------------------------------------------------------------------\nRan 28 tests in 0.001s\n\nOK\n..\n----------------------------------------------------------------------\nRan 2 tests in 0.000s\n\nOK\n   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)\n   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)\n   Compiling subplot-bin v0.14.0 (/ci/src/bin)\n   Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)\n    Finished `test` profile [unoptimized + debuginfo] target(s) in 8.87s\n     Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-4eb51c1e86149cc7)\n     Running tests/bindings-ubm.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/bindings_ubm-d956fe63499e364b)\n     Running unittests src/subplot.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-6e2d40b85612c9de)\n     Running tests/seq.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/seq-8f189b8969864ac7)\n     Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-4fef6eb454a800fb)\n     Running tests/files.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/files-46b83a9fe1a10943)\n     Running tests/runcmd.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/runcmd-89549dd3dbb5a7dc)\n     Running tests/subplot-codegen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_codegen-60013b2c5f6419cd)\n     Running tests/subplot-diagrams.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_diagrams-93cb505d641ffc94)\n     Running tests/subplot-docgen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_docgen-a4cfeaf1354d946c)\n     Running tests/subplot-extract.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_extract-27a75e023100fade)\n     Running tests/subplot-metadata.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_metadata-eb5c74dfad67504e)\n     Running tests/subplot-others.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_others-1ce247a5de7a973c)\n     Running tests/subplotlib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-2d3b35de1a9808f6)\n     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/subplotlib_derive-9fc045209741d6bd)\n   Doc-tests subplot\n   Doc-tests subplotlib\n   Doc-tests subplotlib_derive\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)\n   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)\n   Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)\n    Finished `test` profile [unoptimized + debuginfo] target(s) in 1.37s\n     Running tests/seq.rs (/ci/cache/cargo-target/debug/deps/seq-73545bb4a9dac185)\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n+ cp -a doc/files.html doc/libdocs doc/muck.html doc/runcmd.html doc/seq.html doc/subplot.html doc/user-guide.html doc/website.html /ci/artifacts/.\n+ git reset --hard\n+ git clean -fdx\n+ git status --ignored\n",
      "timestamp": {
        "secs_since_epoch": 1773055955,
        "nanos_since_epoch": 88452120
      },
      "log_source": "Plan"
    }
  48. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "make OFFLINE=\"--offline\"\ncp -a doc/* /ci/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n",
      "timestamp": {
        "secs_since_epoch": 1773055955,
        "nanos_since_epoch": 895211788
      },
      "log_source": "Plan"
    }
  49. {
      "type": "execute_action",
      "action": "custom",
      "name": "dch",
      "args": {
        "debemail": "liw@liw.fi",
        "debfullname": "Lars Wirzenius"
      },
      "timestamp": {
        "secs_since_epoch": 1773055955,
        "nanos_since_epoch": 895349357
      },
      "log_source": "Plan"
    }
  50. {
      "type": "custom_action_starts",
      "source": "/ci/src",
      "custom": {
        "name": "dch",
        "args": {
          "debfullname": "Lars Wirzenius",
          "debemail": "liw@liw.fi"
        }
      },
      "exe": ".ambient/dch",
      "exe_exists": false,
      "timestamp": {
        "secs_since_epoch": 1773055955,
        "nanos_since_epoch": 895368911
      },
      "log_source": "Plan"
    }
  51. {
      "type": "custom_action_output",
      "stdout": [
        72,
        69,
        65,
        68,
        32,
        105,
        115,
        32,
        110,
        111,
        119,
        32,
        97,
        116,
        32,
        99,
        102,
        101,
        98,
        102,
        99,
        57,
        32,
        77,
        101,
        114,
        103,
        101,
        32,
        98,
        114,
        97,
        110,
        99,
        104,
        32,
        39,
        102,
        105,
        120,
        45,
        99,
        105,
        39,
        32,
        105,
        110,
        116,
        111,
        32,
        39,
        109,
        97,
        105,
        110,
        39,
        10
      ],
      "stderr": [
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        39,
        68,
        69,
        66,
        69,
        77,
        65,
        73,
        76,
        61,
        34,
        108,
        105,
        119,
        64,
        108,
        105,
        119,
        46,
        102,
        105,
        34,
        39,
        10,
        43,
        32,
        68,
        69,
        66,
        69,
        77,
        65,
        73,
        76,
        61,
        39,
        34,
        108,
        105,
        119,
        64,
        108,
        105,
        119,
        46,
        102,
        105,
        34,
        39,
        10,
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        39,
        68,
        69,
        66,
        70,
        85,
        76,
        76,
        78,
        65,
        77,
        69,
        61,
        34,
        76,
        97,
        114,
        115,
        32,
        87,
        105,
        114,
        122,
        101,
        110,
        105,
        117,
        115,
        34,
        39,
        10,
        43,
        32,
        68,
        69,
        66,
        70,
        85,
        76,
        76,
        78,
        65,
        77,
        69,
        61,
        39,
        34,
        76,
        97,
        114,
        115,
        32,
        87,
        105,
        114,
        122,
        101,
        110,
        105,
        117,
        115,
        34,
        39,
        10,
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        67,
        65,
        82,
        71,
        79,
        95,
        84,
        65,
        82,
        71,
        69,
        84,
        95,
        68,
        73,
        82,
        61,
        47,
        119,
        111,
        114,
        107,
        115,
        112,
        97,
        99,
        101,
        47,
        99,
        97,
        99,
        104,
        101,
        10,
        43,
        32,
        67,
        65,
        82,
        71,
        79,
        95,
        84,
        65,
        82,
        71,
        69,
        84,
        95,
        68,
        73,
        82,
        61,
        47,
        119,
        111,
        114,
        107,
        115,
        112,
        97,
        99,
        101,
        47,
        99,
        97,
        99,
        104,
        101,
        10,
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        67,
        65,
        82,
        71,
        79,
        95,
        72,
        79,
        77,
        69,
        61,
        47,
        119,
        111,
        114,
        107,
        115,
        112,
        97,
        99,
        101,
        47,
        100,
        101,
        112,
        115,
        10,
        43,
        32,
        67,
        65,
        82,
        71,
        79,
        95,
        72,
        79,
        77,
        69,
        61,
        47,
        119,
        111,
        114,
        107,
        115,
        112,
        97,
        99,
        101,
        47,
        100,
        101,
        112,
        115,
        10,
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        72,
        79,
        77,
        69,
        61,
        47,
        114,
        111,
        111,
        116,
        10,
        43,
        32,
        72,
        79,
        77,
        69,
        61,
        47,
        114,
        111,
        111,
        116,
        10,
        43,
        32,
        101,
        120,
        112,
        111,
        114,
        116,
        32,
        80,
        65,
        84,
        72,
        61,
        47,
        114,
        111,
        111,
        116,
        47,
        46,
        99,
        97,
        114,
        103,
        111,
        47,
        98,
        105,
        110,
        58,
        47,
        114,
        111,
        111,
        116,
        47,
        46,
        99,
        97,
        114,
        103,
        111,
        47,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        108,
        111,
        99,
        97,
        108,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        108,
        111,
        99,
        97,
        108,
        47,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        98,
        105,
        110,
        58,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        98,
        105,
        110,
        10,
        43,
        32,
        80,
        65,
        84,
        72,
        61,
        47,
        114,
        111,
        111,
        116,
        47,
        46,
        99,
        97,
        114,
        103,
        111,
        47,
        98,
        105,
        110,
        58,
        47,
        114,
        111,
        111,
        116,
        47,
        46,
        99,
        97,
        114,
        103,
        111,
        47,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        108,
        111,
        99,
        97,
        108,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        108,
        111,
        99,
        97,
        108,
        47,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        117,
        115,
        114,
        47,
        98,
        105,
        110,
        58,
        47,
        115,
        98,
        105,
        110,
        58,
        47,
        98,
        105,
        110,
        10,
        43,
        32,
        103,
        105,
        116,
        32,
        114,
        101,
        115,
        101,
        116,
        32,
        45,
        45,
        104,
        97,
        114,
        100,
        10,
        43,
        32,
        103,
        105,
        116,
        32,
        99,
        108,
        101,
        97,
        110,
        32,
        45,
        102,
        100,
        120,
        10,
        43,
        43,
        32,
        115,
        101,
        100,
        32,
        39,
        115,
        47,
        45,
        91,
        94,
        45,
        93,
        42,
        36,
        47,
        47,
        39,
        10,
        43,
        43,
        32,
        100,
        112,
        107,
        103,
        45,
        112,
        97,
        114,
        115,
        101,
        99,
        104,
        97,
        110,
        103,
        101,
        108,
        111,
        103,
        32,
        45,
        83,
        86,
        101,
        114,
        115,
        105,
        111,
        110,
        10,
        43,
        32,
        86,
        61,
        48,
        46,
        49,
        52,
        46,
        48,
        10,
        43,
        43,
        32,
        100,
        97,
        116,
        101,
        32,
        45,
        117,
        32,
        43,
        37,
        89,
        37,
        109,
        37,
        100,
        84,
        37,
        72,
        37,
        77,
        37,
        83,
        10,
        43,
        32,
        84,
        61,
        50,
        48,
        50,
        54,
        48,
        51,
        48,
        57,
        84,
        49,
        49,
        51,
        50,
        51,
        53,
        10,
        43,
        32,
        118,
        101,
        114,
        115,
        105,
        111,
        110,
        61,
        48,
        46,
        49,
        52,
        46,
        48,
        46,
        99,
        105,
        50,
        48,
        50,
        54,
        48,
        51,
        48,
        57,
        84,
        49,
        49,
        51,
        50,
        51,
        53,
        45,
        49,
        10,
        43,
        32,
        100,
        99,
        104,
        32,
        45,
        118,
        32,
        48,
        46,
        49,
        52,
        46,
        48,
        46,
        99,
        105,
        50,
        48,
        50,
        54,
        48,
        51,
        48,
        57,
        84,
        49,
        49,
        51,
        50,
        51,
        53,
        45,
        49,
        32,
        39,
        67,
        73,
        32,
        98,
        117,
        105,
        108,
        100,
        32,
        117,
        110,
        100,
        101,
        114,
        32,
        65,
        109,
        98,
        105,
        101,
        110,
        116,
        46,
        39,
        10,
        43,
        32,
        100,
        99,
        104,
        32,
        45,
        114,
        32,
        39,
        39,
        10
      ],
      "timestamp": {
        "secs_since_epoch": 1773055956,
        "nanos_since_epoch": 88364898
      },
      "log_source": "Plan"
    }
  52. {
      "type": "action_succeeded",
      "action": "custom",
      "name": "dch",
      "args": {
        "debemail": "liw@liw.fi",
        "debfullname": "Lars Wirzenius"
      },
      "timestamp": {
        "secs_since_epoch": 1773055956,
        "nanos_since_epoch": 88625869
      },
      "log_source": "Plan"
    }
  53. {
      "type": "execute_action",
      "action": "deb",
      "packages": ".",
      "timestamp": {
        "secs_since_epoch": 1773055956,
        "nanos_since_epoch": 88819103
      },
      "log_source": "Plan"
    }
  54. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            47,
            98,
            105,
            110,
            47,
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            35,
            33,
            47,
            117,
            115,
            114,
            47,
            98,
            105,
            110,
            47,
            101,
            110,
            118,
            32,
            98,
            97,
            115,
            104,
            10,
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            10,
            101,
            99,
            104,
            111,
            32,
            34,
            80,
            65,
            84,
            72,
            32,
            97,
            116,
            32,
            115,
            116,
            97,
            114,
            116,
            58,
            32,
            36,
            80,
            65,
            84,
            72,
            34,
            10,
            101,
            120,
            112,
            111,
            114,
            116,
            32,
            80,
            65,
            84,
            72,
            61,
            34,
            47,
            114,
            111,
            111,
            116,
            47,
            46,
            99,
            97,
            114,
            103,
            111,
            47,
            98,
            105,
            110,
            58,
            36,
            80,
            65,
            84,
            72,
            34,
            10,
            101,
            120,
            112,
            111,
            114,
            116,
            32,
            67,
            65,
            82,
            71,
            79,
            95,
            72,
            79,
            77,
            69,
            61,
            47,
            99,
            105,
            47,
            100,
            101,
            112,
            115,
            10,
            101,
            120,
            112,
            111,
            114,
            116,
            32,
            68,
            69,
            66,
            69,
            77,
            65,
            73,
            76,
            61,
            108,
            105,
            119,
            64,
            108,
            105,
            119,
            46,
            102,
            105,
            10,
            101,
            120,
            112,
            111,
            114,
            116,
            32,
            68,
            69,
            66,
            70,
            85,
            76,
            76,
            78,
            65,
            77,
            69,
            61,
            34,
            76,
            97,
            114,
            115,
            32,
            87,
            105,
            114,
            122,
            101,
            110,
            105,
            117,
            115,
            34,
            10,
            47,
            98,
            105,
            110,
            47,
            101,
            110,
            118,
            10,
            10,
            99,
            111,
            109,
            109,
            97,
            110,
            100,
            32,
            45,
            118,
            32,
            99,
            97,
            114,
            103,
            111,
            10,
            99,
            111,
            109,
            109,
            97,
            110,
            100,
            32,
            45,
            118,
            32,
            114,
            117,
            115,
            116,
            99,
            10,
            10,
            99,
            97,
            114,
            103,
            111,
            32,
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            10,
            114,
            117,
            115,
            116,
            99,
            32,
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            10,
            10,
            35,
            32,
            71,
            101,
            116,
            32,
            110,
            97,
            109,
            101,
            32,
            97,
            110,
            100,
            32,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            32,
            111,
            102,
            32,
            115,
            111,
            117,
            114,
            99,
            101,
            32,
            112,
            97,
            99,
            107,
            97,
            103,
            101,
            46,
            10,
            110,
            97,
            109,
            101,
            61,
            34,
            36,
            40,
            100,
            112,
            107,
            103,
            45,
            112,
            97,
            114,
            115,
            101,
            99,
            104,
            97,
            110,
            103,
            101,
            108,
            111,
            103,
            32,
            45,
            83,
            83,
            111,
            117,
            114,
            99,
            101,
            41,
            34,
            10,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            61,
            34,
            36,
            40,
            100,
            112,
            107,
            103,
            45,
            112,
            97,
            114,
            115,
            101,
            99,
            104,
            97,
            110,
            103,
            101,
            108,
            111,
            103,
            32,
            45,
            83,
            86,
            101,
            114,
            115,
            105,
            111,
            110,
            41,
            34,
            10,
            10,
            35,
            32,
            71,
            101,
            116,
            32,
            117,
            112,
            115,
            116,
            114,
            101,
            97,
            109,
            32,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            58,
            32,
            101,
            118,
            101,
            114,
            121,
            116,
            104,
            105,
            110,
            103,
            32,
            98,
            101,
            102,
            111,
            114,
            101,
            32,
            116,
            104,
            101,
            32,
            108,
            97,
            115,
            116,
            32,
            100,
            97,
            115,
            104,
            46,
            10,
            117,
            118,
            61,
            34,
            36,
            40,
            101,
            99,
            104,
            111,
            32,
            34,
            36,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            34,
            32,
            124,
            32,
            115,
            101,
            100,
            32,
            39,
            115,
            47,
            45,
            91,
            94,
            45,
            93,
            42,
            36,
            47,
            47,
            39,
            41,
            34,
            10,
            10,
            35,
            32,
            70,
            105,
            108,
            101,
            115,
            32,
            116,
            104,
            97,
            116,
            32,
            119,
            105,
            108,
            108,
            32,
            98,
            101,
            32,
            99,
            114,
            101,
            97,
            116,
            101,
            100,
            46,
            10,
            97,
            114,
            99,
            104,
            61,
            34,
            36,
            40,
            100,
            112,
            107,
            103,
            32,
            45,
            45,
            112,
            114,
            105,
            110,
            116,
            45,
            97,
            114,
            99,
            104,
            105,
            116,
            101,
            99,
            116,
            117,
            114,
            101,
            41,
            34,
            10,
            111,
            114,
            105,
            103,
            61,
            34,
            46,
            46,
            47,
            36,
            123,
            110,
            97,
            109,
            101,
            125,
            95,
            36,
            123,
            117,
            118,
            125,
            46,
            111,
            114,
            105,
            103,
            46,
            116,
            97,
            114,
            46,
            120,
            122,
            34,
            10,
            100,
            101,
            98,
            61,
            34,
            46,
            46,
            47,
            36,
            123,
            110,
            97,
            109,
            101,
            125,
            95,
            36,
            123,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            125,
            95,
            36,
            123,
            97,
            114,
            99,
            104,
            125,
            46,
            100,
            101,
            98,
            34,
            10,
            99,
            104,
            97,
            110,
            103,
            101,
            115,
            61,
            34,
            46,
            46,
            47,
            36,
            123,
            110,
            97,
            109,
            101,
            125,
            95,
            36,
            123,
            118,
            101,
            114,
            115,
            105,
            111,
            110,
            125,
            95,
            36,
            123,
            97,
            114,
            99,
            104,
            125,
            46,
            99,
            104,
            97,
            110,
            103,
            101,
            115,
            34,
            10,
            10,
            35,
            32,
            67,
            114,
            101,
            97,
            116,
            101,
            32,
            34,
            117,
            112,
            115,
            116,
            114,
            101,
            97,
            109,
            32,
            116,
            97,
            114,
            98,
            97,
            108,
            108,
            34,
            46,
            10,
            103,
            105,
            116,
            32,
            97,
            114,
            99,
            104,
            105,
            118,
            101,
            32,
            72,
            69,
            65,
            68,
            32,
            124,
            32,
            120,
            122,
            32,
            62,
            34,
            36,
            111,
            114,
            105,
            103,
            34,
            10,
            10,
            35,
            32,
            66,
            117,
            105,
            108,
            100,
            32,
            112,
            97,
            99,
            107,
            97,
            103,
            101,
            46,
            10,
            100,
            112,
            107,
            103,
            45,
            98,
            117,
            105,
            108,
            100,
            112,
            97,
            99,
            107,
            97,
            103,
            101,
            32,
            45,
            117,
            115,
            32,
            45,
            117,
            99,
            10,
            10,
            35,
            32,
            68,
            117,
            109,
            112,
            32,
            115,
            111,
            109,
            101,
            32,
            105,
            110,
            102,
            111,
            114,
            109,
            97,
            116,
            105,
            111,
            110,
            32,
            116,
            111,
            32,
            109,
            97,
            107,
            101,
            32,
            105,
            116,
            32,
            101,
            97,
            115,
            105,
            101,
            114,
            32,
            116,
            111,
            32,
            118,
            105,
            115,
            117,
            97,
            108,
            108,
            121,
            32,
            118,
            101,
            114,
            105,
            102,
            121,
            10,
            35,
            32,
            101,
            118,
            101,
            114,
            121,
            116,
            104,
            105,
            110,
            103,
            32,
            108,
            111,
            111,
            107,
            115,
            32,
            79,
            75,
            46,
            32,
            65,
            108,
            115,
            111,
            44,
            32,
            116,
            101,
            115,
            116,
            32,
            116,
            104,
            101,
            32,
            112,
            97,
            99,
            107,
            97,
            103,
            101,
            32,
            119,
            105,
            116,
            104,
            32,
            116,
            104,
            101,
            32,
            108,
            105,
            110,
            116,
            105,
            97,
            110,
            32,
            116,
            111,
            111,
            108,
            46,
            10,
            10,
            108,
            115,
            32,
            45,
            108,
            32,
            46,
            46,
            10,
            102,
            111,
            114,
            32,
            120,
            32,
            105,
            110,
            32,
            46,
            46,
            47,
            42,
            46,
            100,
            101,
            98,
            59,
            32,
            100,
            111,
            32,
            100,
            112,
            107,
            103,
            32,
            45,
            99,
            32,
            34,
            36,
            120,
            34,
            59,
            32,
            100,
            111,
            110,
            101,
            10,
            35,
            32,
            70,
            73,
            88,
            77,
            69,
            58,
            32,
            100,
            105,
            115,
            97,
            98,
            108,
            101,
            100,
            32,
            119,
            104,
            105,
            108,
            101,
            32,
            116,
            104,
            105,
            115,
            32,
            112,
            114,
            101,
            118,
            101,
            110,
            116,
            115,
            32,
            114,
            97,
            100,
            105,
            99,
            108,
            101,
            45,
            110,
            97,
            116,
            105,
            118,
            101,
            45,
            99,
            105,
            32,
            100,
            101,
            98,
            32,
            102,
            114,
            111,
            109,
            32,
            98,
            101,
            105,
            110,
            103,
            32,
            98,
            117,
            105,
            108,
            116,
            46,
            10,
            35,
            32,
            108,
            105,
            110,
            116,
            105,
            97,
            110,
            32,
            45,
            105,
            32,
            45,
            45,
            97,
            108,
            108,
            111,
            119,
            45,
            114,
            111,
            111,
            116,
            32,
            45,
            45,
            102,
            97,
            105,
            108,
            45,
            111,
            110,
            32,
            119,
            97,
            114,
            110,
            105,
            110,
            103,
            32,
            46,
            46,
            47,
            42,
            46,
            99,
            104,
            97,
            110,
            103,
            101,
            115,
            10,
            10,
            35,
            32,
            77,
            111,
            118,
            101,
            32,
            102,
            105,
            108,
            101,
            115,
            32,
            116,
            111,
            32,
            97,
            114,
            116,
            105,
            102,
            97,
            99,
            116,
            115,
            32,
            100,
            105,
            114,
            101,
            99,
            116,
            111,
            114,
            121,
            46,
            10,
            109,
            118,
            32,
            46,
            46,
            47,
            42,
            95,
            42,
            32,
            47,
            99,
            105,
            47,
            97,
            114,
            116,
            105,
            102,
            97,
            99,
            116,
            115,
            47,
            46,
            10,
            32,
            32,
            32,
            32,
            32,
            32,
            32,
            32
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055956,
        "nanos_since_epoch": 88837359
      },
      "log_source": "Plan"
    }
  55. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nDEBFULLNAME=Lars Wirzenius\nCARGO_TARGET_DIR=/ci/cache/cargo-target\nPWD=/ci/src\nSYSTEMD_EXEC_PID=261\nHOME=/root\nLANG=C.UTF-8\nCARGO_HOME=/ci/deps\nDEBEMAIL=liw@liw.fi\nINVOCATION_ID=8621859f16274d9f881d554d152446d7\nSHLVL=2\nJOURNAL_STREAM=8:12963\nPATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nOLDPWD=/\n_=/bin/env\n/root/.cargo/bin/cargo\n/root/.cargo/bin/rustc\ncargo 1.94.0 (85eff7c80 2026-01-15)\nrustc 1.94.0 (4a4ef493e 2026-03-02)\ndpkg-buildpackage: info: source package subplot\ndpkg-buildpackage: info: source version 0.14.0.ci20260309T113235-1\ndpkg-buildpackage: info: source distribution unstable\ndpkg-buildpackage: info: source changed by \"Lars Wirzenius\" <\"liw@liw.fi\">\ndpkg-buildpackage: info: host architecture amd64\ndh clean\n   dh_auto_clean\n   dh_clean\ndpkg-source: info: using source format '3.0 (quilt)'\ndpkg-source: info: building subplot using existing ./subplot_0.14.0.ci20260309T113235.orig.tar.xz\ndpkg-source: info: building subplot in subplot_0.14.0.ci20260309T113235-1.debian.tar.xz\ndpkg-source: info: building subplot in subplot_0.14.0.ci20260309T113235-1.dsc\ndh build\n   dh_update_autotools_config\n   dh_autoreconf\n   dh_auto_configure\n   debian/rules override_dh_auto_build\nmake[1]: Entering directory '/ci/src'\ntrue\nmake[1]: Leaving directory '/ci/src'\n   debian/rules override_dh_auto_test\nmake[1]: Entering directory '/ci/src'\necho disabled\ndisabled\nmake[1]: Leaving directory '/ci/src'\n   create-stamp debian/debhelper-build-stamp\ndh binary\n   dh_testroot\n   dh_prep\n   debian/rules override_dh_auto_install\nmake[1]: Entering directory '/ci/src'\ncargo install --path=bin --root=debian/subplot --offline --locked --target x86_64-unknown-linux-musl\nrm -f debian/subplot/.crates.toml\nrm -f debian/subplot/.crates2.json\ndh_lintian\nmake[1]: Leaving directory '/ci/src'\n   dh_install\n   dh_installdocs\n   dh_installchangelogs\n   dh_lintian\n   dh_perl\n   dh_link\n   dh_strip_nondeterminism\n   dh_compress\n   dh_fixperms\n   dh_missing\n   dh_strip\n   dh_makeshlibs\n   dh_shlibdeps\n   dh_installdeb\n   dh_gencontrol\n   dh_md5sums\n   dh_builddeb\ndpkg-deb: building package 'subplot' in '../subplot_0.14.0.ci20260309T113235-1_amd64.deb'.\ndpkg-deb: building package 'subplot-dbgsym' in '../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb'.\ndpkg-genchanges: info: including full source code in upload\ndpkg-buildpackage: info: full upload (original source is included)\ntotal 2300\ndrwxr-xr-x  3 root root    4096 Mar  9 11:32 artifacts\ndrwxr-xr-x  3 root root    4096 Mar  9 06:42 cache\ndrwxr-xr-x  3 root root    4096 Mar  9 11:31 deps\ndrwxr-xr-x 15 root root    4096 Mar  9 11:32 src\n-rw-r--r--  1 root root  239388 Mar  9 11:32 subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb\n-rw-r--r--  1 root root    2440 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1.debian.tar.xz\n-rw-r--r--  1 root root    1018 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1.dsc\n-rw-r--r--  1 root root   10199 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo\n-rw-r--r--  1 root root    2392 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.changes\n-rw-r--r--  1 root root 1920024 Mar  9 11:32 subplot_0.14.0.ci20260309T113235-1_amd64.deb\n-rw-r--r--  1 root root  148912 Mar  9 11:32 subplot_0.14.0.ci20260309T113235.orig.tar.xz\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/.build-id/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/lib/debug/.build-id/88/\n-rw-r--r-- root/root   1455704 2026-03-09 11:32 ./usr/lib/debug/.build-id/88/1135dd1827d23c73bde0b00e1afd235bc57f27.debug\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/\nlrwxrwxrwx root/root         0 2026-03-09 11:32 ./usr/share/doc/subplot-dbgsym -> subplot\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./bin/\n-rwxr-xr-x root/root   7184184 2026-03-09 11:32 ./bin/subplot\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/doc/subplot/\n-rw-r--r-- root/root      3623 2026-03-09 11:31 ./usr/share/doc/subplot/README.md\n-rw-r--r-- root/root       672 2026-03-09 11:32 ./usr/share/doc/subplot/changelog.Debian.gz\n-rw-r--r-- root/root      1394 2026-03-09 11:31 ./usr/share/doc/subplot/copyright\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/lintian/\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/lintian/overrides/\n-rw-r--r-- root/root       103 2026-03-09 11:31 ./usr/share/lintian/overrides/subplot\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/subplot/\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/common/\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/common/lib/\n-rw-r--r-- root/root     10532 2026-03-09 11:31 ./usr/share/subplot/common/lib/files.yaml\n-rw-r--r-- root/root      8784 2026-03-09 11:31 ./usr/share/subplot/common/lib/runcmd.yaml\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/python/\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/python/lib/\n-rw-r--r-- root/root     10415 2026-03-09 11:31 ./usr/share/subplot/python/lib/daemon.py\n-rw-r--r-- root/root      4434 2026-03-09 11:31 ./usr/share/subplot/python/lib/daemon.yaml\n-rw-r--r-- root/root      8048 2026-03-09 11:31 ./usr/share/subplot/python/lib/files.py\n-rw-r--r-- root/root      8657 2026-03-09 11:31 ./usr/share/subplot/python/lib/runcmd.py\ndrwxr-xr-x root/root         0 2026-03-09 11:32 ./usr/share/subplot/python/template/\n-rw-r--r-- root/root      1275 2026-03-09 11:31 ./usr/share/subplot/python/template/asserts.py\n-rw-r--r-- root/root      2457 2026-03-09 11:31 ./usr/share/subplot/python/template/context.py\n-rw-r--r-- root/root      4611 2026-03-09 11:31 ./usr/share/subplot/python/template/context_tests.py\n-rw-r--r-- root/root       201 2026-03-09 11:31 ./usr/share/subplot/python/template/encoding.py\n-rw-r--r-- root/root       474 2026-03-09 11:31 ./usr/share/subplot/python/template/encoding_tests.py\n-rw-r--r-- root/root       412 2026-03-09 11:31 ./usr/share/subplot/python/template/files.py\n-rw-r--r-- root/root      4821 2026-03-09 11:31 ./usr/share/subplot/python/template/main.py\n-rw-r--r-- root/root      2785 2026-03-09 11:31 ./usr/share/subplot/python/template/scenarios.py\n-rw-r--r-- root/root      2565 2026-03-09 11:31 ./usr/share/subplot/python/template/template.py.tera\n-rw-r--r-- root/root       137 2026-03-09 11:31 ./usr/share/subplot/python/template/template.yaml\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/lib/\n-rw-r--r-- root/root       788 2026-03-09 11:31 ./usr/share/subplot/rust/lib/datadir.yaml\ndrwxr-xr-x root/root         0 2026-03-09 11:31 ./usr/share/subplot/rust/template/\n-rw-r--r-- root/root      1449 2026-03-09 11:31 ./usr/share/subplot/rust/template/macros.rs.tera\n-rw-r--r-- root/root      1213 2026-03-09 11:31 ./usr/share/subplot/rust/template/template.rs.tera\n-rw-r--r-- root/root        71 2026-03-09 11:31 ./usr/share/subplot/rust/template/template.yaml\n-rw-r--r-- root/root      2103 2026-03-09 11:31 ./usr/share/subplot/subplot.css\n",
      "stderr": "+ echo 'PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'\n+ export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n+ PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n+ export CARGO_HOME=/ci/deps\n+ CARGO_HOME=/ci/deps\n+ export DEBEMAIL=liw@liw.fi\n+ DEBEMAIL=liw@liw.fi\n+ export 'DEBFULLNAME=Lars Wirzenius'\n+ DEBFULLNAME='Lars Wirzenius'\n+ /bin/env\n+ command -v cargo\n+ command -v rustc\n+ cargo --version\n+ rustc --version\n++ dpkg-parsechangelog -SSource\n+ name=subplot\n++ dpkg-parsechangelog -SVersion\n+ version=0.14.0.ci20260309T113235-1\n++ echo 0.14.0.ci20260309T113235-1\n++ sed 's/-[^-]*$//'\n+ uv=0.14.0.ci20260309T113235\n++ dpkg --print-architecture\n+ arch=amd64\n+ orig=../subplot_0.14.0.ci20260309T113235.orig.tar.xz\n+ deb=../subplot_0.14.0.ci20260309T113235-1_amd64.deb\n+ changes=../subplot_0.14.0.ci20260309T113235-1_amd64.changes\n+ git archive HEAD\n+ xz\n+ dpkg-buildpackage -us -uc\n dpkg-source --before-build .\n debian/rules clean\n dpkg-source -b .\n debian/rules build\n debian/rules binary\n  Installing subplot-bin v0.14.0 (/ci/src/bin)\n   Compiling subplot v0.14.0 (/ci/src)\n   Compiling subplot-bin v0.14.0 (/ci/src/bin)\n    Finished `release` profile [optimized] target(s) in 11.34s\n  Installing /ci/src/debian/subplot/bin/subplot\n   Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)\nwarning: be sure to add `/ci/src/debian/subplot/bin` to your PATH to be able to run the installed binaries\ndh_installchangelogs: warning: Could not parse timestamp '15 April 2022 15:00:00 +0100'. debian/changelog will not be trimmed.\ndh_installchangelogs: warning: debian/changelog could not be trimmed. The full changelog will be installed.\ndpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols\ndpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined\ndpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined\ndpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined\ndpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined\n dpkg-genbuildinfo -O../subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo\n dpkg-genchanges -O../subplot_0.14.0.ci20260309T113235-1_amd64.changes\n dpkg-source --after-build .\n+ ls -l ..\n+ for x in ../*.deb\n+ dpkg -c ../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb\n+ for x in ../*.deb\n+ dpkg -c ../subplot_0.14.0.ci20260309T113235-1_amd64.deb\n+ mv ../subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb ../subplot_0.14.0.ci20260309T113235-1.debian.tar.xz ../subplot_0.14.0.ci20260309T113235-1.dsc ../subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo ../subplot_0.14.0.ci20260309T113235-1_amd64.changes ../subplot_0.14.0.ci20260309T113235-1_amd64.deb ../subplot_0.14.0.ci20260309T113235.orig.tar.xz /ci/artifacts/.\n",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 45473170
      },
      "log_source": "Plan"
    }
  56. {
      "type": "action_succeeded",
      "action": "deb",
      "packages": ".",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 145822084
      },
      "log_source": "Plan"
    }
  57. {
      "type": "execute_action",
      "action": "shell",
      "shell": "find /ci/artifacts\n",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 145986693
      },
      "log_source": "Plan"
    }
  58. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            102,
            105,
            110,
            100,
            32,
            47,
            99,
            105,
            47,
            97,
            114,
            116,
            105,
            102,
            97,
            99,
            116,
            115,
            10,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 145996099
      },
      "log_source": "Plan"
    }
  59. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "/ci/artifacts\n/ci/artifacts/muck.html\n/ci/artifacts/runcmd.html\n/ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.deb\n/ci/artifacts/files.html\n/ci/artifacts/subplot_0.14.0.ci20260309T113235-1.debian.tar.xz\n/ci/artifacts/website.html\n/ci/artifacts/seq.html\n/ci/artifacts/user-guide.html\n/ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.buildinfo\n/ci/artifacts/subplot_0.14.0.ci20260309T113235-1_amd64.changes\n/ci/artifacts/subplot_0.14.0.ci20260309T113235-1.dsc\n/ci/artifacts/libdocs\n/ci/artifacts/libdocs/daemon.html\n/ci/artifacts/libdocs/runcmd.html\n/ci/artifacts/libdocs/files.html\n/ci/artifacts/subplot.html\n/ci/artifacts/subplot_0.14.0.ci20260309T113235.orig.tar.xz\n/ci/artifacts/subplot-dbgsym_0.14.0.ci20260309T113235-1_amd64.deb\n",
      "stderr": "+ find /ci/artifacts\n",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 148382809
      },
      "log_source": "Plan"
    }
  60. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "find /ci/artifacts\n",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 198577225
      },
      "log_source": "Plan"
    }
  61. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773055972,
        "nanos_since_epoch": 198779859
      },
      "log_source": "Plan"
    }
  62. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773055976,
        "nanos_since_epoch": 217725930
      },
      "log_source": "Plan"
    }
  63. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773055976,
        "nanos_since_epoch": 217758600
      },
      "log_source": "Plan"
    }
  64. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773055976,
        "nanos_since_epoch": 225849820
      },
      "log_source": "Plan"
    }
  65. {
      "type": "plan_succeeded",
      "timestamp": {
        "secs_since_epoch": 1773055976,
        "nanos_since_epoch": 230733287
      },
      "log_source": "Plan"
    }
  66. {
      "type": "executor_ends_successfully",
      "timestamp": {
        "secs_since_epoch": 1773055976,
        "nanos_since_epoch": 232785529
      },
      "log_source": "Plan"
    }

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "push",
  "repository": {
    "id": "rad:zjxyd2A1A7FnxtC69qDfoAajfTHo",
    "name": "subplot",
    "description": "Capture and communicate acceptance criteria and their verification",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
      "did:key:z6MkkMqyfkMdn8p1LF7LbjjEPJmZGksr3cdpsvFdxKWUVfNZ"
    ]
  },
  "pusher": {
    "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
    "alias": "liw"
  },
  "before": "cfebfc90081c7b0e037f480a20db94910987b159",
  "after": "cfebfc90081c7b0e037f480a20db94910987b159",
  "branch": "main",
  "commits": [
    "cfebfc90081c7b0e037f480a20db94910987b159",
    "2b23905643dbfa3904d4fb603d32b17c701a26a1",
    "0b3f28f9298be8822331a0031ffbcd92448169a2",
    "bca6d442d5cfea38fb8ee2d77bb3473a800c90f5"
  ]
}

Ambient stdout

run CI for rad:zjxyd2A1A7FnxtC69qDfoAajfTHo

Ambient stderr

<empty log>