Google Sheets: How to use an ArrayFormula that contains a partial range

I have a Google sheet that is filled with a linked Google form. I have added some additional columns to calculate additional values ​​for each row that is added. I want these columns to be calculated automatically when new rows are completed, so I would like to use ARRAYFORMULA ().

Several of my simple formulas work fine, but I can not make the ArrayFormula syntax correct for a formula that uses FILTER () to calculate the maximum value in a column for all cells over the current cell.

Time stamp Name inside or outside? Start time of shift
14:45:59 N on the clock (start)
14:51:02 T Clock-in (start)
14:51:46 N Departure clock 2:45:59 PM
15:03:51 J Clock-in (start)

Single cell version (to calculate D6):

= yes (C6 = "Clock output", Max (FILTER (A $ 2: A6, A $ 2: A6 <A6, B $ 2: B6 = B6, C $ 2: C6 = "Clock input")) , "(start ) ")

My (incorrect) attempt in arrayFormula to calculate cells D2 through D12:

= ArrayFormula (yes (C2: C12 = "Clock output", Max (FILTER (A $ 2: {A2: A12}, A $ 2: {A2: A12} <{A2: A12}, B $ 2: { B2: B12} = {B2: B12}, C $ 2: {C2: C12} = "Clock input")), "(start)"))

How can I tell arrayFormula to increment the final cell of the filter range each time, but to keep the start row the same?

I am also open to other approaches besides FILTER (I also tried Vlookup, but I had no luck). What I finally look for is a formula that finds the last "start" time, with the same name tag as the current cell, before the time stamp of the current cell.

Simplified spreadsheet example: