Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions docs/automations/custom-automations.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,19 @@ Conditions let you filter which work items an automation acts on. You can combin

Updates a field on the work item.

| Property | What you can do |
| ---------- | ---------------------------------------------------------------------- |
| Priority | Set, add, or remove a priority level (Urgent, High, Medium, Low, None) |
| State | Move the work item to a specific state |
| Assignees | Add or remove assignees |
| Labels | Add, remove, or replace all labels |
| Start date | Set, update, or remove the start date |
| Due date | Set, update, or remove the due date |
| Property | What you can do |
| ---------- | -------------------------------------------------------------------------------------------------- |
| Priority | Set, add, or remove a priority level (Urgent, High, Medium, Low, None) |
| State | Move the work item to a specific state |
| Assignees | Add or remove assignees |
| Labels | Add, remove, or replace all labels |
| Start date | Set, update, or remove the start date |
| Due date | Set, update, or remove the due date |
| Cycle | Assign the work item to a cycle, move it to a different cycle, or remove it from its current cycle |

:::tip
When assigning a cycle, the cycle must belong to the work item's own project, and you cannot assign a work item to a cycle that has already ended. A work item can be in only one cycle at a time, so assigning a cycle moves the work item off any cycle it is currently in.
Comment on lines +167 to +170

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== files ==\n'
git ls-files 'docs/automations/custom-automations.md' 'docs/core-concepts/cycles.md' 'docs/.vitepress/config.ts'

printf '\n== relevant ranges: custom automations ==\n'
sed -n '150,185p' docs/automations/custom-automations.md

printf '\n== relevant ranges: cycles ==\n'
sed -n '100,140p' docs/core-concepts/cycles.md

Repository: makeplane/docs

Length of output: 5140


Update the cycle action description docs/automations/custom-automations.md:167-170

The table/tip says automation can move a work item to a different cycle, but the cycles docs say a work item can only belong to one cycle and adding it to another is blocked. Reword this to match the actual behavior, or document a separate transfer flow if one exists.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/automations/custom-automations.md` around lines 167 - 170, Update the
cycle action description and its accompanying tip in the custom automations
documentation to match the actual behavior: do not claim automation can move a
work item between cycles unless a supported transfer flow is documented.
Describe only the supported cycle assignment/removal behavior and preserve the
single-cycle constraint.

:::

#### Add comment

Expand Down Expand Up @@ -299,3 +304,5 @@ Some common things people use automations for.
- **Contextual reminders.** Surface the right information at the right moment - for example, post an internal comment with a checklist when a work item enters "Ready for QA," or flag missing information when a work item is created without an assignee.

- **Scheduled operations.** Run scripts on a timer to handle things that don't map to a single event - for example, sweep stale items weekly, sync data to an external tool nightly, or generate a status comment on open items every Monday morning.

- **Sprint assignment.** Put work items into the right cycle automatically - for example, add a work item to the current cycle when its state changes to "In Progress," or remove it from its cycle when it moves to "Backlog."
114 changes: 100 additions & 14 deletions docs/core-concepts/issues/plane-query-language.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Filter work items using text-based queries with Plane Query Languag

# Plane Query Language (PQL) <Badge type="info" text="Pro" />

Plane Query Language (PQL) lets you filter work items using text-based queries. Write structured expressions to quickly find exactly what you need.
Plane Query Language (PQL) lets you filter work items using text-based queries. Write structured expressions to quickly find exactly what you need, combine conditions with logic, call built-in functions, and sort and limit the results.

![PQL editor](https://media.docs.plane.so/issues/pql-editor.webp#hero)

Expand All @@ -17,7 +17,7 @@ To switch to PQL mode, click **PQL** in the filter bar.

When you start typing in the PQL field:

1. A dropdown shows available **fields**
1. A dropdown shows available **fields** and **functions**
2. After selecting a field, you see **operators**
3. Then you choose or type **values**
4. Continue building your query using **AND** or **OR**
Expand All @@ -40,7 +40,7 @@ priority = High

This returns all work items where priority is High.

You can also combine multiple conditions using logical operators like `AND` and `OR`.
You can also combine multiple conditions using the logical operators `AND`, `OR`, and `NOT`.

**Using AND**

Expand All @@ -58,12 +58,33 @@ state = Todo OR state = In Progress

This returns work items that match either condition.

**Using NOT**

```
NOT hasNoAssignee()
```
Comment on lines +63 to +65

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to the fenced PQL examples.

These new code fences trigger Markdownlint MD040. Use a language such as text (or the repository’s supported PQL language identifier) after each opening fence.

Proposed fix
-```
+```text
 NOT hasNoAssignee()

- +text
(priority = High AND state in (Backlog, In Progress, Todo)) OR ...


-```
+```text
priority = High ORDER BY dueDate ASC LIMIT 20

- +text
blockedBy("PROJ-42")

</details>

  


Also applies to: 71-73, 79-81, 428-430

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.23.0)</summary>

[warning] 63-63: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/core-concepts/issues/plane-query-language.md around lines 63 - 65,
Update every fenced PQL example in the document, including the blocks containing
NOT hasNoAssignee(), the priority/state query, the ORDER BY query, and
blockedBy("PROJ-42"), to specify text or the repository-supported PQL language
identifier immediately after each opening fence. Ensure all affected fences
satisfy Markdownlint MD040.


</details>

<!-- fingerprinting:phantom:triton:luna -->

<!-- cr-indicator-types:potential_issue -->

<!-- cr-comment:v1:3b4af3a14693009eb5397885 -->

_Source: Linters/SAST tools_

<!-- This is an auto-generated comment by CodeRabbit -->


This returns work items that do have an assignee.

**Combined:**

```
(priority = High AND state in (Backlog, In Progress, Todo)) OR (type in (Bug, Task, Improvements) AND assignee in (Ethan, Parker, Amanda))
```

## Sort and limit results

You can sort results and cap how many are returned by adding `ORDER BY` and `LIMIT` clauses to the end of a query.

```
priority = High ORDER BY dueDate ASC LIMIT 20
```

- **ORDER BY** sorts the results by a field. Add `ASC` (ascending, the default) or `DESC` (descending).
- **LIMIT** caps the number of results returned. The maximum is 1000.

Fields you can sort by: `priority`, `state`, `title`, `assignee`, `label`, `module`, `startDate`, `dueDate`, `createdAt`, `updatedAt`, `sortOrder`, `rank`.

## Save as view

Once you've built your query, click **Save view** to preserve it for quick access later. See [Views](/core-concepts/views) for details.
Expand All @@ -79,6 +100,40 @@ PQL is available wherever work items are listed:
- Teamspace work items
- Workspace views

The exact fields available in the editor depend on what is enabled for the project or workspace you are filtering. For example, `cycle` and `module` appear where those features are on, and custom properties appear when your work item types define them.

## Fields reference

### Text search

| Field | What it searches |
| ------- | ----------------------------------------------------------------------- |
| `title` | The work item title (name) only |
| `text` | The work item title **and** description together, in a single condition |

Use `text` when you want to match a term whether it appears in the title or the body of a work item. For example, `text ~ "login"` returns work items with "login" in the title or the description.

### Common fields

| Field | Filters on |
| ------------ | --------------------------------------------------------------- |
| `type` | Work item type |
| `state` | Workflow state |
| `stateGroup` | State group (Backlog, Unstarted, Started, Completed, Cancelled) |
| `priority` | Priority (Urgent, High, Medium, Low, None) |
| `assignee` | Assigned members |
| `label` | Labels applied |
| `cycle` | Cycle membership |
| `module` | Module membership |
| `milestone` | Milestone |
| `mention` | Members mentioned in the work item |
| `createdBy` | Who created the work item |
| `project` | Project the work item belongs to |
| `startDate` | Start date |
| `dueDate` | Due date |
| `createdAt` | Creation date |
| `updatedAt` | Last updated date |

## Operators reference

Each field supports different operators. The available operators depend on the field type.
Expand All @@ -99,6 +154,14 @@ Each field supports different operators. The available operators depend on the f
| `!=` | Title does not match |
| `~` | Title contains text |

### text

| Operator | Description |
| -------- | -------------------------------------------- |
| `=` | Title or description matches the text |
| `!=` | Title or description does not match the text |
| `~` | Title or description contains the text |

### type

| Operator | Description |
Expand Down Expand Up @@ -331,14 +394,37 @@ The available operators depend on the property type.

## Built-in functions

PQL includes functions to filter work items based on common scenarios. These functions return a boolean value (`true` or `false`).

| Function | Description |
| --------------------- | ----------------------------------- |
| `isOverdue` | Due date is past and state is open |
| `hasNoAssignee` | Work item has no assignee |
| `hasNoLabel` | Work item has no labels |
| `isTopLevel` | Not a sub-work item (has no parent) |
| `isSubWorkItem` | Is a sub-work item (has a parent) |
| `hasChildren` | Has at least one sub-work item |
| `hasStartAndDueDates` | Has both start and due dates |
PQL includes functions that cover common scenarios. Type `(` after a field, or start typing a function name, and the editor suggests the ones that fit.

### Predicate functions

These are standalone conditions that return true or false. Use them on their own (and combine with `NOT` to invert).

| Function | Matches work items that |
| ----------------------- | -------------------------------------- |
| `isOverdue()` | Are past their due date and still open |
| `hasNoAssignee()` | Have no assignee |
| `hasNoLabel()` | Have no labels |
| `isTopLevel()` | Are not a sub-work item (no parent) |
| `isSubWorkItem()` | Are a sub-work item (have a parent) |
| `hasChildren()` | Have at least one sub-work item |
| `hasStartAndDueDates()` | Have both a start date and a due date |

### Relation functions

These match work items by their relationship to other work items. Each takes one or more work item identifiers (for example `PROJ-123`).

| Function | Matches work items that |
| -------------------------- | --------------------------------------- |
| `blockedBy("PROJ-1", …)` | Are blocked by the given items |
| `blocks("PROJ-1", …)` | Block the given items |
| `linkedTo("PROJ-1", …)` | Are related to the given items |
| `duplicateOf("PROJ-1", …)` | Are marked duplicate of the given items |
| `childOf("PROJ-1", …)` | Are a child of the given items |
| `parentOf("PROJ-1", …)` | Are a parent of the given items |

Example:

```
blockedBy("PROJ-42")
```
26 changes: 26 additions & 0 deletions docs/core-concepts/pages/editor-blocks.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,32 @@ Use the slash command to insert the layout you need:

Each column appears with an "Add content" placeholder where you can add any block type - text, lists, code, images, and more.

## Tabs <Badge type="tip" text="Business" />

Tabs let you organize content into a tabbed block within a page, so related sections can share one space and readers switch between them instead of scrolling. You can lay tabs out horizontally (along the top) or vertically (down the side).

### Insert tabs

Type `/tabs` in the editor and choose one of:

- **Horizontal tabs** - the tab labels run along the top of the block.
- **Vertical tabs** - the tab labels run down the side of the block.

A new block is inserted with two tabs, named "Tab 1" and "Tab 2". Each tab holds its own content, and you can put any editor content inside a tab, including text, lists, images, and other blocks.

### Rename a tab

Double-click a tab label, type the new name, and press Enter (or click away) to save.

### Change the layout

While editing, use the layout controls on the block to switch between horizontal and vertical orientation at any time. Your tabs and their content are preserved.

### Notes

- Tabs cannot be nested. You cannot insert a tabs block inside another tabs block.
- In read-only or published pages, readers can switch between tabs but cannot add, rename, delete, or edit them.

## Video <Badge type="info" text="Pro" />

Embeds video content directly into your pages for rich multimedia documentation.
Expand Down
Loading
Loading