Contributing¶
Contributions to the MeetAgain core and bundled plugins are welcome.
Development Setup¶
Follow the Getting Started guide to get a running dev environment, then run the full test suite to confirm everything is green:
This runs unit tests, functional tests, and all Mago static analysis checks.
Code Standards¶
The project uses Mago for formatting, linting, and architecture validation.
Key rules:
declare(strict_types=1)on every PHP file- All services must be
readonly(exception: services that hold a per-request memo field) - Thin controllers — business logic belongs in services
- No direct repository access from controllers (use services)
- AAA pattern in tests (
// Arrange / // Act / // Assertcomments)
Running Tests¶
# All tests
just test
# Unit tests only
just testUnit
# Functional tests only
just testFunctional
# Specific test file
just testUnit plugins/dishes/tests/Unit/SomeServiceTest.php
Translations¶
The project ships three canonical UI locales: en (source), de, zh. All user-facing
strings must flow through the translator - no English literals in templates, flash
messages, form labels, validator messages, or activity messages.
Translation keys use nested YAML namespaces and dot-notation:
Contributing a new locale means committing a real, human-translated
translations/messages.<code>.yaml alongside the existing three. Machine-translation
dumps will not be accepted. The language dropdown also needs a
translations/language_selector/messages.<code>.yaml with the language_* keys
translated into the new locale.
Useful commands:
# Check for missing keys in en / de / zh
just checkTranslations
# Scan templates and PHP for usages of a key
just app "app:translation:scan events.button_save"
Plugin Contributions¶
If you are contributing a new bundled plugin, read the Plugin Development Guide first.
Plugins must:
- Not modify core entities
- Use junction tables for any relationship to core entities (store IDs as INT, not foreign keys)
- Work correctly when disabled (core must function without them)
- Include fixtures in the
plugingroup - Include at least basic unit tests
Submitting Changes¶
- Fork the repository
- Create a branch from
main - Make your changes, run
just fixMagoandjust test - Open a pull request against
mainwith a clear description of what and why
Reporting Issues¶
Open an issue on GitHub with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- PHP / Symfony / Docker versions if relevant