{"_id":"@bytesbrains/pi-review-gate","_rev":"3-e3613e7becc558602bc4f35f957e306c","name":"@bytesbrains/pi-review-gate","dist-tags":{"latest":"1.1.4"},"versions":{"1.1.2":{"name":"@bytesbrains/pi-review-gate","version":"1.1.2","keywords":["pi-package","pi-extension","governance","ci","code-review","merge-gate","breaking-changes"],"author":{"name":"nandal","email":"nandal@users.noreply.github.com"},"license":"MIT","_id":"@bytesbrains/pi-review-gate@1.1.2","maintainers":[{"name":"nandal","email":"sandeep@nandal.in"}],"homepage":"https://github.com/nandal/pi-ext/tree/main/review-gate","bugs":{"url":"https://github.com/nandal/pi-ext/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"4b1a4356016e459a5bc06318b87f263429131432","tarball":"https://registry.npmjs.org/@bytesbrains/pi-review-gate/-/pi-review-gate-1.1.2.tgz","fileCount":12,"integrity":"sha512-3g7RHfhfO6hzEbWvWONeWnqJul9aMrIHvkBMhjnfKLmicNCtEC+hJ8xmxpx9LAmVus0TNkoe5JbO7nuLGWn2xw==","signatures":[{"sig":"MEYCIQDglZaBjM4QfWTOAlhAbjjtaEPW+jvxX7ztJZ1aEyUzwgIhAN6vxOKNNXBiqcHBlDdzZvfj/MdtDPrrkWFda32uK1fK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31870},"main":"./src/index.ts","engines":{"node":">=18"},"gitHead":"1fca2cfdcbdf155b60d39efd9495773b47cb49a1","scripts":{"test":"vitest run","test:watch":"vitest"},"_npmUser":{"name":"nandal","email":"sandeep@nandal.in"},"repository":{"url":"git+https://github.com/nandal/pi-ext.git","type":"git","directory":"review-gate"},"_npmVersion":"11.3.0","description":"CI-level merge guardian for AI agents — required reviewers, breaking change detection, stale PR cleanup, and review automation.","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-review-gate_1.1.2_1778871427215_0.8298702886116367","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@bytesbrains/pi-review-gate","version":"1.1.3","keywords":["pi-package","pi-extension","governance","ci","code-review","merge-gate","breaking-changes"],"author":{"name":"nandal","email":"nandal@users.noreply.github.com"},"license":"MIT","_id":"@bytesbrains/pi-review-gate@1.1.3","maintainers":[{"name":"nandal","email":"sandeep@nandal.in"}],"homepage":"https://github.com/nandal/pi-ext/tree/main/review-gate","bugs":{"url":"https://github.com/nandal/pi-ext/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"070a1b764c780e5bb1eebeee02f56674213e3319","tarball":"https://registry.npmjs.org/@bytesbrains/pi-review-gate/-/pi-review-gate-1.1.3.tgz","fileCount":12,"integrity":"sha512-plcSVOmYiBBIPZcHgRrrH6hlla7SSgk+rec9gv3+w5X8YVVTFz04stF4qt6H5oO9wlX10Q6Cy8Ip+LL575l4GQ==","signatures":[{"sig":"MEQCIDU2tzHQ+VP3D+6EAy7H+J4zDhjF/J76QDksiOvVpI+5AiBS9oT6ARusfEedLMzpMzSbfDVg3602GGu4Ji9hEjBTSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32423},"main":"./src/index.ts","engines":{"node":">=18"},"gitHead":"e4e2429e2adc1b2e9efcd229763481f5f1707c58","scripts":{"test":"vitest run","test:watch":"vitest"},"_npmUser":{"name":"nandal","email":"sandeep@nandal.in"},"repository":{"url":"git+https://github.com/nandal/pi-ext.git","type":"git","directory":"review-gate"},"_npmVersion":"11.3.0","description":"CI-level merge guardian for AI agents — required reviewers, breaking change detection, stale PR cleanup, and review automation.","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-review-gate_1.1.3_1779068955954_0.0396904372897704","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@bytesbrains/pi-review-gate","version":"1.1.4","description":"CI-level merge guardian for AI agents — required reviewers, breaking change detection, stale PR cleanup, and review automation.","keywords":["pi-package","pi-extension","governance","ci","code-review","merge-gate","breaking-changes"],"author":{"name":"BytesBrains Pte Ltd","url":"https://bytesbrains.com"},"repository":{"type":"git","url":"git+https://github.com/bytesbrains/pi-review-gate.git"},"homepage":"https://github.com/bytesbrains/pi-review-gate#readme","bugs":{"url":"https://github.com/bytesbrains/pi-review-gate/issues"},"license":"MIT","main":"./src/index.ts","engines":{"node":">=18"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*","typebox":"*"},"pi":{"extensions":["./src/index.ts"]},"scripts":{"test":"vitest run","test:watch":"vitest"},"devDependencies":{"vitest":"^2.1.9"},"_id":"@bytesbrains/pi-review-gate@1.1.4","gitHead":"2bbe14005e5bec45aaed80d3d0d07f08bfd033c1","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-iRLjq4wgIBCH8KVwfZGU6l6HK1j2qXw3d2/5UtIu/zSG9iJdO/NVb0Xude18LQuR1O2j22y8XnzZ1ZrxeSpi5w==","shasum":"a254ff9f7ec729d87d92c6847380658a0aebfb6a","tarball":"https://registry.npmjs.org/@bytesbrains/pi-review-gate/-/pi-review-gate-1.1.4.tgz","fileCount":12,"unpackedSize":32611,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBDNSzPiiYsrNV5/5losUR8U6P4V9wc5J8jZ6eUni0q0AiEAuQlsyv2YSodA3l9l5HXVU7Hyz6sJQk1A+vic7jrbGOs="}]},"_npmUser":{"name":"nandal","email":"sandeep@nandal.in"},"directories":{},"maintainers":[{"name":"nandal","email":"sandeep@nandal.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-review-gate_1.1.4_1783472802603_0.7545511073786346"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-15T18:57:07.077Z","modified":"2026-07-08T01:06:42.875Z","1.1.2":"2026-05-15T18:57:07.409Z","1.1.3":"2026-05-18T01:49:16.099Z","1.1.4":"2026-07-08T01:06:42.732Z"},"bugs":{"url":"https://github.com/bytesbrains/pi-review-gate/issues"},"author":{"name":"BytesBrains Pte Ltd","url":"https://bytesbrains.com"},"license":"MIT","homepage":"https://github.com/bytesbrains/pi-review-gate#readme","keywords":["pi-package","pi-extension","governance","ci","code-review","merge-gate","breaking-changes"],"repository":{"type":"git","url":"git+https://github.com/bytesbrains/pi-review-gate.git"},"description":"CI-level merge guardian for AI agents — required reviewers, breaking change detection, stale PR cleanup, and review automation.","maintainers":[{"name":"nandal","email":"sandeep@nandal.in"}],"readme":"# Review Gate for Pi\n\n[![npm version](https://img.shields.io/npm/v/@bytesbrains/pi-review-gate)](https://www.npmjs.com/package/@bytesbrains/pi-review-gate)\n[![license](https://img.shields.io/npm/l/@bytesbrains/pi-review-gate)](./LICENSE)\n\n> CI-level merge guardian for AI agents — required reviewers, breaking change detection, stale PR cleanup, and review automation. **Agents don't `git merge` — CI merges only after all gates pass.**\n\n## Philosophy\n\n`pi-contrib-gate` handles the *contribution* side (branch → commit → PR).\n`pi-review-gate` handles the *review* side (check → approve → merge).\n\nCore enforcement runs in Gitea Actions — agents **cannot bypass** these gates.\n\n## Install\n\n```bash\npi install npm:@bytesbrains/pi-review-gate\n```\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `review_check(pr_number)` | Check PR merge readiness — CI, reviewers, breaking changes, staleness |\n| `review_approve(pr_number, comment)` | Submit an approval review |\n| `review_request(pr_number, reviewers)` | Request reviewers by username |\n| `review_status(pr_number)` | Show detailed review + CI status |\n| `review_close_stale(pr_number, reason)` | Close stale PR with comment |\n\n## Safety Intercepts\n\nThe gate **passively monitors** all `bash` tool calls and:\n\n- ⛔ Blocks `git merge` — directs agents to use review tools instead\n- ⚠️ Warns on `gh pr close` or branch deletion\n\n## Review Gates (CI-enforced)\n\nThese run in Gitea Actions — agents cannot skip them:\n\n| Gate | Config | Description |\n|---|---|---|\n| CI green | `quality.*` in .contribrc.yml | lint, test, build, doctor audit |\n| Required reviewers | `requiredReviewers.*` in .reviewrc.yml | Path-based required reviewer mapping |\n| Breaking change detection | `breakingChangePatterns` | API surface changes flagged for human review |\n| Stale PR closure | `staleDays` | Auto-close PRs inactive past threshold |\n| Protected paths | `protectedPaths` | Modifications to CI, agents, Docker → human review |\n| Model diversity | `minDiverseReviews` | Different model families must review (from #42) |\n\n## Configuration\n\nCreate `.reviewrc.yml` in your project root:\n\n```yaml\n# Required reviewers by path pattern\nrequiredReviewers.factory/**: factory-admin\nrequiredReviewers.agents/**: agent-owner\nrequiredReviewers..gitea/**: ci-admin\n\n# Stale PR threshold (days)\nstaleDays: 14\n\n# Minimum distinct model families that must review (0 = disabled)\nminDiverseReviews: 1\n\n# Paths that always require human review\nprotectedPaths: .gitea/workflows/,docker-compose.yml,Dockerfile,agents/,factory/package.json\n\n# Patterns that signal API-breaking changes\nbreakingChangePatterns: export interface,export type,export function,export class,BREAKING CHANGE:\n```\n\n> Tip: Start with `staleDays: 14` and `minDiverseReviews: 0` during adoption, then tighten.\n\n## Workflow\n\n```\ncontrib_submit() from @bytesbrains/pi-contrib-gate\n  │\n  ▼\nPR opened on Gitea\n  │\n  ▼\nCI runs (lint, test, build, doctor audit)\n  │\n  ▼\nreview_check(pr_number)        ← agent checks readiness\n  │\n  ▼\nreview_request(pr_number, ...)  ← request specific reviewers\n  │\n  ▼\n[reviewer approves]\n  │\n  ▼\nreview_check(pr_number)        ← re-check: all green? required reviewers satisfied?\n  │\n  ▼\nCI auto-merges (squash)        ← only CI can merge\n  │\n  ▼\nPR closed, branch deleted\n```\n\n## Stale PR Cleanup\n\nPRs older than `staleDays` (default 14) are flagged. A CI scheduled job can auto-close them:\n\n```bash\n# Runs nightly in Gitea Actions\nreview-gate-stale.sh --repo factory/wrok.in --days 14\n```\n\n## Breaking Change Detection\n\nEvery CI run diffs against the base branch and scans for:\n- `export interface` / `export type` / `export function` / `export class` additions\n- `BREAKING CHANGE:` in commit messages\n\nIf detected, CI adds a `⚠️ breaking-change` label and requires human review.\n\n## Integration with @bytesbrains/pi-contrib-gate\n\nThe two gates work together:\n\n```\npi-contrib-gate          @bytesbrains/pi-review-gate\n     │                        │\n     │  contrib_start_work    │\n     │  contrib_propose       │\n     │  contrib_submit  ────→ PR created\n     │                        │\n     │                        │  review_check\n     │                        │  review_request\n     │                        │  review_approve\n     │                        │  [CI enforcement]\n     │                        │  auto-merge (squash)\n```\n\nInstall both for full agent governance:\n\n```bash\npi install npm:@bytesbrains/pi-contrib-gate\npi install npm:@bytesbrains/pi-review-gate\n```\n\n## License\n\nMIT © [nandal](https://github.com/nandal)\n\n---\n\nBuilt and maintained by [BytesBrains](https://bytesbrains.com) — AI automation & agents, engineered to production standards.\n*The model proposes, code guarantees.*\n","readmeFilename":"README.md"}