Query Language
ROPARC includes a powerful query language for filtering and searching. It uses a JQL-like syntax that supports field comparisons, logical operators, and nested queries. You’ll meet it in the items list search bar (which auto-detects query syntax vs. plain text), the cross-entity Search page, dashboard widget filters, verification iteration scoping, and query-scoped permissions.
The search bar offers autocomplete for field names, operators, and values while you compose, plus a syntax help button. The sparkles button translates a natural-language request (“requirements updated in the last week without a verifying test case”) into a query for you.

Basic Syntax
A query consists of one or more conditions combined with logical operators:
field operator value
Examples
type = requirement
status = approved
title ~ "authentication"
Keywords and field names are case-insensitive (AND = and, IS EMPTY = is empty).
Operators
| Operator | Description | Example |
|---|---|---|
= | Equals | type = requirement |
!= | Not equals | status != draft |
> | Greater than | created_at > 2024-01-01 |
>= | Greater than or equal | updated_at >= -7d |
< | Less than | priority < 3 |
<= | Less than or equal | priority <= 2 |
~ | Contains (text search) | title ~ "auth" |
!~ | Does not contain | title !~ "deprecated" |
IN | Value in set | status IN (draft, approved) |
NOT IN | Value not in set | type NOT IN (hazard, risk) |
IS EMPTY | Field has no value | description IS EMPTY |
IS NOT EMPTY | Field has a value | assignee IS NOT EMPTY |
Logical Operators
Combine multiple conditions using AND, OR, and NOT:
type = requirement AND status = approved
type = requirement OR type = test
NOT status = deleted
(type = requirement OR type = test) AND status != draft
Operator precedence (highest to lowest):
- Parentheses
() NOTANDOR
Fields
Standard Fields
| Field | Type | Description |
|---|---|---|
id | string | Item ID |
type | string | Item type (requirement, test, hazard, etc.) |
title | string | Item title (supports full-text search via ~) |
status | string | Current workflow status |
description | string | Item description (supports full-text search via ~) |
created_at | date | Creation timestamp |
created_by | string | Creator user ID |
updated_at | date | Last modification timestamp |
updated_by | string | Last modifier user ID |
has_suspect_links | boolean | Whether the item has suspect links (=/!= only) |
Custom Fields
Any custom fields defined in your item type configuration can be used directly. If a custom field’s key collides with a standard or link field name, prefix it with custom. to disambiguate:
severity = critical
component ~ "engine"
custom.status_note IS NOT EMPTY
Date and datetime fields support comparison operators for range queries:
due_date > "2025-01-01"
event_time >= "2025-06-15T09:00"
Multi-value fields (multi-select enums and references) match on containment: tags = safety means “contains safety”, tags IN (safety, security) means “overlaps with either”.
Link Fields
Query items by their link relationships:
| Field | Description |
|---|---|
links_to | Items this one links to (outgoing) |
linked_from | Items that link to this one (incoming) |
links | Items linked in either direction |
Named link types from your workarea configuration can also be used (e.g., verified_by, derives_from, mitigates). Named link-type fields are bidirectional: refines IN (type = X) matches items connected to a refines link involving X regardless of which end they’re on. Use links_to / linked_from only when you specifically need to constrain direction.
Link fields support =/!= against item IDs, IN/NOT IN with ID lists or subqueries, and IS EMPTY / IS NOT EMPTY:
verified_by = ITEM-12
links_to IN (type = testcase)
linked_from NOT IN (status = obsolete)
Link attribute queries use dot notation:
verified_by.applicability = "variant-a"
Cross-Entity Queries
The language isn’t limited to items — documents and verification iterations are queryable too. Use entityType to narrow the scope on the Search page:
entityType = document AND updated_at >= -7d
entityType IN (item, document) AND title ~ "brake"
Documents add a folder_id field; iterations add target_baseline.
Value Types
| Type | Examples |
|---|---|
| Quoted string | "hello world", 'single quotes' |
| Unquoted identifier | draft, approved, in-progress |
| Number | 42, -3, 1.5 |
| Boolean | true, false |
| ISO date | 2024-01-01, 2024-06-15T14:30:00Z |
| Relative date | -7d (7 days ago), -2w (2 weeks ago), -1m (1 month ago), -1y (1 year ago) |
User Variables
In query-scoped permission predicates, $user.id, $user.email, and $user.display_name refer to the current user:
assignee = $user.id
These variables are resolved only where a user context exists (permission predicates) — they don’t match anything in the plain items search bar.
Common Query Examples
Find all open requirements:
type = requirement AND status != closed
Items modified in the last week:
updated_at >= -7d
Requirements with no linked test cases:
type = requirement AND verified_by IS EMPTY
Items containing “safety” in the title:
title ~ "safety"
High-priority items assigned to a specific user:
priority = high AND assignee = "john.doe"
Items with suspect traceability links:
has_suspect_links = true