Contributing¶
This page describes the workflow for changing any FedMS repository — the install profile, a component module, a recipe, a tenant site, the test suites, or the documentation.
Prerequisites¶
- L3D installed and working. See Tooling → L3D.
glabauthenticated againstgitlab.lakedrops.com. See thegitlabopencode skill if you're an AI agent.- The site running locally —
l3d ahoy d4d update.
The change workflow¶
1. Find or create an issue¶
Issues live on the relevant component project, not on the group.
For example, a federation bug goes to
fedms/components/federation,
a task-engine bug goes to
fedms/components/tasks.
If you can't find a matching issue, create one:
1 2 | |
2. Identify the right repo¶
Use this table:
| Change | Repo |
|---|---|
| Group fields / federation hooks / permissions YAML | fedms_federation |
fedms_event / fedms_session entity or paragraph types |
fedms_content |
| Attachment entity | fedms_attachment |
| Task entity / pattern / condition plugins / spawning logic | fedms_task |
| ECA model | fedms_eca |
| Translations | fedms_locale |
| Install pipeline / Ahoy commands | fedms/components/scripts |
| Optional recipe | A fedms/components/recipes/* repo |
| Test infrastructure | fedms/components/tests/playwright |
| Tenant site issues | The tenant's site repo (fedms/sites/<name>) |
| Documentation | fedms/documentation |
cd into the right directory before running l3d glab / l3d git.
3. Branch¶
1 2 3 4 | |
Branch naming conventions:
feature/<slug>for new functionality.fix/<slug>for bug fixes.docs/<slug>for doc-only changes.chore/<slug>for non-functional housekeeping.
4. Make the change¶
Follow the conventions:
- US English (en-US) — cspell will reject British English.
- OOP hooks with the
#[Hook]attribute. declare(strict_types=1);in new PHP files.- Use constructor DI for services.
- Add PHPDoc to public methods.
- Add tests where reasonable.
- Don't hand-edit
eca.eca.*.yml— go through the modeler. - Don't add Cypress tests — Playwright only.
5. Test locally¶
1 2 3 | |
For ECA model changes:
1 2 3 | |
For Playwright changes:
1 2 | |
6. Commit¶
Commit in imperative mood, with a short subject:
1 2 3 4 | |
Reference the issue with Closes fedms/components/<project>#<id>
when the change fully resolves it. Use Relates to ... when it only
partially addresses it.
1 2 3 | |
7. Open an MR¶
1 | |
Fill in the MR description with:
- A summary of the change.
- The reason (link to the issue).
- A test plan — what you ran locally.
- Any screenshots for UI changes.
8. Verify CI¶
1 | |
If the pipeline fails, pull the logs:
1 2 | |
Fix locally, push, and re-check.
9. Address reviews¶
1 | |
Make the requested changes, commit, push. The MR's pipeline re-runs automatically.
10. Merge¶
Once approved and green:
1 | |
(Or let the reviewer merge.)
11. Tag a release if needed¶
For module changes that other repos depend on, tag a release after merge. See Release process.
Cross-cutting changes¶
Some changes touch multiple repos — e.g. a new ECA condition that requires:
- a new plugin in
fedms_task, - a model update in
fedms_eca, - an MR in each.
For these:
- Open a tracking issue in the most central repo (often
fedms/components/profile). - Open MRs in each affected repo, linking to the tracking issue.
- Coordinate merge order — usually plugin first, model second.
- Tag a synchronised release of the affected modules.
US English enforcement¶
The cspell pipeline uses a US-English dictionary. Common substitutions:
| ❌ Avoid | ✅ Use |
|---|---|
| behaviour | behavior |
| colour | color |
| organisation, organise | organization, organize |
| optimise, optimisation | optimize, optimization |
| analyse | analyze |
| customise | customize |
| modeller | modeler |
| artefact | artifact |
| labelled | labeled |
| cancelled | canceled |
| programme (in software) | program |
| centre | center |
This applies to code, comments, commit messages, MR titles and descriptions, issue summaries, and in-repo documentation.
What never to commit¶
- Secrets (API keys, passwords, tokens).
.envfiles (.envis.gitignore'd but verify before commit).- Tenant-specific content in framework modules.
- Hand-edited
eca.eca.*.ymlfiles.
Next steps¶
- Testing — the test layers in detail.
- Release process — tagging and releasing.
- Config management — how config changes flow.