You push a fix at four on a Friday. By Saturday morning, alerts are ringing. You trace the incident to a pull request merged eighteen hours ago. The branch compiled, the tests passed, but the PR description is blank. No work item links to it. The approval history shows nothing. You are looking at a ghost merge, and now you are spending your weekend cleaning up a mess that should have been caught before it touched main.

Small teams live with this risk every day. You do not have a release manager hovering over every merge. You do not have a platform team building bespoke policy engines. What you have is Azure DevOps, and its built-in branch policies are a blunt instrument. They either slam the door shut or swing wide open. Require two reviewers and you block urgent hotfixes. Relax the rules and empty descriptions fly into production alongside unticketed changes. There is rarely a middle ground.

That gap is exactly why we built Gatekeeper. It is an AI-powered PR review desk designed specifically for Azure DevOps, but forget everything you assume about modern developer tools. There is no Docker container, no subscription plan, and no cloud deployment pipeline. Gatekeeper is a single HTML file. You open it in your browser, punch in four values, and press a button. The tool then answers three simple questions: Is this PR linked to a ticket? Did a human actually review it? And is the code quality any good?

The decision to package everything into one self-contained file was not a gimmick. It solves real operational headaches. First, there is zero infrastructure to host or pay for. You are not provisioning an App Service or worrying about egress costs. Second, credentials never leave your machine. Your Azure DevOps personal access token sits in browser memory only, and vanishes the moment you refresh the page. There is no database of secrets to leak and no OAuth server to trust. Third, adoption becomes frictionless. You do not need to onboard anyone through a wiki. You attach the file to an email or drop it in a Slack thread. The recipient opens it and starts reviewing immediately.

The Fact Layer: Determinism First

Gatekeeper splits its review into two distinct layers, and that separation is the backbone of its reliability.

The first layer is pure JavaScript talking directly to the Azure DevOps REST API. It checks facts that do not change. Either a pull request links to a work item, or it does not. Either a reviewer has cast an approval vote, or they have not. The description is either empty, or it contains actual sentences. Active discussions are either resolved, or they are still hanging open.

Specifically, the Fact Layer looks for four things:

  • Ticket mapping: Does the PR link to at least one work item?
  • Reviewer sign-off: Did anyone vote to approve, or is the count still zero?
  • Description quality: Is the description empty, or just a thin placeholder?
  • Open discussions: Are there unresolved comment threads waiting for a response?

These checks produce visual stamps across the page. A big red NOT MAPPED stamp is hard to ignore. A thin green checkmark tucked into a table cell is easy to miss. We learned early that process failures need to be loud. When a developer is rushing to merge, subtlety does not work. The Fact Layer exists to remove ambiguity entirely.

Because this layer relies on deterministic API responses, its accuracy is absolute. If the stamp says NO APPROVAL, you can bet that no one clicked the approve button. If it says UNRESOLVED THREADS, the conversation is still live. This layer does not