RERP is a multi-suite product. Before changing service structure, persistence models, migrations, generated code, build tooling, Tilt, Helm, or Docker, read the canonical contributor contract:
CONTRIBUTING.md, especially Suite and microservice architecture and Migration architecture.docs/README.mdfor the current human authority map and the distinction between intended and delivered behaviour.docs/llmwiki/index.md, then only the pages relevant to the task.- Tail
docs/llmwiki/log.mdfor recent work and known drift.
The following rules are non-negotiable summaries of CONTRIBUTING.md:
- Preserve the suite boundary. RERP paths are
openapi/<suite>/<service>/...andmicroservices/<suite>/<service>/.... Do not flatten them to Hauliage's single-suite layout, and do not put suite-specific entities, migrations, SQL, tests, scripts, or core libraries at the repository root. - Preserve the full service boundary. Every HTTP service has a generated
gen/contract crate and a user-ownedimpl/crate. Controllers, application services, persistence models, validators, configuration, seeds, and service tests belong to that service'simpl/tree as described inCONTRIBUTING.md. - One table, one entity owner. A
LifeModelbelongs either to one service'simpl/src/models/or, only for a genuinely suite-wide foundation concept, tomicroservices/<suite>/entities/. Never define the same table in both or in multiple services. - Never hand-edit generated code.
gen/is disposable BRRTRouter output. Changeopenapi/<suite>/<service>/openapi.yamland regenerate. Real behavior belongs inimpl/. - Migration tooling is top-level; migration products are suite-local. The
single tool lives at
microservices/migrator/. It must select suites explicitly and write/apply onlymicroservices/<suite>/migrations/. It must never recreate a repository-rootmigrations/directory or silently accept duplicate table ownership. - Installation is suite-selective. Do not make one suite depend on another suite's entity crate or database tables merely because both are present in the source workspace. Cross-suite integration is API/event based unless an accepted ADR says otherwise.
- Product deployment profiles stay suite-qualified in RERP. Use
deployment-configuration/profiles/<environment>/rerp/<suite>/. Store non-secret environment configuration inapplication.properties, encrypt credentials with SOPS, and never place a product profile in the shared platform GitOps repository. Flux sources and reconciles the profile from RERP; Tilt must not independently apply it. Tilt publishes development images only; Flux owns bootstrap Jobs, Helm releases, rollout, and drift correction. Platform-side dependencies such as Pgpool retain their own matching configuration there.
- Do not create another local checkout.
- The desktop mirror is
/Users/casibbald/Workspace/remote/microscaler/rerp. - Run builds, tests, generation, Git commands, Tilt operations, and other shell
commands on
ms02in~/Workspace/microscaler/rerp. - Preserve unrelated dirty work. Never reset or discard changes you did not create.
- Never push without explicit human authorization.
When code or authoritative documentation changes, reconcile the relevant LLM
wiki page and append a concise entry to docs/llmwiki/log.md.
The LLM wiki is derived knowledge. It cannot accept, supersede, or revive an
architecture decision or product requirement. Follow
docs/DOCUMENTATION_GOVERNANCE.md and
update docs/authority.json when current authority
changes.