You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
validate hangs (effectively forever) on a workflow node with a very large width #1072
archify validate workflow does not return for a workflow with one lane, two nodes, one of which has an astronomically large width, and two automatic edges between them. Run time grows roughly linearly with the width: 1e25 takes ~8 s, 1e26 ~60 s, and 1e30 was still running when killed at 120 s (and at 600 s in an earlier run). Reproduced on v3.2.0 and on main (25cf370), Node 24, Windows.
Change 1e30 to 1e25 (finishes in ~8 s) and 1e26 (~60 s) to see the growth.
Expected
Validation reports a diagnostic promptly (the nodes also overlap, which is reported once validation finishes), or rejects the out-of-range size, instead of hanging.
automaticPortCandidates in archify/renderers/workflow/workflow-compiler.mjs:4492:
for (let offset = 0; offset <= extent / 2 - 16; offset += 12) {
for (const sign of [direction, -direction]) {
const point = [...center];
point[axis] += sign * offset;
if (clear(point) && !candidates.some(...)) candidates.push(point);
}
if (candidates.length >= 2) return candidates.slice(0, 2);
}
With two automatic edges the preferred port is occupied, so the loop probes alternative offsets along the node side. The bound is extent / 24 iterations. At width ~1e25 and above, center + sign * offset rounds back to center (offset 12k is below one ulp of the coordinate), so every probe lands on the same blocked point, candidates never grows, and the loop runs all extent/24 iterations. The schema bounds width/height from below (minimum 32) but not from above.
Suggested fix
Stop the probe loop when point[axis] no longer differs from center[axis] (the step has fallen below floating-point resolution), and/or cap the iteration count (the useful offsets are within a few hundred px of the centre).
Add a sensible maximum for node width / height in the workflow schema so absurd sizes are rejected with a normal schema diagnostic.
Reproduced the supplied workflow on our 3.2.0-based fork: validation exceeded a bounded 5-second child-process timeout. We applied a correction in BlueboxC@41147dd.
Automatic port probing now stops when the spacing cannot produce a distinct floating-point coordinate. Authored dimensions and ordinary routing keep their existing contract. The public CLI regression covers widths 1e18, 1e25, 1e26 and 1e30 plus an ordinary-width control; validation completes and does not write HTML.
Verified on macOS arm64 with Node 22.23.2, including the installed Skill. The full suite passes (3,447 passes; 131 conditional/platform skips), as does the maintained Chrome gate (314 passes; 9 conditional skips). Native Windows behavior has not been rerun here.
Agent-assisted maintainer follow-up: independently reproduced on upstream dev10b4dd5c, Node22.23.3/macOS arm64. Public validate with width=1e30 exceeded a bounded 5-second child timeout; the width=320 control succeeded in about0.28s. Neither wrote HTML.
A narrow upstream PR is welcome. Please isolate the floating-point progress/termination guard and public-CLI regression from the unrelated #1070/#1071 changes bundled in41147dd9, targeting current dev. Preserve authored dimensions and ordinary routing; an arbitrary schema maximum is not required. Reuse the extreme-width cases and ordinary control, explain the stopping condition/fallback, and verify bounded completion, structured diagnostics and no HTML write. Supply focused final-head Workflow evidence and applicable generated/package/Windows CI; label reused fork evidence by its actual revision. No broader router rewrite is requested.
Prepared the narrow current-dev contribution requested above: draft #1110, head b51dda9, based on dev 10b4dd5c.
It contains only the floating-point progress guard, a bounded public-CLI regression and the rebuilt canonical ZIP. No #1070/#1071 changes, arbitrary schema maximum or broader router rewrite are included. Untouched dev exceeds five seconds at width1e30; the patched CLI completes for 1e18/1e25/1e26/1e30 and the320 control, returns structured receipts, preserves inputs and writes no HTML. The guard stops when a spacing step cannot create distinct coordinates or the next increment itself cannot advance.
All 292 focused Workflow tests pass, together with generated checks, canonical packaging and diff checks on macOS arm64 / official Node22.23.2. Final-head CI has since completed: 16 successful checks, four conditional skips, zero failures, including Windows portability on Node22/24, all three package platforms, both browser shards, WebM decode and ZIP freshness. These conditional checks are not a full-suite replay. Personal human review remains separate; the PR stays draft with that confirmation unchecked. Our installed fork already has this guard and remains on its customized 3.2.0 line.
Activity
BlueboxC commentedon Oct 23, 2026
Reproduced the supplied workflow on our 3.2.0-based fork: validation exceeded a bounded 5-second child-process timeout. We applied a correction in BlueboxC@41147dd.
Automatic port probing now stops when the spacing cannot produce a distinct floating-point coordinate. Authored dimensions and ordinary routing keep their existing contract. The public CLI regression covers widths 1e18, 1e25, 1e26 and 1e30 plus an ordinary-width control; validation completes and does not write HTML.
Verified on macOS arm64 with Node 22.23.2, including the installed Skill. The full suite passes (3,447 passes; 131 conditional/platform skips), as does the maintained Chrome gate (314 passes; 9 conditional skips). Native Windows behavior has not been rerun here.
BlueboxC
tt-a1i commentedon Oct 25, 2026
Agent-assisted maintainer follow-up: independently reproduced on upstream dev10b4dd5c, Node22.23.3/macOS arm64. Public validate with width=1e30 exceeded a bounded 5-second child timeout; the width=320 control succeeded in about0.28s. Neither wrote HTML.
A narrow upstream PR is welcome. Please isolate the floating-point progress/termination guard and public-CLI regression from the unrelated #1070/#1071 changes bundled in41147dd9, targeting current dev. Preserve authored dimensions and ordinary routing; an arbitrary schema maximum is not required. Reuse the extreme-width cases and ordinary control, explain the stopping condition/fallback, and verify bounded completion, structured diagnostics and no HTML write. Supply focused final-head Workflow evidence and applicable generated/package/Windows CI; label reused fork evidence by its actual revision. No broader router rewrite is requested.
BlueboxC commentedon Oct 25, 2026
Prepared the narrow current-dev contribution requested above: draft #1110, head b51dda9, based on dev
10b4dd5c.It contains only the floating-point progress guard, a bounded public-CLI regression and the rebuilt canonical ZIP. No #1070/#1071 changes, arbitrary schema maximum or broader router rewrite are included. Untouched dev exceeds five seconds at width1e30; the patched CLI completes for 1e18/1e25/1e26/1e30 and the320 control, returns structured receipts, preserves inputs and writes no HTML. The guard stops when a spacing step cannot create distinct coordinates or the next increment itself cannot advance.
All 292 focused Workflow tests pass, together with generated checks, canonical packaging and diff checks on macOS arm64 / official Node22.23.2. Final-head CI has since completed: 16 successful checks, four conditional skips, zero failures, including Windows portability on Node22/24, all three package platforms, both browser shards, WebM decode and ZIP freshness. These conditional checks are not a full-suite replay. Personal human review remains separate; the PR stays draft with that confirmation unchecked. Our installed fork already has this guard and remains on its customized 3.2.0 line.
BlueboxC