SOTER
ADR-002: Separation of Genotype and Phenotype
Status
Accepted
Context
Traditional modeling tools often treat diagram and model as the same artifact. This creates duplication across diagrams and inconsistency when one visual view is updated but another is not.
The same organization also needs different perspectives: executive, analyst, developer, operational, and audit-facing views.
Decision
SOTER separates genotype from phenotype.
- Genotype: Textual
.modelfiles define entities, relations, and semantics. They are the single source of truth. - Phenotype:
.viewfiles and projection outputs render selected perspectives from the genotype.
Rationale
The model must be stable, auditable, diffable, and reviewable. Views should be cheap to regenerate and safe to discard.
This separation allows multiple diagrams, UI views, and reports to exist without creating multiple competing sources of truth.
Consequences
Positive
- Views can be regenerated without corrupting the source model.
- Multiple audiences can receive different projections of the same truth.
- Git can track semantic model changes separately from rendered artifacts.
Negative
- Users must understand that editing a diagram is not editing the model.
- Projection tooling must preserve the model/view boundary.
Neutral or Operational
- SOTER needs explicit projector contracts.
- Documentation should distinguish model syntax from visualization behavior.
Alternatives Considered
Diagram as Model
Rejected because it causes drift and makes semantic validation harder.
One Diagram per Audience as Separate Source
Rejected because it multiplies maintenance work and creates inconsistent organizational truths.
Migration or Adoption
Existing diagrams should be treated as source material for extracting the Logos genotype. After extraction, diagrams should be regenerated as projections.
Related Documents
- DocumentationStyleGuide.md
- writing profile and document-type rules.
- AdrTemplate.md - ADR document template.
- AdrIndex.md - architecture decision record index.
- ProjectionOverview.md - projection layer entry point.