{"_id":"@arulgandhi/fester","_rev":"2-37bd331e344522983d3236f776768fc0","name":"@arulgandhi/fester","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@arulgandhi/fester","version":"0.1.0","keywords":["git","analysis","cli","devtools","tech-debt"],"license":"MIT","_id":"@arulgandhi/fester@0.1.0","maintainers":[{"name":"arulgandhi","email":"toxictryhardgandhi@gmail.com"}],"bin":{"fester":"dist/cli.js"},"dist":{"shasum":"f9596ea6bb4e8d1424417f5cc20b8ab479bdfb1d","tarball":"https://registry.npmjs.org/@arulgandhi/fester/-/fester-0.1.0.tgz","fileCount":16,"integrity":"sha512-hN5gM55Yl+2cRvcC9KA0IZ3O4eG7yrmF+sjjkgj38OhtlmTMH2HAL0Qo+QwTR8sgazazCO9P7UhQfzrczv7AJQ==","signatures":[{"sig":"MEUCIFTNCs1Jf2M1+2R563JZdlUyF+pU229GAg9Cgnq9GgWnAiEA6CcHGLPQPyonKiS+A1ws0s4iRDsmOfcvR7dPssYaQW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136314},"engines":{"node":">=18"},"gitHead":"fa9174bd045b040cfa568bd91fa4918712fa7922","scripts":{"dev":"ts-node src/cli.ts","build":"npm run build:report && node scripts/inline-report.mjs && tsc","start":"node dist/cli.js","build:report":"cd report-app && npm install --prefer-offline && npm run build"},"_npmUser":{"name":"arulgandhi","email":"toxictryhardgandhi@gmail.com"},"_npmVersion":"12.0.1","description":"Find where your code festers — git-based fix frequency analysis","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chalk":"^5.3.0","cli-table3":"^0.6.4","simple-git":"^3.27.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.5.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fester_0.1.0_1784719525722_0.5294034845007349","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@arulgandhi/fester","version":"0.2.0","description":"Find where your code festers — git-based fix frequency analysis","repository":{"type":"git","url":"git+https://github.com/ArulGandhi/fester.git"},"bugs":{"url":"https://github.com/ArulGandhi/fester/issues"},"homepage":"https://github.com/ArulGandhi/fester#readme","bin":{"fester":"dist/cli.js"},"scripts":{"build":"npm run build:report && node scripts/inline-report.mjs && tsc","build:report":"cd report-app && npm install --prefer-offline && npm run build","dev":"ts-node src/cli.ts","start":"node dist/cli.js","test":"vitest run"},"keywords":["git","analysis","cli","devtools","tech-debt"],"license":"MIT","dependencies":{"chalk":"^5.3.0","cli-table3":"^0.6.4","simple-git":"^3.27.0"},"devDependencies":{"@types/node":"^22.0.0","ts-node":"^10.9.2","typescript":"^5.5.0","vitest":"^2.1.9"},"engines":{"node":">=18"},"gitHead":"2733408808ebdc97077fe5f157345c97831d53d2","_id":"@arulgandhi/fester@0.2.0","_nodeVersion":"24.18.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-AEnyuWkZJolTvwLIRCpv0OTNui+Y3th3F4OW6s1MaJzKWq9roLb1Qjfdkaezyrv8Rv8BnCZRjRiITCNWGMj25w==","shasum":"107a4d8af96b6dd1e944c0f0cfa2091efbd6bff3","tarball":"https://registry.npmjs.org/@arulgandhi/fester/-/fester-0.2.0.tgz","fileCount":16,"unpackedSize":144519,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB87vb3bGzTbPzl1sY8D/vht1mCC32at0QCl5r5+5xFLAiBTvtW4inRi+V74M8H0YT5fcNo7IoYSOrMOFSgciezZOA=="}]},"_npmUser":{"name":"arulgandhi","email":"toxictryhardgandhi@gmail.com"},"directories":{},"maintainers":[{"name":"arulgandhi","email":"toxictryhardgandhi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fester_0.2.0_1786262238523_0.629007239579163"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T11:25:25.576Z","modified":"2026-08-09T07:57:18.893Z","0.1.0":"2026-07-22T11:25:25.865Z","0.2.0":"2026-08-09T07:57:18.662Z"},"license":"MIT","keywords":["git","analysis","cli","devtools","tech-debt"],"description":"Find where your code festers — git-based fix frequency analysis","maintainers":[{"name":"arulgandhi","email":"toxictryhardgandhi@gmail.com"}],"readme":"# fester\n\n> Your git log is a pain diary. This reads it.\n\n`fester` scans your git history for fix-type commits and ranks files by how\noften — and how recently — they've caused pain.\n\n## Usage\n\n```bash\nnpx fester                                  # scan last 90 days\nnpx fester --days 30                        # custom window\nnpx fester --since 2024-01-01 --until 2024-03-31  # explicit date range\nnpx fester --top 10                         # show top 10 only\nnpx fester --author \"jane\"                  # only fixes authored by matching name\nnpx fester --compare                        # compare this window vs the preceding one\nnpx fester --report                         # generate + open HTML report\nnpx fester --json | jq .                    # pipe-friendly JSON\nnpx fester --path /path/to/repo             # run on another repo\n```\n\n## How it works\n\n1. Reads `git log` for the given window\n2. Classifies commits by subject line: `fix:`, `hotfix:`, `revert:`, `bug:`, `patch:`\n3. Scores each file using a recency-weighted formula:\n   ```\n   score(file) = Σ weight[type] / (days_since + 1)\n   ```\n4. Normalises scores 0–100 relative to the worst offender\n5. Detects trend by comparing first vs second half of the window\n\n## Score weights\n\n| type    | weight |\n|---------|--------|\n| revert  | 3.0    |\n| hotfix  | 2.5    |\n| fix     | 2.0    |\n| bug     | 1.5    |\n| patch   | 1.0    |\n\n## Comparing windows\n\n`--compare` scores the current window and the immediately preceding window of\nequal length, then shows which files got worse or better:\n\n```bash\nnpx fester --compare              # last 90 days vs the 90 days before that\nnpx fester --days 30 --compare    # last 30 days vs the 30 days before that\n```\n\n## No AI. No estimates. Pure git math.\n\n\nMIT \n","readmeFilename":"README.md","homepage":"https://github.com/ArulGandhi/fester#readme","repository":{"type":"git","url":"git+https://github.com/ArulGandhi/fester.git"},"bugs":{"url":"https://github.com/ArulGandhi/fester/issues"}}