%% SCRAP: scratch/AGENTS %% SOURCE: docs/working/scratch/AGENTS.md %% STATUS: HISTORICAL %% FITS: none %% EDITORIAL: lifted — prose rewritten to press voice \section{Repository Guidelines for Contributors} This document records the contributor guidelines that were in effect during active development. It is preserved as a historical record of coding and workflow conventions. See \texttt{.claude/CLAUDE.md} for the current authoritative reference. \subsection{Project Structure} \texttt{src/} holds the VM core; \texttt{src/platform/} handles host glue and timing; \texttt{src/word\_source/} groups FORTH words by domain using the \texttt{\_words.c} pattern with matching headers in \texttt{src/word\_source/include/}. \texttt{include/} is the public boundary; keep helpers and private state in \texttt{src/} to avoid symbol drift. \texttt{src/test\_runner/} holds the in-process harness and module suites. The \texttt{build/} directory is disposable output. \subsection{Build and Development Commands} \begin{itemize} \item \texttt{make} — default optimized build; binary in \texttt{build//standard/starforth}. \item \texttt{make fastest} — release build with LTO/asm fast paths; use for performance validation. \item \texttt{make debug} — \texttt{-O0 -g}; run \texttt{make clean} before switching profiles. \item \texttt{make test} — full harness via piped BYE. \item \texttt{make bench} — microbench; helpful before pushing hot-path changes. \end{itemize} \subsection{Coding Style} Strict ANSI C99, four-space indentation, same-line braces. Use \texttt{snake\_case} for functions and variables, uppercase for macros, and \texttt{g\_} prefixes for file-scoped statics. Exported APIs in \texttt{include/} carry concise doc headers; internals default to \texttt{static}. All builds must be warning-clean (\texttt{-Wall -Wextra -Werror}). Gate new behavior behind existing flags. \subsection{Testing} Add suites in \texttt{src/test\_runner/modules/} with a \texttt{run\_\_tests} entry; register in \texttt{test\_runner.c}. Run \texttt{make test} before all pull requests. When touching public APIs or hot paths, add coverage alongside the change and note performance measurements. \subsection{Commit and Pull Request Guidelines} Sentence-style subjects under 72 characters, narrowly scoped commits, rationale and key flags in the body. Pull requests must state intent, verification commands (\texttt{make test}, \texttt{make bench}), and any configuration or documentation updates. Do not edit generated assets in \texttt{build/} or hand-edit seeded configs; use existing scripts to regenerate. Flag platform-specific changes early so relevant subsystem reviewers can weigh in. \subsection{Security and Configuration} Treat \texttt{conf/} seeds as shared fixtures — copy before experiments and regenerate via scripts rather than editing in place. Follow existing cleanup/ownership patterns when adding platform code to prevent resource leaks in long-running benchmarks.