@ancplua/qyl-api-schema 0.2.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 (54) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +89 -0
  3. package/VERSIONING.md +74 -0
  4. package/api/routes.tsp +1052 -0
  5. package/api/streaming.tsp +335 -0
  6. package/common/errors.tsp +206 -0
  7. package/common/pagination.tsp +254 -0
  8. package/common/types.tsp +345 -0
  9. package/generated/README.md +26 -0
  10. package/generated/otel-keys.gen.tsp +1648 -0
  11. package/index.tsp +55 -0
  12. package/intelligence/causal-rules.tsp +34 -0
  13. package/intelligence/diagnostic-patterns.tsp +54 -0
  14. package/intelligence/investigation-strategies.tsp +37 -0
  15. package/intelligence/main.tsp +19 -0
  16. package/intelligence/seed/patterns.tsp +172 -0
  17. package/intelligence/seed/rules.tsp +44 -0
  18. package/intelligence/seed/strategies.tsp +56 -0
  19. package/intelligence/signals.tsp +60 -0
  20. package/models/agent/agent-run.tsp +154 -0
  21. package/models/agent/tool-call.tsp +122 -0
  22. package/models/agent/workflow-checkpoint.tsp +50 -0
  23. package/models/agent/workflow-execution.tsp +136 -0
  24. package/models/alerting.tsp +436 -0
  25. package/models/configurator.tsp +433 -0
  26. package/models/control-graph.tsp +197 -0
  27. package/models/db.tsp +810 -0
  28. package/models/deployment.tsp +365 -0
  29. package/models/error.tsp +433 -0
  30. package/models/genai.tsp +1368 -0
  31. package/models/http.tsp +600 -0
  32. package/models/identity.tsp +213 -0
  33. package/models/issues.tsp +484 -0
  34. package/models/log.tsp +140 -0
  35. package/models/messaging.tsp +304 -0
  36. package/models/otel-config.tsp +455 -0
  37. package/models/retention.tsp +240 -0
  38. package/models/rpc.tsp +309 -0
  39. package/models/search.tsp +243 -0
  40. package/models/session.tsp +274 -0
  41. package/models/system.tsp +400 -0
  42. package/models/test.tsp +346 -0
  43. package/models/triage.tsp +113 -0
  44. package/models/workflow.tsp +396 -0
  45. package/models/workspace.tsp +435 -0
  46. package/otel/enums.tsp +392 -0
  47. package/otel/logs.tsp +135 -0
  48. package/otel/metrics.tsp +358 -0
  49. package/otel/otel-conventions.tsp +14 -0
  50. package/otel/profiles.tsp +335 -0
  51. package/otel/resource.tsp +257 -0
  52. package/otel/span.tsp +307 -0
  53. package/package.json +88 -0
  54. package/tspconfig.yaml +49 -0
@@ -0,0 +1,213 @@
1
+ // =============================================================================
2
+ // ANcpLua v2.0 - User/Client/Service Semantic Conventions (OTel v1.40)
3
+ // =============================================================================
4
+ // User, client, service, and app identity attributes.
5
+ // =============================================================================
6
+
7
+ import "../common/types.tsp";
8
+
9
+ using Qyl.Api.Contracts.Common;
10
+
11
+ namespace Qyl.Api.Contracts.Domains.Identity;
12
+
13
+ // =============================================================================
14
+ // User Attributes
15
+ // =============================================================================
16
+
17
+ @doc("User attributes")
18
+ model UserAttributes {
19
+ @doc("User ID (unique identifier)")
20
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.Id)
21
+ id?: UserId;
22
+
23
+ @doc("User name (may be pseudonymized)")
24
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.Name)
25
+ name?: string;
26
+
27
+ @doc("User email (may be hashed)")
28
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.Email)
29
+ email?: string;
30
+
31
+ @doc("User full name")
32
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.FullName)
33
+ fullName?: string;
34
+
35
+ @doc("User hash (for privacy)")
36
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.Hash)
37
+ hash?: string;
38
+
39
+ @doc("User roles")
40
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.User.Roles)
41
+ roles?: string[];
42
+ }
43
+
44
+ // =============================================================================
45
+ // Client Attributes
46
+ // =============================================================================
47
+
48
+ @doc("Client attributes")
49
+ model ClientAttributes {
50
+ @doc("Client address (IP, hostname, or Unix socket path)")
51
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Client.Address)
52
+ address?: IpAddress | string;
53
+
54
+ @doc("Client port")
55
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Client.Port)
56
+ port?: Port;
57
+ }
58
+
59
+ // =============================================================================
60
+ // Service Attributes
61
+ // =============================================================================
62
+
63
+ @doc("Service resource attributes")
64
+ model ServiceAttributes {
65
+ @doc("Service name (required)")
66
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.Name)
67
+ name: string;
68
+
69
+ @doc("Service namespace")
70
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.Namespace)
71
+ `namespace`?: string;
72
+
73
+ @doc("Service instance ID (unique per instance)")
74
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.InstanceId)
75
+ instanceId?: string;
76
+
77
+ @doc("Service version")
78
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Service.Version)
79
+ version?: SemVer;
80
+ }
81
+
82
+ // =============================================================================
83
+ // App Attributes
84
+ // =============================================================================
85
+
86
+ @doc("Application attributes")
87
+ model AppAttributes {
88
+ @doc("Application name")
89
+ @encodedName("application/json", "app.name")
90
+ name?: string;
91
+
92
+ @doc("Application version")
93
+ @encodedName("application/json", "app.version")
94
+ version?: SemVer;
95
+
96
+ @doc("Application build ID")
97
+ @encodedName("application/json", "app.build.id")
98
+ buildId?: string;
99
+ }
100
+
101
+ // =============================================================================
102
+ // Server Attributes
103
+ // =============================================================================
104
+
105
+ @doc("Server attributes")
106
+ model ServerAttributes {
107
+ @doc("Server address (hostname or IP)")
108
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Server.Address)
109
+ address?: string;
110
+
111
+ @doc("Server port")
112
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Server.Port)
113
+ port?: Port;
114
+ }
115
+
116
+ // =============================================================================
117
+ // Destination Attributes
118
+ // =============================================================================
119
+
120
+ @doc("Destination attributes (for client spans)")
121
+ model DestinationAttributes {
122
+ @doc("Destination address")
123
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Destination.Address)
124
+ address?: string;
125
+
126
+ @doc("Destination port")
127
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Destination.Port)
128
+ port?: Port;
129
+ }
130
+
131
+ // =============================================================================
132
+ // Source Attributes
133
+ // =============================================================================
134
+
135
+ @doc("Source attributes")
136
+ model SourceAttributes {
137
+ @doc("Source address (IP, hostname, or Unix socket path)")
138
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Source.Address)
139
+ address?: IpAddress | string;
140
+
141
+ @doc("Source port")
142
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Source.Port)
143
+ port?: Port;
144
+ }
145
+
146
+ // =============================================================================
147
+ // Peer Attributes (Deprecated, for compatibility)
148
+ // =============================================================================
149
+
150
+ @doc("Peer attributes (deprecated)")
151
+ model PeerAttributes {
152
+ @doc("Peer service name")
153
+ @encodedName("application/json", "peer.service")
154
+ service?: string;
155
+ }
156
+
157
+ // =============================================================================
158
+ // Identity Statistics
159
+ // =============================================================================
160
+
161
+ @doc("User activity statistics")
162
+ model UserActivityStats {
163
+ @doc("Total unique users")
164
+ @encodedName("application/json", "total_users")
165
+ totalUsers: Count;
166
+
167
+ @doc("Active users in time range")
168
+ @encodedName("application/json", "active_users")
169
+ activeUsers: Count;
170
+
171
+ @doc("New users in time range")
172
+ @encodedName("application/json", "new_users")
173
+ newUsers: Count;
174
+
175
+ @doc("Users by role")
176
+ @encodedName("application/json", "by_role")
177
+ byRole?: UserRoleStats[];
178
+ }
179
+
180
+ @doc("User stats by role")
181
+ model UserRoleStats {
182
+ @doc("Role name")
183
+ role: string;
184
+
185
+ @doc("User count")
186
+ count: Count;
187
+
188
+ @doc("Percentage of total")
189
+ percentage: Percentage;
190
+ }
191
+
192
+ @doc("Service dependency map")
193
+ model ServiceDependency {
194
+ @doc("Source service")
195
+ @encodedName("application/json", "source_service")
196
+ sourceService: string;
197
+
198
+ @doc("Target service")
199
+ @encodedName("application/json", "target_service")
200
+ targetService: string;
201
+
202
+ @doc("Request count")
203
+ @encodedName("application/json", "request_count")
204
+ requestCount: Count;
205
+
206
+ @doc("Error rate")
207
+ @encodedName("application/json", "error_rate")
208
+ errorRate: Ratio;
209
+
210
+ @doc("Average latency in milliseconds")
211
+ @encodedName("application/json", "avg_latency_ms")
212
+ avgLatencyMs: float64;
213
+ }
@@ -0,0 +1,484 @@
1
+ // =============================================================================
2
+ // ANcpLua v2.0 - Error Issue Engine Entities
3
+ // =============================================================================
4
+ // Issue aggregates, events, breadcrumbs, regressions, ownership, releases.
5
+ // Sentry-replacement error tracking engine.
6
+ // =============================================================================
7
+
8
+ import "@typespec/openapi";
9
+ import "../common/types.tsp";
10
+
11
+ using TypeSpec.OpenAPI;
12
+ using Qyl.Api.Contracts.Common;
13
+
14
+ namespace Qyl.Api.Contracts.Domains.Issues;
15
+
16
+ // =============================================================================
17
+ // Error Issue
18
+ // =============================================================================
19
+
20
+ @doc("Error issue aggregate with lifecycle tracking")
21
+ @extension("x-csharp-type", "ErrorIssueEntity")
22
+ model ErrorIssueEntity {
23
+ @doc("Issue ID")
24
+ @key
25
+ @visibility(Lifecycle.Read)
26
+ id: string;
27
+
28
+ @doc("Owning project")
29
+ @visibility(Lifecycle.Read)
30
+ @encodedName("application/json", "project_id")
31
+ projectId: string;
32
+
33
+ @doc("Error fingerprint for grouping")
34
+ @visibility(Lifecycle.Read)
35
+ fingerprint: string;
36
+
37
+ @doc("Issue title")
38
+ @visibility(Lifecycle.Read)
39
+ title: string;
40
+
41
+ @doc("Culprit (function/module causing the error)")
42
+ @visibility(Lifecycle.Read)
43
+ culprit?: string;
44
+
45
+ @doc("Error type (exception class name or code)")
46
+ @visibility(Lifecycle.Read)
47
+ @encodedName("application/json", "error_type")
48
+ errorType: string;
49
+
50
+ @doc("Error category")
51
+ @visibility(Lifecycle.Read)
52
+ category: string;
53
+
54
+ @doc("Severity level")
55
+ @visibility(Lifecycle.Read)
56
+ level: IssueLevel;
57
+
58
+ @doc("Platform (csharp, javascript, python, etc.)")
59
+ @visibility(Lifecycle.Read)
60
+ platform?: string;
61
+
62
+ @doc("First occurrence")
63
+ @visibility(Lifecycle.Read)
64
+ @encodedName("application/json", "first_seen_at")
65
+ firstSeenAt: utcDateTime;
66
+
67
+ @doc("Last occurrence")
68
+ @visibility(Lifecycle.Read)
69
+ @encodedName("application/json", "last_seen_at")
70
+ lastSeenAt: utcDateTime;
71
+
72
+ @doc("Total occurrence count")
73
+ @visibility(Lifecycle.Read)
74
+ @encodedName("application/json", "occurrence_count")
75
+ occurrenceCount: int64;
76
+
77
+ @doc("Affected unique users count")
78
+ @visibility(Lifecycle.Read)
79
+ @encodedName("application/json", "affected_users_count")
80
+ affectedUsersCount: int32;
81
+
82
+ @doc("Issue status")
83
+ @visibility(Lifecycle.Read, Lifecycle.Update)
84
+ status: IssueStatus;
85
+
86
+ @doc("Issue substatus")
87
+ @visibility(Lifecycle.Read)
88
+ substatus?: string;
89
+
90
+ @doc("Priority level")
91
+ @visibility(Lifecycle.Read, Lifecycle.Update)
92
+ priority: IssuePriority;
93
+
94
+ @doc("Assigned team member")
95
+ @visibility(Lifecycle.Read, Lifecycle.Update)
96
+ @encodedName("application/json", "assigned_to")
97
+ assignedTo?: string;
98
+
99
+ @doc("Resolution timestamp")
100
+ @visibility(Lifecycle.Read)
101
+ @encodedName("application/json", "resolved_at")
102
+ resolvedAt?: utcDateTime;
103
+
104
+ @doc("Resolved by")
105
+ @visibility(Lifecycle.Read)
106
+ @encodedName("application/json", "resolved_by")
107
+ resolvedBy?: string;
108
+
109
+ @doc("Number of regressions")
110
+ @visibility(Lifecycle.Read)
111
+ @encodedName("application/json", "regression_count")
112
+ regressionCount: int32;
113
+
114
+ @doc("Last associated release")
115
+ @visibility(Lifecycle.Read)
116
+ @encodedName("application/json", "last_release")
117
+ lastRelease?: string;
118
+
119
+ @doc("Issue tags")
120
+ @visibility(Lifecycle.Read)
121
+ @encodedName("application/json", "tags_json")
122
+ tagsJson?: string;
123
+
124
+ @doc("Issue metadata")
125
+ @visibility(Lifecycle.Read)
126
+ @encodedName("application/json", "metadata_json")
127
+ metadataJson?: string;
128
+
129
+ @doc("Creation timestamp")
130
+ @visibility(Lifecycle.Read)
131
+ @encodedName("application/json", "created_at")
132
+ createdAt: utcDateTime;
133
+
134
+ @doc("Last update timestamp")
135
+ @visibility(Lifecycle.Read)
136
+ @encodedName("application/json", "updated_at")
137
+ updatedAt: utcDateTime;
138
+ }
139
+
140
+ @doc("Issue severity level")
141
+ enum IssueLevel {
142
+ @doc("Debug level")
143
+ debug: "debug",
144
+
145
+ @doc("Info level")
146
+ info: "info",
147
+
148
+ @doc("Warning level")
149
+ warning: "warning",
150
+
151
+ @doc("Error level")
152
+ error: "error",
153
+
154
+ @doc("Fatal/critical level")
155
+ fatal: "fatal",
156
+ }
157
+
158
+ @doc("Issue lifecycle status")
159
+ enum IssueStatus {
160
+ @doc("Unresolved/new")
161
+ unresolved: "unresolved",
162
+
163
+ @doc("Acknowledged by team")
164
+ acknowledged: "acknowledged",
165
+
166
+ @doc("Being investigated")
167
+ investigating: "investigating",
168
+
169
+ @doc("Fix in progress")
170
+ inProgress: "in_progress",
171
+
172
+ @doc("Resolved")
173
+ resolved: "resolved",
174
+
175
+ @doc("Ignored")
176
+ ignored: "ignored",
177
+
178
+ @doc("Regressed after resolution")
179
+ regressed: "regressed",
180
+ }
181
+
182
+ @doc("Issue priority")
183
+ enum IssuePriority {
184
+ @doc("Critical priority")
185
+ critical: "critical",
186
+
187
+ @doc("High priority")
188
+ high: "high",
189
+
190
+ @doc("Medium priority")
191
+ medium: "medium",
192
+
193
+ @doc("Low priority")
194
+ low: "low",
195
+ }
196
+
197
+ // =============================================================================
198
+ // Error Issue Event
199
+ // =============================================================================
200
+
201
+ @doc("Individual error occurrence linked to an issue")
202
+ @extension("x-csharp-type", "ErrorIssueEventEntity")
203
+ model ErrorIssueEventEntity {
204
+ @doc("Event ID")
205
+ @key
206
+ id: string;
207
+
208
+ @doc("Parent issue")
209
+ @encodedName("application/json", "issue_id")
210
+ issueId: string;
211
+
212
+ @doc("Associated trace ID")
213
+ @encodedName("application/json", "trace_id")
214
+ traceId?: string;
215
+
216
+ @doc("Associated span ID")
217
+ @encodedName("application/json", "span_id")
218
+ spanId?: string;
219
+
220
+ @doc("Error message")
221
+ message?: string;
222
+
223
+ @doc("Stack trace")
224
+ @encodedName("application/json", "stack_trace")
225
+ stackTrace?: string;
226
+
227
+ @doc("Parsed stack frames")
228
+ @encodedName("application/json", "stack_frames_json")
229
+ stackFramesJson?: string;
230
+
231
+ @doc("Environment (dev, staging, prod)")
232
+ environment?: string;
233
+
234
+ @doc("Release version")
235
+ @encodedName("application/json", "release_version")
236
+ releaseVersion?: string;
237
+
238
+ @doc("Affected user ID")
239
+ @encodedName("application/json", "user_id")
240
+ userId?: string;
241
+
242
+ @doc("Client IP address")
243
+ @encodedName("application/json", "user_ip")
244
+ userIp?: string;
245
+
246
+ @doc("Request URL")
247
+ @encodedName("application/json", "request_url")
248
+ requestUrl?: string;
249
+
250
+ @doc("HTTP request method")
251
+ @encodedName("application/json", "request_method")
252
+ requestMethod?: string;
253
+
254
+ @doc("Browser info")
255
+ browser?: string;
256
+
257
+ @doc("Operating system")
258
+ os?: string;
259
+
260
+ @doc("Device info")
261
+ device?: string;
262
+
263
+ @doc("Runtime name")
264
+ runtime?: string;
265
+
266
+ @doc("Runtime version")
267
+ @encodedName("application/json", "runtime_version")
268
+ runtimeVersion?: string;
269
+
270
+ @doc("Additional context data")
271
+ @encodedName("application/json", "context_json")
272
+ contextJson?: string;
273
+
274
+ @doc("Event tags")
275
+ @encodedName("application/json", "tags_json")
276
+ tagsJson?: string;
277
+
278
+ @doc("Event timestamp")
279
+ timestamp: utcDateTime;
280
+ }
281
+
282
+ // =============================================================================
283
+ // Error Breadcrumb
284
+ // =============================================================================
285
+
286
+ @doc("Pre-error context breadcrumb")
287
+ @extension("x-csharp-type", "ErrorBreadcrumbEntity")
288
+ model ErrorBreadcrumbEntity {
289
+ @doc("Breadcrumb ID")
290
+ @key
291
+ id: string;
292
+
293
+ @doc("Parent event")
294
+ @encodedName("application/json", "event_id")
295
+ eventId: string;
296
+
297
+ @doc("Breadcrumb type")
298
+ @encodedName("application/json", "breadcrumb_type")
299
+ breadcrumbType: BreadcrumbType;
300
+
301
+ @doc("Category (e.g. http, db, ui)")
302
+ category?: string;
303
+
304
+ @doc("Breadcrumb message")
305
+ message?: string;
306
+
307
+ @doc("Severity level")
308
+ level: string;
309
+
310
+ @doc("Breadcrumb data")
311
+ @encodedName("application/json", "data_json")
312
+ dataJson?: string;
313
+
314
+ @doc("Breadcrumb timestamp")
315
+ timestamp: utcDateTime;
316
+ }
317
+
318
+ @doc("Breadcrumb types")
319
+ enum BreadcrumbType {
320
+ @doc("Navigation event")
321
+ navigation: "navigation",
322
+
323
+ @doc("HTTP request")
324
+ http: "http",
325
+
326
+ @doc("Database query")
327
+ query: "query",
328
+
329
+ @doc("User interaction")
330
+ user: "user",
331
+
332
+ @doc("Log message")
333
+ log: "log",
334
+
335
+ @doc("Error occurrence")
336
+ error: "error",
337
+
338
+ @doc("Debug information")
339
+ debug: "debug",
340
+
341
+ @doc("Default/other")
342
+ default: "default",
343
+ }
344
+
345
+ // =============================================================================
346
+ // Error Regression
347
+ // =============================================================================
348
+
349
+ @doc("Regression window across releases")
350
+ @extension("x-csharp-type", "ErrorRegressionEntity")
351
+ model ErrorRegressionEntity {
352
+ @doc("Regression ID")
353
+ @key
354
+ id: string;
355
+
356
+ @doc("Regressed issue")
357
+ @encodedName("application/json", "issue_id")
358
+ issueId: string;
359
+
360
+ @doc("Release where issue was resolved")
361
+ @encodedName("application/json", "resolved_in_release")
362
+ resolvedInRelease: string;
363
+
364
+ @doc("Release where issue regressed")
365
+ @encodedName("application/json", "regressed_in_release")
366
+ regressedInRelease: string;
367
+
368
+ @doc("Resolution timestamp")
369
+ @encodedName("application/json", "resolved_at")
370
+ resolvedAt: utcDateTime;
371
+
372
+ @doc("Regression timestamp")
373
+ @encodedName("application/json", "regressed_at")
374
+ regressedAt: utcDateTime;
375
+
376
+ @doc("Occurrences before regression")
377
+ @encodedName("application/json", "occurrence_count_before")
378
+ occurrenceCountBefore: int32;
379
+
380
+ @doc("Occurrences after regression")
381
+ @encodedName("application/json", "occurrence_count_after")
382
+ occurrenceCountAfter: int32;
383
+
384
+ @doc("Whether auto-detected")
385
+ @encodedName("application/json", "auto_detected")
386
+ autoDetected: boolean;
387
+
388
+ @doc("Detection timestamp")
389
+ @encodedName("application/json", "created_at")
390
+ createdAt: utcDateTime;
391
+ }
392
+
393
+ // =============================================================================
394
+ // Error Ownership
395
+ // =============================================================================
396
+
397
+ @doc("Code ownership rule for auto-triage")
398
+ @extension("x-csharp-type", "ErrorOwnershipEntity")
399
+ model ErrorOwnershipEntity {
400
+ @doc("Rule ID")
401
+ @key
402
+ id: string;
403
+
404
+ @doc("Owning project")
405
+ @encodedName("application/json", "project_id")
406
+ projectId: string;
407
+
408
+ @doc("Rule type (path, tag, url, module)")
409
+ @encodedName("application/json", "rule_type")
410
+ ruleType: string;
411
+
412
+ @doc("Match pattern (glob, regex, or exact)")
413
+ pattern: string;
414
+
415
+ @doc("Owner type (user, team)")
416
+ @encodedName("application/json", "owner_type")
417
+ ownerType: string;
418
+
419
+ @doc("Owner identifier")
420
+ @encodedName("application/json", "owner_id")
421
+ ownerId: string;
422
+
423
+ @doc("Rule priority (higher wins)")
424
+ priority: int32;
425
+
426
+ @doc("Creation timestamp")
427
+ @encodedName("application/json", "created_at")
428
+ createdAt: utcDateTime;
429
+
430
+ @doc("Last update timestamp")
431
+ @encodedName("application/json", "updated_at")
432
+ updatedAt: utcDateTime;
433
+ }
434
+
435
+ // =============================================================================
436
+ // Error Release Marker
437
+ // =============================================================================
438
+
439
+ @doc("Deploy marker for issue auto-transition")
440
+ @extension("x-csharp-type", "ErrorReleaseMarkerEntity")
441
+ model ErrorReleaseMarkerEntity {
442
+ @doc("Marker ID")
443
+ @key
444
+ id: string;
445
+
446
+ @doc("Owning project")
447
+ @encodedName("application/json", "project_id")
448
+ projectId: string;
449
+
450
+ @doc("Release version")
451
+ @encodedName("application/json", "release_version")
452
+ releaseVersion: string;
453
+
454
+ @doc("Target environment")
455
+ environment: string;
456
+
457
+ @doc("Git commit SHA")
458
+ @encodedName("application/json", "commit_sha")
459
+ commitSha?: string;
460
+
461
+ @doc("Commit message")
462
+ @encodedName("application/json", "commit_message")
463
+ commitMessage?: string;
464
+
465
+ @doc("Deployed by")
466
+ @encodedName("application/json", "deployed_by")
467
+ deployedBy?: string;
468
+
469
+ @doc("Issues resolved by this release")
470
+ @encodedName("application/json", "issues_resolved_count")
471
+ issuesResolvedCount: int32;
472
+
473
+ @doc("Issues regressed by this release")
474
+ @encodedName("application/json", "issues_regressed_count")
475
+ issuesRegressedCount: int32;
476
+
477
+ @doc("Deployment timestamp")
478
+ @encodedName("application/json", "deployed_at")
479
+ deployedAt: utcDateTime;
480
+
481
+ @doc("Creation timestamp")
482
+ @encodedName("application/json", "created_at")
483
+ createdAt: utcDateTime;
484
+ }