Symbols resolve in today's order: bookmark names, then tag names, then
46
change prefixes.
47
48
| Symbol | Means |
49
|---|---|
50
|`main`, `v0.3.1`| the heads of that bookmark or tag |
51
|`origin/main`| the heads of a remote-tracking bookmark |
52
|`8c5ea12a`| the change with that ChangeId prefix |
53
|`#fc68459c`| the change with that hash prefix |
54
|`@`| the working copy's base heads |
55
|`all()`, `none()`| every stored change, no change |
56
57
###2.2 Relations
58
59
Each function takes a set and returns a set.
60
61
| Expression | Returns |
62
|---|---|
63
|`deps(X)`| the immediate dependencies of X |
64
|`dependents(X)`| changes that immediately depend on X |
65
|`::X`| X and its whole dependency closure, which is the *state* X names |
66
|`X::`| X and everything that transitively depends on it |
67
|`X::Y`| changes that are both in `X::` and in `::Y`|
68
|`X..Y`|`::Y ~ ::X`: what state Y has that state X lacks. This is what a proposal from X to Y adds. |
69
|`heads(X)`, `roots(X)`| members of X that no other member depends on, and members that depend on no other member |
70
|`independent(X, IN)`| changes in IN that neither depend on X nor are depended on by X: what could ship without X. Only Oxygen can answer this, because changes commute. |
71
|`latest(X, n)`| the n most recent members of X, by hybrid logical clock |
72
73
###2.3 Content and metadata
74
75
| Expression | Selects |
76
|---|---|
77
|`author(P)`| changes whose `author` identity matches name, email or KeyId P |
78
|`description(T)`| changes whose message contains T (`re:` for a regular expression) |
79
|`date(RANGE)`| changes by HLC wall time: `2026-10-01..`, `-7d..`, `..2026-09-30`|
80
|`kind(K)`|`normal`, `resolution` or `working-copy`|
81
|`touches(GLOB)`| changes that edit any node whose path matches GLOB in the evaluation state. Nodes keep their identity through renames, so this follows a file's whole history under any name. |
82
|`conflicts(S)`| changes that contributed atoms to a conflict in state S (default `@`). Conflicts belong to states, not changes. |
83
84
###2.4 Trust: unique to Oxygen
85
86
| Expression | Selects |
87
|---|---|
88
|`signed_by(K)`| changes whose signature or seal is by key or identity K, including a delegate such as an agent key |
89
|`delegated()`| changes signed by a delegate rather than their author |
90
|`unsigned()`| changes with no valid signature or seal |
91
|`revoked()`| changes signed by a key now revoked |
92
|`attested(KIND)`| changes in states carrying an attestation of that kind, such as `tag` or `receipt`|
93
|`built(JOB)`| changes in states with a valid receipt for Flow job JOB |
94
95
For example, `release..main & (unsigned() | revoked())` asks: "is
96
anything about to ship without a trustworthy signature?"
97
98
###2.5 Operators and precedence
99
100
From tightest to loosest:
101
102
1.`::` and `..`
103
2.`~` (difference)
104
3.`&` (intersection)
105
4.`|` (union)
106
107
Parentheses group. Strings with spaces or operators are quoted.
108
`~` is difference, as in Jujutsu. There is no unary not: write `all() ~ X`.