From a2971a08f9369cf705150d2cbfd56d413c5f8447 Mon Sep 17 00:00:00 2001 From: Gagan Date: Mon, 20 Jul 2026 16:15:41 +0530 Subject: [PATCH] fix(x): grant first_app_built credit for copilot-built apps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reward only fired in the apps:create IPC handler, which no UI path invokes — the copilot builds apps by writing the folder directly, so the credit never triggered. Fire it from apps:list instead, off observed state: any valid non-installed (kind=local) app counts as built. Catalog installs (.rowboat-install.json present) don't count. --- apps/x/apps/main/src/ipc.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/x/apps/main/src/ipc.ts b/apps/x/apps/main/src/ipc.ts index 5c304604..2532755a 100644 --- a/apps/x/apps/main/src/ipc.ts +++ b/apps/x/apps/main/src/ipc.ts @@ -1814,6 +1814,13 @@ export function setupIpcHandlers() { lastAppsFingerprint = fingerprint; invalidateCopilotInstructionsCache(); } + // The copilot builds apps by writing the folder directly — apps:create is + // never on that path — so the first-app reward triggers off observed + // state instead: a valid non-installed app means the user built one. + // Cheap on repeat polls (maybeActivateCredit short-circuits once claimed). + if (apps.some((a) => a.kind === 'local' && a.status === 'ok')) { + void maybeActivateCredit('first_app_built'); + } return { serverRunning: status.running, ...(status.error ? { serverError: status.error } : {}),