1.8 KiB
AGENTS.md
Operating rules for anyone working in this repo, human or agent. The project:
a GNU AutoTools replacement in C that reads a KDL build file and emits a
POSIX-sh ./configure. Yes, the name is the joke. The rules below are not.
1. C23 only
Write C23 (ISO/IEC 9899:2024). Compile with -std=c23 and -Wall -Wextra -Wpedantic. Never target C20 (it does not exist as a ratified standard), never
use C2y (the next draft). The build breaks on anything else.
2. Vendoring: thirdparty/ only, license + pinned SHA
Every third-party library is vendored in-tree under thirdparty/<name>/, with
all three of:
- the upstream
LICENSEfile (never omitted, never stubbed), - an
UPSTREAMfile recording the source URL and the pinned upstream commit SHA, - a row in the
thirdparty/README.mdprovenance table (name, version, license, SHA).
No git submodules. If it is not vendored this way, it does not exist.
3. Tests: TDD, make check + tests/run.sh
- Unit tests use the vendored single-header C test framework and run via
make check. - Shell integration tests live in
tests/*.shand are invoked bytests/run.sh, asserting exact exit codes and grep-able output markers. - TDD workflow: write the test alongside the code. Implementation + test is one unit of work, never separated.
4. Generated configure scripts: POSIX-sh only
The emitted ./configure must run unmodified under dash, bash, and zsh.
Banned constructs, no exceptions:
[[ ]]- arrays
local==(use=with[, orcase)<<<&>
set -e IS POSIX, but it is avoided by policy in generated scripts because its
failure semantics vary across shells. Do not rely on it; make the script fail
explicitly. dash is the strict oracle: dash -n must pass on everything we
generate.
For build, test, and commit workflows, see CONTRIBUTING.md.