Contributing
What it is
How to add to ManpowerIQ without breaking the things this guide documents. The substance lives in the Conventions section; this page is the entry point and the contribution flow.
Before you build
- Read the relevant convention first. Adding a lookup CRUD? → Lookup CRUD template. Returning a domain error? → Exceptions. Reusing/extracting a helper? → Helpers catalog + §G discipline. Adding a localized message? → BE i18n keys.
- Mirror an existing entity rather than inventing a shape — the conventions are "copy the last one that fits", not a framework.
- Check the build status honestly — if you're touching something marked PARTIAL/PLANNED, keep the status accurate.
The flow
- Work in a phase. Substantial changes follow the audit-first discipline: build a phase, audit it (build green, decisions logged, regressions checked, "do-not-assume" list), then advance. Don't skip the gate.
- Migrations — add an EF migration for any schema change; remember reset is drop + recreate, and seed
INSERTs must tolerate it (PB-025). Apply withdotnet ef database update— there is no migrate-on-startup. - i18n — add resx keys (
en+arin lockstep) and FEen.json/ar.jsonin parity. - Tests — follow the test patterns: FK-block try/finally ownership, AR-locale content-swap sentinels, and a
[Collection("PostgresIntegration")]test for any aggregation (InMemory ≠ Npgsql). - Run the build green —
dotnet build, the test sweeps, and (for docs)mkdocs build.
Commit & branch note
The project doesn't enforce a heavyweight commit convention; the lightweight norms observed in history:
- Branch per feature/ticket, named for the work (e.g. the
MIQ-NNNorPB-NNNit implements). - Commit messages describe the what + why concisely; co-authorship is recorded with a
Co-Authored-By:trailer where applicable.
(This is a light note by design — there was no formally documented commit/branch standard to reproduce; treat it as observed practice, not a mandate.)
Gotchas / constraints
- Don't extend a locked shared shape to fit a new case — keep it inline (§G discipline).
- Don't mutate system rows or assume an unaudited write is audited (audit is selective).
- Don't claim aspirational capability in code comments or docs — keep status honest (the rule this whole guide follows).
- Pre-production: action the diagnostics cleanup (F9 / PB-114) before any real deployment.
Related
- Conventions (the full set) · Audit-first discipline · Test patterns
- Operations — local run & reset · Polish backlog