diff --git a/workflows/kanban/new.md b/workflows/kanban/new.md new file mode 100644 index 0000000..dafb321 --- /dev/null +++ b/workflows/kanban/new.md @@ -0,0 +1,7 @@ +--- +title: +points: 1 +priority: 3 +tags: + - idea +--- diff --git a/workflows/kanban/workflow.yaml b/workflows/kanban/workflow.yaml new file mode 100644 index 0000000..011da9c --- /dev/null +++ b/workflows/kanban/workflow.yaml @@ -0,0 +1,157 @@ +statuses: + - key: backlog + label: Backlog + emoji: "📥" + default: true + - key: ready + label: Ready + emoji: "📋" + active: true + - key: inProgress + label: "In Progress" + emoji: "⚙️" + active: true + - key: review + label: Review + emoji: "👀" + active: true + - key: done + label: Done + emoji: "✅" + done: true + +types: + - key: story + label: Story + emoji: "🌀" + - key: bug + label: Bug + emoji: "💥" + - key: spike + label: Spike + emoji: "🔍" + - key: epic + label: Epic + emoji: "🗂️" + +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() + plugins: + - name: Kanban + description: "Move tiki to new status, search, create or delete" + default: true + key: "F1" + lanes: + - name: Ready + filter: select where status = "ready" and type != "epic" order by priority, createdAt + action: update where id = id() set status="ready" + - name: In Progress + filter: select where status = "inProgress" and type != "epic" order by priority, createdAt + action: update where id = id() set status="inProgress" + - name: Review + filter: select where status = "review" and type != "epic" order by priority, createdAt + action: update where id = id() set status="review" + - name: Done + filter: select where status = "done" and type != "epic" order by priority, createdAt + action: update where id = id() set status="done" + - name: Backlog + description: "Tasks waiting to be picked up, sorted by priority" + key: "F3" + lanes: + - name: Backlog + columns: 4 + filter: select where status = "backlog" and type != "epic" order by priority, id + actions: + - key: "b" + label: "Add to board" + action: update where id = id() set status="ready" + - name: Recent + description: "Tasks changed in the last 24 hours, most recent first" + key: Ctrl-R + lanes: + - name: Recent + columns: 4 + filter: select where now() - updatedAt < 24hour order by updatedAt desc + - name: Roadmap + description: "Epics organized by Now, Next, and Later horizons" + key: "F4" + lanes: + - name: Now + columns: 1 + width: 25 + filter: select where type = "epic" and status = "ready" order by priority, points desc + action: update where id = id() set status="ready" + - name: Next + columns: 1 + width: 25 + filter: select where type = "epic" and status = "backlog" and priority = 1 order by priority, points desc + action: update where id = id() set status="backlog" priority=1 + - name: Later + columns: 2 + width: 50 + filter: select where type = "epic" and status = "backlog" and priority > 1 order by priority, points desc + action: update where id = id() set status="backlog" priority=2 + view: expanded + - 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: "F2" + +triggers: + - description: block completion with open dependencies + ruki: > + before update + where new.status = "done" and new.dependsOn any status != "done" + deny "cannot complete: has open dependencies" + - description: tasks must pass through review before completion + ruki: > + before update + where new.status = "done" and old.status != "review" + deny "tasks must go through review before marking done" + - description: remove deleted task from dependency lists + ruki: > + after delete + update where old.id in dependsOn set dependsOn=dependsOn - [old.id] + - description: clean up completed tasks after 24 hours + ruki: > + every 1day + delete where status = "done" and updatedAt < now() - 1day + - description: tasks must have an assignee before starting + ruki: > + before update + where new.status = "inProgress" and new.assignee is empty + deny "assign someone before moving to in-progress" + - description: auto-complete epics when all child tasks finish + ruki: > + after update + where new.status = "done" and new.type != "epic" + update where type = "epic" and new.id in dependsOn and dependsOn all status = "done" + set status="done" + - description: cannot delete tasks that are actively being worked + ruki: > + before delete + where old.status = "inProgress" + deny "cannot delete an in-progress task — move to backlog or done first" + - description: spawn next occurrence when recurring task completes + ruki: > + after update + where new.status = "done" and old.recurrence is not empty + create title=old.title priority=old.priority tags=old.tags + recurrence=old.recurrence due=next_date(old.recurrence) status="backlog" diff --git a/workflows/todo/new.md b/workflows/todo/new.md new file mode 100644 index 0000000..6ff13c2 --- /dev/null +++ b/workflows/todo/new.md @@ -0,0 +1,4 @@ +--- +title: +priority: 3 +--- diff --git a/workflows/todo/workflow.yaml b/workflows/todo/workflow.yaml new file mode 100644 index 0000000..74f783a --- /dev/null +++ b/workflows/todo/workflow.yaml @@ -0,0 +1,44 @@ +statuses: + - key: todo + label: Todo + emoji: "📌" + default: true + active: true + - key: done + label: Done + emoji: "✅" + done: true + +types: + - key: task + label: Task + emoji: "📝" + +views: + actions: + - 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() + plugins: + - name: Todo + description: "Simple todo list with two lanes" + default: true + key: "F1" + lanes: + - name: Todo + columns: 3 + filter: select where status = "todo" order by priority, createdAt + action: update where id = id() set status="todo" + - name: Done + columns: 1 + filter: select where status = "done" order by updatedAt desc + action: update where id = id() set status="done" + +triggers: + - description: clean up completed tasks after 24 hours + ruki: > + every 1day + delete where status = "done" and updatedAt < now() - 1day