Common workflows¶
Each recipe lists the steps, the right tools, and the verification. Follow them in order — the order matters.
"I want to add a field to an event group"¶
- Identify the change: a new field on
group(bundleevent). Owner module:fedms_federation. cd web/modules/contrib/fedms_federation- Create / edit field storage:
config/install/field.storage.group.field_<name>.yml- Create field instance:
config/optional/field.field.group.event.field_<name>.yml- Add the file names to
config_devel:infedms_federation.info.yml. - Add to form display:
config/optional/core.entity_form_display.group.event.default.yml- Add to view display:
config/optional/core.entity_view_display.group.event.default.yml- Verify locally:
l3d drush cr- Visit a clean install / event-edit form.
- Test:
l3d ahoy test phpcsmodule fedms_federationl3d ahoy test phpstanmodule fedms_federation- Commit on a branch, push, open an MR on
fedms/components/federation.
"I want to add a field to a fedms_event (the content entity)"¶
Same as above but the owner is fedms_content and the config
filenames are:
field.storage.fedms_event.field_<name>.ymlfield.field.fedms_event.<bundle>.field_<name>.ymlcore.entity_form_display.fedms_event.<bundle>.default.ymlcore.entity_view_display.fedms_event.<bundle>.default.yml
"I want to add a new task-pattern condition"¶
- Owner module:
fedms_task. - Create a new ECA event plugin under
src/Plugin/ECA/Event/<MyCondition>Event.php. Follow the pattern ofTaskPatternConditionEvent.php. - Register the corresponding
_argumentsevent plugin underTaskPatternConditionArgumentsEvent.php(if your condition needs arguments). - Update the
task_apiECA model to add the new event: - Open the modeler at
/admin/config/workflow/eca. - Add events for both the condition and (if needed) its arguments.
- Wire them into the appropriate flow.
- Save the model.
- Export config:
l3d ahoy fedms export-config- Inspect the diff in
fedms_eca: cd web/modules/contrib/fedms_eca && l3d git diff- Test:
l3d ahoy test phpcsmodule fedms_taskl3d ahoy test phpstanmodule fedms_taskl3d ahoy test phpunitmodule fedms_task- Open coordinated MRs on
fedms/components/tasks(the plugin) andfedms/components/eca(the model). Reference each other.
"I want to change an ECA model"¶
- Identify the model. See Developer guide → ECA models.
- Read the per-model page.
- Open the modeler at
/admin/config/workflow/eca. - Make the change visually.
- Save in the modeler.
l3d ahoy fedms export-configcd web/modules/contrib/fedms_eca && l3d git diff- Verify the diff only contains the model you intended.
- Commit, push, open MR.
Never edit eca.eca.*.yml files by hand.
"I want to add a new module-owned permission"¶
- Identify the module that owns the permission.
- Edit
<module>/<module>.permissions.yml:
1 2 3 | |
- Update
fedms_federation/config/roles_permissions.ymlto assign the permission to the appropriate roles. - Rebuild:
l3d drush roles-permission-builder:rebuild- Export config:
l3d ahoy fedms export-config- Test, commit, push.
"I want to add a new view"¶
- Identify the right module:
- Lists of groups →
fedms_federation. - Lists of events/sessions content →
fedms_content. - Lists of tasks →
fedms_task. - Create the view in the admin UI.
- Export config:
l3d ahoy fedms export-config- Move the resulting
views.view.<name>.ymlto the owning module'sconfig/install/(orconfig/optional/if it depends on optional config). - Add the file name to the module's
config_devel:list. - Test, commit, push.
"I want to add a new recipe"¶
- Fork the parent recipe scaffold at
fedms/components/recipe. - Create a new project under
fedms/components/recipes/<name>. - Edit
recipe.yml— set name, description, install list, inputs, config actions. - Add starter config under
config/. - Test locally:
1 2
l3d composer require fedms-recipe/<name>:dev-develop l3d drush recipe ../recipes/fedms-recipe-<name> - Open MR, get review, tag a release.
- Add to
fedmsprofile'scomposer.jsonif the recipe should be available to every tenant.
"I want to fix a documentation bug"¶
- Identify the right page on this site. See Where things live → Documentation.
cd mkdocs- Edit the relevant
.mdfile. - Preview locally (see
mkdocs/.ahoy.yml). - Commit on a branch in
fedms/documentation, open an MR.
"I want to update the AGENTS.md or this AI agents section"¶
When you discover a convention that an AI agent should know, add it here in the same MR as the change that motivated it. Don't file it as a separate "doc TODO" — by the next session, that TODO will have lost context.
Specifically:
- Site-specific conventions → site's
AGENTS.md. - Cross-project FedMS conventions →
~/.opencode/skills/fedms/SKILL.md. - User-facing or developer-facing documentation → this site.
"I want to verify my change against the documentation"¶
Whenever you make a change that affects user-facing behavior:
- Find the documentation pages that describe the behavior.
- Update them to match your change.
- If your change introduces a brand-new behavior, add a page (or section) that describes it.
- Commit the documentation update in the same MR series as the code change.
"I want to investigate an issue"¶
- Find the issue at
gitlab.lakedrops.com/fedms— it lives on one of the per-component projects. - Read the issue and all its comments.
cdinto the right repo (per Where things live).l3d glab issue view <id>for the in-CLI view.- Check linked MRs:
l3d glab mr list- Read the relevant code and the relevant docs.
- Form a plan.
- Open a branch, write code, write tests, write docs, open MR.
Next steps¶
- Do and don't — the convention catalog you have to honor.
- Where things live — the lookup table.
- Developer guide → Contributing — the upstream change workflow in detail.