Thanks for looking. A few things about this repository are not obvious from the outside, and knowing them first will save you a wasted afternoon.
GitHub Issues are the plan, not a suggestion box. This project is managed
with an issue-driven workflow: issues are grouped into milestones, carry
sev:* and area:* labels, and are closed by pull requests that reference
them (Closes archived-123). Roadmap and audit passes file issues in bulk, so the
register is the authoritative picture of what is known to be wrong.
Blank issues are turned off deliberately — .github/ISSUE_TEMPLATE/ has forms
for bug, story, and epic, and each applies its own label. Use the
form that fits. If none fits, a bug report describing what you observed is
always acceptable.
Security findings do not go in issues. See SECURITY.md.
archived-N is not an issue in this repository. The project moved
repositories on 2026-09-02 (see docs/history/ for
why) and issue numbers were not preserved, so every reference to the old
register is written archived-N rather than #N — a bare #N would be
auto-linked to a different, real issue here. Look those up in
docs/history/.
Write #N only for issues in this repository.
For anything beyond an obvious fix, open an issue before writing code. Not ceremony: the roadmap is planned in milestones, and a PR that arrives against a plan nobody knew about is hard to place. A short issue saying what you want to change and why gets you an answer quickly.
Small and self-contained — a typo, a broken link, a clearly wrong condition with an obvious fix — go straight to a PR.
Build and run instructions live in docs/DEVELOPMENT.md;
deployment lives in docs/DEPLOYMENT.md. The
wiki carries the codebase map —
architecture, structure, conventions and testing — which is the fastest way to
find where something belongs.
Before opening a PR, run what CI runs:
# SPA — lint carries a warning ratchet and a jsx-a11y error gate
cd src/AutoNate.Spa && npm ci && npm run lint && npx tsc -b && npm run build
# Backend — needs Postgres, NATS and Redis up
cd infra && docker compose -p infra up -d postgres nats nats-init redis
cd .. && dotnet test tests/AutoNate.Web.TestsThe end-to-end suite (tests/AutoNate.E2E.Tests) needs the full compose stack
including Flowable and the Hocuspocus sidecar. CI runs it with the specs that
need Flowable and Dapr filtered out; if your change touches those areas, say
so in the PR so it gets run somewhere that has them.
- Match the surrounding code. Naming, comment density, and idiom vary by area; the local convention wins over a global preference.
- A bug fix comes with a test that fails without it. Not as a formality — write the test, revert the fix, and confirm it actually goes red. A surprising number of assertions cannot fail; that check is how you find out yours can.
- Accessibility is enforced, not aspirational.
npm run lintfails on jsx-a11y errors in the directories that are already clean. Interactive elements need accessible names — several test suites locate elements by role and name, so an unnamed control is both an a11y defect and a broken test locator. - Comments should explain why, not what. The tree leans heavily on this. If a line looks odd and is deliberate, the reason belongs next to it.
The product is Auton8. Internally the code still says AutoNate —
namespaces, assembly names, the AutoNateDbContext, AUTONATE_* environment
variables, database and schema names, plugin ABI types, and the document and
BPMN markers.
This is deliberate, not leftover. Those identifiers are load-bearing: renaming
the DataProtection purpose strings makes every stored provider secret
undecryptable, renaming the .docx markers orphans every bound document, and
renaming the plugin ABI breaks third-party plugins. Please do not "fix" them.
New user-facing strings should say Auton8. New internal identifiers should follow whatever their neighbours do.
By contributing you agree your contributions are licensed under the Apache License 2.0, the same as the rest of the project.