{
  "markdown": "# MergeWarden\n\n[![Release](https://img.shields.io/github/v/release/sjh9714/mergewarden?label=release)](https://github.com/sjh9714/mergewarden/releases)\n[![CI](https://github.com/sjh9714/mergewarden/actions/workflows/ci.yml/badge.svg)](https://github.com/sjh9714/mergewarden/actions/workflows/ci.yml)\n[![MergeWarden](https://github.com/sjh9714/mergewarden/actions/workflows/mergewarden.yml/badge.svg)](https://github.com/sjh9714/mergewarden/actions/workflows/mergewarden.yml)\n[![License](https://img.shields.io/github/license/sjh9714/mergewarden)](LICENSE)\n\nSee which pull requests need context before code review.\n\nPaste a public GitHub repository. MergeWarden surfaces missing issue links,\nthin descriptions, skipped templates, and oversized changes. No login. No AI.\n\n## Review a public repository\n\n[**Open the public review queue**](https://sjh9714.github.io/mergewarden/)\n\nThe [getting started guide](docs/getting-started.md) explains queue states,\ndetailed PR results, and the Action install path.\n\nPaste `owner/repository` or a full GitHub repository URL. The browser reads the\nlatest thirty open pull request summaries, removes trusted repository roles,\nbase repository branches, and known maintenance automation, then loads details\nfor at most ten external pull requests.\n\nRows are ordered by deterministic facts a maintainer would otherwise check\nbefore reading code.\n\n| Fact             | What it means                                                                 |\n| ---------------- | ----------------------------------------------------------------------------- |\n| No linked issue  | The body has no issue number, issue URL, or closing keyword                   |\n| Thin description | The body has fewer than 80 characters of prose                                |\n| Template unused  | The repository has a visible PR template structure that the body did not keep |\n| Oversized        | The change exceeds 50 files or 1,500 changed lines                            |\n\nFirst contribution is shown as context and never used as a score. MergeWarden\ndoes not call a contribution spam, low quality, or AI generated. It never\ncloses, labels, scores, or comments on a pull request.\n\nThe queue uses public metadata and the base branch pull request template. It\ndoes not fetch changed file contents, execute code, use a backend, or store the\ntarget.\n\nFor a larger authenticated queue, use the CLI.\n\n```bash\nGH_TOKEN=... npx --yes mergewarden@0.10.4 triage owner/repository\n```\n\n## Run the detailed PR risk scan\n\nThe same page accepts a full pull request URL or `owner/repository#number`.\nEvery queue row links to this detailed scan.\n\nThe detailed scan checks four security boundaries.\n\n| Check                   | What deserves review                                                                             |\n| ----------------------- | ------------------------------------------------------------------------------------------------ |\n| Workflow permissions    | A workflow gains write access, uses a dangerous trigger, or depends on a moving Action reference |\n| Agent instructions      | A PR changes `AGENTS.md`, `CLAUDE.md`, `.mcp.json`, or another file that steers coding agents    |\n| Untrusted prompt inputs | Pull request text reaches an agent prompt in a workflow                                          |\n| Install scripts         | A package manifest adds or changes install-time lifecycle code                                   |\n\nThe [configuration reference](docs/configuration.md) lists every deterministic\nrule and severity.\n\nRun the same scan from a terminal without cloning the target repository.\n\n```bash\nnpx --yes mergewarden@0.10.4 scan https://github.com/owner/repository/pull/123\n```\n\n## Add the Action\n\nThe Action automates the detailed PR risk check. It does not order the review\nqueue.\n\nCreate `.github/workflows/mergewarden.yml`.\n\n```yaml\nname: MergeWarden PR Risk Check\n\non:\n  pull_request:\n\npermissions:\n  contents: read\n  pull-requests: write\n\njobs:\n  mergewarden:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: sjh9714/mergewarden@v0.10.4\n        with:\n          comment: auto\n```\n\n`comment: auto` stays quiet when there is nothing actionable and updates one\ncomment when a finding needs attention. Existing Action defaults are unchanged.\n\nFor an immutable install, pin the release commit.\n\nMergeWarden does not publish or recommend a mutable `v0` tag.\n\n```yaml\n- uses: sjh9714/mergewarden@d63b4fc8c09c540375f039ecd30d2fce56abf31f\n```\n\n## Safety boundaries\n\n- The web app talks directly to the public GitHub API and has no telemetry.\n- The queue reads metadata and one base branch template. The detailed scan reads\n  only the files required by deterministic rules.\n- No checkout. MergeWarden does not execute pull-request code in the web app or\n  Action.\n- Policy comes from the exact base commit, never the untrusted PR head.\n- Analysis never calls a language model.\n- Incomplete evidence is reported as incomplete and never presented as a pass.\n\nRead the [security model](docs/security-model.md) and\n[evidence model](docs/evidence-model.md) for the full trust boundary.\n\n## Evidence and advanced interfaces\n\n[Does triage help?](docs/study/does-triage-help.md) records the existing queue\nmeasurement and its main limit. It measured whether rows discriminate, not\nwhether maintainers save time. The current web queue remains a product\nexperiment until maintainers confirm that value.\n\nThe [documentation index](docs/README.md) includes configuration, Action and\nCLI references, coding-tool integrations, reproducible studies, and the\n[MCP server](packages/mcp/README.md).\n\n## Contributing\n\n```bash\npnpm install --frozen-lockfile\npnpm build\npnpm test\npnpm typecheck\npnpm lint\npnpm format:check\n```\n\nEvery new rule needs a passing fixture, a failing fixture, and a report\nsnapshot. See the [contribution guide](CONTRIBUTING.md).\n\n[简体中文](README.zh-CN.md)\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 5930,
  "sha": "9878d5243b62f713a1e870d227297f0b752d703599cfcb5a1a72f8c5553a872a",
  "repo_slug": "sjh9714/mergewarden",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sjh9714_mergewarden_e37f564e/readme"
}