Skip to content

Release 0.9.0: client-drawn SysON views, UX v1 viewers, @mcpview migration - #7

Merged
superWorldSavior merged 8 commits into
mainfrom
feat/syson-ux
Oct 24, 2026
Merged

superWorldSavior merged 8 commits into
mainfrom
feat/syson-ux

Conversation

@superWorldSavior

@superWorldSavior superWorldSavior commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

Release 0.9.0 of @casys/mcp-syson. See CHANGELOG.md for the full entry.

  • Diagrams drawn by the viewer for SysON's General, Interconnection, Action Flow and State Transition views: nested parts, actions and states in their regions, view frames, control nodes with their names, ports and parameters with their direction, and SysON's own edge notation. Edges stay under blocks and orthogonal; labels sit clear of blocks.
  • Layout: SysON's positions or an automatic ELK layout (nested containers), loaded only when chosen.
  • syson_diagram_snapshot contract (breaking for nodes / edges consumers): hidden elements left out and counted (hiddenNodeCount, hiddenEdgeCount), nested nodes have kind node, styles carry childrenLayout, edges carry SysON's style. The advertised output schema follows.
  • Seven viewers on one UX (shared header and rows, kind pills, technical details), a tree model explorer, AI-context selection with compact/reference/query tiers.
  • New tools: syson_requirements_list, syson_diagram_types.
  • Dependencies: @mcpview/server 0.30.0, @mcpview/contracts 0.2.0, @mcpview/view 0.11.0, @mcpview/components 0.12.0, MCP SDK v2.
  • Fixes: requirements trace accepts the provider's own output; validation shows its diagnostics.
  • Docs: README leads with a reproducible capture of the diagram viewer; the requirements capture is re-rendered.

Verification

  • deno task fmt, lint, check, ui:check, ui:build, ui:verify: green; deno task test: 271 passed, including recorded fixtures of the three views, the advertised output schema (Ajv) and a real-ELK layout test.
  • Visual checks on the live SysON audit project: three views in SysON and Auto layouts, light and dark, 420 px width; General View view1 unchanged apart from hidden compartments now left out (as SysON shows it).
  • Independent review (Sonnet subagent): three findings fixed with tests (output schema, ELK compound ports, unplaced nested blocks).
  • deno publish --dry-run: success.

Release

After merge, tag v0.9.0 on main: the release workflow builds and smokes the GHCR image, qualifies it against SysON, then publishes the JSR package.

🤖 Generated with Claude Code

superWorldSavior and others added 8 commits October 23, 2026 13:42
…t preview

Codex work of 2026-10-23, left uncommitted in the main checkout and
captured here unchanged so the UX work can resume from it: compact
floating diagram toolbar, temporary Space-drag panning, a diagram model
with rectangle selection of primary blocks, and SelectionBasket rebuilt
on the kit's ActiveContextChip. Focused tests and Codex reviews passed on
the local preview; the basket still imports the unpublished
@casys/mcp-view-components/preact/context entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adopt SDK v2 and shared active context controls with compact, reference and query tiers. Resolve complete multi-element identity queries for graduated selections.

Co-Authored-By: Codex <noreply@openai.com>
…diagnostics

Co-Authored-By: Codex <noreply@openai.com>
Applies syson-ux-design.md on the @mcpview context controls.

- Shared chrome: one ViewerHeader (explicit title, meta, actions, and the
  AI-context basket at its end), one selectable ElementRow (kind pill,
  name, readable kind, no UUID in rows; selection intent shown at once
  through data-context-state, double-click or Enter opens without an
  intermediate context write), KindMark (SysML family tones, outlined
  definitions) and TechnicalDetails (ids live there, with copy).
- Model explorer: a real tree. Children load lazily and stay cached,
  indent guides, first level grouped by family when long, kind chips act
  as filters, WAI-ARIA tree keyboard navigation; opening an element shows
  its page (kind, contents by kind, technical details).
- Validation: counts per severity, diagnostics grouped by severity and
  named by their constraint, the constraint inventory; a click puts the
  constraint and its diagnostic in AI context.
- Query results and value change: shared rows and full basket, query line
  in the header, sort and selection kept across locales; before/after
  value card.
- Requirements and trace: live list with authored limits, in-place detail
  sheet; trace rows with TRACE GAP and literal unknown verification, a
  "gaps only" filter and a summary.
- Diagram: one header line with a "..." menu (existing views, rendering
  details), 35 % opening floor in reading order (top-left block),
  overview map, zoom to selection, non-scaling selection outline with a
  count badge, keyboard help behind "?".
- Tests and checks follow the new structure; verify-ui-bundles accepts
  viewer catalogs built on sysonMessages.

Verified in the audit host on the live SysON project: ui:check, 234
tests, lint, fmt, check, and 7 fresh bundles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The diagram viewer now draws the SysON snapshot itself from its nodes and
edges instead of showing the server's approximate SVG (kept as the
fallback when the data cannot be rendered client-side).

- Edges live in a layer under opaque blocks, so no line crosses a block's
  content; orthogonal routes with rounded corners.
- Blocks: family accent bar, kind pill (outlined definitions, filled
  usages), 13 px names, titled compartments with "+N more", ports on the
  border with outside labels, dot grid, hover lifts a block and
  highlights its edges; selection and pending states as before.
- Level of detail: full blocks from 60 %, header only (pill, name, item
  count at constant screen size) from 30 %, tinted blocks with constant
  11 px names below, so the 35 % opening is readable.
- Layout control in the "..." menu: SysON (default) or Auto. Auto runs
  ELK layered/top-down with orthogonal routing and packed components,
  lazily, in a worker with an in-page fallback, ~0.2-0.5 s on view1;
  failures fall back to the SysON layout with a quiet status.
- Edge markers follow the edge type and never invent semantics (view1
  only reports straight edges today).

The bundle grows from 0.63 MB to 2.28 MB (ELK, never evaluated at
opening; first paint 123 -> 173 ms on localhost).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The three view types beyond the General View fell back to the server's
approximate SVG and drew every element SysON hides. They are now drawn by
the viewer, nested as SysON shows them.

- Snapshot contract (syson_diagram_snapshot): SysON's node and edge state
  is read; hidden elements (and everything under a hidden node) are left
  out and counted in hiddenNodeCount / hiddenEdgeCount, faded ones carry
  faded: true. Node styles carry childrenLayout (list / free); children of
  a free-form node or of a view frame have kind "node". Edges carry
  SysON's style (lineStyle, sourceArrow, targetArrow). The advertised
  output schema and the viewer validator accept the new fields.
- Model: list compartments stay sections of rows; free-form compartments
  are regions holding nested blocks (parent, depth); view frames get a
  title tab; start, done, decision and fork/join bars keep their names;
  parameter ports keep their in/out direction.
- Notation from SysON's own style: dashed successions with open heads,
  filled item-flow heads, diamonds, circles, triangles with bar or dots.
  The type-based marker remains the fallback.
- Drawing: container bodies, then edges, then blocks (opaque headers and
  list sections), then edge labels on top, placed off blocks and other
  labels. Routed edges attach facing their bends and stay orthogonal;
  north/south port labels stack.
- SysON layout: compartments where SysON put them; unplaced nested blocks
  get a grid in their region and a placed container grows around them.
- Auto layout: containers are ELK compound nodes (free ports, padding for
  header and sections); edges live in their lowest common container;
  diagonal or missing sections are routed locally.
- Heading: the diagram's name is the title, the representation type
  ("General View") the eyebrow. A container spanning the diagram opens
  on its header.

Recorded fixtures of the three views (tests/fixtures/diagram-views) back
the model, scene, schema and real-ELK tests. Reviewed by a Sonnet
subagent; its three findings (output schema, ELK compound ports, unplaced
nested blocks) are fixed with tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Version 0.9.0 in deno.json, the App manifests, the server identity test,
  the README and the getting-started guide; the documented OCI image moves
  to ghcr.io/superworldsavior/mcp-syson.
- CHANGELOG entry for the branch: client-drawn SysON views with nested
  blocks and SysON's notation, SysON/Auto layout, the seven viewers' UX,
  syson_requirements_list and syson_diagram_types, the snapshot contract
  change (hidden elements left out, kinds, styles), the @mcpview and MCP
  SDK v2 migration, and the requirements-trace and validation fixes.
- README captures: the requirements viewer is re-rendered on the new UX
  and a diagram viewer capture (FlightModes state machine) leads the page.
  The documentation harness serves either fixture (?view=), accepts context
  updates, and gives the diagram a fixed height so the capture opens at
  full detail; docs:viewer-fixtures builds diagram-session.json from the
  recorded view fixture, and docs:viewer-screenshot writes both images.
- Docs describe what the diagram viewer draws and the server SVG's role
  as fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@superWorldSavior superWorldSavior changed the title UX v1: @mcpview migration, active context and redesigned viewers Release 0.9.0: client-drawn SysON views, UX v1 viewers, @mcpview migration Oct 24, 2026
@superWorldSavior
superWorldSavior marked this pull request as ready for review October 24, 2026 16:27
@superWorldSavior
superWorldSavior merged commit 7ad50b2 into main Oct 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant