BugBuddy Guide

File Bugs in One Click
without leaving VS Code

BugBuddy turns any failure, selection, or test conclusion into a fully-populated Bug in Azure DevOps or Jira — with steps-to-reproduce, severity, screenshots, custom fields, retest comments, and a local history view.

🐞 4 entry points · failure · selection · conclusion · manual 🔗 ADO + Jira dual-tracker support 🗂 Configurable fields via JSON mapping 🕘 Local history & retest comments

1What is BugBuddy?

BugBuddy is RoboClaw's dedicated bug-filing subsystem. Instead of copy-pasting failures into your tracker, you trigger BugBuddy from inside VS Code and it pushes a fully-formed Bug with one click — capturing the surrounding context automatically.

It supports four entry points:

  • From the last test failure — uses Robot Framework's output.xml
  • From a code/log selection — highlight any text in the editor
  • From a test conclusion — RoboClaw's analyzer surfaces "this looks broken" verdicts
  • Manually — open the form fresh and fill it yourself
🔧
Works with both ADO and Jira. BugBuddy reads roboclaw.projectManagement and picks the right tracker automatically.

2One-time Configuration

Open the BugBuddy settings panel:

⌘⇧PRoboClaw: BugBuddy: Configure Tracker (ADO / Jira)

For Azure DevOps

  1. Confirm roboclaw.ado.organization and roboclaw.ado.project are set.
  2. (Optional) Set roboclaw.ado.areaPath and roboclaw.ado.iterationPath — applied to every new Bug.
  3. If your process template requires custom fields, edit roboclaw.ado.fieldMappings and roboclaw.ado.extraFields (see section 9).

For Jira

  1. Confirm roboclaw.jira.domain, jira.project, and jira.email are set.
  2. If you don't have a Jira API token saved, run RoboClaw: Store Jira API Token — stored in SecretStorage.
🔐
Credentials never leave your machine. Tokens are stored via VS Code's SecretStorage API — they're never written to disk in plain text and never logged.

3File from a Test Failure

The fastest path — RoboClaw already has the failure context.

  1. Run your Robot suite (RoboClaw: Run Separate Test Scripts).
  2. When the run finishes, click the 🐞 File Bug action on the failure notification,
    or run RoboClaw: BugBuddy: File Bug from Last Failure.
  3. BugBuddy opens a pre-filled form:
    • Title — generated from failing keyword + assertion
    • Repro steps — parsed from output.xml with timestamps
    • Severity — defaulted from suite tags (e.g. @critical → S1)
    • Environment — from your Appium / Selenium session
    • Attachments — last screenshot + output.xml tail
  4. Edit anything you want and click Submit.
# Auto-generated title
[Shift Planner] Publish Shift fails with timeout after 30s on iPad Mini iOS 17.5

# Auto-generated repro
1. Launch app, login as supervisor
2. Navigate to Shift Planner
3. Tap draft shift card
4. Tap "Publish" button
   Expected: Toast appears within 2s
   Actual: Spinner indefinitely; AppiumLibrary timeout at 30s

4File from a Code or Log Selection

Use this when you spot something suspect in a log file, a generated script, or any other text in the editor.

  1. Select the relevant text (a stack trace, a console line, a TODO comment, etc.).
  2. Run RoboClaw: BugBuddy: File Bug from Selection from the Command Palette or right-click menu.
  3. BugBuddy populates the form with the selected text as the description and the file path as context.
📋
Works on any text. Stack traces from .log files, suspicious lines in output.xml, even comments in .robot files all become valid bug seeds.

5File from a Test Conclusion

RoboClaw's analyzer agent emits "conclusion" messages when it finds patterns that look like real defects (versus flaky tests). When the sidebar shows a conclusion, you get a one-click bug button.

  1. Look at Step 5: Analyzer & Debugging in the sidebar.
  2. When a conclusion appears (e.g. "Confirm button is unresponsive across 3 builds"), click 🐞 File Bug from Conclusion.
  3. The conclusion text + supporting evidence is pre-filled.

6The Bug Form — Field-by-Field

FieldAuto-filled?Notes
Title✅ YesEdit to a customer-friendly summary
Repro Steps✅ Yes (from output.xml)Markdown supported; numbered steps recommended
Severity✅ Yes (from tags)S1 · S2 · S3 · S4 — overridable
Priority⚙️ DefaultMaps to roboclaw.ado.fieldMappings.priority
Environment✅ YesCaptured from session capabilities
Version / Build✅ YesFrom bundleId + Info.plist (iOS) / version code (Android)
Application⚙️ ConfigurableSet via roboclaw.ado.extraFields.Custom.Application1
Tags✅ YesIncludes roboclaw-autofiled for filtering
Attachments✅ YesLast screenshot + relevant output.xml excerpt
💡
Custom field templates. BugWizard / PFNA users get a pre-mapped set of fields out-of-the-box (Activity, Sector, Markets, Detected By, etc.). See section 9 for the full mapping.

7Retest Comments

After a fix lands, you usually want to verify the bug and post a "Retested in build X — passes" comment. BugBuddy does this in one step:

  1. Re-run the failing test (passing or failing — both work).
  2. Run RoboClaw: BugBuddy: Submit Retest Comment to ADO Bug…
  3. Pick the Bug ID (BugBuddy suggests recent ones from your local history).
  4. RoboClaw posts a comment with:
    • The build / version retested against
    • Pass / fail status
    • Optional new screenshot + log excerpt
🔁
Closes the loop with developers — they get an immediate update with evidence, not a generic "still broken" comment.

8History & Cleanup

BugBuddy keeps a local audit log of every bug filed from your workspace.

  • RoboClaw: BugBuddy: Show Filed Bug History — opens a panel with title, tracker ID, link, severity, and filed-at timestamp.
  • RoboClaw: BugBuddy: Clear Filed Bug History — wipes the local log (the bugs themselves remain in your tracker).

History is stored in .vscode/robogent.json under bugBuddy.history[] and is safe to commit if you want shared visibility.

9Custom Field Mapping

Every team's ADO / Jira process template is different. BugBuddy adapts via two configuration objects.

roboclaw.ado.fieldMappings

Maps BugBuddy's logical field names to your tracker's reference names.

{
  "title":       "System.Title",
  "reproSteps":  "Microsoft.VSTS.TCM.ReproSteps",
  "severity":    "Microsoft.VSTS.Common.Severity",
  "priority":    "Custom.B_Priority",
  "environment": "Custom.DetectedOnEnvironment1",
  "version":     "Custom.AppVersion",
  "assignedTo":  "Custom.AssignedtoTeam11",
  "tags":        "System.Tags"
}

The defaults match the BugWizard PFNA template. For a stock Agile template, change "priority" to "Microsoft.VSTS.Common.Priority".

roboclaw.ado.extraFields

Static values set on every new Bug — perfect for satisfying required custom fields and avoiding TF401320 rule errors.

{
  "Custom.Sector":    "PFNA",
  "Custom.Activity11": "Testing",
  "Custom.Markets":   "US"
}
📌
Find the reference names. In ADO web UI → Project Settings → Process → Work Item Type → field detail. The "Reference name" field is what BugBuddy needs.

10Tips & Patterns

Tag autofiled bugs

Every BugBuddy filing includes the roboclaw-autofiled tag. Build an ADO query for it to track AI-assisted bug volume.

Severity from suite tags

Tag your suite with @critical · @major · @minor · @trivial and BugBuddy maps to S1–S4 automatically.

One bug per failure, not per test

BugBuddy de-duplicates within a single run — if 12 tests fail on the same locator, you get one bug for the underlying issue.

Combine with Self-Healing

If a failure is auto-healed at ≥ 0.80 confidence, BugBuddy doesn't surface it as a bug — it's just drift. Only true defects reach the filing surface.

Powered by the BYOK AI Router

The bug title, repro steps, and severity classification all flow through RoboClaw's central aiRouter. That means your BugBuddy bugs are generated by whichever AI provider you configured — Anthropic, OpenAI, Gemini, Azure, Ollama, or Copilot as a fallback. Every filed bug carries a Route via stamp so you can see which provider & model produced it.

🎯
The end-to-end loop. Test fails → Self-Healing tries to heal → Below threshold → BugBuddy files a Bug with the original failure context (via BYOK provider) → Dev fixes → Retest comment posted automatically.