Skip to content

v3.4.0 — Jira Channel & Trust Hardening

Latest

Choose a tag to compare

@mdoty4 mdoty4 released this 08 Jul 03:52

BatonBot v3.4 — "Design Partner / Trust Hardening"

Headline: BatonBot now accepts ingress from anything. File a bug in Jira → BatonBot picks it up, fixes it, and comments the result back on the ticket — with the safety guards that make it trustworthy against a real team's project.

🎫 Jira Channel

  • Polling-based Jira ingress (modules/jira-adapter.js): BatonBot polls Jira Cloud's REST API on an interval — outbound HTTPS only, no webhook, no public URL, no tunnel. Works from any laptop behind any firewall.
  • Label routing: fix-now (or priority Highest) → QUEUE + auto-run; queue → QUEUE waiting for ▶; everything else → PENDING for triage.
  • Per-project settings UI in the project editor drawer, with Test Connection and Sync Now buttons.
  • Setup guide: docs/jira-setup.md (~15 minutes).

🛡 Trust Hardening

  • Assignee guard (on by default) — tickets assigned to a human are never imported. Only unassigned tickets, or tickets assigned to the configured Bot Account Email (the assign-to-bot workflow), become cards.
  • Autostart cap — at most 3 fire-and-forget runs per poll cycle (configurable). A bulk-filed batch of fix-now tickets can't spin up unbounded agent runs; extras queue for a human ▶.
  • First-run watermark — only tickets created after you enable the channel are imported. Flipping the toggle on a mature Jira project won't flood the board with years of backlog.

🔁 Closing the Loop

  • Full lifecycle comments back to Jira: pickup 🤖, queue moves 📋, completion ✅ (with summary), failure ❌ (with reason). Idempotent — exactly one result comment per run; reset + re-run comments again.
  • Clear failure reasons on cards: task.error is now rendered on the card and in the detail drawer. The most common local-model failure gets a friendly translation: "❌ Failed: Couldn't reach the LLM at http://localhost:1234/v1. Is LM Studio running?"
  • Delete → reimport escape hatch: deleting a Jira-sourced card removes its key from the dedup list so the still-open ticket re-imports on the next sync.
  • Auto-transition to Done (v3.4.1): when a task completes, its Jira ticket transitions to the workflow's Done status (matched by status category, so it works with any workflow naming). Default ON via jiraConfig.transitionOnDone; failed tickets never move.

📋 Known Limitations (documented in docs/jira-setup.md)

Deliberate v3.4 scope cuts: no re-sync of edited tickets, plaintext token in prompts.json, only the Done transition is automated (no In-Progress transition on pickup), no poller backoff, single-instance dedup, exact/case-sensitive label matching, one-way channel (board-created tasks aren't mirrored to Jira).

New/changed config (project.jiraConfig)

Key Default Purpose
onlyUnassigned true Assignee guard
botAccountEmail "" Assign-to-bot workflow
maxAutostartPerPoll 3 Autostart cap
enabledAt stamped on enable First-run watermark
transitionOnDone true Auto-move ticket to Done on task success

New endpoints

  • POST /api/projects/:id/jira/forget-key — delete→reimport escape hatch
  • POST /api/projects/:id/jira/task-event — queue-move visibility comments