Free ADR checker

Is your ADR enforceable as written?

Paste one architecture decision record (ADR). The checker sorts each statement into one of three results: Mneme-ready (a rule Mneme can check), Requires modelling (a firm rule that needs a typed form first) or Guidance (advice, not a rule).

Mneme is an open-source tool that turns approved ADRs into checks that guide, warn or block AI coding agents and CI. The checker uses the same deterministic engine as Mneme's Architecture Audit. Free, no signup.

Check one ADR

Mneme's server classifies your text and deletes it when the check finishes. It stores nothing and calls no AI model. The page sends aggregate usage to Google Analytics, without your text: that a check ran, how long it took and how many statements fell in each result. What happens to your text

What the three results mean

Mneme-ready
The checker found a FORBID_LITERAL rule for the statement: exact text that must not appear in the files the rule covers. The ADR either declares the rule, or names the term in quotes so the engine can propose it. Plain prose rarely gets here. The rule is checked once the ADR is in your repository and Mneme runs there.
Requires modelling
The statement is a firm rule, using words like "must", "never" or "do not", but the checker found no FORBID_LITERAL rule in it. Most firm rules in plain prose land here, even when they name the thing they forbid.
Guidance
The statement reads as advice, a goal or context, using words like "should", "prefer" or "aim to". A blocking check on advice would stop changes the team meant to allow, so Mneme does not enforce it. A Mneme-format ADR whose decision declares no typed rule also comes back Guidance.

How to make a rule Mneme-ready

Mneme enforces typed rules written in an ADR, not sentences. The one type this checker reports as Mneme-ready is FORBID_LITERAL, which names exact text that must not appear in the files it covers. To add one, write the ADR in Mneme format: YAML frontmatter with id, title, status, priority and date, the decision, then a Constraints section with one line per rule, written exactly as - FORBID_LITERAL: term.

---
id: ADR-007
title: Persistent storage
status: accepted
date: "2026-10-30"
priority: foundational
scope: storage
---

## Decision
The service must not use sqlite for persistent data.

## Constraints
- FORBID_LITERAL: sqlite

Paste this version and the rule comes back Mneme-ready. A literal rule blocks the term itself, not the condition around it, so "for persistent data" is not part of it. The guide How to turn an ADR into an enforceable decision shows how to limit a rule to some paths and run it with mneme check.

Why you will never see Protected here

In the Architecture Audit, Protected means the repository's own ADR declares a FORBID_LITERAL rule. This checker sees only the text you paste, not your repository, so the furthest it goes is Mneme-ready. To see which decisions in a repository are Protected, run the Architecture Audit on it.

Which ADRs it reads

Paste one ADR at a time, in Markdown, up to 64 KB. We tested the checker with three formats:

  • Nygard-style ADRs, with Status, Context and Decision sections
  • Markdown Architectural Decision Records (MADR), with a Decision section
  • Mneme-format ADRs, with YAML frontmatter that includes id, title, status, priority and date

A Mneme-format ADR is checked as one decision, the way Mneme imports it. Any other ADR is checked one statement at a time, with line numbers. Other formats may give fewer rows.

The checker never sees a file name. With the same engine version, the same text always gets the same result. The result names the version it used.

What happens to the text you paste

  • Your browser sends the text over HTTPS to the Architecture Audit's server on Google Cloud Run.
  • The server writes it to a temporary file, classifies it and deletes the file when the check finishes, whether the check succeeds or fails.
  • Mneme saves neither the text nor the result. There is no link to come back to a result, and nobody at Mneme can look one up.
  • The server's own log line for a check records its size range, status and duration, never the text. Google Cloud Run also keeps standard request logs, including time, URL, status, latency, IP address and browser user agent.
  • The server calls no AI model; the classifier is deterministic.

The page sends three events to Google Analytics, without your text: check started, check finished and check failed. A started check carries its size range and a failed one an error code. A finished check carries its duration, the count per result, the count of unread lines, and whether a rule was reported as Mneme-ready instead of Protected. No statement, rule or heading from your text is sent. See Security and data handling and the privacy policy.