Skip to content

Epic: Provider-Aware Issue ID Formatting #595

@NoahCardoza

Description

@NoahCardoza

Summary

The codebase has 60+ hardcoded # prefixes before issue IDs (e.g., Issue #123). This is correct for GitHub but wrong for Jira (QLH-4404) and Linear (ENG-123). We need a formatIssueId method on the IssueTracker interface plus a static utility on IssueTrackerFactory for call sites without a provider instance.

Problem

When using Jira or Linear as the issue tracker, user-facing messages display issue IDs incorrectly:

  • Current: Issue #QLH-4404 or Issue #ENG-123
  • Expected: Issue QLH-4404 or Issue ENG-123

The issuePrefix property already exists on MCP providers (IssueManagementProvider.issuePrefix) but the main IssueTracker interface lacks an equivalent formatting method.

Approach

  1. Add formatIssueId(identifier: string | number): string to the IssueTracker interface
  2. Add a static IssueTrackerFactory.formatIssueId(providerType, identifier) for call sites without a provider instance
  3. Migrate all user-facing hardcoded # prefixes to use these methods
  4. Add ISSUE_PREFIX template variable for Handlebars templates

Scope

  • In scope: Issue ID formatting in user-facing messages + templates
  • Out of scope: PR references (PR #X — PRs are GitHub-only), debug messages (low value, high churn)

Deferred

  • Auto-detect debug messages in run.ts, shell.ts, open.ts, vscode.ts, ignite.ts, dev-server.ts, script-command-base.ts, summary.ts — debug-level only, identifier is self-explanatory
  • IssueManagementProvider.issuePrefix deprecation — keep for backward compat
  • PR references — PRs are GitHub-only, # is correct

Verification

  1. pnpm build — TypeScript compiles
  2. pnpm test — All existing tests pass (updated expectations)
  3. Manual: Configure Jira provider, run il start QLH-4404, confirm output shows Issue QLH-4404 not Issue #QLH-4404
  4. Manual: Configure GitHub provider, confirm output still shows Issue #123

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions