mirror of
https://github.com/boolean-maybe/tiki
synced 2026-04-21 13:37:20 +00:00
233 lines
8.6 KiB
YAML
233 lines
8.6 KiB
YAML
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"
|