{"id":47502,"library":"eslint-plugin-acture-migration","title":"eslint-plugin-acture-migration","description":"ESLint rules for acture strangler-fig migrations. v1.1.0 (stable). Ships TypeScript types. Provides two rules: `no-stale-wrap-mutation` flags public-API footguns and ensures `wrapMutation(...)` results are consumed, preventing silent graduation mistakes; `require-param-describe` enforces `.describe(...)` on command params for JSON Schema correctness. Peer dependency on ESLint >=9.0.0 (flat config). Conservative single-file detection reduces noise over cross-file analysis. Unlike generic ESLint plugins, this is purpose-built for the acture migration pattern and integrates with its `acture-migration` import path.","status":"active","version":"1.1.0","language":"javascript","source_language":"en","source_url":"https://github.com/thorwhalen/acture","tags":["javascript","eslint","eslintplugin","acture","migration","wrap-mutation","strangler-fig","typescript"],"install":[{"cmd":"npm install eslint-plugin-acture-migration","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-plugin-acture-migration","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-plugin-acture-migration","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"peer dependency – plugin requires ESLint 9+ flat config","package":"eslint","optional":false}],"imports":[{"note":"Requires ESLint 9 flat config — CommonJS require() works in Node, but ESLint 9 expects ESM. Use default import.","wrong":"const acture = require('eslint-plugin-acture-migration');","symbol":"default (plugin object)","correct":"import acture from 'eslint-plugin-acture-migration';"},{"note":"The plugin key is your choice; the rule prefix matches that key. The default import is the plugin object.","wrong":"const acture = require('eslint-plugin-acture-migration').default;","symbol":"plugin (default) in eslint.config.js","correct":"import acture from 'eslint-plugin-acture-migration';\nexport default [{ plugins: { acture }, rules: { 'acture/no-stale-wrap-mutation': 'warn' } }];"},{"note":"Recommended config enables both rules as warnings. No extra setup needed.","symbol":"recommended config","correct":"import acture from 'eslint-plugin-acture-migration';\nexport default [acture.configs.recommended];"}],"quickstart":{"code":"// eslint.config.js\nimport acture from 'eslint-plugin-acture-migration';\n\nexport default [\n  {\n    plugins: { acture },\n    rules: {\n      'acture/no-stale-wrap-mutation': 'warn',\n      'acture/require-param-describe': 'warn',\n    },\n  },\n];","lang":"typescript","description":"Shows flat config setup with both rules active as warnings, enabling migration and schema-quality checks."},"warnings":[{"fix":"Use named imports: `import { wrapMutation } from 'acture-migration'`","message":"Namespace imports like `import * as m from 'acture-migration'` are NOT tracked by `no-stale-wrap-mutation` — only named or aliased imports work.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Manually audit exported `wrapMutation` results that are never imported elsewhere.","message":"The rule only checks a single file — cross-file unused exports are not flagged, leading to false negatives.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Migrate to eslint.config.js flat config or use an older plugin version if on ESLint <9.","message":"ESLint version requirement: >=9.0.0 (flat config). Legacy `.eslintrc` format is not supported.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use `import acture from 'eslint-plugin-acture-migration'` then access `acture.rules` or `acture.configs.recommended`.","message":"The plugin object must be imported as default — attempting to destructure `{ rules }` will fail.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'9.0.0':59 'actur':4,9,85,93,100 'acture-migr':92 'analysi':73 'api':30 'built':82 'command':49 'config':61 'conserv':62 'consum':37 'correct':54 'cross':71 'cross-fil':70 'depend':56 'describ':45,47 'detect':66 'enforc':46 'ensur':33 'eslint':2,6,58,76,98 'eslint-plugin-acture-migr':1 'eslintplugin':99 'fig':12,107 'file':65,72 'flag':27 'flat':60 'footgun':31 'generic':75 'graduat':40 'import':95 'integr':89 'javascript':97 'json':52 'migrat':5,13,86,94,101 'mistak':41 'mutat':26,104 'no-stale-wrap-mut':22 'nois':68 'param':44,50 'path':96 'pattern':87 'peer':55 'plugin':3,77 'prevent':38 'provid':19 'public':29 'public-api':28 'purpos':81 'purpose-built':80 'reduc':67 'requir':43 'require-param-describ':42 'result':35 'rule':7,21 'schema':53 'ship':16 'silent':39 'singl':64 'single-fil':63 'stabl':15 'stale':24 'strangler':11,106 'strangler-fig':10,105 'two':20 'type':18 'typescript':17,108 'unlik':74 'v1.1.0':14 'wrap':25,103 'wrap-mut':102 'wrapmut':34","created_at":"2026-06-07T16:51:50.776100+00:00","updated_at":"2026-06-07T16:51:50.776100+00:00","problems":[{"fix":"Run `npm install --save-dev eslint-plugin-acture-migration`. Also verify flat config path resolution.","cause":"Plugin not installed or not in node_modules.","error":"ESLint couldn't find the plugin 'eslint-plugin-acture-migration'."},{"fix":"Use `import acture from 'eslint-plugin-acture-migration'` then `acture.configs.recommended`.","cause":"Importing the plugin incorrectly (e.g., destructured or wrong path).","error":"TypeError: Cannot read properties of undefined (reading 'recommended')"},{"fix":"Ensure the plugin key in `plugins: { myCustomKey: acture }` is arbitrary but the rule prefix matches: `'myCustomKey/no-stale-wrap-mutation'`.","cause":"ESLint config referencing a plugin key that doesn't match the package name.","error":"Error: Failed to load plugin 'acture': Cannot find module 'eslint-plugin-acture-migration'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/thorwhalen/acture#readme","github":"https://github.com/thorwhalen/acture","docs":null,"changelog":null,"pypi":null,"npm":"eslint-plugin-acture-migration","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops","testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}