Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: aa5f58ca1a89429ba0f03f9922dce163
Branch: dev/3-wrapped-frame-wires
Base: dcaae9b
At: 2026-10-29T13:13:24Z
What happens
In the drawer's Edit plane (wf-canvas[data-fit="drawer"]), a 3+ way parallel step is laid out by flowLayout into rows whose cards are sized node.w × node.h — 98×96 at panel width 364 — but the parallel frame and the wires still use the fixed 168×72 card metrics.
- Frame:
parallelFrameStyle(plugins/workflow/client.js:652-664, called at:1170-1177) derivesleft/top/width/heightfromNODE_Wandnode.y + NODE_H, never fromnode.w/node.h. With a 3-way step at panel 364 (cards 98×96, centres 72/182/292) it returns a frame spanning x = −22..386; the drawer canvas clips it (overflow:hidden,:2202), so both uprights are cut off. The same graph in the fitted plane (old 168-wide boxes) gets a frame of 2..362, inside the panel. - Frame bottom: at 96px cards the frame's bottom edge lands at y=318 while the cards reach 352, so the dashed bottom edge runs 34px under the cards (10px at the 72px fallback — the same arithmetic, just enlarged by the lay-out).
- Wires: the laid-out plane draws with
wirePath(from, to, 0)(:1158-1163, one fold at the midpoint of the two rows). On the 6-way fixture that puts the horizontal segment through cards on 8 of 13 edges —c>r4at y=258 through r1/r2,c>r6through r2/r3,r1>dat y=385 through r4/r5,r3>dthrough r5/r6. The same graph in the fitted plane has 0 crossings.flowWires(:820-824) already documents exactly this: a straight run across a band cuts through another line's cards, which is why the Read-only plane routes around them.
This was merged with #1683 / PR #1683, whose overlap work only moved the cards; the frame and wire geometry were not part of that change.
Reproduction
- Probe:
tmp/audit-1029y/probe-frame.mjs(exit 1, frame and wire numbers above) and its controltmp/audit-1029y/probe-before1683.mjs(fitted plane: frame 2..362, 0 crossings). - In the UI: open any workflow with a 3+ way parallel step in the drawer → Edit tab → panel width 364 (3-, 4- and 6-way graphs).
Expected
- The parallel frame encloses every card of the layer and stays inside the panel, for both the 96px and the 72px card height.
- No wire crosses a card in the laid-out plane (6-way fixture: 13 edges, 0 card crossings).
- The fitted plane and the Read-only plane draw exactly what they draw today.
Scope
plugins/workflow/client.jsand its test only:parallelFrameStyleusesnode.w ?? NODE_Wandnode.h ?? NODE_H.- The laid-out plane draws its wires from the boxes/bands
flowLayoutalready computes, throughflowWires; the fitted plane keepswirePath.
- Numbering/positions must come from the one place that computes them (no second copy of the row geometry).
- Not this issue: dragging a card in the laid-out plane committing panel coordinates into the stored graph — that is workflow: a drag in the drawer's laid-out Edit plane commits panel coordinates into the stored graph, so the node also moves on the Settings canvas #1686. Same file, so the two branches coordinate: rebase whichever lands second.
verifygreen withARCH_DOCS_BASE=<base>;patches/**untouched (nocore/change).
Acceptance
(a) frame left ≥ 0 and right ≤ panel width on the 3-way panel-364 fixture, and it encloses every card box.
(b) the same holds at card height 72 and 96.
(c) 6-way fixture: 0 edges draw their horizontal segment through a card box (port and mini-button areas included, not only card centres).
Reading of (c) after the fix, recorded here so the reviewer and the branch agree: the drawn geometry makes "mini-button area" impossible to clear together with (e). The mini-button box overhangs the card top by 8px and the port dot by 5px, while FLOW_WRAP_GAP is 12px, so any horizontal segment running through the wrap gap lands in one of the two boxes; the 8px overhang is exactly the routing the Read-only plane draws, which (e) freezes byte-identical. The acceptance is therefore card box + out-port dot = 0 crossings; the mini-button box is documented in the test and the PR body (wires render beneath the cards, the buttons stay clickable). Clearing it would need a larger wrap gap — a change to flowLayout, which would move the Read-only plane and break (e).
(d) #1683's six byte-identity fixtures and plugins/workflow/test/client.test.js:1145-1171 are unchanged and still pass.
(e) Read-only plane unchanged: flowWires paths on the existing fixtures are byte-identical.
(f) TZ=UTC ARCH_DOCS_BASE=<base> npm run verify exit 0, red-first test for (a)–(c) on the pre-fix source.
Activity
Draw the drawer Edit plane's frame and wires from its laid-out cards
HugoXK commentedon Oct 29, 2026
Release
Written-by: FlyBot Lead
Released: aa5f58ca1a89429ba0f03f9922dce163
Reason: merged as d98d98e (#1697); issue closed completed
At: 2026-10-29T14:32:34Z
Workflow stage drawer Edit plane: parallel Reviewer/Tester cards over…