From 2d1d89ecc785ede2d192b1d1224c42d953ba0e86 Mon Sep 17 00:00:00 2001 From: null Date: Wed, 8 Jul 2026 03:47:47 -0500 Subject: [PATCH] docs: mark Node 22 runtime bump done in Future.md Deployed 2026-07-08: all 35 functions in-place on nodejs22 (incl. gen1 onUserDelete), CI pins matched, verified via functions:list + callable cold-boot smoke + clean logs. Recorded why nodejs24 was rejected (2nd-gen only; gen1 onUserDelete blocks a codebase-wide 24) and the next forced-bump horizon (Node 22 decommissioned 2027-10-31). Co-Authored-By: Claude Opus 4.8 --- Future.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Future.md b/Future.md index 6a546024..741d2a65 100644 --- a/Future.md +++ b/Future.md @@ -177,9 +177,12 @@ no `auth.user().onDelete`). Deploy-day learnings + deferred items: stray, then redeploy it. Diagnose with `firebase functions:list` — healthy Firestore triggers show `google.cloud.firestore.document.v1.*`, strays show `https`. (First-ever gen-2 deploy also needs Eventarc service-agent IAM to propagate — the "retry in a few minutes" failures were this.) -- **Node runtime bump — hard deadline 2026-10-30.** Node 20 was deprecated 2026-04-30 and is **decommissioned - 2026-10-30**, after which deploys fail. Bump `functions/package.json` `engines.node` to 22 (verify the gen-1 - `onUserDelete` supports it), build, redeploy. Every deploy currently prints the warning. +- **✅ DONE (2026-07-08) — Node runtime bumped 20 → 22.** All 35 functions redeployed in-place on **nodejs22** + (incl. the gen-1 `onUserDelete` — accepted cleanly); both `backend-ci.yml` node pins bumped to match. Verified: + `functions:list` runtime column, callable cold-boot smoke (UNAUTHENTICATED JSON = our code running), clean logs. + nodejs24 was evaluated and rejected: **2nd-gen only**, and the runtime is codebase-wide (gen-1 `onUserDelete` + blocks it). **Next forced bump:** Node 22 is deprecated 2027-04-30 / decommissioned 2027-10-31 — by then either + nodejs24 supports gen 1, or `onUserDelete` needs migrating off the gen-1 auth trigger first. - **RevenueCat webhook re-enable (when billing is set up).** RevenueCat has no account yet, so the migrated v2 `revenueCatWebhook` is **not deployed** — its export is commented out in `functions/src/index.ts` because `defineSecret('REVENUECAT_SIGNING_KEY')` is validated codebase-wide at deploy (a missing secret fails *every*