@allocator-one/harness-cli 1.5.2 → 1.7.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/spec/openapi.json CHANGED
@@ -288,6 +288,7 @@
288
288
  "type": "string"
289
289
  },
290
290
  "name": {
291
+ "description": "Unique within its workspace or team after trimming Unicode boundary whitespace and Unicode-aware lowercasing. Interior whitespace and Unicode normalization forms remain distinct.",
291
292
  "maxLength": 255,
292
293
  "type": "string"
293
294
  },
@@ -382,7 +383,9 @@
382
383
  "schema": {
383
384
  "properties": {
384
385
  "label_ids": {
386
+ "description": "The complete replacement set. Every label must belong to this workspace and be workspace-scoped or owned by the issue's team; the update is rejected atomically otherwise.",
385
387
  "items": {
388
+ "format": "uuid",
386
389
  "type": "string"
387
390
  },
388
391
  "type": "array"
@@ -1038,6 +1041,14 @@
1038
1041
  "format": "date",
1039
1042
  "type": "string"
1040
1043
  },
1044
+ "label_ids": {
1045
+ "description": "Optional label IDs from the workspace or the same team; attached atomically with the issue",
1046
+ "items": {
1047
+ "format": "uuid",
1048
+ "type": "string"
1049
+ },
1050
+ "type": "array"
1051
+ },
1041
1052
  "notes": {
1042
1053
  "description": "Working notes (markdown)",
1043
1054
  "type": "string"
@@ -1353,7 +1364,7 @@
1353
1364
  "get": {
1354
1365
  "callbacks": {},
1355
1366
  "deprecated": false,
1356
- "description": "Requires the `harness:read` scope AND Harness administrator standing in the organization the credential is bound to — this is a settings write, gated exactly as the settings UI is. Everyone who can reach this organization's tracker: its harness grant holders plus its own admins, who get staff standing without a grant. Each entry carries both `role` (the grant rank, null when none) and `standing` — they differ, and the difference is the point: an org admin holds no rank and is still staff. Distinct from GET /users, which is the deployment-wide assignee picker and never lists a collaborator.",
1367
+ "description": "Requires the `harness:read` scope AND Harness administrator standing in the organization the credential is bound to — this is a settings write, gated exactly as the settings UI is. Everyone who can reach this organization's tracker: its harness grant holders plus its own admins, who get staff standing without a grant. Each entry carries both `role` (the grant rank, null when none) and `standing` — they differ, and the difference is the point: an org admin holds no rank and is still staff. Pending invitations appear with `standing: \"invited\"` and a null user id. Distinct from GET /users, which is the deployment-wide assignee picker and never lists a collaborator.",
1357
1368
  "parameters": [],
1358
1369
  "responses": {
1359
1370
  "200": {
@@ -1381,7 +1392,7 @@
1381
1392
  "post": {
1382
1393
  "callbacks": {},
1383
1394
  "deprecated": false,
1384
- "description": "Requires the `harness:write` scope AND Harness administrator standing in the organization the credential is bound to — this is a settings write, gated exactly as the settings UI is. Mints the organization membership when the person has none, so joining the tracker does not detour through the organization's own people page. The account must already exist: an unknown email is refused with 422 naming that, since the fix is for them to register. Email matching is case-insensitive.",
1395
+ "description": "Requires the `harness:write` scope AND Harness administrator standing in the organization the credential is bound to — this is a settings write, gated exactly as the settings UI is. Mints the organization membership when the person has none, so joining the tracker does not detour through the organization's own people page. An address with no account is INVITED instead of refused (IO-10955): the response is the same member shape with `standing: \"invited\"`, and the rank applies when the invitation is accepted. Email matching is case-insensitive.",
1385
1396
  "parameters": [],
1386
1397
  "requestBody": {
1387
1398
  "content": {
@@ -2150,6 +2161,7 @@
2150
2161
  "type": "string"
2151
2162
  },
2152
2163
  "name": {
2164
+ "description": "Unique within its workspace or team after trimming Unicode boundary whitespace and Unicode-aware lowercasing. Interior whitespace and Unicode normalization forms remain distinct.",
2153
2165
  "maxLength": 255,
2154
2166
  "type": "string"
2155
2167
  }
@@ -2273,6 +2285,302 @@
2273
2285
  "tags": []
2274
2286
  }
2275
2287
  },
2288
+ "/api/v1/issues/{identifier}/comments/{comment_id}": {
2289
+ "delete": {
2290
+ "callbacks": {},
2291
+ "deprecated": false,
2292
+ "description": "Requires the `harness:write` scope. Only the underlying authenticated author may soft-delete a comment, and must also retain issue-comment capability, matching the UI. Missing, deleted, cross-issue, cross-organization, and other authors' comments all answer 404.",
2293
+ "parameters": [
2294
+ {
2295
+ "description": "Issue identifier, e.g. ALL-4901 or CLI-12 (issues minted before team-prefixed numbering carry IO-)",
2296
+ "in": "path",
2297
+ "name": "identifier",
2298
+ "required": true,
2299
+ "schema": {
2300
+ "type": "string"
2301
+ }
2302
+ },
2303
+ {
2304
+ "description": "Comment UUID",
2305
+ "in": "path",
2306
+ "name": "comment_id",
2307
+ "required": true,
2308
+ "schema": {
2309
+ "format": "uuid",
2310
+ "type": "string"
2311
+ }
2312
+ }
2313
+ ],
2314
+ "responses": {
2315
+ "200": {
2316
+ "content": {
2317
+ "application/json": {
2318
+ "schema": {
2319
+ "properties": {
2320
+ "data": {
2321
+ "properties": {
2322
+ "deleted": {
2323
+ "type": "boolean"
2324
+ }
2325
+ },
2326
+ "required": [
2327
+ "deleted"
2328
+ ],
2329
+ "type": "object"
2330
+ }
2331
+ },
2332
+ "required": [
2333
+ "data"
2334
+ ],
2335
+ "type": "object"
2336
+ }
2337
+ }
2338
+ },
2339
+ "description": "Success"
2340
+ },
2341
+ "400": {
2342
+ "description": "Bad request"
2343
+ },
2344
+ "401": {
2345
+ "description": "Missing or invalid token"
2346
+ },
2347
+ "403": {
2348
+ "description": "Token not permitted (org-scoped, non-admin, or missing scope)"
2349
+ },
2350
+ "404": {
2351
+ "description": "Not found"
2352
+ },
2353
+ "422": {
2354
+ "description": "Validation error"
2355
+ }
2356
+ },
2357
+ "summary": "Delete an issue comment",
2358
+ "tags": []
2359
+ },
2360
+ "patch": {
2361
+ "callbacks": {},
2362
+ "deprecated": false,
2363
+ "description": "Requires the `harness:write` scope. Only the underlying authenticated author may edit a comment, within 15 minutes of creation. The author must also retain issue-comment capability, matching the UI. The body changes; attribution, metadata, reply target, mentions, and creation time do not. `actor` is accepted for CLI compatibility but ignored for ownership and attribution.",
2364
+ "parameters": [
2365
+ {
2366
+ "description": "Issue identifier, e.g. ALL-4901 or CLI-12 (issues minted before team-prefixed numbering carry IO-)",
2367
+ "in": "path",
2368
+ "name": "identifier",
2369
+ "required": true,
2370
+ "schema": {
2371
+ "type": "string"
2372
+ }
2373
+ },
2374
+ {
2375
+ "description": "Comment UUID",
2376
+ "in": "path",
2377
+ "name": "comment_id",
2378
+ "required": true,
2379
+ "schema": {
2380
+ "format": "uuid",
2381
+ "type": "string"
2382
+ }
2383
+ }
2384
+ ],
2385
+ "requestBody": {
2386
+ "content": {
2387
+ "application/json": {
2388
+ "schema": {
2389
+ "anyOf": [
2390
+ {
2391
+ "properties": {
2392
+ "actor": {
2393
+ "description": "Accepted for CLI compatibility; ignored because editing never changes attribution",
2394
+ "type": "string"
2395
+ },
2396
+ "body": {
2397
+ "description": "Replacement comment body; takes precedence when content is also present",
2398
+ "minLength": 1,
2399
+ "type": "string"
2400
+ },
2401
+ "content": {
2402
+ "description": "Alias for body",
2403
+ "minLength": 1,
2404
+ "type": "string"
2405
+ }
2406
+ },
2407
+ "required": [
2408
+ "body"
2409
+ ],
2410
+ "type": "object"
2411
+ },
2412
+ {
2413
+ "properties": {
2414
+ "actor": {
2415
+ "description": "Accepted for CLI compatibility; ignored because editing never changes attribution",
2416
+ "type": "string"
2417
+ },
2418
+ "body": {
2419
+ "description": "Replacement comment body; takes precedence when content is also present",
2420
+ "minLength": 1,
2421
+ "type": "string"
2422
+ },
2423
+ "content": {
2424
+ "description": "Alias for body",
2425
+ "minLength": 1,
2426
+ "type": "string"
2427
+ }
2428
+ },
2429
+ "required": [
2430
+ "content"
2431
+ ],
2432
+ "type": "object"
2433
+ }
2434
+ ]
2435
+ }
2436
+ }
2437
+ },
2438
+ "required": true
2439
+ },
2440
+ "responses": {
2441
+ "200": {
2442
+ "content": {
2443
+ "application/json": {
2444
+ "schema": {
2445
+ "properties": {
2446
+ "data": {
2447
+ "properties": {
2448
+ "author": {
2449
+ "nullable": true,
2450
+ "properties": {
2451
+ "email": {
2452
+ "nullable": true,
2453
+ "type": "string"
2454
+ },
2455
+ "id": {
2456
+ "format": "uuid",
2457
+ "nullable": true,
2458
+ "type": "string"
2459
+ },
2460
+ "name": {
2461
+ "nullable": true,
2462
+ "type": "string"
2463
+ }
2464
+ },
2465
+ "required": [
2466
+ "id",
2467
+ "name",
2468
+ "email"
2469
+ ],
2470
+ "type": "object"
2471
+ },
2472
+ "body": {
2473
+ "type": "string"
2474
+ },
2475
+ "deleted": {
2476
+ "type": "boolean"
2477
+ },
2478
+ "id": {
2479
+ "format": "uuid",
2480
+ "type": "string"
2481
+ },
2482
+ "inserted_at": {
2483
+ "format": "date-time",
2484
+ "type": "string"
2485
+ },
2486
+ "mentions": {
2487
+ "items": {
2488
+ "properties": {
2489
+ "email": {
2490
+ "nullable": true,
2491
+ "type": "string"
2492
+ },
2493
+ "name": {
2494
+ "nullable": true,
2495
+ "type": "string"
2496
+ },
2497
+ "user_id": {
2498
+ "format": "uuid",
2499
+ "nullable": true,
2500
+ "type": "string"
2501
+ }
2502
+ },
2503
+ "required": [
2504
+ "user_id",
2505
+ "name",
2506
+ "email"
2507
+ ],
2508
+ "type": "object"
2509
+ },
2510
+ "type": "array"
2511
+ },
2512
+ "reactions": {
2513
+ "items": {
2514
+ "properties": {
2515
+ "count": {
2516
+ "type": "integer"
2517
+ },
2518
+ "emoji": {
2519
+ "type": "string"
2520
+ },
2521
+ "reacted_by_current_actor": {
2522
+ "type": "boolean"
2523
+ }
2524
+ },
2525
+ "required": [
2526
+ "emoji",
2527
+ "count",
2528
+ "reacted_by_current_actor"
2529
+ ],
2530
+ "type": "object"
2531
+ },
2532
+ "type": "array"
2533
+ },
2534
+ "updated_at": {
2535
+ "format": "date-time",
2536
+ "type": "string"
2537
+ }
2538
+ },
2539
+ "required": [
2540
+ "id",
2541
+ "body",
2542
+ "deleted",
2543
+ "author",
2544
+ "mentions",
2545
+ "reactions",
2546
+ "inserted_at",
2547
+ "updated_at"
2548
+ ],
2549
+ "type": "object"
2550
+ }
2551
+ },
2552
+ "required": [
2553
+ "data"
2554
+ ],
2555
+ "type": "object"
2556
+ }
2557
+ }
2558
+ },
2559
+ "description": "Success"
2560
+ },
2561
+ "400": {
2562
+ "description": "Bad request"
2563
+ },
2564
+ "401": {
2565
+ "description": "Missing or invalid token"
2566
+ },
2567
+ "403": {
2568
+ "description": "Token not permitted (org-scoped, non-admin, or missing scope)"
2569
+ },
2570
+ "404": {
2571
+ "description": "Not found"
2572
+ },
2573
+ "409": {
2574
+ "description": "The 15-minute edit window has closed"
2575
+ },
2576
+ "422": {
2577
+ "description": "Validation error"
2578
+ }
2579
+ },
2580
+ "summary": "Edit an issue comment",
2581
+ "tags": []
2582
+ }
2583
+ },
2276
2584
  "/api/v1/model-keys": {
2277
2585
  "get": {
2278
2586
  "callbacks": {},
@@ -2502,6 +2810,144 @@
2502
2810
  },
2503
2811
  "summary": "Delete a relation",
2504
2812
  "tags": []
2813
+ },
2814
+ "patch": {
2815
+ "callbacks": {},
2816
+ "deprecated": false,
2817
+ "description": "Requires the `harness:write` scope.",
2818
+ "parameters": [
2819
+ {
2820
+ "description": "Issue identifier, e.g. ALL-4901 or CLI-12 (issues minted before team-prefixed numbering carry IO-)",
2821
+ "in": "path",
2822
+ "name": "identifier",
2823
+ "required": true,
2824
+ "schema": {
2825
+ "type": "string"
2826
+ }
2827
+ },
2828
+ {
2829
+ "description": "Resource id",
2830
+ "in": "path",
2831
+ "name": "id",
2832
+ "required": true,
2833
+ "schema": {
2834
+ "type": "string"
2835
+ }
2836
+ }
2837
+ ],
2838
+ "requestBody": {
2839
+ "content": {
2840
+ "application/json": {
2841
+ "schema": {
2842
+ "properties": {
2843
+ "type": {
2844
+ "description": "Direction from the issue in the request path",
2845
+ "enum": [
2846
+ "blocks",
2847
+ "blocked_by",
2848
+ "related",
2849
+ "duplicate_of"
2850
+ ],
2851
+ "type": "string"
2852
+ }
2853
+ },
2854
+ "required": [
2855
+ "type"
2856
+ ],
2857
+ "type": "object"
2858
+ }
2859
+ }
2860
+ },
2861
+ "required": true
2862
+ },
2863
+ "responses": {
2864
+ "200": {
2865
+ "content": {
2866
+ "application/json": {
2867
+ "schema": {
2868
+ "properties": {
2869
+ "data": {
2870
+ "properties": {
2871
+ "direction": {
2872
+ "enum": [
2873
+ "blocks",
2874
+ "blocked_by",
2875
+ "related",
2876
+ "duplicate_of",
2877
+ "duplicated_by"
2878
+ ],
2879
+ "type": "string"
2880
+ },
2881
+ "id": {
2882
+ "format": "uuid",
2883
+ "type": "string"
2884
+ },
2885
+ "inserted_at": {
2886
+ "format": "date-time",
2887
+ "type": "string"
2888
+ },
2889
+ "issue": {
2890
+ "type": "string"
2891
+ },
2892
+ "other_issue": {
2893
+ "type": "string"
2894
+ },
2895
+ "related_issue": {
2896
+ "type": "string"
2897
+ },
2898
+ "type": {
2899
+ "enum": [
2900
+ "blocks",
2901
+ "related",
2902
+ "duplicate"
2903
+ ],
2904
+ "type": "string"
2905
+ },
2906
+ "updated_at": {
2907
+ "format": "date-time",
2908
+ "type": "string"
2909
+ }
2910
+ },
2911
+ "required": [
2912
+ "id",
2913
+ "type",
2914
+ "issue",
2915
+ "related_issue",
2916
+ "direction",
2917
+ "other_issue",
2918
+ "inserted_at",
2919
+ "updated_at"
2920
+ ],
2921
+ "type": "object"
2922
+ }
2923
+ },
2924
+ "required": [
2925
+ "data"
2926
+ ],
2927
+ "type": "object"
2928
+ }
2929
+ }
2930
+ },
2931
+ "description": "Success"
2932
+ },
2933
+ "400": {
2934
+ "description": "Bad request"
2935
+ },
2936
+ "401": {
2937
+ "description": "Missing or invalid token"
2938
+ },
2939
+ "403": {
2940
+ "description": "Token not permitted (org-scoped, non-admin, or missing scope)"
2941
+ },
2942
+ "404": {
2943
+ "description": "Not found"
2944
+ },
2945
+ "422": {
2946
+ "description": "Validation error"
2947
+ }
2948
+ },
2949
+ "summary": "Update a relation",
2950
+ "tags": []
2505
2951
  }
2506
2952
  },
2507
2953
  "/api/v1/issues/{identifier}/links/{id}": {
@@ -2551,6 +2997,127 @@
2551
2997
  },
2552
2998
  "summary": "Delete a link",
2553
2999
  "tags": []
3000
+ },
3001
+ "patch": {
3002
+ "callbacks": {},
3003
+ "deprecated": false,
3004
+ "description": "Requires the `harness:write` scope.",
3005
+ "parameters": [
3006
+ {
3007
+ "description": "Issue identifier, e.g. ALL-4901 or CLI-12 (issues minted before team-prefixed numbering carry IO-)",
3008
+ "in": "path",
3009
+ "name": "identifier",
3010
+ "required": true,
3011
+ "schema": {
3012
+ "type": "string"
3013
+ }
3014
+ },
3015
+ {
3016
+ "description": "Resource id",
3017
+ "in": "path",
3018
+ "name": "id",
3019
+ "required": true,
3020
+ "schema": {
3021
+ "type": "string"
3022
+ }
3023
+ }
3024
+ ],
3025
+ "requestBody": {
3026
+ "content": {
3027
+ "application/json": {
3028
+ "schema": {
3029
+ "properties": {
3030
+ "expected_url": {
3031
+ "description": "Optional optimistic precondition; mismatch returns 409",
3032
+ "type": "string"
3033
+ },
3034
+ "title": {
3035
+ "type": "string"
3036
+ },
3037
+ "url": {
3038
+ "description": "http(s) URL",
3039
+ "type": "string"
3040
+ }
3041
+ },
3042
+ "type": "object"
3043
+ }
3044
+ }
3045
+ },
3046
+ "required": true
3047
+ },
3048
+ "responses": {
3049
+ "200": {
3050
+ "content": {
3051
+ "application/json": {
3052
+ "schema": {
3053
+ "properties": {
3054
+ "data": {
3055
+ "properties": {
3056
+ "id": {
3057
+ "format": "uuid",
3058
+ "type": "string"
3059
+ },
3060
+ "inserted_at": {
3061
+ "format": "date-time",
3062
+ "type": "string"
3063
+ },
3064
+ "issue_id": {
3065
+ "format": "uuid",
3066
+ "type": "string"
3067
+ },
3068
+ "title": {
3069
+ "nullable": true,
3070
+ "type": "string"
3071
+ },
3072
+ "updated_at": {
3073
+ "format": "date-time",
3074
+ "type": "string"
3075
+ },
3076
+ "url": {
3077
+ "type": "string"
3078
+ }
3079
+ },
3080
+ "required": [
3081
+ "id",
3082
+ "url",
3083
+ "title",
3084
+ "issue_id",
3085
+ "inserted_at",
3086
+ "updated_at"
3087
+ ],
3088
+ "type": "object"
3089
+ }
3090
+ },
3091
+ "required": [
3092
+ "data"
3093
+ ],
3094
+ "type": "object"
3095
+ }
3096
+ }
3097
+ },
3098
+ "description": "Success"
3099
+ },
3100
+ "400": {
3101
+ "description": "Bad request"
3102
+ },
3103
+ "401": {
3104
+ "description": "Missing or invalid token"
3105
+ },
3106
+ "403": {
3107
+ "description": "Token not permitted (org-scoped, non-admin, or missing scope)"
3108
+ },
3109
+ "404": {
3110
+ "description": "Not found"
3111
+ },
3112
+ "409": {
3113
+ "description": "The link URL changed after the client resolved it"
3114
+ },
3115
+ "422": {
3116
+ "description": "Validation error"
3117
+ }
3118
+ },
3119
+ "summary": "Update a link",
3120
+ "tags": []
2554
3121
  }
2555
3122
  },
2556
3123
  "/api/v1/issues/{identifier}/relations": {