Skip to content

feat: dedup guard — skip tasks targeting same GitHub issue as running task #1

Description

@stackbilt-admin

Context

When an upstream task queue (e.g. an issue-watcher) has a race condition, the taskrunner can end up executing two tasks for the same GitHub issue concurrently or sequentially. This results in duplicate PRs and merge conflicts.

Found in production: Stackbilt-dev/aegis#162

Proposed Enhancement

Before starting a task, the taskrunner should check the queue for other tasks with the same github_issue_repo + github_issue_number that are already running or completed. If found, skip the duplicate and mark it as cancelled with a reason.

This is a defense-in-depth measure — the upstream queue should prevent duplicates, but the runner should also guard against them.

Implementation Sketch

In execute_task(), after fetching the task but before starting Claude Code:

# Check for duplicate issue tasksif [[ -n"$github_issue_number"&&-n"$github_issue_repo" ]];then
existing=$(curl -s "${API_BASE}/api/cc-tasks?github_issue_repo=${github_issue_repo}&github_issue_number=${github_issue_number}&status=completed,running"| jq '.tasks | length')if [[ "$existing"-gt 0 ]];then
log "Skipping duplicate: another task for ${github_issue_repo}#${github_issue_number} already exists"# Cancel this task
curl -s -X POST "${API_BASE}/api/cc-tasks/${task_id}/cancel" ...
return 0
fifi

This requires the task queue API to support filtering by github_issue_repo and github_issue_number, which the AEGIS implementation already does.

Metadata

Metadata

Assignees

No one assigned

    Labels

    aegisAEGIS auto-pickup: issue→task pipelineenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions