{"_id":"@boring-stack-pkg/eslint-plugin-comment-hygiene","_rev":"3-c3fdb5e6c4e2b594db6b53ba9636072d","name":"@boring-stack-pkg/eslint-plugin-comment-hygiene","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.1":{"name":"@boring-stack-pkg/eslint-plugin-comment-hygiene","version":"0.1.1","keywords":["eslint","eslintplugin","typescript","comments","hygiene"],"author":"","license":"MIT","_id":"@boring-stack-pkg/eslint-plugin-comment-hygiene@0.1.1","maintainers":[{"name":"agjs","email":"hi@aleksandar.xyz"}],"homepage":"https://github.com/AI-Starter-Templates/eslint-plugins#readme","bugs":{"url":"https://github.com/AI-Starter-Templates/eslint-plugins/issues"},"dist":{"shasum":"e2d8a26dceea83e5d2c478d2184f7ecfc10f79b9","tarball":"https://registry.npmjs.org/@boring-stack-pkg/eslint-plugin-comment-hygiene/-/eslint-plugin-comment-hygiene-0.1.1.tgz","fileCount":9,"integrity":"sha512-zGSOJjUox6q2SQZGjneluFD+YKav3JiMBXn1CvbBLeuxvK0uqA4qfYCQhipQyLJVhCtu0TM4cq+2HTqSYlKMJA==","signatures":[{"sig":"MEUCIQC1qtkffG8IQ7fy8fJeeuezSFKy4dtTSc6or/eSt09MBQIgGAUWIzhuRKAWhfV8L5ZiW9ohvIbyuPIt97dULNv/IuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boring-stack-pkg%2feslint-plugin-comment-hygiene@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22156},"main":"./dist/index.cjs","type":"module","_from":"file:boring-stack-pkg-eslint-plugin-comment-hygiene-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"agjs","email":"hi@aleksandar.xyz"},"_resolved":"/tmp/7b80416310008b7be50e87f37fe56041/boring-stack-pkg-eslint-plugin-comment-hygiene-0.1.1.tgz","_integrity":"sha512-zGSOJjUox6q2SQZGjneluFD+YKav3JiMBXn1CvbBLeuxvK0uqA4qfYCQhipQyLJVhCtu0TM4cq+2HTqSYlKMJA==","repository":{"url":"git+https://github.com/AI-Starter-Templates/eslint-plugins.git","type":"git","directory":"eslint-plugin-comment-hygiene"},"_npmVersion":"10.9.7","description":"ESLint rules that catch agent-generated comment patterns: narrative prose ('Here we...', 'Now we...'), PR/issue references, and similar drift-prone metadata that belongs in commit messages, not source.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@typescript-eslint/utils":"8.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.0.0","eslint":"9.0.0","vitest":"2.0.0","@eslint/js":"9.0.0","typescript":"6.0.3","@types/node":"22.0.0","@typescript-eslint/parser":"8.0.0","@typescript-eslint/rule-tester":"8.0.0"},"peerDependencies":{"eslint":"8.57.0 || ^9.0.0","typescript":">=5.0.0","@typescript-eslint/parser":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-comment-hygiene_0.1.1_1779219577243_0.6465741019705258","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@boring-stack-pkg/eslint-plugin-comment-hygiene","version":"0.1.2","keywords":["eslint","eslintplugin","typescript","comments","hygiene"],"author":"","license":"MIT","_id":"@boring-stack-pkg/eslint-plugin-comment-hygiene@0.1.2","maintainers":[{"name":"agjs","email":"hi@aleksandar.xyz"}],"homepage":"https://github.com/boringstack-xyz/eslint-plugins#readme","bugs":{"url":"https://github.com/boringstack-xyz/eslint-plugins/issues"},"dist":{"shasum":"8524e6eb7b6c21040dce7695462622d03df517cb","tarball":"https://registry.npmjs.org/@boring-stack-pkg/eslint-plugin-comment-hygiene/-/eslint-plugin-comment-hygiene-0.1.2.tgz","fileCount":9,"integrity":"sha512-kzrWpTkKZW/d8To2OMG5Q4EgA9I+4JIbxeBU4RnaUo24BhLfOAiWZXCgoBspOyGslfRd2tD61AvRKaHD9NiBFg==","signatures":[{"sig":"MEUCIQDC5WWmy+g1sx2cviN1It+UdsQ+41GEXCTz/x7udSD3xAIgIW3yJcA8GB3OP/HS+YFVj3T0YI405nrmIAcq9RdFT0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22425},"main":"./dist/index.cjs","type":"module","_from":"file:boring-stack-pkg-eslint-plugin-comment-hygiene-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"agjs","email":"hi@aleksandar.xyz"},"_resolved":"/tmp/3bea9e6165c3322bfa7c852a835acbfc/boring-stack-pkg-eslint-plugin-comment-hygiene-0.1.2.tgz","_integrity":"sha512-kzrWpTkKZW/d8To2OMG5Q4EgA9I+4JIbxeBU4RnaUo24BhLfOAiWZXCgoBspOyGslfRd2tD61AvRKaHD9NiBFg==","repository":{"url":"git+https://github.com/boringstack-xyz/eslint-plugins.git","type":"git","directory":"eslint-plugin-comment-hygiene"},"_npmVersion":"11.15.0","description":"ESLint rules that catch agent-generated comment patterns: narrative prose ('Here we...', 'Now we...'), PR/issue references, and similar drift-prone metadata that belongs in commit messages, not source.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@typescript-eslint/utils":"8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.0.0","eslint":"9.0.0","vitest":"2.0.0","@eslint/js":"9.0.0","typescript":"6.0.3","@types/node":"22.0.0","@typescript-eslint/parser":"8.0.0","@typescript-eslint/rule-tester":"8.0.0"},"peerDependencies":{"eslint":"8.57.0 || ^9.0.0","typescript":">=5.0.0","@typescript-eslint/parser":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-comment-hygiene_0.1.2_1779695633887_0.5921271333480005","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@boring-stack-pkg/eslint-plugin-comment-hygiene","version":"0.2.0","description":"ESLint rules that catch agent-generated comment patterns: narrative prose ('Here we...', 'Now we...'), PR/issue references, and similar drift-prone metadata that belongs in commit messages, not source.","type":"module","license":"MIT","author":"","repository":{"type":"git","url":"git+https://github.com/boringstack-xyz/eslint-plugins.git","directory":"eslint-plugin-comment-hygiene"},"publishConfig":{"access":"public"},"sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"keywords":["eslint","eslintplugin","typescript","comments","hygiene"],"peerDependencies":{"@typescript-eslint/parser":">=8.0.0","eslint":"8.57.0 || ^9.0.0","typescript":">=5.0.0"},"dependencies":{"@typescript-eslint/utils":"8.0.0"},"devDependencies":{"@eslint/js":"9.0.0","@types/node":"22.0.0","@typescript-eslint/parser":"8.0.0","@typescript-eslint/rule-tester":"8.0.0","eslint":"9.0.0","tsup":"8.0.0","typescript":"6.0.3","vitest":"2.0.0"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest"},"_id":"@boring-stack-pkg/eslint-plugin-comment-hygiene@0.2.0","bugs":{"url":"https://github.com/boringstack-xyz/eslint-plugins/issues"},"homepage":"https://github.com/boringstack-xyz/eslint-plugins#readme","_integrity":"sha512-u8iKTev0Xo9il5ye+/JzkSmJ4en5RxVxOyA63DVOlp6koUXYSd3wTkA5gF7kVfxHEqMXcctQaTNu3cER5O9fJg==","_resolved":"/tmp/f36055494e0bec19d3494ae5f9f47f5b/boring-stack-pkg-eslint-plugin-comment-hygiene-0.2.0.tgz","_from":"file:boring-stack-pkg-eslint-plugin-comment-hygiene-0.2.0.tgz","_nodeVersion":"22.22.3","_npmVersion":"11.16.0","dist":{"integrity":"sha512-u8iKTev0Xo9il5ye+/JzkSmJ4en5RxVxOyA63DVOlp6koUXYSd3wTkA5gF7kVfxHEqMXcctQaTNu3cER5O9fJg==","shasum":"9b756b4fafd07075ff444427e9d814f6247f0b77","tarball":"https://registry.npmjs.org/@boring-stack-pkg/eslint-plugin-comment-hygiene/-/eslint-plugin-comment-hygiene-0.2.0.tgz","fileCount":10,"unpackedSize":30486,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDuTMtMFCS2UadO146Ni4wwQkaWtitvQe5yl15Gd7SBBwIgPpgWURNu5aL20nk1LEKSfAPuo6DmDmgktburjPDMavM="}]},"_npmUser":{"name":"agjs","email":"hi@aleksandar.xyz"},"directories":{},"maintainers":[{"name":"agjs","email":"hi@aleksandar.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-comment-hygiene_0.2.0_1780248716105_0.8469075713595597"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-19T19:39:37.073Z","modified":"2026-05-31T17:31:56.395Z","0.1.1":"2026-05-19T19:39:37.385Z","0.1.2":"2026-05-25T07:53:54.006Z","0.2.0":"2026-05-31T17:31:56.272Z"},"bugs":{"url":"https://github.com/boringstack-xyz/eslint-plugins/issues"},"license":"MIT","homepage":"https://github.com/boringstack-xyz/eslint-plugins#readme","keywords":["eslint","eslintplugin","typescript","comments","hygiene"],"repository":{"type":"git","url":"git+https://github.com/boringstack-xyz/eslint-plugins.git","directory":"eslint-plugin-comment-hygiene"},"description":"ESLint rules that catch agent-generated comment patterns: narrative prose ('Here we...', 'Now we...'), PR/issue references, and similar drift-prone metadata that belongs in commit messages, not source.","maintainers":[{"name":"agjs","email":"hi@aleksandar.xyz"}],"readme":"# eslint-plugin-comment-hygiene\n\n[![npm](https://img.shields.io/npm/v/@boring-stack-pkg/eslint-plugin-comment-hygiene?logo=npm)](https://www.npmjs.com/package/@boring-stack-pkg/eslint-plugin-comment-hygiene) [![source](https://img.shields.io/badge/source-github-blue?logo=github)](https://github.com/boringstack-xyz/eslint-plugins/tree/main/eslint-plugin-comment-hygiene)\n\nESLint rules that catch agent-generated comment patterns:\n\n- **`no-narration-comments`** — flags step-by-step prose like\n  `// Here we…`, `// Now we…`, `// First, …`, `// Let's …`.\n  Describes the sequence of operations a reader can already see;\n  a tell that the comment was written by an agent narrating its\n  own changes.\n- **`no-pr-reference-comments`** — flags PR/issue numbers\n  (`#123`, `PR 42`, `see #5`, `closes #99`) and GitHub PR/issue\n  URLs. Repo-history references belong in commit messages and PR\n  descriptions — they rot when the repo moves or the numbering\n  changes.\n\nJSDoc-style block comments (`/** … */`) are exempt from\n`no-narration-comments` so descriptions / `@param` / `@returns`\ndon't false-positive.\n\n## Install\n\n```sh\npnpm add -D @boring-stack-pkg/eslint-plugin-comment-hygiene\n```\n\nPeer deps: `eslint >= 8.57`, `@typescript-eslint/parser >= 8`,\n`typescript >= 5`.\n\n## Use (flat config)\n\n```js\nimport tsParser from \"@typescript-eslint/parser\";\nimport commentHygiene from \"@boring-stack-pkg/eslint-plugin-comment-hygiene\";\n\nexport default [\n  {\n    files: [\"**/*.{ts,tsx}\"],\n    languageOptions: { parser: tsParser },\n    plugins: { \"comment-hygiene\": commentHygiene },\n    rules: {\n      \"comment-hygiene/no-narration-comments\": \"error\",\n      \"comment-hygiene/no-pr-reference-comments\": \"error\",\n    },\n  },\n];\n```\n\nOr use the bundled config:\n\n```js\nimport commentHygiene from \"@boring-stack-pkg/eslint-plugin-comment-hygiene\";\n\nexport default [commentHygiene.configs.recommended];\n```\n\n## Rules\n\n| Rule                                                                 | Description                                                                   | Fixable |\n| -------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ------- |\n| [`no-narration-comments`](docs/rules/no-narration-comments.md)       | Disallow narrative comments like \"Here we…\", \"Now we…\", \"First, …\", \"Let's …\" | –       |\n| [`no-pr-reference-comments`](docs/rules/no-pr-reference-comments.md) | Disallow PR / issue references (`#123`, `PR 42`, GitHub URLs) in comments     | –       |\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}