Skip to content

Plan: Configurable default labels for issue tracker integrations #985

@NoahCardoza

Description

@NoahCardoza

Problem statement

Teams adopting iloom-cli have no reliable, org-wide way to distinguish AI-assisted tickets from human-authored ones in their issue tracker. Agents can technically supply labels via the MCP create_issue tool, but relying on agent behavior is non-deterministic — labels get missed, inconsistent, or dropped silently (Jira drops them entirely today).

A settings-driven default would make every iloom-created ticket identifiable without relying on agent instructions.

Goals

  • Configure a list of labels in settings.json that get applied automatically to every issue created through iloom-cli
  • Merge configured defaults with any agent-supplied labels (union, dedup) so configured identifiers are always present
  • Propagate the config through the MCP env-var bridge so the issue-management MCP server picks it up
  • Deliver for GitHub and Jira in this epic

Scope

In scope:

  • GitHub and Jira tracker providers
  • New settings.issueManagement.{github,jira}.defaultLabels: string[] config (defaults to [])
  • Configured defaults merged (case-sensitive union with dedup, configured-first order) with agent-supplied labels
  • MCP env-var bridge propagates config to the subprocess
  • Documentation in docs/iloom-commands.md

Out of scope:

  • Linear: Labels are currently unimplemented in iloom-cli's Linear integration (createLinearIssue and createLinearChildIssue in src/utils/linear.ts silently drop the _labels parameter), and Linear's SDK requires resolving label names to label UUIDs via a lookup helper that does not yet exist. Deferred to a follow-up epic focused on Linear label support.
  • Legacy JiraIssueTracker.createIssue CLI path (unused by the MCP-driven issue creation flow)
  • First-run-setup prompting
  • Telemetry (no workflow change)

Summary of approach

One config-surface change (schema + env bridge + docs) establishes the contract. Two parallel per-tracker wiring changes (GitHub and Jira) consume the contract and merge the configured defaults with agent-supplied labels before the label list reaches each tracker's API. A final integration verification confirms the wires are connected end-to-end.

Task overview

# Title Description Dependencies Complexity
1 Add defaultLabels to settings schema + env-var bridge + docs Extend settings schema and MCP env-var bridge with defaultLabels for GitHub and Jira; document in settings reference. None Simple
2 Apply defaultLabels in Jira provider + API client Merge configured + agent labels in Jira MCP provider; forward as fields.labels in REST API POST body. Task 1 Simple
3 Apply defaultLabels in GitHub provider Merge configured + agent labels in GitHub MCP provider; forward to existing gh CLI label pipeline. Task 1 Simple
4 Verify default-label integration Integration tests confirming merged-label flow end-to-end for both providers with no regression when unset. Tasks 2, 3 Simple

Detailed breakdown

The full implementation breakdown — per-task acceptance criteria, shared contracts, scope boundaries, must-haves, and the architectural decision record — is posted as a comment on this issue.

Note

An earlier version of this plan was incorrectly created as four separate issues (#986, #987, #988, #989). Those have been closed; this issue is the single source of truth for the plan.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions