@shipeasy/openapi 3.3.0 → 3.4.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/dist/{chunk-75Z4SQOM.js → chunk-JJA7XEPU.js} +17 -1
- package/dist/chunk-JJA7XEPU.js.map +1 -0
- package/dist/{chunk-ZYK74ZIW.js → chunk-Z3CY5Y44.js} +89 -6
- package/dist/chunk-Z3CY5Y44.js.map +1 -0
- package/dist/{client-DAGqRpF1.d.ts → client-CkRbr8I2.d.ts} +213 -5
- package/dist/client.d.ts +1 -1
- package/dist/client.js +5 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +232 -1
- package/dist/schemas.js +29 -1
- package/openapi.json +379 -5
- package/openapi.yaml +276 -3
- package/package.json +1 -1
- package/spec/components/schemas/alert-rules.yaml +29 -3
- package/spec/components/schemas/keys.yaml +9 -0
- package/spec/components/schemas/ops.yaml +94 -0
- package/spec/components/schemas/search.yaml +1 -0
- package/spec/openapi.yaml +13 -0
- package/spec/paths/ops.yaml +126 -0
- package/dist/chunk-75Z4SQOM.js.map +0 -1
- package/dist/chunk-ZYK74ZIW.js.map +0 -1
package/openapi.yaml
CHANGED
|
@@ -234,6 +234,17 @@ tags:
|
|
|
234
234
|
run record with the answers in the prompt. `delivery: poll` (the default
|
|
235
235
|
for a live, connector-less session such as Claude Code in a terminal)
|
|
236
236
|
fires nothing — call `list` until the status reads `completed`.
|
|
237
|
+
- name: QA notes
|
|
238
|
+
parent: Ops
|
|
239
|
+
description: |-
|
|
240
|
+
Typed QA notes on a queue item — the QA follow-up that is not discussion.
|
|
241
|
+
Each note is one of four kinds: `narrowing` (only part of the bug still
|
|
242
|
+
fails), `clarification` (changes what "fixed" means), `verification` (a
|
|
243
|
+
`pass` / `fail` verdict on a fix) or `correction` (withdraws an earlier
|
|
244
|
+
framing). Notes are append-only, carry their author and time, and render in
|
|
245
|
+
their own section of the item's detail panel, separate from the comment
|
|
246
|
+
thread. A failing verification offers a "Reopen item" action in the
|
|
247
|
+
dashboard; it is always an explicit click, never a side effect of `create`.
|
|
237
248
|
- name: Projects
|
|
238
249
|
description: |-
|
|
239
250
|
Projects: the account-level container every other resource is scoped to.
|
|
@@ -6642,6 +6653,132 @@ paths:
|
|
|
6642
6653
|
positional:
|
|
6643
6654
|
- handle
|
|
6644
6655
|
- questionId
|
|
6656
|
+
/api/admin/ops/{handle}/qa-notes:
|
|
6657
|
+
get:
|
|
6658
|
+
operationId: listOpsQaNotes
|
|
6659
|
+
summary: List an item's QA notes
|
|
6660
|
+
description: |-
|
|
6661
|
+
The typed QA notes on a queue item, newest first (max 200) — narrowing,
|
|
6662
|
+
clarification, verification and correction notes, each with its author and
|
|
6663
|
+
time. They are separate from the comment thread: read these to learn the
|
|
6664
|
+
CURRENT QA state of a ticket (what remains failing, what "fixed" now means,
|
|
6665
|
+
the last verification verdict) without parsing prose comments.
|
|
6666
|
+
|
|
6667
|
+
**Use case:** A coding agent picks an item up and checks the latest
|
|
6668
|
+
`verification` verdict and any `narrowing` note before touching the code.
|
|
6669
|
+
tags:
|
|
6670
|
+
- QA notes
|
|
6671
|
+
parameters:
|
|
6672
|
+
- $ref: '#/components/parameters/ProjectId'
|
|
6673
|
+
- name: handle
|
|
6674
|
+
in: path
|
|
6675
|
+
required: true
|
|
6676
|
+
description: Per-project item number (e.g. `7`) or the full ops item id.
|
|
6677
|
+
schema:
|
|
6678
|
+
$ref: '#/components/schemas/ResourceId'
|
|
6679
|
+
- name: kind
|
|
6680
|
+
in: query
|
|
6681
|
+
required: false
|
|
6682
|
+
description: Only notes of this kind.
|
|
6683
|
+
schema:
|
|
6684
|
+
$ref: '#/components/schemas/OpsQaNoteKind'
|
|
6685
|
+
responses:
|
|
6686
|
+
'200':
|
|
6687
|
+
description: List an item's QA notes
|
|
6688
|
+
content:
|
|
6689
|
+
application/json:
|
|
6690
|
+
schema:
|
|
6691
|
+
$ref: '#/components/schemas/ListOpsQaNotesResponse'
|
|
6692
|
+
'400':
|
|
6693
|
+
$ref: '#/components/responses/BadRequest'
|
|
6694
|
+
'401':
|
|
6695
|
+
$ref: '#/components/responses/Unauthorized'
|
|
6696
|
+
'403':
|
|
6697
|
+
$ref: '#/components/responses/Forbidden'
|
|
6698
|
+
'404':
|
|
6699
|
+
$ref: '#/components/responses/NotFound'
|
|
6700
|
+
'422':
|
|
6701
|
+
$ref: '#/components/responses/UnprocessableEntity'
|
|
6702
|
+
x-error-codes:
|
|
6703
|
+
- BAD_REQUEST
|
|
6704
|
+
- UNAUTHORIZED
|
|
6705
|
+
- FORBIDDEN
|
|
6706
|
+
- NOT_FOUND
|
|
6707
|
+
x-cli:
|
|
6708
|
+
name: list
|
|
6709
|
+
positional:
|
|
6710
|
+
- handle
|
|
6711
|
+
post:
|
|
6712
|
+
operationId: createOpsQaNote
|
|
6713
|
+
summary: Add a QA note to an item
|
|
6714
|
+
description: |-
|
|
6715
|
+
Append one typed QA note to a queue item. `kind` is `narrowing` (what now
|
|
6716
|
+
passes vs what still fails), `clarification` (what "fixed" now means),
|
|
6717
|
+
`verification` (requires a `verdict` of `pass` or `fail`, and `body` says
|
|
6718
|
+
what was checked) or `correction` (withdraws an earlier framing). Notes
|
|
6719
|
+
are append-only and appear in the item's QA notes section, not in the
|
|
6720
|
+
comment thread. The author is the caller's identity; pass `agent` to
|
|
6721
|
+
record the note as written by that agent type's QA automation. A `fail` verdict never changes the item's
|
|
6722
|
+
status by itself: the dashboard offers an explicit "Reopen item" action,
|
|
6723
|
+
and `ops update --status open` does the same from the CLI.
|
|
6724
|
+
|
|
6725
|
+
**Use case:** QA automation records "verified on production: FAIL, the
|
|
6726
|
+
second facet still errors" as data an agent can read back.
|
|
6727
|
+
tags:
|
|
6728
|
+
- QA notes
|
|
6729
|
+
parameters:
|
|
6730
|
+
- $ref: '#/components/parameters/ProjectId'
|
|
6731
|
+
- name: handle
|
|
6732
|
+
in: path
|
|
6733
|
+
required: true
|
|
6734
|
+
description: Per-project item number (e.g. `7`) or the full ops item id.
|
|
6735
|
+
schema:
|
|
6736
|
+
$ref: '#/components/schemas/ResourceId'
|
|
6737
|
+
requestBody:
|
|
6738
|
+
required: true
|
|
6739
|
+
content:
|
|
6740
|
+
application/json:
|
|
6741
|
+
schema:
|
|
6742
|
+
$ref: '#/components/schemas/CreateOpsQaNoteRequest'
|
|
6743
|
+
examples:
|
|
6744
|
+
verification:
|
|
6745
|
+
summary: A failing verification
|
|
6746
|
+
value:
|
|
6747
|
+
kind: verification
|
|
6748
|
+
verdict: fail
|
|
6749
|
+
body: Retested on production after the deploy — the export still drops the second sheet
|
|
6750
|
+
narrowing:
|
|
6751
|
+
summary: Narrow a bug to the facet that still fails
|
|
6752
|
+
value:
|
|
6753
|
+
kind: narrowing
|
|
6754
|
+
body: The list view is fixed; only the detail panel still shows the stale count
|
|
6755
|
+
responses:
|
|
6756
|
+
'200':
|
|
6757
|
+
description: The created note
|
|
6758
|
+
content:
|
|
6759
|
+
application/json:
|
|
6760
|
+
schema:
|
|
6761
|
+
$ref: '#/components/schemas/OpsQaNote'
|
|
6762
|
+
'400':
|
|
6763
|
+
$ref: '#/components/responses/BadRequest'
|
|
6764
|
+
'401':
|
|
6765
|
+
$ref: '#/components/responses/Unauthorized'
|
|
6766
|
+
'403':
|
|
6767
|
+
$ref: '#/components/responses/Forbidden'
|
|
6768
|
+
'404':
|
|
6769
|
+
$ref: '#/components/responses/NotFound'
|
|
6770
|
+
'422':
|
|
6771
|
+
$ref: '#/components/responses/UnprocessableEntity'
|
|
6772
|
+
x-error-codes:
|
|
6773
|
+
- BAD_REQUEST
|
|
6774
|
+
- UNAUTHORIZED
|
|
6775
|
+
- FORBIDDEN
|
|
6776
|
+
- NOT_FOUND
|
|
6777
|
+
- VALIDATION
|
|
6778
|
+
x-cli:
|
|
6779
|
+
name: create
|
|
6780
|
+
positional:
|
|
6781
|
+
- handle
|
|
6645
6782
|
/api/admin/agent-profiles:
|
|
6646
6783
|
get:
|
|
6647
6784
|
operationId: listOpsAgents
|
|
@@ -17411,6 +17548,100 @@ components:
|
|
|
17411
17548
|
additionalProperties: false
|
|
17412
17549
|
minProperties: 1
|
|
17413
17550
|
description: Body for `POST /api/admin/ops/{handle}/questions/{questionId}/answer` — pick option labels, write a free-text answer, or both (multi-select only).
|
|
17551
|
+
OpsQaNoteKind:
|
|
17552
|
+
type: string
|
|
17553
|
+
enum:
|
|
17554
|
+
- narrowing
|
|
17555
|
+
- clarification
|
|
17556
|
+
- verification
|
|
17557
|
+
- correction
|
|
17558
|
+
description: What a QA note is — `narrowing` (only part of the bug still fails), `clarification` (changes what "fixed" means), `verification` (a pass/fail verdict on a fix) or `correction` (withdraws an earlier framing).
|
|
17559
|
+
OpsQaNoteVerdict:
|
|
17560
|
+
type: string
|
|
17561
|
+
enum:
|
|
17562
|
+
- pass
|
|
17563
|
+
- fail
|
|
17564
|
+
description: The outcome a `verification` note records.
|
|
17565
|
+
OpsQaNote:
|
|
17566
|
+
type: object
|
|
17567
|
+
properties:
|
|
17568
|
+
id:
|
|
17569
|
+
type: string
|
|
17570
|
+
description: Note id.
|
|
17571
|
+
feedbackId:
|
|
17572
|
+
type: string
|
|
17573
|
+
description: The queue item the note hangs off.
|
|
17574
|
+
kind:
|
|
17575
|
+
$ref: '#/components/schemas/OpsQaNoteKind'
|
|
17576
|
+
verdict:
|
|
17577
|
+
anyOf:
|
|
17578
|
+
- $ref: '#/components/schemas/OpsQaNoteVerdict'
|
|
17579
|
+
- type: 'null'
|
|
17580
|
+
description: The pass/fail verdict of a `verification` note; `null` for every other kind.
|
|
17581
|
+
body:
|
|
17582
|
+
type: string
|
|
17583
|
+
description: The note (markdown) — for a `verification`, what was checked.
|
|
17584
|
+
authorEmail:
|
|
17585
|
+
anyOf:
|
|
17586
|
+
- type: string
|
|
17587
|
+
- type: 'null'
|
|
17588
|
+
description: Email of the person (or the key's actor) who wrote the note, or `null` when an agent wrote it.
|
|
17589
|
+
authorAgent:
|
|
17590
|
+
anyOf:
|
|
17591
|
+
- type: string
|
|
17592
|
+
enum:
|
|
17593
|
+
- jarvis
|
|
17594
|
+
- claude
|
|
17595
|
+
- cursor
|
|
17596
|
+
- copilot
|
|
17597
|
+
- jules
|
|
17598
|
+
- type: 'null'
|
|
17599
|
+
description: The agent type that wrote the note (QA automation), or `null` for a person.
|
|
17600
|
+
createdAt:
|
|
17601
|
+
type: string
|
|
17602
|
+
description: ISO-8601 creation timestamp.
|
|
17603
|
+
required:
|
|
17604
|
+
- id
|
|
17605
|
+
- feedbackId
|
|
17606
|
+
- kind
|
|
17607
|
+
- verdict
|
|
17608
|
+
- body
|
|
17609
|
+
- authorEmail
|
|
17610
|
+
- authorAgent
|
|
17611
|
+
- createdAt
|
|
17612
|
+
additionalProperties: false
|
|
17613
|
+
description: One typed, append-only QA note on a queue item.
|
|
17614
|
+
ListOpsQaNotesResponse:
|
|
17615
|
+
type: array
|
|
17616
|
+
items:
|
|
17617
|
+
$ref: '#/components/schemas/OpsQaNote'
|
|
17618
|
+
description: Response for `GET /api/admin/ops/{handle}/qa-notes` — the item's QA notes, newest first (max 200).
|
|
17619
|
+
CreateOpsQaNoteRequest:
|
|
17620
|
+
type: object
|
|
17621
|
+
properties:
|
|
17622
|
+
kind:
|
|
17623
|
+
$ref: '#/components/schemas/OpsQaNoteKind'
|
|
17624
|
+
body:
|
|
17625
|
+
type: string
|
|
17626
|
+
minLength: 1
|
|
17627
|
+
maxLength: 10000
|
|
17628
|
+
description: The note (markdown).
|
|
17629
|
+
verdict:
|
|
17630
|
+
$ref: '#/components/schemas/OpsQaNoteVerdict'
|
|
17631
|
+
agent:
|
|
17632
|
+
type: string
|
|
17633
|
+
enum:
|
|
17634
|
+
- jarvis
|
|
17635
|
+
- claude
|
|
17636
|
+
- cursor
|
|
17637
|
+
- copilot
|
|
17638
|
+
- jules
|
|
17639
|
+
description: The agent type writing the note — pass your own type when you are QA automation. Omitted, the note is attributed to the caller's identity.
|
|
17640
|
+
required:
|
|
17641
|
+
- kind
|
|
17642
|
+
- body
|
|
17643
|
+
additionalProperties: false
|
|
17644
|
+
description: Body for `POST /api/admin/ops/{handle}/qa-notes`. A `verification` note requires `verdict`; every other kind rejects it.
|
|
17414
17645
|
OpsAgentProfile:
|
|
17415
17646
|
type: object
|
|
17416
17647
|
properties:
|
|
@@ -17625,6 +17856,38 @@ components:
|
|
|
17625
17856
|
- op
|
|
17626
17857
|
- rules
|
|
17627
17858
|
additionalProperties: false
|
|
17859
|
+
AlertRuleNotify:
|
|
17860
|
+
anyOf:
|
|
17861
|
+
- type: object
|
|
17862
|
+
properties:
|
|
17863
|
+
slackChannel:
|
|
17864
|
+
anyOf:
|
|
17865
|
+
- type: object
|
|
17866
|
+
properties:
|
|
17867
|
+
id:
|
|
17868
|
+
type: string
|
|
17869
|
+
minLength: 1
|
|
17870
|
+
name:
|
|
17871
|
+
type: string
|
|
17872
|
+
minLength: 1
|
|
17873
|
+
required:
|
|
17874
|
+
- id
|
|
17875
|
+
- name
|
|
17876
|
+
additionalProperties: false
|
|
17877
|
+
- type: 'null'
|
|
17878
|
+
email:
|
|
17879
|
+
anyOf:
|
|
17880
|
+
- type: string
|
|
17881
|
+
format: email
|
|
17882
|
+
- type: 'null'
|
|
17883
|
+
inApp:
|
|
17884
|
+
anyOf:
|
|
17885
|
+
- type: boolean
|
|
17886
|
+
- type: 'null'
|
|
17887
|
+
description: Whether the in-app notification (the dashboard bell and Home) is recorded when the rule fires. Absent or `null` means on; `false` skips it for this rule.
|
|
17888
|
+
additionalProperties: false
|
|
17889
|
+
- type: 'null'
|
|
17890
|
+
description: Delivery target for a rule's alert; `null` = use the project default. The `NotificationTarget` shape plus the in-app switch.
|
|
17628
17891
|
ListAlertRulesResponse:
|
|
17629
17892
|
type: array
|
|
17630
17893
|
items:
|
|
@@ -17755,7 +18018,7 @@ components:
|
|
|
17755
18018
|
type: boolean
|
|
17756
18019
|
description: Whether the rule is evaluated by the cron.
|
|
17757
18020
|
notify:
|
|
17758
|
-
$ref: '#/components/schemas/
|
|
18021
|
+
$ref: '#/components/schemas/AlertRuleNotify'
|
|
17759
18022
|
createdAt:
|
|
17760
18023
|
type: string
|
|
17761
18024
|
description: ISO-8601 timestamp of creation.
|
|
@@ -17931,7 +18194,7 @@ components:
|
|
|
17931
18194
|
description: Whether the rule is evaluated by the cron.
|
|
17932
18195
|
type: boolean
|
|
17933
18196
|
notify:
|
|
17934
|
-
$ref: '#/components/schemas/
|
|
18197
|
+
$ref: '#/components/schemas/AlertRuleNotify'
|
|
17935
18198
|
required:
|
|
17936
18199
|
- name
|
|
17937
18200
|
- metricId
|
|
@@ -18074,7 +18337,7 @@ components:
|
|
|
18074
18337
|
enabled:
|
|
18075
18338
|
type: boolean
|
|
18076
18339
|
notify:
|
|
18077
|
-
$ref: '#/components/schemas/
|
|
18340
|
+
$ref: '#/components/schemas/AlertRuleNotify'
|
|
18078
18341
|
additionalProperties: false
|
|
18079
18342
|
UpdateAlertRuleResponse:
|
|
18080
18343
|
type: object
|
|
@@ -20319,6 +20582,14 @@ components:
|
|
|
20319
20582
|
- type: string
|
|
20320
20583
|
- type: 'null'
|
|
20321
20584
|
description: Last 4 characters of the raw token, so the dashboard mask is matchable against the held key. `null` for keys minted before this column.
|
|
20585
|
+
origin:
|
|
20586
|
+
type: string
|
|
20587
|
+
enum:
|
|
20588
|
+
- cli
|
|
20589
|
+
- mobile
|
|
20590
|
+
- dashboard
|
|
20591
|
+
- api
|
|
20592
|
+
description: Where the key was minted. `cli` (a signed-in CLI session from device auth), `mobile` (a mobile app login), `dashboard` (the "New API key" dialog) or `api` (minted with another key — CLI, MCP, agents). Set at mint time; keys that predate the column were backfilled from their label, defaulting to `dashboard`.
|
|
20322
20593
|
required:
|
|
20323
20594
|
- id
|
|
20324
20595
|
- type
|
|
@@ -20331,6 +20602,7 @@ components:
|
|
|
20331
20602
|
- description
|
|
20332
20603
|
- scopes
|
|
20333
20604
|
- last4
|
|
20605
|
+
- origin
|
|
20334
20606
|
additionalProperties: false
|
|
20335
20607
|
ListKeysResponse:
|
|
20336
20608
|
type: object
|
|
@@ -20487,6 +20759,7 @@ components:
|
|
|
20487
20759
|
- config
|
|
20488
20760
|
- killswitch
|
|
20489
20761
|
- metric
|
|
20762
|
+
- ops
|
|
20490
20763
|
description: Resource family — drives the result group + icon in the palette. (`member` hits are surfaced first.)
|
|
20491
20764
|
id:
|
|
20492
20765
|
type: string
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shipeasy/openapi",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Shipeasy admin OpenAPI 3.2 spec (hand-authored, single source of truth) + the generated TypeScript client, Zod schemas, and types. Consumed by @shipeasy/cli and @shipeasy/mcp.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
AlertRuleNotify:
|
|
2
|
+
anyOf:
|
|
3
|
+
- type: object
|
|
4
|
+
properties:
|
|
5
|
+
slackChannel:
|
|
6
|
+
anyOf:
|
|
7
|
+
- type: object
|
|
8
|
+
properties:
|
|
9
|
+
id: { type: string, minLength: 1 }
|
|
10
|
+
name: { type: string, minLength: 1 }
|
|
11
|
+
required: [id, name]
|
|
12
|
+
additionalProperties: false
|
|
13
|
+
- type: "null"
|
|
14
|
+
email:
|
|
15
|
+
anyOf:
|
|
16
|
+
- type: string
|
|
17
|
+
format: email
|
|
18
|
+
- type: "null"
|
|
19
|
+
inApp:
|
|
20
|
+
anyOf:
|
|
21
|
+
- type: boolean
|
|
22
|
+
- type: "null"
|
|
23
|
+
description: Whether the in-app notification (the dashboard bell and Home) is recorded when the rule fires. Absent or `null` means on; `false` skips it for this rule.
|
|
24
|
+
additionalProperties: false
|
|
25
|
+
- type: "null"
|
|
26
|
+
description: Delivery target for a rule's alert; `null` = use the project default. The `NotificationTarget` shape plus the in-app switch.
|
|
1
27
|
AlertCompositeSpec:
|
|
2
28
|
type: object
|
|
3
29
|
description: >-
|
|
@@ -172,7 +198,7 @@ ListAlertRulesResponse:
|
|
|
172
198
|
type: boolean
|
|
173
199
|
description: Whether the rule is evaluated by the cron.
|
|
174
200
|
notify:
|
|
175
|
-
$ref:
|
|
201
|
+
$ref: "#/AlertRuleNotify"
|
|
176
202
|
createdAt:
|
|
177
203
|
type: string
|
|
178
204
|
description: ISO-8601 timestamp of creation.
|
|
@@ -415,7 +441,7 @@ CreateAlertRuleRequest:
|
|
|
415
441
|
description: Whether the rule is evaluated by the cron.
|
|
416
442
|
type: boolean
|
|
417
443
|
notify:
|
|
418
|
-
$ref:
|
|
444
|
+
$ref: "#/AlertRuleNotify"
|
|
419
445
|
required:
|
|
420
446
|
- name
|
|
421
447
|
- metricId
|
|
@@ -551,7 +577,7 @@ UpdateAlertRuleRequest:
|
|
|
551
577
|
enabled:
|
|
552
578
|
type: boolean
|
|
553
579
|
notify:
|
|
554
|
-
$ref:
|
|
580
|
+
$ref: "#/AlertRuleNotify"
|
|
555
581
|
additionalProperties: false
|
|
556
582
|
UpdateAlertRuleResponse:
|
|
557
583
|
type: object
|
|
@@ -77,6 +77,14 @@ KeyRecord:
|
|
|
77
77
|
- type: string
|
|
78
78
|
- type: "null"
|
|
79
79
|
description: Last 4 characters of the raw token, so the dashboard mask is matchable against the held key. `null` for keys minted before this column.
|
|
80
|
+
origin:
|
|
81
|
+
type: string
|
|
82
|
+
enum:
|
|
83
|
+
- cli
|
|
84
|
+
- mobile
|
|
85
|
+
- dashboard
|
|
86
|
+
- api
|
|
87
|
+
description: Where the key was minted. `cli` (a signed-in CLI session from device auth), `mobile` (a mobile app login), `dashboard` (the "New API key" dialog) or `api` (minted with another key — CLI, MCP, agents). Set at mint time; keys that predate the column were backfilled from their label, defaulting to `dashboard`.
|
|
80
88
|
required:
|
|
81
89
|
- id
|
|
82
90
|
- type
|
|
@@ -89,6 +97,7 @@ KeyRecord:
|
|
|
89
97
|
- description
|
|
90
98
|
- scopes
|
|
91
99
|
- last4
|
|
100
|
+
- origin
|
|
92
101
|
additionalProperties: false
|
|
93
102
|
UpdateKeyRequest:
|
|
94
103
|
type: object
|
|
@@ -2516,6 +2516,100 @@ ListOpsQuestionsResponse:
|
|
|
2516
2516
|
items:
|
|
2517
2517
|
$ref: "#/OpsQuestion"
|
|
2518
2518
|
description: Response for `GET /api/admin/ops/{handle}/questions` — the item's questions, newest first (max 100).
|
|
2519
|
+
OpsQaNoteKind:
|
|
2520
|
+
type: string
|
|
2521
|
+
enum:
|
|
2522
|
+
- narrowing
|
|
2523
|
+
- clarification
|
|
2524
|
+
- verification
|
|
2525
|
+
- correction
|
|
2526
|
+
description: "What a QA note is — `narrowing` (only part of the bug still fails), `clarification` (changes what \"fixed\" means), `verification` (a pass/fail verdict on a fix) or `correction` (withdraws an earlier framing)."
|
|
2527
|
+
OpsQaNoteVerdict:
|
|
2528
|
+
type: string
|
|
2529
|
+
enum:
|
|
2530
|
+
- pass
|
|
2531
|
+
- fail
|
|
2532
|
+
description: The outcome a `verification` note records.
|
|
2533
|
+
OpsQaNote:
|
|
2534
|
+
type: object
|
|
2535
|
+
properties:
|
|
2536
|
+
id:
|
|
2537
|
+
type: string
|
|
2538
|
+
description: Note id.
|
|
2539
|
+
feedbackId:
|
|
2540
|
+
type: string
|
|
2541
|
+
description: The queue item the note hangs off.
|
|
2542
|
+
kind:
|
|
2543
|
+
$ref: "#/OpsQaNoteKind"
|
|
2544
|
+
verdict:
|
|
2545
|
+
anyOf:
|
|
2546
|
+
- $ref: "#/OpsQaNoteVerdict"
|
|
2547
|
+
- type: "null"
|
|
2548
|
+
description: The pass/fail verdict of a `verification` note; `null` for every other kind.
|
|
2549
|
+
body:
|
|
2550
|
+
type: string
|
|
2551
|
+
description: The note (markdown) — for a `verification`, what was checked.
|
|
2552
|
+
authorEmail:
|
|
2553
|
+
anyOf:
|
|
2554
|
+
- type: string
|
|
2555
|
+
- type: "null"
|
|
2556
|
+
description: Email of the person (or the key's actor) who wrote the note, or `null` when an agent wrote it.
|
|
2557
|
+
authorAgent:
|
|
2558
|
+
anyOf:
|
|
2559
|
+
- type: string
|
|
2560
|
+
enum:
|
|
2561
|
+
- jarvis
|
|
2562
|
+
- claude
|
|
2563
|
+
- cursor
|
|
2564
|
+
- copilot
|
|
2565
|
+
- jules
|
|
2566
|
+
- type: "null"
|
|
2567
|
+
description: The agent type that wrote the note (QA automation), or `null` for a person.
|
|
2568
|
+
createdAt:
|
|
2569
|
+
type: string
|
|
2570
|
+
description: ISO-8601 creation timestamp.
|
|
2571
|
+
required:
|
|
2572
|
+
- id
|
|
2573
|
+
- feedbackId
|
|
2574
|
+
- kind
|
|
2575
|
+
- verdict
|
|
2576
|
+
- body
|
|
2577
|
+
- authorEmail
|
|
2578
|
+
- authorAgent
|
|
2579
|
+
- createdAt
|
|
2580
|
+
additionalProperties: false
|
|
2581
|
+
description: One typed, append-only QA note on a queue item.
|
|
2582
|
+
CreateOpsQaNoteRequest:
|
|
2583
|
+
type: object
|
|
2584
|
+
properties:
|
|
2585
|
+
kind:
|
|
2586
|
+
$ref: "#/OpsQaNoteKind"
|
|
2587
|
+
body:
|
|
2588
|
+
type: string
|
|
2589
|
+
minLength: 1
|
|
2590
|
+
maxLength: 10000
|
|
2591
|
+
description: The note (markdown).
|
|
2592
|
+
verdict:
|
|
2593
|
+
$ref: "#/OpsQaNoteVerdict"
|
|
2594
|
+
agent:
|
|
2595
|
+
type: string
|
|
2596
|
+
enum:
|
|
2597
|
+
- jarvis
|
|
2598
|
+
- claude
|
|
2599
|
+
- cursor
|
|
2600
|
+
- copilot
|
|
2601
|
+
- jules
|
|
2602
|
+
description: The agent type writing the note — pass your own type when you are QA automation. Omitted, the note is attributed to the caller's identity.
|
|
2603
|
+
required:
|
|
2604
|
+
- kind
|
|
2605
|
+
- body
|
|
2606
|
+
additionalProperties: false
|
|
2607
|
+
description: "Body for `POST /api/admin/ops/{handle}/qa-notes`. A `verification` note requires `verdict`; every other kind rejects it."
|
|
2608
|
+
ListOpsQaNotesResponse:
|
|
2609
|
+
type: array
|
|
2610
|
+
items:
|
|
2611
|
+
$ref: "#/OpsQaNote"
|
|
2612
|
+
description: Response for `GET /api/admin/ops/{handle}/qa-notes` — the item's QA notes, newest first (max 200).
|
|
2519
2613
|
NotificationFeedItem:
|
|
2520
2614
|
type: object
|
|
2521
2615
|
properties:
|
package/spec/openapi.yaml
CHANGED
|
@@ -236,6 +236,17 @@ tags:
|
|
|
236
236
|
run record with the answers in the prompt. `delivery: poll` (the default
|
|
237
237
|
for a live, connector-less session such as Claude Code in a terminal)
|
|
238
238
|
fires nothing — call `list` until the status reads `completed`.
|
|
239
|
+
- name: QA notes
|
|
240
|
+
parent: Ops
|
|
241
|
+
description: |-
|
|
242
|
+
Typed QA notes on a queue item — the QA follow-up that is not discussion.
|
|
243
|
+
Each note is one of four kinds: `narrowing` (only part of the bug still
|
|
244
|
+
fails), `clarification` (changes what "fixed" means), `verification` (a
|
|
245
|
+
`pass` / `fail` verdict on a fix) or `correction` (withdraws an earlier
|
|
246
|
+
framing). Notes are append-only, carry their author and time, and render in
|
|
247
|
+
their own section of the item's detail panel, separate from the comment
|
|
248
|
+
thread. A failing verification offers a "Reopen item" action in the
|
|
249
|
+
dashboard; it is always an explicit click, never a side effect of `create`.
|
|
239
250
|
- name: Projects
|
|
240
251
|
description: |-
|
|
241
252
|
Projects: the account-level container every other resource is scoped to.
|
|
@@ -407,6 +418,8 @@ paths:
|
|
|
407
418
|
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1questions~1{questionId}~1answer
|
|
408
419
|
/api/admin/ops/{handle}/questions/{questionId}/cancel:
|
|
409
420
|
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1questions~1{questionId}~1cancel
|
|
421
|
+
/api/admin/ops/{handle}/qa-notes:
|
|
422
|
+
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1qa-notes
|
|
410
423
|
/api/admin/agent-profiles:
|
|
411
424
|
$ref: ./paths/ops.yaml#/~1api~1admin~1agent-profiles
|
|
412
425
|
/api/admin/ops/{handle}/comments:
|