What to build
A commitment in grace currently loses its 6 h grace-expiry job on a server restart (only cadence/deadline/win-back are rebuilt). Persist a grace-start timestamp so rebuild_from_db() can re-arm the grace-expiry job for the remaining window.
HITL: this amends the normative §8.1 DDL (adds a column), which requires human ratification — precedent: ADR-0002 added last_contact_at. Decide the column and record an ADR + spec update before implementing.
Context: deferred from the PR #27 review.
Acceptance criteria
Blocked by
None - can start immediately
What to build
A commitment in
gracecurrently loses its 6 h grace-expiry job on a server restart (only cadence/deadline/win-back are rebuilt). Persist a grace-start timestamp sorebuild_from_db()can re-arm the grace-expiry job for the remaining window.HITL: this amends the normative §8.1 DDL (adds a column), which requires human ratification — precedent: ADR-0002 added
last_contact_at. Decide the column and record an ADR + spec update before implementing.Context: deferred from the PR #27 review.
Acceptance criteria
gracerecords the grace-start timerebuild_from_db()re-arms the grace-expiry job for the remaining window after a restartgracecommitment past its window is missed on boot; one still inside keeps a re-armed jobBlocked by
None - can start immediately