Repository navigation
chore(labeler): delete the inert designer rule and the exemption it needed (objectui#7771) - #9644
Merged
Conversation
… needed `packages/designer` was removed whole (its `package.json` deleted in 21396ca), so the `designer` rule in `.github/labeler.yml` has matched nothing since — inert rather than erroring, with no symptom to notice. objectui#7771 ruled A (delete) over B (retarget to `packages/plugin-designer`): the successor relationship is unmeasured, and a retarget would silently change what the `designer` label means relative to every historical PR carrying it. Same pass, as that ruling directs: `UNRESOLVABLE_GLOB_EXEMPT` in `scripts/__tests__/labeler-package-coverage.test.ts` drops the named row that waived this rule, so the "delete a package, forget the rule" direction is enforced with no waiver standing between it and the config. No label object is touched. This repo's convention for a label that leaves circulation is that circulation is what changes — the GitHub label object stays, because deleting it also strips the label from every PR that ever carried it and that is not revertible. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EpHzwH4wTy5sd7ibkD2yq
os-justin
marked this pull request as ready for review
September 17, 2026 00:28
os-justin
deleted the
claude/issue-7771-labeler-designer-rule-delete
branch
September 17, 2026 00:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7771
Item 1 of that card only. Items 2 and 3 are answered, not worked — the reading is recorded below so the next sweep does not re-file them.
What changed
Two deletions, both halves of the same defect:
.github/labeler.ymlloses thedesignerrule (packages/designer/**/*).packages/designerwas removed whole — itspackage.jsonwas deleted in21396ca4d— so the rule has matched nothing since. Inert, not erroring: no run failed, nothing was mislabelled, and there was no symptom to notice.scripts/__tests__/labeler-package-coverage.test.tsloses the namedUNRESOLVABLE_GLOB_EXEMPTrow that waived that rule. The list is now empty, which its own docblock calls the healthy state, and the "delete a package, forget the rule" direction is enforced with no waiver standing between it and the config. The docblock paragraph describing that direction is rewritten, because it stated as live a fact that the same commit makes historical.The exemption's mechanism stays. Emptying the list is what the ruling asked for; removing the list would take away the reviewable way to declare a future waiver.
Why A (delete) and not B (retarget)
Ruled on the card by the director seat (class-1 self-adjudication): B rests on
packages/plugin-designerbeing the successor of the deletedpackages/designer, and that relationship was explicitly not measured — the deletion commit does not say so. An unmeasured claim does not buy a retarget, and a retarget would silently change what thedesignerlabel means relative to every historical PR that carries it.Items 2 and 3 — ruled
no change, recorded here so they are not re-filedplugin: chatbot— no rule added, label object kept. A sub-label forpackages/plugin-chatbothas zero recorded pull, and that package is already visible to every sweep through the genericpluginlabel. Closing the four-of-twenty sub-label set to twenty is capability proliferation with nothing pulling on it.plugin-view— no rule added, label object kept. Same reading;plugin: viewis item 2's proliferation under a different spelling..github/labeler.yml, which is the only file here that moves.Measurements
All gate runs below are on
78555c2.The coverage test's state, before and after. The dispatch expected it to be red before this change. It was not:
origin/maintreeTest Files 1 passed (1) · Tests 6 passed (6), exit 0Green-before is the correct reading of the card's own sentence, which says the gate 「reddens the moment this card is resolved either way」: the exemption made it honest today, and it reddens when one half moves without the other. It was never red on
main.Ablation — the gate is live, not vacuous. Both legs mutate on disk, are proven to have landed (injected-text count plus a
git hash-objectcomparison against theHEADblob), run, and are restored withgit checkout HEAD --; both files end byte-identical toHEAD..github/labeler.yml, exemption stays deletednever keeps a packages/ rule pointing at a directory that does not existkeeps both exemption lists honestEach half alone fails, for its own assertion and its own reason. Neither test is passing vacuously after the deletion.
Config still parses.
.github/labeler.ymlparses with the sameyamllibrary the gate uses: exit 0, 32 label keys, nodesignerkey, no glob namingpackages/designer. A labeler config that fails to parse is a broken gate, not a passing one, so this is measured rather than assumed.Gates run (exit codes captured by redirecting to a file first, never read through a pipe):
pnpm exec vitest run scripts/__tests__/labeler-package-coverage.test.tsci-cd-pipeline-doc,scripts-type-check,workflow-cache-save-bound) — 116 testspnpm type-check:scriptspnpm check:control-bytespnpm check:new-line-citationspnpm check:test-path-rootspnpm check:comment-mask-corpuspnpm check:unreferenced-sourcesnode scripts/check-changeset-presence.mjsnode scripts/check-governed-queue-guard.mjs --teston both pathstype-check:scriptscovers the edited test file by measurement, not by assumption:tsc --listFilesontsconfig.scripts.jsonputslabeler-package-coverage.test.tsin the program (1 of the 1004 files that project compiles). That config deliberately does not inherit the tier-baseexclude, which lists the test globs.Lint is narrowed, and the narrowing is declared.
pnpm lintisturbo run lint, which is driven by workspace package scripts and structurally cannot reachscripts/— the same reasontsconfig.scripts.jsonexists. ESLint was therefore run directly on the one.tsfile this diff touches: 0 errors, 0 warnings, and--format jsonreports 1 file linted. The population that narrowing sits inside is read from ESLint's own config resolution, not guessed:scripts/__tests__/**/*.tsresolves to 188 files it covers there, 0 errors. Invariance for the untouched remainder: this repo'seslint.config.jsenables no type-aware linting — noprojectService, noparserOptions, noproject, notsconfigRootDiranywhere in its 471 lines — so no edit in this diff can move ESLint's verdict on a file it does not contain. The repo-wide sweep is CI's run, not this one's.Adjacency, re-derived at PR time rather than at dispatch time. All 17 open pull requests had their file lists enumerated to the end (PR #5400, the changeset release PR, across 17 pages and 1682 files). No open PR touches
.github/labeler.ymland none touchesscripts/__tests__/labeler-package-coverage.test.ts.Acceptance notes
Out-of-scope observations, noted and deliberately not filed:
.github/labeler.ymlcarries a trailing space afterany-glob-to-any-file:on thedocumentationrule. Pre-existing, parses fine, purely cosmetic — a style nit, not one of the three filing classes. Successor: the next PR that edits that rule for a real reason.pnpm check:comment-mask-corpusreports 1 disagreeing file at its held ceiling (objectui#7882). Unrelated to this diff, already carded, exits 0.objectui#7746 is not addressed here and remains open on its own PR.
Generated by Claude Code