# ASysT 0.1.6

The big one: a **new way to read and move through a model**, **named renderings** you can save and switch
between, **internal-structure (IBD) editing**, much **faster large models**, and **clearer diagnostics**.

---

## ✨ New: Navigation — move through a model, don't just open files

ASysT now treats *moving through* the model as a first-class act, with a persistent **navigation strip**
across the top.

- **Markers on every box and relation** take you somewhere: `⊕` drill into a part's internal structure,
  `⧉` go to an element's definition (by name, even in another file), `◷` a state machine, `⤳` an activity,
  `⇄` a sequence. Each click is one step.
- **A breadcrumb trail with Back / Forward / Home** — like a browser. Step back to exactly where you were;
  jump to any earlier crumb.
- **Lenses** — the same element can be viewed as its *definition*, its *internal structure*, or its
  *behaviour*, and you switch between them in place.

See [Navigating models](../02_Navigating_models.md).

## ✨ New: Renderings — save and switch how a diagram is arranged

A **rendering** is the whole picture — box positions, colours, sizes, connector routing, what's expanded.
You can now keep several.

- **Save, name, switch, rename and delete** renderings from the **explorer's Renderings section**; a `💾`
  overwrites the current one.
- **Per-diagram**: the same element can sit differently in different diagrams; each diagram remembers its
  own arrangement (a brand-new diagram still inherits the existing one).
- **Restored completely** — opening a rendering brings back its full picture, including which blocks were
  expanded. Stored in a `Rendering/` folder beside your model — **never in your `.sysml`**.

See [Diagrams & views](../03_Diagrams_and_views.md).

## ✨ New: Internal structure (IBD) editing

Drill into a part (`⊕`) and arrange its inner wiring:

- **Move a port** by dragging its pin onto another snap point on the box; **drag a port's name label** to
  nudge it.
- **Re-anchor a connector** to a different point — the routing follows.
- Connectors now **draw across files** when a part's type lives in another file of the model.

## ✨ Faster on large models

The canvas and the requirements table are now **virtualized** — they render only what's on screen.

- A **2,000-part** model that took ~50 s to open + drill now does so in **~20 s**, and stays light as you
  pan. (Very large models — ~11k elements — still hit a parsing limit on the engine side; that's next.)

## ✨ Clearer diagnostics

- **Friendly hints** on the problems badge when you write valid SysML the **bundled parser doesn't support
  yet** (e.g. `state machine def`) — so it reads as a known limit, not your mistake.
- A **"Model rendering"** section warns when a construct was understood but **couldn't be drawn** (e.g. a
  connection whose endpoints are deeply nested) — the diagram is never silently incomplete.
- **`connect … to …` and `flow … to …` connections are now drawn** as edges when their endpoints resolve.

See [Checking your model](../04_Validation.md).

## 🔒 Read-only by default

Opening and navigating a model **never changes your saved arrangement** — only your own edits (a drag, a
recolour, a resize) are persisted. So browsing a model can't accidentally dirty a hand-curated layout.

## 🔧 Under the hood

- A real **regression net**: a headless browser test suite (Playwright) plus dozens of unit tests now guard
  the navigation, rendering, and read-only behaviour above; a minimal **CI** runs them on every change.
- **Honest extraction**: the engine's source-text recovery is hardened — losses are now *loud* (warnings),
  brace-counting is string-aware, and endpoints resolve by qualified name. The boundary between the language
  server and ASysT's own recovery is documented.

## ⚠️ Notes & limits

- The bundled language server accepts a **subset** of SysML v2; unsupported constructs now show a friendly
  hint rather than a cryptic error. (A real OMG example model parses cleanly.)
- A connection whose endpoints are **deeply nested** (internal-structure only) may be **warned** rather than
  drawn for now.
- **Very large models** (~11k elements) can still be slow to open — the remaining wall is the language
  server's cold parse, not the canvas.
