Playbook: Fix Missing Standard GitHub Labels

When to use

  • repo-consistency-audit.md reports missing labels for a repo
  • Issue pipeline skills (/new-issue, /issues-review, worker queue) fail or skip labelling
  • New repo was created but Step 4 of new-repo-setup.md was skipped/incomplete

Standard label set (p24-infra ecosystem)

LabelColorDescription
bug#d73a4aSomething is broken
enhancement#a2eeefNew feature or improvement
plan#5319E7Design/planning issue
human-action#fbca04Waiting for human decision or action
queued#0e8a16Queued for implementation by AI worker
patch#e4e669Small fix or tweak
ai-review-queued#0075caPR queued for AI auto-review
ai-review-rejected#d93f0bPR rejected by AI review — issue re-queued

Diagnosis

$repo = "radieu/<repo>"
$have  = gh label list --repo $repo --json name --jq "[.[].name]" | ConvertFrom-Json
$need  = @("bug","enhancement","plan","human-action","queued","patch","ai-review-queued","ai-review-rejected")
$miss  = $need | Where-Object { $_ -notin $have }
"Missing: $($miss -join ', ')"

Fix

Add all missing labels (idempotent — safe to re-run)

$repo = "radieu/<repo>"
 
$labels = @(
  @{ name="bug";                color="d73a4a"; desc="Something is broken" },
  @{ name="enhancement";        color="a2eeef"; desc="New feature or improvement" },
  @{ name="plan";               color="5319E7"; desc="Design/planning issue" },
  @{ name="human-action";       color="fbca04"; desc="Waiting for human decision or action" },
  @{ name="queued";             color="0e8a16"; desc="Queued for implementation by AI worker" },
  @{ name="patch";              color="e4e669"; desc="Small fix or tweak" },
  @{ name="ai-review-queued";   color="0075ca"; desc="PR queued for AI auto-review" },
  @{ name="ai-review-rejected"; color="d93f0b"; desc="PR rejected by AI review — issue re-queued" }
)
 
$existing = gh label list --repo $repo --json name --jq "[.[].name]" | ConvertFrom-Json
 
foreach ($lbl in $labels) {
  if ($lbl.name -notin $existing) {
    gh label create $lbl.name --repo $repo --color $lbl.color --description $lbl.desc
    Write-Host "Created: $($lbl.name)"
  } else {
    Write-Host "OK (exists): $($lbl.name)"
  }
}

Apply to all repos at once

$repos = @(
  "radieu/p24-infra",
  "radieu/et-operational-platform",
  "radieu/Art-Agency",
  "radieu/brandpilot",
  "radieu/whatsup-android-chat-puller",
  "radieu/radekkonarski-personal-brand",
  "radieu/amazon-kdp-tango"
)
 
# ... paste $labels array from above ...
 
foreach ($repo in $repos) {
  Write-Host "`n--- $repo ---" -ForegroundColor Cyan
  $existing = gh label list --repo $repo --json name --jq "[.[].name]" | ConvertFrom-Json
  foreach ($lbl in $labels) {
    if ($lbl.name -notin $existing) {
      gh label create $lbl.name --repo $repo --color $lbl.color --description $lbl.desc
      Write-Host "  Created: $($lbl.name)"
    }
  }
}

Affected repos (as of 2026-06-28)

RepoMissing labels
p24-infraplan, queued, ai-review-queued, ai-review-rejected, patch
et-operational-platformplan, human-action, queued, ai-review-queued, ai-review-rejected, patch
Art-Agencyplan, queued, ai-review-queued, ai-review-rejected, patch
brandpilotplan, queued, ai-review-queued, ai-review-rejected, patch
whatsup-android-chat-pullerai-review-queued, ai-review-rejected, patch
radekkonarski-personal-brandplan, queued, ai-review-queued, ai-review-rejected, patch
amazon-kdp-tangoplan, human-action, queued, ai-review-queued, ai-review-rejected, patch

Escalation

If gh label create returns already_exists: safe to ignore — the label exists (possibly from old run). If a label was renamed/deleted and issues referenced it: GitHub keeps the label text on issues but the label itself disappears from autocomplete. Recreate with same name.