mirror of
https://github.com/boolean-maybe/tiki
synced 2026-04-21 13:37:20 +00:00
bug-tracker workflow
This commit is contained in:
parent
351d7817e3
commit
529835df1c
2 changed files with 249 additions and 0 deletions
21
workflows/bug-tracker/new.md
Normal file
21
workflows/bug-tracker/new.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title:
|
||||
type: bug
|
||||
priority: 3
|
||||
severity: medium
|
||||
environment:
|
||||
reportedBy:
|
||||
foundIn:
|
||||
dueBy:
|
||||
regression: false
|
||||
escalations: 0
|
||||
---
|
||||
|
||||
## Steps to reproduce
|
||||
|
||||
1.
|
||||
|
||||
## Expected
|
||||
|
||||
## Actual
|
||||
|
||||
228
workflows/bug-tracker/workflow.yaml
Normal file
228
workflows/bug-tracker/workflow.yaml
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
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"
|
||||
Loading…
Reference in a new issue