Internal-data synthesis across Vercel, PostHog, GSC, MailerLite, Sentry, Adapty, Linear, Convex, and BigQuery. Anomalies and Wins reference today vs the trailing 14-day window. Written 07:00 UK by the analytics-cockpit Routine.
Snapshot fetched at 06:08 UTC, single request, no timeout. Prior briefings: Sep 19 (anomaly_count: 2, action_count: 4, snapshot assembled from individual endpoints after a full timeout), Sep 17 (anomaly_count: 1, action_count: 4), Sep 16 (anomaly_count: 2, action_count: 4).
`high_priority_open` reads 200 with `uncapped: true` set — up from an exact, uncapped 173 on 17 September (no reading was taken on 18 or 19 Sept for this field). But `cod_backlog` (always capped at 200) and `created_last_7d` also both read exactly 200 this run. Three fields landing on the identical round number in one snapshot reads as more consistent with a query or caching bug capping fields that previously returned distinct values than with three independent real spikes to the same number — worth confirming against an uncapped API pull before treating this as a genuine backlog surge.
`bet_open` has held at 26 across every recent briefing. Today it reads 3 — an 88% drop — but the `recently_completed` list returned in this same snapshot contains no BET-team issues at all (it's COD and DEV entries only). That combination — a near-total collapse with zero matching completions — points more towards a bulk status change or a broken "open" filter than towards genuine overnight triage of 23 tickets.
`lastSyncAt` still reads 2026-09-16T15:25:00Z, identical to both the 17 and 19 September briefings (no briefing ran 18 Sept). The £27,619 reported-spend reconciliation first raised 12 September remains open regardless, but four days without a sync — approaching the ~112-hour freeze from 10–15 September — is worth confirming as a stall rather than assuming it self-resolves again.
Impressions rise to 1,008 from the last confirmed reading of 803 (17 Sept, +25.5%), and clicks double from 3 to 6. Average position eases slightly to 26.32 (from 24.98), but that's within the noise this metric has shown over the past week (28.36 → 26 → 24.98 → 26.32) and doesn't offset the clicks/impressions move.
1. Verify the Linear high-priority-open and BET-open figures against an uncapped API pull before treating either as real — three fields landing on exactly 200 in one snapshot, plus a BET count with zero matching completions, both point at a query or caching issue
Pull `high_priority_open`, `created_last_7d` and `bet_open` directly rather than through the cached snapshot endpoint, and check whether the underlying Linear query logic changed recently (a filter, a state mapping, or the cap value itself moving).
→ Engineering · `apps/cockpit/src/lib/snapshot.ts`
2. Investigate whether the BigQuery population sync has genuinely stalled — `lastSyncAt` frozen at 16 September 15:25 UTC for a fourth calendar day
This is now approaching the length of the 112-hour freeze already seen once this month (10–15 September). The £27,619 reported-spend reconciliation first raised 12 September is still open on top of this.
3. Confirm whether the Sep 15 12:02:20 UTC auth-error burst is actually being worked — still 9 unresolved, flat for a second straight day
The original ask (check deploy history and Clerk status around that timestamp) still hasn't been confirmed as done. No new events since 15 Sept, so the cluster isn't spreading, but it also isn't shrinking further.
| Surface | Metric | Value | vs Prior |
|---|---|---|---|
| Mobile | Crash-free sessions (7d) | 100% | 100% |
| Mobile | Sessions (7d) | 14 | 14 (flat) |
| Mobile | Sentry events (7d) | 3 | 3 (flat) |
| Source | Status | Notes |
|---|---|---|
| Cockpit snapshot endpoint (`/api/snapshot/all`) | ✅ ok | Single request succeeded, 06:08 UTC, no timeout |
| Sentry (mobile, web, backend) | ✅ ok | All three projects returned; see Watch (web crash-free users) and Action 3 (backend) |
| Axiom | ✅ ok | Call volumes returned normally |
No briefing ran yesterday (18 September) — this is the first run since 17 September. Snapshot attempted at 06:11 UTC; the aggregated endpoint (`/api/snapshot/all`) timed out twice at the 60-second function limit, so this briefing is built from the individual tab endpoints that did return (App Health, Monetisation, CCI, Population) plus the rollup cross-check. Marketing, User Behaviour and Engineering have no data this run — see Anomaly 1 and Source Health. Prior briefing: 17 Sep (anomaly_count: 1, action_count: 4).
Both `/api/snapshot/all` and the standalone `user-behaviour` endpoint (PostHog only, no other source) timed out at exactly 60.4s and 60.9s respectively. Every PostHog-free tab (App Health, Monetisation, CCI, Spend) returned in under 8 seconds. Because `buildFullSnapshot()` awaits all eleven sources in one `Promise.all`, PostHog hanging silently takes Marketing, User Behaviour and Engineering (Linear) down with it too, even though Linear has nothing to do with PostHog — there's no dedicated Engineering endpoint to route around it. The rollup (computed 05:34 UTC by the separate 06:30 routine) is unaffected and still fast, so this is specifically a live-query problem, not a PostHog outage.
4. Re-wire Meta/Google Ad Spend credentials — still unset roughly two weeks in, and now the only way to explain Friday's paid-traffic dip
`META_ACCESS_TOKEN`/`META_AD_ACCOUNT_ID` and the Google Ads credential set remain missing.
| Mobile | Unresolved issues | 1 | 1 |
| Web | Sentry events (7d) | 12 | 12 (flat) |
| Web | Unresolved issues | 1 | 1 |
| Web | Crash-free users (7d) | 0% | 0% (see Watch) |
| Backend | Sentry events (7d) | 24 | 24 (flat) |
| Backend | Unresolved issues | 9 | 9 (flat, see Action 3) |
| Marketing | Web pageviews (7d) | 981 | 1,161 (Sep 17, −15.5%) |
| Marketing | Unique visitors (7d) | 454 | — |
| Marketing | GSC clicks (7d) | 6 | 3 (see Win 1) |
| Marketing | GSC impressions (7d) | 1,008 | 803 (see Win 1) |
| Marketing | Avg position | 26.32 | 24.98 |
| Marketing | Email subscribers | 10 | 10 (unchanged) |
| Engineering | COD backlog | 200 (capped) | 200 (capped) |
| Engineering | Completed 7d | 56 | 63 (Sep 19) |
| Engineering | DEV in-flight | 8 | 8 (flat) |
| Engineering | BET open | 3 | 26 (see Anomaly 2) |
| Engineering | High priority open | ≥200 (capped) | 173 (Sep 17, see Anomaly 1) |
| Population | Total users | 21 | 21 (flat) |
| Population | Reported spend (app) | £27,619 | £27,619 (unchanged, see Anomaly 3) |
| Population | Last sync | 2026-09-16T15:25:00Z | same (see Anomaly 3) |
| Monetisation | MRR | £0 | £0 |
| CCI | Drift queue | 0 pending | 0 pending |
| Spend | Total monthly (projected) | £537.57 | £545.15 (Sep 17, −1.4%) |
| Spend | Vercel builds (projected) | £42.73 | £50.20 (Sep 17, −14.9%) |
| PostHog (Marketing, User Behaviour) | ✅ ok | Both endpoints returned in full this run |
| GSC | ✅ ok | See Win 1 |
| MailerLite | ✅ ok | 10 subscribers; automations still 0 activated |
| Ad Spend (Meta/Google) | ⚠️ not configured | Credentials still unset — see Action 4 |
| Adapty | ✅ ok | Revenue/MRR/ARR confirmed; see Watch on instrumentation flapping |
| Linear (Engineering) | ✅ ok (data suspect) | Returned successfully but see Anomaly 1 and 2 — values need verification against an uncapped pull |
| BigQuery (Population) | ✅ ok (data stale) | Returned successfully but `lastSyncAt` hasn't moved since 16 Sept — see Anomaly 3 |
| Convex (CCI) | ✅ ok | Drift queue empty, all maintenance crons report `success` |
| Spend | ✅ ok | All rows returned; projected £537.57/month |
`lastSyncAt` reads 2026-09-16T15:25:00Z — identical to what the 17 September briefing already reported. No sync has landed since, spanning the missed 18 September run and today. The £27,619 reported-spend reconciliation first raised 12 September is still open regardless, but the more immediate question is whether the pipeline itself has stalled again rather than just sitting on unreconciled figures.
The Sep 15 auth-burst cluster had sat completely unactioned for four straight briefings (16→17→flat at 10). Today it reads 9 — the eight original "Not authenticated" issues plus one "Client disconnected" issue, one fewer than before. It's a small move and most of the cluster is still open, but it's the first sign anything has been touched since the incident.
Revenue confirms £0 (expected pre-launch) with `ok: true`, and `subscriptions_new` also reports cleanly. Closes the concern raised by 17 September's Action Item 4.
1. Fix the `/api/snapshot/all` timeout — Marketing, User Behaviour and Engineering have had no data for two briefing cycles running (yesterday's didn't run at all)
Two angles worth pursuing separately: (a) why PostHog live HogQL queries are hanging past 60s today specifically — check whether the per-campaign visitor probe that landed 15 September (DEV-2546) has pushed query cost or count past what the 2-concurrent limiter can clear in time; (b) give Engineering (Linear) its own `/api/snapshot/engineering` route so a PostHog hang can't take down data that has nothing to do with PostHog.
→ Marketing · Engineering · `apps/cockpit/src/lib/snapshot.ts`
2. Investigate whether the BigQuery population sync has genuinely stalled again — `lastSyncAt` frozen at 16 September 15:25 UTC for a third calendar day
The £27,619 reported-spend reconciliation first raised 12 September is still open on top of this. Given the sync already froze for ~112 hours once this month (10–15 September), a repeat pattern is worth checking rather than assuming it's a coincidence.
3. Re-wire Meta/Google Ad Spend credentials — last confirmed still unset as of 17 September (day 12); unverified today since Marketing didn't load
`META_ACCESS_TOKEN`/`META_AD_ACCOUNT_ID` and the Google Ads credential set were still missing at last read. Can't confirm today's paid-traffic visit count without the Marketing tab.
4. Confirm whether the Sep 15 12:02:20 UTC auth-error burst is actually being worked, now that the unresolved count has moved for the first time
9 of the original cluster are still open. Worth checking whether today's drop from 10 to 9 was a deliberate triage action or an unrelated issue closing — the original ask (check deploy history and Clerk status around that timestamp) still hasn't been confirmed as done.
| Surface | Metric | Value | vs Prior (17 Sep) |
|---|---|---|---|
| Mobile | Crash-free sessions (7d) | 100% | 100% |
| Mobile | Sessions (7d) | 14 | 14 (flat) |
| Mobile | Sentry events (7d) | 3 | 3 (flat) |
| Mobile | Unresolved issues | 1 | 1 |
| Web | Sentry events (7d) | 12 | 11 (+9%) |
| Web | Unresolved issues | 1 | 1 |
| Web | Crash-free users (7d) | 0% | not previously tracked — see Watch |
| Backend | Sentry events (7d) | 24 | 24 (flat) |
| Backend | Unresolved issues | 9 | 10 (−1, see Win 1) |
| Marketing | — | no data | endpoint timeout, see Anomaly 1 |
| User Behaviour | — | no data | endpoint timeout, see Anomaly 1 |
| Engineering | — | no data | endpoint timeout, see Anomaly 1 |
| Population | Total users | 21 | 21 (flat) |
| Population | Reported spend (app) | £27,619 | £27,619 (unchanged, see Anomaly 2) |
| Population | Last sync | 2026-09-16T15:25:00Z | same (see Anomaly 2) |
| Monetisation | MRR | £0 | £0 |
| Monetisation | Revenue pull | ok | 429 error (see Win 2) |
| CCI | Drift queue | 0 pending | 0 pending |
| Spend | Total monthly (projected) | £539.62 | £545.15 (−1.0%) |
| Spend | Vercel builds (projected) | £44.77 | £50.20 (−10.8%) |
| Source | Status | Notes |
|---|---|---|
| Cockpit snapshot endpoint (`/api/snapshot/all`) | 🔴 error | Two consecutive 504 FUNCTION_INVOCATION_TIMEOUT at 60s; this briefing assembled from individual tab endpoints instead |
| Sentry (mobile, web, backend) | ✅ ok | All three projects returned; see Win 1 and Watch (web crash-free users) |
| Axiom | ✅ ok | Call volumes returned normally |
| PostHog (Marketing, User Behaviour tabs) | 🔴 timeout | Both endpoints hit the 60s function limit live; the separately-computed rollup (05:34 UTC) is unaffected and fast, so this is a live-query issue, not a full outage |
| GSC | ⚠️ unavailable | Bundled with the Marketing tab, which timed out |
| MailerLite | ⚠️ unavailable | Bundled with the Marketing tab, which timed out |
| Ad Spend (Meta/Google) | ⚠️ unavailable | Bundled with the Marketing tab, which timed out; last confirmed status still "not configured" |
| Adapty | ✅ ok | Revenue confirmed £0, `ok: true` — clears yesterday's-equivalent 429 |
| Linear (Engineering) | 🔴 unavailable | No dedicated endpoint exists; only reachable via `/api/snapshot/all`, which timed out — see Action Item 1 |
| BigQuery (Population) | ✅ ok (data stale) | Returned successfully but `lastSyncAt` hasn't moved since 16 Sept — see Anomaly 2 |
| Convex (CCI) | ✅ ok | Drift queue empty, all maintenance crons report `success` |
| Spend | ✅ ok | All rows returned; projected £539.62/month |
| Rollup (widget-data cross-check) | ✅ ok | Computed 05:34 UTC today; signupsToday: 0, mrr: £0, crashFreeRate: 100%, driftPending: 0 — consistent with live reads |
Snapshot fetched at 06:11 UTC, single request, no timeout. Prior briefings: Sep 16 (anomaly_count: 2, action_count: 4), Sep 15 (anomaly_count: 3, action_count: 4), Sep 14 (anomaly_count: 3, action_count: 3).
No new burst today (events_7d eases to 24 from 25, consistent with the cluster ageing rather than growing), but none of the eight "Not authenticated" issues from the 15 September 12:02:20 UTC incident have been resolved or investigated. Yesterday's Action Item 1 asked for a check against deploy history and Clerk status around that timestamp — that hasn't happened yet, so the same ten issues are still sitting open.
The run that climbed 166 → 174 → 181 → 184 → 186 over five briefings (Sep 10–16) breaks today. Completion also rises to 63 (prior: 55, +15%), so the drop reads as a genuine throughput catch-up rather than a triage relabelling that would leave completion flat.
Position moves 28.36 → 26 → 24.98 over three briefings. Impressions rise to 803 (prior: 747, +7.5%) and clicks hold steady at 6 — a broader-based improvement than a single day's noise would produce.
Sessions have climbed 2 → 6 → 12 → 14 across the last four briefings. Crash-free sessions and users both stay at 100%, so this continues to read as real usage growth rather than a stability regression.
1. Investigate the Sep 15 12:02:20 UTC auth-error burst before it recurs — now the second briefing running unactioned, backend unresolved issues still at 10
Check deploy history and Clerk status around that exact timestamp. No new events landed today, so the cluster isn't spreading, but nothing has been triaged either.
→ App Health · Sentry 128651664
2. Complete the £27,619 BigQuery population-spend reconciliation — the sync has now run successfully twice (Sep 15, Sep 16) without the figure moving
First raised Sep 12. Confirm whether £27,619 is genuinely settled or the reconciliation against Convex source data still hasn't happened.
3. Re-wire Meta/Google Ad Spend credentials — paid traffic hit 209 visits on Sep 16 (12 more by 06:11 UTC Sep 17) with zero cost visibility, now day 12 unconfigured
`META_ACCESS_TOKEN`/`META_AD_ACCOUNT_ID` and the Google Ads credential set remain unset.
4. Confirm the Adapty 429 rate-limit this run was a one-off, not a recurring quota problem that will keep MRR/revenue metrics silently `ok: false`
| Surface | Metric | Value | vs Prior (Sep 16) |
|---|---|---|---|
| Mobile | Crash-free sessions (7d) | 100% | 100% |
| Mobile | Sessions (7d) | 14 | 12 (+17%, see Win 3) |
| Mobile | Sentry events (7d) | 3 | 3 (flat) |
| Mobile | Unresolved issues | 1 | 1 |
| Source | Status | Notes |
|---|---|---|
| Cockpit snapshot endpoint | ✅ ok | Single request succeeded, 06:11 UTC, no timeout |
| Sentry (mobile, web, backend) | ✅ ok | All three projects returned data — see Anomaly 1 for backend |
| PostHog | ✅ ok | Marketing + user behaviour data returned |
| GSC | ✅ ok | 6 clicks; 803 impressions; avg position 24.98 (window 2026-09-09 to 2026-09-15) |
Snapshot fetched at 06:14 UTC, single request, no timeout. Prior briefings: Sep 15 (anomaly_count: 3, action_count: 4), Sep 14 (anomaly_count: 3, action_count: 3), Sep 13 (anomaly_count: 3, action_count: 4).
`unresolved_count` on backend has held flat at 2 for the last several briefings; today it's 10. Eight of those ten issues share the identical `last_seen` timestamp of 2026-09-15T12:02:20Z — a pattern that points to a single incident (a deploy, a Clerk hiccup, an env var or secret rotation) briefly breaking authentication across many different Convex call sites at once, rather than eight unrelated bugs. Those eight issues alone account for 23 of the 25 backend events in the last 7 days, and the day's event count (23 on Sep 15, versus 0-1 on every day since Sep 10) confirms this was a single-day spike, not a gradual drift.
The run now reads 166 → 174 → 181 → 184 → 186 across five days, with the reconciliation ask (first raised Sep 12, repeated on Sep 13, 14 and 15) still not actioned. Today does bring the first break in the pattern that made Sep 15's reading look most concerning: completed_last_7d rises to 55 (prior: 53), rather than continuing to fall. That's a small positive signal against "pure throughput collapse" as the explanation, but four consecutive days of net accumulation is still unaddressed.
`lastSyncAt` moves for the first time since the Sep 10 catch-up, now reading 2026-09-15T15:12:58Z. The headline numbers (21 users, £27,619 reported spend) haven't changed yet, so the reconciliation question from Sep 12 isn't fully closed — but the pipeline itself is confirmed running again, which is the precondition for trusting any population number going forward.
Following Sep 15's jump to 6 (from a long-held 2), mobile sessions_7d doubles again to 12. Crash-free sessions and users both stay at 100%, so the growth reads as genuine increased usage rather than a stability regression.
COD-4486 fixes a case where an empty events array from a slow or interrupted sync was being read as "every calendar entity deleted", silently removing a user's Honely-synced iOS calendar entries. Landed alongside three other mobile date-handling fixes today (COD-4488, COD-4492, COD-4494), continuing the recurring-bug-class sibling-sweep discipline.
1. Investigate the Sep 15 12:02:20 UTC auth-error burst before it recurs — 8 distinct "Not authenticated" Convex errors fired simultaneously, driving backend unresolved issues from 2 to 10
Check deploy history and Clerk status around that exact timestamp; the shared `last_seen` across eight otherwise-unrelated issue IDs is the strongest signal that this was one incident, not eight separate bugs.
→ App Health · Sentry 128651664
2. Make a triage call on the four-day COD high-priority climb (166 → 174 → 181 → 184 → 186) — now that completion has ticked up rather than fallen, confirm whether this is capacity, a triage relabelling, or genuine intake growth
Five briefings running without a call on this.
3. Confirm the BigQuery sync resumption is durable and complete the £27,619 population-spend reconciliation now that fresh data is flowing again
The sync moved for the first time in 112 hours, but the reconciliation ask itself (first raised Sep 12) is still open — the headline numbers haven't changed, so it isn't clear yet whether the resumed sync brought fresh, reconciled figures or just re-ran against stale source data.
4. Re-wire Meta/Google Ad Spend credentials — paid traffic hit 221 visits on Sep 15 (25 more by 06:14 UTC Sep 16) with zero cost visibility, now day 11 unconfigured
`META_ACCESS_TOKEN`/`META_AD_ACCOUNT_ID` and the Google Ads credential set remain unset.
| Surface | Metric | Value | vs Prior (Sep 15) |
|---|---|---|---|
| Mobile | Crash-free sessions (7d) | 100% | 100% |
| Mobile | Sessions (7d) | 12 | 6 (+100%, see Win 2) |
| Mobile | Sentry events (7d) | 3 | 2 (+50%) |
| Mobile | Unresolved issues | 1 | 1 |
| Source | Status | Notes |
|---|---|---|
| Cockpit snapshot endpoint | ✅ ok | Single request succeeded, 06:14 UTC, no timeout |
| Sentry (mobile, web, backend) | ✅ ok | All three projects returned data — see Anomaly 1 for backend |
| PostHog | ✅ ok | Marketing + user behaviour data returned |
| GSC | ✅ ok | 6 clicks; 747 impressions; avg position 26 (window 2026-09-08 to 2026-09-14) |
| Web | Sentry events (7d) | 11 | 10 (+10%) |
| Web | Unresolved issues | 1 | 1 |
| Backend | Sentry events (7d) | 24 | 25 (−4%) |
| Backend | Unresolved issues | 10 | 10 (flat, see Anomaly 1) |
| Marketing | Web pageviews (7d) | 1,161 | 1,172 (−1%) |
| Marketing | Unique visitors (7d) | 525 | 524 (flat) |
| Marketing | GSC clicks (7d) | 6 | 6 (flat) |
| Marketing | GSC impressions (7d) | 803 | 747 (+7.5%) |
| Marketing | Avg position | 24.98 | 26 (improving, see Win 2) |
| Marketing | Email subscribers | 10 | 10 (unchanged) |
| Engineering | COD backlog | 200 (capped) | 200 (capped) |
| Engineering | Completed 7d | 63 | 55 (+15%, see Win 1) |
| Engineering | DEV in-flight | 8 | 8 (flat) |
| Engineering | BET open | 26 | 26 (unchanged) |
| Engineering | High priority open | 173 | 186 (−13, see Win 1) |
| Population | Total users | 21 | 21 (flat) |
| Population | Reported spend (app) | £27,619 | £27,619 (unchanged, see Watch) |
| Monetisation | MRR | £0 | £0 |
| Spend | Total monthly (projected) | £545.15 | £548.00 (−0.5%) |
| Spend | Vercel builds (projected) | £50.20 | £52.97 (−5.2%) |
| MailerLite | ✅ ok | 10 subscribers; all automations still 0 subscribers |
| Adapty | ⚠️ error | 429 rate limit on the revenue pull this run — all metrics report `ok: false` this briefing, see Watch and Action Item 4 |
| Linear | ✅ ok | COD 200 (capped); DEV in-flight: 8; completed 7d: 63 |
| BigQuery (population) | ✅ ok | lastSyncAt 2026-09-16T15:25:00Z — second consecutive successful sync, but see Watch on the unreconciled spend figure |
| Axiom/Convex | ✅ ok | Call volumes returned; used as cross-check in recent briefings |
| Spend | ✅ ok | All rows returned; projected £545.15/month |
| CCI | ✅ ok | Drift queue empty; all maintenance crons report `success` |
| Ad Spend | ⚠️ not configured | META_ACCESS_TOKEN + META_AD_ACCOUNT_ID and Google Ads credentials still missing — see Action Item 3 |
| Web | Sentry events (7d) | 10 | 9 (+11%) |
| Web | Unresolved issues | 1 | 1 |
| Backend | Sentry events (7d) | 25 | 2 (+1,150%, see Anomaly 1) |
| Backend | Unresolved issues | 10 | 2 (+400%, see Anomaly 1) |
| Marketing | Web pageviews (7d) | 1,172 | 1,220 (−4%) |
| Marketing | Unique visitors (7d) | 524 | 529 (−1%) |
| Marketing | GSC clicks (7d) | 6 | 6 (flat) |
| Marketing | GSC impressions (7d) | 747 | 755 (−1%) |
| Marketing | Avg position | 26 | 28.36 (improving, see Watch) |
| Marketing | Email subscribers | 10 | 10 (unchanged) |
| Engineering | COD backlog | 200 (capped) | 200 (capped) |
| Engineering | Completed 7d | 55 | 53 (+4%, see Anomaly 2) |
| Engineering | DEV in-flight | 8 | 9 (−1) |
| Engineering | BET open | 26 | 26 (unchanged) |
| Engineering | High priority open | 186 | 184 (+2, see Anomaly 2) |
| Population | Total users | 21 | 21 (flat) |
| Population | Reported spend (app) | £27,619 | £27,619 (unchanged, see Win 1) |
| Monetisation | MRR | £0 | £0 |
| Spend | Total monthly (projected) | £548.00 | £546.74 (+0.2%) |
| Spend | Vercel builds (projected) | £52.97 | £51.75 (+2.4%) |
| MailerLite | ✅ ok | 10 subscribers; all automations still 0 subscribers |
| Adapty | ✅ ok | Revenue confirmed (£0); MRR/ARR/refund_events report `ok: true`, arpu/arppu/subscriptions_active/new/trialed/installs_to_paid/trial_to_paid still `ok: false` (expected pre-launch) |
| Linear | ✅ ok | COD 200 (capped); DEV in-flight: 8; completed 7d: 55 |
| BigQuery (population) | ✅ ok | lastSyncAt moved for the first time in 112 hours — see Win 1 |
| Axiom/Convex | ✅ ok | Call volumes returned; used as cross-check in recent briefings |
| Spend | ✅ ok | All rows returned; projected £548.00/month |
| CCI | ✅ ok | Drift queue empty; all maintenance crons report `success` |
| Ad Spend | ⚠️ not configured | META_ACCESS_TOKEN + META_AD_ACCOUNT_ID and Google Ads credentials still missing — see Action Item 4 |