Repository navigation
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 6d098de. Configure here.
| for _, resource := range resources { | ||
| choices = append(choices, syncinteractive.Choice[Resource]{ | ||
| Title: resource.ProjectKey + "/" + resource.LookupKey, | ||
| Description: string(resource.Kind), |
There was a problem hiding this comment.
Detach succeeds for unsynced selectors
Medium Severity
Explicit detach selectors never reach validateSelections when the loaded resource list is empty, so the command prints that nothing is synced and exits successfully. A scripted detach of a missing or mistyped selector can no-op instead of failing, unlike the same selector when other resources exist.
Reviewed by Cursor Bugbot for commit 6d098de. Configure here.
ld-ahartmann
left a comment
There was a problem hiding this comment.
similarly looks good to me but got some agent guidance - do with it what you will:
'Explicit detach succeeds when nothing is synced. Run returns nil on an empty resource list before validateSelections, so detach production/support/default --no-input against an empty workspace is a successful no-op. The same selector fails once any other variation exists.
Validate explicit selectors first and return variation … is not synced.'


Context
Prompt sync currently exposes several different workflows through flags on one command. That works interactively, but it makes automation difficult because an agent must combine flags whose relationships are not obvious and can still encounter an unexpected prompt.
This layer gives each workflow a focused subcommand and a complete non-interactive path. Interactive selection remains available when identifiers are omitted, while scripts and agents can provide stable resource keys and explicit conflict policies.
What changes
watch,add,attach,detach, andlinksubcommands.project-key/config-key/variation-keyselectors consistently in arguments, flags, help, and validation errors.--no-inputto fail instead of opening an interactive selector or confirmation.--conflictfor a default conflict policy and repeatable--resolveflags for variation-specific choices.outputFormatthrough variation create, update, pull, fingerprint, and clear operations.abort.The old
--add,--attach-tool,--attach-skill,--detach,--link, and--watchaction flags are removed. Their workflows now use subcommands.Command examples
Add one existing LaunchDarkly variation to the workspace:
Attach a tool or skill to a variation that is already synced:
Link a Markdown file as a new variation:
Apply a default conflict policy or override one variation:
Stop syncing a variation or watch for local changes:
Running
add,attach tool,attach skill, ordetachwithout identifiers keeps the interactive selection flow.Review focus
--no-inputprevent every unexpected prompt?outputFormatconverge when it is added, changed, pulled, or removed?Verification
go test -p 1 ./cmd/sync ./internal/sync/...go test -p 1 ./...go vet ./internal/sync/... ./cmd/syncgit diff --checkRelated changes
Review the stack in this order:
Made with Cursor