Modelo canónico v0.1
Estado
Este documento define el modelo canónico de Arch3 para la versión v0.1 de la especificación.
El modelo canónico es la fuente de verdad para parsers, validadores, renderizadores, pruebas y futuras DSLs.
Objetivos
El modelo canónico debe ser:
- determinístico
- amigable para máquinas
- orientado a validación
- fácil de versionar y comparar
- independiente de cualquier renderizador o motor de layout
Formato canónico
En v0.1, el formato canónico de autoría es JSON.
Estructura superior:
{
"methodology": {},
"scope": {},
"context": {},
"containers": [],
"components": []
}
Secciones superiores
methodology
Obligatoria.
Campos:
name: debe ser"Arch3"version: string de versión del modelo o de la speclayers: lista ordenada de capas activas
scope
Obligatoria.
Campos:
namedescription
context
Obligatoria.
Campos:
actorssystems
containers
Array obligatorio.
components
Array obligatorio.
Contratos de entidades
Actor
Campos obligatorios:
idnamedescription
System
Campos obligatorios:
idnamedescription
Container
Campos obligatorios:
idsystemnametechnologydescriptionmetadatarelationships
Component
Campos obligatorios:
idcontainernamedescriptionlibrariesmetadatarelationships
Objetos compartidos
Relationship
Campos obligatorios:
targetdescription
Reglas:
targetdebe referenciar un id existente- el modelo no infiere relaciones inversas automáticamente
Metadata
Metadata es un objeto JSON plano.
Tipos permitidos en v0.1:
- string
- number
- boolean
Reglas:
- objetos anidados fuera de alcance en v0.1
- arrays fuera de alcance en v0.1
- las claves son case-sensitive
Invariantes de identidad
- todos los ids deben ser globalmente únicos dentro del diagrama
- los ids deben permanecer estables entre expansiones de capa
- los ids son claves canónicas para links y parsing futuro
Invariantes de ownership por capa
- actors viven solo en
context.actors - systems viven solo en
context.systems - containers deben referenciar exactamente un system
- components deben referenciar exactamente un container
Invariantes de relaciones
- targets no resueltos son inválidos
- la validación semántica no depende del renderer
Reglas de serialización
- claves obligatorias siempre presentes
- colecciones vacías deben serializarse como arrays vacíos
- metadata debe serializarse como objeto, incluso vacío
Niveles de validación
Validación sintáctica
Comprueba si el payload es JSON válido.
Validación estructural
Comprueba secciones obligatorias y tipos de campos.
Validación semántica
Comprueba:
- unicidad de ids
- referencias de ownership
- targets de relaciones
- tipos permitidos de metadata
- presencia de campos obligatorios
Ejemplo mínimo válido
{
"methodology": {
"name": "Arch3",
"version": "0.1.0",
"layers": ["context", "containers", "components"]
},
"scope": {
"name": "Example Scope",
"description": "Minimal valid Arch3 model."
},
"context": {
"actors": [],
"systems": []
},
"containers": [],
"components": []
}
Fuera de alcance en v0.1
- coordenadas explícitas de layout
- declaraciones de estilo visual dentro del modelo
- boundaries anidados con semántica completa
- esquemas polimórficos de metadata
- múltiples formatos canónicos de autoría
Criterios de aceptación
El modelo canónico está listo para implementación cuando:
- cada entidad tiene contrato de campos obligatorios
- todas las invariantes compartidas están explícitas
- la validación puede implementarse sin asumir renderer
- existe al menos un fixture mínimo válido y un set de inválidos
- futuros renderizadores pueden consumir el modelo sin cambiar su semántica