{"record":{"id":"7fd0c124390ba22c","repo":"multica-ai/multica","slug":"delete-trigger-w","errorCode":null,"errorMessage":"delete trigger: %w","messagePattern":"delete trigger: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_autopilot.go","lineNumber":735,"sourceCode":"\tif err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancel := cli.APIContext(context.Background())\n\tdefer cancel()\n\n\tautopilotRef, err := resolveAutopilotID(ctx, client, args[0])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"resolve autopilot: %w\", err)\n\t}\n\ttriggerRef, err := resolveAutopilotTriggerID(ctx, client, autopilotRef.ID, args[1])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"resolve trigger: %w\", err)\n\t}\n\n\tpath := \"/api/autopilots/\" + autopilotRef.ID + \"/triggers/\" + triggerRef.ID\n\tif err := client.DeleteJSON(ctx, path); err != nil {\n\t\treturn fmt.Errorf(\"delete trigger: %w\", err)\n\t}\n\tfmt.Printf(\"Trigger %s deleted.\\n\", triggerRef.ID)\n\treturn nil\n}\n\nfunc resolveAutopilotSubscriberInputs(ctx context.Context, client *cli.APIClient, refs []string) ([]map[string]string, error) {\n\tinputs := make([]map[string]string, 0, len(refs))\n\tseen := map[string]struct{}{}\n\tmemberOnly := assigneeKinds{member: true}\n\tfor _, ref := range refs {\n\t\tif strings.TrimSpace(ref) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"--subscriber cannot be empty\")\n\t\t}\n\t\tuserType, userID, err := resolveAssignee(ctx, client, ref, memberOnly)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"resolve subscriber %q: %w\", ref, err)\n\t\t}\n\t\tif userType != \"member\" {","sourceCodeStart":717,"sourceCodeEnd":753,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_autopilot.go#L717-L753","documentation":"Wrapped error from DELETE /api/autopilots/{id}/triggers/{triggerID} in `multica autopilot trigger delete`. Both references resolved successfully; the server-side deletion failed. For schedule triggers the server also stops the associated cron schedule as part of the delete, so failures can originate from either the trigger row removal or schedule teardown.","triggerScenarios":"DELETE returning 404 when the trigger was deleted concurrently (classic double-run), 403 without delete permission, 409 when a run started from this trigger is still executing and the server refuses teardown, 5xx, or a network failure under cli.APIContext.","commonSituations":"Two operators (or a script and a human) deleting the same trigger; service accounts lacking delete scope; deleting a schedule trigger mid-run.","solutions":["On 404, treat as already-deleted (idempotent success)","Wait for in-flight runs to finish or force-stop them before deleting a schedule trigger","Grant/refresh credentials on 401/403","Retry transient 5xx/network errors once"],"exampleFix":"// before (script fails on double-run)\nmultica autopilot trigger delete my-pilot tr1 || exit 1\n\n// after (idempotent)\nout=$(multica autopilot trigger delete my-pilot tr1 2>&1)\nif [ $? -ne 0 ] && [[ \"$out\" != *\"404\"* ]]; then echo \"$out\"; exit 1; fi","handlingStrategy":"fallback","validationCode":"TRIGGER=$(curl -s -H \"Authorization: Bearer $TOKEN\" \"$API/api/autopilots/$ID\" | jq -r --arg t \"$T\" \".triggers[] | select(.id==\\\"$t\\\") | .id\")\n[ -n \"$TRIGGER\" ] || { echo \"trigger already absent\"; exit 0; }","typeGuard":null,"tryCatchPattern":"Run the delete; on failure parse the wrapped status — 404 => succeed silently (already deleted), 409 => wait for the in-flight run and retry, 401/403 => abort with credentials error, 5xx/network => one retry with backoff.","preventionTips":["Check trigger existence immediately before deleting to narrow the race window","Coordinate deletes among operators/scripts to avoid concurrent removal","Let active runs finish (or stop them) before deleting schedule triggers"],"tags":["go","cli","http-delete","idempotency","triggers"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}