Requirement Extraction ====================== Requirement extraction turns natural renter wording into ``RentalRequirements``. The current extractor is deterministic by design. This keeps tests repeatable and makes every rule visible to the team. Inputs ------ * The latest customer message. * Optional current requirements from an earlier conversation turn. * Known locations derived from the real property cache. Outputs ------- * A merged ``RentalRequirements`` object. * Confidence score. * Notes describing what was detected. * Missing required fields. Common Fields ------------- ``city`` Location detected from the real cache's known city, suburb, and region names. ``budget_max`` Weekly budget, including phrases such as ``5k``, ``five grand``, or ``under 5000``. ``bedrooms_min`` Minimum bedrooms requested by the renter. ``property_type`` Normalised to values such as ``house``, ``apartment``, or ``townhouse``. Extension Rule -------------- When adding a new phrase, add a real-data test first or in the same commit. This matches the Godot-style approach of making code behavior and documentation easy for contributors to trust.