tr
TryGhost
GitHub
Ghost
Workspace
GitHub
CI Pipeline Executions
Current execution
Succeeded
jonatan-ber-3935-final-email-reconciliation
Runs and Agents
Configuration
Self-Healing CI
Project Graph
Circular Dependencies
Enterprise
Resource Usage
Analysis
Conformance
Enterprise
Runs
Current run
Succeeded
Tasks
Resource Usage
Insights
Compare tasks
Analytics
Sign in
Toggle sidebar
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.
nx run ghost-monorepo:lint:boundaries
⌘K
Succeeded
nx run ghost-monorepo:lint:boundaries
Click to copy
Linux
4 CPU cores
read-write
access token used
4bbec136
30675
GitHub
Ghost
Workspace