Decisions
0021. The rulebook is CONTRIBUTING.md
CONTRIBUTING.md is the rulebook for humans and for AI agents; ARCHITECTURE.md tells how the runner works; AGENTS.md is short, holds the rules for agents only, and imports the two other files.
Status
Accepted.
Date
2026-10-20.
Context
AGENTS.mdheld 873 lines (821 lines that are not blank). It mixed two kinds of text: the rules (the toolchain, the commands, the rules for code, the purity rules, the docs, the versions and the release process) and the narrative of how the runner works (the modules, the keys, the components, the layers, the viewports and the text flow).- GitHub shows
CONTRIBUTING.mdto a first contributor: the page of a new issue and of a new pull request links to it.CONTRIBUTING.mdwas only a short form that sent the reader toAGENTS.md. - Agent tools read
AGENTS.md. Claude Code readsCLAUDE.md, which holds one line,@AGENTS.md, and it follows such@imports.
Decision
- Three files at the root of the repository.
CONTRIBUTING.mdis the rulebook, for humans and for AI agents. It starts with a quick path: set up, check a change, write docs, the release notes, the marks, the bench, report a problem. Each part links to its full section. The full sections follow. They moved fromAGENTS.mdwith the same text and the same marks: "Toolchain", "Daily commands", "UI architecture and API design", "Rules for code", "Purity", "Docs", "Benchmarks", "Dependencies and versions", "Branch and tag rules", "Compatibility and versioning" (it was "Compatibility") and "Releasing".- "Compatibility and versioning" adds two procedures: how to choose the next version of a module, and the pull request after a release.
ARCHITECTURE.mdholds the section "What tui4s is" ofAGENTS.md, with the same text: the module table and how the runner works. A change of behaviour changes it in the same pull request.AGENTS.mdis short (under 60 lines). It tells an agent to read the two other files, and it imports them with the lines@CONTRIBUTING.mdand@ARCHITECTURE.md. It holds the rules for agents only: the marks, no terminal UI in the shell of an agent, one sbt process for each build root, the human gate of a release, no force push, no model name, ASD-STE100, the file to update for a change of behaviour or of process, and the skills.- The import chain:
CLAUDE.md(@AGENTS.md), thenAGENTS.md(@CONTRIBUTING.md,@ARCHITECTURE.md). Claude Code loads the three files. Another agent readsAGENTS.md, and its first sentence names the two other files. - No sentence is lost. A script compared each line of the old
AGENTS.mdthat is not blank with the three files. Only the old title, the old intro, the old title "Compatibility" and the docs row of the module table (with its mark) changed on purpose. - The page "Contributing" of the docs site is the quick path, with links to the three files on GitHub. It does not copy the rules.
- A reference that names a rule of today names
CONTRIBUTING.mdorARCHITECTURE.md. A reference in an older record or in a mark that tells the past keepsAGENTS.md.
Alternatives considered
- One file,
CONTRIBUTING.md, with everything (option a). Rejected: a human who fixes a typo scrolls past the architecture. AGENTS.mdas the source andCONTRIBUTING.mdas the short form (option c, the state before this record). Rejected: the rulebook was invisible to humans on GitHub.- The docs site as the only rulebook (option d). Rejected: an agent needs the rules in the checkout, also offline.
Consequences
- Good: GitHub shows the rulebook to a first contributor, and the quick path comes first.
- Good: the narrative of the runner has its own file, so a change of behaviour has one clear place to document.
- Good: an agent gets the same rules as a human through the import chain, plus the rules for agents only.
- Bad: three files instead of one. A change must find the right file;
AGENTS.mdtells which file a change of behaviour or of process updates. - Bad: an agent tool that does not follow
@imports reads only the shortAGENTS.md. It must read the two files that the first sentence names. - Bad: the older records keep
AGENTS.mdwhere they tell the past, so a reader can see both names.
References
0020. Release from the Actions form
A release starts from the form of the workflow Release on main; every check runs before a tag exists; one approval of the environment publishes all the modules of the run in the order of the dependencies; CHANGELOG.md is the one source of the release notes.
0022. The logo is text
The ASCII logotype of the maintainer is the logo of tui4s, and its 4 is the isomark. One script makes all the logo assets from the text file, and CI checks them.