{"_id":"@bradheitmann/mister-clean","_rev":"6-d509cff63ceaf8a5d3b91e028aadc99e","name":"@bradheitmann/mister-clean","dist-tags":{"latest":"7.0.2"},"versions":{"6.1.9":{"name":"@bradheitmann/mister-clean","version":"6.1.9","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"license":"MIT","_id":"@bradheitmann/mister-clean@6.1.9","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"homepage":"https://bradheitmann.ai/mister-clean/","bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"dist":{"shasum":"f5b2dc81b0faaf949b8a1c4a9213f50592ec586a","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-6.1.9.tgz","fileCount":36,"integrity":"sha512-1HnSAu1Mlc2VI0u+fIj5Dw1Ij2BX7v43RBQAkuWrNDcoYuHmjvyldRF0f6ny9M81wqiAKEHwv9cHi9QO0iZD4Q==","signatures":[{"sig":"MEQCIBM2MT3nh/jvkIhpxMoa8f2sHqlh9Vs0Hp61rT+sJfirAiAhHHEoj1eG7XW0i1xQlZaT3FyABeHcOXwNdNUet5Dn+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1260126},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/server.js"},"scripts":{"dev":"bun run build:materials && wrangler dev","test":"bun run build && vitest run","build":"bun run build:materials && tsc --noEmit && tsup && bun run sync:cli && bun run manifest:package","check":"bun run test && bun run pack:check && bun run pack:smoke && bun run audit:public","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","prepack":"bun run build","sync:cli":"bun scripts/sync_cli.mjs","pack:check":"bun pm pack --dry-run","pack:smoke":"node scripts/verify_packed_cli.mjs","audit:public":"bun src/cli.ts audit public-safety .","build:materials":"bun scripts/generate_materials.mjs","manifest:package":"bun src/cli.ts manifest . --package"},"_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"description":"Successor-readiness skill and read-only MCP server for paying repository completion debt.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"tsup":"8.5.0","yaml":"2.9.0","vitest":"4.0.18","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0"},"trustedDependencies":["core-js-pure","esbuild","workerd"],"_npmOperationalInternal":{"tmp":"tmp/mister-clean_6.1.9_1787694447766_0.29426151357662533","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"@bradheitmann/mister-clean","version":"6.2.0","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"license":"MIT","_id":"@bradheitmann/mister-clean@6.2.0","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"homepage":"https://bradheitmann.ai/mister-clean/","bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"dist":{"shasum":"f5468b1924145c72be2c44a35a445949728cb4d0","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-6.2.0.tgz","fileCount":38,"integrity":"sha512-FJW8lgS41PGa5Hhj3OG4NUq3poW9A18qf99JKyHPrJyN9zjw+TVKpGcjKpBSNXLdZfh9hd8LHisyRHTt5zQiHA==","signatures":[{"sig":"MEUCIHY0Rgw+qipjMdsOBvuUaHHrVL51Akip6ibGSKPM2OPvAiEA4ezcqk4eyrHY8PQMLVNx6SrXfXhjwkAW3yixD7XpSus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1310965},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/server.js"},"scripts":{"dev":"bun run build:materials && wrangler dev","test":"bun run build && vitest run","build":"bun run build:materials && tsc --noEmit && tsup && bun run sync:cli && bun run manifest:package","check":"bun run test && bun run pack:check && bun run pack:smoke && bun run audit:public","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","prepack":"bun run build","sync:cli":"bun scripts/sync_cli.mjs","pack:check":"bun pm pack --dry-run","pack:smoke":"node scripts/verify_packed_cli.mjs","audit:public":"bun src/cli.ts audit public-safety .","build:materials":"bun scripts/generate_materials.mjs","manifest:package":"bun src/cli.ts manifest . --package"},"_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"description":"Successor-readiness skill and read-only MCP server for paying repository completion debt.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"tsup":"8.5.0","yaml":"2.9.0","vitest":"4.0.18","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0"},"trustedDependencies":["core-js-pure","esbuild","workerd"],"_npmOperationalInternal":{"tmp":"tmp/mister-clean_6.2.0_1787706853580_0.9438283123682314","host":"s3://npm-registry-packages-npm-production"}},"6.2.1":{"name":"@bradheitmann/mister-clean","version":"6.2.1","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"license":"MIT","_id":"@bradheitmann/mister-clean@6.2.1","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"homepage":"https://bradheitmann.ai/mister-clean/","bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"dist":{"shasum":"7134821200a130d7ba45d05bb5655499492f2aca","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-6.2.1.tgz","fileCount":39,"integrity":"sha512-UHv1mRrGxGfXrr+IMwndG+91dERvZDf8x+y9NDj/zU/4E7iw+aoOi0bGCw+PIDSLQK47ooaQK0yfJgvAUGwd8Q==","signatures":[{"sig":"MEQCIFsvh1qXqZOtiZPHDkunNFmxLOGQ3rjha6VgwdOZCp1UAiBlARsOzeWu8ODg61pLbnmtxIZXdyAhB7xS8HpyZvJu3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1332949},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/server.js"},"scripts":{"dev":"bun run build:materials && wrangler dev","test":"bun run build && vitest run","build":"bun run build:materials && tsc --noEmit && tsup && bun run sync:cli && bun run manifest:package","check":"bun run test && bun run pack:check && bun run pack:smoke && bun run audit:public","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","prepack":"bun run build","sync:cli":"bun scripts/sync_cli.mjs","pack:check":"bun pm pack --dry-run","pack:smoke":"node scripts/verify_packed_cli.mjs","audit:public":"bun src/cli.ts audit public-safety .","build:materials":"bun scripts/generate_materials.mjs","manifest:package":"bun src/cli.ts manifest . --package"},"_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"description":"Successor-readiness skill and read-only MCP server for paying repository completion debt.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"tsup":"8.5.0","yaml":"2.9.0","vitest":"4.0.18","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0"},"trustedDependencies":["core-js-pure","esbuild","workerd"],"_npmOperationalInternal":{"tmp":"tmp/mister-clean_6.2.1_1787707638426_0.16159400811150704","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"@bradheitmann/mister-clean","version":"6.3.0","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"license":"MIT","_id":"@bradheitmann/mister-clean@6.3.0","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"homepage":"https://bradheitmann.ai/mister-clean/","bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"dist":{"shasum":"7b12f3f1b90c1014ecf7ed5b185b5960f7d57286","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-6.3.0.tgz","fileCount":44,"integrity":"sha512-tSUQvVNg82M2kD+5DvXRfQVN5dsmB64fplpmIqIZCBk9XFCLRYHTBYaFEqV4CWpqXxpyOimaKmStokoGyK0wvA==","signatures":[{"sig":"MEYCIQDeHlSip0TcpkcjJ2HKBJQMhwlrlTgK+DyiCYo5udiPcQIhALqbvpBNf9hAefzL9lPYBZd8eV6JkE9uycKzL5C/6wnk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1770195},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/server.js"},"scripts":{"dev":"bun run build:materials && wrangler dev","test":"bun run build && vitest run","build":"bun run build:materials && tsc --noEmit && tsup && bun run sync:cli && bun run manifest:package","check":"bun run test && bun run pack:check && bun run pack:smoke && bun run audit:public","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","prepack":"bun run build","sync:cli":"bun scripts/sync_cli.mjs","pack:check":"bun pm pack --dry-run","pack:smoke":"node scripts/verify_packed_cli.mjs","audit:public":"bun src/cli.ts audit public-safety .","report:history":"bun scripts/generate_codebase_history.mjs","build:materials":"bun scripts/generate_materials.mjs","manifest:package":"bun src/cli.ts manifest . --package","report:case-study":"bun scripts/render_case_study_report.mjs"},"_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"description":"Agent skill for paying repository debt and preventing unclean commits.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"tsup":"8.5.0","yaml":"2.9.0","vitest":"4.0.18","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0"},"trustedDependencies":["core-js-pure","esbuild","workerd"],"_npmOperationalInternal":{"tmp":"tmp/mister-clean_6.3.0_1787734480902_0.20663609125574922","host":"s3://npm-registry-packages-npm-production"}},"7.0.1":{"name":"@bradheitmann/mister-clean","version":"7.0.1","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"license":"MIT","_id":"@bradheitmann/mister-clean@7.0.1","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"homepage":"https://bradheitmann.ai/mister-clean/","bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"dist":{"shasum":"d6e775967c731bb50f8756050d6a259b151f3c0a","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-7.0.1.tgz","fileCount":97,"integrity":"sha512-OKwLHPVnT7UowldYW68G3bbTGmu7HhEOyxC7Ccv9RmNfAq2MeV+nZuPmI9pdDNth3FdlnUhxmjQit7FTilMbPQ==","signatures":[{"sig":"MEYCIQDXbTT930izFgnWtWk7mVnfsjFdi+xHd8kh7+bXBhV4nwIhAJlw+pbLGM8waKejP+hU1zue9CCS0PSbf4u2lVEy3ON5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDm1AG+0r6rLT9wLG1RARXmH+Ai3N0gRokX8oU5Gj8YpgIhALXGfsm2+wVqukPl+aRP3q80ZH01kN7X4kKWZ8bHlxJ/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16707272},"type":"module","_from":"file:/tmp/sprint-20260922/mister-clean/release-v7.0.1/bradheitmann-mister-clean-7.0.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/public.d.ts","import":"./dist/public.js"},"./control-plane":{"types":"./dist/control-plane.d.ts","import":"./dist/control-plane.js"}},"scripts":{"dev":"bun run build:materials && wrangler dev","test":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun run build:verified && bun run test:node && bun run test:bun && bun run control-plane:check","build":"bun run build:verified","check":"bun run ci:check","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","ci:check":"bun scripts/run_clean_ci.ts --candidate=worktree","sync:cli":"bun scripts/sync_cli.mjs","test:bun":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane","build:raw":"bun run build:scorecard && bun run build:materials && bun run control-plane:typecheck && tsc --noEmit && bun run package:source-surface:check && tsup && bun run control-plane:build && bun run package:surface:check && bun run sync:cli && bun run manifest:package","test:node":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 node ./node_modules/vitest/vitest.mjs run --allowOnly=false --no-file-parallelism --testTimeout=120000 --exclude 'src/control-plane/**/*.test.ts' --exclude 'control-plane-app/**/*.test.ts'","pack:check":"bun run package:import:check && pnpm --config.ignore-scripts=true pack --dry-run","pack:smoke":"node scripts/prepare_release_archive.mjs","audit:public":"bun scripts/verify_public_package.ts . --denylist-file config/public-package-identifiers.txt","release:check":"bun run ci:check && node scripts/prepare_release_archive.mjs","build:verified":"bun scripts/run_verified_build.ts --candidate=worktree","report:history":"bun scripts/generate_codebase_history.mjs","sync:cli:check":"bun scripts/sync_cli.mjs --check","build:materials":"bun scripts/generate_materials.mjs","build:scorecard":"bun scripts/build_model_scorecard_interactions.mjs","generated:check":"bun scripts/verify_generated_candidate.ts --candidate=worktree","manifest:package":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts manifest . --package","report:scorecard":"bun run build:scorecard && bun scripts/render_model_scorecard.mjs","control-plane:dev":"bunx --bun vite --config control-plane-app/vite.config.ts","report:case-study":"bun scripts/render_case_study_report.mjs","control-plane:build":"pnpm exec -- bun ./node_modules/vite/bin/vite.js build --config control-plane-app/vite.config.ts","control-plane:check":"bun run control-plane:typecheck && cd control-plane-app && node ../node_modules/vitest/vitest.mjs --config vite.config.ts run --allowOnly=false src/*.test.ts","package:import:check":"node scripts/verify_package_exports.mjs","build:materials:check":"bun scripts/generate_materials.mjs --check","build:scorecard:check":"bun scripts/build_model_scorecard_interactions.mjs --check","package:surface:check":"pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane/runtime/package-surface.test.ts","generated:staged:check":"bun scripts/verify_generated_candidate.ts --candidate=staged","manifest:package:check":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts manifest . --package --check","control-plane:typecheck":"pnpm exec -- bun ./node_modules/svelte-check/bin/svelte-check --tsconfig control-plane-app/tsconfig.json","report:case-study-suite":"bun run report:scorecard && bun run report:case-study","generated:postbuild:check":"bun run build:scorecard:check && bun run build:materials:check && bun run sync:cli:check && bun run manifest:package:check","release:attestation:check":"bun scripts/generate_release_attestation.mjs --check","release:attestation:write":"bun scripts/generate_release_attestation.mjs --write","control-plane:render-check":"bun run control-plane:build && bun scripts/verify_control_plane_render.ts","audit:repository-boundaries":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts audit repository-boundaries .","package:source-surface:check":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane/runtime/public-surface.test.ts","release:attestation:source-check":"bun scripts/generate_release_attestation.mjs --source-check"},"_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"_resolved":"/tmp/sprint-20260922/mister-clean/release-v7.0.1/bradheitmann-mister-clean-7.0.1.tgz","_integrity":"sha512-OKwLHPVnT7UowldYW68G3bbTGmu7HhEOyxC7Ccv9RmNfAq2MeV+nZuPmI9pdDNth3FdlnUhxmjQit7FTilMbPQ==","repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"_npmVersion":"11.19.1","description":"Agent skill for paying repository debt and preventing unclean commits.","directories":{},"_nodeVersion":"26.9.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.0","vite":"^8.2.2","yaml":"2.9.0","svelte":"^5.56.10","vitest":"4.1.11","esbuild":"0.28.2","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","svelte-check":"^4.7.6","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0","@sveltejs/vite-plugin-svelte":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/mister-clean_7.0.1_1790116364103_0.3141452849468416","host":"s3://npm-registry-packages-npm-production"}},"7.0.2":{"_id":"@bradheitmann/mister-clean@7.0.2","bin":{"mister-clean":"bin/mister-clean.js","mister-clean-mcp":"dist/stdio.js"},"bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"dist":{"shasum":"665887250237a1c2c9208497bbe55ce5b53e5af7","tarball":"https://registry.npmjs.org/@bradheitmann/mister-clean/-/mister-clean-7.0.2.tgz","fileCount":97,"integrity":"sha512-4fnL2cOw9DMmFOj1vetlkoJfeyfcDxzeyRpNDF4Sps3H6acXOiGK0d+KEyzAwrAt7oy0sKOyMn+bkxBFbzhTOA==","signatures":[{"sig":"MEUCIQDMo9tn3BbsfjC8hxOdXNGSeDjmnd5O7sKjZCjg00OF/AIgPgOuOYnDrDJTdPQHT9ywu2bbuwl9upJOgle8ZoFfYlY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCAWz/uKWHjTfClcr+8NTSfQepCai0eZtvzdL23qbdJ2QIgZVKQCY3+ihqb5hj4A08PdAdoz3fQPMtB12WuQa9IpcQ="}],"unpackedSize":16711452},"name":"@bradheitmann/mister-clean","type":"module","_from":"file:/tmp/mc-702-release/mister-clean-v7.0.2-verified-release/bradheitmann-mister-clean-7.0.2.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/public.d.ts","import":"./dist/public.js"},"./control-plane":{"types":"./dist/control-plane.d.ts","import":"./dist/control-plane.js"}},"license":"MIT","scripts":{"dev":"bun run build:materials && wrangler dev","test":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun run build:verified && bun run test:node && bun run test:bun && bun run control-plane:check","build":"bun run build:verified","check":"bun run ci:check","types":"wrangler types env.d.ts --include-runtime false","deploy":"bun run build:materials && wrangler deploy","ci:check":"bun scripts/run_clean_ci.ts --candidate=worktree","sync:cli":"bun scripts/sync_cli.mjs","test:bun":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane","build:raw":"bun run build:scorecard && bun run build:materials && bun run control-plane:typecheck && tsc --noEmit && bun run package:source-surface:check && tsup && bun run control-plane:build && bun run package:surface:check && bun run sync:cli && bun run manifest:package","test:node":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 node ./node_modules/vitest/vitest.mjs run --allowOnly=false --no-file-parallelism --testTimeout=120000 --exclude 'src/control-plane/**/*.test.ts' --exclude 'control-plane-app/**/*.test.ts'","pack:check":"bun run package:import:check && pnpm --config.ignore-scripts=true pack --dry-run","pack:smoke":"node scripts/prepare_release_archive.mjs","audit:public":"bun scripts/verify_public_package.ts . --denylist-file config/public-package-identifiers.txt","release:check":"bun run ci:check && node scripts/prepare_release_archive.mjs","build:verified":"bun scripts/run_verified_build.ts --candidate=worktree","report:history":"bun scripts/generate_codebase_history.mjs","sync:cli:check":"bun scripts/sync_cli.mjs --check","build:materials":"bun scripts/generate_materials.mjs","build:scorecard":"bun scripts/build_model_scorecard_interactions.mjs","generated:check":"bun scripts/verify_generated_candidate.ts --candidate=worktree","manifest:package":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts manifest . --package","report:scorecard":"bun run build:scorecard && bun scripts/render_model_scorecard.mjs","control-plane:dev":"bunx --bun vite --config control-plane-app/vite.config.ts","report:case-study":"bun scripts/render_case_study_report.mjs","control-plane:build":"pnpm exec -- bun ./node_modules/vite/bin/vite.js build --config control-plane-app/vite.config.ts","control-plane:check":"bun run control-plane:typecheck && cd control-plane-app && node ../node_modules/vitest/vitest.mjs --config vite.config.ts run --allowOnly=false src/*.test.ts","package:import:check":"node scripts/verify_package_exports.mjs","build:materials:check":"bun scripts/generate_materials.mjs --check","build:scorecard:check":"bun scripts/build_model_scorecard_interactions.mjs --check","package:surface:check":"pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane/runtime/package-surface.test.ts","generated:staged:check":"bun scripts/verify_generated_candidate.ts --candidate=staged","manifest:package:check":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts manifest . --package --check","control-plane:typecheck":"pnpm exec -- bun ./node_modules/svelte-check/bin/svelte-check --tsconfig control-plane-app/tsconfig.json","report:case-study-suite":"bun run report:scorecard && bun run report:case-study","generated:postbuild:check":"bun run build:scorecard:check && bun run build:materials:check && bun run sync:cli:check && bun run manifest:package:check","release:attestation:check":"bun scripts/generate_release_attestation.mjs --check","release:attestation:write":"bun scripts/generate_release_attestation.mjs --write","control-plane:render-check":"bun run control-plane:build && bun scripts/verify_control_plane_render.ts","audit:repository-boundaries":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 bun src/cli.ts audit repository-boundaries .","package:source-surface:check":"MISTER_CLEAN_SOURCE_DEVELOPMENT=1 pnpm exec -- bun ./node_modules/vitest/vitest.mjs run --allowOnly=false src/control-plane/runtime/public-surface.test.ts","release:attestation:source-check":"bun scripts/generate_release_attestation.mjs --source-check"},"version":"7.0.2","_npmUser":{"name":"bradheitmann","email":"bradheitmann@gmail.com"},"homepage":"https://bradheitmann.ai/mister-clean/","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"_resolved":"/tmp/mc-702-release/mister-clean-v7.0.2-verified-release/bradheitmann-mister-clean-7.0.2.tgz","_integrity":"sha512-4fnL2cOw9DMmFOj1vetlkoJfeyfcDxzeyRpNDF4Sps3H6acXOiGK0d+KEyzAwrAt7oy0sKOyMn+bkxBFbzhTOA==","repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"_npmVersion":"11.19.1","description":"Agent skill for paying repository debt and preventing unclean commits.","directories":{},"maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"_nodeVersion":"26.9.0","dependencies":{"zod":"4.4.3","agents":"0.21.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.0","vite":"^8.2.2","yaml":"2.9.0","svelte":"^5.56.10","vitest":"4.1.11","esbuild":"0.28.2","wrangler":"4.125.0","typescript":"6.0.3","@types/node":"26.0.1","svelte-check":"^4.7.6","@cloudflare/workers-types":"5.20260825.1","@modelcontextprotocol/client":"2.0.0","@sveltejs/vite-plugin-svelte":"^7.3.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mister-clean_7.0.2_1790187396854_0.2547753993674309"}}},"time":{"created":"2026-08-25T21:47:27.579Z","modified":"2026-09-23T18:16:37.325Z","6.1.9":"2026-08-25T21:47:27.906Z","6.2.0":"2026-08-26T01:14:13.821Z","6.2.1":"2026-08-26T01:27:18.595Z","6.3.0":"2026-08-26T08:54:41.032Z","7.0.1":"2026-09-22T22:32:44.329Z","7.0.2":"2026-09-23T18:16:37.139Z"},"bugs":{"url":"https://github.com/bradheitmann/mister-clean/issues"},"license":"MIT","homepage":"https://bradheitmann.ai/mister-clean/","keywords":["agent-skill","code-quality","handoff","mcp","repository-hygiene","successor-readiness"],"repository":{"url":"git+https://github.com/bradheitmann/mister-clean.git","type":"git"},"description":"Agent skill for paying repository debt and preventing unclean commits.","maintainers":[{"name":"bradheitmann","email":"bradheitmann@gmail.com"}],"readme":"# Mister Clean\n\nMister Clean is an agent skill for making repository hygiene durable. `CLOSE`\npays inherited completion debt, reconciles code, planning, and Git into one\ntrustworthy reality, and leaves the next team ready to build. `GUARD` applies\nthe same standard at the commit boundary so unclean work never enters accepted\nhistory.\n\nIts premise is simple: the repository is the agent team's shared memory. A\nclean inheritance lets every session start with leverage; an ambiguous one\nmakes every successor pay to reconstruct the same reality. Mister Clean pays\nthat debt once, at the source, then protects the gain.\n\nVersion 7 connects three surfaces around that contract:\n\n- the skill gives an orchestrating agent standing authority and a pay-until-paid\n  procedure;\n- the CLI and MCP surfaces provide the same validators, templates, and exact\n  evidence contracts without making a second cleanliness authority;\n- the local Bun, SQLite, and Svelte control plane shows whether debt is actually\n  falling, orders remediation through the issue DAG, tracks complexity and\n  no-harm movement, and recommends evidence-qualified model + harness +\n  reasoning-level tuples by remediation capability.\n\nThe report leads with one plain number—real issues remaining—then preserves the\nseparate flows behind it: pre-existing debt discovered, debt paid, debt caused\nby cleanup, false positives invalidated, corrections, and genuine boundaries.\nBetter detection can expand known scope without falsely claiming the repository\nbecame dirtier; cleanup-created debt is always a regression.\n\nInvocation is standing authorization for the procedures documented in the\nskill. Ordinary in-scope cleanup is performed, not queued; hard safety and\nownership boundaries remain hard boundaries.\n\nIts first rule is do no harm: every atomic cleanup action reruns the affected\nhygiene comparators, and zero cleanup-introduced debt may cross an action,\ncommit, checkpoint, or handoff boundary. Net improvement never excuses a new\nregression. Schema 1.5 keeps raw detector observations and normalized root\ndebts in separate identity ledgers, so paying one cause with many symptoms can\nnever make unlike counts look like progress.\n\nMister Clean applies that rule to itself. Every commit candidate in this\nrepository must cross the exact-tree `GUARD` barrier and a read-only dogfood\nrun by the last accepted release pinned by version and runtime digest; the\nworking candidate cannot certify itself. Registry publication and the website\nare one version-bound release transaction, preceded by a full repository\n`CLOSE` treatment and independent acceptance.\n\n## Use the skill\n\nInstall this repository as a skill in an agent harness, then invoke:\n\n```text\n$mister-clean\n```\n\nThe entrypoint is [SKILL.md](SKILL.md). It routes to focused references only\nwhen the current repository makes them relevant.\n\nFor a closeout expected to span multiple agent turns, the optional\n[persistent orchestration-goal template](templates/orchestration-goal.md) keeps\nthe pay-until-paid loop, no-harm boundary, and terminal condition stable across\ncontinuations. It is not required for invocation and never establishes CLEAN\nby itself.\n\n## Use the MCP server\n\nRun the local stdio server:\n\n```sh\npnpm dlx --package @bradheitmann/mister-clean mister-clean-mcp\n```\n\nOr connect a Streamable HTTP client to:\n\n```text\nhttps://mister-clean.bradheitmann.ai/mcp\n```\n\nThe MCP server is intentionally read-only. It exposes the canonical skill,\nreferences, templates, examples, closeout prompt, and optional persistent-goal\nprompt; the invoking agent does the authorized work locally where repository\npolicy and ownership can be verified.\n\nInstalled CLI, stdio MCP, and the root package-library entrypoint verify their\nexact packaged file surface before becoming usable. The separately exported\nlocal control-plane bytes are included in the package manifest and claim scope,\nand have their own source, built-package, and packed-consumer gates. Its runtime\nfile `./dist/control-plane.js` is not a required entrypoint, and the control-\nplane runtime performs no runtime-attestation binding before use. During capsule construction,\nMister Clean verifies the local clean exact tag and records it as\n`claimed_source`. After the capsule is detached, its attestation and receipts\nprove internal byte consistency only: they are not signatures and do not\nauthenticate the Git remote, tag signer, CI run, transport, or capsule origin.\nPublication therefore requires a capsule obtained through an operator-trusted\nchannel. Registry publication, dependency resolution, mode bits, xattrs, and\ntimestamps remain outside the package attestation. The HTTP worker has no\npackage filesystem, so its attestation reports the narrower\n`bundled_content` status and the digest of only the canonical material table\ncompiled into that deployment.\n\n## Use the local control plane\n\nThe package exposes one supported local runtime entrypoint:\n\n```ts\nimport { startLocalControlPlaneRuntime } from \"@bradheitmann/mister-clean/control-plane\";\n```\n\n`startLocalControlPlaneRuntime` is the only runtime value; the declaration\nsurface additionally exports only `LocalControlPlaneRuntimeOptions` and\n`RunningLocalControlPlaneRuntime`.\n\nRun this surface with Bun. It uses `bun:sqlite` and accepts only exact own\ntransport fields for a repository database, bearer token, optional global\ndatabase, Unix socket, and loopback HTTP listener. It is a query and\nstate-admission boundary, not an agent runner: the returned handle reports\n`dispatch_supported: false` and `execution_supported: false`. Route probes,\nevidence verifiers, clocks, stores, services, authenticators, and adapters are\ninternal composition capabilities and cannot be injected through the public\nfunction. Package deep imports are blocked; use only the documented export.\n\nFor retained logical-project alias admission, startup may additionally receive\n`logical_project_registration_receipts`: a bounded list of exact receipt\ndigest/operator pairs. This is a declarative trusted-runtime allowlist, not a\nclient bearer claim or callback. Each registration retains bytes whose\ncanonical content binds that logical project, its physical repository IDs, and\nthe configured actor; an omitted, altered, or unlisted receipt is denied.\n\nThe canonical `runCli` lifecycle accepts one explicitly installed local\nevaluation adapter. At CLI run start it submits an already observed,\nevidence-bound `evaluation.run.start` envelope to loopback control-plane RPC.\nIt does not launch a model, inspect providers or unrelated processes, infer an\nagent identity, or synthesize an outcome. Without this adapter, no activity is\nmonitored and no evaluation event is invented.\n\nThe shipped CLI resolves its machine-local invocation journal under\n`XDG_STATE_HOME/mister-clean/` (or `HOME/.local/state/mister-clean/`), with an\noptional absolute `MISTER_CLEAN_INVOCATION_JOURNAL_PATH` override. It appends\nan identity-unobserved invocation receipt before every accepted hygiene command\nruns, including when it later fails or no evaluator envelope is supplied; only\na retained evaluator start can append a link to an agent run event. A journal\nintegrity or write failure stops the command. Help/version-style input is not a\nhygiene invocation and does not create a receipt. The MCP server exposes\nbundled read-only materials and does not share this hygiene execution path;\nfree-form use of the skill outside the CLI or an explicitly integrated\nlifecycle remains unobservable rather than being represented as machine-wide\nsurveillance.\n\n## Validate a closeout\n\nThe authoritative local validators are exposed through one Node-compatible\nCLI:\n\n```sh\nmister-clean validate report path/to/closeout-report.json\nmister-clean validate manifest path/to/action-manifest.json\nmister-clean validate bundle path/to/closure-bundle.json --repo path/to/live-checkout\nmister-clean audit planning path/to/live-checkout --json\n```\n\nAny live bundle with an executed `git_commit` requires an absolute\n`--accepted-evaluator` path. A live passed/open or crossed/executed\n`closeout_guard` schema-1.3 boundary additionally requires an absolute\n`--guard-authority` path, so that GUARD case supplies both:\n\n```sh\nmister-clean validate bundle path/to/closure-bundle.json \\\n  --repo path/to/live-checkout \\\n  --accepted-evaluator /absolute/path/to/accepted-release.json \\\n  --guard-authority /absolute/path/to/guard-authority.json\n```\n\nThe accepted-evaluator record binds the previously accepted installed release;\nthe guard-authority record binds the current exact candidate or commit, selected\nreceipt seals, chronology, retained precommit authority, and live repository\nstate. Inline copies and the working candidate cannot replace either authority.\nBoth options are valid only for live bundle validation and are rejected with\n`--structural`. Generic action manifests use schema 1.2; every newly prepared\nGUARD closeout is schema 1.3 from initialization while reusing schema-1.2\ncoordination semantics. Initialized/closed GUARD scaffolds require neither\nexternal input; live schema-1.2 open/crossed authority is closed.\n\nThe planning audit is an executable successor-readiness floor. It parses\nMarkdown/MDX YAML frontmatter plus top-level JSON and YAML object records,\ndiscovers both planning directories and exact canonical files such as\n`ROADMAP.md`, `STATUS.md`, `PLAN.md`, `TASKS.md`, `BACKLOG.md`, and `CURRENT.md`,\nand conservatively probes root/docs/reference/spec surfaces for a live\nimplementation status plus implementation sequence. A planning-shaped live\ncontract outside canonical discovery fails until a canonical planning artifact\nprojects its exact path; inactive reference examples remain references.\nIt reconciles physical lanes and current body state, resolves exact child IDs from\nstructured lists and child tables, and groups duplicate projections of the same\nacceptance gate. Malformed structured records, unsupported lifecycle or gate\nstates, contradictory parentage, a bundle-only archive label, missing gates\nafter completed children, and unexecuted or failed acceptance all return\nnonzero. Every planning item must be structurally placed in one verified\nlifecycle/relationship graph or explicitly classified as non-artifact\nguidance with a rationale. A guidance/template/schema label never overrides\nlifecycle, identity, relationship, child-table, or acceptance signals;\nacceptance can be `not_applicable` only with a structured rationale.\nRepository-specific schemas and validators still run in addition to this\nconservative cross-repository gate.\n\nChild references have an explicit semantic role. Normal work artifacts use\n`child_parentage`: a child row resolves to exactly one artifact and creates a\ngraph edge. Artifacts typed `index`, `status_index`, or `rollup` use\n`rollup_projection`: every row must still resolve uniquely and match current\nstate, but it never becomes a second parent. A repository-specific artifact\nmay override the default with `relationship_role: child_parentage` or\n`relationship_role: rollup_projection` plus a\n`relationship_role_rationale`; unsupported, conflicting, ambiguous, or\nunexplained overrides fail closed. Built-in hierarchy and rollup types have\nimmutable roles, so a rationale cannot relabel a story/task as an index or an\nindex as a parent. Rollups recognize canonical work-item target columns; a\nrepository-specific column requires `rollup_target_column` and\n`rollup_target_column_rationale`; a custom parent table uses\n`child_target_column` and `child_target_column_rationale`. A state-bearing\nrelationship table with no recognized or declared target column fails closed.\nEvery table row and structured child collection entry must contain one\nresolvable identity; projected states must be recognized and coherent.\nCamelCase and snake_case record keys share the same schema. Ordinary hierarchy\nartifacts may exempt a checklist/decision-table target column with\n`non_relationship_table_columns` plus\n`non_relationship_table_rationale`; rollup artifacts and canonical\nrelationship/lifecycle columns cannot use that escape.\nArtifact type, identity, lifecycle, role, target, rationale, and `top_level`\naliases are presence-aware: each declared singular alias must contain one\nnonempty scalar and equivalent aliases must agree. Inference or a default is\nallowed only when the corresponding alias is absent. Duplicate JSON keys,\nunsupported state-like aliases, malformed relationship scopes, and compound\nlifecycle prose fail closed. Only the artifact's own typed ID and generic `id`\nestablish its identity, never a parent field. Singular, plural, snake-case, and\ncamel-case child/parent reference aliases are reconciled entry-by-entry;\nparent-reference lifecycle must match the resolved parent.\n\nAcceptance discovery follows supported parent relations recursively through\nstructured records and validates every declared outcome scope; a\n`not_applicable` rationale must be in that exact scope. Structured JSON/YAML is\nnever reinterpreted as prose. Markdown scanning ignores fenced examples and\nHTML comments while still reconciling visible heading and blockquote status\nlabels, acceptance labels, pending review language, and unchecked acceptance\nitems. Nested canonical work declarations and type-unresolved hierarchy aliases\ncannot hide behind generic metadata or non-artifact classification. Unsupported,\nbinary, and symlinked entries inside a discovered planning root fail the\nstandalone audit; a CLEAN bundle must include every live entry and explicitly\nclassify unsupported regular files as reasoned non-artifacts.\n\nThe installed skill resolves the same standalone CLI from its own\n`bin/mister-clean.js`; it never\nassumes the target repository contains Mister Clean tooling. Keep the report,\nmanifest, bundle, and their digest-bound evidence records together under one\nrun directory.\n\n`mister-clean prepare` is the sole producer of new schema-1.5 regression\nevidence. The packaged schema-1.4 JSON remains a structural, NOT CLEAN teaching\ntemplate so it never has to make a self-referential claim about the package\nmanifest that contains it.\n\n### Prepare and pay one debt through the public action lifecycle\n\nPrepare one live CLOSE boundary. The command prints the created bundle\ndirectory:\n\n```sh\nBUNDLE_DIR=\"$(mister-clean prepare \\\n  --repo /absolute/path/to/repository \\\n  --evidence-home /absolute/path/to/private-evidence \\\n  --run-id closeout-001 \\\n  --request-ref request-001 \\\n  --request-source /absolute/path/to/operative-request.txt \\\n  --mode CLOSE)\"\n\nmister-clean validate bundle \"$BUNDLE_DIR/closure-bundle.json\" \\\n  --repo /absolute/path/to/repository\n```\n\nChoose an unresolved `debt_key` from\n`$BUNDLE_DIR/closeout-report.json`, then open the exact action before changing\nthe repository:\n\n```sh\nDEBT_KEY=\"<lowercase SHA-256 debt_key from closeout-report.json>\"\n\nmister-clean action begin \"$BUNDLE_DIR\" \\\n  --id pay-planning-projection \\\n  --debt-key \"$DEBT_KEY\" \\\n  --kind local_edit \\\n  --target planning/done/STORY-17.md \\\n  --purpose \"reconcile the canonical story state\"\n```\n\n`begin` live-validates the existing boundary, obtains exclusive ownership of\nthe evidence home, proves that the full repository object still equals the\nlast boundary, freezes the registered-detector policy, captures detector and\nrepository-native-gate pre-state, and appends a versioned coordination domain,\nowned lane, and planned operation. Make only the declared change, run the\nrepository's normal checks, and commit it so the working tree is clean. Then\nclose the same action:\n\n```sh\nmister-clean action finish \"$BUNDLE_DIR\" \\\n  --id pay-planning-projection \\\n  --status closed\n```\n\n`finish` captures the new full repository object, reruns every frozen\nregistered detector and the repository-native gates, derives causal regression\naccounting from their exact outputs, updates the report, manifest, regression\nledger, change inventory, successor projections, and bundle digests as one\nlive-validated transaction. It refuses `closed` when the target debt remains\nunpaid, an action-introduced observation remains open, a declared target does\nnot cover every changed path, or a required native gate was weakened.\n\nUse `--status interrupted` only when comparator evidence proves an open\naction-introduced observation; the resulting failed action and blocked lane\nremain the final NOT_CLEAN boundary. The current regression schema cannot\nhonestly encode a zero-observation interruption, so that case remains open for\ncontinued repair rather than manufacturing a debt record.\n\nThe generic lifecycle supports `local_edit`, `local_move`,\n`recoverable_delete`, `format`, `generate`, `doc_update`, `git_commit`,\n`historical_conform`, and `handoff_update`. It rejects\n`planning_record_update`, `git_integrate`, `git_push`, and `agent_dispatch`\nbecause those operations require their dedicated projection, CAS/mutex, push,\nor dispatch receipts; a generic command must not fabricate them.\n\nRun the full project check before proposing a release:\n\n```sh\npnpm install --frozen-lockfile\nbun run ci:check\n```\n\nThe public `build` / `build:verified` command is verification-only: it rebuilds\nthe candidate in a private external capsule and compares the required generated\noutputs byte-for-byte. It never follows a successful private proof with a\nsecond mutating build in the source checkout, and a failed proof cannot leave\nhalf-written source outputs behind.\n\nDevelopment runtime, builds, tests, source-mode CLI, and the local control plane\nuse Bun 1.4.0. Dependency resolution, package consumption, and registry\npublication use pnpm 11.0.3; npm is not part of the toolchain. The published\nCLI, stdio MCP entrypoint, and root `.` package export execute on Node.js 22 or\nnewer.\n\nOn the final clean tagged checkout, `bun run release:check` produces and tests\none retained Bun-generated, read-only archive. Publish only that receipt-bound\narchive with the receipt's `publish_release_archive.mjs` command. Verification\nand publication each acquire the caller-named archive once, close that source\ndescriptor, and perform parsing, extraction, installation, hashing, and the\nfixed `pnpm publish --access public` invocation only against one private\nread-only custody copy of those exact bytes. Release builds also run with home,\ntemporary, Git, Bun, pnpm, and XDG state rebased under the external capsule;\nambient credentials, proxies, hooks, source-directory markers, and code-injection\noptions are not inherited. Never repack between verification and publication.\nExactly one authorized publication lane may operate for a package name and\nversion.\n\n## Public-safety boundary\n\nThe public distribution contains generalized doctrine and synthetic examples.\nPrivate case studies, local paths, credentials, project names, and operational\nevidence do not belong in this repository or its Git history.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}