SOTER
ADR-003: Technology Stack: Python, Git, and Textual DSL
Status
Accepted
Context
The early design considered extending Java-based diagramming tools, including PlantUML, to support additional BPMN behavior.
That path would couple SOTER to a heavy diagramming stack and make the modeling language secondary to rendering.
Decision
SOTER uses a dedicated Python implementation for parsing, analysis, compilation, and projection.
The canonical source is a textual DSL stored in Git. Rendering is performed by separate projectors and browser-compatible visualization components.
Rationale
Python gives SOTER a practical implementation environment for parser work, static analysis, test automation, Django-based UI work, and local development.
Git makes the model reviewable and auditable. Textual source keeps SOTER closer to infrastructure-as-code and documentation-as-code practices than to manual diagram editing.
Consequences
Positive
- CI/CD automation is straightforward.
- Textual model changes can be reviewed and diffed.
- Rendering engines can be swapped behind projector boundaries.
Negative
- SOTER must own more graph-analysis and projection code.
- The Python stack must be kept disciplined with typing and tests.
Neutral or Operational
- PlantUML, D2, BPMN, Mermaid, and browser renderers remain projection targets, not the core modeling layer.
Alternatives Considered
Extend Java / PlantUML Directly
Rejected because it would make rendering infrastructure drive the modeling architecture.
Visual-First Modeling Tool
Rejected because it conflicts with Git-first model governance.
Migration or Adoption
Legacy prototype concepts should be reimplemented as Python modules and tested through the normal SOTER pipeline.
Related Documents
- DocumentationStyleGuide.md
- writing profile and document-type rules.
- AdrTemplate.md - ADR document template.
- AdrIndex.md - architecture decision record index.
- ArchitectureOverview.md - technical architecture entry point.