description: | Bug tracker for triaging and resolving customer-reported issues. Six statuses (Open → Triaged → In Progress → In Review → Verified, plus Won't Fix), three task types (Bug, Regression, Incident), and custom fields for severity, environment, reporter, foundIn version, due date, regression flag, and escalation count. fields: - name: severity type: enum values: [critical, high, medium, low] - name: environment type: enum values: [prod, staging, dev] - name: reportedBy type: text - name: foundIn type: text - name: dueBy type: datetime - name: regression type: boolean - name: escalations type: integer statuses: - key: open label: Open emoji: "\U0001F195" default: true - key: triaged label: Triaged emoji: "\U0001F4CB" active: true - key: inProgress label: "In Progress" emoji: "\u2699\uFE0F" active: true - key: inReview label: "In Review" emoji: "\U0001F440" active: true - key: verified label: Verified emoji: "\u2705" done: true - key: wontFix label: "Won't Fix" emoji: "\U0001F6AB" types: - key: bug label: Bug emoji: "\U0001F41B" - key: regression label: Regression emoji: "\U0001F501" - key: incident label: Incident emoji: "\U0001F525" views: actions: - key: "a" label: "Assign to me" action: update where id = id() set assignee=user() - key: "y" label: "Copy ID" action: select id where id = id() | clipboard() - key: "Y" label: "Copy content" action: select title, description where id = id() | clipboard() - key: "R" label: "Mark regression" action: update where id = id() set regression=true - key: "r" label: "Clear regression" action: update where id = id() set regression=false - key: "E" label: "Escalate" action: update where id = id() set escalations=escalations + 1 plugins: - name: Triage description: "Bug triage board — move bugs through the resolution pipeline" default: true key: "F1" lanes: - name: Open filter: select where status = "open" order by priority, createdAt action: update where id = id() set status="open" - name: Triaged filter: select where status = "triaged" order by priority, createdAt action: update where id = id() set status="triaged" - name: In Progress filter: select where status = "inProgress" order by priority, createdAt action: update where id = id() set status="inProgress" - name: In Review filter: select where status = "inReview" order by priority, createdAt action: update where id = id() set status="inReview" - name: Verified filter: select where status = "verified" order by priority, createdAt action: update where id = id() set status="verified" actions: - key: "w" label: "Won't fix" action: update where id = id() set status="wontFix" - name: Severity description: "Bugs grouped by severity level" key: "F2" lanes: - name: Critical columns: 2 width: 40 filter: select where severity = "critical" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set severity="critical" - name: High filter: select where severity = "high" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set severity="high" - name: Medium filter: select where severity = "medium" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set severity="medium" - name: Low filter: select where severity = "low" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set severity="low" actions: - key: "c" label: "Clear severity" action: update where id = id() set severity=empty - name: Environments description: "Bugs grouped by environment — prod, staging, dev" key: "F3" lanes: - name: Prod columns: 1 filter: select where environment = "prod" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set environment="prod" - name: Staging columns: 1 filter: select where environment = "staging" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set environment="staging" - name: Dev columns: 1 filter: select where environment = "dev" and status != "verified" and status != "wontFix" order by priority, createdAt action: update where id = id() set environment="dev" - name: Unspecified columns: 1 filter: select where environment is empty and status != "verified" and status != "wontFix" order by priority, createdAt - name: SLA Watch description: "Deadline tracking — overdue, due today, this week, and unscheduled" key: "F4" view: expanded lanes: - name: Overdue filter: select where dueBy is not empty and dueBy < now() and status != "verified" and status != "wontFix" order by dueBy - name: Due Today filter: select where dueBy >= now() and dueBy < now() + 1day order by priority - name: This Week filter: select where dueBy >= now() + 1day and dueBy < now() + 7day order by dueBy - name: No SLA filter: select where dueBy is empty and status != "verified" and status != "wontFix" order by priority actions: - key: "d" label: "Clear deadline" action: update where id = id() set dueBy=empty - key: "D" label: "Bump one week" action: update where id = id() set dueBy=now() + 7day - name: Help description: "Keyboard shortcuts, navigation, and usage guide" type: doki fetcher: internal text: "Help" key: "?" - name: Docs description: "Project notes and documentation files" type: doki fetcher: file url: "index.md" key: "F5" triggers: - description: critical bugs must specify environment ruki: > before create where new.severity = "critical" and new.environment is empty deny "critical bugs require environment" - description: bugs must pass through review before verification ruki: > before update where new.status = "verified" and old.status != "inReview" deny "bugs must pass through review before verification" - description: per-assignee WIP limit of 3 in-progress bugs ruki: > before update where new.status = "inProgress" and count(select where assignee = new.assignee and status = "inProgress") > 2 deny "assignee already at WIP limit (3 in-progress bugs)" - description: cannot delete an active bug ruki: > before delete where old.status = "inProgress" or old.status = "inReview" deny "cannot delete an active bug — move to wontFix or verified first" - description: auto-prioritize critical bugs and set 24h SLA ruki: > after create where new.severity = "critical" update where id = new.id set priority=1 dueBy=now() + 1day - description: tag and bump priority when regression is flagged ruki: > after update where new.regression = true and old.regression = false update where id = new.id set tags=tags + ["regression"] priority=1 - description: clear SLA on closure ruki: > after update where new.status = "verified" or new.status = "wontFix" update where id = new.id set dueBy=empty - description: remove deleted task from dependency lists ruki: > after delete update where old.id in dependsOn set dependsOn=dependsOn - [old.id] - description: auto-escalate overdue critical bugs every hour ruki: > every 1hour update where severity = "critical" and dueBy < now() and status != "verified" and status != "wontFix" set escalations=escalations + 1 - description: purge closed bugs older than 30 days ruki: > every 1day delete where (status = "verified" or status = "wontFix") and updatedAt < now() - 30day - description: demote stale in-progress bugs back to triaged ruki: > every 1day update where status = "inProgress" and updatedAt < now() - 7day set status="triaged"