Get a lock for your door! First things first.
How long a lease does this roommate have?
Are they month to month?
If so.. give proper written notice (usually 30 days.)
Next time, the lease should say:
"NO OVERNIGHT GUESTS."
"No tenant shall invite guests daily to the house, nor shall any tenants' guests disturb the quiet enjoyment of other tenants."
"No tenant's guest shall be inside the premises without the invitor being present at all times."
Take out the 20 hour rule. That does nothing. If you want to set hour limits, make it 5 hours or something. Plus, no overnight guests without prior witten approval of the landlord.
I don't tolerate my tenants yelling at me. Not gonna happen.
My lease even includes that such abusive, profane, or offensive behavior by any tenant or guest shall not be tolerated and is grounds for giving them notice and terminating the lease.
She thinks you're a pushover, and she's a bully.. so she's trying to scare you by yelling.
How many tenants do you have? How many unrelated tenants are allowed to live in a house by your local zoning codes? Do you pay rental taxes? (Obviously don't answer these questions here... research the answers then proceed carefully with tenant.)
Perhaps talking firmly but politely,
"As you probably can tell, this living situation is not working for me. It is not acceptable to have guests over when we're not home. I'm sure you're not happy here. Do you have another place to live?"
Or perhaps step it up,
"Our living situation is not working. Guests cannot be in my home unattended. That is a violation of my safety and a risk to my home and my belongings. It disturbs the quiet enjoyment of myself and of other tenants, and jeopardizes our safety. If this problem continues, I will have to terminate your lease in 30 days."
Remember, if she goes nuts and starts damaging the property or threatening you, call and file a report. She could be charged with destruction of personal property if she causes purposely damages the place because she's mad.
If she has a month to month lease, give her 30 days written notice to vacate.
Next time, remember to be polite.. but if you're too nice, roommates will walk all over you. Some things are to be expected with roommates... friends over perhaps a few nights a week, a few overnight guests a month (unless lease bans it), dirty dishes, and the like. Yelling and daily unattended guests = no way jose.
My lease is a little shorter than yours, but gives me much more control of the situation.
I usually casually chat with new roommates. We usually end up talking about old roommates, and I'll tell them about an old roommate who I had to give notice to because she violated the overnight guest clause, paid late, and was hateful and dirty. I usually throw in a "it was awkward, but I will protect my home at all costs... whether that means asking someone to leave, or giving away my own pet to protect my nice carpet."
Nothing in your lease gives your tenant grounds to have a homeless (or other person) there all day every day unattended.
Nothing in your lease gives your tenant grounds to yell at you.
My tenants yell at me, and per my lease, 30 days written notice.
I also like month to month leases for this very reason.