{"record":{"id":"0192c825aebfebef","repo":"gastownhall/beads","slug":"s-s-0192c8","errorCode":null,"errorMessage":"%s (%s)","messagePattern":"%s \\(%s\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/tracker/engine.go","lineNumber":1103,"sourceCode":"\t\t\t\t\treturn stats, nil\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Update local issue with external ref\n\t\t\tref := e.Tracker.BuildExternalRef(created)\n\t\t\tupdates := map[string]interface{}{\"external_ref\": ref}\n\t\t\tif err := e.Store.UpdateIssue(ctx, issue.ID, updates, e.Actor); err != nil {\n\t\t\t\te.warn(\"Failed to update external_ref for %s: %v\", issue.ID, err)\n\t\t\t\tstats.Errors++\n\t\t\t\t// Note: issue WAS created externally, so we still count Created\n\t\t\t\t// but also flag the error so the user knows the link is broken\n\t\t\t}\n\t\t\t// Surface any partial-success warnings from the create (e.g. a\n\t\t\t// follow-up state change that failed) through the sync result so a\n\t\t\t// degraded push is visible rather than silently swallowed.\n\t\t\tfor _, w := range created.Warnings {\n\t\t\t\te.warn(\"%s (%s)\", w, issue.ID)\n\t\t\t}\n\t\t\t// Remember what we just pushed so the next sync can skip the fetch.\n\t\t\te.recordPushHash(ctx, issue, ref)\n\t\t\tstats.Created++\n\t\t} else if !opts.CreateOnly || forceIDs[issue.ID] {\n\t\t\t// Update existing external issue\n\t\t\textID := e.Tracker.ExtractIdentifier(extRef)\n\t\t\tif extID == \"\" {\n\t\t\t\tstats.Skipped++\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Check if update is needed\n\t\t\tif !forceIDs[issue.ID] {\n\t\t\t\t// Fast path: if the local content is unchanged since the last\n\t\t\t\t// successful push, the remote must already match it, so skip the\n\t\t\t\t// fetch entirely. This is what keeps a no-op `--push-only` run\n\t\t\t\t// from issuing one GET per issue (gastownhall/beads#4214).","sourceCodeStart":1085,"sourceCodeEnd":1121,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/tracker/engine.go#L1085-L1121","documentation":"This warning surfaces partial-success warnings returned by the tracker from a successful CreateIssue call (created.Warnings). The remote issue was created, but a follow-up operation inside the tracker adapter (e.g. setting state, labels, or metadata after creation) failed. The message prints the tracker's warning text followed by the local issue ID.","triggerScenarios":"e.Tracker.CreateIssue returns a created issue whose Warnings slice is non-empty — typically when a post-create step in the adapter (state transition, custom field set) fails after the issue itself was created.","commonSituations":"Linear/Jira/GitHub adapters that create the issue but fail to apply a status change due to insufficient token scopes; tracker-side workflow rules rejecting a state transition; deprecated custom fields on the remote tracker.","solutions":["Read the warning text to see which follow-up step failed (e.g. a status change).","Check the tracker API token scopes/permissions cover the follow-up operation (state changes, field updates).","Verify the tracker's workflow allows transitioning the issue directly to the requested state after creation.","Update the tracker adapter/integration to the latest version if the remote API changed.","Manually fix the affected issue state in the tracker and re-run `bd sync` to confirm clean pushes."],"exampleFix":"// before: token with only issue:create scope\n// after: grant the token write access to issue state fields\n// Linear: add issues:update scope; Jira: add 'Modify Reporter'/'Edit Issues' permission","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// after sync, inspect and address partial-success warnings\nstats, err := engine.Sync(ctx, opts)\nfor _, w := range stats.Warnings {\n    log.Printf(\"push warning: %s\", w) // e.g. \"failed to set status (bd-7)\"\n}\n// fix scopes/workflow in the tracker, then re-run sync","preventionTips":["Provision tracker tokens with full write scopes up front","Test the tracker adapter against a sandbox project including state changes","Review stats.Warnings, not just stats.Errors","Keep adapter versions aligned with tracker API changes"],"tags":["sync","tracker-api","partial-success","permissions"],"backgroundTag":"tracker-partial-success","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}