Skip to content

task: label-consolidation - Resolve label coverage follow-ups, including 25 labels with no target #3832

Open

Description

@eleshar

Task Summary

25 labels that exist in lightspeedwp repositories carry known items but have no target that spec 008 or the label documents define. The consolidation tool deletes every label outside the approved set, and it lists any such label with items and no target under needs_decision in the dry run (FR-016). Each of these needs a chosen target, or an explicit decision to drop the label, before its repository's deletion is approved.

Each label already has a row in evidence/linear-labels.json (all retire, or team-scope for area:monorepo). Choosing a target means changing that row to merge or rename with a target.

Linked Stories/Tasks

The 25 labels

Known items are the counts in the weekly label drift check run of 2026-10-04 (283 repositories read). The report caps counted rows, so each count is a lower bound, and it does not say whether an item is open or closed. The dry run reads the real state. A "candidate" is the closest approved label by name or description. It is not a decision, and the documents do not define a rule for it.

Label Known items Repositories Candidate target (not decided)
agent-audit 4 1 none found
component:ci 4 1 area:ci (the label documents define area:* and comp:*, not component:*)
component:workflows 2 1 area:workflows (pending #3554)
area:accessibility 1 1 area:a11y (description "Accessibility (WCAG compliance)")
area:monorepo 1 1 none found (moved to a Linear team in the mapping)
meta:refactor 1 1 type:refactor (an item must keep exactly one type:*)
migrate:type:enhancement 1 1 type:improve (the earlier bare-label mapping maps enhancement there)
migrate:type:compatibility 1 1 none found
migrate:openspec:status/planning 4 1 spec:planning
migrate:openspec:status/implementation 2 1 none found (three spec:implementation-* labels)
migrate:openspec:status/production 1 1 spec:status-production
migrate:openspec:status/testing 1 1 spec:status-testing
phase-1-critical 2 1 none found
phase-2-medium 1 1 none found
phase-3-polish 1 1 none found
phase:1 1 2 none found
ag-p14 1 1 none found
ag-phase 1 1 none found
bug-fix 1 1 type:bug (an item must keep exactly one type:*)
code-quality 1 1 none found
error-handling 1 1 none found
logging 1 2 none found
observability 1 1 area:observability (pending #3554)
reliability 1 1 none found
reviewer 1 1 none found

Steps / Checklist

  • For each label, choose a target (merge or rename), or confirm it is retired and its items lose the label
  • Update the label's row in evidence/linear-labels.json and regenerate with node scripts/automation/label-mapping.cjs --write
  • Re-run the consolidation dry run for the repositories that hold these labels and confirm needs_decision is empty
  • Record the decisions on the label update request (chore: labels - Add conflict-resolution labels to canonical taxonomy [LABEL-UPDATE-REQUEST] #3554) or the deletion gate issue

Notes

  • Not decided by this issue: the approvals that spec 008 FR-021 and FR-023 require from @ashleyshaw.
  • Labels found only in private repositories are not named here; the drift check counts 57 of them.

Other follow-ups found while checking coverage

Each was verified on 2026-10-06 unless marked otherwise.

  • Older drift report artifacts name private repositories. Corrected 2026-10-06: an earlier version of this item wrongly said the drift check had read fewer repositories. It had not. The 2026-10-04 run (37172762292) reported 283 repositories, 198 of them private, with their names and labels in its JSON artifact. After the 2026-10-04 privacy decision the report lists the 85 active public repositories only and summarises the private ones (199 checked). Two artifacts from before that change are still downloadable from this public repository until 2026-11-02 and 2026-11-03: label-drift-report-37095484118 (the 2026-10-03 content was not opened, so it is unverified) and label-drift-report-37172762292. Someone with repository admin rights should delete them.
  • Drift report issue shows one repository. Label drift report #3783 lists only the first 200 of 36,622 rows (all from lightspeedwp/.github). The full data is in the run's JSON artifact, which expires.
  • Item counts are a lower bound. The report caps counted rows (13,318 rows had no count). Real counts come from the dry run, so no label's deletion should be judged from the counts above alone.
  • Private-only labels are not mapped by name. 57 labels exist only in private repositories. The tool still handles them at run time (any such label with items lands in needs_decision), and the details belong in the private gate (PRIVATE_REPORT_REPO), not in this public repository.
  • FR-015 wording. The spec calls the eight FR-015 type labels "Linear-only". All eight are live GitHub labels in lightspeedwp/.github, and only type:maintenance exists in Linear. Correct the wording in spec.md, plan.md and research.md.
  • FR-015 absence from Linear is not airtight. Six complete team listings, the workspace listing and the Stage 1 export show none of the other seven, but the GitHub team listing was cut off at 250 labels and name-only searches miss team labels. Re-check with paging before Stage 5.
  • Linear counts have moved. Live workspace counts differ from the 2026-10-02 export (for example type:feature 308 to 285, type:documentation 1 to 2). Refresh the Stage 1 export before Stage 5, or have T069 read live counts.
  • No Linear label group for type:*. A live check found no label groups, so Linear does not enforce one type per issue. T064 and T069 must enforce and verify it.
  • Label creation restriction is unverified. Whether label management is limited to team owners (T071) could not be seen with the available tools. A workspace admin has to confirm it in Linear settings.
  • T041 was not run as written. The spec prescribes the inventory script with a short-lived fine-grained token. The coverage came from the existing drift check instead. Decide whether T041 is still needed, and amend or close it.
  • Approvals still pending. The 4 type merges outside FR-012 and the 8 openspec:* gap entries in the label update request, plus chore: labels - Add conflict-resolution labels to canonical taxonomy [LABEL-UPDATE-REQUEST] #3554, chore: labels - Add area:labels to canonical taxonomy [LABEL-UPDATE-REQUEST] #3757, [TEMPLATE-UPDATE-REQUEST] Replace non-canonical labels in six PR template frontmatters #3548, task: label-consolidation - Approve issue type and label changes [ISSUE-TYPE-UPDATE-REQUEST] #3556 and task: label-consolidation - Approve Decision template and Discussions routing [TEMPLATE-UPDATE-REQUEST] #3557, still need @ashleyshaw's dated decision. Nothing here substitutes for it.

Status after #3831 merged (2026-10-06, commit 1a65abb)

The mapping (471 entries), the coverage evidence and the draft label update request are on develop. Rebuilding the mapping from develop reproduces the saved file with no problems, 66 automation suites pass (1,990 tests), and the real Stage 4 planner finds a row for every one of the 374 labels outside the approved set in lightspeedwp/.github. Still open:

Status 2026-10-06: targets chosen, in #3839

No new pull request. The work is on #3839 (commit 6f10a9e), and the regenerated request is applied to #3834.

Five labels now have a proposed merge target. Each follows a row the mapping had already decided, named in the row's note:

Label Target Precedent
component:workflows area:workflows comp:workflows merges into area:workflows (FR-012)
component:ci area:ci same family as comp:workflows; area:ci is "Build and CI pipelines"
meta:refactor type:refactor refactor and type/refactor already resolve there
observability area:observability same word; #3554 requests area:observability
area:accessibility area:a11y area:a11y is described as "Accessibility (WCAG compliance)"

The other 20 stay retire, and the tool still lists their items under needs_decision per repository, so no item loses a label unreviewed. Reasons by group:

  • migrate:openspec:status/* (4): their parent rows openspec:status/* are already retired because the spec:* labels replace them (FR-011), so these follow the parents.
  • phase-1-critical, phase-2-medium, phase-3-polish, phase:1: project phases are tracked in milestones and projects, as the existing phase-1, phase-2 and phase:3 rows already say.
  • ag-p14, ag-phase: agent markers, like the other retired ag-* labels.
  • migrate:type:enhancement, migrate:type:compatibility: type:enhancement and type:compatibility have no row to follow.
  • bug-fix, agent-audit, code-quality, error-handling, logging, reliability, reviewer: no row or document defines a target. Name similarity alone (for example bug-fix and type:bug) was not treated as a decision.
  • area:monorepo stays team-scope (FR-012).

A test pins all of this (label-mapping.test.js). The mapping still needs @ashleyshaw's dated decision (FR-021, FR-023); nothing here replaces it.

Activity

  1. linear-code commented on Oct 6, 2026

    @linear-code
  2. changed the title [-]task: label-consolidation - Choose a target for 25 labels that carry items[/-] [+]task: label-consolidation - Resolve label coverage follow-ups, including 25 labels with no target[/+] on Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions