tr
TryGhost
GitHub
Ghost
Workspace
GitHub
CI Pipeline Executions
Filtered
Runs
Demo
Insights
Compare tasks
Analytics
Sign in
Toggle sidebar
Overview
⌘K
Ghost
Loading workspace stats
Loading workspace insights...
Statistics interval
7 days
30 days
Latest CI Pipeline Executions
Status
Fix filter
Filter
Fuzzy
Filter range
Sort by
Sort by
Start time
Sort ascending
Sort descending
GitHub
Ghost
Workspace
Succeeded
30675
d360f6a9 Changed failed final email repairs to stay queued instead of failing the fetch ref https://linear.app/ghost/issue/BER-3935/replace-per-cycle-analytics-recompute-with-bounded-reconciliation Review found that one email whose repair kept failing, for example under lock waits from batch creation, blocked every email queued behind it: the drain stopped at the first error and the same entry was retried first on every later drain. The error also failed the whole fetch, which skipped the member statistics for every member in that fetch, left the persisted cursor behind committed events, and aborted the remaining lanes of the cycle. Each queued email is now attempted in every drain; a failed one is logged and left queued for the next final aggregation. The fetch's own facts and increments are already committed, so repair failure is not a reason to replay it. The comparison metrics carry a phase label so drift that was repaired is distinguishable from drift observed during a comparison soak, and reconcile refuses to run outside the incremental mode so comparison can never hide a bad counter by repairing it. The queue is a plain set that removes an email before repairing it, and drains chain on the previous drain's promise, replacing the generation symbols and manual mutex.
by Jonatan Sv...
J
Succeeded
30675
06f90f1a Changed failed final email repairs to stay queued instead of failing the fetch ref https://linear.app/ghost/issue/BER-3935/replace-per-cycle-analytics-recompute-with-bounded-reconciliation Review found that one email whose repair kept failing, for example under lock waits from batch creation, blocked every email queued behind it: the drain stopped at the first error and the same entry was retried first on every later drain. The error also failed the whole fetch, which skipped the member statistics for every member in that fetch, left the persisted cursor behind committed events, and aborted the remaining lanes of the cycle. Each queued email is now attempted in every drain; a failed one is logged and left queued for the next final aggregation. The fetch's own facts and increments are already committed, so repair failure is not a reason to replay it. The comparison metrics carry a phase label so drift that was repaired is distinguishable from drift observed during a comparison soak, and reconcile refuses to run outside the incremental mode so comparison can never hide a bad counter by repairing it. The queue is a plain set that removes an email before repairing it, and drains chain on the previous drain's promise, replacing the generation symbols and manual mutex.
by Jonatan Sv...
J
Succeeded
jonatan-ber-3935-final-email-reconciliation
8676545d Merge cc7421d86a329cc4b27ab5289c3cd952b6d0041c into 639ddc164e6c954391d7193bc6e4618c65ad4de1
by Jonatan Sv...
J
Succeeded
30675
cc7421d8 Changed failed final email repairs to stay queued instead of failing the fetch ref https://linear.app/ghost/issue/BER-3935/replace-per-cycle-analytics-recompute-with-bounded-reconciliation Review found that one email whose repair kept failing, for example under lock waits from batch creation, blocked every email queued behind it: the drain stopped at the first error and the same entry was retried first on every later drain. The error also failed the whole fetch, which skipped the member statistics for every member in that fetch, left the persisted cursor behind committed events, and aborted the remaining lanes of the cycle. Each queued email is now attempted in every drain; a failed one is logged and left queued for the next final aggregation. The fetch's own facts and increments are already committed, so repair failure is not a reason to replay it. The comparison metrics carry a phase label so drift that was repaired is distinguishable from drift observed during a comparison soak, and reconcile refuses to run outside the incremental mode so comparison can never hide a bad counter by repairing it. The queue is a plain set that removes an email before repairing it, and drains chain on the previous drain's promise, replacing the generation symbols and manual mutex.
by Jonatan Sv...
J
Succeeded
30675
f2eaac91 Added final newsletter email reconciliation mode ref https://linear.app/ghost/issue/BER-3935/replace-per-cycle-analytics-recompute-with-bounded-reconciliation Keep live email counters between aggregation checkpoints and repair all outcomes at fetch completion. A boot-owned queue preserves failed repairs across replacement processors and empty fetches. Leave member recounts and comparison mode available while the separate counter rollout is validated.
by Jonatan Sv...
J
Previous
Next