{"id":5832,"plugin_id":"plugin_asdk_app_6a0faef988b48191b843bac5cd170a9e","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:46:42.086Z","digest":"a380e88e03a42d36f540917337e90be996bed1815df9137399160fd2a7194745","against":null,"payload":{"name":"check-updates","description":"Check the CURRENT Convex app's pinned components against the latest recommended versions and offer to upgrade them — e.g. the passkey auth component's new email-first sign-in. TRIGGER when the user runs /check-updates or $check-updates, asks 'are my components up to date', 'any updates', 'upgrade auth', 'upgrade my components', or wants the newest features after a quickstart. Applies each upgrade behind a build gate (verify-or-revert) with the user's consent.","included_files":[],"skill_md_contents":"---\nname: check-updates\ndescription: \"Check the CURRENT Convex app's pinned components against the latest recommended versions and offer to upgrade them — e.g. the passkey auth component's new email-first sign-in. TRIGGER when the user runs /check-updates or $check-updates, asks 'are my components up to date', 'any updates', 'upgrade auth', 'upgrade my components', or wants the newest features after a quickstart. Applies each upgrade behind a build gate (verify-or-revert) with the user's consent.\"\nlicense: Apache-2.0\n---\n\n# Check + apply component updates\n\nRun from the app's project root (where `package.json` lives — the `convex-app/`\nsubdir for a quickstart). Detect stale components against the anteater registry:\n\n```bash\ncurl -fsSL https://basic-anteater-667.convex.site/check-updates.mjs -o /tmp/cu.mjs && node /tmp/cu.mjs\n```\n\n- **`COMPONENTS_UP_TO_DATE`** → tell the user everything's current. Done.\n- **`COMPONENTS_STALE=<n>`** + a JSON array → for each entry, summarize for the user:\n  the component, `installed → current`, the `summary` (what's new), and whether it's\n  `breaking`. Then **ASK before changing anything** — \"Upgrade `<name>` to get\n  <summary>? [y/n]\". Never upgrade without an explicit yes.\n\nOn a yes, apply that entry's `migration`:\n1. **Install** the new ref (`migration.install`) with the project's package manager.\n2. **Apply `migration.steps` in order** — the call-site changes. Read the existing code\n   first; make the minimal change each step describes. Delegate any `convex/` edits to\n   the `convex-expert` skill/subagent.\n3. **GATE — verify or revert.** Run every command in `migration.gate` (e.g.\n   `pnpm exec tsc --noEmit`, `pnpm exec next build`). If ANY fails, **revert**\n   (`git checkout -- .`, or reinstall the old ref) and tell the user it didn't apply\n   cleanly — never leave the app half-migrated.\n4. **Smoke** — give the user the `migration.smoke` check to run (the runtime behavior the\n   build gate can't prove), e.g. register → sign out → sign in by the same email.\n\nRules:\n- **`breaking: true`** needs extra care: confirm explicitly, snapshot first (commit/branch),\n  and if the steps aren't mechanical, ask the user rather than guessing.\n- **Don't auto-publish.** If the app is already live on `*.convex.app` / a custom domain,\n  the upgrade only reaches the live site on re-publish — confirm before re-deploying\n  (no surprise downtime on a live domain).\n- One component at a time; gate each before the next.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}