mcpField
C
compat-review

compat-review

github.com/tossTesting & quality11.4k218 installsUpdated 2d ago
Repository

About compat-review

A review skill for checking whether es-toolkit compat-layer changes address real differences from Lodash. It builds comparison tests from a PR claim or function name, runs them before and after the change, and reports the results.

Key features

  1. 01Extracts PR claims and target functions
  2. 02Creates Lodash comparison tests
  3. 03Covers claimed cases and edge cases
  4. 04Checks behavior before and after a fix
  5. 05Produces a verification report

Use cases

  1. 01Verifying a compat-fix pull request
  2. 02Checking a named compat function against Lodash
  3. 03Detecting regressions in edge cases

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/toss/es-toolkit --skill compat-review

After installing, type/compat-reviewin Claude Code to confirm it loaded.

Details

From the project README

Compat Layer Review

Verify that a compat PR actually fixes a real lodash inconsistency.

Input

$ARGUMENTS — PR number (e.g. 1234) or function name (e.g. chunk)

Workflow

1. Identify target function and PR claims

PR number:

gh pr view {number} --repo toss/es-toolkit --json title,body,files

From the PR description and diff, extract:

  • Which compat function is being fixed
  • What inconsistency the contributor claims (expected vs actual behavior)
  • Any test examples the contributor provides

Function name: Read the function source and its spec to understand current behavior.

2. Build comparison test

Create a temporary vitest spec at src/compat/{category}/_compat-review-{fn}.spec.ts.

import { describe, expect, it } from 'vitest';
import { fn as compatFn } from 'es-toolkit/compat';
import { fn as lodashFn } from 'lodash';

Include two groups of test cases:

A. Contributor's claimed examples — Extract directly from the PR description or test diff. These are the cases the PR claims to fix.

B. ~10 additional edge cases you generate — Based on the function's signature and lodash's known behavior patterns:

  • Empty inputs: [], {}, '', 0
  • Nullish: null, undefined
  • Negative/zero/float numbers: -1, 0, 1.5, NaN, Infinity
  • Type coercion: string numbers ('3'), boolean, mixed types
  • Boundary: single-element arrays, very long strings, deeply nested objects
  • Pick cases that are relevant to the specific function

Each test:

it('description', () => {
  let lodashResult, compatResult;
  let lodashErr: any, compatErr: any;
  try {
    lodashResult = lodashFn(args);
  } catch (e) {
    lodashErr = e;
  }
  try {
    compatResult = compatFn(args);
  } catch (e) {
    compatErr = e;
  }

  if (lodashErr && compatErr) return; // both throw = consistent
  if (lodashErr || compatErr) {
    throw new Error(`Behavior mismatch: ${lodashErr ? 'lodash throws' : 'compat throws'}`);
  }
  expect(compatResult).toEqual(lodashResult);
});
3. Run comparison BEFORE the PR change
yarn vitest run src/compat/{category}/_compat-review-{fn}.spec.ts

Record which tests fail — these are real inconsistencies that exist on main.

4. Apply PR changes and re-run
gh pr diff {number} --repo toss/es-toolkit | git apply

Run the same test again. Confirm that:

  • The contributor's claimed examples now pass
  • The additional edge cases still pass (no regressions)

Revert after testing:

git checkout -- .
5. Clean up

Delete _compat-review-*.spec.ts.

6. Report
## {fn} — Compat Review

### PR Claim
{What the contributor says they're fixing}

### Verification (BEFORE fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|
| 1 | ...   | ...    | ...    | MISMATCH | PR example |
| 2 | ...   | ...    | ...    | MATCH    | Edge case |

### Verification (AFTER fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|

### Verdict
- [ ] PR claim is valid (inconsistency confirmed on main)
- [ ] Fix resolves the claimed inconsistency
- [ ] No regressions in edge cases
- [ ] Existing tests still pass

Comments

Markdown supported