OpenSESA is an open-source, Django-based systems engineering platform for managing requirements, architecture, interfaces, verification, validation, safety assurance, analysis, and project governance in one integrated workspace.
The project is designed for teams that need practical traceability across engineering artifacts: requirements connect to interfaces, baselines, architecture, evidence, verification results, assurance arguments, and delivery governance.
- What OpenSESA Provides
- Screenshots
- Project Status
- Application Model
- Core Workflows
- Module Map
- Repository Layout
- Running OpenSESA
- Documentation
- Deployment Stack
- Security Notes
- Contributing
- License
- Requirements management with structured metadata, review workflows, trace links, import/export support, and coverage views.
- Interface management, including N2 matrix views and project delivery interface filtering.
- System definition and system architecture management.
- Scope, portfolio, operations, and project governance modules.
- Verification and validation planning, case, set, defect, report, and snapshot workflows.
- Baseline, release, and evidence pack management.
- Safety assurance workflows, including hazard views, GSN argument models, GSN diagrams, and baseline comparison support.
- Analysis workflows and quality checks.
- Multi-factor authentication support and configurable security controls.
- Docker-first local development and deployment workflows.
- MkDocs-based documentation for users, developers, operators, and maintainers.
OpenSESA is under active development. The codebase is suitable for exploration, contribution, and self-hosted evaluation, but production use should include your own security review, backup strategy, deployment hardening, and operational monitoring.
OpenSESA is organized around engineering artifacts and the relationships between them. The application is intended to help teams move from isolated registers and spreadsheets toward a governed workspace where each artifact can be reviewed, baselined, linked, and assessed.
Primary concepts include:
| Concept | Role in OpenSESA |
|---|---|
| Requirements | Capture, classify, review, import, export, and trace obligations or system needs. |
| System elements | Represent the system breakdown used for allocation, architecture, interface, and verification work. |
| Interfaces | Define relationships between elements, projects, documents, and delivery responsibilities. |
| Baselines | Freeze selected engineering state for release, comparison, evidence, and assurance. |
| Verification assets | Plan verification work, manage cases and sets, record results, and track defects. |
| Safety and assurance assets | Maintain hazards, GSN-style assurance structures, evidence links, and baseline comparisons. |
| Portfolio and scope assets | Connect engineering work to projects, phases, delivery organisations, design packages, and scope assignments. |
The Django application is server-rendered and backed by PostgreSQL, Redis, and Celery. Docker Compose is the supported runtime path so the application, worker, database, broker, and deployment proxy stay aligned.
OpenSESA supports engineering workflows that depend on traceable relationships rather than standalone records:
| Workflow | What the application supports |
|---|---|
| Requirements definition and review | Structured requirement records, modules, templates, review comments, imports, exports, quality checks, and coverage analysis. |
| System definition and architecture | System elements, architecture nodes, decisions, governance records, and relationship views. |
| Interface control | Interface registers, ICD records, N2 matrices, cross-project interface views, and import/export flows. |
| Scope and delivery allocation | Work packages, design packages, scope assignments, delivery organisations, allocation views, and dashboard summaries. |
| Verification and validation | Verification plans, cases, case sets, activities, execution results, snapshots, defects, and RVTM reporting. |
| Baseline and release assurance | Baseline records, baseline items, evidence packs, release comparison, and assurance-oriented evidence tracking. |
| Safety assurance | Hazard-oriented views, GSN diagrams, safety argument records, and baseline comparison support. |
| Impact and analysis | Change impact assessment, gap analysis, quality analysis, and traceability reports. |
| Area | Django apps |
|---|---|
| Platform foundations | core |
| Portfolio and project setup | portfolio_mgmt, ops_mgmt |
| Requirements and traceability | requirements_mgmt, analysis_mgmt, impact_assessment |
| System definition and architecture | sysdef_mgmt, sysarch_mgmt, diagrams_mgmt |
| Interfaces | interface_mgmt, project_interface_mgmt |
| Scope and delivery | scope_mgmt |
| Verification and validation | verification_validation_mgmt |
| Baseline and assurance | baseline_mgmt, safety_assurance |
.
├── app/ Django project root
│ ├── app/ Django settings, URLs, ASGI, WSGI
│ ├── core/ Shared UI, utilities, auth helpers, common services
│ ├── requirements_mgmt/ Requirements workflows
│ ├── interface_mgmt/ Interface workflows and N2 matrix views
│ ├── project_interface_mgmt/ Project delivery interface workflows
│ ├── sysdef_mgmt/ System definition workflows
│ ├── sysarch_mgmt/ System architecture workflows
│ ├── scope_mgmt/ Scope workflows
│ ├── baseline_mgmt/ Baselines, releases, and evidence packs
│ ├── verification_validation_mgmt/
│ ├── safety_assurance/ Safety assurance, hazards, GSN, and diagrams
│ ├── analysis_mgmt/ Analysis workflows
│ ├── diagrams_mgmt/ Diagram-related workflows
│ ├── ops_mgmt/ Operations management workflows
│ └── portfolio_mgmt/ Portfolio and project setup workflows
├── docs/ MkDocs documentation site
├── images/ README screenshots and repository visuals
├── proxy/ NGINX deployment proxy image and templates
├── scripts/ Utility scripts for tests, backups, and vendor checks
├── docker-compose.yml Local development stack
├── docker-compose-deploy.yml Deployment-style stack
├── Dockerfile Django/Celery image
├── requirements.txt Python dependencies
└── .env.example Environment variable template
OpenSESA is expected to run as a composed application stack:
| Service | Application responsibility |
|---|---|
app |
Django web application, server-rendered UI, API endpoints, migrations, and management commands. |
db |
PostgreSQL persistence for engineering records and trace links. |
redis |
Broker/result backend for asynchronous work. |
celery |
Background processing for jobs that should not block the web request cycle. |
Create an environment file from the committed template:
cp .env.example .envReview application-sensitive settings before starting the stack:
DB_PASSDJANGO_SECRET_KEYDJANGO_ALLOWED_HOSTSCSRF_TRUSTED_ORIGINS- email settings, if account emails or password resets are enabled
- MFA enforcement settings for staff, superusers, or all users
Start the local stack:
docker compose up -d --buildOpen the application:
http://localhost:8001
Operational checks should also run through Docker Compose:
docker compose run --rm app python manage.py check
docker compose run --rm app python manage.py migrate
docker compose ps
docker compose logs -f app
docker compose logs -f celeryThe local app service waits for the database and runs migrations before starting the development server. Avoid running Django commands directly against host Python unless you are deliberately debugging outside the supported stack.
OpenSESA reads configuration from environment variables. The settings most likely to affect application behavior are:
| Variable | Purpose |
|---|---|
DB_NAME |
PostgreSQL database name |
DB_USER |
PostgreSQL username |
DB_PASS |
PostgreSQL password |
DJANGO_SECRET_KEY |
Django signing and cryptographic secret |
DJANGO_ALLOWED_HOSTS |
Comma-separated Django host allow-list |
CSRF_TRUSTED_ORIGINS |
Trusted origins for CSRF-protected requests |
EMAIL_HOST |
SMTP server hostname |
EMAIL_PORT |
SMTP port |
EMAIL_HOST_USER |
SMTP username |
EMAIL_HOST_PASSWORD |
SMTP password |
DEFAULT_FROM_EMAIL |
Default sender address |
CELERY_BROKER_URL |
Celery broker URL |
CELERY_RESULT_BACKEND |
Celery result backend URL |
MFA_TOTP_ISSUER |
Issuer label for MFA authenticator apps |
MFA_TRUST_ENABLED |
Enables trusted-device MFA behavior |
MFA_ENFORCE_FOR_STAFF |
Requires MFA for staff users |
MFA_ENFORCE_FOR_SUPERUSERS |
Requires MFA for superusers |
MFA_ENFORCE_FOR_ALL_USERS |
Requires MFA for all users |
Generate a strong Django secret key before using the app beyond local experimentation:
docker compose run --rm app python manage.py generate_secret_keyUse the test suite to validate application behavior across the domain modules:
docker compose run --rm app python manage.py test
docker compose run --rm app sh -c "DJANGO_SETTINGS_MODULE=app.settings_test PYTHONPATH=. pytest -v"
docker compose run --rm app sh -c "DJANGO_SETTINGS_MODULE=app.settings_test PYTHONPATH=. pytest app/requirements_mgmt/tests/test_views.py -v"
docker compose run --rm app sh -c "DJANGO_SETTINGS_MODULE=app.settings_test PYTHONPATH=. pytest --cov=app --cov-report=term-missing"Run Django checks:
docker compose run --rm app python manage.py checkRun lint checks:
docker compose run --rm app python -m flake8Run type checks:
docker compose run --rm app python -m mypyThe documentation site lives under docs/.
Key sections include:
- User guide
- Development workflow
- API overview and examples
- Architecture notes
- Operations runbooks
- Quality gates and review material
The Markdown source is committed under docs/docs/. If you add an MkDocs configuration file for your deployment, build it through Docker Compose so the documentation environment remains reproducible.
docker-compose-deploy.yml provides a deployment-style stack with:
- Django/uWSGI app container
- Celery worker
- PostgreSQL
- Redis
- NGINX proxy
Start the deployment stack:
docker compose -f docker-compose-deploy.yml up -d --buildRun migrations:
docker compose -f docker-compose-deploy.yml run --rm app_opensesa python manage.py migrateCollect static assets:
docker compose -f docker-compose-deploy.yml run --rm app_opensesa python manage.py collectstatic --noinputView logs:
docker compose -f docker-compose-deploy.yml logs -f app_opensesa proxy_opensesa celery_opensesaProduction deployments should use real secret management, TLS termination, database backups, monitoring, log retention, and a reviewed host/CSRF configuration.
Do not commit local runtime data or generated artifacts. The repository ignores common local-only files, including:
.envand.env.*- SQLite and local database files
- coverage outputs
- cache directories
- backup dumps
- private keys and credential files
Backup and recovery helper scripts live in scripts/, but backup outputs should remain outside version control.
- Never commit real secrets, private keys, production
.envfiles, database dumps, or customer/project-sensitive exports. - Rotate any credential that may have been exposed before publishing or sharing a repository.
- Use a unique
DJANGO_SECRET_KEYfor every deployed environment. - Keep
DEBUG=0outside local development. - Set
DJANGO_ALLOWED_HOSTSandCSRF_TRUSTED_ORIGINSexplicitly. - Review MFA enforcement settings before onboarding users.
- Review email backend settings before enabling account emails or password resets.
- Run dependency and container scans as part of your own release process.
To report a security issue, avoid opening a public issue with exploit details. Contact the maintainers privately through the repository owner or your established project channel.
Domain apps should follow the established Django layout:
models.py: ORM models onlyviews/: view modules split by responsibilityurls.py: route mapping onlyforms.py,filters.py,tables.py,resources.py: app-level web/data concernsservices/: business/domain logic that should not live in viewstemplates/<app_name>/...: app templatestests/: feature-focused testsmanagement/commands/: app-specific commands when needed
Import boundaries:
- Domain apps may depend on
core. - Domain apps should not import peer app internals.
- Shared cross-app behavior should live in
coreor an explicit shared service module.
Testing conventions:
- Keep tests under
app/<domain>_mgmt/tests/or the relevant domain app test directory. - Use file names prefixed with
test_. - Prefer small, focused test modules.
- Use
pytestwithapp.settings_testfor targeted test execution.
Contributions are welcome.
Recommended workflow:
- Create a feature branch from
main. - Keep changes focused and documented.
- Add or update tests for behavioral changes.
- Run checks through Docker Compose.
- Update documentation in the same change set when behavior or setup changes.
- Open a pull request with a concise summary, testing notes, and any migration or deployment considerations.
Before opening a pull request, run:
docker compose run --rm app python manage.py check
docker compose run --rm app sh -c "DJANGO_SETTINGS_MODULE=app.settings_test PYTHONPATH=. pytest"OpenSESA is released under the GNU Affero General Public License v3.0. See LICENSE for details.





