Pilots of a Yemenia Airbus A310-300 stalled the aircraft during a low-altitude recovery after failing to monitor its descent during a circling approach to Comoros at night.
Just a single passenger among the 153 occupants survived after the twinjet struck the water and broke up.
The slow pace of the inquiry - which has taken four years to conclude - greatly irritated French investigators, while the accident also immersed the carrier in a diplomatic spat with the French government.
Flight IY626 from Sana'a had been attempting an approach to Moroni's runway 20. This required the aircraft to follow the opposite-direction runway 02 localiser until 5.2nm from the airport's VOR-DME, then break left over the sea. The aircraft would then track parallel to the runway before performing a 180° right turn to align with final approach.
Comorian investigation authority ANACM determined that the aircraft (7O-ADJ), approaching from the south, became established on the runway 02 localiser at 3,000ft.
Gusting tailwinds of 25kt ruled out a straight-in landing on runway 02. But the crew repeatedly sought an update on the wind conditions, which the inquiry interprets as "reluctance" to resort to the circling approach and indicates that the pilots were hoping the situation would change.
At a height of 1,390ft the aircraft, its autopilot engaged, broke away from the localiser to begin the downwind leg of the circling approach. The break was late, some 0.86nm beyond the published point.
The crew started configuring the aircraft for landing, deploying the undercarriage and setting both slats and flaps to 15°.
But the late break and aggravating strong tailwind had taken the aircraft further north on the downwind leg and the inquiry says: "It is likely that the captain [in the] left seat could not see the runway during this phase of flight."
While the minimum descent altitude was listed as 1,230ft the aircraft continued to lose height. The inquiry says the crew had a "lack of awareness" of the altitude, possibly because they were preoccupied with the aircraft's course and searching for the runway in order to prepare for the final turn. It adds that there is evidence that the crew was erroneously dialling the altitude selector while attempting to select headings.
As the crew informed the controller that the flight was established downwind, they received sink-rate and "pull up" alarms as the aircraft passed below 700ft. The aircraft descended to a radio altimeter height of just 161ft before climbing.
Despite the "pull up" alert, the crew did not follow the required procedure. The pilots raised the landing-gear and, shortly afterwards, retracted the slats and flaps at an airspeed of just 179kt - some 14kt below the 193kt threshold required for clean configuration.
The aircraft's pitch increased and triggered the angle-of-attack protection, setting the engine thrust to take-off power.
Cockpit-voice recordings captured sounds similar to the onset of buffeting, a sign of an approaching stall.
Over the next 40s the aircraft reached an altitude of 1,000ft but experienced right and left banks of nearly 40°. The inquiry says the crew - focused on controlling the roll - did not counter the "excessive" pitch generated by the engine thrust, "probably for fear of pushing the aircraft downwards and hitting the sea".
ANACM says the aircraft stalled and rapidly lost height. It failed to recover, striking the sea 15s later. It attributes the 29 June 2009 accident to "inappropriate actions" by the pilots who, preoccupied with the tricky approach, "probably did not have enough mental resource" to deal with the deteriorating situation and multiple alarms.