--- description: Repair an unreleased `.changeset/*.md` file so it matches the real branch delta against `main`. Use when a changeset was edited iteratively during debugging, when bullets may reflect turn-by-turn history instead of `main...HEAD`, when "removed/gone/renamed" claims need proof, or when you need to audit whether a changeset is actually lossless before commit. name: changeset-resolve metadata: skiller: source: .agents/rules/changeset-resolve.mdc --- # Changeset Resolve Use the companion `changeset` skill for structure and versioning. This skill owns the diff audit and the bullshit detector pass. ## Goal Rewrite the active unreleased changeset so it describes the package-level, user-facing branch delta against `main`, not the local iteration history. ## Hard Rules - Diff against `main...HEAD`. Never diff against the current changeset draft. - Reuse the existing unreleased changeset file. Do not create another one. - Keep the release surface package-first: - `packages/kitcn` - `packages/resend` - root and `example` manifests/scripts when user-facing - docs only when they reveal public API shape - Ignore repo noise unless it changes real user behavior: - `.claude` - `.agents` - tests - internal tooling churn - If a bullet says something is gone, removed, renamed, or replaced, prove the old surface existed on `main` first. - If it did not exist on `main`, it is not a breaking change. Rewrite it as a feature or delete it. - Do not call a changeset lossless unless you actually audited the package surface. If unsure, say so. ## Mandatory Sequence 1. Resolve the active changeset: - list `.changeset/*.md` excluding `.changeset/README.md` - reuse the existing unreleased file 2. Audit the real branch delta against `main`: ```bash git diff --stat main...HEAD -- packages/kitcn packages/resend package.json example/package.json www/content/docs git diff --name-only main...HEAD -- packages/kitcn packages/resend package.json example/package.json www/content/docs git diff main...HEAD -- packages/kitcn/package.json packages/resend/package.json package.json example/package.json ``` 3. Audit the likely-missed public seams: - package `exports` - package `bin` - package `files` - peer dependency/support matrix - new packages - public CLI commands and flags 4. Prove every breaking bullet: ```bash git show main:packages/kitcn/package.json git show main:packages/kitcn/src/cli/config.ts git grep -n "claim-you-are-making" main -- packages/kitcn packages/resend www/content/docs example ``` 5. Classify honestly: - existed on `main` and changed incompatibly: `## Breaking changes` - new user-facing capability: `## Features` - same surface, better behavior or safer output: `## Patches` - test-only, docs-only, or internal churn: omit 6. Rewrite from scratch: - keep `## Breaking changes`, `## Features`, `## Patches` - user-facing only - no file paths - no implementation gossip 7. Run one final anti-lie pass: - re-check every breaking snippet against `main` and `HEAD` - scan manifests/exports one more time - if something still smells off, say it is not fully lossless yet ## Sanity Heuristics - New command on this branch only: feature, not deprecation. - New package on this branch only: feature. - Tightened peer dependency support matrix: usually breaking. - Moved import paths with old path removed: breaking. - Renamed flag with old flag removed: breaking. - Scenario/fixture proof improvements: patch only if users feel it. - Docs sync alone: omit unless it reveals a real new surface. ## Exit Gate Before done, run: ```bash bun lint:fix ```