fix(labels): gitea_label_bootstrap hard-codes an upstream taxonomy that conflicts with the pvlb house set #8
Labels
No labels
area/dsh
area/forgejo
experiment
priority/later
priority/next
priority/now
type/bug
type/task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
dsh-plugins/dsh-gitea#8
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
gitea_label_bootstrapadvertises itself as "Idempotently sync the canonical label set into a repository". Run against a pvlb repo, it would create a second, incompatible taxonomy and still not create the labels the house rules require.lib/label-bootstrap.js:6hard-codes 34 labels from the upstream project:type/feature,type/tech-debt,type/refactor,type/docs,type/research,type/security,type/incident,priority/critical|high|medium|low,status/*,scope/*,risk/*,signal/*.type/task+type/bug,area/host|backup|forgejo|dsh|security,priority/now|next|later,needs-operator.type/bug. Bootstrap never createstype/task,area/dsh,priority/now, etc., and adds ~30 foreign labels to every repo it touches.Observed 2026-10-23 on
dsh-plugins/dsh-resend-mcpwhile adopting the label-at-creation policy. The repo had only 5 house labels (area/dsh,needs-operator,priority/later,priority/next,type/task); I createdtype/bug,priority/now,area/forgejomanually rather than run bootstrap.The dry run also looked broken: it reported
0 label(s) planned/createdeven though the repo was missing most ofCANONICAL_LABELS. Whether that is the preview path or the running build differing from this checkout, the preview cannot be trusted as-is.Root cause
One hard-coded upstream taxonomy, no notion of the deployment's house set, and the tool name/description invite agents to run it. The bootcamp says "if the repo lacks the set, create it" without warning against this tool, so the failure is reachable by following the docs.
Fix (pick one, document it)
CANONICAL_LABELSwith the house taxonomy — this is a private deployment fork, and the house set is the one every repo here uses.taxonomy: "house" | "upstream"argument (defaulthousehere) and keep both sets.gitea_labels createsnippet in the bootcamp instead.Also make the dry run truthful: it must list the exact labels it would create, with a non-zero count when labels are missing.
Acceptance
type/task,type/bug,area/*,priority/now|next|later,needs-operator— nostatus/*,scope/*,risk/*,signal/*unless requested.Fixed in
178a99f(PR #18).gitea_label_bootstrapnow defaults to the pvlb.dev house set —type/task,type/bug,area/host|backup|forgejo|dsh|security,priority/now|next|later,needs-operator(11 labels). The upstream 34-label set is still available astaxonomy: "upstream"; an unknown value fails instead of silently picking one. The dry run now returnsmissing/missingCountand the formatter lists every missing name;createdis used only after an apply.Live on
ml-lab/tardits(had onlytype/bug):10 of 11 label(s) missing+ the exact list;status/*/scope/*/risk/*/signal/*;0 label(s) missing — repository already has all 11 labels;gitea_labels list→ exactly the 11 house labels (ids 47–57).The house set was intentionally left on that lab repo. The in-repo agent guide (
AGENTS.md) is updated to say bootstrap defaults to house; the external bootcamp wiki page was not edited — flag it if you want that changed too.Tests:
test/label-bootstrap.test.mjs;npm test81/81.