{"_id":"@autotelic/plumb","_rev":"6-deb68bdf6b4ee74061715a87d8be743b","name":"@autotelic/plumb","dist-tags":{"latest":"0.6.0"},"versions":{"0.3.1":{"name":"@autotelic/plumb","version":"0.3.1","license":"MIT","_id":"@autotelic/plumb@0.3.1","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"dist":{"shasum":"f0a7f3e2bfaab37ec43c525bb73e53f41624cdcd","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.3.1.tgz","fileCount":94,"integrity":"sha512-vRMzid7d8r9z1UAwiOk77NRt0EziVP6OQZUvPpuhLQUxHA63zA5ZhQidN5HqMwONUolOttsH746KEXaOYmtn3Q==","signatures":[{"sig":"MEUCIQCt4y8c+JVYnMqxZTPQYeKqqAA1CiggXpQUrDXng7AGkAIgCPajTvl0Km7kLxOGeeZBfXcBPQ0VbOeQZ5FIcW7ZHVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307620},"type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.ts","./meta":"./src/meta/index.ts","./effect":"./src/effect/index.ts","./testing":"./src/testing/index.ts"},"gitHead":"d2396141f894faaf4cfdfd11f3b85481aacd5e12","scripts":{"lint":"oxlint src","test":"vitest run --passWithNoTests","check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","typecheck":"tsc --noEmit","check:config":"node scripts/check-config.mjs","check:rule-tests":"node scripts/check-rule-tests.mjs"},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"_npmVersion":"11.17.0","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@oxlint/plugins":"1.79.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"oxlint":"1.79.0","vitest":"^4.1.11","fast-check":"^4.9.0","typescript":"5.9.3","@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/plumb_0.3.1_1787603151169_0.8963542044646182","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@autotelic/plumb","version":"0.3.2","license":"MIT","_id":"@autotelic/plumb@0.3.2","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"dist":{"shasum":"3589c598b8571b6dbcc843a47cdfbc3f6b83d719","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.3.2.tgz","fileCount":183,"integrity":"sha512-a4a4CLSROVoTfyWM92Hnyz5eROLbruYHNtBVlg7Wdx6QBh87arkvw41zyNVefOfI9E7YU9sOjB+dVy87Nuqaog==","signatures":[{"sig":"MEUCIQCgDKlN6LzSI0tVZgm62FBq2zjEvArhAUjap3e8pMfuQgIgXRnUGkf6DXUrcEz9tAP+nXXSjOKu/nWIaLf8bOK/Udw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":360076},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.js","./meta":"./dist/meta/index.js","./effect":"./dist/effect/index.js","./testing":"./dist/testing/index.js"},"gitHead":"c3bcdedd7ef3c3bda356884bd0d657393cbfe938","scripts":{"lint":"oxlint src","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","typecheck":"tsc --noEmit","check:config":"node scripts/check-config.mjs","check:rule-tests":"node scripts/check-rule-tests.mjs"},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"_npmVersion":"11.17.0","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@oxlint/plugins":"1.79.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"oxlint":"1.79.0","vitest":"^4.1.11","fast-check":"^4.9.0","typescript":"5.9.3","@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/plumb_0.3.2_1787604079748_0.6415885872834712","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@autotelic/plumb","version":"0.4.0","license":"MIT","_id":"@autotelic/plumb@0.4.0","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"dist":{"shasum":"1f44e622b06b3fbd483f0913535d9f2e8fb523f3","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.4.0.tgz","fileCount":185,"integrity":"sha512-87hxCVVhpBY/BaTYLREBO6C+orCZ8bOVtdv5DtTD5kBUqckMu7BWlvkFSaoP7h5SsbKc6bnfYDXeMjlkwjCUzA==","signatures":[{"sig":"MEQCIFfVmblxmhwqM/uVpbz7DD2zHx18fqvx0RHXgO3Hc4hfAiBuKfXDLObBKvdUHF+5+iZ2FiXXgMTjY9OQcZDkN86mMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372331},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.js","./meta":"./dist/meta/index.js","./effect":"./dist/effect/index.js","./testing":"./dist/testing/index.js"},"gitHead":"fc90343dda6e3baa1a185479ce075c04854e6288","scripts":{"lint":"oxlint src","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","typecheck":"tsc --noEmit","check:config":"node scripts/check-config.mjs","check:rule-tests":"node scripts/check-rule-tests.mjs"},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"_npmVersion":"10.9.8","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@oxlint/plugins":"1.79.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"oxlint":"1.79.0","vitest":"^4.1.11","fast-check":"^4.9.0","typescript":"5.9.3","@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/plumb_0.4.0_1787766039201_0.29967285692821544","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@autotelic/plumb","version":"0.5.0","license":"MIT","_id":"@autotelic/plumb@0.5.0","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"dist":{"shasum":"60f85247ad58841dd0d97a49ac784b5a2e567970","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.5.0.tgz","fileCount":195,"integrity":"sha512-SJXA0wiuC+/IxLxG5/2vUrsiyTeVBOJC7x+gyZcCI7y4tS0j+qxj5G/sECbGGdf9O0wxFYiywfUf6Per6e/tvQ==","signatures":[{"sig":"MEYCIQDc0ojDXR3lb/j0TJU+c9FTBadMH0XRsesfilAJxazxaQIhAMkB5gIdC7teBZxVNLE2LXnSbzBe1viY+L5etp8Rdwsv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400234},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.js","./meta":"./dist/meta/index.js","./react":"./dist/react/index.js","./effect":"./dist/effect/index.js","./testing":"./dist/testing/index.js"},"gitHead":"0870534253ef1cc82d21923e8e5035c39451104f","scripts":{"lint":"oxlint src","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","typecheck":"tsc --noEmit","check:config":"node scripts/check-config.mjs","check:rule-tests":"node scripts/check-rule-tests.mjs"},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"_npmVersion":"10.9.8","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@oxlint/plugins":"1.79.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"oxlint":"1.79.0","vitest":"^4.1.11","fast-check":"^4.9.0","typescript":"5.9.3","@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/plumb_0.5.0_1787769704993_0.851094632620534","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@autotelic/plumb","version":"0.5.2","license":"MIT","_id":"@autotelic/plumb@0.5.2","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"dist":{"shasum":"55f4483aadb683220e4619dd503fbd24d650e192","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.5.2.tgz","fileCount":197,"integrity":"sha512-aqY2t8EsnCCa8AHx4bXRzqIlCYFM4x60kGRfoHqNr6isme+J5++1Edr3S6jVAtnJHPbWJf9rwBLXwV5KwrnMeg==","signatures":[{"sig":"MEUCIQChsoJQKPbwWtmB9ey25FwBadY4LnrZViIAWMb7AfsU4wIgNmv2OyxXvAIRCnA/g2IdOH22LtBM6qfvqiKSmIBSG4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403877},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.js","./meta":"./dist/meta/index.js","./react":"./dist/react/index.js","./effect":"./dist/effect/index.js","./testing":"./dist/testing/index.js"},"gitHead":"2b388bf560eb8cd3d247d06da06a75fcbb3ecfe2","scripts":{"lint":"oxlint src","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","typecheck":"tsc --noEmit","check:config":"node scripts/check-config.mjs","check:rule-tests":"node scripts/check-rule-tests.mjs"},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"_npmVersion":"11.17.0","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@oxlint/plugins":"1.79.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"oxlint":"1.79.0","vitest":"^4.1.11","fast-check":"^4.9.0","typescript":"5.9.3","@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/plumb_0.5.2_1787774564475_0.958467933947116","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@autotelic/plumb","version":"0.6.0","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","license":"MIT","publishConfig":{"access":"public"},"type":"module","exports":{".":"./dist/index.js","./effect":"./dist/effect/index.js","./meta":"./dist/meta/index.js","./testing":"./dist/testing/index.js","./react":"./dist/react/index.js"},"scripts":{"check":"pnpm lint && pnpm typecheck && pnpm test && pnpm check:rule-tests && pnpm check:config","build":"tsc -p tsconfig.build.json","lint":"oxlint src","typecheck":"tsc --noEmit","test":"vitest run --passWithNoTests","check:rule-tests":"node scripts/check-rule-tests.mjs","check:config":"node scripts/check-config.mjs"},"dependencies":{"@oxlint/plugins":"1.79.0"},"devDependencies":{"@types/node":"24.13.3","fast-check":"^4.9.0","oxlint":"1.79.0","typescript":"5.9.3","vitest":"^4.1.11"},"engines":{"node":">=20"},"packageManager":"pnpm@10.33.0","_id":"@autotelic/plumb@0.6.0","gitHead":"256d2bb05957e42e4336f87325da23fc34085927","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-AA7xYXuf5DqzxdNcOMjG9USoqAt9vL0mEVQ8ZWUFy2vX9upn9A6IFSiuKu72vBS03+YTY9orBoagRbv58VWrhA==","shasum":"8de91a4bb8ede22be085ba24fba6e86c7b04c1fe","tarball":"https://registry.npmjs.org/@autotelic/plumb/-/plumb-0.6.0.tgz","fileCount":203,"unpackedSize":417229,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD0NHccW4Eare1dGZmoCI02iQh0Bk6freWOrk+Ux65xhAIgRyqje65ZRFbwqICBGswEtndK2sItB0g2x4RlQx7SiVA="}]},"_npmUser":{"name":"autotelic","email":"info+npm@autotelic.com"},"directories":{},"maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plumb_0.6.0_1787794068944_0.5485043417716169"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-24T20:25:50.675Z","modified":"2026-08-27T01:27:49.398Z","0.3.1":"2026-08-24T20:25:51.356Z","0.3.2":"2026-08-24T20:41:19.899Z","0.4.0":"2026-08-26T17:40:39.378Z","0.5.0":"2026-08-26T18:41:45.133Z","0.5.2":"2026-08-26T20:02:44.653Z","0.6.0":"2026-08-27T01:27:49.160Z"},"license":"MIT","description":"Opinionated Oxlint rules that keep TypeScript true: generic and Effect-specific patterns, maintained as one source of truth for the autotelic repos.","maintainers":[{"name":"autotelic","email":"info+npm@autotelic.com"}],"readme":"# plumb\n\nOpinionated [Oxlint](https://oxc.rs) rules that keep TypeScript *true*: a plumb line for your codebase.\n\n## Plugins\n\n- **`plumb`**: generic rules that reject low-evidence and low-signal implementation patterns (43 rules).\n- **`plumb-effect`**: opt-in rules for Effect service and Layer architecture (16 rules). Enable only in repos that depend on `effect`.\n- **`plumb/testing`**: RuleTester lifecycle adapter (`testableRule`, `wireRuleTester`, `createTester`) so `createOnce` rules with `before`/`after` hooks test correctly under the ESLint-compatible `create` path.\n\n## Consuming\n\n### 1. Add the dependency (public npm, no tokens or registry config needed)\n\n```sh\npnpm add -D @autotelic/plumb\n```\n\n### 2. Register the plugins in your oxlint config\n\nPoint `jsPlugins` straight at the installed package: no copies, updates are just a version bump:\n\n```ts\n// oxlint.config.ts\njsPlugins: [\n  { name: \"plumb\", specifier: \"@autotelic/plumb\" },\n  { name: \"plumb-effect\", specifier: \"@autotelic/plumb/effect\" },\n],\nrules: {\n  \"plumb/no-builtin-throws\": \"error\",\n  \"plumb-effect/guarded-op-must-return-effect\": \"error\",\n},\n```\n\nIf your setup does not resolve package exports for plugin specifiers, point directly at the source files instead:\n\n```ts\njsPlugins: [\n  { name: \"plumb\", specifier: \"./node_modules/@autotelic/plumb/src/index.ts\" },\n  { name: \"plumb-effect\", specifier: \"./node_modules/@autotelic/plumb/src/effect/index.ts\" },\n],\nignorePatterns: [\"node_modules/**\"],\n```\n\n## Updating\n\n```sh\npnpm up @autotelic/plumb          # bump to the latest published version\n```\n\n## Releasing (maintainers)\n\nReleases publish to public npm automatically when a GitHub Release is published; the `Publish` workflow runs `pnpm check`, then publishes with provenance via npm trusted publishing (no stored npm token).\n\n1. Update `version` in `package.json` and merge.\n2. Create a GitHub Release for `vX.Y.Z`.\n3. The workflow publishes to npmjs; verify on the release page.\n\n## Development\n\n```sh\npnpm install\npnpm check   # lint + typecheck + test + rule/config consistency\n```\n","readmeFilename":"README.md"}