- Before changing files, an LLM MUST inspect the current Git branch, working
tree, upstream, and remotes. If the branch is
develop, it MUST first require a clean working tree and updatedevelopfrom its configured upstream with an explicit fast-forward-only pull. It MUST verify the pull succeeded, then create and switch to a new task branch withgit switch -c <type>/<task> develop. A divergence, missing upstream, failed pull, or dirty tree MUST stop this automatic flow instead of being resolved implicitly. If the initial branch is notdevelop, the LLM MUST stop and ask the user how to proceed; it MUST NOT switch branches, pull, rebase, or choose a different base without that decision. - User-data preservation takes priority.
- Default behavior must be reversible.
- Each responsibility has one owning module.
- Every change must document the affected layer(s): update the owning module's function comments/API contract, the relevant user-facing README or CLI spec, and tests when behavior changes. New utilities must document parameters, output, and side effects next to the function.
- Configuration and state are data, never executable code.
- Runtime dependencies require an explicit architecture decision.
- Business logic must not be added to
elo.sh. - Python, Node.js, Go, and Rust are outside the Bash MVP.
- Tests must never access real user data.
- All tracked text must be English. The sole exception is a locale catalog
under
site/assets/i18n/, which is data keyed by the English source string rather than product copy. Authoritative product text stays English, and a catalog is not allowed to drift: every key must exist in the English source.
Before completion, run syntax checks, integration and interactive delegation tests, skill validation when applicable, and diff checks. Update specs for changed contracts and record new limitations.