A group made in an agent call is fitted round its nodes only after
the call has arranged them, and the arrangement knew nothing of it.
With On key held, Move and Owner placed fresh, a group round key and
move and one round the owner, the Owner landed beside the key. Move
is taller than the key, so the Owner stood in the first group and the
two groups lay on each other. lint_graph counted none of it. Found
while testing copy_nodes (#434).
- arrange takes the new option blocks: sets of arranged nodes a group
is fitted round afterwards. Once the columns are laid out, whatever
would stand in such a group goes below it, a node or the group of
another set, with everything arranged under it.
- The flow keeps its columns. A first try laid each set out as one
block instead, but then the link from the Owner ran over the key
inside the group (throughNodes 1).
- AgentEdit passes every group made in the call whose nodes are all
new. Groups round nodes already there and the Arrange button stay
as they were.
Tests:
- agent-edit: new test with the setup that showed the fault. No node
stands in a group not its own, the groups lie apart, lint_graph has
0 overlaps, throughNodes, backwards and coveredNotes.
- Counter-check: without the new step exactly that test is red.
- Agent, graph-arrange and graph-follow tests 120/120.
- e2e 71 on atx: ALL PASSED, 26 checks.
- Gate on atx: CHECK EXIT 0, 327 files, 5025 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The agent built every part again that already stood in a graph,
node by node, while the editor has Ctrl+C and Ctrl+V for it. The new
command `copy_nodes` in the area graphs copies nodes into the same
graph or another one, in one undo step with the rest of the call.
- The links between the copied nodes come along, and so do groups
and comments that are only about copied nodes. A node belongs to a
group by its middle, as when it is dragged. `boxesAbout` in
annotationFollow.ts decides this.
- `made` names each copy by the id of its original, so later steps
link to it with `$copy.<id>`. `$copy` alone is the first one.
- Without x and y the copies are arranged at the end of the call like
new nodes. With them they keep their layout, top left corner there.
- Nodes the target graph does not take are refused by name, not left
out as Ctrl+V does. The rule is the graph tab's: `fitsGraph` and
`fittingPart` moved from clipboard.ts to paletteEntries.ts.
- A copied Variables node takes the variables of its behavior along
into the target behavior (`CarryVariablesCommand`), with default,
value, Keep and Private. A variable of that name of another kind
there is refused.
- The relay's instructions name `copy_nodes`.
Found on the way:
- Groups made by the agent can take in a node of another group once
the nodes are arranged. lint_graph does not count that.
- Undo after a paste leaves an empty `groups: []`, as
AddAnnotationCommand does. It is the same as no list.
Tests:
- agent-copy (new, 3 tests) with the agent, relay, clipboard and
palette tests: 118/118.
- Counter-probes: 6 bendings, all compile, all red.
- e2e 71 (atx): ALL PASSED, 26 checks.
- Gate (atx): CHECK EXIT 0, 327 files, 5024 tests.
- Live in the MCP Test Project: 5 nodes of Arrow keys walk into a new
behavior, 6 links, group, comment and speed (300) along, lint_graph
0 everywhere, taken back with undo.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>