Skip to content

Align ML.NET labels with dotnet/runtime #7686

Description

@rosebyte

This proposal introduces runtime-style area-* labels in dotnet/machinelearning, aligns shared label names, and removes duplicate or ambiguous labels.

Following feedback, this version starts with broad areas. The previous version proposed 38 labels, including subdivisions of Core, DataFrame, Vision, AutoML, and Infrastructure. This version proposes 19 top-level areas. Subareas can be added later if they have separate owners or support a recurring query that cannot be served by other labels.

It does not copy runtime's full label set. Most runtime labels are specific to CLR, JIT, servicing, operating systems, or architectures.

Current state

Snapshot from 4 September 2026:

Measure ML.NET Runtime
Total labels 70 316
area-* labels 1 146

area-Infrastructure has already been created and is applied to five open issues.

Runtime's issue guide recommends one area label per issue, and its pull-request guide describes assigning a single area to each pull request.

This is a strong default, not an absolute rule. A live check on 2 September 2026 found multiple areas on 4 of 565 open runtime issues and 3 of 1,000 sampled open pull requests.

For ML.NET, an item should normally have one primary area. Add another area when ownership is genuinely shared, not merely because several technologies are mentioned.

The supplied ml_net-area_labels.md currently contains 1,011 issue assignments. The repository currently has 808 open issues:

  • 796 open issues occur in the file.
  • 215 issues in the file have since closed.
  • 12 newer open issues are absent.

The mapping needs refreshing before it is applied.

Proposed area labels

Area label Scope
area-Core MLContext, public API, prediction, evaluation, data loading, model persistence, IDataView, schema, and other core platform work
area-Native CpuMath SIMD, MKL, oneDAL, SymSGD, native libraries, and hardware or RID plumbing
area-MAML Legacy MAML CLI, entry-point graph, sweeper, and result processor
area-DataFrame Microsoft.Data.Analysis, including columns, operations, and input/output
area-Transforms Normalisation, categorical and text featurisation, LDA, embeddings, mappings, and feature selection
area-Trainers Standard linear and GLM trainers, KMeans, PCA, Naive Bayes, OVA, and ensemble meta-trainers
area-Trees FastTree, FastForest, GAM, LightGBM, and their native engine
area-Recommender Matrix factorisation, field-aware factorisation machines, and libmf
area-TimeSeries SSA forecasting, spike and change-point detection, SR-CNN, and time-series anomaly detection
area-Vision Image loading and transforms, image classification, and object detection
area-TensorFlow TensorFlow scoring, retraining, Keras, SavedModel, and TensorFlow interoperation
area-ONNX OnnxTransformer scoring and ML.NET-to-ONNX export
area-Tokenizers BPE, WordPiece, SentencePiece, Tiktoken, and tokenizer data packages
area-GenAI Causal language-model pipeline and LLaMA, Phi, and Mistral support
area-TorchSharp TorchSharp-based NLP and deep-learning components
area-AutoML AutoML experiments, search and tuning, Model Builder, mlnet CLI, and code generation
area-Integration ASP.NET Core dependency injection, PredictionEnginePool, and Microsoft.Extensions.ML
area-Infrastructure Build, CI, Helix, packaging, dependencies, shared test infrastructure, and benchmark infrastructure
area-Meta Roadmap, repository direction, governance, issue management, and other repository-wide work

Each area should have maintainers who recognise it as theirs. Otherwise it is only a category, not a routing label.

Treatment of the detailed taxonomy

The finer groups in ml_net-area_labels.md remain useful for understanding the backlog, but are not proposed as GitHub labels initially.

Detailed group Initial GitHub label
area-core-* area-Core
area-dataframe-* area-DataFrame
area-vision-image area-Vision
area-vision-classification area-Vision
area-vision-objectdetection area-Vision
area-vision-tensorflow area-TensorFlow
area-automl-* area-AutoML
area-infra-* area-Infrastructure
area-docs The affected component area, or area-Meta for repository-wide material, together with documentation

This avoids creating labels for distinctions such as Infrastructure Build, CI, Testing, and Performance when they currently have no separate ownership. Those distinctions can still be expressed through issue-type or qualifier labels.

Existing labels that can be renamed

Existing label New label Note
** NO MERGE ** NO-MERGE Runtime name
API breaking change breaking-change Runtime name
P0 Priority:0 Runtime name
P1 Priority:1 Runtime name
P2 Priority:2 Runtime name
P3 Priority:3 Runtime name
perf tenet-performance Performance is a qualifier, not ownership
AutoML.NET area-AutoML Covers all proposed AutoML subdivisions
Microsoft.Data.Analysis area-DataFrame Covers all proposed DataFrame subdivisions
ModelBuilder area-AutoML Model Builder remains searchable by text and project
PredictionEngine area-Core Prediction is no longer a separate area
TensorFlow area-TensorFlow Direct component match
Time Series area-TimeSeries Direct component match
Tokenizers area-Tokenizers Direct component match
TorchSharp area-TorchSharp Direct component match

onnx can become area-ONNX after moving #7383 to area-Tokenizers.

Existing labels that should be merged

Existing labels Keep
Awaiting User Input, need info needs-author-action
up-for-grabs help wanted
anomaly, Time Series area-TimeSeries

Existing labels that need individual reclassification

These labels span several areas or describe a scenario rather than an owner.

Existing label Treatment
API Assign the component area and move API proposals to the appropriate api-* state
Build Move infrastructure issues to area-Infrastructure; #5569 belongs to area-AutoML
Deep Learning Split among TorchSharp, ONNX, Tokenizers, Vision, TensorFlow, GenAI, and AutoML
image Split among Vision, TensorFlow, and AutoML
loadsave Split among Core, DataFrame, and AutoML
command-line Split between MAML and AutoML
test Assign the component area and use a specific test issue type where useful
lightgbm Usually Trees, but current outliers need review
NLP Split among Transforms, TorchSharp, Tokenizers, ONNX, and AutoML
Hardware Support Assign the component area and keep a platform qualifier if useful
Dynamic Move current issues to Core
Evaluation Move current issues to Core
Explainability Split between Core and the relevant trainer area
oneDAL Move current issues to Native
Spark Assign the underlying component; keep a separate area only if Spark has an active owner
UWP Assign the underlying component and keep a platform qualifier only if UWP remains supported
classification Split among Trainers, AutoML, TorchSharp, and Vision
clustering Move current issues to Trainers
ranking Move current issues to Trees unless another owner is more appropriate
regression Assign the relevant trainer or Vision area

Task labels such as task-classification or task-ranking can be added later if maintainers actually use that view of the backlog.

ML.NET-specific labels to keep

Label Use
F# F# language interoperation
usability User-experience and discoverability work, if maintainers still query it
repo-health Identifies the dashboard issue used by repository-health workflows

Labels to retire or remove

Label Treatment
Azure AutoML Retire; it has no open issues and one closed issue
code-sanitation Replace with enhancement
nit Use good first issue where appropriate
wontfix Use GitHub's not planned close reason

A rename preserves historical associations. For labels that cannot be renamed directly, remove them only after their open issues have been reclassified.

Shared labels to keep

Label Use or change
agentic-workflows Agentic Workflow changes
api-approved Approved API proposal
api-needs-work API proposal requiring revision
api-ready-for-review API proposal ready for review
blocking Work that blocks something important
blocking-clean-ci CI-blocking failure
bug Product defect
community-contribution Pull request submitted by a community member
documentation Documentation-only bug or improvement
enhancement Product improvement that does not add public API
Epic Groups related work
good first issue Small, well-scoped first contribution
help wanted Actionable work open to external contributors
in-pr An active pull request is expected to close the issue
Known Build Error Known CI or Helix failure
needs-author-action More information or action is required from the author
needs-further-triage Maintainers need to make a deeper decision
no-recent-activity Stale-item automation marker
question Usage or product question; replace the current Further information is requested description
reduce-unsafe Work reducing unsafe code
Security Security-sensitive issue
untriaged Not yet triaged by maintainers

Where names are shared with runtime, descriptions and colours can be aligned unless ML.NET has a reason to differ.

Labels worth adding now

Label Use
needs-area-label No area could be assigned confidently
api-suggestion Early public API idea or discussion
feature-request New product capability before a specific API proposal exists
blocked Work cannot proceed because it depends on something else
test-bug Defect in test code
test-enhancement Improvement to test code or coverage

Other runtime labels, including cost, tenet, platform, servicing, and tracking labels, should be added only when ML.NET has a concrete use for them.

Repository references that need updating

File Current references
.github/workflows/issue-triage.agent.md perf, test, Build, need info; areas are mentioned only in comments
.github/workflows/issue-triage.agent.lock.yml Generated allow-list containing the old names
.github/workflows/repo-health-check.md P0 through P3, Awaiting User Input, and a statement that the repository has no area labels
.github/workflows/repo-health-check.lock.yml Generated references to the old names
.github/health-baseline.md Old priority names

If automated area labelling is wanted, runtime uses dotnet/issue-labeler with LABEL_PREFIX: "area-" and DEFAULT_LABEL: "needs-area-label". It should be trained only after the new area assignments are clean.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    untriagedNew issue has not been triaged

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions