Symptom

No test coverage verified the end-to-end Phase 3 source-wiring invariants as a suite: that every representative targeting node type (Pin, DataPoint, Button, TaskList, Trigger, Cron) flows through TargetingWiringEditor; that pre-Phase3 wired nodes retain their sources/executionSource/nodeAction values through withParentSourceDefault and JSON round-trips; that PARENT_EXECUTE_SUCCESS is absent from the rendered Invoked-By options while the enum constant survives deserialization; that the multi-host source picker groups by host and deduplicates correctly; and that deleting a source node leaves source-wired subscribers structurally intact.

Root cause

Stages 1–4 (PRs #294–#297) shipped the implementation and partial test coverage in dedicated issue branches. No single closing stage verified all invariants together:

The TargetingWiringContractTest in composeApp/desktopTest/ closes the remaining gaps: representative-type interface check, copy-round-trip, D4 targets-field retention, and pre-Phase3 wiring preservation (both via withParentSourceDefault and fastJson).

Fix

Prevention