From cbd1009358dd508d3c518f2f21266d8bfd5a7e4f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 23:30:38 +0000 Subject: [PATCH] feat(DiagramLayout): Route.general names the general a specialization edge is routed to A specialization is a clause of its specific element, not an element of its own, so a Route about it had nothing to name. A Route about the specific element now types general with the element the line is drawn to, `ref :>> general : Sup;`, one Route per general; a Route naming no general steers the annotated element's own edge as before. Semver minor. Co-Authored-By: jason.han --- engine-contract.json | 10 +++++++++- libraries/DiagramLayout.sysml | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/engine-contract.json b/engine-contract.json index b0c8908..03e6457 100644 --- a/engine-contract.json +++ b/engine-contract.json @@ -139,13 +139,21 @@ "name": "DiagramLayout::Route", "kind": "metadata", "attributes": [ - "points" + "points", + "general" ], "migratorEmitted": true, "consumers": [ "internal/semantic/semantics/layout.go" ] }, + { + "name": "DiagramLayout::Route::general", + "kind": "element", + "consumers": [ + "internal/semantic/semantics/layout.go" + ] + }, { "name": "DiagramLayout::Route::points", "kind": "element", diff --git a/libraries/DiagramLayout.sysml b/libraries/DiagramLayout.sysml index fdf0b1a..06b9641 100644 --- a/libraries/DiagramLayout.sysml +++ b/libraries/DiagramLayout.sysml @@ -17,8 +17,13 @@ library package DiagramLayout { metadata def Route { doc /* The waypoints a connection, transition, succession or flow is - * drawn through, in order, flattened as x0, y0, x1, y1, ... */ + * drawn through, in order, flattened as x0, y0, x1, y1, ... + * A specialization has no element of its own to annotate: its + * Route is stated about the specific element and names the + * general it is drawn to, `ref :>> general : Sup;`, one Route + * per general. */ attribute points : ScalarValues::Real[0..*] ordered nonunique; + ref general : Base::Anything[0..1]; } metadata def Canvas {