ADR-0030: The process RESTest is built with lives outside the repository, and AGENTS.md is the contract it relies on
Status: Accepted, amended on 3 November 2026 Date: 2026-10-09 (amended 2026-11-03)
Context
Section titled “Context”Until October 2026 this repository held, beside the tool, the maintainers' means of building it:
the plan of what came next (ROADMAP.md), a description of their process (increments, supervision
points, the house format of a pull request), and the configuration of the coding agents they work
with — a reviewer agent, two commands and a hook under .claude/ — with about thirty lines of process
inside the CLAUDE.md that also held the project's rules.
That mixture had costs that grew with the project:
- The product's history recorded the process. During 2.0, 60 commits changed
ROADMAP.md, 12CLAUDE.mdand 6.claude/, most of them to adjust how work was done rather than what the tool does. - Contributors were asked for a process they could not follow. The pull-request template asked which increment of the plan a change delivered and whether "the reviewer subagent" had reviewed it, and the documentation sent readers to the plan eleven times.
- The rules spoke to one tool. The project's rules were in
CLAUDE.md, which only one family of coding agents reads. And every Claude Code session here ran a hook: after each edit of a.javafile or apom.xml, the tests of that module ran, offline, whether or not the person wanted it. - The same rules were written in four places:
CLAUDE.md,CONTRIBUTING.md, the reviewer's instructions and the template's checklist.
ADR-0011 had already taken the evaluation harness out of the repository, for reasons of the same kind. The maintainers want the same for development: a process that can change at its own pace, that another team could replace with its own, and a repository about the product.
Decision
Section titled “Decision”The maintainers' plan, their own process, their agent configuration and their reviews of the work
live outside this repository. This repository keeps what is true of the product however it is
built, and states its rules in AGENTS.md.
- What stays here is what a contributor needs to understand, build, test or change RESTest
without anybody's private tooling, and everything a user of RESTest reads: the requirements (the
README, the manual, the reference pages, the known limitations), the design (
docs/DESIGN.md), the decisions (docs/adr/) with the evidence about the product they rest on, the constraints and the tests that enforce them, and the conventions every contributor follows (CONTRIBUTING.mdand the pull-request template). AGENTS.mdholds the project's rules, in the file most coding agents read.CLAUDE.mdis one line that imports it, which is how Claude Code shares one file with other agents. People read the same file.AGENTS.mdis the contract. A development tool, whoever's, may rely on the commands and the files it names and on nothing else. A change to them is a change to RESTest, made in a pull request.- Nothing here names anybody's private tooling: no plugin, marketplace or private repository,
and no path on somebody's machine — in the files of the repository, in its settings, or in the
descriptions of its pull requests, which a merge can carry into
master's history. The decision records are history and keep saying what was used when they were written, this one included. Two files that any user of one coding agent reads stay, because they hold nothing private:CLAUDE.md, which only importsAGENTS.md, and.claude/settings.json, which only denies a few dangerous commands in their usual spelling — pushing tomaster, a forced push, a Maven deploy, reading.envfiles andsecrets/— as a guard rail rather than a guarantee. The list of commands that settings file used to pre-approve (./mvnw, severalgitandghcommands) goes: what to pre-approve is each person's choice, in their own settings. Personal files of a maintainer are ignored through that person's own git configuration, not through.gitignore. - A check that needs no judgement belongs in this build. The documentation checks and the architecture rules stay here. A check that needs a model's judgement belongs to the development tooling, which also keeps every dependency on a model out of RESTest (ADR-0008). Two checks the removed reviewer made by searching — no model library or AI-named type, no idiom carried over from RESTest 1.x — are not tests yet; until they are, a reviewer makes them.
- The scope stays here. What RESTest will not do, and why, is "Out of scope" in
docs/DESIGN.md; the open questions about it are argued in ADR-0017 and its amendments.
Consequences
Section titled “Consequences”- The repository no longer says what will be built next. Somebody who wants to contribute something
large opens an issue first, as in most open-source projects. What the tool does not do yet, which
the plan used to be the only place to say, is in
docs/known-limitations.md. - Records written while 2.0 was built cite its plan, its
CLAUDE.mdand its reviewer: milestone codes such asM1.9, rows ofROADMAP.md. That plan is at the taghistory/2.0-development; records written after the tag cite the plan as it was when this repository last held it, at commit0b17e7b7. The index of the records gives both. Records written from now on cite no plan. - Contributors get the same rules whichever coding agent they use, or none, and no session in this repository runs anything because of where it was opened.
- Claude Code users here are asked for permission where the old settings pre-approved a command, until they choose to allow it in their own settings.
- A tool that relies on something
AGENTS.mddoes not list may break when RESTest changes. That is the tool's to fix; keeping the list short is what makes it a contract. - Which version of the maintainers' tooling produced a pull request is recorded by that tooling, on its side, not in the pull request.
Alternatives considered
Section titled “Alternatives considered”- Keeping the plan here and moving only the agent configuration. A public plan is useful to outsiders, but this one changed with every pull request and named the process at every row. A public summary for users can be written when there is a site to put it on.
- A long-lived branch of this repository for the tooling. ADR-0011 rejected it for the evaluation harness: invisible to the working tree and to CI, left behind, and still inside the repository.
- A submodule holding the tooling. It would make this repository name a private one that its readers cannot open, and every clone would carry a reference it cannot fetch.
- Declaring the maintainers' tooling in the project's
.claude/settings.json. One fewer step for each maintainer, at the cost of this repository naming a private one and asking every clone to install something it cannot reach. - Keeping
CLAUDE.mdas the rules file. It works for one agent;AGENTS.mdworks for most, and the one-lineCLAUDE.mdkeeps Claude Code reading the same rules.
Amendment (3 November 2026): the list of what is out of scope leaves the design
Section titled “Amendment (3 November 2026): the list of what is out of scope leaves the design”Point 6 kept in docs/DESIGN.md a section called "Out of scope": a list of directions RESTest might
take one day, each beside the seam it would use, and the three open questions ADR-0017 raised about
them. The section is gone. The design now describes what is built, and its extension points are the
interfaces of restest-core that have implementations; five of the seams the list relied on had no
code at all. A list of what might be built later says what comes next, which this record already
keeps out of the repository.
Nothing else changes. What the tool does not do yet is in docs/known-limitations.md, something
large still starts with an issue, and the open questions are still argued in ADR-0017. The section as
it last stood is at commit
f2c9f6f8.