@oneharness/sdk 0.12.2 → 0.13.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.
@@ -149,6 +149,12 @@
149
149
  "kind": "value",
150
150
  "unless": null
151
151
  },
152
+ {
153
+ "option": "serverOverloadedMaxRetries",
154
+ "flag": "--server-overloaded-max-retries",
155
+ "kind": "value",
156
+ "unless": null
157
+ },
152
158
  {
153
159
  "option": "outputDir",
154
160
  "flag": "--output-dir",
@@ -436,6 +442,12 @@
436
442
  "kind": "value",
437
443
  "unless": null
438
444
  },
445
+ {
446
+ "option": "serverOverloadedMaxRetries",
447
+ "flag": "--server-overloaded-max-retries",
448
+ "kind": "value",
449
+ "unless": null
450
+ },
439
451
  {
440
452
  "option": "outputDir",
441
453
  "flag": "--output-dir",
@@ -1796,7 +1808,7 @@
1796
1808
  ]
1797
1809
  },
1798
1810
  "FailureKind": {
1799
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
1811
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
1800
1812
  "oneOf": [
1801
1813
  {
1802
1814
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -1842,6 +1854,11 @@
1842
1854
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
1843
1855
  "type": "string",
1844
1856
  "const": "model_mismatch"
1857
+ },
1858
+ {
1859
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
1860
+ "type": "string",
1861
+ "const": "server_overloaded"
1845
1862
  }
1846
1863
  ]
1847
1864
  },
@@ -1923,6 +1940,11 @@
1923
1940
  "description": "This candidate is rate limited and cannot serve the request right now.",
1924
1941
  "type": "string",
1925
1942
  "const": "rate-limit"
1943
+ },
1944
+ {
1945
+ "description": "Codex serving capacity remained exhausted after local retries.",
1946
+ "type": "string",
1947
+ "const": "server-overloaded"
1926
1948
  }
1927
1949
  ]
1928
1950
  },
@@ -2072,7 +2094,7 @@
2072
2094
  "format": "int32"
2073
2095
  },
2074
2096
  "failure_kind": {
2075
- "description": "Best-effort failure reason; `null` when unclassified. Distinct from\n`status`, which records oneharness's relationship to the process. Two\nfamilies: coarse reasons for a non-zero run (`auth`, `rate_limit`,\n`model_not_found`, `quota`, `session_not_found`, `untrusted_directory`,\n`input_too_large`, `model_mismatch`), and `tool_deferred` — a run that exited\n*cleanly* but only deferred a builtin tool call instead of executing it\n(Claude Code bridge/managed deployments), so it did no useful work. The\ndeferred case is the only `failure_kind` that can appear on a `status: ok`\nrun, and it also marks the run as failed for exit-code purposes.\nSerialized as its snake_case token (see [`FailureKind`]).",
2097
+ "description": "Best-effort failure reason; `null` when unclassified. Distinct from\n`status`, which records oneharness's relationship to the process. Two\nfamilies: coarse reasons for a non-zero run (`auth`, `rate_limit`,\n`model_not_found`, `quota`, `session_not_found`, `untrusted_directory`,\n`input_too_large`, `model_mismatch`, `server_overloaded`), and\n`tool_deferred` — a run that only deferred a builtin tool call instead of\nexecuting it (Claude Code bridge/managed deployments), so it did no useful\nwork. Both `tool_deferred` and `server_overloaded` can accompany a clean\ntransport exit; either still marks the run as failed for exit-code purposes.\nSerialized as its snake_case token (see [`FailureKind`]).",
2076
2098
  "anyOf": [
2077
2099
  {
2078
2100
  "$ref": "#/$defs/FailureKind"
@@ -2867,7 +2889,7 @@
2867
2889
  ]
2868
2890
  },
2869
2891
  "FailureKind": {
2870
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
2892
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
2871
2893
  "oneOf": [
2872
2894
  {
2873
2895
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -2913,6 +2935,11 @@
2913
2935
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
2914
2936
  "type": "string",
2915
2937
  "const": "model_mismatch"
2938
+ },
2939
+ {
2940
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
2941
+ "type": "string",
2942
+ "const": "server_overloaded"
2916
2943
  }
2917
2944
  ]
2918
2945
  },
@@ -2994,6 +3021,11 @@
2994
3021
  "description": "This candidate is rate limited and cannot serve the request right now.",
2995
3022
  "type": "string",
2996
3023
  "const": "rate-limit"
3024
+ },
3025
+ {
3026
+ "description": "Codex serving capacity remained exhausted after local retries.",
3027
+ "type": "string",
3028
+ "const": "server-overloaded"
2997
3029
  }
2998
3030
  ]
2999
3031
  },
@@ -3307,7 +3339,7 @@
3307
3339
  "format": "int32"
3308
3340
  },
3309
3341
  "failure_kind": {
3310
- "description": "Best-effort failure reason; `null` when unclassified. Distinct from\n`status`, which records oneharness's relationship to the process. Two\nfamilies: coarse reasons for a non-zero run (`auth`, `rate_limit`,\n`model_not_found`, `quota`, `session_not_found`, `untrusted_directory`,\n`input_too_large`, `model_mismatch`), and `tool_deferred` — a run that exited\n*cleanly* but only deferred a builtin tool call instead of executing it\n(Claude Code bridge/managed deployments), so it did no useful work. The\ndeferred case is the only `failure_kind` that can appear on a `status: ok`\nrun, and it also marks the run as failed for exit-code purposes.\nSerialized as its snake_case token (see [`FailureKind`]).",
3342
+ "description": "Best-effort failure reason; `null` when unclassified. Distinct from\n`status`, which records oneharness's relationship to the process. Two\nfamilies: coarse reasons for a non-zero run (`auth`, `rate_limit`,\n`model_not_found`, `quota`, `session_not_found`, `untrusted_directory`,\n`input_too_large`, `model_mismatch`, `server_overloaded`), and\n`tool_deferred` — a run that only deferred a builtin tool call instead of\nexecuting it (Claude Code bridge/managed deployments), so it did no useful\nwork. Both `tool_deferred` and `server_overloaded` can accompany a clean\ntransport exit; either still marks the run as failed for exit-code purposes.\nSerialized as its snake_case token (see [`FailureKind`]).",
3311
3343
  "anyOf": [
3312
3344
  {
3313
3345
  "$ref": "#/$defs/FailureKind"
@@ -3845,6 +3877,12 @@
3845
3877
  "format": "uint32",
3846
3878
  "minimum": 0
3847
3879
  },
3880
+ "serverOverloadedMaxRetries": {
3881
+ "description": "Max retries for a zero-work Codex server-overloaded refusal.",
3882
+ "type": "integer",
3883
+ "format": "uint32",
3884
+ "minimum": 0
3885
+ },
3848
3886
  "session": {
3849
3887
  "type": "string"
3850
3888
  },
@@ -4212,7 +4250,8 @@
4212
4250
  "1.5",
4213
4251
  "1.6",
4214
4252
  "1.7",
4215
- "1.8"
4253
+ "1.8",
4254
+ "1.9"
4216
4255
  ]
4217
4256
  },
4218
4257
  "type": {
@@ -4332,7 +4371,8 @@
4332
4371
  "1.5",
4333
4372
  "1.6",
4334
4373
  "1.7",
4335
- "1.8"
4374
+ "1.8",
4375
+ "1.9"
4336
4376
  ]
4337
4377
  }
4338
4378
  },
@@ -4393,7 +4433,8 @@
4393
4433
  "type": "string",
4394
4434
  "enum": [
4395
4435
  "1.7",
4396
- "1.8"
4436
+ "1.8",
4437
+ "1.9"
4397
4438
  ]
4398
4439
  },
4399
4440
  "status": {
@@ -4439,7 +4480,8 @@
4439
4480
  "schema_version": {
4440
4481
  "type": "string",
4441
4482
  "enum": [
4442
- "1.8"
4483
+ "1.8",
4484
+ "1.9"
4443
4485
  ]
4444
4486
  }
4445
4487
  },
@@ -4477,7 +4519,8 @@
4477
4519
  "1.5",
4478
4520
  "1.6",
4479
4521
  "1.7",
4480
- "1.8"
4522
+ "1.8",
4523
+ "1.9"
4481
4524
  ]
4482
4525
  }
4483
4526
  }
@@ -4501,6 +4544,7 @@
4501
4544
  "untrusted_directory",
4502
4545
  "input_too_large",
4503
4546
  "model_mismatch",
4547
+ "server_overloaded",
4504
4548
  null
4505
4549
  ]
4506
4550
  }
@@ -4515,7 +4559,8 @@
4515
4559
  "1.5",
4516
4560
  "1.6",
4517
4561
  "1.7",
4518
- "1.8"
4562
+ "1.8",
4563
+ "1.9"
4519
4564
  ]
4520
4565
  }
4521
4566
  }
@@ -4536,6 +4581,7 @@
4536
4581
  "session_not_found",
4537
4582
  "tool_deferred",
4538
4583
  "model_mismatch",
4584
+ "server_overloaded",
4539
4585
  null
4540
4586
  ]
4541
4587
  }
@@ -4549,7 +4595,8 @@
4549
4595
  "enum": [
4550
4596
  "1.6",
4551
4597
  "1.7",
4552
- "1.8"
4598
+ "1.8",
4599
+ "1.9"
4553
4600
  ]
4554
4601
  }
4555
4602
  }
@@ -4571,6 +4618,7 @@
4571
4618
  "tool_deferred",
4572
4619
  "untrusted_directory",
4573
4620
  "input_too_large",
4621
+ "server_overloaded",
4574
4622
  null
4575
4623
  ]
4576
4624
  }
@@ -4582,7 +4630,42 @@
4582
4630
  "schema_version": {
4583
4631
  "type": "string",
4584
4632
  "enum": [
4585
- "1.8"
4633
+ "1.8",
4634
+ "1.9"
4635
+ ]
4636
+ }
4637
+ }
4638
+ }
4639
+ ]
4640
+ },
4641
+ {
4642
+ "anyOf": [
4643
+ {
4644
+ "type": "object",
4645
+ "properties": {
4646
+ "failure_kind": {
4647
+ "enum": [
4648
+ "auth",
4649
+ "rate_limit",
4650
+ "model_not_found",
4651
+ "quota",
4652
+ "session_not_found",
4653
+ "tool_deferred",
4654
+ "untrusted_directory",
4655
+ "input_too_large",
4656
+ "model_mismatch",
4657
+ null
4658
+ ]
4659
+ }
4660
+ }
4661
+ },
4662
+ {
4663
+ "type": "object",
4664
+ "properties": {
4665
+ "schema_version": {
4666
+ "type": "string",
4667
+ "enum": [
4668
+ "1.9"
4586
4669
  ]
4587
4670
  }
4588
4671
  }
@@ -4691,7 +4774,8 @@
4691
4774
  "1.5",
4692
4775
  "1.6",
4693
4776
  "1.7",
4694
- "1.8"
4777
+ "1.8",
4778
+ "1.9"
4695
4779
  ]
4696
4780
  },
4697
4781
  "session": {
@@ -4895,7 +4979,8 @@
4895
4979
  "1.5",
4896
4980
  "1.6",
4897
4981
  "1.7",
4898
- "1.8"
4982
+ "1.8",
4983
+ "1.9"
4899
4984
  ]
4900
4985
  },
4901
4986
  "session": {
@@ -5097,7 +5182,8 @@
5097
5182
  "1.5",
5098
5183
  "1.6",
5099
5184
  "1.7",
5100
- "1.8"
5185
+ "1.8",
5186
+ "1.9"
5101
5187
  ]
5102
5188
  },
5103
5189
  "session": {
@@ -5280,7 +5366,8 @@
5280
5366
  "1.5",
5281
5367
  "1.6",
5282
5368
  "1.7",
5283
- "1.8"
5369
+ "1.8",
5370
+ "1.9"
5284
5371
  ]
5285
5372
  },
5286
5373
  "session": {
@@ -5462,7 +5549,8 @@
5462
5549
  "1.5",
5463
5550
  "1.6",
5464
5551
  "1.7",
5465
- "1.8"
5552
+ "1.8",
5553
+ "1.9"
5466
5554
  ]
5467
5555
  },
5468
5556
  "session": {
@@ -5661,7 +5749,8 @@
5661
5749
  "1.5",
5662
5750
  "1.6",
5663
5751
  "1.7",
5664
- "1.8"
5752
+ "1.8",
5753
+ "1.9"
5665
5754
  ]
5666
5755
  },
5667
5756
  "session": {
@@ -5851,7 +5940,7 @@
5851
5940
  ]
5852
5941
  },
5853
5942
  "FailureKind": {
5854
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
5943
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
5855
5944
  "oneOf": [
5856
5945
  {
5857
5946
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -5897,6 +5986,11 @@
5897
5986
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
5898
5987
  "type": "string",
5899
5988
  "const": "model_mismatch"
5989
+ },
5990
+ {
5991
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
5992
+ "type": "string",
5993
+ "const": "server_overloaded"
5900
5994
  }
5901
5995
  ]
5902
5996
  },
@@ -6123,7 +6217,8 @@
6123
6217
  "1.5",
6124
6218
  "1.6",
6125
6219
  "1.7",
6126
- "1.8"
6220
+ "1.8",
6221
+ "1.9"
6127
6222
  ]
6128
6223
  }
6129
6224
  },
@@ -6184,7 +6279,8 @@
6184
6279
  "type": "string",
6185
6280
  "enum": [
6186
6281
  "1.7",
6187
- "1.8"
6282
+ "1.8",
6283
+ "1.9"
6188
6284
  ]
6189
6285
  },
6190
6286
  "status": {
@@ -6230,7 +6326,8 @@
6230
6326
  "schema_version": {
6231
6327
  "type": "string",
6232
6328
  "enum": [
6233
- "1.8"
6329
+ "1.8",
6330
+ "1.9"
6234
6331
  ]
6235
6332
  }
6236
6333
  },
@@ -6268,7 +6365,8 @@
6268
6365
  "1.5",
6269
6366
  "1.6",
6270
6367
  "1.7",
6271
- "1.8"
6368
+ "1.8",
6369
+ "1.9"
6272
6370
  ]
6273
6371
  }
6274
6372
  }
@@ -6292,6 +6390,7 @@
6292
6390
  "untrusted_directory",
6293
6391
  "input_too_large",
6294
6392
  "model_mismatch",
6393
+ "server_overloaded",
6295
6394
  null
6296
6395
  ]
6297
6396
  }
@@ -6306,7 +6405,8 @@
6306
6405
  "1.5",
6307
6406
  "1.6",
6308
6407
  "1.7",
6309
- "1.8"
6408
+ "1.8",
6409
+ "1.9"
6310
6410
  ]
6311
6411
  }
6312
6412
  }
@@ -6327,6 +6427,7 @@
6327
6427
  "session_not_found",
6328
6428
  "tool_deferred",
6329
6429
  "model_mismatch",
6430
+ "server_overloaded",
6330
6431
  null
6331
6432
  ]
6332
6433
  }
@@ -6340,7 +6441,43 @@
6340
6441
  "enum": [
6341
6442
  "1.6",
6342
6443
  "1.7",
6343
- "1.8"
6444
+ "1.8",
6445
+ "1.9"
6446
+ ]
6447
+ }
6448
+ }
6449
+ }
6450
+ ]
6451
+ },
6452
+ {
6453
+ "anyOf": [
6454
+ {
6455
+ "type": "object",
6456
+ "properties": {
6457
+ "failure_kind": {
6458
+ "enum": [
6459
+ "auth",
6460
+ "rate_limit",
6461
+ "model_not_found",
6462
+ "quota",
6463
+ "session_not_found",
6464
+ "tool_deferred",
6465
+ "untrusted_directory",
6466
+ "input_too_large",
6467
+ "server_overloaded",
6468
+ null
6469
+ ]
6470
+ }
6471
+ }
6472
+ },
6473
+ {
6474
+ "type": "object",
6475
+ "properties": {
6476
+ "schema_version": {
6477
+ "type": "string",
6478
+ "enum": [
6479
+ "1.8",
6480
+ "1.9"
6344
6481
  ]
6345
6482
  }
6346
6483
  }
@@ -6362,6 +6499,7 @@
6362
6499
  "tool_deferred",
6363
6500
  "untrusted_directory",
6364
6501
  "input_too_large",
6502
+ "model_mismatch",
6365
6503
  null
6366
6504
  ]
6367
6505
  }
@@ -6373,7 +6511,7 @@
6373
6511
  "schema_version": {
6374
6512
  "type": "string",
6375
6513
  "enum": [
6376
- "1.8"
6514
+ "1.9"
6377
6515
  ]
6378
6516
  }
6379
6517
  }
@@ -6663,7 +6801,8 @@
6663
6801
  "1.5",
6664
6802
  "1.6",
6665
6803
  "1.7",
6666
- "1.8"
6804
+ "1.8",
6805
+ "1.9"
6667
6806
  ]
6668
6807
  },
6669
6808
  "session": {
@@ -7303,7 +7442,8 @@
7303
7442
  "1.5",
7304
7443
  "1.6",
7305
7444
  "1.7",
7306
- "1.8"
7445
+ "1.8",
7446
+ "1.9"
7307
7447
  ]
7308
7448
  },
7309
7449
  "session": {
@@ -7500,7 +7640,8 @@
7500
7640
  "1.5",
7501
7641
  "1.6",
7502
7642
  "1.7",
7503
- "1.8"
7643
+ "1.8",
7644
+ "1.9"
7504
7645
  ]
7505
7646
  },
7506
7647
  "session": {
@@ -7695,7 +7836,8 @@
7695
7836
  "1.5",
7696
7837
  "1.6",
7697
7838
  "1.7",
7698
- "1.8"
7839
+ "1.8",
7840
+ "1.9"
7699
7841
  ]
7700
7842
  },
7701
7843
  "session": {
@@ -7891,7 +8033,8 @@
7891
8033
  "1.5",
7892
8034
  "1.6",
7893
8035
  "1.7",
7894
- "1.8"
8036
+ "1.8",
8037
+ "1.9"
7895
8038
  ]
7896
8039
  },
7897
8040
  "session": {
@@ -8799,7 +8942,7 @@
8799
8942
  ]
8800
8943
  },
8801
8944
  "FailureKind": {
8802
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
8945
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
8803
8946
  "oneOf": [
8804
8947
  {
8805
8948
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -8845,6 +8988,11 @@
8845
8988
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
8846
8989
  "type": "string",
8847
8990
  "const": "model_mismatch"
8991
+ },
8992
+ {
8993
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
8994
+ "type": "string",
8995
+ "const": "server_overloaded"
8848
8996
  }
8849
8997
  ]
8850
8998
  },
@@ -9178,7 +9326,7 @@
9178
9326
  ]
9179
9327
  },
9180
9328
  "FailureKind": {
9181
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9329
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9182
9330
  "oneOf": [
9183
9331
  {
9184
9332
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -9224,6 +9372,11 @@
9224
9372
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
9225
9373
  "type": "string",
9226
9374
  "const": "model_mismatch"
9375
+ },
9376
+ {
9377
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
9378
+ "type": "string",
9379
+ "const": "server_overloaded"
9227
9380
  }
9228
9381
  ]
9229
9382
  },
@@ -9262,7 +9415,8 @@
9262
9415
  "1.5",
9263
9416
  "1.6",
9264
9417
  "1.7",
9265
- "1.8"
9418
+ "1.8",
9419
+ "1.9"
9266
9420
  ]
9267
9421
  },
9268
9422
  "variant": {
@@ -9388,7 +9542,8 @@
9388
9542
  "1.5",
9389
9543
  "1.6",
9390
9544
  "1.7",
9391
- "1.8"
9545
+ "1.8",
9546
+ "1.9"
9392
9547
  ]
9393
9548
  }
9394
9549
  },
@@ -9449,7 +9604,8 @@
9449
9604
  "type": "string",
9450
9605
  "enum": [
9451
9606
  "1.7",
9452
- "1.8"
9607
+ "1.8",
9608
+ "1.9"
9453
9609
  ]
9454
9610
  },
9455
9611
  "status": {
@@ -9495,7 +9651,8 @@
9495
9651
  "schema_version": {
9496
9652
  "type": "string",
9497
9653
  "enum": [
9498
- "1.8"
9654
+ "1.8",
9655
+ "1.9"
9499
9656
  ]
9500
9657
  }
9501
9658
  },
@@ -9533,7 +9690,8 @@
9533
9690
  "1.5",
9534
9691
  "1.6",
9535
9692
  "1.7",
9536
- "1.8"
9693
+ "1.8",
9694
+ "1.9"
9537
9695
  ]
9538
9696
  }
9539
9697
  }
@@ -9557,6 +9715,7 @@
9557
9715
  "untrusted_directory",
9558
9716
  "input_too_large",
9559
9717
  "model_mismatch",
9718
+ "server_overloaded",
9560
9719
  null
9561
9720
  ]
9562
9721
  }
@@ -9571,7 +9730,8 @@
9571
9730
  "1.5",
9572
9731
  "1.6",
9573
9732
  "1.7",
9574
- "1.8"
9733
+ "1.8",
9734
+ "1.9"
9575
9735
  ]
9576
9736
  }
9577
9737
  }
@@ -9592,6 +9752,7 @@
9592
9752
  "session_not_found",
9593
9753
  "tool_deferred",
9594
9754
  "model_mismatch",
9755
+ "server_overloaded",
9595
9756
  null
9596
9757
  ]
9597
9758
  }
@@ -9605,7 +9766,8 @@
9605
9766
  "enum": [
9606
9767
  "1.6",
9607
9768
  "1.7",
9608
- "1.8"
9769
+ "1.8",
9770
+ "1.9"
9609
9771
  ]
9610
9772
  }
9611
9773
  }
@@ -9627,6 +9789,7 @@
9627
9789
  "tool_deferred",
9628
9790
  "untrusted_directory",
9629
9791
  "input_too_large",
9792
+ "server_overloaded",
9630
9793
  null
9631
9794
  ]
9632
9795
  }
@@ -9638,7 +9801,42 @@
9638
9801
  "schema_version": {
9639
9802
  "type": "string",
9640
9803
  "enum": [
9641
- "1.8"
9804
+ "1.8",
9805
+ "1.9"
9806
+ ]
9807
+ }
9808
+ }
9809
+ }
9810
+ ]
9811
+ },
9812
+ {
9813
+ "anyOf": [
9814
+ {
9815
+ "type": "object",
9816
+ "properties": {
9817
+ "failure_kind": {
9818
+ "enum": [
9819
+ "auth",
9820
+ "rate_limit",
9821
+ "model_not_found",
9822
+ "quota",
9823
+ "session_not_found",
9824
+ "tool_deferred",
9825
+ "untrusted_directory",
9826
+ "input_too_large",
9827
+ "model_mismatch",
9828
+ null
9829
+ ]
9830
+ }
9831
+ }
9832
+ },
9833
+ {
9834
+ "type": "object",
9835
+ "properties": {
9836
+ "schema_version": {
9837
+ "type": "string",
9838
+ "enum": [
9839
+ "1.9"
9642
9840
  ]
9643
9841
  }
9644
9842
  }
@@ -9928,7 +10126,8 @@
9928
10126
  "1.5",
9929
10127
  "1.6",
9930
10128
  "1.7",
9931
- "1.8"
10129
+ "1.8",
10130
+ "1.9"
9932
10131
  ]
9933
10132
  },
9934
10133
  "session": {
@@ -10568,7 +10767,8 @@
10568
10767
  "1.5",
10569
10768
  "1.6",
10570
10769
  "1.7",
10571
- "1.8"
10770
+ "1.8",
10771
+ "1.9"
10572
10772
  ]
10573
10773
  },
10574
10774
  "session": {
@@ -10765,7 +10965,8 @@
10765
10965
  "1.5",
10766
10966
  "1.6",
10767
10967
  "1.7",
10768
- "1.8"
10968
+ "1.8",
10969
+ "1.9"
10769
10970
  ]
10770
10971
  },
10771
10972
  "session": {
@@ -10960,7 +11161,8 @@
10960
11161
  "1.5",
10961
11162
  "1.6",
10962
11163
  "1.7",
10963
- "1.8"
11164
+ "1.8",
11165
+ "1.9"
10964
11166
  ]
10965
11167
  },
10966
11168
  "session": {
@@ -11156,7 +11358,8 @@
11156
11358
  "1.5",
11157
11359
  "1.6",
11158
11360
  "1.7",
11159
- "1.8"
11361
+ "1.8",
11362
+ "1.9"
11160
11363
  ]
11161
11364
  },
11162
11365
  "session": {
@@ -12245,7 +12448,7 @@
12245
12448
  ]
12246
12449
  },
12247
12450
  "FailureKind": {
12248
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
12451
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
12249
12452
  "oneOf": [
12250
12453
  {
12251
12454
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -12291,6 +12494,11 @@
12291
12494
  "description": "The harness reported it would run the conversation under a model other\nthan the one requested, and oneharness refused the turn before it\nstarted (codex's app-server names the thread's model on its\n`thread/start` / `thread/resume` response, before any token is spent).\nThe third precondition refusal: no work was done, no token was spent, and\nthe next identity may honour the model.",
12292
12495
  "type": "string",
12293
12496
  "const": "model_mismatch"
12497
+ },
12498
+ {
12499
+ "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
12500
+ "type": "string",
12501
+ "const": "server_overloaded"
12294
12502
  }
12295
12503
  ]
12296
12504
  },
@@ -12342,7 +12550,8 @@
12342
12550
  "1.5",
12343
12551
  "1.6",
12344
12552
  "1.7",
12345
- "1.8"
12553
+ "1.8",
12554
+ "1.9"
12346
12555
  ]
12347
12556
  }
12348
12557
  },
@@ -12403,7 +12612,8 @@
12403
12612
  "type": "string",
12404
12613
  "enum": [
12405
12614
  "1.7",
12406
- "1.8"
12615
+ "1.8",
12616
+ "1.9"
12407
12617
  ]
12408
12618
  },
12409
12619
  "status": {
@@ -12449,7 +12659,8 @@
12449
12659
  "schema_version": {
12450
12660
  "type": "string",
12451
12661
  "enum": [
12452
- "1.8"
12662
+ "1.8",
12663
+ "1.9"
12453
12664
  ]
12454
12665
  }
12455
12666
  },
@@ -12487,7 +12698,8 @@
12487
12698
  "1.5",
12488
12699
  "1.6",
12489
12700
  "1.7",
12490
- "1.8"
12701
+ "1.8",
12702
+ "1.9"
12491
12703
  ]
12492
12704
  }
12493
12705
  }
@@ -12511,6 +12723,7 @@
12511
12723
  "untrusted_directory",
12512
12724
  "input_too_large",
12513
12725
  "model_mismatch",
12726
+ "server_overloaded",
12514
12727
  null
12515
12728
  ]
12516
12729
  }
@@ -12525,7 +12738,8 @@
12525
12738
  "1.5",
12526
12739
  "1.6",
12527
12740
  "1.7",
12528
- "1.8"
12741
+ "1.8",
12742
+ "1.9"
12529
12743
  ]
12530
12744
  }
12531
12745
  }
@@ -12546,6 +12760,7 @@
12546
12760
  "session_not_found",
12547
12761
  "tool_deferred",
12548
12762
  "model_mismatch",
12763
+ "server_overloaded",
12549
12764
  null
12550
12765
  ]
12551
12766
  }
@@ -12559,7 +12774,43 @@
12559
12774
  "enum": [
12560
12775
  "1.6",
12561
12776
  "1.7",
12562
- "1.8"
12777
+ "1.8",
12778
+ "1.9"
12779
+ ]
12780
+ }
12781
+ }
12782
+ }
12783
+ ]
12784
+ },
12785
+ {
12786
+ "anyOf": [
12787
+ {
12788
+ "type": "object",
12789
+ "properties": {
12790
+ "failure_kind": {
12791
+ "enum": [
12792
+ "auth",
12793
+ "rate_limit",
12794
+ "model_not_found",
12795
+ "quota",
12796
+ "session_not_found",
12797
+ "tool_deferred",
12798
+ "untrusted_directory",
12799
+ "input_too_large",
12800
+ "server_overloaded",
12801
+ null
12802
+ ]
12803
+ }
12804
+ }
12805
+ },
12806
+ {
12807
+ "type": "object",
12808
+ "properties": {
12809
+ "schema_version": {
12810
+ "type": "string",
12811
+ "enum": [
12812
+ "1.8",
12813
+ "1.9"
12563
12814
  ]
12564
12815
  }
12565
12816
  }
@@ -12581,6 +12832,7 @@
12581
12832
  "tool_deferred",
12582
12833
  "untrusted_directory",
12583
12834
  "input_too_large",
12835
+ "model_mismatch",
12584
12836
  null
12585
12837
  ]
12586
12838
  }
@@ -12592,7 +12844,7 @@
12592
12844
  "schema_version": {
12593
12845
  "type": "string",
12594
12846
  "enum": [
12595
- "1.8"
12847
+ "1.9"
12596
12848
  ]
12597
12849
  }
12598
12850
  }
@@ -12882,7 +13134,8 @@
12882
13134
  "1.5",
12883
13135
  "1.6",
12884
13136
  "1.7",
12885
- "1.8"
13137
+ "1.8",
13138
+ "1.9"
12886
13139
  ]
12887
13140
  },
12888
13141
  "session": {
@@ -13522,7 +13775,8 @@
13522
13775
  "1.5",
13523
13776
  "1.6",
13524
13777
  "1.7",
13525
- "1.8"
13778
+ "1.8",
13779
+ "1.9"
13526
13780
  ]
13527
13781
  },
13528
13782
  "session": {
@@ -13719,7 +13973,8 @@
13719
13973
  "1.5",
13720
13974
  "1.6",
13721
13975
  "1.7",
13722
- "1.8"
13976
+ "1.8",
13977
+ "1.9"
13723
13978
  ]
13724
13979
  },
13725
13980
  "session": {
@@ -13914,7 +14169,8 @@
13914
14169
  "1.5",
13915
14170
  "1.6",
13916
14171
  "1.7",
13917
- "1.8"
14172
+ "1.8",
14173
+ "1.9"
13918
14174
  ]
13919
14175
  },
13920
14176
  "session": {
@@ -14110,7 +14366,8 @@
14110
14366
  "1.5",
14111
14367
  "1.6",
14112
14368
  "1.7",
14113
- "1.8"
14369
+ "1.8",
14370
+ "1.9"
14114
14371
  ]
14115
14372
  },
14116
14373
  "session": {
@@ -15730,6 +15987,9 @@
15730
15987
  "schema_version": {
15731
15988
  "type": "string"
15732
15989
  },
15990
+ "server_overloaded_max_retries": {
15991
+ "$ref": "#/$defs/Field7"
15992
+ },
15733
15993
  "stream": {
15734
15994
  "description": "Whether config asks every `run` to stream (`--stream` / ONEHARNESS_STREAM);\ndefaults to false, the built-in buffered report.",
15735
15995
  "$ref": "#/$defs/Field"
@@ -15758,6 +16018,7 @@
15758
16018
  "stream",
15759
16019
  "schema_file",
15760
16020
  "schema_max_retries",
16021
+ "server_overloaded_max_retries",
15761
16022
  "max_parallel",
15762
16023
  "run_mode",
15763
16024
  "require_available",