Inspiration: Bug triage often feels like a maze. In large codebases, figuring out where to start fixing a bug can be harder than implementing the fix itself. The Racing Line is inspired by race engineers guiding drivers to the optimal racing line — applied here as an “optimal debugging line” through a massive repository. The idea emerged from combining Jira’s rich incident context, GitHub’s authoritative change history, and the pattern-matching strengths of modern LLMs (Gemini). Much like “Waze for traffic,” The Racing Line routes developers around code noise and directly toward the most likely root cause.

What it does: The app lives directly inside Jira issues as an issue panel titled 🏁 The Racing Line. When an issue is opened, the panel reads the issue key and summary, flattens the Jira ADF description into plain text, and starts an asynchronous “racing line” analysis job. The frontend triggers this via a Forge resolver, which enriches the Jira context and sends a concise payload to an external worker for deeper analysis.

Analysis flow: The external worker analyzes the connected GitHub repository by fetching the full Git tree and prioritizing relevant files such as source directories, pipelines, configuration, and GitHub metadata. Using Gemini, it selects the single file most likely responsible for the bug based on the Jira issue text and curated candidate paths. It then fetches the file contents and recent commits touching that file, and asks Gemini to produce a root cause narrative, a fix sketch (code or patch), and step-by-step editing instructions for a human developer.

User experience: While the worker runs, the Jira panel polls job status like a navigation app, surfacing states such as STARTED, RUNNING, COMPLETED, FAILED, or ERROR. When complete, it displays either a helpful debugging answer — including root cause, fix sketch, and commit links — or a clear, structured error message. The frontend also includes an OAuth-ready GitHub connect flow, enabling future user-level access with proper consent.

How we built it: The system uses a Forge backend for Jira integration and orchestration, defined in manifest.yml with a Jira issue panel and a single resolver function. This resolver handles Jira permissions, context enrichment, and communication with external services. A separate worker service, implemented as a lightweight Express app, handles all heavy operations such as GitHub scanning and Gemini calls, storing job state in memory and exposing a simple job-based HTTP API.

Frontend architecture: The frontend is a small React application bundled into the Forge app. It reads Jira issue context using forge/bridge, invokes backend resolvers to start and poll jobs, and manages local UI state for loading, authentication needs, results, and errors. This keeps the Jira experience responsive while long-running work happens elsewhere.

Challenges we ran into: Forge timeout and latency constraints were a major challenge. Early versions attempted to do everything in a single Forge resolver, which frequently hit platform limits when GitHub calls or Gemini responses were slow. This forced a key architectural pivot to an asynchronous worker and polling model. Another challenge was taming AI output, as Gemini sometimes returned malformed or fenced JSON. Defensive parsing, validation, and safe fallbacks were essential to prevent crashes.

Integration and robustness issues: Mapping AI-suggested filenames back to real repository paths required validation, suffix matching, and sensible defaults. Jira’s rich-text ADF descriptions also needed careful flattening to avoid runtime errors. Additionally, handling GitHub authentication, headers, and token configuration correctly was critical. The app distinguishes clearly between misconfiguration, AI/model errors, and job failures to present meaningful feedback to users.

Accomplishments: We’re proud that The Racing Line provides a genuinely useful “first hop” for debugging without attempting risky auto-merges. It gives developers a likely file, recent relevant commits, a human-readable root cause explanation, and a concrete fix sketch — saving time while keeping humans firmly in control. The system is resilient and timeout-aware, with graceful degradation, partial results, and clear error handling suitable for an MVP approaching production readiness.

What we learned: AI is powerful but brittle without guardrails. Constrained prompts, strict validation, and robust fallbacks are essential. Latency issues require architectural solutions, not optimism — long-running workflows belong outside Forge request paths. Repository awareness and file prioritization dramatically improve AI relevance, and good error messages are a feature, not an afterthought.

What’s next for The Racing Line Future plans include deeper Jira integration, such as automatically commenting on issues with suspected files and root cause summaries, and optionally updating custom fields. Smarter routing will incorporate Jira metadata, Git ownership heuristics, and feedback loops to learn from successful fixes. We also plan configurable multi-repo support, richer developer-focused UI views, and stronger security through user-level GitHub OAuth with fine-grained scopes.

Built With

Share this project:

Updates