Skip to content

HDL phase 1: what a SystemVerilog product needs from the platform - #79

Merged
endrix merged 5 commits into
mainfrom
feat/hdl-phase1-platform
Oct 17, 2026
Merged

endrix merged 5 commits into
mainfrom
feat/hdl-phase1-platform

Conversation

@endrix

@endrix endrix commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Five platform changes made for sv-ide, a sidecar product whose runtime is a Python compiler frontend (slang) rather than a Python workflow runtime. Each keeps the core neutral: the platform learns a fact, never a vocabulary. Default behaviour is unchanged for every existing product; the toolkit's parity tests and the neutrality gates pass.

  1. A sidecar product that is not Python — platformEntityItems: false leaves the palette's Entities to the product; openability.decoratorName is optional; navigation: 'none' installs no Python navigation and skips the caller scan; chat.sourceMimeType names what the agent receives the file as.
  2. Port side from the producer — a port's side (west/east) and group, and a boundary node's meta.side, are honoured over the direction, from the shared port anchor through ELK's port sides and rows, the label pass, the client hit areas and a mirrored boundary glyph. A handshake's ready sits beside the valid it answers, and the wire between two nodes is one straight run. role: bidirectional edges draw without an arrowhead.
  3. documentErrorsToProblems — a product may ask for a document's root-level errors (a compiler's) to reach the Problems panel with file, line and column. Default off, as the diagnostics parity tests pin.
  4. A location without a file is in the graph's own file — a hierarchy export of a 34 MB netlist repeated one absolute path on every element, a third of the export; a producer may leave it out where it is graph.meta.file, and the reader puts it back.
  5. ELK is told the side the producer placed a port on — the configurator derived elk.port.side from the direction alone, so a ready placed in the other margin was routed to from across its own node, label and all.

Gates on this branch: typecheck 5/5, neutrality 5/5, diagram-server 341 tests, sidecar-toolkit 272 tests.

https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS

Endri Bezati added 5 commits October 17, 2026 00:21
…n, MIME

Toolkit changes T3-T7 of ide/hdl-ide-plan.md, each additive with the Python
behaviour as the default:

- platformEntityItems (storage options, API, toolkit input): false leaves
  the palette's Entities category to the product's own entityPaletteItems.
- openability.decoratorName is optional; with only a probe, an undecidable
  probe answers unknown and the platform opens the file.
- navigation: 'none' installs no Python navigation provider and the model
  source's caller scan and source walk answer empty.
- chat.sourceMimeType names what the agent receives the file as.

Claude-Session: https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS
…ayload

Side and direction were one thing, computed in five places that must agree:
the shared port anchor, the gmodel source, ELK's port sides and row order,
the label pass and the client views. So a handshake's ready, an output
answering an input bundle, could only sit on the far edge and loop around
both nodes.

A port may now carry a side (west/east) and a group, and a boundary node a
meta.side; they are honoured over the direction everywhere the side is read
(cal:portSide, cal:portGroup, cal:boundarySide). A boundary node placed in
the other margin takes the other layer, its port faces the diagram and the
client mirrors the glyph. The direction, the port type and the CSS classes
that say input or output are untouched. Absent, everything is as before.

An edge with meta.role bidirectional (an HDL inout net) is drawn without an
arrowhead. The toolkit normaliser passes role, side, group and width
through. Tests for the anchor, the gmodel and configurator, the normaliser.

Claude-Session: https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS
A graph document carries its own errors at the root, beside graph, where
the diagnostics walk over the graph never looks; on the CLI path a Python
runtime's load errors stay in the diagram's overlay, and the parity tests
pin that. A compiler's errors are a different matter. A product that says
documentErrorsToProblems on its profile input gets them published with
their file, line and column. Default off, so nothing changes for anyone
else.

Claude-Session: https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS
A hierarchy export of a large netlist repeated one absolute path on every
node, port and edge of every graph, a third of the export. A producer may
now leave the file out where it is the graph's meta.file; the document
reader puts it back before anything navigates, on a node's source,
referencedSource and authoredSource, a port's and an edge's source. A
document with every file spelled out, or whose graph names no file, is
returned as it is and reads exactly as before.

Claude-Session: https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS
The configurator derived elk.port.side from the port's direction alone,
and that is the only side ELK ever sees. A bundle's ready, placed in the
other margin by the producer, was therefore routed to as if it sat on the
far edge: the wire came around the outside of the margin and crossed the
whole boundary node, label and all, to reach the glyph. cal:portSide now
wins, as it already does for the anchor, the rows and the glyph. Without
one the direction decides exactly as before, so no other diagram moves.

Claude-Session: https://claude.ai/code/session_01UtmwstZRcWJeg3C69s1TnS
@endrix
endrix merged commit c5707e8 into main Oct 17, 2026
1 check 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