docs(issues): close 0005 — type schema fields
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
---
|
||||
id: 0005
|
||||
title: Type schema en types.yaml — fields por tipo + principal_field
|
||||
status: completed
|
||||
priority: high
|
||||
created: 2026-04-30
|
||||
completed: 2026-05-01
|
||||
---
|
||||
|
||||
## Objetivo
|
||||
|
||||
Extender `types.yaml` para declarar el **esquema de campos** de cada entity
|
||||
type, ademas de la cosmetica que ya existe (color/shape/icon). Es la base
|
||||
sobre la que tiran 0007 (Type Editor) y 0008 (Inspector editable).
|
||||
|
||||
## Formato propuesto
|
||||
|
||||
```yaml
|
||||
entities:
|
||||
- name: Person
|
||||
color: "#5B8DEF"
|
||||
shape: circle
|
||||
icon: ti-user
|
||||
principal_field: name # opcional, default = "name"
|
||||
fields:
|
||||
- { name: name, type: string, required: true }
|
||||
- { name: first_name, type: string }
|
||||
- { name: last_name, type: string }
|
||||
- { name: age, type: int }
|
||||
- { name: nationality, type: string }
|
||||
- { name: birth_date, type: date }
|
||||
- { name: gender, type: enum, values: [male, female, other] }
|
||||
```
|
||||
|
||||
Tipos soportados (v1): `string`, `int`, `float`, `bool`, `date`, `url`,
|
||||
`enum`. `enum` requiere `values: [...]`.
|
||||
|
||||
`principal_field` es el campo que el viewport usa como label visible del
|
||||
nodo cuando no hay otro override (sustituye al actual `name` hardcodeado).
|
||||
|
||||
## Cambios en codigo
|
||||
|
||||
- `types_registry.h`:
|
||||
- Nuevo `FieldSpec { string name; FieldKind kind; bool required; vector<string> enum_values; }`.
|
||||
- `EntitySpec` gana `string principal_field` y `vector<FieldSpec> fields`.
|
||||
- `types_registry.cpp`:
|
||||
- Parser tolerante: ignora `fields:` si no esta presente; tipos
|
||||
desconocidos se mapean a `string` con warning.
|
||||
- **Writer** nuevo: `bool types_save_yaml(const char* path, const ParsedTypes& types, string* error_msg)`. Round-trip que preserva el orden de claves y el formato compacto del ejemplo.
|
||||
- `examples/types.yaml`: anadir `fields` a Person, Email, Domain, Phone, Org como semilla.
|
||||
|
||||
## Definicion de hecho
|
||||
|
||||
- Parser lee el yaml extendido sin romper el yaml existente (sin `fields`).
|
||||
- Writer regenera un yaml legible y re-parseable (test round-trip).
|
||||
- `examples/types.yaml` incluye `fields` para los 10 tipos existentes.
|
||||
- `apply_types_yaml` no se rompe (no toca `fields` aun, eso es 0007/0008).
|
||||
Reference in New Issue
Block a user