From b5f2ad66fa35216ef46c40f65da02177b7bd462a Mon Sep 17 00:00:00 2001 From: booleanmaybe Date: Fri, 10 Apr 2026 00:32:32 -0400 Subject: [PATCH] add recipes --- .doc/doki/doc/ideas/plugins.md | 199 ++++++++++++++++++++++++++++++ .doc/doki/doc/ideas/triggers.md | 23 ++++ .doc/doki/doc/index.md | 3 +- .doc/doki/doc/ruki/index.md | 8 +- .doc/doki/doc/ruki/quick-start.md | 8 ++ 5 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 .doc/doki/doc/ideas/plugins.md diff --git a/.doc/doki/doc/ideas/plugins.md b/.doc/doki/doc/ideas/plugins.md new file mode 100644 index 0000000..3613e1a --- /dev/null +++ b/.doc/doki/doc/ideas/plugins.md @@ -0,0 +1,199 @@ +# Customization Examples + +- [Assign to me](#assign-to-me--plugin-action) +- [Add tag to task](#add-tag-to-task--plugin-action) +- [Custom status + reject action](#custom-status--reject-action) +- [Search all tikis](#search-all-tikis--single-lane-plugin) +- [Quick assign](#quick-assign--lane-based-assignment) +- [Stale task detection](#stale-task-detection--time-trigger--plugin) +- [My tasks](#my-tasks--user-scoped-plugin) +- [Recent ideas](#recent-ideas--good-or-trash) +- [Auto-delete stale tasks](#auto-delete-stale-tasks--time-trigger) +- [Priority triage](#priority-triage--five-lane-plugin) +- [By topic](#by-topic--tag-based-lanes) + +## Assign to me — plugin action + +Shortcut key that sets the selected task's assignee to the current git user. + +```yaml +actions: + - key: "a" + label: "Assign to me" + action: update where id = id() set assignee=user() +``` + +## Add tag to task — plugin action + +Appends a tag to the selected task's tag list without removing existing tags. + +```yaml +actions: + - key: "t" + label: "Tag my_project" + action: update where id = id() set tags=tags + ["my_project"] +``` + +## Custom status + reject action + +Define a custom "rejected" status, then add a plugin action on the Backlog view to reject tasks. + +```yaml +statuses: + - key: rejected + label: Rejected + emoji: "🚫" + done: true +``` + +```yaml +- name: Backlog + key: "F3" + lanes: + - name: Backlog + filter: select where status = "backlog" order by priority + actions: + - key: "r" + label: "Reject" + action: update where id = id() set status="rejected" +``` + +## Search all tikis — single-lane plugin + +A plugin with one unfiltered lane shows every task. Press `/` to search across all of them. + +```yaml +- name: All + key: "F5" + lanes: + - name: All + columns: 4 + filter: select order by updatedAt desc +``` + +## Quick assign — lane-based assignment + +Three lanes split tasks by assignee. Moving a task into Alice's or Bob's lane auto-assigns it. + +```yaml +- name: Team + key: "F6" + lanes: + - name: Unassigned + filter: select where assignee is empty order by priority + - name: Alice + filter: select where assignee = "alice" order by priority + action: update where id = id() set assignee="alice" + - name: Bob + filter: select where assignee = "bob" order by priority + action: update where id = id() set assignee="bob" +``` + +## Stale task detection — time trigger + plugin + +A daily trigger tags in-progress tasks that haven't been updated in a week. A dedicated plugin shows all flagged tasks. + +```yaml +triggers: + - description: flag stale in-progress tasks + ruki: > + every 1day + update where status = "inProgress" and now() - updatedAt > 7day + and "attention" not in tags + set tags=tags + ["attention"] +``` + +```yaml +- name: Attention + key: "F7" + lanes: + - name: Needs Attention + columns: 4 + filter: select where "attention" in tags order by updatedAt +``` + +## My tasks — user-scoped plugin + +Shows only tasks assigned to the current git user. + +```yaml +- name: My Tasks + key: "F8" + lanes: + - name: My Tasks + columns: 4 + filter: select where assignee = user() order by priority +``` + +## Recent ideas — good or trash? + +Two-lane plugin to review recent ideas and trash the ones you don't need. Moving to Trash swaps the "idea" tag for "trash". + +```yaml +- name: Recent Ideas + description: "Review recent" + key: "F9" + lanes: + - name: Recent Ideas + columns: 3 + filter: select where "idea" in tags and now() - createdAt < 7day order by createdAt desc + - name: Trash + columns: 1 + filter: select where "trash" in tags order by updatedAt desc + action: update where id = id() set tags=tags - ["idea"] + ["trash"] +``` + +## Auto-delete stale tasks — time trigger + +Deletes backlog tasks that were created over 3 months ago and haven't been updated in 2 months. + +```yaml +triggers: + - description: auto-delete stale backlog tasks + ruki: > + every 1day + delete where status = "backlog" + and now() - createdAt > 3month + and now() - updatedAt > 2month +``` + +## Priority triage — five-lane plugin + +One lane per priority level. Moving a task between lanes reassigns its priority. + +```yaml +- name: Priorities + key: "F10" + lanes: + - name: Critical + filter: select where priority = 1 order by updatedAt desc + action: update where id = id() set priority=1 + - name: High + filter: select where priority = 2 order by updatedAt desc + action: update where id = id() set priority=2 + - name: Medium + filter: select where priority = 3 order by updatedAt desc + action: update where id = id() set priority=3 + - name: Low + filter: select where priority = 4 order by updatedAt desc + action: update where id = id() set priority=4 + - name: Minimal + filter: select where priority = 5 order by updatedAt desc + action: update where id = id() set priority=5 +``` + +## By topic — tag-based lanes + +Split tasks into lanes by tag. Useful for viewing work across domains at a glance. + +```yaml +- name: By Topic + key: "F11" + lanes: + - name: Frontend + columns: 2 + filter: select where "frontend" in tags order by priority + - name: Backend + columns: 2 + filter: select where "backend" in tags order by priority +``` diff --git a/.doc/doki/doc/ideas/triggers.md b/.doc/doki/doc/ideas/triggers.md index 37515ae..88d2efd 100644 --- a/.doc/doki/doc/ideas/triggers.md +++ b/.doc/doki/doc/ideas/triggers.md @@ -2,6 +2,29 @@ Candidate triggers for the default workflow. Each represents a common workflow pattern. +- [WIP limit per assignee](#wip-limit-per-assignee) +- [Require description for high-priority tasks](#require-description-for-high-priority-tasks) +- [Auto-create next occurrence for recurring tasks](#auto-create-next-occurrence-for-recurring-tasks) +- [Return stale in-progress tasks to backlog](#return-stale-in-progress-tasks-to-backlog) +- [Unblock tasks when dependencies complete](#unblock-tasks-when-dependencies-complete) +- [Prevent re-opening completed tasks directly](#prevent-re-opening-completed-tasks-directly) +- [Auto-assign creator on start](#auto-assign-creator-on-start) +- [Escalate overdue tasks](#escalate-overdue-tasks) +- [Require points estimate before review](#require-points-estimate-before-review) +- [Auto-tag bugs as urgent when high priority](#auto-tag-bugs-as-urgent-when-high-priority) +- [Prevent epics from being assigned](#prevent-epics-from-being-assigned) +- [Auto-remove urgent tag when priority drops](#auto-remove-urgent-tag-when-priority-drops) +- [Notify on critical task creation via webhook](#notify-on-critical-task-creation-via-webhook) +- [Spike time-box](#spike-time-box) +- [Require task breakdown for large estimates](#require-task-breakdown-for-large-estimates) +- [Propagate priority from epic to children](#propagate-priority-from-epic-to-children) +- [Auto-set due date for in-progress tasks](#auto-set-due-date-for-in-progress-tasks) +- [Require a title on creation](#require-a-title-on-creation) +- [Prevent creating tasks as done](#prevent-creating-tasks-as-done) +- [Epics require a description at creation](#epics-require-a-description-at-creation) +- [Prevent deleting epics with active children](#prevent-deleting-epics-with-active-children) +- [Block deletion of high-priority tasks](#block-deletion-of-high-priority-tasks) + ## WIP limit per assignee Prevent overloading a single person with too many active tasks. diff --git a/.doc/doki/doc/index.md b/.doc/doki/doc/index.md index b3a78a7..a854294 100644 --- a/.doc/doki/doc/index.md +++ b/.doc/doki/doc/index.md @@ -9,4 +9,5 @@ - [tiki format](tiki-format.md) - [Quick capture](quick-capture.md) - [AI collaboration](ai.md) -- [Recipes](ideas/triggers.md) \ No newline at end of file +- [Recipes](ideas/plugins.md) +- [Triggers](ideas/triggers.md) \ No newline at end of file diff --git a/.doc/doki/doc/ruki/index.md b/.doc/doki/doc/ruki/index.md index f061ada..e09550f 100644 --- a/.doc/doki/doc/ruki/index.md +++ b/.doc/doki/doc/ruki/index.md @@ -14,9 +14,15 @@ This section documents the `ruki` language. `ruki` is a small language for findi New users: start with [Quick Start](quick-start.md) and [Examples](examples.md). +## Recipes + +ready-to-use examples for common workflow patterns + +- [Plugins](../ideas/plugins.md) +- [Triggers](../ideas/triggers.md) + ## More details -- [Recipes](../ideas/triggers.md): ready-to-use trigger examples for common workflow patterns. - [Syntax](syntax.md): lexical structure and grammar-oriented reference. - [Semantics](semantics.md): statement behavior, trigger structure, qualifier scope, and evaluation model. - [Triggers](triggers.md): configuration, runtime execution model, cascade behavior, and operational patterns. diff --git a/.doc/doki/doc/ruki/quick-start.md b/.doc/doki/doc/ruki/quick-start.md index 99159a3..c7daef6 100644 --- a/.doc/doki/doc/ruki/quick-start.md +++ b/.doc/doki/doc/ruki/quick-start.md @@ -122,6 +122,14 @@ Triggers are configured in `workflow.yaml` under the `triggers:` key. See [Trigg ## Where to go next +### Recipes +ready-to-use examples for common workflow patterns + +- [Plugins](../ideas/plugins.md) +- [Triggers](../ideas/triggers.md) + +### More info + - Use [Triggers](triggers.md) for configuration, execution model, and runtime behavior. - Use [Syntax](syntax.md) for the grammar-level reference. - Use [Types And Values](types-and-values.md) for the type system and literal rules.