@shipeasy/openapi 1.5.0 → 2.1.0
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.
- package/README.md +37 -0
- package/dist/chunk-EPLLHLZN.js +1616 -0
- package/dist/chunk-EPLLHLZN.js.map +1 -0
- package/dist/chunk-SPH5HWCD.js +3326 -0
- package/dist/chunk-SPH5HWCD.js.map +1 -0
- package/dist/client-pVkoo3Bf.d.ts +11186 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +215 -0
- package/dist/client.js.map +1 -0
- package/dist/custom.d.ts +64 -0
- package/dist/custom.js +292 -0
- package/dist/custom.js.map +1 -0
- package/dist/index.d.ts +29 -17
- package/dist/index.js +253 -2458
- package/dist/index.js.map +1 -0
- package/dist/node-context.d.ts +85 -0
- package/dist/node-context.js +110 -0
- package/dist/node-context.js.map +1 -0
- package/dist/schemas.d.ts +7920 -0
- package/dist/schemas.js +1083 -0
- package/dist/schemas.js.map +1 -0
- package/openapi.json +15297 -3044
- package/openapi.yaml +13979 -0
- package/package.json +37 -21
- package/spec/components/errors.yaml +53 -0
- package/spec/components/parameters.yaml +24 -0
- package/spec/components/responses.yaml +107 -0
- package/spec/components/schemas/alert-rules.yaml +175 -0
- package/spec/components/schemas/attributes.yaml +157 -0
- package/spec/components/schemas/common.yaml +87 -0
- package/spec/components/schemas/configs.yaml +371 -0
- package/spec/components/schemas/connectors.yaml +593 -0
- package/spec/components/schemas/errors-api.yaml +209 -0
- package/spec/components/schemas/events.yaml +321 -0
- package/spec/components/schemas/experiments.yaml +865 -0
- package/spec/components/schemas/gate-templates.yaml +198 -0
- package/spec/components/schemas/gates.yaml +890 -0
- package/spec/components/schemas/i18n.yaml +478 -0
- package/spec/components/schemas/keys.yaml +186 -0
- package/spec/components/schemas/killswitches.yaml +309 -0
- package/spec/components/schemas/metrics.yaml +547 -0
- package/spec/components/schemas/ops.yaml +1011 -0
- package/spec/components/schemas/projects.yaml +222 -0
- package/spec/components/schemas/search.yaml +46 -0
- package/spec/components/schemas/universes.yaml +127 -0
- package/spec/openapi.yaml +348 -0
- package/spec/paths/alert-rules.yaml +250 -0
- package/spec/paths/attributes.yaml +261 -0
- package/spec/paths/configs.yaml +744 -0
- package/spec/paths/connectors.yaml +748 -0
- package/spec/paths/errors.yaml +382 -0
- package/spec/paths/events.yaml +366 -0
- package/spec/paths/experiments.yaml +777 -0
- package/spec/paths/gate-templates.yaml +263 -0
- package/spec/paths/gates.yaml +451 -0
- package/spec/paths/i18n.yaml +544 -0
- package/spec/paths/keys.yaml +181 -0
- package/spec/paths/killswitches.yaml +557 -0
- package/spec/paths/metrics.yaml +302 -0
- package/spec/paths/ops.yaml +446 -0
- package/spec/paths/projects.yaml +210 -0
- package/spec/paths/search.yaml +62 -0
- package/spec/paths/universes.yaml +247 -0
- package/dist/resources/alert-rules.d.ts +0 -50
- package/dist/resources/alert-rules.js +0 -75
- package/dist/resources/configs.d.ts +0 -681
- package/dist/resources/configs.js +0 -509
- package/dist/resources/experiments.d.ts +0 -849
- package/dist/resources/experiments.js +0 -707
- package/dist/resources/gates.d.ts +0 -808
- package/dist/resources/gates.js +0 -522
- package/dist/resources/index.d.ts +0 -2749
- package/dist/resources/index.js +0 -2391
- package/dist/resources/killswitches.d.ts +0 -436
- package/dist/resources/killswitches.js +0 -514
- package/dist/resources/universes.d.ts +0 -185
- package/dist/resources/universes.js +0 -234
- package/dist/schemas/alert-rules.d.ts +0 -65
- package/dist/schemas/alert-rules.js +0 -37
- package/dist/schemas/configs.d.ts +0 -154
- package/dist/schemas/configs.js +0 -134
- package/dist/schemas/constants.d.ts +0 -6
- package/dist/schemas/constants.js +0 -7
- package/dist/schemas/experiments.d.ts +0 -229
- package/dist/schemas/experiments.js +0 -221
- package/dist/schemas/folder.d.ts +0 -10
- package/dist/schemas/folder.js +0 -8
- package/dist/schemas/gates.d.ts +0 -386
- package/dist/schemas/gates.js +0 -190
- package/dist/schemas/index.d.ts +0 -11
- package/dist/schemas/index.js +0 -762
- package/dist/schemas/killswitches.d.ts +0 -110
- package/dist/schemas/killswitches.js +0 -226
- package/dist/schemas/metric-name.d.ts +0 -5
- package/dist/schemas/metric-name.js +0 -6
- package/dist/schemas/pagination.d.ts +0 -37
- package/dist/schemas/pagination.js +0 -44
- package/dist/schemas/universes.d.ts +0 -35
- package/dist/schemas/universes.js +0 -55
- package/dist/transport.d.ts +0 -30
- package/dist/transport.js +0 -44
|
@@ -0,0 +1,1011 @@
|
|
|
1
|
+
ListOpsItemsResponse:
|
|
2
|
+
type: array
|
|
3
|
+
items:
|
|
4
|
+
type: object
|
|
5
|
+
properties:
|
|
6
|
+
id:
|
|
7
|
+
type: string
|
|
8
|
+
description: Stable opaque item id.
|
|
9
|
+
number:
|
|
10
|
+
anyOf:
|
|
11
|
+
- type: number
|
|
12
|
+
- type: "null"
|
|
13
|
+
description: Per-project item number (the `#7` handle), or `null` if unnumbered.
|
|
14
|
+
type:
|
|
15
|
+
type: string
|
|
16
|
+
enum:
|
|
17
|
+
- bug
|
|
18
|
+
- feature_request
|
|
19
|
+
- error
|
|
20
|
+
- alert
|
|
21
|
+
- measure_plan
|
|
22
|
+
description: "Queue item type. `bug` and `feature_request` are user-fileable; `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform (a tracked production error, a metric-threshold alert, and an assistant-proposed measurement plan respectively)."
|
|
23
|
+
title:
|
|
24
|
+
type: string
|
|
25
|
+
description: One-line item title.
|
|
26
|
+
status:
|
|
27
|
+
$ref: "#/OpsItemStatus"
|
|
28
|
+
priority:
|
|
29
|
+
anyOf:
|
|
30
|
+
- $ref: "#/OpsItemPriority"
|
|
31
|
+
- type: "null"
|
|
32
|
+
description: Triage priority, or `null` if not yet set.
|
|
33
|
+
sourceRef:
|
|
34
|
+
description: Source reference for auto-filed tickets (e.g. an error fingerprint).
|
|
35
|
+
anyOf:
|
|
36
|
+
- type: string
|
|
37
|
+
- type: "null"
|
|
38
|
+
createdAt:
|
|
39
|
+
type: string
|
|
40
|
+
description: ISO-8601 creation timestamp.
|
|
41
|
+
required:
|
|
42
|
+
- id
|
|
43
|
+
- number
|
|
44
|
+
- type
|
|
45
|
+
- title
|
|
46
|
+
- status
|
|
47
|
+
- priority
|
|
48
|
+
- createdAt
|
|
49
|
+
additionalProperties: {}
|
|
50
|
+
description: One queue item — any type.
|
|
51
|
+
description: A page of queue items, newest first.
|
|
52
|
+
GetOpsItemResponse:
|
|
53
|
+
type: object
|
|
54
|
+
properties:
|
|
55
|
+
id:
|
|
56
|
+
type: string
|
|
57
|
+
description: Stable opaque item id.
|
|
58
|
+
number:
|
|
59
|
+
anyOf:
|
|
60
|
+
- type: number
|
|
61
|
+
- type: "null"
|
|
62
|
+
description: Per-project item number (the `#7` handle), or `null` if unnumbered.
|
|
63
|
+
type:
|
|
64
|
+
type: string
|
|
65
|
+
enum:
|
|
66
|
+
- bug
|
|
67
|
+
- feature_request
|
|
68
|
+
- error
|
|
69
|
+
- alert
|
|
70
|
+
- measure_plan
|
|
71
|
+
description: "Queue item type. `bug` and `feature_request` are user-fileable; `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform (a tracked production error, a metric-threshold alert, and an assistant-proposed measurement plan respectively)."
|
|
72
|
+
title:
|
|
73
|
+
type: string
|
|
74
|
+
description: One-line item title (all types).
|
|
75
|
+
status:
|
|
76
|
+
$ref: "#/OpsItemStatus"
|
|
77
|
+
priority:
|
|
78
|
+
anyOf:
|
|
79
|
+
- $ref: "#/OpsItemPriority"
|
|
80
|
+
- type: "null"
|
|
81
|
+
description: Triage priority, or `null` if not yet set (all types).
|
|
82
|
+
source:
|
|
83
|
+
type: string
|
|
84
|
+
enum:
|
|
85
|
+
- team
|
|
86
|
+
- system
|
|
87
|
+
description: "How the item was filed: `team` (a human admin/teammate — bug/feature) or `system` (auto-filed — error/alert/measure_plan)."
|
|
88
|
+
sourceRef:
|
|
89
|
+
anyOf:
|
|
90
|
+
- type: string
|
|
91
|
+
- type: "null"
|
|
92
|
+
description: "Stable key of the originating record for auto-filed tickets (error fingerprint, `<alert source>:<dedupeKey>`, or measurement-plan ref); `null` for human-filed bugs/features."
|
|
93
|
+
reporterEmail:
|
|
94
|
+
anyOf:
|
|
95
|
+
- type: string
|
|
96
|
+
- type: "null"
|
|
97
|
+
description: Reporter email (bug/feature), or `null`.
|
|
98
|
+
stepsToReproduce:
|
|
99
|
+
type: string
|
|
100
|
+
description: Reproduction steps — populated for `bug`, empty string otherwise.
|
|
101
|
+
actualResult:
|
|
102
|
+
type: string
|
|
103
|
+
description: What actually happened — `bug` only, empty string otherwise.
|
|
104
|
+
expectedResult:
|
|
105
|
+
type: string
|
|
106
|
+
description: What was expected — `bug` only, empty string otherwise.
|
|
107
|
+
description:
|
|
108
|
+
type: string
|
|
109
|
+
description: Feature description — populated for `feature_request`, empty string otherwise.
|
|
110
|
+
useCase:
|
|
111
|
+
type: string
|
|
112
|
+
description: Feature use case — `feature_request` only, empty string otherwise.
|
|
113
|
+
context:
|
|
114
|
+
anyOf:
|
|
115
|
+
- $ref: "#/OpsItemContext"
|
|
116
|
+
- type: "null"
|
|
117
|
+
description: "Type-specific capture context. For `bug`/`feature_request` it carries `browser` (the auto-collected page URL / user-agent / viewport). For auto-filed tickets it carries the hydrated `error`, `alert`, or `measurePlan` block. `null` only for legacy rows with nothing captured."
|
|
118
|
+
attachments:
|
|
119
|
+
type: array
|
|
120
|
+
items:
|
|
121
|
+
$ref: "#/OpsItemAttachment"
|
|
122
|
+
description: "Files attached to the report — screenshots, recordings, logs. Populated for `bug`/`feature_request`; always an empty array for auto-filed `error`/`alert`/`measure_plan` tickets. Fetch each via its `fetchUrl` with the same admin/ops key (the download route is ops-key allow-listed)."
|
|
123
|
+
related:
|
|
124
|
+
$ref: "#/OpsItemRelated"
|
|
125
|
+
connectorData:
|
|
126
|
+
anyOf:
|
|
127
|
+
- $ref: "#/ConnectorData"
|
|
128
|
+
- type: "null"
|
|
129
|
+
description: "Per-connector linkage recorded for this item, keyed by connector provider. Populated as connectors act on the item (e.g. GitHub opens an issue, Slack posts a message); more than one provider can be present at once. `null` if no connector has touched the item."
|
|
130
|
+
notify:
|
|
131
|
+
anyOf:
|
|
132
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
133
|
+
- type: "null"
|
|
134
|
+
description: Per-item completion-notification target, or `null` (falls back to the project default).
|
|
135
|
+
createdAt:
|
|
136
|
+
type: string
|
|
137
|
+
description: ISO-8601 creation timestamp.
|
|
138
|
+
updatedAt:
|
|
139
|
+
type: string
|
|
140
|
+
description: ISO-8601 last-update timestamp.
|
|
141
|
+
required:
|
|
142
|
+
- id
|
|
143
|
+
- number
|
|
144
|
+
- type
|
|
145
|
+
- title
|
|
146
|
+
- status
|
|
147
|
+
- priority
|
|
148
|
+
- context
|
|
149
|
+
- attachments
|
|
150
|
+
- related
|
|
151
|
+
- createdAt
|
|
152
|
+
additionalProperties: {}
|
|
153
|
+
description: "One queue item, any of the five types. Shared fields apply to all; `stepsToReproduce`/`actualResult`/`expectedResult` are bug-specific, `description`/`useCase` feature-specific. The auto-collected browser fields (page URL, user-agent, viewport) live under `context.browser` for bug/feature. `context` also carries the hydrated per-type payload for auto-filed `error`/`alert`/`measure_plan` tickets, `attachments` lists any uploaded files, and `related` gives deep links to the underlying resources."
|
|
154
|
+
OpsItemContext:
|
|
155
|
+
type: object
|
|
156
|
+
properties:
|
|
157
|
+
browser:
|
|
158
|
+
$ref: "#/OpsBrowserContext"
|
|
159
|
+
error:
|
|
160
|
+
$ref: "#/OpsErrorContext"
|
|
161
|
+
alert:
|
|
162
|
+
$ref: "#/OpsAlertContext"
|
|
163
|
+
measurePlan:
|
|
164
|
+
$ref: "#/OpsMeasurePlanContext"
|
|
165
|
+
additionalProperties: {}
|
|
166
|
+
description: "Per-type capture context on a queue item. Exactly one of `browser` (bug/feature), `error`, `alert`, or `measurePlan` is populated depending on `type`; other keys (e.g. the AI dedupe block on bugs) may also be present."
|
|
167
|
+
OpsBrowserContext:
|
|
168
|
+
type: object
|
|
169
|
+
properties:
|
|
170
|
+
pageUrl:
|
|
171
|
+
anyOf:
|
|
172
|
+
- type: string
|
|
173
|
+
- type: "null"
|
|
174
|
+
description: URL of the page the report was filed from, or `null`.
|
|
175
|
+
userAgent:
|
|
176
|
+
anyOf:
|
|
177
|
+
- type: string
|
|
178
|
+
- type: "null"
|
|
179
|
+
description: Reporter's user-agent string, or `null`.
|
|
180
|
+
viewport:
|
|
181
|
+
anyOf:
|
|
182
|
+
- type: string
|
|
183
|
+
- type: "null"
|
|
184
|
+
description: "Reporter's viewport (e.g. `1280x720`), or `null`."
|
|
185
|
+
additionalProperties: {}
|
|
186
|
+
description: "Auto-collected browser environment for a `bug`/`feature_request`, captured at file time."
|
|
187
|
+
OpsErrorContext:
|
|
188
|
+
type: object
|
|
189
|
+
properties:
|
|
190
|
+
id:
|
|
191
|
+
type: string
|
|
192
|
+
description: The tracked `errors` row id (fetch full detail via `related.error`).
|
|
193
|
+
fingerprint:
|
|
194
|
+
type: string
|
|
195
|
+
description: Stable dedupe key of the tracked error.
|
|
196
|
+
causedByFingerprint:
|
|
197
|
+
anyOf:
|
|
198
|
+
- type: string
|
|
199
|
+
- type: "null"
|
|
200
|
+
description: "Fingerprint of the upstream issue this error descends from (set when the same error was reported at an inner boundary first), or `null` for a root issue."
|
|
201
|
+
errorType:
|
|
202
|
+
anyOf:
|
|
203
|
+
- type: string
|
|
204
|
+
- type: "null"
|
|
205
|
+
description: "Error class/name, e.g. `TypeError`, or `null` when the source didn't supply one."
|
|
206
|
+
message:
|
|
207
|
+
type: string
|
|
208
|
+
description: The error message.
|
|
209
|
+
subject:
|
|
210
|
+
anyOf:
|
|
211
|
+
- type: string
|
|
212
|
+
- type: "null"
|
|
213
|
+
description: "The `see()` consequence subject — the `causes_the(<subject>)` value. Grep the codebase for this to find the throw site. `null` if the error was never instrumented."
|
|
214
|
+
outcome:
|
|
215
|
+
anyOf:
|
|
216
|
+
- type: string
|
|
217
|
+
- type: "null"
|
|
218
|
+
description: "The `see()` consequence outcome — the `.to(<outcome>)` value. `null` if uninstrumented."
|
|
219
|
+
kind:
|
|
220
|
+
anyOf:
|
|
221
|
+
- type: string
|
|
222
|
+
- type: "null"
|
|
223
|
+
description: "`see()` error kind: `caught` | `uncaught` | `unhandled_rejection` | `network` | `violation`."
|
|
224
|
+
side:
|
|
225
|
+
anyOf:
|
|
226
|
+
- type: string
|
|
227
|
+
- type: "null"
|
|
228
|
+
description: "Which SDK side reported it: `client` | `server`."
|
|
229
|
+
env:
|
|
230
|
+
anyOf:
|
|
231
|
+
- type: string
|
|
232
|
+
- type: "null"
|
|
233
|
+
description: Published env the reporting SDK ran against (dev/staging/prod).
|
|
234
|
+
count:
|
|
235
|
+
type: number
|
|
236
|
+
description: Folded occurrence count for this fingerprint.
|
|
237
|
+
firstSeenAt:
|
|
238
|
+
type: string
|
|
239
|
+
description: ISO-8601 timestamp of the first occurrence.
|
|
240
|
+
lastSeenAt:
|
|
241
|
+
type: string
|
|
242
|
+
description: ISO-8601 timestamp of the most recent occurrence.
|
|
243
|
+
seenUrls:
|
|
244
|
+
type: array
|
|
245
|
+
items:
|
|
246
|
+
type: string
|
|
247
|
+
description: "Distinct, id-normalized routes this error has surfaced on (UUIDs/ids collapsed to `#`)."
|
|
248
|
+
sdkVersion:
|
|
249
|
+
anyOf:
|
|
250
|
+
- type: string
|
|
251
|
+
- type: "null"
|
|
252
|
+
description: "@shipeasy/sdk version of the latest occurrence, or `null`."
|
|
253
|
+
required:
|
|
254
|
+
- id
|
|
255
|
+
- fingerprint
|
|
256
|
+
- message
|
|
257
|
+
- count
|
|
258
|
+
- firstSeenAt
|
|
259
|
+
- lastSeenAt
|
|
260
|
+
- seenUrls
|
|
261
|
+
additionalProperties: {}
|
|
262
|
+
description: "Hydrated detail for an auto-filed `error` ticket, read from the tracked `errors` row at request time (so `count`/`lastSeenAt` reflect the latest state)."
|
|
263
|
+
OpsAlertContext:
|
|
264
|
+
type: object
|
|
265
|
+
properties:
|
|
266
|
+
source:
|
|
267
|
+
type: string
|
|
268
|
+
enum:
|
|
269
|
+
- metric_rule
|
|
270
|
+
- experiment_srm
|
|
271
|
+
- experiment_peek
|
|
272
|
+
- guardrail
|
|
273
|
+
description: What kind of alert transitioned to active.
|
|
274
|
+
dedupeKey:
|
|
275
|
+
type: string
|
|
276
|
+
description: Stable per-condition key; with `source` forms the ticket's `sourceRef`.
|
|
277
|
+
severity:
|
|
278
|
+
type: string
|
|
279
|
+
enum:
|
|
280
|
+
- danger
|
|
281
|
+
- warn
|
|
282
|
+
- info
|
|
283
|
+
description: Alert severity.
|
|
284
|
+
observedValue:
|
|
285
|
+
anyOf:
|
|
286
|
+
- type: number
|
|
287
|
+
- type: "null"
|
|
288
|
+
description: The metric value that tripped the rule, or `null`.
|
|
289
|
+
href:
|
|
290
|
+
anyOf:
|
|
291
|
+
- type: string
|
|
292
|
+
- type: "null"
|
|
293
|
+
description: Dashboard deep link to the alert, or `null`.
|
|
294
|
+
status:
|
|
295
|
+
anyOf:
|
|
296
|
+
- type: string
|
|
297
|
+
enum:
|
|
298
|
+
- active
|
|
299
|
+
- resolved
|
|
300
|
+
- dismissed
|
|
301
|
+
- type: "null"
|
|
302
|
+
description: "Current status of the underlying alert (`active` while the condition holds), or `null` if the alert row is gone."
|
|
303
|
+
activeSince:
|
|
304
|
+
anyOf:
|
|
305
|
+
- type: string
|
|
306
|
+
- type: "null"
|
|
307
|
+
description: ISO-8601 timestamp the alert became active, or `null`.
|
|
308
|
+
resolvedAt:
|
|
309
|
+
anyOf:
|
|
310
|
+
- type: string
|
|
311
|
+
- type: "null"
|
|
312
|
+
description: ISO-8601 timestamp the alert cleared, or `null` while still active.
|
|
313
|
+
rule:
|
|
314
|
+
anyOf:
|
|
315
|
+
- $ref: "#/OpsAlertRuleSummary"
|
|
316
|
+
- type: "null"
|
|
317
|
+
description: "The alert rule condition that tripped (metric-rule alerts only); `null` for SRM/peek/guardrail alerts with no rule."
|
|
318
|
+
metric:
|
|
319
|
+
anyOf:
|
|
320
|
+
- $ref: "#/OpsAlertMetricSummary"
|
|
321
|
+
- type: "null"
|
|
322
|
+
description: "The metric the alert watches, hydrated with its backing event(s); `null` if not resolvable."
|
|
323
|
+
required:
|
|
324
|
+
- source
|
|
325
|
+
- dedupeKey
|
|
326
|
+
- severity
|
|
327
|
+
additionalProperties: {}
|
|
328
|
+
description: "Hydrated detail for an auto-filed `alert` ticket, resolving the rule → metric → event chain at request time."
|
|
329
|
+
OpsAlertRuleSummary:
|
|
330
|
+
type: object
|
|
331
|
+
properties:
|
|
332
|
+
id:
|
|
333
|
+
type: string
|
|
334
|
+
description: Alert-rule id.
|
|
335
|
+
name:
|
|
336
|
+
type: string
|
|
337
|
+
description: Alert-rule name.
|
|
338
|
+
comparator:
|
|
339
|
+
type: string
|
|
340
|
+
enum:
|
|
341
|
+
- gt
|
|
342
|
+
- gte
|
|
343
|
+
- lt
|
|
344
|
+
- lte
|
|
345
|
+
description: How `observedValue` is compared to `threshold`.
|
|
346
|
+
threshold:
|
|
347
|
+
type: number
|
|
348
|
+
description: The threshold value the rule fires on.
|
|
349
|
+
windowHours:
|
|
350
|
+
type: number
|
|
351
|
+
description: Rolling evaluation window in hours.
|
|
352
|
+
required:
|
|
353
|
+
- id
|
|
354
|
+
- name
|
|
355
|
+
- comparator
|
|
356
|
+
- threshold
|
|
357
|
+
- windowHours
|
|
358
|
+
additionalProperties: {}
|
|
359
|
+
description: "The condition of a metric-rule alert."
|
|
360
|
+
OpsAlertMetricSummary:
|
|
361
|
+
type: object
|
|
362
|
+
properties:
|
|
363
|
+
id:
|
|
364
|
+
type: string
|
|
365
|
+
description: Metric id (fetch full detail via `related.metric`).
|
|
366
|
+
name:
|
|
367
|
+
type: string
|
|
368
|
+
description: Metric name.
|
|
369
|
+
events:
|
|
370
|
+
type: array
|
|
371
|
+
items:
|
|
372
|
+
type: string
|
|
373
|
+
description: "The event name(s) the metric aggregates over — one for count metrics, numerator + denominator for ratio metrics. Grep the codebase for `track('<event>')` on each to find the instrumentation feeding the metric."
|
|
374
|
+
required:
|
|
375
|
+
- id
|
|
376
|
+
- name
|
|
377
|
+
- events
|
|
378
|
+
additionalProperties: {}
|
|
379
|
+
description: "The metric an alert watches, with its backing events."
|
|
380
|
+
OpsMeasurePlanContext:
|
|
381
|
+
type: object
|
|
382
|
+
properties:
|
|
383
|
+
created:
|
|
384
|
+
type: array
|
|
385
|
+
items:
|
|
386
|
+
$ref: "#/MeasurePlanResource"
|
|
387
|
+
description: Resources the assistant already created on approval (live now) — don't recreate them.
|
|
388
|
+
pending:
|
|
389
|
+
type: array
|
|
390
|
+
items:
|
|
391
|
+
$ref: "#/MeasurePlanResource"
|
|
392
|
+
description: Resources the assistant couldn't create yet (usually a metric whose backing event isn't emitted); create these after the instrumentation lands.
|
|
393
|
+
instrumentation:
|
|
394
|
+
type: array
|
|
395
|
+
items:
|
|
396
|
+
$ref: "#/MeasurePlanStep"
|
|
397
|
+
description: The code instrumentation to implement before the metrics can collect data.
|
|
398
|
+
required:
|
|
399
|
+
- created
|
|
400
|
+
- instrumentation
|
|
401
|
+
additionalProperties: {}
|
|
402
|
+
description: "An assistant-proposed measurement plan: what it already built, what it still needs, and the event instrumentation you implement."
|
|
403
|
+
MeasurePlanResource:
|
|
404
|
+
type: object
|
|
405
|
+
properties:
|
|
406
|
+
kind:
|
|
407
|
+
type: string
|
|
408
|
+
enum:
|
|
409
|
+
- metric
|
|
410
|
+
- experiment
|
|
411
|
+
- alert_rule
|
|
412
|
+
- event
|
|
413
|
+
description: Resource kind.
|
|
414
|
+
id:
|
|
415
|
+
anyOf:
|
|
416
|
+
- type: string
|
|
417
|
+
- type: "null"
|
|
418
|
+
description: Resource id when it was created; absent/`null` for resources still to be made.
|
|
419
|
+
name:
|
|
420
|
+
type: string
|
|
421
|
+
description: Resource name.
|
|
422
|
+
required:
|
|
423
|
+
- kind
|
|
424
|
+
- name
|
|
425
|
+
additionalProperties: {}
|
|
426
|
+
description: "A resource referenced by a measurement plan."
|
|
427
|
+
MeasurePlanStep:
|
|
428
|
+
type: object
|
|
429
|
+
properties:
|
|
430
|
+
event:
|
|
431
|
+
anyOf:
|
|
432
|
+
- type: string
|
|
433
|
+
- type: "null"
|
|
434
|
+
description: The event name the instrumentation should emit, when known.
|
|
435
|
+
attribute:
|
|
436
|
+
anyOf:
|
|
437
|
+
- type: string
|
|
438
|
+
- type: "null"
|
|
439
|
+
description: "A new user attribute the project must start sending on its identify/evaluate context (when a gate's targeting needs a field that doesn't exist yet)."
|
|
440
|
+
label:
|
|
441
|
+
type: string
|
|
442
|
+
description: Short human-readable name for the moment being instrumented.
|
|
443
|
+
description:
|
|
444
|
+
anyOf:
|
|
445
|
+
- type: string
|
|
446
|
+
- type: "null"
|
|
447
|
+
description: "What to track and why, described conceptually — which user moment/action to capture and what it enables. Deliberately NOT a file path (the assistant has no repo access and can't name real files); you locate the call site yourself."
|
|
448
|
+
properties:
|
|
449
|
+
type: array
|
|
450
|
+
items:
|
|
451
|
+
type: string
|
|
452
|
+
description: "Event properties the downstream metric needs attached (e.g. `method`, `plan`)."
|
|
453
|
+
required:
|
|
454
|
+
- label
|
|
455
|
+
additionalProperties: {}
|
|
456
|
+
description: "One piece of code instrumentation a measurement plan still needs."
|
|
457
|
+
OpsItemAttachment:
|
|
458
|
+
type: object
|
|
459
|
+
properties:
|
|
460
|
+
id:
|
|
461
|
+
type: string
|
|
462
|
+
description: Attachment id.
|
|
463
|
+
kind:
|
|
464
|
+
type: string
|
|
465
|
+
description: "`screenshot` | `video` | `log`."
|
|
466
|
+
filename:
|
|
467
|
+
type: string
|
|
468
|
+
description: Sanitized original filename.
|
|
469
|
+
mimeType:
|
|
470
|
+
type: string
|
|
471
|
+
description: "MIME type, e.g. `image/png`."
|
|
472
|
+
sizeBytes:
|
|
473
|
+
type: number
|
|
474
|
+
description: Upload size in bytes.
|
|
475
|
+
fetchUrl:
|
|
476
|
+
type: string
|
|
477
|
+
description: "Admin-API path to download the file (`GET` with the admin/ops key — screenshots render inline; recordings can't be watched)."
|
|
478
|
+
required:
|
|
479
|
+
- id
|
|
480
|
+
- kind
|
|
481
|
+
- filename
|
|
482
|
+
- mimeType
|
|
483
|
+
- sizeBytes
|
|
484
|
+
- fetchUrl
|
|
485
|
+
additionalProperties: {}
|
|
486
|
+
description: "A file uploaded with a bug/feature report."
|
|
487
|
+
OpsItemRelated:
|
|
488
|
+
type: object
|
|
489
|
+
properties:
|
|
490
|
+
dashboard:
|
|
491
|
+
type: string
|
|
492
|
+
description: Dashboard-relative deep link to this item.
|
|
493
|
+
error:
|
|
494
|
+
type: string
|
|
495
|
+
description: Admin-API path to the tracked error (error tickets only).
|
|
496
|
+
alertRule:
|
|
497
|
+
type: string
|
|
498
|
+
description: Admin-API path to the alert rule (metric-rule alerts only).
|
|
499
|
+
metric:
|
|
500
|
+
type: string
|
|
501
|
+
description: Admin-API path to the metric the alert watches (alert tickets only).
|
|
502
|
+
githubIssue:
|
|
503
|
+
type: string
|
|
504
|
+
description: HTML URL of the connected GitHub issue, if any.
|
|
505
|
+
githubPr:
|
|
506
|
+
type: string
|
|
507
|
+
description: HTML URL of the linked GitHub pull request, if any.
|
|
508
|
+
additionalProperties: {}
|
|
509
|
+
description: "Deep links to the resources behind this item — every value is either a dashboard-relative path or an admin-API path fetchable with the same key."
|
|
510
|
+
ConnectorData:
|
|
511
|
+
type: object
|
|
512
|
+
properties:
|
|
513
|
+
github:
|
|
514
|
+
$ref: "#/GithubConnectorData"
|
|
515
|
+
slack:
|
|
516
|
+
$ref: "#/SlackConnectorData"
|
|
517
|
+
additionalProperties: {}
|
|
518
|
+
description: "Connector linkage for one queue item, keyed by provider. Each provider's driver deep-merges its own trace into this blob, so any subset of providers may be present. Unknown/future providers may appear as additional keys."
|
|
519
|
+
GithubConnectorData:
|
|
520
|
+
type: object
|
|
521
|
+
properties:
|
|
522
|
+
issue:
|
|
523
|
+
type: object
|
|
524
|
+
properties:
|
|
525
|
+
number:
|
|
526
|
+
type: number
|
|
527
|
+
description: GitHub issue number.
|
|
528
|
+
url:
|
|
529
|
+
type: string
|
|
530
|
+
description: HTML URL of the opened issue.
|
|
531
|
+
owner:
|
|
532
|
+
type: string
|
|
533
|
+
description: Repository owner (org or user).
|
|
534
|
+
repo:
|
|
535
|
+
type: string
|
|
536
|
+
description: Repository name.
|
|
537
|
+
createdAt:
|
|
538
|
+
type: string
|
|
539
|
+
description: ISO-8601 timestamp the issue was opened.
|
|
540
|
+
required:
|
|
541
|
+
- number
|
|
542
|
+
- url
|
|
543
|
+
- owner
|
|
544
|
+
- repo
|
|
545
|
+
additionalProperties: {}
|
|
546
|
+
description: The GitHub issue this item opened.
|
|
547
|
+
pr:
|
|
548
|
+
type: object
|
|
549
|
+
properties:
|
|
550
|
+
number:
|
|
551
|
+
type: number
|
|
552
|
+
description: Pull request number.
|
|
553
|
+
url:
|
|
554
|
+
type: string
|
|
555
|
+
description: HTML URL of the linked pull request.
|
|
556
|
+
linkedAt:
|
|
557
|
+
type: string
|
|
558
|
+
description: ISO-8601 timestamp the PR was linked.
|
|
559
|
+
connectedToIssue:
|
|
560
|
+
type: boolean
|
|
561
|
+
description: "Whether the PR was wired to the issue on GitHub (via a closing keyword or a comment)."
|
|
562
|
+
method:
|
|
563
|
+
type: string
|
|
564
|
+
enum:
|
|
565
|
+
- closes
|
|
566
|
+
- comment
|
|
567
|
+
description: How the PR was connected to the issue.
|
|
568
|
+
required:
|
|
569
|
+
- number
|
|
570
|
+
- url
|
|
571
|
+
additionalProperties: {}
|
|
572
|
+
description: The pull request linked to this item via `link-pr`.
|
|
573
|
+
additionalProperties: {}
|
|
574
|
+
description: "GitHub connector trace — the issue it opened and, once linked, the pull request."
|
|
575
|
+
SlackConnectorData:
|
|
576
|
+
type: object
|
|
577
|
+
properties:
|
|
578
|
+
message:
|
|
579
|
+
type: object
|
|
580
|
+
properties:
|
|
581
|
+
channel:
|
|
582
|
+
type: string
|
|
583
|
+
description: Slack channel id the message was posted to.
|
|
584
|
+
ts:
|
|
585
|
+
type: string
|
|
586
|
+
description: Slack message timestamp (`ts`) — the message handle used for in-place `chat.update`.
|
|
587
|
+
postedAt:
|
|
588
|
+
type: string
|
|
589
|
+
description: ISO-8601 timestamp the message was posted.
|
|
590
|
+
required:
|
|
591
|
+
- channel
|
|
592
|
+
- ts
|
|
593
|
+
additionalProperties: {}
|
|
594
|
+
description: The Slack message the driver posted for this item.
|
|
595
|
+
additionalProperties: {}
|
|
596
|
+
description: "Slack connector trace — the message the driver posted for this item. The linked pull request is recorded on `github.pr`, not here."
|
|
597
|
+
CreateBugRequest:
|
|
598
|
+
type: object
|
|
599
|
+
properties:
|
|
600
|
+
type:
|
|
601
|
+
type: string
|
|
602
|
+
enum:
|
|
603
|
+
- bug
|
|
604
|
+
description: Discriminator — files a bug.
|
|
605
|
+
title:
|
|
606
|
+
type: string
|
|
607
|
+
minLength: 1
|
|
608
|
+
maxLength: 200
|
|
609
|
+
pattern: '^\S(.*\S)?$'
|
|
610
|
+
description: One-line bug title (no leading/trailing whitespace).
|
|
611
|
+
stepsToReproduce:
|
|
612
|
+
type: string
|
|
613
|
+
maxLength: 8000
|
|
614
|
+
default: ""
|
|
615
|
+
description: How to reproduce the bug.
|
|
616
|
+
actualResult:
|
|
617
|
+
type: string
|
|
618
|
+
maxLength: 8000
|
|
619
|
+
default: ""
|
|
620
|
+
description: What actually happened.
|
|
621
|
+
expectedResult:
|
|
622
|
+
type: string
|
|
623
|
+
maxLength: 8000
|
|
624
|
+
default: ""
|
|
625
|
+
description: What was expected instead.
|
|
626
|
+
priority:
|
|
627
|
+
anyOf:
|
|
628
|
+
- $ref: "#/OpsItemPriority"
|
|
629
|
+
- type: "null"
|
|
630
|
+
description: Initial triage priority, or `null`.
|
|
631
|
+
reporterEmail:
|
|
632
|
+
anyOf:
|
|
633
|
+
- type: string
|
|
634
|
+
format: email
|
|
635
|
+
- type: "null"
|
|
636
|
+
description: Email of the reporter, or `null`.
|
|
637
|
+
pageUrl:
|
|
638
|
+
anyOf:
|
|
639
|
+
- type: string
|
|
640
|
+
format: uri
|
|
641
|
+
- type: "null"
|
|
642
|
+
description: URL of the page the bug relates to, or `null`.
|
|
643
|
+
userAgent:
|
|
644
|
+
anyOf:
|
|
645
|
+
- type: string
|
|
646
|
+
maxLength: 500
|
|
647
|
+
- type: "null"
|
|
648
|
+
description: Reporter's user-agent string, or `null`.
|
|
649
|
+
viewport:
|
|
650
|
+
anyOf:
|
|
651
|
+
- type: string
|
|
652
|
+
maxLength: 40
|
|
653
|
+
- type: "null"
|
|
654
|
+
description: Reporter's viewport (e.g. `1280x720`), or `null`.
|
|
655
|
+
context:
|
|
656
|
+
anyOf:
|
|
657
|
+
- type: object
|
|
658
|
+
additionalProperties: {}
|
|
659
|
+
- type: "null"
|
|
660
|
+
description: Arbitrary capture context, or `null`.
|
|
661
|
+
notify:
|
|
662
|
+
anyOf:
|
|
663
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
664
|
+
- type: "null"
|
|
665
|
+
description: Where this bug's completion notification lands.
|
|
666
|
+
required:
|
|
667
|
+
- type
|
|
668
|
+
- title
|
|
669
|
+
additionalProperties: false
|
|
670
|
+
description: "Bug-kind fields for `POST /api/admin/ops` (sent with `type: bug`)."
|
|
671
|
+
CreateFeatureRequestRequest:
|
|
672
|
+
type: object
|
|
673
|
+
properties:
|
|
674
|
+
type:
|
|
675
|
+
type: string
|
|
676
|
+
enum:
|
|
677
|
+
- feature_request
|
|
678
|
+
description: Discriminator — files a feature request.
|
|
679
|
+
title:
|
|
680
|
+
type: string
|
|
681
|
+
minLength: 1
|
|
682
|
+
maxLength: 200
|
|
683
|
+
pattern: '^\S(.*\S)?$'
|
|
684
|
+
description: One-line feature-request title (no leading/trailing whitespace).
|
|
685
|
+
description:
|
|
686
|
+
type: string
|
|
687
|
+
maxLength: 8000
|
|
688
|
+
default: ""
|
|
689
|
+
description: What the feature is.
|
|
690
|
+
useCase:
|
|
691
|
+
type: string
|
|
692
|
+
maxLength: 8000
|
|
693
|
+
default: ""
|
|
694
|
+
description: Why it's needed / the use case.
|
|
695
|
+
priority:
|
|
696
|
+
anyOf:
|
|
697
|
+
- $ref: "#/OpsItemPriority"
|
|
698
|
+
- type: "null"
|
|
699
|
+
description: Initial triage priority, or `null`.
|
|
700
|
+
reporterEmail:
|
|
701
|
+
anyOf:
|
|
702
|
+
- type: string
|
|
703
|
+
format: email
|
|
704
|
+
- type: "null"
|
|
705
|
+
description: Email of the reporter, or `null`.
|
|
706
|
+
pageUrl:
|
|
707
|
+
anyOf:
|
|
708
|
+
- type: string
|
|
709
|
+
format: uri
|
|
710
|
+
- type: "null"
|
|
711
|
+
description: URL of the page the request relates to, or `null`.
|
|
712
|
+
userAgent:
|
|
713
|
+
anyOf:
|
|
714
|
+
- type: string
|
|
715
|
+
maxLength: 500
|
|
716
|
+
- type: "null"
|
|
717
|
+
description: Reporter's user-agent string, or `null`.
|
|
718
|
+
context:
|
|
719
|
+
anyOf:
|
|
720
|
+
- type: object
|
|
721
|
+
additionalProperties: {}
|
|
722
|
+
- type: "null"
|
|
723
|
+
description: Arbitrary capture context, or `null`.
|
|
724
|
+
notify:
|
|
725
|
+
anyOf:
|
|
726
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
727
|
+
- type: "null"
|
|
728
|
+
description: Where this request's completion notification lands.
|
|
729
|
+
required:
|
|
730
|
+
- type
|
|
731
|
+
- title
|
|
732
|
+
additionalProperties: false
|
|
733
|
+
description: "Feature-request-kind fields for `POST /api/admin/ops` (sent with `type: feature_request`)."
|
|
734
|
+
CreateOpsItemRequest:
|
|
735
|
+
oneOf:
|
|
736
|
+
- $ref: "#/CreateBugRequest"
|
|
737
|
+
- $ref: "#/CreateFeatureRequestRequest"
|
|
738
|
+
discriminator:
|
|
739
|
+
propertyName: type
|
|
740
|
+
mapping:
|
|
741
|
+
bug: "#/CreateBugRequest"
|
|
742
|
+
feature_request: "#/CreateFeatureRequestRequest"
|
|
743
|
+
description: "Body for `POST /api/admin/ops`. A discriminated union on `type`: `bug` carries the bug fields, `feature_request` the feature fields. Only these two user-fileable types are accepted — `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform and cannot be created over the API."
|
|
744
|
+
CreateOpsItemResponse:
|
|
745
|
+
type: object
|
|
746
|
+
properties:
|
|
747
|
+
id:
|
|
748
|
+
type: string
|
|
749
|
+
description: Newly created item id.
|
|
750
|
+
number:
|
|
751
|
+
description: Per-project item number assigned to the new item.
|
|
752
|
+
anyOf:
|
|
753
|
+
- type: number
|
|
754
|
+
- type: "null"
|
|
755
|
+
required:
|
|
756
|
+
- id
|
|
757
|
+
additionalProperties: false
|
|
758
|
+
description: Response for `POST /api/admin/ops`.
|
|
759
|
+
OpsItemStatus:
|
|
760
|
+
type: string
|
|
761
|
+
enum:
|
|
762
|
+
- open
|
|
763
|
+
- pending_approval
|
|
764
|
+
- triage
|
|
765
|
+
- triaged
|
|
766
|
+
- in_progress
|
|
767
|
+
- ready_for_qa
|
|
768
|
+
- resolved
|
|
769
|
+
- wont_fix
|
|
770
|
+
description: >-
|
|
771
|
+
Lifecycle status of a queue item. The working flow is `open` → `triaged` →
|
|
772
|
+
`in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from
|
|
773
|
+
any earlier stage). `ready_for_qa` is what a developer sets once a fix
|
|
774
|
+
lands; `resolved` is the QA sign-off, normally flipped in the dashboard
|
|
775
|
+
after verification — set it directly from code only when the fix has been
|
|
776
|
+
verified end-to-end. Two
|
|
777
|
+
human-gated holding states park an item OUT of the work queue until a human
|
|
778
|
+
promotes it to `open` in the dashboard, so `GET /api/admin/ops` excludes
|
|
779
|
+
them under `status=all`/default and returns them only when requested as an
|
|
780
|
+
exact `status`: `pending_approval` is the pre-open approval gate for
|
|
781
|
+
untriaged inbound (e.g. connector requests filed from a customer's
|
|
782
|
+
connectors panel) so it never gets auto-implemented — approving = flipping
|
|
783
|
+
the status to `open`; `triage` is the onboarding-help bucket —
|
|
784
|
+
questions/errors submitted to the "Stuck in onboarding?" assistant are
|
|
785
|
+
funnelled into the platform project as `triage` rows so the team can see
|
|
786
|
+
where people get stuck and follow up, keeping onboarding chatter out of the
|
|
787
|
+
work queue until a human moves real items to `open`.
|
|
788
|
+
OpsItemPriority:
|
|
789
|
+
type: string
|
|
790
|
+
enum:
|
|
791
|
+
- nice_to_have
|
|
792
|
+
- medium
|
|
793
|
+
- high
|
|
794
|
+
- critical
|
|
795
|
+
description: >-
|
|
796
|
+
Triage priority of a queue item. The lowest tier is `nice_to_have` (not
|
|
797
|
+
`low`) — carried over from the feature-request "importance" scale this
|
|
798
|
+
priority set replaced.
|
|
799
|
+
OpsItemPriorityOrNull:
|
|
800
|
+
anyOf:
|
|
801
|
+
- $ref: "#/OpsItemPriority"
|
|
802
|
+
- type: "null"
|
|
803
|
+
description: Triage priority, or `null` when not set (in an update, `null` clears it).
|
|
804
|
+
OpsItemNotifyOrNull:
|
|
805
|
+
anyOf:
|
|
806
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
807
|
+
- type: "null"
|
|
808
|
+
description: Where this item's completion notification lands, or `null`.
|
|
809
|
+
UpdateOpsItemStatusRequest:
|
|
810
|
+
type: object
|
|
811
|
+
properties:
|
|
812
|
+
status:
|
|
813
|
+
$ref: "#/OpsItemStatus"
|
|
814
|
+
priority:
|
|
815
|
+
$ref: "#/OpsItemPriorityOrNull"
|
|
816
|
+
notify:
|
|
817
|
+
$ref: "#/OpsItemNotifyOrNull"
|
|
818
|
+
additionalProperties: false
|
|
819
|
+
description: "Triage-only update — the shape accepted for any item, and the ONLY shape for auto-filed `error`/`alert`/`measure_plan` tickets (their content is not user-editable)."
|
|
820
|
+
UpdateBugRequest:
|
|
821
|
+
type: object
|
|
822
|
+
properties:
|
|
823
|
+
title:
|
|
824
|
+
type: string
|
|
825
|
+
minLength: 1
|
|
826
|
+
maxLength: 200
|
|
827
|
+
pattern: '^\S(.*\S)?$'
|
|
828
|
+
description: New bug title (no leading/trailing whitespace).
|
|
829
|
+
stepsToReproduce:
|
|
830
|
+
type: string
|
|
831
|
+
maxLength: 8000
|
|
832
|
+
description: Updated reproduction steps.
|
|
833
|
+
actualResult:
|
|
834
|
+
type: string
|
|
835
|
+
maxLength: 8000
|
|
836
|
+
description: Updated actual result.
|
|
837
|
+
expectedResult:
|
|
838
|
+
type: string
|
|
839
|
+
maxLength: 8000
|
|
840
|
+
description: Updated expected result.
|
|
841
|
+
status:
|
|
842
|
+
$ref: "#/OpsItemStatus"
|
|
843
|
+
priority:
|
|
844
|
+
$ref: "#/OpsItemPriorityOrNull"
|
|
845
|
+
githubPrNumber:
|
|
846
|
+
anyOf:
|
|
847
|
+
- type: integer
|
|
848
|
+
minimum: 1
|
|
849
|
+
- type: "null"
|
|
850
|
+
description: Link (or, when `null`, unlink) a GitHub pull request to this bug.
|
|
851
|
+
notify:
|
|
852
|
+
$ref: "#/OpsItemNotifyOrNull"
|
|
853
|
+
additionalProperties: false
|
|
854
|
+
description: "Content + triage update for a `bug` item (`PATCH /api/admin/ops/{handle}` when the item is a bug)."
|
|
855
|
+
UpdateFeatureRequestRequest:
|
|
856
|
+
type: object
|
|
857
|
+
properties:
|
|
858
|
+
title:
|
|
859
|
+
type: string
|
|
860
|
+
minLength: 1
|
|
861
|
+
maxLength: 200
|
|
862
|
+
pattern: '^\S(.*\S)?$'
|
|
863
|
+
description: New feature-request title (no leading/trailing whitespace).
|
|
864
|
+
description:
|
|
865
|
+
type: string
|
|
866
|
+
maxLength: 8000
|
|
867
|
+
description: Updated description.
|
|
868
|
+
useCase:
|
|
869
|
+
type: string
|
|
870
|
+
maxLength: 8000
|
|
871
|
+
description: Updated use case.
|
|
872
|
+
status:
|
|
873
|
+
$ref: "#/OpsItemStatus"
|
|
874
|
+
priority:
|
|
875
|
+
$ref: "#/OpsItemPriorityOrNull"
|
|
876
|
+
githubPrNumber:
|
|
877
|
+
anyOf:
|
|
878
|
+
- type: integer
|
|
879
|
+
minimum: 1
|
|
880
|
+
- type: "null"
|
|
881
|
+
description: Link (or, when `null`, unlink) a GitHub pull request to this request.
|
|
882
|
+
notify:
|
|
883
|
+
$ref: "#/OpsItemNotifyOrNull"
|
|
884
|
+
additionalProperties: false
|
|
885
|
+
description: "Content + triage update for a `feature_request` item (`PATCH /api/admin/ops/{handle}` when the item is a feature request)."
|
|
886
|
+
UpdateOpsItemRequest:
|
|
887
|
+
anyOf:
|
|
888
|
+
- $ref: "#/UpdateBugRequest"
|
|
889
|
+
- $ref: "#/UpdateFeatureRequestRequest"
|
|
890
|
+
- $ref: "#/UpdateOpsItemStatusRequest"
|
|
891
|
+
description: "Body for `PATCH /api/admin/ops/{handle}`. The body is type-less — the server validates it against the stored item's type: a `bug` accepts the bug content fields, a `feature_request` the feature fields, and `error`/`alert`/`measure_plan` only `status`/`priority`/`notify`. Pass at least one field."
|
|
892
|
+
UpdateOpsItemResponse:
|
|
893
|
+
type: object
|
|
894
|
+
properties:
|
|
895
|
+
id:
|
|
896
|
+
type: string
|
|
897
|
+
description: Item id that was updated.
|
|
898
|
+
required:
|
|
899
|
+
- id
|
|
900
|
+
additionalProperties: false
|
|
901
|
+
description: Response for the update / link-pr endpoints.
|
|
902
|
+
LinkPrToOpsItemRequest:
|
|
903
|
+
type: object
|
|
904
|
+
properties:
|
|
905
|
+
prNumber:
|
|
906
|
+
anyOf:
|
|
907
|
+
- type: integer
|
|
908
|
+
exclusiveMinimum: 0
|
|
909
|
+
maximum: 9007199254740991
|
|
910
|
+
- type: "null"
|
|
911
|
+
description: PR number to record on the item. `null` unlinks the PR.
|
|
912
|
+
prUrl:
|
|
913
|
+
description: Explicit PR URL. Required for error/alert tickets (no GitHub issue to derive the URL from).
|
|
914
|
+
type: string
|
|
915
|
+
format: uri
|
|
916
|
+
required:
|
|
917
|
+
- prNumber
|
|
918
|
+
additionalProperties: false
|
|
919
|
+
description: Body for `POST /api/admin/ops/{handle}/link-pr`.
|
|
920
|
+
LinkPrToOpsItemResponse:
|
|
921
|
+
type: object
|
|
922
|
+
properties:
|
|
923
|
+
id:
|
|
924
|
+
type: string
|
|
925
|
+
description: Item id that was updated.
|
|
926
|
+
required:
|
|
927
|
+
- id
|
|
928
|
+
additionalProperties: false
|
|
929
|
+
description: Response for the update / link-pr endpoints.
|
|
930
|
+
NotifyOpsRequest:
|
|
931
|
+
type: object
|
|
932
|
+
properties:
|
|
933
|
+
title:
|
|
934
|
+
type: string
|
|
935
|
+
minLength: 1
|
|
936
|
+
maxLength: 200
|
|
937
|
+
description: One-line headline of what's blocked.
|
|
938
|
+
summary:
|
|
939
|
+
type: string
|
|
940
|
+
minLength: 1
|
|
941
|
+
maxLength: 280
|
|
942
|
+
description: "One sentence: why it can't be fixed in code. Renders markdown."
|
|
943
|
+
steps:
|
|
944
|
+
description: Ordered steps the human should take to unblock — self-contained (the human reads only this card, not the agent's transcript), 3–6 steps, each naming the exact file, command, env var, or dashboard page. Renders markdown.
|
|
945
|
+
type: array
|
|
946
|
+
items:
|
|
947
|
+
type: string
|
|
948
|
+
href:
|
|
949
|
+
description: Dashboard-relative deep link to the related item.
|
|
950
|
+
type: string
|
|
951
|
+
dedupeKey:
|
|
952
|
+
description: Stable per-escalation key (e.g. `feedback:7`) so re-runs dedupe to one row.
|
|
953
|
+
type: string
|
|
954
|
+
required:
|
|
955
|
+
- title
|
|
956
|
+
- summary
|
|
957
|
+
additionalProperties: false
|
|
958
|
+
description: >-
|
|
959
|
+
Body for `POST /api/admin/notifications`. In `title`, `summary`, and each
|
|
960
|
+
step, reference admin entities inline with tokens — `#42` (feedback item),
|
|
961
|
+
`@gate:<name>` (alias `@flag:`), `@experiment:<name>` (`@exp:`),
|
|
962
|
+
`@config:<name>`, `@killswitch:<name>` (`@ks:`), `@metric:<name>`,
|
|
963
|
+
`@universe:<name>`, `@alert:<name>` — where `<name>` is the entity's
|
|
964
|
+
immutable name/slug (e.g. `features.checkout`). The dashboard renders each
|
|
965
|
+
token as a live hover chip deep-linking to the entity; tokens degrade to
|
|
966
|
+
plain text elsewhere, so they're always safe to use.
|
|
967
|
+
NotifyOpsResponse:
|
|
968
|
+
type: object
|
|
969
|
+
properties:
|
|
970
|
+
dedupeKey:
|
|
971
|
+
type: string
|
|
972
|
+
description: The dedupe key the escalation was recorded under.
|
|
973
|
+
dispatched:
|
|
974
|
+
type: boolean
|
|
975
|
+
description: "`true` if a new escalation was dispatched; `false` on an idempotent repeat."
|
|
976
|
+
required:
|
|
977
|
+
- dedupeKey
|
|
978
|
+
- dispatched
|
|
979
|
+
additionalProperties: false
|
|
980
|
+
description: Response for `POST /api/admin/notifications`.
|
|
981
|
+
ListSlackChannelsResponse:
|
|
982
|
+
type: object
|
|
983
|
+
properties:
|
|
984
|
+
connected:
|
|
985
|
+
type: boolean
|
|
986
|
+
description: Whether a Slack connector is connected and authenticated.
|
|
987
|
+
channels:
|
|
988
|
+
type: array
|
|
989
|
+
items:
|
|
990
|
+
type: object
|
|
991
|
+
properties:
|
|
992
|
+
id:
|
|
993
|
+
type: string
|
|
994
|
+
description: Slack channel id.
|
|
995
|
+
name:
|
|
996
|
+
type: string
|
|
997
|
+
description: Slack channel name (without the leading `#`).
|
|
998
|
+
isPrivate:
|
|
999
|
+
description: Whether the channel is private.
|
|
1000
|
+
type: boolean
|
|
1001
|
+
required:
|
|
1002
|
+
- id
|
|
1003
|
+
- name
|
|
1004
|
+
additionalProperties: false
|
|
1005
|
+
description: One Slack channel the project can post to.
|
|
1006
|
+
description: The project's Slack channels (empty when no Slack is connected).
|
|
1007
|
+
required:
|
|
1008
|
+
- connected
|
|
1009
|
+
- channels
|
|
1010
|
+
additionalProperties: false
|
|
1011
|
+
description: Response for `GET /api/admin/slack/channels`.
|