Mori's port was lost to Ouchi. I was trading with them before because they had the strongest military (Strong) among my neighbors. Yes, make friends with militarily strong ones first, because they attack you sooner; I like this part that is realistic about diplomacy. (For this to work, I still need to keep my military 1 rank away from them too, eg Strong to Moderate, Moderate to Weak, etc).

And next thing I know, Mori is angry that our Trade Agreement was broken.

In terms of coding, this is simplistic and LAZY. Simply slapping on a "Trade Agreement Broken" penalty for all cases of broken Trade Agreements is plain lazy, and is the easiest to code. For all the innovation (and there are a lot) in battle simulation and such, this diplomacy coding is shockingly lazy.

How the heck do I role-play this?? Mori's stance:
We lost a lot of income today. We're used to a better living. We know that Ouchi took our port from us. Yes, we also know we have no Military Alliance between us. But guess what? We're taking it out on you! We're mad at you because we couldn't afford to buy the latest and greatest Kimono fashion of the 16th century. Heck, even our wives are mad at you, and would stab you if they see you now!

I need some suggestions for how to role-play this.

I can appreciate the symmetric relationship thing. Someone who betrayed me will be wary of me (worried I might betray him back). Therefore, I accept that the relationship gets a penalty even though the other party broke it.

However, what if it wasn't broken by either party? What if it was broken by a 3rd party, such as war and loss of ports?

I believe CA can and wants to do this. Look at how "Demand Trade Embargo" works. I demanded a trade embargo against some clan, and THAT clan hates me (-40, I think). That Trade Agreement was broken by a 3rd party (me), and the penalty applies directly to that 3rd party.

In the above case, Mori should know that Ouchi broke the Trade Agreement (by taking Mori's port).

Therefore, I believe this "Trade Agreement penalty due to loss of port" is a bug.

In any case, it'll be nice if I get some solid suggestions on how to role-play around this bug.