← ALL PATCH NOTES

Sequence builder: the polish patch

v0.7.1 BuffFix
  • Nodes snap to a 24px grid. Auto-connect anchors new steps to the bottom of your chain instead of orphaning them.
  • Branch YES/NO edges finally color-code, and dangling outputs pulse amber so you spot them before your prospect does.
  • Test run is real: pick a prospect, pick a step, fire it once through your connected inbox.
  • CRM connector layer landed: inbound webhooks, secret rotation, and a multi-company toggle for people running two grinds at once.
THE BUILD LOG

Nodes flew off the canvas for two days and twenty hours

A thirty-one line snap-to-grid feature broke the sequence builder in a way that only showed up after you dragged something. Nobody dragged anything for a while.

The sequence builder is a canvas. You drag step tiles onto it, connect them with lines, and the graph you draw is the campaign that runs. It is the most visual thing in this product, and for about a week in May it was also the most hostile.

Here is 2026-05-08, in six commits, all of them titled "Sequence builder: something."

At 04:18, a high-fidelity design pass. At 16:24, "make palette drop work." At 17:10, forty-six minutes later, "fix palette drag-and-drop regression." At 20:15, "defer init() until after app-shell rebuilds the body." At 23:19, auto-connecting new steps into a chain. At 23:38, a modal step editor with prompt and template libraries, at 1,303 lines.

Read the second and third of those in order. Make the drop work, then fix the drop regression, forty-six minutes apart. The second commit adds 85 lines and removes 77, which is the signature of somebody rewriting the same block of code rather than adding to it. The first fix was not built on. It was replaced.

Then at 20:15 comes the one that explains the whole week.

The shell was eating the page

The application has a shell: navigation, sidebar, the frame around everything. On page load, that shell rebuilt the entire content area by assigning to innerHTML.

If you have not met this failure before, it is worth understanding, because it is genuinely one of the nastiest ordinary bugs in browser work. Setting innerHTML does not modify the existing elements. It throws them away and parses new ones from the string. The new elements look identical. They have the same classes, the same attributes, the same text. Every event listener attached to the old ones is gone, because the old ones no longer exist.

So the sequence of events was: the page parses, the builder's script runs and mounts a canvas with listeners on it, and then the shell's own load handler fires and replaces the body it was mounted into. The canvas is now a corpse that looks exactly like a canvas.

That produces the specific and maddening symptom where a feature works perfectly in every test you run by hand and dies on every real page load, because the way you test it by hand is to paste something into the console, which runs after the rebuild. The commit at 20:15 defers the builder's initialisation until after the shell has finished. Twenty lines.

This same root cause comes back at least twice more over the following months, in completely unrelated features, each time discovered fresh. Once for the kanban board, where drag and drop silently stopped saving. Once across roughly fourteen pages at once, where a twenty-line fix restored settings toggles, trash restore, admin approvals, analytics controls and dashboard checkboxes that had all been quietly dead. The single most expensive line of code in this project's history is a page shell rebuilding the body it was handed.

The one that stayed broken

On 2026-05-13, between 00:40 and 00:54, eight commits landed in fourteen minutes. Snap dropped nodes to a 24 pixel grid. Defer auto-connect by one animation frame. Tag branch connections yes and no so the existing stylesheet can colour them. Connection and port visual polish. Harden a selector for the unconnected-output halo, which is four lines.

The first of those, the snap-to-grid, is thirty-one lines and it broke the canvas.

The graph library positions its nodes using left and top. The new snapping code moved them with a CSS translation offset instead. Both move things. Using both moves things twice. So every node you dragged jumped to a position offset by however far it had already travelled, compounding on each drag until it left the visible canvas entirely. And because the library never learned the node had moved, it never redrew the connecting lines, so the edges slipped away from the boxes they were attached to.

That went in at 00:40 on 2026-05-13. It was diagnosed and fixed on 2026-05-15 at 21:09.

Two days, twenty hours, and twenty-nine minutes of a sequence builder where dragging a node sent it into the void.

I find this one instructive precisely because it is not a subtle bug. It is enormously visible. Anybody who opened the builder and dragged a single tile would have seen it inside three seconds. It survived nearly three days because in those three days nobody opened the builder and dragged a tile, including the person who wrote the snapping code, who had presumably tested it by dragging exactly one node once, which is the case that works.

There is no process fix for that. There were no users yet. The only thing that catches it is somebody using the product for its actual purpose, and at that stage of a project the only person available to do that is the same person writing it, who has a strong incentive to believe the last thing they wrote works.

The polish continued regardless. At 01:54 on 2026-05-09, a commit changed the sequence connector lines from dashed grey to solid green with a glow. One file, twenty-one lines added, six removed, at two in the morning, about the appearance of a line.

I would defend that too. The connectors are the part of the builder that carries meaning. A dashed grey line says "provisional, maybe, not sure." A solid line with a glow says "this is wired, this will run." When the thing you are drawing is a machine that will email real people for the next fortnight, the difference between those two impressions is not decoration.

The builder works now. The nodes stay where you put them, the edges follow, and the shell has stopped eating the page. It took about a week and one genuinely humiliating two-day stretch, and the fix for the worst of it was twenty lines of deferral.

— DealArena Team