What to build
With the boundaryProxyView module in place (#145), replace the inline re-implementations of "which boundary proxies survive when these Connections are removed" that currently live independently in three island paths: component/connection delete, undo, and connect. Today the delete path re-derives this inline while undo already calls an extracted helper — they can drift.
Route all three through boundaryProxyView.survivingProxies so the rule lives in one tested place. This is where the locality win lands: orphaned-proxy cleanup, coalesced-node survival, and proxy re-add on undo all resolve through the same interface.
Sequenced after the cross-scope write migration (#148) because both touch the same handlers (commitDeleteConnection, commitConnect, the undo path); doing this second avoids reworking the same code twice.
Source: architecture review, candidate 02b.
Acceptance criteria
Blocked by
What to build
With the
boundaryProxyViewmodule in place (#145), replace the inline re-implementations of "which boundary proxies survive when these Connections are removed" that currently live independently in three island paths: component/connection delete, undo, and connect. Today the delete path re-derives this inline while undo already calls an extracted helper — they can drift.Route all three through
boundaryProxyView.survivingProxiesso the rule lives in one tested place. This is where the locality win lands: orphaned-proxy cleanup, coalesced-node survival, and proxy re-add on undo all resolve through the same interface.Sequenced after the cross-scope write migration (#148) because both touch the same handlers (
commitDeleteConnection,commitConnect, the undo path); doing this second avoids reworking the same code twice.Source: architecture review, candidate 02b.
Acceptance criteria
boundaryProxyView.survivingProxies— no inline re-derivations remainreaddCrossScopehelper resolve through the one module interfacepnpm checkandpnpm testpassBlocked by