--- name: job_complete kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func JobComplete(q *JobQueue, jobID string, result string) error" description: "Marca un job como completado, setea completed_at y almacena el resultado opcional. result puede ser vacio si no hay payload de resultado." tags: [job, queue, complete, sqlite, async, background, infra] uses_functions: [] uses_types: [job_queue_go_infra] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, time] params: - name: q desc: "cola de jobs creada con JobQueueCreate" - name: jobID desc: "UUID del job a marcar como completado" - name: result desc: "JSON string con el resultado del job; puede ser vacio" output: "error si el job no existe o falla el UPDATE" tested: true tests: - "complete_fail_transitions" test_file_path: "functions/infra/job_queue_test.go" file_path: "functions/infra/job_complete.go" --- ## Ejemplo ```go err := JobComplete(q, job.ID, `{"rows_processed":42}`) ``` ## Notas Setea `status='completed'`, `completed_at=now`, y `result` (NULL si vacio). Retorna error si el job no existe (0 rows affected).