{"id":"6a3a8e01d29e4d59da1d63be","title":"2026 06 23 Other","path":"how-to/committee/release-notes/2026-06-23-other","contentMarkdown":"# 23-Jun-2026 — alert on revoked Gmail tokens, stop destructive rescan, self-heal watch on reconnect\n\n## [build 718](https://github.com/nbarrett/ngx-ramblers/actions/runs/28029913911) — [commit a08e7f5](https://github.com/nbarrett/ngx-ramblers/commit/a08e7f57ad7c088780d677b6a97967167d97e550)\n\n_____\n\nThe staging Gmail inbox stopped importing after its OAuth refresh token hit\nGoogle's 7-day Testing-mode expiry and was rejected with invalid_grant. Three\nproblems made the outage worse than it needed to be:\n\n- A revoked token only updated a database field; nobody was told, so inbound\nmail silently stopped for a week. The daily health check and the poller now\nsend a web-push alert to every inbox subscriber the first time a connection\nflips to token-revoked, deep-linking to the mail settings page to reconnect.\nOnly the transition into token-revoked alerts, so it does not repeat every\npoll.\n\n- rescan-general deleted every general thread and message before polling, so an\nauth failure wiped the threads and imported nothing (the \"Removed 3 threads,\nno new messages\" symptom). It now probes the token first and aborts without\ndeleting when the connection is unhealthy, returning the error to the caller.\n\n- The OAuth callback stored the new token but left the watch and backlog to the\ndaily cron, up to 24h away. Reconnecting now resets the history cursor, polls\nthe backlog immediately, and re-registers the Gmail watch.\n\nThe root-cause fix - publishing the OAuth consent screen to production so tokens\nstop expiring after 7 days - is a Google Cloud console action, not code.","contentHtml":"<h1>23-Jun-2026 — alert on revoked Gmail tokens, stop destructive rescan, self-heal watch on reconnect</h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/28029913911\">build 718</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/a08e7f57ad7c088780d677b6a97967167d97e550\">commit a08e7f5</a></h2>\n<hr>\n<p>The staging Gmail inbox stopped importing after its OAuth refresh token hit\nGoogle&#39;s 7-day Testing-mode expiry and was rejected with invalid_grant. Three\nproblems made the outage worse than it needed to be:</p>\n<ul>\n<li><p>A revoked token only updated a database field; nobody was told, so inbound\nmail silently stopped for a week. The daily health check and the poller now\nsend a web-push alert to every inbox subscriber the first time a connection\nflips to token-revoked, deep-linking to the mail settings page to reconnect.\nOnly the transition into token-revoked alerts, so it does not repeat every\npoll.</p>\n</li>\n<li><p>rescan-general deleted every general thread and message before polling, so an\nauth failure wiped the threads and imported nothing (the &quot;Removed 3 threads,\nno new messages&quot; symptom). It now probes the token first and aborts without\ndeleting when the connection is unhealthy, returning the error to the caller.</p>\n</li>\n<li><p>The OAuth callback stored the new token but left the watch and backlog to the\ndaily cron, up to 24h away. Reconnecting now resets the history cursor, polls\nthe backlog immediately, and re-registers the Gmail watch.</p>\n</li>\n</ul>\n<p>The root-cause fix - publishing the OAuth consent screen to production so tokens\nstop expiring after 7 days - is a Google Cloud console action, not code.</p>\n"}