MailStack welcomes focused, tested and backward-compatible contributions.
- Do not remove, disable or silently simplify an existing feature.
- Do not rewrite migration history.
- Do not change mail-flow or authorization behavior without tests and explicit review.
- Preserve existing configuration defaults and documented legacy compatibility.
cd mailbox-app
python3.12 -m venv .venv
. .venv/bin/activate
pip install -r requirements/development.txtFrom the repository root:
python scripts/manage_documents.py check
python scripts/test_documents.py
python scripts/check_documentation_policy.py --base HEAD^ --head HEAD
python scripts/manage_designs.py --root . check
python scripts/test_designs.py
python scripts/test_ui_foundation.py
python scripts/check_docs.py
python scripts/validate_templates.py
python scripts/test_installer.py
python scripts/test_operations.py
python scripts/forensic_audit.py --root . --fullThe full gate runs tests, coverage, Ruff, Bandit, Django checks, contact-service tests and source-safety checks.
- Open an issue for significant behavior, schema or deployment changes.
- Keep changes narrow and explain compatibility impact.
- Create or update a
documents/phases/PHASE-NNN-*.mdrecord for every maintained feature phase. - Update
documents/USER_MANUAL.md,documents/HOW_TO_USE.md, ordocuments/ADMIN_GUIDE.mdwhenever user-visible behavior changes. - Run
python scripts/manage_documents.py syncand commit the generated documentation index and manifest. - Add or update tests for every behavior change.
- Update
CHANGELOG.md, engineering documentation and release notes where applicable. - Do not commit secrets, real mailbox data, personal email addresses, certificates, databases, logs, archives or generated credentials.
- Confirm the pull-request checklist and CI results.
UI work must begin from the frozen design intake and shared foundation. Preserve original PNGs,
update design/DESIGN_MANIFEST.json only through the maintained workflow, implement one page per
reviewed patch, and do not activate planned controls without an approved backend/security phase.
Run python scripts/manage_designs.py --root . check, python scripts/test_designs.py, and python scripts/test_ui_foundation.py.
Start a maintained phase before implementation:
python scripts/manage_documents.py new-phase \
--phase-id PHASE-003 \
--title "Feature title" \
--summary "What the phase changes for users"Complete the generated draft, update the affected guides and changelog, then run sync, check,
the documentation contract tests and the feature-change policy. Draft phase documents and stale
generated documentation cannot pass CI.
Follow docs/CODING_STANDARDS.md. New Python must support Python 3.12 and pass the configured Ruff and Bandit rules. Shell changes must use fail-closed practices and pass bash -n plus installer/operations contract tests.
By contributing, you agree that your contribution is licensed under AGPL-3.0-or-later.