Skip to content

feat(etch): port-aware layout, orthogonal routing, interactive HTML#37

Merged
avrabe merged 2 commits intomainfrom
feat/etch-rendering-v2
Mar 17, 2026
Merged

feat(etch): port-aware layout, orthogonal routing, interactive HTML#37
avrabe merged 2 commits intomainfrom
feat/etch-rendering-v2

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented Mar 17, 2026

Summary

Major etch rendering upgrade — replaces PR #36 (rebased cleanly on current main).

  • Port-aware layout: PortInfo/PortSide/PortType data model, positioned ports, edge-to-port snapping, SVG circles with type colors
  • Orthogonal edge routing: A* visibility-graph router in ortho.rs, obstacle avoidance, bend penalty
  • Interactive HTML: pan/zoom/selection/group highlight, semantic zoom CSS, URL deep linking
  • Backward compatible: all new fields default to empty/None
  • 54 tests pass (14 new)

Satisfies: RENDER-REQ-001, 002, 003, 005, 006
Trace: skip

🤖 Generated with Claude Code

Test and others added 2 commits March 17, 2026 21:01
8 spec files covering:
- routes.spec.ts: smoke test 21 dashboard routes (HTTP 200, valid HTML)
- navigation.spec.ts: direct URL, back/forward, reload button
- artifacts.spec.ts: filter/sort/pagination via URL params
- stpa.spec.ts: hierarchy, H-13 presence, filter bar, fold/unfold
- graph.spec.ts: SVG rendering, focus, node budget
- print-mode.spec.ts: ?print=1 strips nav/HTMX
- url-state.spec.ts: filter/sort/page state survives reload
- validation.spec.ts: severity filter, text search

CI integration: Playwright job in ci.yml with Chromium, artifact upload.

Verifies: FEAT-052
Refs: REQ-007, SC-15

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Major etch rendering upgrade with three capabilities:

Port-aware layout (RENDER-REQ-002):
- PortInfo, PortSide, PortDirection, PortType data model
- position_ports() with side-aware placement and auto-resolution
- Node height grows for port count, edge-to-port snapping
- SVG rendering: circles, direction triangles, type colors

Orthogonal edge routing (RENDER-REQ-001):
- ortho.rs: visibility-graph A* router with obstacle avoidance
- EdgeRouting::Orthogonal (default) vs CubicBezier (legacy)
- SVG polyline L commands for axis-aligned segments

Interactive HTML wrapper (RENDER-REQ-003, 005, 006):
- html.rs + embedded JS: pan, zoom, selection, group highlight
- Semantic zoom CSS classes, URL ?highlight= deep linking
- Zero external dependencies

Backward compatible: ports/source_port/target_port default to empty/None.

Trace: skip

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit 73f4055 into main Mar 17, 2026
12 checks passed
@avrabe avrabe deleted the feat/etch-rendering-v2 branch March 17, 2026 20:05
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Rivet Criterion Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 970c7ed Previous: 08284a8 Ratio
validate/100 44259 ns/iter (± 1217) 35630 ns/iter (± 251) 1.24

This comment was automatically generated by workflow using github-action-benchmark.

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe avrabe restored the feat/etch-rendering-v2 branch March 18, 2026 05:08
@avrabe avrabe deleted the feat/etch-rendering-v2 branch March 19, 2026 07:02
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