You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First production sync.py --apply after the #66 merge died mid-run:
gh issue edit failed: failed to update .../issues/110: 'ADR' not found
subprocess.CalledProcessError: Command '['gh', 'issue', 'edit', '110', '--add-label', 'ADR']' returned non-zero exit status 1
An AgilePlace card carried an ADR tag; label reconciliation planned a GitHub add; but gh issue edit --add-label does NOT create missing labels, and the target repo has no ADR label. The CalledProcessError escaped metadata_sync.sync_metadata (metadata_sync.py:111 → ghkit.edit_label → ghkit.run with check=True) uncaught and aborted the entire sync — one unknown label = full run outage. Pre-existing gap (predates #66/#79); surfaced now because a live card gained a tag the repo never defined.
Fix (maintainer decision 2026-07-23: auto-create)
Auto-create missing labels: when a planned --add-label fails because the label doesn't exist, gh label create <name> (dry-run gated) and retry the add once. The tag mirrors as intended — consistent with the sync's reconciliation philosophy.
Why
First production
sync.py --applyafter the #66 merge died mid-run:An AgilePlace card carried an
ADRtag; label reconciliation planned a GitHub add; butgh issue edit --add-labeldoes NOT create missing labels, and the target repo has noADRlabel. TheCalledProcessErrorescapedmetadata_sync.sync_metadata(metadata_sync.py:111 → ghkit.edit_label → ghkit.run with check=True) uncaught and aborted the entire sync — one unknown label = full run outage. Pre-existing gap (predates #66/#79); surfaced now because a live card gained a tag the repo never defined.Fix (maintainer decision 2026-07-23: auto-create)
--add-labelfails because the label doesn't exist,gh label create <name>(dry-run gated) and retry the add once. The tag mirrors as intended — consistent with the sync's reconciliation philosophy.new_basebookkeeping_filter_gh_safe_labelsalready uses (skipped add → pulled from new base, retried next run; failed remove → kept in base). Mirrors the per-action boundary comment sync got in Sync GitHub issue comments <-> AgilePlace card comments #66 (P2 Make milestone-tag selection base-aware instead of lexicographic-first #7).Testing
🤖 Diagnosed from the live production run by Claude Fable 5.