--- description: Audit newer Convex npm releases against kitcn. Use when checking whether a newer `convex` version unlocks kitcn improvements, compatibility work, CLI/agent workflows, or cleanup of local Convex hacks. Reads `https://ship.convex.dev/`, the upstream Convex changelog, and GitHub diffs before delegating an implementation PR through `task`. name: convex-release-audit metadata: skiller: source: .agents/rules/convex-release-audit.mdc --- # Convex Release Audit Handle $ARGUMENTS. Goal: find newer Convex releases, extract work kitcn can actually use, then delegate one concrete implementation slice to [$task](/Users/zbeyens/git/better-convex/.agents/skills/task/SKILL.md) so it opens the PR. ## Goal Template When this audit needs durable goal state, use the project-owned Convex release audit template instead of the generic task template: ```bash node .agents/skills/autogoal/scripts/create-goal-scratchpad.mjs \ --template convex-release-audit \ --title "convex release audit" ``` This plan owns version discovery, changelog reconciliation, upstream diff evidence, kitcn leverage classification, the selected slice or no-action verdict, and the delegated task prompt. Implementation still goes through `task`; do not duplicate implementation PR machinery inside the release-audit plan. ## Rules - Use evidence, not vibes. Read both changelog sources and a diff. - Prefer deleting kitcn glue over adding more glue when upstream fixed the real problem. - Do not upgrade Convex just because a newer version exists. Ship only a leverageable improvement. - Keep the PR slice coherent. One release opportunity per PR unless multiple fixes share the same implementation boundary. - If no actionable opportunity exists, stop with the evidence. Do not open a vanity PR. ## 1. Establish Current And Target Versions Find the currently pinned Convex version: ```bash rg -n '"convex":' package.json packages/**/package.json example/package.json ``` Find the latest published version: ```bash npm view convex version --json ``` If $ARGUMENTS names a target version, use it as the upper bound. Otherwise use the latest npm version. Record: - current pinned version - target version - every version in the current-exclusive, target-inclusive range - exact package files that pin or constrain Convex ## 2. Read Both Changelogs Read Ship: ```bash curl -sL https://ship.convex.dev/ ``` Read the upstream npm package changelog through `gh`, not browser scraping: ```bash gh api \ -H "Accept: application/vnd.github.raw" \ repos/get-convex/convex-backend/contents/npm-packages/convex/CHANGELOG.md ``` Extract only the sections in range. Reconcile disagreements: - Ship is product-facing signal. - `npm-packages/convex/CHANGELOG.md` is package-facing signal. - If they disagree, keep both facts and investigate in the diff. ## 3. Read The Upstream Diff With `gh` Use a local upstream clone for navigation, creating it only if missing: ```bash test -d ../convex-backend/.git || gh repo clone get-convex/convex-backend ../convex-backend git -C ../convex-backend fetch origin main --tags ``` Find refs for the current and target versions. Prefer tags if they exist: ```bash git -C ../convex-backend tag -l "**" | sort git -C ../convex-backend log --all --oneline -- npm-packages/convex/package.json ``` If tags are unclear, inspect version-bump commits in `npm-packages/convex/package.json` and use the commit before/after each version bump. Read the compare through `gh`: ```bash gh api \ repos/get-convex/convex-backend/compare/... \ --jq '.files[] | select(.filename | test("npm-packages/convex|cli|agent|dev|auth|codegen|deployment|function|schema")) | {filename,status,patch}' ``` If the compare is too large, narrow locally after proving the refs: ```bash git -C ../convex-backend diff .. -- \ npm-packages/convex ``` ## 4. Search Kitcn For Leverage Search for local Convex integration points and hacks: ```bash rg -n "CONVEX_AGENT_MODE|local-force-upgrade|skip-push|typecheck disable|codegen disable|convex dev|convex init|convex run|CONVEX_|Convex" \ packages www .agents docs test ``` Also search institutional notes before proposing work: ```bash rg -i --files-with-matches "convex|upgrade|agent|cli|dev|bootstrap|verify" docs/solutions ``` Read relevant hits, especially notes about: - local backend upgrade prompts - anonymous or non-interactive Convex setup - `kitcn dev`, `kitcn verify`, `kitcn init` - hidden Convex flags or leaked upstream plumbing - docs/skill sync for Convex setup guidance ## 5. Classify Opportunities For each release item, classify it: - `feature`: new Convex API, CLI command, runtime behavior, or platform feature kitcn can expose. - `compatibility`: required work to keep kitcn working with the new version. - `agentic`: upstream change that improves non-interactive, deterministic, or machine-readable flows. - `cleanup`: upstream change that lets kitcn delete a workaround, hidden flag, fake prompt handling, fallback path, or doc warning. - `no-op`: interesting upstream change with no kitcn action. For every non-`no-op`, include: - changelog evidence - diff evidence - kitcn file(s) affected - expected implementation boundary - verification command(s) - confidence Bias toward `agentic` and `cleanup`; kitcn exists to make Convex sharper for humans and agents, not to mirror every upstream bullet. ## 6. Choose One PR Slice Pick the highest-leverage slice using this order: 1. compatibility breakage 2. delete dirty hack made obsolete upstream 3. agentic CLI unlock 4. product feature kitcn can expose cleanly 5. docs or skill-only update If the winning slice touches published package code, the delegated task must update the active changeset and run `bun --cwd packages/kitcn build`. If it touches scaffold templates, the delegated task must run `bun run fixtures:sync` and `bun run fixtures:check`. ## 7. Delegate Through `task` Load [$task](/Users/zbeyens/git/better-convex/.agents/skills/task/SKILL.md) with a prompt in this exact shape: ```md Implement this Convex release opportunity. Current Convex: Target Convex: Opportunity: Class: Evidence: - Ship changelog: - Convex changelog: - Upstream diff: - Kitcn evidence: Implementation: - - Acceptance: - - - - open the PR after verification Do not preserve obsolete Convex workarounds if the upstream release removes the need for them. Hard cut the hack. ``` Then follow `task` until the PR exists or a real blocker is proven. ## Output Before delegation, keep the audit terse: ```md Current: Target: | Class | Opportunity | Evidence | Decision | | --- | --- | --- | --- | | cleanup | ... | ... | selected | Delegating to task: ``` After `task` finishes, use its final handoff format.