sequenceDiagram
participant WC as WooCommerce/WordPress hooks
participant SW as SubscriptionWatcher
participant SWM as SubscriptionWatchObjectMap
participant SWO as SubscriptionWatchObject
participant CALC as CalculatorHelper
participant LOG as Log (DB)
WC->>SW: Hook fires (save / status change / meta update)
SW->>SWM: watch($subscription)
SWM-->>SWO: Creates or returns existing watch object
SWO->>SWO: Snapshots current ARR
Note over SWO: On shutdown / scheduled job
SWO->>CALC: calculate_arr($subscription)
CALC-->>SWO: new ARR value
SWO->>LOG: Persists Log + Reasons + Contexts if ARR changed