From 9c346f9fb037159c6455b7678a96b423e1df24b6 Mon Sep 17 00:00:00 2001 From: Christopher Pitzi Date: Wed, 19 Aug 2026 12:53:47 -0400 Subject: [PATCH 1/2] docs: record the birth-labels race in the add-a-repo runbook Co-Authored-By: Claude Fable 5 --- terraform/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/terraform/README.md b/terraform/README.md index f630919..a796b20 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -155,6 +155,16 @@ will insist on: GitHub applies it at creation, so a new entry pointing at `lentago/repo-template` lands with the fleet's README/CLAUDE/LICENSE/CI skeleton already in place. +**Known race — the birth apply can fail on labels.** GitHub seeds a newborn +repo's nine default labels (`bug`, `documentation`, …, `wontfix`) +*asynchronously* after creation, and the Tidewater label creates race that +seeding: the osmunda/monarda birth (2026-08-17) won and applied cleanly; the +lupinus birth (2026-08-19, #164) lost, and every same-named label POST failed +with `422 already_exists`. The repo, ruleset, and settings are unaffected — +only the labels. Remedy: delete the defaults on the newborn +(`for l in bug documentation duplicate enhancement "good first issue" "help wanted" invalid question wontfix; do gh label delete "$l" -R lentago/ --yes; done`) +and let the next merge's apply create the Tidewater set. + Then `plan`, review, `apply`. The repo is created wired to fleet policy — squash -only, auto-merge, spine topics, branch ruleset, Tidewater labels — rather than drifting until someone remembers to sweep it. From 67a0f4dd9ad6e000bbef38a9af38816ceb250d8b Mon Sep 17 00:00:00 2001 From: Christopher Pitzi Date: Wed, 19 Aug 2026 13:17:07 -0400 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20correct=20the=20birth-labels=20reme?= =?UTF-8?q?dy=20=E2=80=94=20imports=20self-heal;=20deleting=20defaults=20b?= =?UTF-8?q?reaks=20the=20plan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- terraform/README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/terraform/README.md b/terraform/README.md index a796b20..7fc6571 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -161,9 +161,15 @@ repo's nine default labels (`bug`, `documentation`, …, `wontfix`) seeding: the osmunda/monarda birth (2026-08-17) won and applied cleanly; the lupinus birth (2026-08-19, #164) lost, and every same-named label POST failed with `422 already_exists`. The repo, ruleset, and settings are unaffected — -only the labels. Remedy: delete the defaults on the newborn -(`for l in bug documentation duplicate enhancement "good first issue" "help wanted" invalid question wontfix; do gh label delete "$l" -R lentago/ --yes; done`) -and let the next merge's apply create the Tidewater set. +only the labels. **Remedy: nothing.** Once the repo exists live, the label +import guard in `imports.tf` activates on the next plan, adopts the seeded +defaults into state, and the apply recolors them to Tidewater in place. +**Do not delete the defaults** — a label import against a deleted label is a +hard plan error (`404 Not Found`), which converts a self-healing condition +into a broken plan; that mistake is on the record in #164. If the defaults +were already deleted, recreate the nine names (values from +`fleet-ops/labels.json`) so the imports resolve, then let the next apply +converge. Then `plan`, review, `apply`. The repo is created wired to fleet policy — squash -only, auto-merge, spine topics, branch ruleset, Tidewater labels — rather than