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
Partition remote labels into matched and unconfigured, comparing names
case-insensitively
Reserve every desired colour
Detect squatters — unconfigured labels sitting on a reserved colour — and emit a recolour for
each, sorted by name ascending, feeding each new colour back into used
Converge configured labels in ascending name order: Create when absent; Update when
colour, description, or casing differs; NoOp otherwise (retained for reporting, never
sent to the API)
Emit actions in the design's order — renames, recolours, creates, updates, deletes. Recolours
precede the claim so every intermediate state is clean if the run aborts mid-repository.
GitHub permits duplicate colours, so this is about crash-consistency, not validity
Descriptions are authoritative: an omitted description means "", which means clear it
Tests
The core suite. Table-driven over (desired, current, mode, renames) → expected actions, covering
squatter detection, casing drift, description clearing, and action ordering.
Goal
internal/plan/plan.go:Pure, no I/O. This is the heart of the tool and the reason
internal/planimports no client.Design reference
docs/design.md§ Reconciliation algorithm,§ Ordering, § Steps
Scope
case-insensitively
each, sorted by name ascending, feeding each new colour back into
usedCreatewhen absent;Updatewhencolour, description, or casing differs;
NoOpotherwise (retained for reporting, neversent to the API)
precede the claim so every intermediate state is clean if the run aborts mid-repository.
GitHub permits duplicate colours, so this is about crash-consistency, not validity
"", which means clear itTests
The core suite. Table-driven over
(desired, current, mode, renames) → expected actions, coveringsquatter detection, casing drift, description clearing, and action ordering.
Depends on
#19, #24, #25
Done when
task lintandtask testpass, every box above is ticked, and the change ships with its tests and documentation in the same PR (perAGENTS.md).