angee.intake.merge
Intake's owned contribution to the work task-merge transaction.
move_task_needs
python
def move_task_needs(source: Any, canonical: Any) -> intMove source-task Needs to canonical with source provenance.
Work invokes this inside its row-locked atomic merge. The mover touches only intake-owned rows, and a second invocation for the same pair finds no source rows, making it an exact no-op.