deepdebug-local-agent 1.3.0 → 1.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.
Files changed (108) hide show
  1. package/.github/workflows/deploy-gcp.yml +58 -26
  2. package/CHANGELOG.md +6 -0
  3. package/docs/la-protocol-v2.md +68 -0
  4. package/package.json +2 -1
  5. package/scripts/sync-la-protocol-v2-contract.mjs +58 -0
  6. package/src/la-protocol-v2/chunks.js +45 -0
  7. package/src/la-protocol-v2/config.js +27 -0
  8. package/src/la-protocol-v2/content.js +57 -0
  9. package/src/la-protocol-v2/contract/CONTRACT_SOURCE.json +81 -0
  10. package/src/la-protocol-v2/contract/README.md +103 -0
  11. package/src/la-protocol-v2/contract/ack.schema.json +51 -0
  12. package/src/la-protocol-v2/contract/alert.schema.json +62 -0
  13. package/src/la-protocol-v2/contract/approval.decision.schema.json +57 -0
  14. package/src/la-protocol-v2/contract/audit.event.schema.json +86 -0
  15. package/src/la-protocol-v2/contract/config.update.schema.json +73 -0
  16. package/src/la-protocol-v2/contract/content.request.schema.json +110 -0
  17. package/src/la-protocol-v2/contract/content.response.schema.json +90 -0
  18. package/src/la-protocol-v2/contract/defs.schema.json +191 -0
  19. package/src/la-protocol-v2/contract/envelope.schema.json +89 -0
  20. package/src/la-protocol-v2/contract/error.schema.json +59 -0
  21. package/src/la-protocol-v2/contract/heartbeat.schema.json +100 -0
  22. package/src/la-protocol-v2/contract/hello.schema.json +111 -0
  23. package/src/la-protocol-v2/contract/incident.candidate.schema.json +102 -0
  24. package/src/la-protocol-v2/contract/index.json +166 -0
  25. package/src/la-protocol-v2/contract/job.assign.schema.json +212 -0
  26. package/src/la-protocol-v2/contract/job.cancel.schema.json +52 -0
  27. package/src/la-protocol-v2/contract/job.event.schema.json +115 -0
  28. package/src/la-protocol-v2/contract/job.result.schema.json +100 -0
  29. package/src/la-protocol-v2/contract/log.stats.schema.json +79 -0
  30. package/src/la-protocol-v2/contract/ready.schema.json +106 -0
  31. package/src/la-protocol-v2/contract/register.schema.json +92 -0
  32. package/src/la-protocol-v2/contract/scan.upload.schema.json +59 -0
  33. package/src/la-protocol-v2/contract/scan.uploaded.schema.json +51 -0
  34. package/src/la-protocol-v2/contract/webhook.forward.schema.json +69 -0
  35. package/src/la-protocol-v2/contract.js +90 -0
  36. package/src/la-protocol-v2/errors.js +34 -0
  37. package/src/la-protocol-v2/index.js +8 -0
  38. package/src/la-protocol-v2/link.js +93 -0
  39. package/src/la-protocol-v2/runtime.js +72 -0
  40. package/src/la-protocol-v2/session.js +650 -0
  41. package/src/la-protocol-v2/strict-json.js +47 -0
  42. package/src/server.js +22 -4
  43. package/test/contract/la-protocol-v2/vectors/ack.vectors.json +149 -0
  44. package/test/contract/la-protocol-v2/vectors/alert.vectors.json +101 -0
  45. package/test/contract/la-protocol-v2/vectors/approval.decision.vectors.json +165 -0
  46. package/test/contract/la-protocol-v2/vectors/audit.event.vectors.json +156 -0
  47. package/test/contract/la-protocol-v2/vectors/config.update.vectors.json +189 -0
  48. package/test/contract/la-protocol-v2/vectors/content.request.vectors.json +325 -0
  49. package/test/contract/la-protocol-v2/vectors/content.response.vectors.json +413 -0
  50. package/test/contract/la-protocol-v2/vectors/cross-type.vectors.json +260 -0
  51. package/test/contract/la-protocol-v2/vectors/error.vectors.json +179 -0
  52. package/test/contract/la-protocol-v2/vectors/heartbeat.vectors.json +109 -0
  53. package/test/contract/la-protocol-v2/vectors/hello.vectors.json +224 -0
  54. package/test/contract/la-protocol-v2/vectors/incident.candidate.vectors.json +186 -0
  55. package/test/contract/la-protocol-v2/vectors/job.assign.vectors.json +631 -0
  56. package/test/contract/la-protocol-v2/vectors/job.cancel.vectors.json +133 -0
  57. package/test/contract/la-protocol-v2/vectors/job.event.vectors.json +233 -0
  58. package/test/contract/la-protocol-v2/vectors/job.result.vectors.json +137 -0
  59. package/test/contract/la-protocol-v2/vectors/log.stats.vectors.json +137 -0
  60. package/test/contract/la-protocol-v2/vectors/ready.vectors.json +177 -0
  61. package/test/contract/la-protocol-v2/vectors/register.vectors.json +399 -0
  62. package/test/contract/la-protocol-v2/vectors/scan.upload.vectors.json +137 -0
  63. package/test/contract/la-protocol-v2/vectors/scan.uploaded.vectors.json +101 -0
  64. package/test/contract/la-protocol-v2/vectors/traces/invalid-agent-mismatch.json +140 -0
  65. package/test/contract/la-protocol-v2/vectors/traces/invalid-chunk-after-last.json +200 -0
  66. package/test/contract/la-protocol-v2/vectors/traces/invalid-chunk-byte-length-mismatch.json +174 -0
  67. package/test/contract/la-protocol-v2/vectors/traces/invalid-chunk-last-flag.json +200 -0
  68. package/test/contract/la-protocol-v2/vectors/traces/invalid-chunk-out-of-order.json +200 -0
  69. package/test/contract/la-protocol-v2/vectors/traces/invalid-chunk-total-changes.json +200 -0
  70. package/test/contract/la-protocol-v2/vectors/traces/invalid-clock-skew.json +46 -0
  71. package/test/contract/la-protocol-v2/vectors/traces/invalid-event-before-ready.json +72 -0
  72. package/test/contract/la-protocol-v2/vectors/traces/invalid-first-frame-not-register.json +48 -0
  73. package/test/contract/la-protocol-v2/vectors/traces/invalid-frame-over-48kib.json +141 -0
  74. package/test/contract/la-protocol-v2/vectors/traces/invalid-la-sends-job-assign.json +173 -0
  75. package/test/contract/la-protocol-v2/vectors/traces/invalid-params-raw-differs-from-payload.json +172 -0
  76. package/test/contract/la-protocol-v2/vectors/traces/invalid-payload-above-limit.json +174 -0
  77. package/test/contract/la-protocol-v2/vectors/traces/invalid-resume-restarts-seq.json +144 -0
  78. package/test/contract/la-protocol-v2/vectors/traces/invalid-seq-gap.json +166 -0
  79. package/test/contract/la-protocol-v2/vectors/traces/invalid-seq-repeated.json +166 -0
  80. package/test/contract/la-protocol-v2/vectors/traces/invalid-sig-tenant-mismatch.json +172 -0
  81. package/test/contract/la-protocol-v2/vectors/traces/invalid-signature-warn-with-enforce-required.json +77 -0
  82. package/test/contract/la-protocol-v2/vectors/traces/invalid-tenant-mismatch.json +140 -0
  83. package/test/contract/la-protocol-v2/vectors/traces/invalid-type-outside-allowlist.json +140 -0
  84. package/test/contract/la-protocol-v2/vectors/traces/valid-content-chunks-in-order.json +224 -0
  85. package/test/contract/la-protocol-v2/vectors/traces/valid-handshake-and-job.json +266 -0
  86. package/test/contract/la-protocol-v2/vectors/traces/valid-resume-continues-seq.json +168 -0
  87. package/test/contract/la-protocol-v2/vectors/traces/valid-retransmit-is-idempotent.json +193 -0
  88. package/test/contract/la-protocol-v2/vectors/webhook.forward.vectors.json +170 -0
  89. package/test/la-protocol-v2/contract.test.js +131 -0
  90. package/test/la-protocol-v2/helpers/la-rig.js +83 -0
  91. package/test/la-protocol-v2/helpers/reference-cp.js +349 -0
  92. package/test/la-protocol-v2/helpers/spawn-agent.js +35 -0
  93. package/test/la-protocol-v2/link.test.js +141 -0
  94. package/test/la-protocol-v2/session-inbound.test.js +279 -0
  95. package/test/la-protocol-v2/session-outbound.test.js +382 -0
  96. package/test/la-protocol-v2/traces.test.js +270 -0
  97. package/test/la-protocol-v2/tunnel-e2e.test.js +124 -0
  98. package/tools/graphify-validation/extras/README.md +19 -0
  99. package/tools/graphify-validation/extras/bymethod.py +35 -0
  100. package/tools/graphify-validation/extras/docker/Dockerfile +16 -0
  101. package/tools/graphify-validation/extras/docker/inner.sh +7 -0
  102. package/tools/graphify-validation/extras/g10.py +59 -0
  103. package/tools/graphify-validation/extras/g3aug.py +49 -0
  104. package/tools/graphify-validation/extras/hybrid.py +34 -0
  105. package/tools/graphify-validation/extras/truth2.py +44 -0
  106. package/tools/interop/LaV2NodeInteropTest.java +266 -0
  107. package/tools/interop/README.md +21 -0
  108. package/tools/interop/la-interop-client.mjs +97 -0
@@ -0,0 +1,631 @@
1
+ {
2
+ "type": "job.assign",
3
+ "schema": "job.assign.schema.json",
4
+ "vectors": [
5
+ {
6
+ "name": "minimal-valid",
7
+ "expect": {
8
+ "valid": true
9
+ },
10
+ "message": {
11
+ "schemaVersion": 2,
12
+ "type": "job.assign",
13
+ "msgId": "00000000-0000-4000-8000-000000000001",
14
+ "seq": 1,
15
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
16
+ "workspaceId": "ws-1",
17
+ "ts": "2026-10-29T10:00:00Z",
18
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
19
+ "sig": {
20
+ "keyId": "vh-cp-2026-10",
21
+ "timestamp": "1793268000",
22
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
23
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
24
+ "workspaceId": "ws-1",
25
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
26
+ },
27
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
28
+ "payload": {
29
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
30
+ "kind": "fix",
31
+ "incidentRef": {
32
+ "id": "inc-8c8deab3",
33
+ "fingerprint": "5a1f09c2d7e8b3a4"
34
+ },
35
+ "repoRef": {
36
+ "provider": "github",
37
+ "org": "acme",
38
+ "repo": "billing",
39
+ "branch": "main"
40
+ },
41
+ "policy": {
42
+ "operationMode": "assist",
43
+ "automationLevel": 2,
44
+ "ceiling": "autonomous"
45
+ },
46
+ "budget": {
47
+ "tokens": 200000,
48
+ "seconds": 900
49
+ },
50
+ "llm": {
51
+ "alias": "vh-coder",
52
+ "keyRef": "key-la-1"
53
+ },
54
+ "inputs": [
55
+ {
56
+ "ref": "incident:inc-8c8deab3"
57
+ },
58
+ {
59
+ "inline": "Fix the NPE in PaymentService",
60
+ "transient": true
61
+ }
62
+ ]
63
+ }
64
+ }
65
+ },
66
+ {
67
+ "name": "extra-top-level-field",
68
+ "why": "envelope is closed (additionalProperties:false)",
69
+ "expect": {
70
+ "valid": false,
71
+ "code": "schema_violation",
72
+ "keyword": "additionalProperties"
73
+ },
74
+ "message": {
75
+ "schemaVersion": 2,
76
+ "type": "job.assign",
77
+ "msgId": "00000000-0000-4000-8000-000000000001",
78
+ "seq": 1,
79
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
80
+ "workspaceId": "ws-1",
81
+ "ts": "2026-10-29T10:00:00Z",
82
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
83
+ "sig": {
84
+ "keyId": "vh-cp-2026-10",
85
+ "timestamp": "1793268000",
86
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
87
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
88
+ "workspaceId": "ws-1",
89
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
90
+ },
91
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
92
+ "payload": {
93
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
94
+ "kind": "fix",
95
+ "incidentRef": {
96
+ "id": "inc-8c8deab3",
97
+ "fingerprint": "5a1f09c2d7e8b3a4"
98
+ },
99
+ "repoRef": {
100
+ "provider": "github",
101
+ "org": "acme",
102
+ "repo": "billing",
103
+ "branch": "main"
104
+ },
105
+ "policy": {
106
+ "operationMode": "assist",
107
+ "automationLevel": 2,
108
+ "ceiling": "autonomous"
109
+ },
110
+ "budget": {
111
+ "tokens": 200000,
112
+ "seconds": 900
113
+ },
114
+ "llm": {
115
+ "alias": "vh-coder",
116
+ "keyRef": "key-la-1"
117
+ },
118
+ "inputs": [
119
+ {
120
+ "ref": "incident:inc-8c8deab3"
121
+ },
122
+ {
123
+ "inline": "Fix the NPE in PaymentService",
124
+ "transient": true
125
+ }
126
+ ]
127
+ },
128
+ "extra": "x"
129
+ }
130
+ },
131
+ {
132
+ "name": "extra-payload-field",
133
+ "why": "payload is closed: no free-form fields",
134
+ "expect": {
135
+ "valid": false,
136
+ "code": "schema_violation",
137
+ "keyword": "additionalProperties"
138
+ },
139
+ "message": {
140
+ "schemaVersion": 2,
141
+ "type": "job.assign",
142
+ "msgId": "00000000-0000-4000-8000-000000000001",
143
+ "seq": 1,
144
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
145
+ "workspaceId": "ws-1",
146
+ "ts": "2026-10-29T10:00:00Z",
147
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
148
+ "sig": {
149
+ "keyId": "vh-cp-2026-10",
150
+ "timestamp": "1793268000",
151
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
152
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
153
+ "workspaceId": "ws-1",
154
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
155
+ },
156
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
157
+ "payload": {
158
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
159
+ "kind": "fix",
160
+ "incidentRef": {
161
+ "id": "inc-8c8deab3",
162
+ "fingerprint": "5a1f09c2d7e8b3a4"
163
+ },
164
+ "repoRef": {
165
+ "provider": "github",
166
+ "org": "acme",
167
+ "repo": "billing",
168
+ "branch": "main"
169
+ },
170
+ "policy": {
171
+ "operationMode": "assist",
172
+ "automationLevel": 2,
173
+ "ceiling": "autonomous"
174
+ },
175
+ "budget": {
176
+ "tokens": 200000,
177
+ "seconds": 900
178
+ },
179
+ "llm": {
180
+ "alias": "vh-coder",
181
+ "keyRef": "key-la-1"
182
+ },
183
+ "inputs": [
184
+ {
185
+ "ref": "incident:inc-8c8deab3"
186
+ },
187
+ {
188
+ "inline": "Fix the NPE in PaymentService",
189
+ "transient": true
190
+ }
191
+ ],
192
+ "freeText": "client text"
193
+ }
194
+ }
195
+ },
196
+ {
197
+ "name": "tenant-id-not-uuid",
198
+ "why": "tenantId must be a UUID",
199
+ "expect": {
200
+ "valid": false,
201
+ "code": "schema_violation",
202
+ "keyword": "pattern"
203
+ },
204
+ "message": {
205
+ "schemaVersion": 2,
206
+ "type": "job.assign",
207
+ "msgId": "00000000-0000-4000-8000-000000000001",
208
+ "seq": 1,
209
+ "tenantId": "tenant-1",
210
+ "workspaceId": "ws-1",
211
+ "ts": "2026-10-29T10:00:00Z",
212
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
213
+ "sig": {
214
+ "keyId": "vh-cp-2026-10",
215
+ "timestamp": "1793268000",
216
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
217
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
218
+ "workspaceId": "ws-1",
219
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
220
+ },
221
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
222
+ "payload": {
223
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
224
+ "kind": "fix",
225
+ "incidentRef": {
226
+ "id": "inc-8c8deab3",
227
+ "fingerprint": "5a1f09c2d7e8b3a4"
228
+ },
229
+ "repoRef": {
230
+ "provider": "github",
231
+ "org": "acme",
232
+ "repo": "billing",
233
+ "branch": "main"
234
+ },
235
+ "policy": {
236
+ "operationMode": "assist",
237
+ "automationLevel": 2,
238
+ "ceiling": "autonomous"
239
+ },
240
+ "budget": {
241
+ "tokens": 200000,
242
+ "seconds": 900
243
+ },
244
+ "llm": {
245
+ "alias": "vh-coder",
246
+ "keyRef": "key-la-1"
247
+ },
248
+ "inputs": [
249
+ {
250
+ "ref": "incident:inc-8c8deab3"
251
+ },
252
+ {
253
+ "inline": "Fix the NPE in PaymentService",
254
+ "transient": true
255
+ }
256
+ ]
257
+ }
258
+ }
259
+ },
260
+ {
261
+ "name": "inline-without-transient",
262
+ "why": "inline inputs must be marked transient:true",
263
+ "expect": {
264
+ "valid": false,
265
+ "code": "schema_violation",
266
+ "keyword": "oneOf"
267
+ },
268
+ "message": {
269
+ "schemaVersion": 2,
270
+ "type": "job.assign",
271
+ "msgId": "00000000-0000-4000-8000-000000000001",
272
+ "seq": 1,
273
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
274
+ "workspaceId": "ws-1",
275
+ "ts": "2026-10-29T10:00:00Z",
276
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
277
+ "sig": {
278
+ "keyId": "vh-cp-2026-10",
279
+ "timestamp": "1793268000",
280
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
281
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
282
+ "workspaceId": "ws-1",
283
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
284
+ },
285
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
286
+ "payload": {
287
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
288
+ "kind": "fix",
289
+ "incidentRef": {
290
+ "id": "inc-8c8deab3",
291
+ "fingerprint": "5a1f09c2d7e8b3a4"
292
+ },
293
+ "repoRef": {
294
+ "provider": "github",
295
+ "org": "acme",
296
+ "repo": "billing",
297
+ "branch": "main"
298
+ },
299
+ "policy": {
300
+ "operationMode": "assist",
301
+ "automationLevel": 2,
302
+ "ceiling": "autonomous"
303
+ },
304
+ "budget": {
305
+ "tokens": 200000,
306
+ "seconds": 900
307
+ },
308
+ "llm": {
309
+ "alias": "vh-coder",
310
+ "keyRef": "key-la-1"
311
+ },
312
+ "inputs": [
313
+ {
314
+ "inline": "ticket text"
315
+ }
316
+ ]
317
+ }
318
+ }
319
+ },
320
+ {
321
+ "name": "inline-above-limit",
322
+ "why": "inline input above 4096 chars",
323
+ "expect": {
324
+ "valid": false,
325
+ "code": "schema_violation",
326
+ "keyword": "oneOf"
327
+ },
328
+ "message": {
329
+ "schemaVersion": 2,
330
+ "type": "job.assign",
331
+ "msgId": "00000000-0000-4000-8000-000000000001",
332
+ "seq": 1,
333
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
334
+ "workspaceId": "ws-1",
335
+ "ts": "2026-10-29T10:00:00Z",
336
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
337
+ "sig": {
338
+ "keyId": "vh-cp-2026-10",
339
+ "timestamp": "1793268000",
340
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
341
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
342
+ "workspaceId": "ws-1",
343
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
344
+ },
345
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
346
+ "payload": {
347
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
348
+ "kind": "fix",
349
+ "incidentRef": {
350
+ "id": "inc-8c8deab3",
351
+ "fingerprint": "5a1f09c2d7e8b3a4"
352
+ },
353
+ "repoRef": {
354
+ "provider": "github",
355
+ "org": "acme",
356
+ "repo": "billing",
357
+ "branch": "main"
358
+ },
359
+ "policy": {
360
+ "operationMode": "assist",
361
+ "automationLevel": 2,
362
+ "ceiling": "autonomous"
363
+ },
364
+ "budget": {
365
+ "tokens": 200000,
366
+ "seconds": 900
367
+ },
368
+ "llm": {
369
+ "alias": "vh-coder",
370
+ "keyRef": "key-la-1"
371
+ },
372
+ "inputs": [
373
+ {
374
+ "inline": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
375
+ "transient": true
376
+ }
377
+ ]
378
+ }
379
+ }
380
+ },
381
+ {
382
+ "name": "unsigned-command",
383
+ "why": "every CP->LA command carries sig + paramsRaw",
384
+ "expect": {
385
+ "valid": false,
386
+ "code": "schema_violation",
387
+ "keyword": "required"
388
+ },
389
+ "message": {
390
+ "schemaVersion": 2,
391
+ "type": "job.assign",
392
+ "msgId": "00000000-0000-4000-8000-000000000001",
393
+ "seq": 1,
394
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
395
+ "workspaceId": "ws-1",
396
+ "ts": "2026-10-29T10:00:00Z",
397
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
398
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
399
+ "payload": {
400
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
401
+ "kind": "fix",
402
+ "incidentRef": {
403
+ "id": "inc-8c8deab3",
404
+ "fingerprint": "5a1f09c2d7e8b3a4"
405
+ },
406
+ "repoRef": {
407
+ "provider": "github",
408
+ "org": "acme",
409
+ "repo": "billing",
410
+ "branch": "main"
411
+ },
412
+ "policy": {
413
+ "operationMode": "assist",
414
+ "automationLevel": 2,
415
+ "ceiling": "autonomous"
416
+ },
417
+ "budget": {
418
+ "tokens": 200000,
419
+ "seconds": 900
420
+ },
421
+ "llm": {
422
+ "alias": "vh-coder",
423
+ "keyRef": "key-la-1"
424
+ },
425
+ "inputs": [
426
+ {
427
+ "ref": "incident:inc-8c8deab3"
428
+ },
429
+ {
430
+ "inline": "Fix the NPE in PaymentService",
431
+ "transient": true
432
+ }
433
+ ]
434
+ }
435
+ }
436
+ },
437
+ {
438
+ "name": "kind-outside-allowlist",
439
+ "why": "kind in fix|implement|quality",
440
+ "expect": {
441
+ "valid": false,
442
+ "code": "schema_violation",
443
+ "keyword": "enum"
444
+ },
445
+ "message": {
446
+ "schemaVersion": 2,
447
+ "type": "job.assign",
448
+ "msgId": "00000000-0000-4000-8000-000000000001",
449
+ "seq": 1,
450
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
451
+ "workspaceId": "ws-1",
452
+ "ts": "2026-10-29T10:00:00Z",
453
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
454
+ "sig": {
455
+ "keyId": "vh-cp-2026-10",
456
+ "timestamp": "1793268000",
457
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
458
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
459
+ "workspaceId": "ws-1",
460
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
461
+ },
462
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
463
+ "payload": {
464
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
465
+ "kind": "exec",
466
+ "incidentRef": {
467
+ "id": "inc-8c8deab3",
468
+ "fingerprint": "5a1f09c2d7e8b3a4"
469
+ },
470
+ "repoRef": {
471
+ "provider": "github",
472
+ "org": "acme",
473
+ "repo": "billing",
474
+ "branch": "main"
475
+ },
476
+ "policy": {
477
+ "operationMode": "assist",
478
+ "automationLevel": 2,
479
+ "ceiling": "autonomous"
480
+ },
481
+ "budget": {
482
+ "tokens": 200000,
483
+ "seconds": 900
484
+ },
485
+ "llm": {
486
+ "alias": "vh-coder",
487
+ "keyRef": "key-la-1"
488
+ },
489
+ "inputs": [
490
+ {
491
+ "ref": "incident:inc-8c8deab3"
492
+ },
493
+ {
494
+ "inline": "Fix the NPE in PaymentService",
495
+ "transient": true
496
+ }
497
+ ]
498
+ }
499
+ }
500
+ },
501
+ {
502
+ "name": "automation-level-above-5",
503
+ "why": "bounded integer",
504
+ "expect": {
505
+ "valid": false,
506
+ "code": "schema_violation",
507
+ "keyword": "maximum"
508
+ },
509
+ "message": {
510
+ "schemaVersion": 2,
511
+ "type": "job.assign",
512
+ "msgId": "00000000-0000-4000-8000-000000000001",
513
+ "seq": 1,
514
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
515
+ "workspaceId": "ws-1",
516
+ "ts": "2026-10-29T10:00:00Z",
517
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
518
+ "sig": {
519
+ "keyId": "vh-cp-2026-10",
520
+ "timestamp": "1793268000",
521
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
522
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
523
+ "workspaceId": "ws-1",
524
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
525
+ },
526
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
527
+ "payload": {
528
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
529
+ "kind": "fix",
530
+ "incidentRef": {
531
+ "id": "inc-8c8deab3",
532
+ "fingerprint": "5a1f09c2d7e8b3a4"
533
+ },
534
+ "repoRef": {
535
+ "provider": "github",
536
+ "org": "acme",
537
+ "repo": "billing",
538
+ "branch": "main"
539
+ },
540
+ "policy": {
541
+ "operationMode": "assist",
542
+ "automationLevel": 6,
543
+ "ceiling": "autonomous"
544
+ },
545
+ "budget": {
546
+ "tokens": 200000,
547
+ "seconds": 900
548
+ },
549
+ "llm": {
550
+ "alias": "vh-coder",
551
+ "keyRef": "key-la-1"
552
+ },
553
+ "inputs": [
554
+ {
555
+ "ref": "incident:inc-8c8deab3"
556
+ },
557
+ {
558
+ "inline": "Fix the NPE in PaymentService",
559
+ "transient": true
560
+ }
561
+ ]
562
+ }
563
+ }
564
+ },
565
+ {
566
+ "name": "arbitrary-command-field",
567
+ "why": "no free command field in job.assign",
568
+ "expect": {
569
+ "valid": false,
570
+ "code": "schema_violation",
571
+ "keyword": "additionalProperties"
572
+ },
573
+ "message": {
574
+ "schemaVersion": 2,
575
+ "type": "job.assign",
576
+ "msgId": "00000000-0000-4000-8000-000000000001",
577
+ "seq": 1,
578
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
579
+ "workspaceId": "ws-1",
580
+ "ts": "2026-10-29T10:00:00Z",
581
+ "paramsRaw": "{\"jobId\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"kind\":\"fix\",\"incidentRef\":{\"id\":\"inc-8c8deab3\",\"fingerprint\":\"5a1f09c2d7e8b3a4\"},\"repoRef\":{\"provider\":\"github\",\"org\":\"acme\",\"repo\":\"billing\",\"branch\":\"main\"},\"policy\":{\"operationMode\":\"assist\",\"automationLevel\":2,\"ceiling\":\"autonomous\"},\"budget\":{\"tokens\":200000,\"seconds\":900},\"llm\":{\"alias\":\"vh-coder\",\"keyRef\":\"key-la-1\"},\"inputs\":[{\"ref\":\"incident:inc-8c8deab3\"},{\"inline\":\"Fix the NPE in PaymentService\",\"transient\":true}]}",
582
+ "sig": {
583
+ "keyId": "vh-cp-2026-10",
584
+ "timestamp": "1793268000",
585
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
586
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
587
+ "workspaceId": "ws-1",
588
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
589
+ },
590
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
591
+ "payload": {
592
+ "jobId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
593
+ "kind": "fix",
594
+ "incidentRef": {
595
+ "id": "inc-8c8deab3",
596
+ "fingerprint": "5a1f09c2d7e8b3a4"
597
+ },
598
+ "repoRef": {
599
+ "provider": "github",
600
+ "org": "acme",
601
+ "repo": "billing",
602
+ "branch": "main"
603
+ },
604
+ "policy": {
605
+ "operationMode": "assist",
606
+ "automationLevel": 2,
607
+ "ceiling": "autonomous"
608
+ },
609
+ "budget": {
610
+ "tokens": 200000,
611
+ "seconds": 900
612
+ },
613
+ "llm": {
614
+ "alias": "vh-coder",
615
+ "keyRef": "key-la-1"
616
+ },
617
+ "inputs": [
618
+ {
619
+ "ref": "incident:inc-8c8deab3"
620
+ },
621
+ {
622
+ "inline": "Fix the NPE in PaymentService",
623
+ "transient": true
624
+ }
625
+ ],
626
+ "command": "rm -rf /"
627
+ }
628
+ }
629
+ }
630
+ ]
631
+ }