I think this is basically achieved by having a max_treasury variable in the protocol.
Yeah you’re right! A maximum treasury balance could be enforced programatically within the protocol or it could be enforced socially by someone proposing a LIP to adjust the treasury contribution when the treasury balance reaches a pre-determined balance. The benefit of the former is that it reduces reliance on social coordination and the benefit of the latter is that it minimizes changes to the protocol.
Upon further thinking, I have a slight preference for programmatic enforcement of a maximum treasury balance although without automatic scaling of the treasury contribution as you suggested. If the maximum treasury balance is met or exceeded, then treasury contribution is set to 0. As a result, if the community wishes to continue treasury contributions an LIP needs to be proposed to increase the maximum treasury balance. I prefer automating setting the treasury contribution to 0 when the max balance is reached and requiring governance intervention to continue contributions vs. my previous suggestion of defaulting to continuing treasury contributions unless there is governance intervention because I think defaulting to putting the evaluation of treasury fund usage front and center as an important issue for the community at this early stage is preferable to defaulting to going on auto-pilot with treasury contributions.