You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[feature]: Let work-items/search match work item descriptions and comments (opt-in) #10219
Searched on 2026-11-07 for work item search / comments search / description search: no match (closest, #10104, is about comment counts).
Summary
GET /api/v1/workspaces/{slug}/work-items/search/?search=<text> only matches name, sequence_id and project__identifier. Text that lives in the description or in comments cannot be found through the public API. Please add an opt-in parameter, for example fields=name,description,comments (default stays name, so nothing changes for current clients).
Why should this be worked on?
Decisions and evidence usually end up in the description or in comments, not in the title. Automation (and people using the API) cannot answer "was this already decided / reported?" without downloading every work item and every comment, which at 60 requests/minute per key takes minutes for a few hundred items. The columns needed already exist and are already stripped of HTML: Issue.description_stripped and IssueComment.comment_stripped.
Reproduction
repro_limitacoes.py (section 2) on v1.4.3: a word present only in the title → 1 result; only in the description → 0; only in a comment → 0.
Implementation sketch (not tested against the Plane test suite)
Pinned to 618d0eb7. apps/api/plane/api/views/issue.py, IssueSearchEndpoint (class at line 2420, field list at line 2463):
requested=set(request.query_params.get("fields", "name").split(","))
...
forfieldinfields: # existing loop over name / sequence_id / project__identifier
...
if"description"inrequested:
q|=Q(description_stripped__icontains=query)
if"comments"inrequested:
q|=Q(Exists(IssueComment.objects.filter(issue=OuterRef("pk"), comment_stripped__icontains=query)))
Keep the existing visible_issue_subquery so restricted guests still only see what they may see. Optionally return matched_in: ["description"] per result.
Tests worth adding
Default call unchanged (title only).
fields=description finds a word that exists only in the description.
fields=comments finds a word that exists only in a comment, and does not return the item after the comment is deleted.
A restricted guest does not get items they cannot see through the new fields.
Workaround we use meanwhile
A read-only local mirror of issues and comments (one Markdown file per work item, refreshed incrementally by updated_at) searched with plain text matching.
Activity