# BR-LIST-07 When the final check rereads the protected text, then it ignores the values on the allow list. Defined in [Impose a deny list and an allow list](https://docs.piighost.dev/en/domain/processes/impose-a-deny-list-and-an-allow-list/#br-list-07). ## Where the rule lives - [`BaseAnonymizationPipeline._cleared_values()`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/pipeline/base.py#L225) - [`BaseAnonymizationPipeline._guard()`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/pipeline/base.py#L333) - [`AnonymizationPipeline`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/pipeline/base.py#L364) ## Direct tests - [`tests/observation/test_pipeline_spans.py::TestClearTextTracingWarning::test_silent_when_acknowledged`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L227) - [`tests/observation/test_pipeline_spans.py::TestClearTextTracingWarning::test_silent_with_a_redactor`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L237) - [`tests/observation/test_pipeline_spans.py::TestClearTextTracingWarning::test_warns_without_a_redactor_or_acknowledgment`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L216) - [`tests/observation/test_pipeline_spans.py::TestRedaction::test_redactor_covers_forced_values`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L145) - [`tests/observation/test_pipeline_spans.py::TestRedaction::test_redactor_removes_clear_values_from_payloads`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L135) - [`tests/observation/test_pipeline_spans.py::TestRedaction::test_redactor_replaces_values_with_its_tokens`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L192) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_children_nest_under_the_root`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L59) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_detect_span_carries_count_and_detections`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L111) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_emits_root_and_stage_spans_in_finish_order`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L41) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_flagged_guard_marks_the_span_errored`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L122) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_optional_stage_spans_appear_when_configured`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L79) - [`tests/observation/test_pipeline_spans.py::TestSpanTree::test_root_records_input_and_output`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_pipeline_spans.py#L100) - [`tests/pipeline/test_override_integration.py::TestBasePipelineOverride::test_a_real_leak_still_trips_the_guard`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L64) - [`tests/pipeline/test_override_integration.py::TestBasePipelineOverride::test_allow_list_keeps_a_false_positive_in_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L44) - [`tests/pipeline/test_override_integration.py::TestBasePipelineOverride::test_allow_listed_value_does_not_trip_the_guard`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L53) - [`tests/pipeline/test_override_integration.py::TestBasePipelineOverride::test_deny_list_forces_a_value_the_detector_missed`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L37) - [`tests/pipeline/test_pipeline.py::TestConformance::test_satisfies_the_port`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_pipeline.py#L35) ## Indirect tests - [`tests/acceptance/test_dev.py::TestThreadIsolation::test_a_token_restores_in_its_own_thread_only`](https://github.com/Athroniaeth/piighost/blob/master/tests/acceptance/test_dev.py#L19) - [`tests/acceptance/test_dpo.py::TestErasure::test_a_forgotten_thread_restores_nothing`](https://github.com/Athroniaeth/piighost/blob/master/tests/acceptance/test_dpo.py#L91) - [`tests/acceptance/test_ops.py::TestSharedMemory::test_two_instances_agree_on_a_thread`](https://github.com/Athroniaeth/piighost/blob/master/tests/acceptance/test_ops.py#L59) - [`tests/integrations/langchain/test_middleware_e2e.py::test_second_model_call_never_sees_clear_tool_args`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware_e2e.py#L74) - [`tests/integrations/langchain/test_middleware_stream.py::test_middleware_deanonymize_stream_restores_split_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware_stream.py#L33) - [`tests/integrations/langchain/test_middleware.py::TestAssistantProvenance::test_anonymize_treats_assistant_value_as_pii`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L571) - [`tests/integrations/langchain/test_middleware.py::TestAssistantProvenance::test_ignore_does_not_analyze_assistant_messages`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L580) - [`tests/integrations/langchain/test_middleware.py::TestAssistantProvenance::test_preserve_keeps_assistant_value_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L562) - [`tests/integrations/langchain/test_middleware.py::TestInventedPlaceholders::test_invented_tool_argument_is_refused`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L517) - [`tests/integrations/langchain/test_middleware.py::TestInventedPlaceholders::test_kept_or_dropped`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L490) - [`tests/integrations/langchain/test_middleware.py::TestInventedPlaceholders::test_only_issued_tokens_pass_under_raise`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L509) - [`tests/integrations/langchain/test_middleware.py::TestInventedPlaceholders::test_raise_refuses_an_invented_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L501) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_a_command_without_a_message_is_left_alone`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L359) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_before_model_never_rewrites_a_tool_message`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L440) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_before_model_reanonymizes_clear_tool_call_args`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L406) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_output_anonymizes_a_tool_message_inside_a_command`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L289) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_output_anonymizes_block_tool_message_content`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L264) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_output_anonymizes_every_command_update_shape`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L323) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_passthrough_leaves_a_command_tool_message_alone`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L382) - [`tests/integrations/langchain/test_middleware.py::TestToolCalls::test_strategy_routes_each_direction`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L252) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_after_model_deanonymizes_block_content`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L132) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_after_model_deanonymizes_for_display`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L71) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_before_model_anonymizes_block_content`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L96) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_before_model_anonymizes_messages`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L60) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_block_content_leaves_non_text_blocks_untouched`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L114) - [`tests/integrations/langchain/test_middleware.py::TestWhenInstalled::test_no_pii_leaves_messages_untouched`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/langchain/test_middleware.py#L84) - [`tests/integrations/llama_index/test_query_engine.py::TestQuery::test_anonymizes_query_and_restores_answer`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_query_engine.py#L47) - [`tests/integrations/llama_index/test_query_engine.py::TestQuery::test_rejects_a_streaming_response`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_query_engine.py#L67) - [`tests/integrations/llama_index/test_query_engine.py::TestQuery::test_sync_query_bridges_to_aquery`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_query_engine.py#L59) - [`tests/integrations/llama_index/test_transform.py::TestAnonymize::test_anonymizes_each_node_text`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_transform.py#L27) - [`tests/integrations/llama_index/test_transform.py::TestAnonymize::test_keeps_one_token_per_value_across_nodes`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_transform.py#L34) - [`tests/integrations/llama_index/test_transform.py::TestAnonymize::test_sync_call_bridges_to_acall`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/llama_index/test_transform.py#L42) - [`tests/integrations/test_claude_code_hooks.py::test_an_event_without_a_session_id_is_refused`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L91) - [`tests/integrations/test_claude_code_hooks.py::test_missing_field_is_a_no_op`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L99) - [`tests/integrations/test_claude_code_hooks.py::test_post_tool_use_anonymizes_read_content_leaves_path`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L106) - [`tests/integrations/test_claude_code_hooks.py::test_post_tool_use_anonymizes_string_output`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L41) - [`tests/integrations/test_claude_code_hooks.py::test_post_tool_use_edit_anonymizes_text_leaves_metadata`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L126) - [`tests/integrations/test_claude_code_hooks.py::test_post_tool_use_unknown_tool_is_passthrough`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L179) - [`tests/integrations/test_claude_code_hooks.py::test_pre_tool_use_deanonymizes_tool_input`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L58) - [`tests/integrations/test_claude_code_hooks.py::test_unknown_event_is_a_no_op`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L84) - [`tests/integrations/test_claude_code_hooks.py::test_user_prompt_submit_anonymizes_prompt`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_claude_code_hooks.py#L25) - [`tests/integrations/test_deidentify_stream.py::test_invented_token_is_dropped`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify_stream.py#L73) - [`tests/integrations/test_deidentify_stream.py::test_invented_token_raises`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify_stream.py#L80) - [`tests/integrations/test_deidentify_stream.py::test_literal_text_streams_through`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify_stream.py#L59) - [`tests/integrations/test_deidentify_stream.py::test_token_split_across_chunks_is_restored`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify_stream.py#L51) - [`tests/integrations/test_deidentify_stream.py::test_trailing_incomplete_token_is_flushed`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify_stream.py#L66) - [`tests/integrations/test_deidentify.py::TestAnonymize::test_replaces_pii_with_a_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify.py#L38) - [`tests/integrations/test_deidentify.py::TestDeanonymize::test_round_trips_a_message`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify.py#L45) - [`tests/integrations/test_deidentify.py::TestInventedStrategy::test_drop_removes_an_invented_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify.py#L58) - [`tests/integrations/test_deidentify.py::TestInventedStrategy::test_keep_leaves_an_invented_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify.py#L53) - [`tests/integrations/test_deidentify.py::TestInventedStrategy::test_raise_refuses_an_invented_token`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_deidentify.py#L63) - [`tests/integrations/test_pydantic_ai_hooks.py::TestAroundTheModel::test_model_sees_placeholders_and_reply_is_restored`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L54) - [`tests/integrations/test_pydantic_ai_hooks.py::TestAssistantStrategy::test_anonymize_treats_the_assistant_value_as_pii`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L260) - [`tests/integrations/test_pydantic_ai_hooks.py::TestAssistantStrategy::test_ignore_leaves_the_assistant_message_unanalyzed`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L268) - [`tests/integrations/test_pydantic_ai_hooks.py::TestAssistantStrategy::test_preserve_keeps_the_assistant_value_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L255) - [`tests/integrations/test_pydantic_ai_hooks.py::TestBlockContent::test_sequence_user_content_is_anonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L70) - [`tests/integrations/test_pydantic_ai_hooks.py::TestInventedStrategy::test_an_invented_token_in_the_reply_is_refused`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L141) - [`tests/integrations/test_pydantic_ai_hooks.py::TestMultiTurn::test_prior_turn_pii_is_not_leaked_to_the_model`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L125) - [`tests/integrations/test_pydantic_ai_hooks.py::TestStructuredToolResult::test_dict_tool_result_is_anonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L95) - [`tests/integrations/test_pydantic_ai_hooks.py::TestThreadIdGetter::test_thread_id_is_resolved_from_the_run_context`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L154) - [`tests/integrations/test_pydantic_ai_hooks.py::TestTools::test_passthrough_leaves_the_arguments_as_tokens`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L209) - [`tests/integrations/test_pydantic_ai_hooks.py::TestTools::test_tool_gets_the_value_and_its_result_is_reanonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/integrations/test_pydantic_ai_hooks.py#L174) - [`tests/observation/test_thread_spans.py::TestThreadSpans::test_deanonymize_emits_its_own_root`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_thread_spans.py#L71) - [`tests/observation/test_thread_spans.py::TestThreadSpans::test_detect_span_reports_a_cache_miss_then_a_hit`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_thread_spans.py#L39) - [`tests/observation/test_thread_spans.py::TestThreadSpans::test_root_carries_the_session_id`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_thread_spans.py#L29) - [`tests/observation/test_thread_spans.py::TestThreadSpans::test_stage_spans_nest_under_the_thread_root`](https://github.com/Athroniaeth/piighost/blob/master/tests/observation/test_thread_spans.py#L57) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_allow_list_clears_a_fresh_thread_detection`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L124) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_allow_list_trumps_a_hitl_add`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L89) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_assistant_introduced_deny_listed_value_stays_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L141) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_deny_list_trumps_a_hitl_drop`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L76) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_deny_listed_value_is_deanonymizable`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L110) - [`tests/pipeline/test_override_integration.py::TestThreadPipelineOverride::test_force_strategy_outranks_assistant_provenance`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_override_integration.py#L156) - [`tests/pipeline/test_thread_hitl.py::TestAnonymizeCorrected::test_added_value_is_deanonymizable_thread_wide`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_hitl.py#L47) - [`tests/pipeline/test_thread_hitl.py::TestAnonymizeCorrected::test_adds_a_missed_value`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_hitl.py#L33) - [`tests/pipeline/test_thread_hitl.py::TestAnonymizeCorrected::test_correction_is_local_to_the_message`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_hitl.py#L54) - [`tests/pipeline/test_thread_hitl.py::TestAnonymizeCorrected::test_drops_a_false_positive`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_hitl.py#L39) - [`tests/pipeline/test_thread_hitl.py::TestAnonymizeCorrected::test_re_correcting_replaces_cleanly`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_hitl.py#L62) - [`tests/pipeline/test_thread_recognizer.py::TestConformance::test_satisfies_the_port`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_recognizer.py#L27) - [`tests/pipeline/test_thread_recognizer.py::TestRecognizer::test_a_delimited_factory_is_its_own_recognizer`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_recognizer.py#L34) - [`tests/pipeline/test_thread_recognizer.py::TestRecognizer::test_a_mask_factory_has_no_recognizer`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread_recognizer.py#L41) - [`tests/pipeline/test_thread.py::TestCache::test_resending_a_message_skips_detection`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L147) - [`tests/pipeline/test_thread.py::TestDeanonymize::test_restores_tokens_the_pipeline_never_anonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L224) - [`tests/pipeline/test_thread.py::TestDeanonymize::test_round_trips_a_message_from_the_thread`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L217) - [`tests/pipeline/test_thread.py::TestForget::test_an_erasure_mid_derivation_is_not_memoized`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L183) - [`tests/pipeline/test_thread.py::TestForget::test_forget_thread_clears_the_memory`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L157) - [`tests/pipeline/test_thread.py::TestForget::test_forget_thread_drops_the_memoized_tokens`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L166) - [`tests/pipeline/test_thread.py::TestForget::test_forget_thread_keeps_another_thread_memoized`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L204) - [`tests/pipeline/test_thread.py::TestProvenance::test_assistant_introduced_value_stays_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L260) - [`tests/pipeline/test_thread.py::TestProvenance::test_assistant_repeat_after_user_stays_anonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L279) - [`tests/pipeline/test_thread.py::TestProvenance::test_default_role_anonymizes`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L286) - [`tests/pipeline/test_thread.py::TestProvenance::test_user_introduced_value_is_anonymized`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L273) - [`tests/pipeline/test_thread.py::TestProvenance::test_user_reference_after_assistant_stays_clear`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L266) - [`tests/pipeline/test_thread.py::TestThreadConsistency::test_a_new_value_gets_the_next_number`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L130) - [`tests/pipeline/test_thread.py::TestThreadConsistency::test_a_value_keeps_its_token_across_messages`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L122) - [`tests/pipeline/test_thread.py::TestThreadConsistency::test_threads_are_isolated`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L137) - [`tests/pipeline/test_thread.py::TestThreadTokenMap::test_an_untouched_thread_has_an_empty_map`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L242) - [`tests/pipeline/test_thread.py::TestThreadTokenMap::test_maps_each_token_to_its_value`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L233) - [`tests/pipeline/test_thread.py::TestThreadTokenMap::test_matches_what_deanonymize_restores`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L247) - [`tests/pipeline/test_thread.py::TestThreadTokenMemoization::test_a_new_message_refreshes_the_map`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L396) - [`tests/pipeline/test_thread.py::TestThreadTokenMemoization::test_repeated_calls_reuse_the_thread_token_map`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L385) - [`tests/pipeline/test_thread.py::TestTokenMemoTtl::test_a_sweep_drops_an_untouched_thread_s_expired_entry`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L356) - [`tests/pipeline/test_thread.py::TestTokenMemoTtl::test_an_entry_is_reused_until_its_deadline`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L338) - [`tests/pipeline/test_thread.py::TestTokenMemoTtl::test_an_expired_entry_is_derived_again`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L347) - [`tests/pipeline/test_thread.py::TestTokenMemoTtl::test_an_unset_ttl_keeps_the_entry`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L375) - [`tests/pipeline/test_thread.py::TestUnicodeSpaces::test_a_value_keeps_its_token_across_spacings_and_messages`](https://github.com/Athroniaeth/piighost/blob/master/tests/pipeline/test_thread.py#L406) ## Used by - [`BaseAnonymizationPipeline._traced_guard()`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/pipeline/base.py#L314) - [`_load_or_default()`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/cli/__init__.py#L196) - [`load_pipeline()`](https://github.com/Athroniaeth/piighost/blob/master/src/piighost/config/settings.py#L238) Read from the code graph graphify builds, at the places the domain documentation gives.