[package]
edition = "2024"
rust-version = "1.88"
name = "turnframe-understand"
version = "0.1.2"
authors = ["Turnframe contributors"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Turn understanding for Turnframe: small verified model tasks that split, route, locate, extract and check, assembled by code into one plan"
homepage = "https://turnframe.rs"
documentation = "https://docs.rs/turnframe"
readme = "README.md"
keywords = [
"llm",
"workflow",
"conversation",
"deterministic",
"orchestration",
]
categories = [
"asynchronous",
"api-bindings",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/turnframe-rs/turnframe"
[lib]
name = "turnframe_understand"
path = "src/lib.rs"
[[test]]
name = "a_cancel_withdraws_the_act_it_names"
path = "tests/a_cancel_withdraws_the_act_it_names.rs"
[[test]]
name = "a_chosen_value_cannot_take_too_many_words"
path = "tests/a_chosen_value_cannot_take_too_many_words.rs"
[[test]]
name = "a_constraint_only_coverage_found_makes_the_message_unreadable"
path = "tests/a_constraint_only_coverage_found_makes_the_message_unreadable.rs"
[[test]]
name = "a_constraint_with_nothing_to_hold_asks_nothing"
path = "tests/a_constraint_with_nothing_to_hold_asks_nothing.rs"
[[test]]
name = "a_copied_value_ends_where_another_acts_value_begins"
path = "tests/a_copied_value_ends_where_another_acts_value_begins.rs"
[[test]]
name = "a_copied_value_narrows_its_pointer_to_the_value"
path = "tests/a_copied_value_narrows_its_pointer_to_the_value.rs"
[[test]]
name = "a_copied_value_running_into_another_acts_value_is_read_again"
path = "tests/a_copied_value_running_into_another_acts_value_is_read_again.rs"
[[test]]
name = "a_copy_ending_where_its_part_meets_the_next_is_read_again"
path = "tests/a_copy_ending_where_its_part_meets_the_next_is_read_again.rs"
[[test]]
name = "a_copy_pointed_beside_its_words_is_found_where_it_stands"
path = "tests/a_copy_pointed_beside_its_words_is_found_where_it_stands.rs"
[[test]]
name = "a_copy_verified_as_no_value_is_read_again_from_the_earlier_message"
path = "tests/a_copy_verified_as_no_value_is_read_again_from_the_earlier_message.rs"
[[test]]
name = "a_correction_is_routed_knowing_what_the_last_turn_did"
path = "tests/a_correction_is_routed_knowing_what_the_last_turn_did.rs"
[[test]]
name = "a_correction_keeps_the_values_of_the_act_it_corrects"
path = "tests/a_correction_keeps_the_values_of_the_act_it_corrects.rs"
[[test]]
name = "a_correction_naming_itself_corrects_something_earlier"
path = "tests/a_correction_naming_itself_corrects_something_earlier.rs"
[[test]]
name = "a_correction_replaces_the_act_it_corrects"
path = "tests/a_correction_replaces_the_act_it_corrects.rs"
[[test]]
name = "a_deduced_value_may_share_the_words_that_imply_it"
path = "tests/a_deduced_value_may_share_the_words_that_imply_it.rs"
[[test]]
name = "a_deducible_value_is_verified_as_one"
path = "tests/a_deducible_value_is_verified_as_one.rs"
[[test]]
name = "a_dispute_a_check_reads_as_an_act_is_read_again_as_what_it_was"
path = "tests/a_dispute_a_check_reads_as_an_act_is_read_again_as_what_it_was.rs"
[[test]]
name = "a_dispute_read_twice_stands"
path = "tests/a_dispute_read_twice_stands.rs"
[[test]]
name = "a_doubt_first_raised_in_the_last_round_is_read_again"
path = "tests/a_doubt_first_raised_in_the_last_round_is_read_again.rs"
[[test]]
name = "a_doubt_the_verifier_answered_again_holds_nothing"
path = "tests/a_doubt_the_verifier_answered_again_holds_nothing.rs"
[[test]]
name = "a_failed_segmentation_reads_nothing"
path = "tests/a_failed_segmentation_reads_nothing.rs"
[[test]]
name = "a_field_named_without_a_value_asks_for_it"
path = "tests/a_field_named_without_a_value_asks_for_it.rs"
[[test]]
name = "a_listed_record_named_in_another_part_is_still_chosen"
path = "tests/a_listed_record_named_in_another_part_is_still_chosen.rs"
[[test]]
name = "a_lone_word_between_two_parts_is_no_unit_of_its_own"
path = "tests/a_lone_word_between_two_parts_is_no_unit_of_its_own.rs"
[[test]]
name = "a_name_given_to_a_listed_record_creates_none"
path = "tests/a_name_given_to_a_listed_record_creates_none.rs"
[[test]]
name = "a_name_taking_words_that_are_not_its_own_is_read_again"
path = "tests/a_name_taking_words_that_are_not_its_own_is_read_again.rs"
[[test]]
name = "a_part_that_gives_its_act_nothing_may_be_the_tail_of_the_value_before_it"
path = "tests/a_part_that_gives_its_act_nothing_may_be_the_tail_of_the_value_before_it.rs"
[[test]]
name = "a_pointer_outside_the_message_is_repaired_with_the_exact_error"
path = "tests/a_pointer_outside_the_message_is_repaired_with_the_exact_error.rs"
[[test]]
name = "a_question_inside_a_dispute_leaves_the_rest_a_dispute"
path = "tests/a_question_inside_a_dispute_leaves_the_rest_a_dispute.rs"
[[test]]
name = "a_question_is_framed_on_its_record_and_subjects"
path = "tests/a_question_is_framed_on_its_record_and_subjects.rs"
[[test]]
name = "a_question_tail_coverage_finds_joins_its_question"
path = "tests/a_question_tail_coverage_finds_joins_its_question.rs"
[[test]]
name = "a_question_whether_one_thing_can_be_done_asks_for_it"
path = "tests/a_question_whether_one_thing_can_be_done_asks_for_it.rs"
[[test]]
name = "a_quoted_value_is_the_words_inside_the_quotes"
path = "tests/a_quoted_value_is_the_words_inside_the_quotes.rs"
[[test]]
name = "a_record_created_for_the_waiting_act_completes_it"
path = "tests/a_record_created_for_the_waiting_act_completes_it.rs"
[[test]]
name = "a_record_created_twice_by_one_reading_is_the_one_that_stands"
path = "tests/a_record_created_twice_by_one_reading_is_the_one_that_stands.rs"
[[test]]
name = "a_record_located_again_to_the_same_one_keeps_its_values"
path = "tests/a_record_located_again_to_the_same_one_keeps_its_values.rs"
[[test]]
name = "a_record_named_around_the_created_name_is_the_one_created"
path = "tests/a_record_named_around_the_created_name_is_the_one_created.rs"
[[test]]
name = "a_record_named_as_one_this_message_creates_is_that_record"
path = "tests/a_record_named_as_one_this_message_creates_is_that_record.rs"
[[test]]
name = "a_record_named_by_a_listed_records_own_name_is_that_record"
path = "tests/a_record_named_by_a_listed_records_own_name_is_that_record.rs"
[[test]]
name = "a_record_named_when_none_is_listed_is_looked_up_by_name"
path = "tests/a_record_named_when_none_is_listed_is_looked_up_by_name.rs"
[[test]]
name = "a_record_registered_for_a_record_still_to_create_completes_it"
path = "tests/a_record_registered_for_a_record_still_to_create_completes_it.rs"
[[test]]
name = "a_record_the_reading_left_unset_is_read_once_more"
path = "tests/a_record_the_reading_left_unset_is_read_once_more.rs"
[[test]]
name = "a_record_the_whole_turn_check_doubts_is_located_again"
path = "tests/a_record_the_whole_turn_check_doubts_is_located_again.rs"
[[test]]
name = "a_record_this_message_creates_is_chosen_wherever_its_words_are"
path = "tests/a_record_this_message_creates_is_chosen_wherever_its_words_are.rs"
[[test]]
name = "a_record_this_message_creates_is_shown_to_the_verifier_by_its_words"
path = "tests/a_record_this_message_creates_is_shown_to_the_verifier_by_its_words.rs"
[[test]]
name = "a_repair_that_points_into_another_part_keeps_the_first_value"
path = "tests/a_repair_that_points_into_another_part_keeps_the_first_value.rs"
[[test]]
name = "a_repaired_reading_shows_its_units_and_not_its_repair"
path = "tests/a_repaired_reading_shows_its_units_and_not_its_repair.rs"
[[test]]
name = "a_request_for_the_same_operation_twice_reads_each_occurrence"
path = "tests/a_request_for_the_same_operation_twice_reads_each_occurrence.rs"
[[test]]
name = "a_request_for_two_things_is_two_acts"
path = "tests/a_request_for_two_things_is_two_acts.rs"
[[test]]
name = "a_request_nothing_does_that_coverage_reads_as_a_question_is_that_question"
path = "tests/a_request_nothing_does_that_coverage_reads_as_a_question_is_that_question.rs"
[[test]]
name = "a_request_the_segmentation_missed_is_added_by_coverage"
path = "tests/a_request_the_segmentation_missed_is_added_by_coverage.rs"
[[test]]
name = "a_segmentation_told_what_it_left_out_is_read_again"
path = "tests/a_segmentation_told_what_it_left_out_is_read_again.rs"
[[test]]
name = "a_stated_number_is_one_its_words_say"
path = "tests/a_stated_number_is_one_its_words_say.rs"
[[test]]
name = "a_stated_value_is_the_users_exact_words"
path = "tests/a_stated_value_is_the_users_exact_words.rs"
[[test]]
name = "a_turn_runs_under_its_own_settings"
path = "tests/a_turn_runs_under_its_own_settings.rs"
[[test]]
name = "a_turn_with_no_act_is_not_checked_whole"
path = "tests/a_turn_with_no_act_is_not_checked_whole.rs"
[[test]]
name = "a_typed_card_answer_names_one_of_its_options"
path = "tests/a_typed_card_answer_names_one_of_its_options.rs"
[[test]]
name = "a_unit_not_understood_holds_the_acts_on_its_record"
path = "tests/a_unit_not_understood_holds_the_acts_on_its_record.rs"
[[test]]
name = "a_value_comes_from_its_own_part_of_the_message"
path = "tests/a_value_comes_from_its_own_part_of_the_message.rs"
[[test]]
name = "a_value_cut_in_two_by_the_segmentation_is_read_whole"
path = "tests/a_value_cut_in_two_by_the_segmentation_is_read_whole.rs"
[[test]]
name = "a_value_given_beside_its_request_joins_it"
path = "tests/a_value_given_beside_its_request_joins_it.rs"
[[test]]
name = "a_value_in_a_corrections_own_words_is_what_it_says"
path = "tests/a_value_in_a_corrections_own_words_is_what_it_says.rs"
[[test]]
name = "a_value_leaves_out_the_mark_that_ends_its_sentence"
path = "tests/a_value_leaves_out_the_mark_that_ends_its_sentence.rs"
[[test]]
name = "a_value_may_take_words_no_other_part_holds"
path = "tests/a_value_may_take_words_no_other_part_holds.rs"
[[test]]
name = "a_value_pointed_at_in_another_part_is_read_again_once"
path = "tests/a_value_pointed_at_in_another_part_is_read_again_once.rs"
[[test]]
name = "a_value_read_again_the_same_is_settled"
path = "tests/a_value_read_again_the_same_is_settled.rs"
[[test]]
name = "a_value_the_assistant_asked_for_completes_the_waiting_act"
path = "tests/a_value_the_assistant_asked_for_completes_the_waiting_act.rs"
[[test]]
name = "a_value_the_domain_refuses_is_repaired_once_then_asked_for"
path = "tests/a_value_the_domain_refuses_is_repaired_once_then_asked_for.rs"
[[test]]
name = "a_value_the_message_repeats_is_taken_from_the_message"
path = "tests/a_value_the_message_repeats_is_taken_from_the_message.rs"
[[test]]
name = "a_value_the_verifier_rejects_twice_is_asked_for"
path = "tests/a_value_the_verifier_rejects_twice_is_asked_for.rs"
[[test]]
name = "a_value_the_whole_turn_check_doubts_is_extracted_again"
path = "tests/a_value_the_whole_turn_check_doubts_is_extracted_again.rs"
[[test]]
name = "a_value_verified_as_stated_stands_when_the_repair_gives_none"
path = "tests/a_value_verified_as_stated_stands_when_the_repair_gives_none.rs"
[[test]]
name = "a_verdict_finding_fault_is_voted_on_again"
path = "tests/a_verdict_finding_fault_is_voted_on_again.rs"
[[test]]
name = "a_whole_turn_check_that_finds_nothing_changes_nothing"
path = "tests/a_whole_turn_check_that_finds_nothing_changes_nothing.rs"
[[test]]
name = "a_whole_turn_check_the_budget_cannot_pay_for_is_skipped"
path = "tests/a_whole_turn_check_the_budget_cannot_pay_for_is_skipped.rs"
[[test]]
name = "acts_asked_in_one_part_keep_the_order_the_message_says_them"
path = "tests/acts_asked_in_one_part_keep_the_order_the_message_says_them.rs"
[[test]]
name = "an_act_changing_what_a_constraint_keeps_is_held"
path = "tests/an_act_changing_what_a_constraint_keeps_is_held.rs"
[[test]]
name = "an_act_missing_its_value_that_nobody_asked_for_is_dropped"
path = "tests/an_act_missing_its_value_that_nobody_asked_for_is_dropped.rs"
[[test]]
name = "an_act_not_asked_for_is_not_asked_back_for_the_value_its_repair_dropped"
path = "tests/an_act_not_asked_for_is_not_asked_back_for_the_value_its_repair_dropped.rs"
[[test]]
name = "an_act_not_asked_for_stays_so_when_its_repair_reads_the_same"
path = "tests/an_act_not_asked_for_stays_so_when_its_repair_reads_the_same.rs"
[[test]]
name = "an_act_of_a_guessed_part_whose_values_lie_elsewhere_is_not_read_again"
path = "tests/an_act_of_a_guessed_part_whose_values_lie_elsewhere_is_not_read_again.rs"
[[test]]
name = "an_act_on_a_record_this_message_creates_depends_on_it"
path = "tests/an_act_on_a_record_this_message_creates_depends_on_it.rs"
[[test]]
name = "an_act_that_adds_nothing_to_another_of_its_operation_is_one"
path = "tests/an_act_that_adds_nothing_to_another_of_its_operation_is_one.rs"
[[test]]
name = "an_act_the_check_could_not_judge_is_held"
path = "tests/an_act_the_check_could_not_judge_is_held.rs"
[[test]]
name = "an_act_the_user_did_not_ask_for_is_dropped"
path = "tests/an_act_the_user_did_not_ask_for_is_dropped.rs"
[[test]]
name = "an_act_the_whole_turn_check_says_was_not_asked_is_verified_again"
path = "tests/an_act_the_whole_turn_check_says_was_not_asked_is_verified_again.rs"
[[test]]
name = "an_act_waiting_for_a_value_is_kept_beside_another_of_its_operation"
path = "tests/an_act_waiting_for_a_value_is_kept_beside_another_of_its_operation.rs"
[[test]]
name = "an_act_waiting_since_an_earlier_turn_takes_only_the_record_it_named"
path = "tests/an_act_waiting_since_an_earlier_turn_takes_only_the_record_it_named.rs"
[[test]]
name = "an_act_whose_every_value_is_another_parts_asks_nothing"
path = "tests/an_act_whose_every_value_is_another_parts_asks_nothing.rs"
[[test]]
name = "an_amount_is_parsed_by_code"
path = "tests/an_amount_is_parsed_by_code.rs"
[[test]]
name = "an_answer_that_gives_none_of_what_was_asked_is_routed_again"
path = "tests/an_answer_that_gives_none_of_what_was_asked_is_routed_again.rs"
[[test]]
name = "an_answer_to_what_was_asked_is_never_unrequested"
path = "tests/an_answer_to_what_was_asked_is_never_unrequested.rs"
[[test]]
name = "an_operation_a_request_did_not_ask_for_beside_one_it_did_is_dropped_quietly"
path = "tests/an_operation_a_request_did_not_ask_for_beside_one_it_did_is_dropped_quietly.rs"
[[test]]
name = "every_constraint_word_a_reading_lost_is_named_when_it_reads_again"
path = "tests/every_constraint_word_a_reading_lost_is_named_when_it_reads_again.rs"
[[test]]
name = "every_step_is_published_as_it_is_decided"
path = "tests/every_step_is_published_as_it_is_decided.rs"
[[test]]
name = "every_task_prompt_stays_within_its_size_budget"
path = "tests/every_task_prompt_stays_within_its_size_budget.rs"
[[test]]
name = "relative_dates_are_computed_by_code"
path = "tests/relative_dates_are_computed_by_code.rs"
[[test]]
name = "several_records_that_fit_leave_the_act_ambiguous"
path = "tests/several_records_that_fit_leave_the_act_ambiguous.rs"
[[test]]
name = "small_talk_a_check_reads_as_a_request_is_read_again"
path = "tests/small_talk_a_check_reads_as_a_request_is_read_again.rs"
[[test]]
name = "small_talk_a_second_reading_takes_for_an_act_runs_nothing"
path = "tests/small_talk_a_second_reading_takes_for_an_act_runs_nothing.rs"
[[test]]
name = "small_talk_read_again_does_not_become_a_condition"
path = "tests/small_talk_read_again_does_not_become_a_condition.rs"
[[test]]
name = "small_talk_read_again_stands_when_nothing_on_offer_does_it"
path = "tests/small_talk_read_again_stands_when_nothing_on_offer_does_it.rs"
[[test]]
name = "small_talk_read_as_an_act_is_segmented_again_when_asked"
path = "tests/small_talk_read_as_an_act_is_segmented_again_when_asked.rs"
[[test]]
name = "the_same_act_asked_twice_in_one_message_is_one_act"
path = "tests/the_same_act_asked_twice_in_one_message_is_one_act.rs"
[[test]]
name = "the_verifier_sees_what_tells_the_record_apart"
path = "tests/the_verifier_sees_what_tells_the_record_apart.rs"
[[test]]
name = "two_readings_of_one_operation_on_the_same_words_are_each_read_again"
path = "tests/two_readings_of_one_operation_on_the_same_words_are_each_read_again.rs"
[[test]]
name = "two_values_cannot_share_their_words"
path = "tests/two_values_cannot_share_their_words.rs"
[[test]]
name = "without_doubt_votes_an_act_not_asked_for_is_verified_again"
path = "tests/without_doubt_votes_an_act_not_asked_for_is_verified_again.rs"
[[test]]
name = "words_already_read_as_a_request_are_not_a_second_request"
path = "tests/words_already_read_as_a_request_are_not_a_second_request.rs"
[[test]]
name = "words_an_act_already_holds_are_not_read_again_as_missing"
path = "tests/words_an_act_already_holds_are_not_read_again_as_missing.rs"
[[test]]
name = "words_read_again_the_same_after_a_doubt_about_them_stand"
path = "tests/words_read_again_the_same_after_a_doubt_about_them_stand.rs"
[[test]]
name = "words_that_refer_back_are_flagged_beside_a_value_copied_from_this_message"
path = "tests/words_that_refer_back_are_flagged_beside_a_value_copied_from_this_message.rs"
[[test]]
name = "words_the_whole_turn_check_finds_unread_are_read"
path = "tests/words_the_whole_turn_check_finds_unread_are_read.rs"
[dependencies.async-trait]
version = "0.1"
[dependencies.chrono]
version = "0.4"
features = [
"clock",
"serde",
"std",
]
default-features = false
[dependencies.futures]
version = "0.3"
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
features = ["preserve_order"]
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"sync",
"time",
"rt",
"macros",
]
[dependencies.tracing]
version = "0.1"
[dependencies.turnframe-core]
version = "0.1.0"
[dependencies.turnframe-provider]
version = "0.1.0"
[dependencies.turnframe-tasks]
version = "0.1.0"
[dev-dependencies.insta]
version = "1"
features = [
"json",
"yaml",
]
[dev-dependencies.jsonschema]
version = "0.56"
default-features = false
[dev-dependencies.schemars]
version = "1"
features = [
"preserve_order",
"chrono04",
"uuid1",
]
[dev-dependencies.tokio]
version = "1"
features = [
"sync",
"time",
"rt",
"macros",
"rt-multi-thread",
"macros",
]
[lints.clippy]
dbg_macro = "warn"
expect_used = "warn"
large_futures = "warn"
missing_errors_doc = "allow"
panic = "warn"
print_stderr = "warn"
print_stdout = "warn"
todo = "warn"
unimplemented = "warn"
unwrap_used = "warn"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.rust]
missing_debug_implementations = "warn"
missing_docs = "warn"
unsafe_code = "forbid"