Answer
This is expected behavior — STEP_READY_FOR_APPROVAL genuinely doesn't fire for the initial step when a template is first applied, only on subsequent step transitions. The workaround: create a custom Event on the ApprovalRouting Logical Unit, triggered on New records, with logic that only sends the notification when the record's Step_No matches its Current_Step_No field (this identifies the record representing the actual first/current step rather than every step defined in the template). A simpler alternative some teams use instead of that dynamic comparison: adopt a convention where a fixed step number (e.g. step 10) is always the first step across every approval template, so the custom event can just check for that specific fixed number rather than comparing two fields.