"""Focused Builder conversation policy for lightweight resume completion. Builder collects confirmed resume facts only. It never calls the deep-optimization graph, job rubrics, Office data, or JD analysis. Candidate rewrites remain optional until the user explicitly chooses one in the confirmation card. This package was split from the original single module to keep every code file within the 200-line harness limit. The public surface is re-exported here so existing `from . import builder_conversation` / `from app.builder_conversation import ...` consumers keep working unchanged. """ from __future__ import annotations from .candidate import ( _candidate_rewrite, _fact_is_preserved, _material_fact_fragments, _normalize_material_fact, _uncovered_material_facts, ) from .component_events import process_component_event from .constants import ( GAP_PROMPTS, IDENTITY_CHANGE_TERMS, MAX_GAP_DIMENSIONS, MAX_GAPS_PER_TURN, NO_INFORMATION_PATTERNS, SECTION_GAP_DIMENSIONS, SECTION_HEADINGS, SECTION_KEYWORDS, SECTION_PRIORITY, u, ) from .flow import _begin_edit, _process_detail_message, process_message from .followups import ( _continue_recent_entry, _redisplay_revision_candidate, reconcile_last_confirmed_entry, ) from .predicates import ( _dimension_present, _entry_by_id, _gap_prompt, _is_no_information_reply, _is_revision_instruction, _looks_like_recent_continuation, _matching_entries, _next_gap_dimensions, _requested_section, _requests_identity_change, _requests_new_entry, ) from .save import save_entry from .skills import _builder_skill_candidates, _process_skill_selection, _skill_choice_card from .state import ( _clear_draft, _completed_sections, _dedupe_strings, _gap_state, _highlights, _merge_fact_text, _public_entry, _reset_gap_state, _set_stream_phases, ensure_builder_state, ) from .turns import ( _entry_choice_card, _entry_label, _fact_prompt, _next_step_turn, _record_card, _section_choice_card, recommended_section, welcome_turn, ) __all__ = [name for name in dir() if not name.startswith("__")]