fix(vision): il grafo di visione sopravvive a copy-on-write e creazione

_copy_tasks_to_version copiava una lista esplicita di campi che ometteva
vision_json e vision_output: la prima modifica a una ricetta con misure
produceva una versione nuova con i task camera senza grafo. Stessa
famiglia di bug nei percorsi di creazione (POST /api/recipes/{id}/tasks,
POST /api/tasks/{id}/subtasks): i campi erano dichiarati negli schemi ma
mai passati ai costruttori ORM, quindi l'API rispondeva 200 senza
salvare nulla. TDD: test_vision_copy_on_write.py fallisce prima del fix,
passa dopo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BBnuACZSCJqXrMYC3LUMU
This commit is contained in:
2026-08-16 19:36:18 +02:00
parent 3870cc3b0f
commit 533edc5be8
3 changed files with 176 additions and 0 deletions
+6
View File
@@ -88,6 +88,11 @@ async def _copy_tasks_to_version(
file_path=task.file_path,
file_type=task.file_type,
annotations_json=task.annotations_json,
# Carried over explicitly, same reasoning as task_type above: a
# copy-on-write version that dropped the camera graph would leave
# a camera_measure task unable to execute from the moment a
# recipe with measurements is next edited.
vision_json=task.vision_json,
)
db.add(new_task)
await db.flush() # get new_task.id
@@ -105,6 +110,7 @@ async def _copy_tasks_to_version(
ltl=sub.ltl,
unit=sub.unit,
image_path=sub.image_path,
vision_output=sub.vision_output,
)
db.add(new_sub)