Repository navigation
Diagram Readability (v0.25.0): grid, guarded orthogonal routing, connection editing, Templates and node outlines #344
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Activity
- changed the title
[-]Diagram Readability: grid placement, guarded orthogonal routing and label placement[/-][+]Diagram Readability (v0.25.0): grid, guarded orthogonal routing, connection editing, Templates and node outlines[/+]on Oct 9, 2026 Released: v0.25.0
Diagram Readability shipped as one migration in v0.25.0, from PR #345 (head
1b2824d, squash commit24d0d91onmain, the same tree). The contract is indocs/diagram-layout.md,docs/edge-routing.md§ER14–§ER16 anddocs/specs/SEMANTICS-R10.md.The six steps
- The grid and the conversion. A 16 px grid and a fixed port row 28 px below a node's top; snapping for new nodes, drags, frames and arrow keys (16 / 64 px); Alt is a free move and Ctrl / ⌘ moves a frame alone. An ordinary older document is re-placed once when it opens, before its history starts (
layoutVersion1); revisions, proposals and a revision-based Project autosave are excluded from the automatic conversion and keep their recorded layout. Tidy to grid re-places the current document as one undo step. Smart guides were added on the same base: port row, centre and edges, then the grid. - Automatic orthogonal routing. The guarded router never crosses a node fill, own end nodes included; same-port fans share only a 16 px stub and branch past it; labels take a free slot on their own route; unresolved cases are reported, never hidden.
- Connection shapes and bend points. Orthogonal (the default), Curved and Straight, with bend points that make an orthogonal route manual and Reset to automatic; one undo step each; Straight is
loop-revision/10. The phone shows every shape and bend point without editing. - The Templates. All five placed for the grid by each node's widest box over the 18 languages with a 48 x 32 px clearance and 32 px between frames, every connection automatic, with readable opening views for the coffee roastery and early MMO Templates.
- Text inside the outline (fix(canvas): text stays inside the Pool, Source, Drain, Converter and Gate outlines at every width #337). The Pool, Source, Drain, Converter and Gate are drawn for their own width and every painted element keeps 8 px inside the drawn outline; the Templates were placed again by the new widest boxes, and the conversion keeps frame membership with a frozen pre-outline box.
- Collisions and baselines. An automated check over all 18 languages, on the bundled Templates and at users' coordinates (the Templates as saved before v0.25.0, converted): no blocked or outer-corridor route, no fan overlap past its stub, no connection through a node, no label on a node, no frame cutting a node and no node overlap. Of the 76 visual baselines, 57 were replaced, 6 intentionally retained and 13 byte-identical. The MMO opening view keeps its four core start nodes whole in every language, with the minimap open or collapsed.
Verification
- CI on
main(24d0d91): 2,105 browser tests in six shards, the production-bundle suite (16) and the PWA suite (19), no failure and no retry. - Production (build
24d0d91), in a fresh browser context: the right version and build, no page, console or request errors, What's new with the five v0.25.0 items, new nodes on the grid, orthogonal routes, Tidy to grid and the Route choices in place. - The CI split grew to six time-cut shards with refreshed weights (
docs/ci-e2e-shards.md); the zh-Hant startup retries seen on the PR's CI runs are recorded on test(e2e): the zh-Hant descriptive-copy wrapping test slows down on CI and ended a browser session #305, which stays open.
Not in this release
Editing curve control points directly and further line decorations are out of scope for v0.25.0; they are a candidate for a later design survey.
Closing as completed.
- The grid and the conversion. A 16 px grid and a fixed port row 28 px below a node's top; snapping for new nodes, drags, frames and arrow keys (16 / 64 px); Alt is a free move and Ctrl / ⌘ moves a frame alone. An ordinary older document is re-placed once when it opens, before its history starts (
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Summary
Diagrams become hard to read as they grow: connections run through nodes, labels sit on nodes and on each other, ports that should line up are a few pixels apart, and nothing snaps to the grid the canvas already draws. This umbrella issue tracks the whole Diagram Readability migration. Its six steps ship together as one release, v0.25.0, so that coordinates, routes, Templates, node outlines and the visual baselines change once rather than several times. The release notes, the change declaration and the baselines are settled once, after the last step.
Current state (main
10098d6, every Template in all 18 languages)Measured direction
Decisions (2026-10-09)
layoutVersionis re-placed once, deterministically, when it is opened, before its history starts (not an undo entry), from a canonical geometry that does not depend on the language or on font measurement; the newlayoutVersionis stored. A position chosen freely with Alt is kept. Tidy to grid re-places the current document as one undo step. Bundled Templates are re-placed and reviewed in their source.Connection shapes and route editing
Steps (all in v0.25.0)
layoutVersionwith the one-time conversion, Tidy to grid.Compatibility
The file gains
layoutVersion. Ordinary documents are converted once on open; the conversion moves positions and connection routes; it never changes the engine digest or any simulation result. Off-grid positions remain valid input. The visual baselines are reviewed as one exact list, once, before they are updated.Out of scope