1/** 2 * Signup Attribution â RETIRED 2026-08-30 (LAT-2642). This file is now a no-op. 3 * 4 * WHAT IT USED TO DO 5 * It read `data-signup-source` off signup CTAs and stashed the label, the GA 6 * client id, the landing path and the UTM set into `mcp_attr_*` first-party 7 * cookies on `.mcpanalytics.ai`. Its own header named the consumer: "the webapp 8 * JWT callback in auth.ts", which persisted them to webapp.UserAttribution. 9 * 10 * WHY IT IS GONE 11 * The webapp was decommissioned on 2026-07-06 (LAT-1174). Nothing has read 12 * those cookies since. Verified 2026-08-30 across all three repos: 13 * 14 * grep -rn "mcp_attr" mcpanalytics-operations/ api-mcp-prod/ dev-generator-vm/ 15 * 16 * returned this file and nothing else. The only cookie reads left server-side 17 * are WIDGET_COOKIE_NAME (mcp_orchestrated.py:2094, widget_chat.py:192). So the 18 * 14 CTA labels on the homepage â ds-email, hero-demo, band-trial and the rest â 19 * were written into the browser and died there, for two months. 20 * 21 * It also carried two dead branches from that decommission: `decorateUrl` was 22 * only reachable behind 23 * link.href.indexOf('account.mcpanalytics.ai (legacy webapp signup, retired)') 24 * a find-and-replace that ate a domain literal into prose, so the comparison 25 * could never match. 26 * 27 * WHERE ATTRIBUTION LIVES NOW 28 * `js/mcp-analytics.js` â `_clickDescriptor` reads `data-signup-source` and 29 * ships it as `properties.src` on the click event that already fires for every 30 * CTA. It lands in `analytics.events` alongside visitor_id, session_id and the 31 * utm_* columns the collector was already capturing on its own (see the utm 32 * handling at mcp-analytics.js:198). No cookie, no round-trip, no second 33 * consumer to keep alive. 34 * 35 * SELECT properties->>'src' AS cta, count(*), count(DISTINCT visitor_id) 36 * FROM analytics.events 37 * WHERE event_name='click' AND properties ? 'src' 38 * AND server_ts > now() - interval '24 hours' 39 * GROUP BY 1 ORDER BY 2 DESC; 40 * 41 * WHY THIS FILE STILL EXISTS AT ALL 42 * Several pages still <script src> it. Emptying it is a strictly smaller change 43 * than editing every page that references it, and it leaves this explanation 44 * where the next person looking for signup attribution will actually stand. 45 * Deleting the file and its script tags is fine follow-up work; it is not 46 * required for correctness. 47 * 48 * Decision: `it`, 2026-08-30 â "emit the landmark, drop the cookie path", 49 * explicitly NOT a new column on mcp.users, because signup_source is a CHANNEL 50 * field (LAT-1531: web / mcp / mcp_m2m) and overloading it would break the one 51 * attribution field that is currently correct. 52 */ 53(function () { 54 'use strict'; 55 // Intentionally empty. See the header above before adding anything here. 56})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.