Shapes live rows into the canvas's RuntimeStatus map.
Correlation is by name, with an ID fallback, and that ordering is deliberate. A submitted
graph's Task rows carry database IDs, while the spec on the canvas carries producer-assigned
tempIds — the two never match, because the producer could not know real IDs at authoring time.
The task's name is the only value that survives submission unchanged, so it is the join key. An
ID match is still honored first for the case where a host is showing a graph whose tempIds
genuinely are row IDs — which is exactly what ConvertAgentSpecToTaskGraph produces.
Rows that match nothing are skipped rather than guessed at: a wrong node lighting up green is
worse than a node that stays grey, because the first is believed.
Shapes live rows into the canvas's
RuntimeStatusmap.Correlation is by name, with an ID fallback, and that ordering is deliberate. A submitted graph's Task rows carry database IDs, while the spec on the canvas carries producer-assigned
tempIds — the two never match, because the producer could not know real IDs at authoring time. The task's name is the only value that survives submission unchanged, so it is the join key. An ID match is still honored first for the case where a host is showing a graph whosetempIds genuinely are row IDs — which is exactly whatConvertAgentSpecToTaskGraphproduces.Rows that match nothing are skipped rather than guessed at: a wrong node lighting up green is worse than a node that stays grey, because the first is believed.