Rung 3 of ten. The simplest rule on the ladder — an occurrence on that week's list means no bonus that week — and the one with the most human judgement sitting behind it, because somebody decides what counts as an occurrence before the rule ever sees it.
On the week's attendance-occurrence list → Ineligible for that week. Not on it → the rung passes and the ladder moves on. Unlike Damage there is no multi-week window: an occurrence costs the week it happened in and nothing after it.
There is no threshold constant for this one, because there is no number — membership of a list is the whole test.
Jake Hallien's FICO tracker, read automatically by fico_tracker.py, the same source
as Damage and Terminated. The same findings also arrive as Jake's
weekly WK <N> ATTENDANCE CANCEL: messages in his Slack DM with Dan, posted
after Jaimee has approved them.
That approval step matters for reading the list correctly. What arrives is not a raw log of who was late — it is the set of occurrences that survived review. Excusals have already been applied before the rule ever runs.
recompute.py --check-tracker says so in one line.
Observed across roughly 15 real correction emails — the vocabulary people actually use, not a designed set, and explicitly not exhaustive. Anything unrecognised is flagged for Dan rather than bucketed on a guess.
| String | Means |
|---|---|
| Late | Late for the shift |
| Call Out - Same Day | Called out on the day |
| No Call / No Show | Neither |
| String | Means | Direction |
|---|---|---|
| No Notice | An occurrence with no notice given | → Ineligible |
| Excused | An override, not a data-driven correction | → Eligible |
| CC | Meaning unclear. Possibly "Call/Callout", possibly "Contact Compliant". Seen a few times | Flagged for Dan — never guessed |
| Attendance and damage defects | Both categories at once (seen once) | → Ineligible |
Excused, No Notice and CC looked like pure discretion calls.
Jake's Jaimee-approved WK <N> ATTENDANCE CANCEL: messages may in fact be the
real data behind Excused and No Notice specifically — which would
make them auto-checkable rather than judgement calls. That has not been validated against a real
cycle yet, so all three still pass through to Dan.
Attendance was promoted from a display note to a real exclusion on 2026-09-13. DIN6 gained the rung. DII5 did not — its copy of the ladder had been written earlier and nobody went back to it. For a week, a DII5 driver with a real attendance occurrence was paid a bonus that a DIN6 driver with the identical occurrence lost.
That is the concrete reason both stations now run one shared rules file. Dan, 2026-09-20: "both stations need to have the same exact rules." They do now — 3000, 98.0, 0.4 and 1822 had each been written down twice and the copies had already drifted. Unifying them was proven behaviour-neutral across 447 driver-weeks with 0 verdict changes, and a test now feeds an identical driver through both stations on every rung and fails if any verdict differs.
DII5 WK 36 ATTENDANCE CANCEL: N/A. The rung will start firing there the first time he
logs one.
Its immediate neighbour, from the same tracker and the same Slack thread
(WK <N> Terminations: <names>). Marked Term. that week means
Ineligible; the correction string is simply TERM.
Attendance data is not uploaded to the dashboards, so a DA's attendance reads "no events on file" here regardless of what the tracker says. The exclusion runs correctly in the payroll build — it is the display that has no source, not the rule.
rules.py. Occurrence list from Jake Hallien's FICO
tracker via fico_tracker.py. Reason strings from
references/ripple-bonus-correction-vocabulary.md. Drift history from
references/ripple-bonus-rules-at-a-glance.md. Last checked 2026-09-20.