TTL and lock height question

Will a slate’s TTL prevent a finalized transaction with a lock height greater than or equal to the TTL from being broadcast? Or is the TTL only intended to put a time limit on finalizing a transaction?

For example, at height 1000, a slate is created with a TTL of height 2000 and a lock height of height 3000. The sender and receiver finalize the slate before height 2000, but the sender doesn’t broadcast the transaction to a node yet since the current height is less than the lock height.

Then at height 2000, should the sender and receiver both consider that transaction to be canceled since the TTL height has been reached? Or is the sender still expected to broadcast the transaction at height 3000 once the lock height is reached? Does TTL even matter after a slate has been finalized?

Here’s a comment from the grin-wallet rust implementation:

/// TTL, the block height at which wallets
/// should refuse to process the transaction and unlock all
/// associated outputs

From what i’ve checked the code, before doing each step (step2, step3 aka finalize) it checks if the current block height is >= TTL and throws an error if that holds. After it has been finalized you can post this transaction even if the current block height is past TTL (i think, i didn’t find the check there), but there’s a chance that the inputs have already been spent in another transaction since they were unlocked (i’m not sure about this, they might get unlocked only if you haven’t done the finalize step before the TTL expired). Hope someone else can chime in and give a better answer