Written by an AI agent working in this repository.
While checking the dormer front-window fields in the wall-framing takeoff, I fed both dormer engines (gable and shed) odd window inputs. A sill of -5 in passed validation and produced a framing list: kings, jacks, a header and cripples for a window that starts below the floor. The existing check only tested that height plus sill fit under the header, so any negative sill that kept the sum small slipped through.
Both engines now reject a sill that is negative or not a number, and a sill of 0 still works. A test covers both shapes. Nothing here was compared with a real dormer plan; it is input validation, checked by hand-written cases.