diff --git a/packages/v2/command-explain/src/utils/ComputedUpdateReasonBuilder.ts b/packages/v2/command-explain/src/utils/ComputedUpdateReasonBuilder.ts index 6eee188a1..05333cefc 100644 --- a/packages/v2/command-explain/src/utils/ComputedUpdateReasonBuilder.ts +++ b/packages/v2/command-explain/src/utils/ComputedUpdateReasonBuilder.ts @@ -123,8 +123,25 @@ export const buildComputedUpdateReason = ( } } + const implicitLinkSeedIds = new Set(); + for (const fieldId of targetFieldIds) { + const meta = fieldsById.get(fieldId.toString()); + if (!meta || meta.type !== 'link') { + continue; + } + const targetId = fieldId.toString(); + if (seedFieldIdSet.has(targetId)) { + implicitLinkSeedIds.add(targetId); + } + const symmetricFieldId = meta.options?.symmetricFieldId; + if (symmetricFieldId && seedFieldIdSet.has(symmetricFieldId)) { + implicitLinkSeedIds.add(symmetricFieldId); + } + } + + const effectiveSeedIds = new Set([...seededDependencyIds, ...implicitLinkSeedIds]); const seedFields: ComputedUpdateSeedField[] = changedFieldIds - .filter((fieldId) => seededDependencyIds.has(fieldId.toString())) + .filter((fieldId) => effectiveSeedIds.has(fieldId.toString())) .map((fieldId) => { const meta = fieldsById.get(fieldId.toString()); const tableId = meta?.tableId ?? plan.seedTableId;