This addresses T63675: Placing keyframe outside of NLA Strip frame range while in Tweak Mode no longer possible
For this patch, changes include D7602: NLA: Fix Sync Length due to the dependency but the only file of interest is anim_sys.c
Problem
The animator can not view the NLA result outside of the strip bounds. This is expected behavior. However, if they have flagged the strip to sync with the action bounds then their expectation is for the strip to evaluate based on the action bounds, not the only-updated-on-tweak-exit strip bounds. Further, it's not possible to insert keys outside of the strip bounds. This results in a workflow where the animator must determine the strip bounds before making adjustments to the action. This isn't trivial to determine so it's a trial and error process.
Solution
The NLA system now evaluates the strip based on the action bounds if it's flagged for syncing. Now the animator can freely insert and modify keys outside of the strip bounds. They will never have to touch the strip bounds directly. Changing the evaluation bounds is a simple as moving keys around.
Old: Unable to Insert Keys outside synced strip bounds
New: Able to insert keys outside synced strip bounds
Old: Unable to view NLA result outside synced strip bounds
New: Able to view NLA result outside synced strip bounds
Note: In the existing implementation, there is an inconsistency. If you unpin the track, then the tweaked strip evaluates and allows keyframe insertion outside the strip bounds, even if extend mode is None. Effectively, unpinning does close to what this patch does. If pinned (default), then the strip does not evaluate nor allow keyframing outside the strip bounds. So why not use unpinned strips? Unpinned strips treat the keyframe times as global times. Pinning is stored in the animation data, not per strip, so its an all or nothing use. Thus all actions will always evaluate at the same time no matter where any strip is placed time-wise. This makes all actions one-time use only which goes against the core use of the NLA system.
Example File: