sad-mcp 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sad-mcp",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "MCP server for Software Analysis and Design course materials at BGU",
5
5
  "type": "module",
6
6
  "bin": {
@@ -171,26 +171,47 @@ Plain double circle, NO icon inside:
171
171
 
172
172
  ## Arrow Routing
173
173
 
174
- **Arrows must never be ambiguous.**
174
+ **Arrows must never be ambiguous. This section is CRITICAL for diagram quality.**
175
175
 
176
- ### Orthogonal lines ONLY
177
- - **NO diagonal or straight-across lines.** Every arrow segment is either horizontal or vertical.
178
- - Use SVG `polyline` or `path` with L commands (not straight lines between arbitrary points).
179
- - Break the line as many times as needed to route around elements. A single arrow may have 3, 5, or more segments.
180
- - Example: to go from a task on the right to a task below-left, route: horizontal right → vertical down → horizontal left.
176
+ ### Orthogonal lines ONLY — NO exceptions
177
+ - **EVERY arrow is built from horizontal and vertical segments ONLY.** No diagonal lines anywhere.
178
+ - Use SVG `<polyline points="x1,y1 x2,y1 x2,y2 x3,y2">` — each point shares one coordinate with the next (same x = vertical, same y = horizontal).
179
+ - **Test**: For every two consecutive points in a polyline, either `x1==x2` (vertical segment) or `y1==y2` (horizontal segment). If neither it's diagonal and WRONG.
180
+
181
+ ### Routing algorithm for cross-lane flows
182
+ When a flow goes from one lane to another (e.g., gateway branch dropping to a lower lane):
183
+ 1. Exit the source element horizontally (left or right)
184
+ 2. Run horizontally to a clear vertical channel (at least 20px from any element)
185
+ 3. Drop/rise vertically to the target lane's y-coordinate
186
+ 4. Run horizontally to the target element
187
+ 5. Connect to the target element
188
+
189
+ **Never draw a single straight line between elements in different lanes** — always use this H→V→H pattern (or V→H→V if needed).
190
+
191
+ ### Vertical channels
192
+ - Reserve 2-3 vertical "channel" x-positions between task columns for routing cross-lane flows
193
+ - Each channel is a fixed x-coordinate used by vertical segments
194
+ - Offset parallel vertical flows by at least 30px so they don't overlap
181
195
 
182
196
  ### No overlapping arrows
183
- - **At least 30px between parallel flow lines.** If two arrows run side by side, offset them vertically or horizontally.
184
- - When arrows must cross, make the crossing perpendicular (one horizontal, one vertical) so it's visually clear.
197
+ - **At least 30px between parallel flow lines.** If two arrows run side by side, offset them.
198
+ - When arrows must cross, make the crossing perpendicular (one horizontal, one vertical).
199
+ - **Data association lines** (dashed) must also be routed orthogonally and must not cross over sequence flow lines. Route them around tasks, not through the flow area.
185
200
 
186
201
  ### Separate connection points
187
202
  - **NEVER attach two arrows to the exact same point.** Multiple arrows CAN connect to the same side/edge of a shape, but they must be spaced apart along that edge (e.g., 2-3 arrows on the top edge of a task, each at a different x-coordinate with at least 15px between them).
188
203
  - For gateways with multiple outgoing branches: use different edges of the diamond (top, bottom, left, right) OR spread multiple connections along one edge.
189
204
  - For tasks: use all 4 edges (top, bottom, left, right) and spread connections along each edge as needed. A single edge can have 2-3 connection points.
190
205
 
206
+ ### Data store and data object placement
207
+ - Place data stores/objects **directly above or below** the task they connect to, in the gap between elements — NOT at the lane edges.
208
+ - Data association lines should be short and direct (ideally a single vertical segment).
209
+ - If a data store connects to multiple tasks, duplicate it near each task (see rule 4 above).
210
+
191
211
  ### Labels
192
212
  - Labels (כן/לא) near the gateway, not at path end.
193
213
  - Flow labels must not overlap other elements.
214
+ - Place labels on the horizontal segment of the arrow, not on the vertical drop.
194
215
 
195
216
  ## Typography & Hebrew
196
217