@intentius/chant 0.124.45 → 0.124.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/capabilities/aws.paths +148 -0
  2. package/dist/capabilities/base-mappings.json +122 -0
  3. package/dist/capabilities/catalog.d.ts +89 -0
  4. package/dist/capabilities/catalog.d.ts.map +1 -0
  5. package/dist/capabilities/catalog.js +204 -0
  6. package/dist/capabilities/language.d.ts +103 -0
  7. package/dist/capabilities/language.d.ts.map +1 -0
  8. package/dist/capabilities/language.js +335 -0
  9. package/dist/capabilities/matcher.d.ts +65 -0
  10. package/dist/capabilities/matcher.d.ts.map +1 -0
  11. package/dist/capabilities/matcher.js +299 -0
  12. package/dist/capabilities/view.d.ts +207 -0
  13. package/dist/capabilities/view.d.ts.map +1 -0
  14. package/dist/capabilities/view.js +484 -0
  15. package/dist/cli/commands/lint.d.ts.map +1 -1
  16. package/dist/cli/commands/lint.js +1 -0
  17. package/dist/cli/handlers/declared-graph.d.ts +44 -0
  18. package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
  19. package/dist/cli/handlers/declared-graph.js +87 -0
  20. package/dist/cli/handlers/graph.d.ts +25 -0
  21. package/dist/cli/handlers/graph.d.ts.map +1 -1
  22. package/dist/cli/handlers/graph.js +93 -87
  23. package/dist/cli/handlers/pr-env.d.ts.map +1 -1
  24. package/dist/cli/handlers/pr-env.js +2 -1
  25. package/dist/cli/handlers/search-count.d.ts +89 -0
  26. package/dist/cli/handlers/search-count.d.ts.map +1 -0
  27. package/dist/cli/handlers/search-count.js +132 -0
  28. package/dist/cli/handlers/search.d.ts +358 -6
  29. package/dist/cli/handlers/search.d.ts.map +1 -1
  30. package/dist/cli/handlers/search.js +1065 -155
  31. package/dist/cli/main.d.ts.map +1 -1
  32. package/dist/cli/main.js +23 -3
  33. package/dist/cli/mcp/server.d.ts.map +1 -1
  34. package/dist/cli/mcp/server.js +3 -0
  35. package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
  36. package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
  37. package/dist/cli/mcp/tools/capabilities.js +27 -0
  38. package/dist/cli/mcp/workspace-tools.d.ts +3 -1
  39. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  40. package/dist/cli/mcp/workspace-tools.js +47 -2
  41. package/dist/cli/parse-args.d.ts.map +1 -1
  42. package/dist/cli/parse-args.js +64 -17
  43. package/dist/cli/registry.d.ts +22 -0
  44. package/dist/cli/registry.d.ts.map +1 -1
  45. package/dist/components/pr-env-ports.d.ts +29 -0
  46. package/dist/components/pr-env-ports.d.ts.map +1 -0
  47. package/dist/components/pr-env-ports.js +77 -0
  48. package/dist/components/pr-env-run.d.ts +5 -21
  49. package/dist/components/pr-env-run.d.ts.map +1 -1
  50. package/dist/components/pr-env-run.js +6 -70
  51. package/dist/components/pr-environment.d.ts +2 -1
  52. package/dist/components/pr-environment.d.ts.map +1 -1
  53. package/dist/components/pr-environment.js +1 -1
  54. package/dist/config-environments.d.ts +92 -0
  55. package/dist/config-environments.d.ts.map +1 -0
  56. package/dist/config-environments.js +102 -0
  57. package/dist/config.d.ts +24 -84
  58. package/dist/config.d.ts.map +1 -1
  59. package/dist/config.js +9 -96
  60. package/dist/graph-detail.d.ts.map +1 -1
  61. package/dist/graph-detail.js +15 -3
  62. package/dist/graph-effective.d.ts +33 -2
  63. package/dist/graph-effective.d.ts.map +1 -1
  64. package/dist/graph-effective.js +215 -68
  65. package/dist/graph-ir.d.ts +23 -0
  66. package/dist/graph-ir.d.ts.map +1 -1
  67. package/dist/graph-ir.js +130 -0
  68. package/dist/graph-sub-template.d.ts +11 -0
  69. package/dist/graph-sub-template.d.ts.map +1 -0
  70. package/dist/graph-sub-template.js +19 -0
  71. package/dist/lexicon.d.ts +9 -0
  72. package/dist/lexicon.d.ts.map +1 -1
  73. package/dist/lifecycle/observe.d.ts +28 -0
  74. package/dist/lifecycle/observe.d.ts.map +1 -1
  75. package/dist/lifecycle/observe.js +23 -1
  76. package/dist/lint/rule.d.ts +6 -0
  77. package/dist/lint/rule.d.ts.map +1 -1
  78. package/dist/live-endpoint.d.ts +1 -1
  79. package/dist/live-endpoint.d.ts.map +1 -1
  80. package/dist/live-endpoint.js +1 -1
  81. package/dist/observation.d.ts +48 -1
  82. package/dist/observation.d.ts.map +1 -1
  83. package/dist/observation.js +21 -5
  84. package/dist/op/activities/activity-contracts.d.ts +4 -4
  85. package/dist/wave-runtime.mjs +250 -249
  86. package/dist/workspace/capabilities-contract.d.ts +66 -0
  87. package/dist/workspace/capabilities-contract.d.ts.map +1 -0
  88. package/dist/workspace/capabilities-contract.js +107 -0
  89. package/dist/workspace/capabilities.schema.json +229 -0
  90. package/dist/workspace/compose-graph.d.ts +9 -0
  91. package/dist/workspace/compose-graph.d.ts.map +1 -1
  92. package/dist/workspace/compose-graph.js +3 -1
  93. package/dist/workspace/conformance/index.d.ts +1 -1
  94. package/dist/workspace/conformance/index.d.ts.map +1 -1
  95. package/dist/workspace/conformance/index.js +39 -2
  96. package/dist/workspace/graph-cache.d.ts +8 -0
  97. package/dist/workspace/graph-cache.d.ts.map +1 -1
  98. package/dist/workspace/graph-cache.js +27 -3
  99. package/dist/workspace/graph-cli.d.ts +39 -2
  100. package/dist/workspace/graph-cli.d.ts.map +1 -1
  101. package/dist/workspace/graph-cli.js +66 -24
  102. package/dist/workspace/graph.schema.json +148 -0
  103. package/dist/workspace/kind-readers.d.ts +3 -0
  104. package/dist/workspace/kind-readers.d.ts.map +1 -1
  105. package/dist/workspace/kind-readers.js +7 -1
  106. package/dist/workspace/member-commands.d.ts +10 -1
  107. package/dist/workspace/member-commands.d.ts.map +1 -1
  108. package/dist/workspace/member-commands.js +17 -1
  109. package/dist/workspace/nested-graph.d.ts +2 -0
  110. package/dist/workspace/nested-graph.d.ts.map +1 -1
  111. package/dist/workspace/nested-graph.js +32 -1
  112. package/dist/workspace/reason-codes.d.ts +10 -0
  113. package/dist/workspace/reason-codes.d.ts.map +1 -1
  114. package/dist/workspace/reason-codes.js +12 -0
  115. package/dist/workspace/search-cli.d.ts +204 -0
  116. package/dist/workspace/search-cli.d.ts.map +1 -0
  117. package/dist/workspace/search-cli.js +466 -0
  118. package/dist/workspace/search-contract.d.ts +56 -0
  119. package/dist/workspace/search-contract.d.ts.map +1 -0
  120. package/dist/workspace/search-contract.js +70 -0
  121. package/dist/workspace/search.schema.json +822 -0
  122. package/package.json +1 -1
  123. package/src/__snapshots__/okf.test.ts.snap +10 -0
  124. package/src/capabilities/aws.paths +148 -0
  125. package/src/capabilities/base-mappings.json +122 -0
  126. package/src/capabilities/catalog.ts +230 -0
  127. package/src/capabilities/language.test.ts +191 -0
  128. package/src/capabilities/language.ts +373 -0
  129. package/src/capabilities/matcher.ts +315 -0
  130. package/src/capabilities/view-compose.test.ts +76 -0
  131. package/src/capabilities/view.ts +631 -0
  132. package/src/cli/commands/lint.ts +1 -0
  133. package/src/cli/handlers/declared-graph.ts +99 -0
  134. package/src/cli/handlers/graph.test.ts +94 -3
  135. package/src/cli/handlers/graph.ts +123 -96
  136. package/src/cli/handlers/pr-env.ts +1 -2
  137. package/src/cli/handlers/search-build-roots.test.ts +144 -0
  138. package/src/cli/handlers/search-count.test.ts +191 -0
  139. package/src/cli/handlers/search-count.ts +165 -0
  140. package/src/cli/handlers/search-json.test.ts +333 -0
  141. package/src/cli/handlers/search-live.test.ts +387 -0
  142. package/src/cli/handlers/search-paths.test.ts +235 -0
  143. package/src/cli/handlers/search.ts +1312 -166
  144. package/src/cli/main.test.ts +28 -3
  145. package/src/cli/main.ts +23 -3
  146. package/src/cli/mcp/server.test.ts +3 -3
  147. package/src/cli/mcp/server.ts +3 -0
  148. package/src/cli/mcp/tools/capabilities.ts +32 -0
  149. package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
  150. package/src/cli/mcp/workspace-tools.ts +47 -2
  151. package/src/cli/parse-args.ts +52 -13
  152. package/src/cli/registry.ts +22 -0
  153. package/src/components/pr-env-ports.ts +89 -0
  154. package/src/components/pr-env-run-bundle.test.ts +54 -0
  155. package/src/components/pr-env-run.ts +5 -76
  156. package/src/components/pr-environment.ts +2 -1
  157. package/src/config-environments.ts +133 -0
  158. package/src/config.ts +37 -124
  159. package/src/graph-detail.ts +15 -3
  160. package/src/graph-effective.ts +226 -75
  161. package/src/graph-ir.test.ts +163 -0
  162. package/src/graph-ir.ts +147 -0
  163. package/src/graph-sub-template.ts +22 -0
  164. package/src/lexicon.ts +10 -0
  165. package/src/lifecycle/observe.test.ts +27 -1
  166. package/src/lifecycle/observe.ts +43 -1
  167. package/src/lint/rule.ts +6 -0
  168. package/src/live-endpoint.ts +1 -1
  169. package/src/observation.test.ts +25 -0
  170. package/src/observation.ts +69 -5
  171. package/src/workspace/capabilities-contract.test.ts +88 -0
  172. package/src/workspace/capabilities-contract.ts +132 -0
  173. package/src/workspace/capabilities.schema.json +229 -0
  174. package/src/workspace/compose-graph.ts +10 -1
  175. package/src/workspace/conformance/conformance.e2e.test.ts +14 -1
  176. package/src/workspace/conformance/index.ts +31 -2
  177. package/src/workspace/graph-cache.ts +27 -3
  178. package/src/workspace/graph-cli.ts +96 -24
  179. package/src/workspace/graph.schema.json +148 -0
  180. package/src/workspace/kind-readers.e2e.test.ts +28 -0
  181. package/src/workspace/kind-readers.test.ts +1 -1
  182. package/src/workspace/kind-readers.ts +7 -1
  183. package/src/workspace/member-commands.ts +22 -1
  184. package/src/workspace/nested-graph.ts +32 -1
  185. package/src/workspace/reason-codes.test.ts +7 -0
  186. package/src/workspace/reason-codes.ts +12 -0
  187. package/src/workspace/search-cli.e2e.test.ts +305 -0
  188. package/src/workspace/search-cli.ts +591 -0
  189. package/src/workspace/search-contract.ts +95 -0
  190. package/src/workspace/search.schema.json +822 -0
@@ -0,0 +1,822 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://intentius.io/chant/schemas/workspace/search/v1/search.schema.json",
4
+ "title": "chant search output",
5
+ "description": "What `chant search --json` and `chant workspace search --json` print, version 1 of the read contract (#4374, ws-017). Plain `chant search` answers over one project. `chant workspace search` runs that same search in every chant member, under the member's own chant (ws-021), and composes the answers with the `<member>/<id>` ids `chant workspace graph` gives the same nodes; each member is searched alone, so no path crosses from one member into another, except for a query that names a capability (`cap:`, `->[cap=...]`, #4375): its rules run once, under the workspace's chant, over the graph `chant workspace graph` composes, and a path may cross wherever that graph has an edge. A result lists `matches`; with `--count-by` it lists `groups` and `total` instead; a refusal lists `error` and exits 1. Readers ignore fields they do not know; a field is only ever added within a version. The error and reason codes are closed lists from the one list of `reason-codes.ts`. Contract version 1 is written by chant 0.81.0 and newer; this document is written by chant 0.124.46 and newer, and an older `search --json` has no `contract` field.",
6
+ "oneOf": [
7
+ {
8
+ "$ref": "#/$defs/result"
9
+ },
10
+ {
11
+ "$ref": "#/$defs/counts"
12
+ },
13
+ {
14
+ "$ref": "#/$defs/failure"
15
+ }
16
+ ],
17
+ "$defs": {
18
+ "result": {
19
+ "description": "The rows that matched. Exit 0, or 1 when a live read failed, `--fail-on-drift` found drift, or in the workspace form a member failed.",
20
+ "type": "object",
21
+ "required": [
22
+ "$schema",
23
+ "contract",
24
+ "chant",
25
+ "query",
26
+ "source",
27
+ "at",
28
+ "matches"
29
+ ],
30
+ "properties": {
31
+ "$schema": {
32
+ "const": "https://intentius.io/chant/schemas/workspace/search/v1/search.schema.json"
33
+ },
34
+ "contract": {
35
+ "const": 1
36
+ },
37
+ "chant": {
38
+ "type": "string",
39
+ "description": "The version of the chant that wrote the document."
40
+ },
41
+ "query": {
42
+ "type": "string",
43
+ "description": "The query as given, trimmed."
44
+ },
45
+ "source": {
46
+ "$ref": "#/$defs/source"
47
+ },
48
+ "at": {
49
+ "type": [
50
+ "string",
51
+ "null"
52
+ ],
53
+ "description": "The full commit id of the source searched (`workspace search --at <rev>`), or null for the working tree. Plain `chant search` reads the working tree, so it is always null there. This is the git-revision axis; the snapshot axis is `source.snapshot`."
54
+ },
55
+ "workspace": {
56
+ "$ref": "#/$defs/workspace"
57
+ },
58
+ "members": {
59
+ "type": "array",
60
+ "items": {
61
+ "$ref": "#/$defs/member"
62
+ },
63
+ "description": "`chant workspace search` only: every member the search covers, in declaration order, with its own answer or the reason it has none."
64
+ },
65
+ "provenance": {
66
+ "type": "string",
67
+ "description": "Plain `chant search`: the provenance line the text prints after the rows, without its leading dash. In the workspace form each member carries its own."
68
+ },
69
+ "plannedCreates": {
70
+ "type": "integer",
71
+ "minimum": 1,
72
+ "description": "Plain `chant search`, `--live` or `--snapshot` only: present when every match is a planned create (an absent entity carrying plan attributes, #4372), with how many. The provenance line says \"N planned creates, none bound yet\" instead of \"returned no bound resources\". Absent for a real empty read, a failed read, or any answer with a match that is not a planned create."
73
+ },
74
+ "liveFailures": {
75
+ "type": "array",
76
+ "items": {
77
+ "type": "string"
78
+ },
79
+ "description": "Plain `chant search`: the lexicons whose live read failed, with why. Exit 1. In the workspace form each member carries its own."
80
+ },
81
+ "drift": {
82
+ "$ref": "#/$defs/drift"
83
+ },
84
+ "matches": {
85
+ "type": "array",
86
+ "items": {
87
+ "$ref": "#/$defs/match"
88
+ },
89
+ "description": "The matched nodes. In the workspace form, sorted by id."
90
+ },
91
+ "explain": {
92
+ "$ref": "#/$defs/explain"
93
+ },
94
+ "countBy": false,
95
+ "groups": false,
96
+ "error": false,
97
+ "capabilities": {
98
+ "type": "array",
99
+ "description": "Present when the query names a capability (#4375): each one, the observation its facts were derived from, and what it does not evaluate.",
100
+ "items": {
101
+ "type": "object",
102
+ "required": [
103
+ "name",
104
+ "source",
105
+ "notEvaluated"
106
+ ],
107
+ "properties": {
108
+ "name": {
109
+ "type": "string"
110
+ },
111
+ "source": {
112
+ "enum": [
113
+ "declared",
114
+ "live",
115
+ "snapshot"
116
+ ]
117
+ },
118
+ "notEvaluated": {
119
+ "type": "array",
120
+ "items": {
121
+ "type": "string"
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ },
129
+ "counts": {
130
+ "description": "`--count-by` (#4360): the matched set grouped, in place of the rows. In the workspace form, `groups` adds the members' groups up by name, except that a `module` group is prefixed with its member (`<member>/<module>`), since a module in two members is two modules.",
131
+ "type": "object",
132
+ "required": [
133
+ "$schema",
134
+ "contract",
135
+ "chant",
136
+ "query",
137
+ "source",
138
+ "at",
139
+ "countBy",
140
+ "groups",
141
+ "total"
142
+ ],
143
+ "properties": {
144
+ "$schema": {
145
+ "const": "https://intentius.io/chant/schemas/workspace/search/v1/search.schema.json"
146
+ },
147
+ "contract": {
148
+ "const": 1
149
+ },
150
+ "chant": {
151
+ "type": "string",
152
+ "description": "The version of the chant that wrote the document."
153
+ },
154
+ "query": {
155
+ "type": "string",
156
+ "description": "The query as given, trimmed."
157
+ },
158
+ "source": {
159
+ "$ref": "#/$defs/source"
160
+ },
161
+ "at": {
162
+ "type": [
163
+ "string",
164
+ "null"
165
+ ],
166
+ "description": "The full commit id of the source searched (`workspace search --at <rev>`), or null for the working tree. Plain `chant search` reads the working tree, so it is always null there. This is the git-revision axis; the snapshot axis is `source.snapshot`."
167
+ },
168
+ "workspace": {
169
+ "$ref": "#/$defs/workspace"
170
+ },
171
+ "members": {
172
+ "type": "array",
173
+ "items": {
174
+ "$ref": "#/$defs/member"
175
+ },
176
+ "description": "`chant workspace search` only: every member the search covers, in declaration order, with its own answer or the reason it has none."
177
+ },
178
+ "provenance": {
179
+ "type": "string",
180
+ "description": "Plain `chant search`: the provenance line the text prints after the rows, without its leading dash. In the workspace form each member carries its own."
181
+ },
182
+ "liveFailures": {
183
+ "type": "array",
184
+ "items": {
185
+ "type": "string"
186
+ },
187
+ "description": "Plain `chant search`: the lexicons whose live read failed, with why. Exit 1. In the workspace form each member carries its own."
188
+ },
189
+ "drift": {
190
+ "$ref": "#/$defs/drift"
191
+ },
192
+ "countBy": {
193
+ "type": "string",
194
+ "description": "`kind`, `module` or `attr:<name>`."
195
+ },
196
+ "groups": {
197
+ "$ref": "#/$defs/groups"
198
+ },
199
+ "total": {
200
+ "type": "integer",
201
+ "minimum": 0,
202
+ "description": "The number of matches, the sum of the groups' counts."
203
+ },
204
+ "matches": false,
205
+ "error": false
206
+ }
207
+ },
208
+ "failure": {
209
+ "description": "The search was refused before any answer: the query or flags, the project's environment, snapshot or build, or in the workspace form the declaration or `--at`. Exit 1.",
210
+ "type": "object",
211
+ "required": [
212
+ "$schema",
213
+ "contract",
214
+ "chant",
215
+ "query",
216
+ "error"
217
+ ],
218
+ "properties": {
219
+ "$schema": {
220
+ "const": "https://intentius.io/chant/schemas/workspace/search/v1/search.schema.json"
221
+ },
222
+ "contract": {
223
+ "const": 1
224
+ },
225
+ "chant": {
226
+ "type": "string",
227
+ "description": "The version of the chant that wrote the document."
228
+ },
229
+ "query": {
230
+ "type": "string"
231
+ },
232
+ "error": {
233
+ "type": "object",
234
+ "required": [
235
+ "code",
236
+ "message"
237
+ ],
238
+ "properties": {
239
+ "code": {
240
+ "enum": [
241
+ "declaration-missing",
242
+ "declaration-ambiguous",
243
+ "declaration-unparseable",
244
+ "declaration-invalid",
245
+ "placement-invalid",
246
+ "reader-too-old",
247
+ "root-chant-required",
248
+ "not-a-git-repository",
249
+ "revision-unknown",
250
+ "live-at-revision",
251
+ "snapshot-at-revision",
252
+ "query-invalid",
253
+ "usage-invalid",
254
+ "environment-unknown",
255
+ "snapshot-unavailable",
256
+ "build-failed"
257
+ ]
258
+ },
259
+ "message": {
260
+ "type": "string"
261
+ },
262
+ "hint": {
263
+ "type": "string",
264
+ "description": "What to do instead, as stderr prints it after the error. `revision-unknown` from `workspace search --at` names `--snapshot` here."
265
+ }
266
+ }
267
+ },
268
+ "matches": false,
269
+ "groups": false,
270
+ "members": false
271
+ }
272
+ },
273
+ "workspace": {
274
+ "description": "The workspace searched, or for plain `chant search` the one the project belongs to, when it belongs to one (ws-016).",
275
+ "type": "object",
276
+ "required": [
277
+ "name",
278
+ "root"
279
+ ],
280
+ "properties": {
281
+ "name": {
282
+ "type": "string",
283
+ "description": "The declaration's name."
284
+ },
285
+ "root": {
286
+ "type": "string",
287
+ "description": "The workspace root relative to the git root, \".\" for the git root itself."
288
+ }
289
+ }
290
+ },
291
+ "source": {
292
+ "description": "Which observation answered. `declared` is the source graph; `live` reads the account now; `snapshot` replays a recorded lifecycle snapshot. In the workspace form the top-level source names the axis asked for, and each member's source names the snapshot commit it replayed.",
293
+ "type": "object",
294
+ "required": [
295
+ "kind"
296
+ ],
297
+ "properties": {
298
+ "kind": {
299
+ "enum": [
300
+ "declared",
301
+ "live",
302
+ "snapshot"
303
+ ]
304
+ },
305
+ "env": {
306
+ "type": "string",
307
+ "description": "The environment, for `live` and `snapshot`."
308
+ },
309
+ "snapshot": {
310
+ "type": "string",
311
+ "description": "The snapshot ref asked for with `--snapshot` (or plain search's `--at`), such as `latest`."
312
+ },
313
+ "commit": {
314
+ "type": "string",
315
+ "description": "The snapshot commit replayed."
316
+ },
317
+ "timestamp": {
318
+ "type": "string",
319
+ "description": "When that snapshot was taken."
320
+ },
321
+ "depth": {
322
+ "enum": [
323
+ "plan",
324
+ "live+plan",
325
+ "mixed"
326
+ ],
327
+ "description": "`live` only, present when the plan read (CHANT_TERRAFORM_OBSERVE=plan) answered at least one bound match (#4384): `plan` or `live+plan` when every read match came that way, `mixed` when the matches were read at different depths (see `reads`). Absent for a plain live or state answer."
328
+ },
329
+ "reads": {
330
+ "type": "array",
331
+ "items": {
332
+ "enum": [
333
+ "live",
334
+ "state",
335
+ "plan",
336
+ "live+plan"
337
+ ]
338
+ },
339
+ "description": "`live` only, with `depth` or `planFellBackTo`: the distinct reads that answered the bound matches, sorted. These are the lexicon's per-entity `sources` values (#2267)."
340
+ },
341
+ "planFellBackTo": {
342
+ "enum": [
343
+ "state",
344
+ "live",
345
+ "declared"
346
+ ],
347
+ "description": "`live` only: the plan read was asked for and failed, and this read answered instead. `declared` means no read answered and the rows are unobserved."
348
+ }
349
+ }
350
+ },
351
+ "match": {
352
+ "type": "object",
353
+ "required": [
354
+ "id",
355
+ "displayId",
356
+ "paths"
357
+ ],
358
+ "properties": {
359
+ "id": {
360
+ "type": "string",
361
+ "description": "The graph's full id: stack-qualified (`stack::name`) where the graph qualifies it, and in the workspace form `<member>/<id>`, as `chant workspace graph` prints the same node."
362
+ },
363
+ "member": {
364
+ "type": "string",
365
+ "description": "Workspace form: the member the row came from."
366
+ },
367
+ "displayId": {
368
+ "type": "string",
369
+ "description": "The bare name the text row prints."
370
+ },
371
+ "kind": {
372
+ "type": "string",
373
+ "description": "The node's IR kind."
374
+ },
375
+ "physicalId": {
376
+ "type": "string"
377
+ },
378
+ "unobserved": {
379
+ "type": "string",
380
+ "description": "Why a live or replayed read has no observation of the node, such as `read-failed`."
381
+ },
382
+ "show": {
383
+ "type": "object",
384
+ "description": "The `--show` attributes the node carries, under the names the graph spells them with."
385
+ },
386
+ "paths": {
387
+ "type": "array",
388
+ "items": {
389
+ "$ref": "#/$defs/path"
390
+ },
391
+ "description": "One per positive edge term and cap: term the node matched through. Empty when the query has none."
392
+ }
393
+ }
394
+ },
395
+ "path": {
396
+ "type": "object",
397
+ "required": [
398
+ "term",
399
+ "dir",
400
+ "hops"
401
+ ],
402
+ "properties": {
403
+ "term": {
404
+ "type": "string",
405
+ "description": "The edge term, or the cap: term, as the grammar spells it."
406
+ },
407
+ "dir": {
408
+ "enum": [
409
+ "out",
410
+ "in"
411
+ ]
412
+ },
413
+ "hops": {
414
+ "type": "array",
415
+ "items": {
416
+ "type": "object",
417
+ "required": [
418
+ "from",
419
+ "to"
420
+ ],
421
+ "properties": {
422
+ "from": {
423
+ "type": "string",
424
+ "description": "The edge's consumer end, a full id (`<member>/<id>` in the workspace form)."
425
+ },
426
+ "fromAttr": {
427
+ "type": "string"
428
+ },
429
+ "to": {
430
+ "type": "string",
431
+ "description": "The edge's producer end."
432
+ },
433
+ "toAttr": {
434
+ "type": "string"
435
+ },
436
+ "edge": {
437
+ "type": "string",
438
+ "description": "On a capability's path (#4375): the name the capability rules give the edge, such as statement or resource. Its from or to may be a node inside a resource, `<id>#<attr>[n]...`."
439
+ }
440
+ }
441
+ },
442
+ "description": "In walk order from the match. Each hop keeps the edge's own direction."
443
+ },
444
+ "because": {
445
+ "type": "array",
446
+ "description": "On a cap: term (#4375): each set the match relied on, with the path that proved it.",
447
+ "items": {
448
+ "type": "object",
449
+ "required": [
450
+ "capability",
451
+ "id",
452
+ "hops"
453
+ ],
454
+ "properties": {
455
+ "capability": {
456
+ "type": "string"
457
+ },
458
+ "id": {
459
+ "type": "string"
460
+ },
461
+ "hops": {
462
+ "type": "array",
463
+ "items": {
464
+ "type": "object"
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ },
472
+ "explain": {
473
+ "description": "`--explain`: the universe the query ran over and why near misses were left out.",
474
+ "type": "object",
475
+ "required": [
476
+ "universe",
477
+ "evidence",
478
+ "nearMisses",
479
+ "moreExcluded"
480
+ ],
481
+ "properties": {
482
+ "universe": {
483
+ "type": "object",
484
+ "required": [
485
+ "matched",
486
+ "of",
487
+ "kinds"
488
+ ],
489
+ "properties": {
490
+ "matched": {
491
+ "type": "integer",
492
+ "minimum": 0
493
+ },
494
+ "of": {
495
+ "type": "integer",
496
+ "minimum": 0
497
+ },
498
+ "kinds": {
499
+ "type": "array",
500
+ "items": {
501
+ "type": "string"
502
+ }
503
+ }
504
+ }
505
+ },
506
+ "evidence": {
507
+ "type": "array",
508
+ "items": {
509
+ "type": "object",
510
+ "required": [
511
+ "id",
512
+ "attr",
513
+ "via"
514
+ ],
515
+ "properties": {
516
+ "id": {
517
+ "type": "string"
518
+ },
519
+ "attr": {
520
+ "type": "string"
521
+ },
522
+ "via": {
523
+ "type": "string"
524
+ }
525
+ }
526
+ }
527
+ },
528
+ "nearMisses": {
529
+ "type": "array",
530
+ "items": {
531
+ "type": "object",
532
+ "required": [
533
+ "id"
534
+ ],
535
+ "properties": {
536
+ "id": {
537
+ "type": "string"
538
+ },
539
+ "fails": {
540
+ "type": "string",
541
+ "description": "The first term the node fails."
542
+ }
543
+ }
544
+ }
545
+ },
546
+ "moreExcluded": {
547
+ "type": "integer",
548
+ "minimum": 0
549
+ }
550
+ }
551
+ },
552
+ "drift": {
553
+ "description": "`--check-live` or `--check-snapshot`: the matched rows checked against the observation the answer did not use. `unavailable` alone when there was nothing to check against.",
554
+ "type": "object",
555
+ "required": [
556
+ "against"
557
+ ],
558
+ "properties": {
559
+ "against": {
560
+ "enum": [
561
+ "live",
562
+ "snapshot"
563
+ ]
564
+ },
565
+ "checked": {
566
+ "type": "integer",
567
+ "minimum": 0
568
+ },
569
+ "count": {
570
+ "type": "integer",
571
+ "minimum": 0
572
+ },
573
+ "missing": {
574
+ "type": "array",
575
+ "items": {
576
+ "type": "string"
577
+ }
578
+ },
579
+ "orphan": {
580
+ "type": "array",
581
+ "items": {
582
+ "type": "string"
583
+ }
584
+ },
585
+ "disappeared": {
586
+ "type": "array",
587
+ "items": {
588
+ "type": "string"
589
+ }
590
+ },
591
+ "drifted": {
592
+ "type": "array",
593
+ "items": {
594
+ "type": "object",
595
+ "required": [
596
+ "id",
597
+ "path"
598
+ ],
599
+ "properties": {
600
+ "id": {
601
+ "type": "string"
602
+ },
603
+ "path": {
604
+ "type": "string"
605
+ },
606
+ "old": {},
607
+ "new": {}
608
+ }
609
+ }
610
+ },
611
+ "newlyObserved": {
612
+ "type": "array",
613
+ "items": {
614
+ "type": "string"
615
+ }
616
+ },
617
+ "runtimeChildren": {
618
+ "type": "array",
619
+ "items": {
620
+ "type": "object",
621
+ "required": [
622
+ "id",
623
+ "type",
624
+ "owner"
625
+ ],
626
+ "properties": {
627
+ "id": {
628
+ "type": "string"
629
+ },
630
+ "type": {
631
+ "type": "string"
632
+ },
633
+ "owner": {
634
+ "type": "string"
635
+ }
636
+ }
637
+ }
638
+ },
639
+ "unobserved": {
640
+ "type": "array",
641
+ "items": {
642
+ "type": "object",
643
+ "required": [
644
+ "id",
645
+ "reason"
646
+ ],
647
+ "properties": {
648
+ "id": {
649
+ "type": "string"
650
+ },
651
+ "type": {
652
+ "type": "string"
653
+ },
654
+ "reason": {
655
+ "type": "string"
656
+ },
657
+ "detail": {
658
+ "type": "string"
659
+ }
660
+ }
661
+ }
662
+ },
663
+ "depth": {
664
+ "type": "string"
665
+ },
666
+ "unavailable": {
667
+ "type": "string"
668
+ }
669
+ }
670
+ },
671
+ "groups": {
672
+ "type": "array",
673
+ "description": "Each group and its count, highest count first, then by name. A node with no value for the grouped dimension counts under `(none)`.",
674
+ "items": {
675
+ "type": "object",
676
+ "required": [
677
+ "group",
678
+ "count"
679
+ ],
680
+ "properties": {
681
+ "group": {
682
+ "type": "string"
683
+ },
684
+ "count": {
685
+ "type": "integer",
686
+ "minimum": 0
687
+ },
688
+ "ids": {
689
+ "type": "array",
690
+ "items": {
691
+ "type": "string"
692
+ },
693
+ "description": "The ids of the matches in the group, in match order (#4382); `count` is its length. In the workspace form they are `<member>/<id>`, and a merged group lists them only when every member that counted into it listed its own (an older member chant lists none). Written by chant 0.124.46 and newer."
694
+ }
695
+ }
696
+ }
697
+ },
698
+ "member": {
699
+ "type": "object",
700
+ "required": [
701
+ "name",
702
+ "dir",
703
+ "kind",
704
+ "status",
705
+ "reason",
706
+ "chant",
707
+ "stamp"
708
+ ],
709
+ "properties": {
710
+ "name": {
711
+ "type": "string"
712
+ },
713
+ "dir": {
714
+ "type": "string",
715
+ "description": "Relative to the workspace root, with / separators; \".\" is the root member."
716
+ },
717
+ "kind": {
718
+ "type": "string"
719
+ },
720
+ "status": {
721
+ "enum": [
722
+ "searched",
723
+ "skipped",
724
+ "failed"
725
+ ],
726
+ "description": "`searched` when the member answered; `skipped` when the workspace commands don't run its kind; `failed` when it has no answer. A failed member is never reported as zero matches."
727
+ },
728
+ "reason": {
729
+ "oneOf": [
730
+ {
731
+ "type": "null"
732
+ },
733
+ {
734
+ "type": "object",
735
+ "required": [
736
+ "code",
737
+ "message"
738
+ ],
739
+ "properties": {
740
+ "code": {
741
+ "enum": [
742
+ "kind-not-run",
743
+ "dir-missing",
744
+ "unknown-kind",
745
+ "kind-probe-failed",
746
+ "command-failed",
747
+ "output-unreadable",
748
+ "member-chant-too-old",
749
+ "query-invalid",
750
+ "usage-invalid",
751
+ "environment-unknown",
752
+ "snapshot-unavailable",
753
+ "build-failed"
754
+ ],
755
+ "description": "A member that ran and refused carries its own search refusal code. `member-chant-too-old` is a member whose chant prints no search document of the contract, or, for a query with a capability term, no capability view (#4378)."
756
+ },
757
+ "message": {
758
+ "type": "string"
759
+ }
760
+ }
761
+ }
762
+ ]
763
+ },
764
+ "chant": {
765
+ "type": [
766
+ "string",
767
+ "null"
768
+ ],
769
+ "description": "The chant version the member's toolchain reported, or null when a chant older than member-run read it, or the member did not run."
770
+ },
771
+ "stamp": {
772
+ "type": [
773
+ "string",
774
+ "null"
775
+ ],
776
+ "description": "The member's stamp by the rule of ws-059 (the reference's Member stamps): sha256 over its files and install state, or over the commit id with --at. null when none could be taken. Search is never served from the graph cache."
777
+ },
778
+ "alone": {
779
+ "const": true,
780
+ "description": "On a searched member: its terms and paths saw only its own graph. Paths that cross members are not walked."
781
+ },
782
+ "source": {
783
+ "$ref": "#/$defs/source"
784
+ },
785
+ "matches": {
786
+ "type": "array",
787
+ "items": {
788
+ "type": "string"
789
+ },
790
+ "description": "The member's matched ids, `<member>/<id>`, each a row of the top-level `matches`."
791
+ },
792
+ "groups": {
793
+ "$ref": "#/$defs/groups"
794
+ },
795
+ "total": {
796
+ "type": "integer",
797
+ "minimum": 0
798
+ },
799
+ "provenance": {
800
+ "type": "string"
801
+ },
802
+ "plannedCreates": {
803
+ "type": "integer",
804
+ "minimum": 1,
805
+ "description": "As in the result document: present when every counted match is a planned create."
806
+ },
807
+ "liveFailures": {
808
+ "type": "array",
809
+ "items": {
810
+ "type": "string"
811
+ }
812
+ },
813
+ "explain": {
814
+ "$ref": "#/$defs/explain"
815
+ },
816
+ "drift": {
817
+ "$ref": "#/$defs/drift"
818
+ }
819
+ }
820
+ }
821
+ }
822
+ }