Currently we use execution-date when generating the command to send via executor in https://github.com/apache/airflow/blob/9c94b72d440b18a9e42123d20d48b951712038f9/airflow/models/taskinstance.py#L420-L436

We should replace the execution_date in their to run_id instead and handle the corresponding changes needs on the executor and worker.
tests/models/test_taskinstance.py
dag_maker.create_dagrun(
                run_type=DagRunType.SCHEDULED,
                state=state,
                execution_date=execution_date,
                start_date=pendulum.now('UTC'),
                session=session,
            )
            ti = TI(task=task, execution_date=execution_date)
            ti.set_state(state=State.SUCCESS, session=session)
            return ti
        with create_session() as session:  
            date = cast(pendulum.DateTime, pendulum.parse('2019-01-01T00:00:00+00:00'))
            ret = []
            for idx, state in enumerate(scenario):
                new_date = date.add(days=idx)
                ti = get_test_ti(session, new_date, state)
                ret.append(ti)
            return ret
    _prev_dates_param_list = [
        pytest.param('0 0 * * * ', True, id='cron/catchup'),
        pytest.param('0 0 * * *', False, id='cron/no-catchup'),
        pytest.param(None, True, id='no-sched/catchup'),
        pytest.param(None, False, id='no-sched/no-catchup'),
        pytest.param(datetime.timedelta(days=1), True, id='timedelta/catchup'),
        pytest.param(datetime.timedelta(days=1), False, id='timedelta/no-catchup'),
    ]
    @pytest.mark.parametrize("schedule_interval, catchup", _prev_dates_param_list)
    def test_previous_ti(self, schedule_interval, catchup, dag_maker) -> None: