-
Notifications
You must be signed in to change notification settings - Fork 2
Technical Contributing
Work happens on a branch, never on main. One session of work is one branch,
even when the later parts of it turn out to be unrelated to the first : a
session split across two branches is two half-reviews.
git checkout -b feat/supplier-attestations
# ... work, commit, push ...
git push -u origin feat/supplier-attestationsPush after each commit rather than batching to the end, so the work is never only on your machine. That is about pushing often, not committing often : a commit should still be a whole, verified unit of work, not a trail of "wip" and "fix typo".
When a commit turns out to be wrong, rewrite it (git commit --amend, or
git rebase -i for an older one on your own branch) and force-push with
--force-with-lease. Never --force bare; the lease is what refuses to clobber
someone else's push. Stop rewriting once a reviewer has started reading the
commits, because their comments are anchored to what they read: from that point,
a follow-up commit is the honest option.
Never rewrite main, and never rewrite a merged commit.
Written in English, regardless of the language of the discussion that produced
them. Authored as Claude <noreply@anthropic.com> when produced with the
assistant.
Conventional prefixes are used : feat, fix, docs, refactor, test,
chore, with the module in parentheses.
feat(incidents): add the evidence chain of custody
fix(compliance): stop the applicability recalculation from clearing manual overrides
docs(sdk): document the dashboard widget extension point
These are not optional extras; a change missing one of them is incomplete.
| Requirement | Why |
|---|---|
| An MCP tool for every new feature | MCP is the primary integration surface. A feature reachable only in the interface is a feature scripts and assistants cannot use |
| A REST endpoint for every new feature | Same reason, different caller |
| French translations for every new string | The bilingual contract; an empty msgstr ships English into a French interface |
| The specification updated in the same commit |
docs/specs/ is the contract an auditor reads. A spec that lags the code is worse than no spec |
| The user guide updated when the interface changes | docs/user-guide/ |
| The reference regenerated when a registry changes |
python manage.py generate_docs; CI fails otherwise |
| The seed updated when the schema changes |
scripts/seed_demo_data.py feeds the dashboard, the list views and the screenshots. A schema change with no seed update leaves those surfaces empty |
CHANGELOG.md updated |
One line per entry, under ## [Unreleased]
|
| Both themes checked | Light and dark; a component that only works in one is not done |
| Mobile checked | Especially multi-select widgets, sticky bars and form layouts |
| Tests | See testing.md for what they have to cover |
Terse, and strictly so:
- One line per entry. A sentence. Not a paragraph, not a list of files.
-
One block per category per release. A version has a single
### Added, a single### Changed. Consolidate before tagging. -
Never a
ChangedorFixedabout somethingAddedin the same release. A feature that only exists as of this release was never in a prior state to change. Fold the detail into theAddedentry.
Both go through the templates in .github/. An issue is filed through
bug_report.yml or feature_request.yml; a pull request uses
PULL_REQUEST_TEMPLATE.md, with the Summary, Related issue and Changes sections
filled and every applicable checklist item ticked. The gh CLI does not apply
the template automatically, so build the body from it.
Titles and descriptions are written in English.
When a pull request carries a checklist, comment the progress on it at each commit and tick the items as they land. That is the standard way of working, not a courtesy for large changes only.
Code is English throughout : names, comments, docstrings. French appears only in translated user-facing strings and in database values that are already stored in French.
The em dash character is not used anywhere in the codebase. Use : or -.
New code should read like the code around it. Match the surrounding comment density, naming and idiom rather than importing a different house style into one file.
Anything visual, typographic, motion-related or component-level follows the brand guidelines, which are the single source of truth for the palette, typography, spacing, iconography, motion and accessibility commitments. If a change cannot be expressed within them, the guidelines are updated first, with the maintainer's agreement, and then the change is made.
Built from docs/ at v0.36.0. Edits made here are overwritten by the next release : open a pull request against the source instead.
- Administration
- Ask Cairn
- Assets and suppliers
- Compliance
- The dashboard
- Finding your way
- Getting started
- Incidents
- How records move
- Organisational context
- Reports and management review
- Risks
- Trust Center
- Architecture
- Configuration
- Contributing
- The documentation system
- Installation
- Internationalisation
- Operations
- Release process
- Security
- Testing
- Adding an assistant provider
- Adding a dashboard widget
- Adding a domain entity
- Declaring a lifecycle
- Adding an MCP tool
- Adding a REST endpoint
- Adding a report
- Interface conventions
- Dashboard widgets
- Lifecycles
- MCP tools
- MCP tool parameters : Assets
- MCP tool parameters : Compliance
- MCP tool parameters : Governance and context
- MCP tool parameters : General
- MCP tool parameters : Incidents
- MCP tool parameters : Reports and management review
- MCP tool parameters : Risks
- MCP tool parameters : System and administration
- MCP tool parameters : Trust Center
- Management commands
- Models
- Permissions
- REST endpoints
- Environment variables
- MCP server
- REST API
- Assistant module (Ask Cairn)
- Module 0: User Management and Access Control
- Module 1: Context and Organization
- Module 2: Asset Management
- Module 3: Compliance
- Module 4: Risk Management
- Module 4 bis - EBIOS Risk Manager
- Module 5 : Trust Center
- Module 6 : Security Incident Management
- Management review : ISO 27001:2022 compliance (clause 9.3)