PR-level quality intelligence: drift detection, staleness alerts, merge readiness scoring.
- Safe auto-merge (
pqi auto-merge) with configurable safeguards - Auto-request scope clarification (
pqi clarify) when drift crosses threshold - Review-this-first prioritization (
pqi prioritize) by urgency/impact - AI-style description improvement (
pqi improve-desc) and from commits (pqi desc-from-commits) - Zero-wait merge support for trivial changes (docs/typo fast-path)
- PR URL checker (
pqi check <pr-url> [--input pr.json]) - Trend graph (
pqi trends) for merged PRs/week
- Pre-submit drift warning (
pqi precheck) with threshold and actionable output - Self-healing auto-pings (
pqi ping) for PRs nearing stale threshold, includes PR links - AI summary digest (
pqi summary) grouped by urgency: stale / high drift / blocked - Commit-level drift highlighting in drift reports
npm install
npm test
# Analyze a PR JSON
node src/cli.js analyze pr-data.json
# Pre-submit check (non-zero exit if threshold exceeded)
node src/cli.js precheck pr-data.json --threshold 0.4
# Reviewer ping payload 3 days before stale (stale=5)
node src/cli.js ping prs.json --stale-days 5 --warn-before 3
# AI summary digest
node src/cli.js summary prs.json --threshold 0.4Use this in pre-push or CI to warn before submission:
node src/cli.js precheck pr-data.json --threshold 0.4When drift exceeds threshold, output includes:
This will increase drift to X%- actionable hint to split unrelated commits/files
Both ping and summary can post to webhook:
node src/cli.js ping prs.json --webhook https://hooks.slack.com/services/...
node src/cli.js summary prs.json --webhook https://hooks.slack.com/services/...- Drift Detection — Measures scope deviation from original intent
- Staleness Alerts — Detects stale and pre-stale PRs
- Merge Readiness Score — Description, CI, conflicts, size, approvals
- Urgency Digest — Manager-friendly grouped summary
import { analyzeDrift, extractIntent } from './src/drift.js';
import { findPreStalePRs, buildReviewerPingPayload } from './src/staleness.js';
import { generateAISummary } from './src/summary.js';Built with the Project Factory methodology